summaryrefslogtreecommitdiffstats
path: root/freed-ora/current
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/current')
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/.cvsignore12
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Entries186
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Repository1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Root1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Tag1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/Makefile298
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/config-generic4317
-rwxr-xr-xfreed-ora/current/F-13-2.6.33-branch/F-13/deblob-2.6.332096
-rwxr-xr-xfreed-ora/current/F-13-2.6.33-branch/F-13/deblob-check4749
-rwxr-xr-xfreed-ora/current/F-13-2.6.33-branch/F-13/deblob-main243
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/drm-nouveau-updates.patch9153
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/freedo.patch14673
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch50
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch476
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch398
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/kernel.spec4660
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6-p54pci.patch515
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.tar.bz2.sign7
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2bin0 -> 57970 bytes
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2.sign7
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/lirc-2.6.33.patch17438
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/mirrors6
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.bz2.sign7
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdeltabin0 -> 278 bytes
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta.sign7
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Entries25
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Repository1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Root1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Tag1
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/sources2
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/upstream2
-rw-r--r--freed-ora/current/F-13-2.6.33-branch/F-13/upstream-key.gpg1597
l---------freed-ora/current/F-13-2.6.33-branch/common1
33 files changed, 60931 insertions, 0 deletions
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/.cvsignore b/freed-ora/current/F-13-2.6.33-branch/F-13/.cvsignore
new file mode 100644
index 000000000..5873d5f50
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/.cvsignore
@@ -0,0 +1,12 @@
+clog
+.shared-srctree
+GNUmakefile
+kernel-2.6.*.config
+temp-*
+deblob-main
+deblob-2.6.33
+deblob-check
+freedo.patch
+kernel-2.6.33
+linux-2.6.33-libre.*
+patch-libre-2.6.33.6.*
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Entries b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Entries
new file mode 100644
index 000000000..8b8889c38
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Entries
@@ -0,0 +1,186 @@
+D/scripts////
+/linux-2.6.33.tar.bz2.sign/-1.1/Wed Feb 24 19:34:33 2010//Tkernel-2_6_33-1_fc13
+/patch-2.6.33.6.bz2.sign/-1.1/Tue Jul 6 08:17:20 2010//Tkernel-2_6_33_6-146_fc13
+/Makefile/1.123/dummy timestamp from new-entry//Tkernel-2_6_33_6-147_fc13
+/Makefile.config/1.75/Thu Jun 17 14:04:26 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/TODO/1.68/Thu Jun 17 14:04:26 2010//Tkernel-2_6_33_6-147_fc13
+/acpi-ec-add-delay-before-write.patch/1.1/Thu Jun 17 14:04:26 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/add-appleir-driver.patch/1.1/Thu Jun 17 14:04:27 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/alsa-usbmixer-add-possibility-to-remap-dB-values.patch/1.1/Thu Jun 17 14:04:27 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/branch/1.1/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/btrfs-prohibit-a-operation-of-changing-acls-mask-when-noacl-mount-option-is-used.patch/1.1/Thu Jun 17 14:04:27 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/config-arm/1.7/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-debug/1.39/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-generic/1.366/dummy timestamp from new-entry//Tkernel-2_6_33_6-147_fc13
+/config-i686-PAE/1.3/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-ia64-generic/1.27/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-nodebug/1.52/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-powerpc-generic/1.54/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-powerpc32-generic/1.37/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-powerpc32-smp/1.2/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-powerpc64/1.37/Sun Jul 4 06:59:32 2010//Tkernel-2_6_33_6-147_fc13
+/config-rhel-generic/1.17/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-s390x/1.22/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-sparc64-generic/1.32/Thu Jun 17 14:04:27 2010//Tkernel-2_6_33_6-147_fc13
+/config-x86-generic/1.95/Sun Jul 4 06:59:32 2010//Tkernel-2_6_33_6-147_fc13
+/config-x86_64-generic/1.106/Fri Jun 18 16:04:21 2010//Tkernel-2_6_33_6-147_fc13
+/crypto-aesni-kill-module_alias.patch/1.1/Thu Jun 17 14:04:27 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/crystalhd-2.6.34-staging.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/die-floppy-die.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/disable-i8042-check-on-apple-mac.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-1024x768-85.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-connection-cache.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-core-next.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-i915-fix-edp-panels.patch/1.2/Tue Jun 29 17:31:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-i915-fix-hibernate-memory-corruption.patch/1.1/Fri Jul 2 00:28:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-i915-fix-non-ironlake-965-class-crashes.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-i915-use-pipe_control-instruction-on-ironlake-and-sandy-bridge.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-big-hammer.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-gen5-dither.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-make-lvds-work.patch/1.2/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-next.patch/1.13/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-sdvo-fix-2.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-intel-sdvo-fix.patch/1.1/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-nouveau-abi16.patch/1.3/Thu Jun 17 14:04:28 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-nouveau-acpi-edid-fallback.patch/1.4/Sun Jul 4 06:59:34 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-nouveau-drm-fixed-header.patch/1.2/Sun Jul 4 06:59:34 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-nouveau-updates.patch/1.12/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-radeon-evergreen.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-radeon-firemv-pciid.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-radeon-fix-rs600-tlb.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-radeon-kms-fix-dual-link-dvi.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/drm-radeon-ss-fix.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/ethtool-fix-buffer-overflow.patch/1.1/Tue Jul 6 14:02:15 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/ext4-issue-discard-operation-before-releasing-blocks.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/find-provides/1.18/Thu Jun 17 14:04:29 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/fix-9p-fscache.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/fix_xen_guest_on_old_EC2.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/gen-patches/1.6/Thu Jun 17 14:04:29 2010//Tkernel-2_6_33_6-147_fc13
+/genkey/1.6/Thu Jun 17 14:04:29 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/git-bluetooth.patch/1.5/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/git-cpufreq.patch/1.6/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/git-linus.diff/1.23/Thu Jun 17 14:04:29 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/hda_intel-prealloc-4mb-dmabuffer.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/hdpvr-ir-enable.patch/1.8/Thu Jul 8 05:09:49 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/ibmvscsi-fix-DMA-API-misuse.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi-cancel-scan-watchdog-in-iwl_bg_abort_scan.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi-fix-internal-scan-race.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi-fix-scan-races.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi-manage-QoS-by-mac-stack.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi-recover_from_tx_stall.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch/1.1/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-Logic-to-control-how-frequent-radio-should-be-reset-if-needed.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-Recover-TX-flow-failure.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch/1.1/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch/1.1/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-add-function-to-reset_tune-radio-if-needed.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-add-internal-short-scan-support-for-3945.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-code-cleanup-for-connectivity-recovery.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-iwl_good_ack_health-only-apply-to-AGN-device.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-move-plcp-check-to-separated-function.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-multiple-force-reset-mode.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/iwlwifi_-separated-time-check-for-different-type-of-force-reset.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/kabitool/1.1/Thu Jun 17 14:04:29 2010//Tkernel-2_6_33_6-147_fc13
+/kernel.spec/1.2084/Result of merge+Thu Jul 8 05:09:59 2010//Tkernel-2_6_33_6-147_fc13
+/linux-2.6-acpi-indirect_fan_control.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-acpi-sleep-live-sci-live.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-acpi-video-dos.patch/1.3/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-acpi-video-export-edid.patch/1.1/Thu Jun 17 14:04:29 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-ata-quirk.patch/1.2/Thu Jun 17 14:04:30 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-btrfs-update.patch/1.1/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-build-nonintconfig.patch/1.17/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-compile-fixes.patch/1.195/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-cpufreq-locking.patch/1.1/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-crash-driver.patch/1.16/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-debug-always-inline-kzalloc.patch/1.2/Thu Jun 17 14:04:31 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-debug-nmi-timeout.patch/1.6/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-debug-sizeof-structs.patch/1.8/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-debug-taint-vm.patch/1.25/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-debug-vm-would-have-oomkilled.patch/1.7/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-defaults-acpi-video.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-defaults-aspm.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-defaults-pci_no_msi.patch/1.6/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-defaults-pciehp.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-dell-laptop-rfkill-fix.patch/1.2/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-driver-level-usb-autosuspend.diff/1.4/Thu Jun 17 14:04:33 2010//Tkernel-2_6_33_6-147_fc13
+/linux-2.6-enable-btusb-autosuspend.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-execshield.patch/1.117/Fri Jun 18 16:04:30 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-firewire-git-pending.patch/1.35/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-firewire-git-update.patch/1.20/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-fix-btusb-autosuspend.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-fix-usb-serial-autosuspend.diff/1.2/Thu Jun 17 14:04:33 2010//Tkernel-2_6_33_6-147_fc13
+/linux-2.6-g5-therm-shutdown.patch/1.1/Thu Jun 17 14:04:33 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-hotfixes.patch/1.5/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-input-clickpad-support.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-input-fix-toshiba-hotkeys.patch/1.1/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-input-hid-quirk-egalax.patch/1.2/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-input-kill-stupid-messages.patch/1.5/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-intel-iommu-igfx.patch/1.2/Thu Jun 17 14:04:33 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-mac80211-age-scan-results-on-resume.patch/1.1/Thu Jun 17 14:04:34 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-makefile-after_link.patch/1.2/Thu Jun 17 14:04:34 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-nfs4-callback-hidden.patch/1.1/Thu Jun 17 14:04:34 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-p54pci.patch/1.2/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-pciehp-update.patch/1.7/Thu Jun 17 14:04:35 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-phylib-autoload.patch/1.2/Thu Jun 17 14:04:35 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-qcserial-autosuspend.diff/1.1/Thu Jun 17 14:04:36 2010//Tkernel-2_6_33_6-147_fc13
+/linux-2.6-rfkill-all.patch/1.3/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-selinux-avtab-size.patch/1.1/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-selinux-mprotect-checks.patch/1.8/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-serial-460800.patch/1.3/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-silence-acpi-blacklist.patch/1.2/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-silence-fbcon-logo.patch/1.2/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-silence-noise.patch/1.22/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-sparc-selinux-mprotect-checks.patch/1.2/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-tracehook.patch/1.13/Thu Jun 17 14:04:36 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-umh-refactor.patch/1.1/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-upstream-reverts.patch/1.12/Sun Jul 4 06:59:47 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-usb-uvc-autosuspend.diff/1.1/Thu Jun 17 14:04:37 2010//Tkernel-2_6_33_6-147_fc13
+/linux-2.6-usb-wwan-update.patch/1.2/Sun Jul 4 06:59:47 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-utrace-ptrace.patch/1.3/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-utrace.patch/1.124/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-add-kworld-a340-support.patch/1.1/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-add-lgdt3304-support.patch/1.1/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-experimental.patch/1.9/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-fixes.patch/1.14/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-gspca-fixes.patch/1.2/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-rebase-gspca-to-latest.patch/1.3/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-v4l-dvb-update.patch/1.15/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-vio-modalias.patch/1.2/Thu Jun 17 14:04:37 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-x86-64-fbdev-primary.patch/1.1/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6-x86-cfi_sections.patch/1.1/Thu Jun 17 14:04:37 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6.29-sparc-IOC_TYPECHECK.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6.30-hush-rom-warning.patch/1.3/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/linux-2.6.30-no-pcspkr-modalias.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/lirc-2.6.33.patch/1.6/dummy timestamp from new-entry/-kb/Tkernel-2_6_33_6-147_fc13
+/mac80211-do-not-wipe-out-old-supported-rates.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/mac80211-explicitly-disable-enable-QoS.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/merge.pl/1.9/Thu Jun 17 14:04:38 2010/-ko/Tkernel-2_6_33_6-147_fc13
+/mirrors/1.6/dummy timestamp from new-entry//Tkernel-2_6_33_6-147_fc13
+/neuter_intel_microcode_load.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/noautobuild/1.2/Thu Jun 17 14:04:38 2010//Tkernel-2_6_33_6-147_fc13
+/ntrig-backport.patch/1.1/Thu Jun 17 14:04:38 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/perf/1.6/Thu Jun 17 14:04:41 2010//Tkernel-2_6_33_6-147_fc13
+/perf-mount-debugfs-automatically.patch/1.1/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/prevent-runtime-conntrack-changes.patch/1.1/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/rt2x00-rt2800-Make-rt30xx-and-rt35xx-chipsets-configurable.patch/1.1/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/sched-fix-over-scheduling-bug.patch/1.1/Tue Jul 6 13:47:18 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/ssb_check_for_sprom.patch/1.2/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/thinkpad-acpi-add-x100e.patch/1.2/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/thinkpad-acpi-fix-backlight.patch/1.1/Thu Jun 17 14:04:41 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/upstream-key.gpg/1.1/dummy timestamp from new-entry//Tkernel-2_6_33_6-147_fc13
+/vhost_net-rollup.patch/1.2/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/vhost_net-rollup2.patch/1.1/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/virt_console-fix-fix-race.patch/1.1/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/virt_console-fix-race.patch/1.2/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/virt_console-rollup.patch/1.2/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/virt_console-rollup2.patch/1.1/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/writeback-ensure-wb-sync-none-writeback-with-sb-pinned-is-sync.patch/1.1/Thu Jun 17 14:04:42 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/writeback-fix-wb-sync-none-writeback-from-umount.patch/1.1/Thu Jun 17 14:04:43 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/writeback-update-dirty-flags-in-two-steps.patch/1.1/Thu Jun 17 14:04:43 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/x86-debug-clear-reserved-bits-of-dr6.patch/1.1/Tue Jul 6 15:53:43 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/x86-debug-send-sigtrap-for-user-icebp.patch/1.1/Tue Jul 6 15:53:43 2010/-kb/Tkernel-2_6_33_6-147_fc13
+/.cvsignore/1.1180/Thu Jul 8 05:11:28 2010//Tkernel-2_6_33_6-147_fc13
+/sources/1.1139/Thu Jul 8 05:11:28 2010//Tkernel-2_6_33_6-147_fc13
+/upstream/1.1052/Thu Jul 8 05:11:28 2010//Tkernel-2_6_33_6-147_fc13
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Repository b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Repository
new file mode 100644
index 000000000..a1d6250f1
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Repository
@@ -0,0 +1 @@
+rpms/kernel/F-13
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Root b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Root
new file mode 100644
index 000000000..d426f1a67
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs.fedoraproject.org.:/cvs/pkgs
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Tag b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Tag
new file mode 100644
index 000000000..ddc99821e
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/CVS/Tag
@@ -0,0 +1 @@
+Nkernel-2_6_33_6-147_fc13
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/Makefile b/freed-ora/current/F-13-2.6.33-branch/F-13/Makefile
new file mode 100644
index 000000000..f082344ee
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/Makefile
@@ -0,0 +1,298 @@
+# Makefile for source rpm: kernel
+# $Id: Makefile,v 1.123 2010/01/18 23:53:28 davej Exp $
+NAME := kernel
+SPECFILE := kernel.spec
+
+# use noarch for make prep instead of the current CPU
+# noarch creates and checks all config files not just the current one,
+# in addition "i386" isn't a valid kernel target
+PREPARCH = noarch
+
+# we only check the .sign signatures
+UPSTREAM_CHECKS = sign
+
+# local targets we need to carry around in addition to the default sources
+TARGETS = download
+
+define find-makefile-common
+for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update >/dev/null ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
+endef
+
+MAKEFILE_COMMON := $(shell $(find-makefile-common))
+
+ifeq ($(MAKEFILE_COMMON),)
+# attept a checkout
+define checkout-makefile-common
+test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
+endef
+
+MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
+endif
+
+include $(MAKEFILE_COMMON)
+include Makefile.config
+
+ifndef KVERSION
+KVERSION := $(shell awk '$$1 == "%define" && $$2 == "base_sublevel" { \
+ print "2.6." $$3 \
+ }' $(SPECFILE))
+endif
+
+extremedebug:
+ @perl -pi -e 's/# CONFIG_DEBUG_PAGEALLOC is not set/CONFIG_DEBUG_PAGEALLOC=y/' config-nodebug
+
+debug:
+ @perl -pi -e 's/# CONFIG_SLUB_DEBUG_ON is not set/CONFIG_SLUB_DEBUG_ON=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_LOCK_STAT is not set/CONFIG_LOCK_STAT=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_STACK_USAGE is not set/CONFIG_DEBUG_STACK_USAGE=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_SLAB is not set/CONFIG_DEBUG_SLAB=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_MUTEXES is not set/CONFIG_DEBUG_MUTEXES=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_RT_MUTEXES is not set/CONFIG_DEBUG_RT_MUTEXES=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_RWSEMS is not set/CONFIG_DEBUG_RWSEMS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_LOCK_ALLOC is not set/CONFIG_DEBUG_LOCK_ALLOC=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_PROVE_LOCKING is not set/CONFIG_PROVE_LOCKING=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_SPINLOCK is not set/CONFIG_DEBUG_SPINLOCK=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_VM is not set/CONFIG_DEBUG_VM=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/CONFIG_DEBUG_SLEEP_IN_IRQ=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAULT_INJECTION is not set/CONFIG_FAULT_INJECTION=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAILSLAB is not set/CONFIG_FAILSLAB=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAIL_PAGE_ALLOC is not set/CONFIG_FAIL_PAGE_ALLOC=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAIL_IO_TIMEOUT is not set/CONFIG_FAIL_IO_TIMEOUT=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAIL_MAKE_REQUEST is not set/CONFIG_FAIL_MAKE_REQUEST=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/CONFIG_FAULT_INJECTION_DEBUG_FS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_SG is not set/CONFIG_DEBUG_SG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_WRITECOUNT is not set/CONFIG_DEBUG_WRITECOUNT=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_OBJECTS is not set/CONFIG_DEBUG_OBJECTS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_FREE is not set/CONFIG_DEBUG_OBJECTS_FREE=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/CONFIG_DEBUG_OBJECTS_TIMERS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_X86_PTDUMP is not set/CONFIG_X86_PTDUMP=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_CAN_DEBUG_DEVICES is not set/CONFIG_CAN_DEBUG_DEVICES=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_MODULE_FORCE_UNLOAD is not set/CONFIG_MODULE_FORCE_UNLOAD=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/CONFIG_SYSCTL_SYSCALL_CHECK=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_NOTIFIERS is not set/CONFIG_DEBUG_NOTIFIERS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DMA_API_DEBUG is not set/CONFIG_DMA_API_DEBUG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_PM_TEST_SUSPEND is not set/CONFIG_PM_TEST_SUSPEND=y/' config-generic
+ @perl -pi -e 's/# CONFIG_BOOT_TRACER is not set/CONFIG_BOOT_TRACER=y/' config-generic
+ @perl -pi -e 's/# CONFIG_B43_DEBUG is not set/CONFIG_B43_DEBUG=y/' config-generic
+ @perl -pi -e 's/# CONFIG_B43LEGACY_DEBUG is not set/CONFIG_B43LEGACY_DEBUG=y/' config-generic
+ @perl -pi -e 's/# CONFIG_MMIOTRACE is not set/CONFIG_MMIOTRACE=y/' config-nodebug
+ @perl -pi -e 's/CONFIG_STRIP_ASM_SYMS=y/# CONFIG_STRIP_ASM_SYMS is not set/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_CREDENTIALS is not set/CONFIG_DEBUG_CREDENTIALS=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_ACPI_DEBUG is not set/CONFIG_ACPI_DEBUG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_EXT4_DEBUG is not set/CONFIG_EXT4_DEBUG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/CONFIG_DEBUG_PERF_USE_VMALLOC=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_JBD2_DEBUG is not set/CONFIG_JBD2_DEBUG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_FUNCTION_TRACER is not set/CONFIG_FUNCTION_TRACER=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_STACK_TRACER is not set/CONFIG_STACK_TRACER=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DYNAMIC_FTRACE is not set/CONFIG_DYNAMIC_FTRACE=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_CFQ_IOSCHED is not set/CONFIG_DEBUG_CFQ_IOSCHED=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DRBD_FAULT_INJECTION is not set/CONFIG_DRBD_FAULT_INJECTION=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_ATH_DEBUG is not set/CONFIG_ATH_DEBUG=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/CONFIG_IWLWIFI_DEVICE_TRACING=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_WORK is not set/CONFIG_DEBUG_OBJECTS_WORK=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/' config-nodebug
+
+ @# just in case we're going from extremedebug -> debug
+ @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
+
+ @perl -pi -e 's/CONFIG_NR_CPUS=256/CONFIG_NR_CPUS=512/' config-x86_64-generic
+
+ @perl -pi -e 's/^%define debugbuildsenabled 1/%define debugbuildsenabled 0/' kernel.spec
+ @perl -pi -e 's/^%define rawhide_skip_docs 0/%define rawhide_skip_docs 1/' kernel.spec
+
+release:
+ @perl -pi -e 's/CONFIG_SLUB_DEBUG_ON=y/# CONFIG_SLUB_DEBUG_ON is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_LOCK_STAT=y/# CONFIG_LOCK_STAT is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_STACK_USAGE=y/# CONFIG_DEBUG_STACK_USAGE is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_SLAB=y/# CONFIG_DEBUG_SLAB is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_MUTEXES=y/# CONFIG_DEBUG_MUTEXES is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_RT_MUTEXES=y/# CONFIG_DEBUG_RT_MUTEXES is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_RWSEMS=y/# CONFIG_DEBUG_RWSEMS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_LOCK_ALLOC=y/# CONFIG_DEBUG_LOCK_ALLOC is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_PROVE_LOCKING=y/# CONFIG_PROVE_LOCKING is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_SPINLOCK=y/# CONFIG_DEBUG_SPINLOCK is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_VM=y/# CONFIG_DEBUG_VM is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_SLEEP_IN_IRQ=y/# CONFIG_DEBUG_SLEEP_IN_IRQ is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAULT_INJECTION=y/# CONFIG_FAULT_INJECTION is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAILSLAB=y/# CONFIG_FAILSLAB is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAIL_PAGE_ALLOC=y/# CONFIG_FAIL_PAGE_ALLOC is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAIL_IO_TIMEOUT=y/# CONFIG_FAIL_IO_TIMEOUT is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAIL_MAKE_REQUEST=y/# CONFIG_FAIL_MAKE_REQUEST is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAULT_INJECTION_DEBUG_FS=y/# CONFIG_FAULT_INJECTION_DEBUG_FS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y/# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_SG=y/# CONFIG_DEBUG_SG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_WRITECOUNT=y/# CONFIG_DEBUG_WRITECOUNT is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_OBJECTS=y/# CONFIG_DEBUG_OBJECTS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_OBJECTS_FREE=y/# CONFIG_DEBUG_OBJECTS_FREE is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_OBJECTS_TIMERS=y/# CONFIG_DEBUG_OBJECTS_TIMERS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_X86_PTDUMP=y/# CONFIG_X86_PTDUMP is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_CAN_DEBUG_DEVICES=y/# CONFIG_CAN_DEBUG_DEVICES is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_MODULE_FORCE_UNLOAD=y/# CONFIG_MODULE_FORCE_UNLOAD is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_SYSCTL_SYSCALL_CHECK=y/# CONFIG_SYSCTL_SYSCALL_CHECK is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_NOTIFIERS=y/# CONFIG_DEBUG_NOTIFIERS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DMA_API_DEBUG=y/# CONFIG_DMA_API_DEBUG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_PM_TEST_SUSPEND=y/#\ CONFIG_PM_TEST_SUSPEND\ is\ not\ set/' config-generic
+ @perl -pi -e 's/CONFIG_BOOT_TRACER=y/#\ CONFIG_BOOT_TRACER\ is\ not\ set/' config-generic
+ @perl -pi -e 's/CONFIG_B43_DEBUG=y/# CONFIG_B43_DEBUG is not set/' config-generic
+ @perl -pi -e 's/CONFIG_B43LEGACY_DEBUG=y/# CONFIG_B43LEGACY_DEBUG is not set/' config-generic
+ @perl -pi -e 's/CONFIG_MMIOTRACE=y/# CONFIG_MMIOTRACE is not set/' config-nodebug
+ @perl -pi -e 's/# CONFIG_STRIP_ASM_SYMS is not set/CONFIG_STRIP_ASM_SYMS=y/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_CREDENTIALS=y/# CONFIG_DEBUG_CREDENTIALS is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y/# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_ACPI_DEBUG=y/# CONFIG_ACPI_DEBUG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_EXT4_DEBUG=y/# CONFIG_EXT4_DEBUG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_PERF_USE_VMALLOC=y/# CONFIG_DEBUG_PERF_USE_VMALLOC is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_JBD2_DEBUG=y/# CONFIG_JBD2_DEBUG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_FUNCTION_TRACER=y/# CONFIG_FUNCTION_TRACER is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_STACK_TRACER=y/# CONFIG_STACK_TRACER is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DYNAMIC_FTRACE=y/# CONFIG_DYNAMIC_FTRACE is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_CFQ_IOSCHED=y/# CONFIG_DEBUG_CFQ_IOSCHED is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DRBD_FAULT_INJECTION=y/# CONFIG_DRBD_FAULT_INJECTION is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_ATH_DEBUG=y/# CONFIG_ATH_DEBUG is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_IWLWIFI_DEVICE_TRACING=y/# CONFIG_IWLWIFI_DEVICE_TRACING is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_OBJECTS_WORK=y/# CONFIG_DEBUG_OBJECTS_WORK is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y/# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set/' config-nodebug
+
+ @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
+ @perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
+
+ @perl -pi -e 's/CONFIG_NR_CPUS=512/CONFIG_NR_CPUS=256/' config-x86_64-generic
+
+ @perl -pi -e 's/^%define debugbuildsenabled 0/%define debugbuildsenabled 1/' kernel.spec
+ @perl -pi -e 's/^%define rawhide_skip_docs 1/%define rawhide_skip_docs 0/' kernel.spec
+
+reconfig:
+ @rm -f kernel-*-config
+ @VERSION=$(KVERSION) make -f Makefile.config configs
+ @scripts/reconfig.sh
+
+force-tag: $(SPECFILE) $(COMMON_DIR)/branches
+ @$(MAKE) tag TAG_OPTS="-F $(TAG_OPTS)"
+
+unused-kernel-patches:
+ @for f in *.patch; do if [ -e $$f ]; then (egrep -q "^Patch[[:digit:]]+:[[:space:]]+$$f" $(SPECFILE) || echo "Unused: $$f") && egrep -q "^ApplyPatch[[:space:]]+$$f|^ApplyOptionalPatch[[:space:]]+$$f" $(SPECFILE) || echo "Unapplied: $$f"; fi; done
+
+# since i386 isn't a target...
+compile compile-short: DIST_DEFINES += --target $(shell uname -m)
+
+# 'make local' also needs to build the noarch firmware package
+local: noarch
+
+#
+# Hacks for building vanilla (unpatched) kernel rpms.
+# Use "make vanilla-TARGET" like "make TARGET" (make vanilla-scratch-build).
+#
+vanilla-%: $(SPECFILE:.spec=-vanilla.spec)
+ @$(MAKE) $* SPECFILE=$<
+
+$(SPECFILE:.spec=-vanilla.spec): $(SPECFILE)
+ @rm -f $@
+ (echo %define nopatches 1; cat $<) > $@
+
+#scratch-build: NAME = $(shell rpm $(RPM_DEFINES) $(DIST_DEFINES) -q --qf "%{NAME}\n" --specfile $(SPECFILE)| head -1)
+#scratch-build: test-srpm
+# $(BUILD_CLIENT) build $(BUILD_FLAGS) --scratch $(TARGET) \
+# $(SRCRPMDIR)/$(NAME)-$(VERSION)-$(RELEASE).src.rpm
+
+# Dismal kludge for building via brew from cvs after "make vanilla-tag".
+ifdef BEEHIVE_SRPM_BUILD
+export CHECKOUT_TAG ?= $(shell sed s/^.// CVS/Tag)
+tag-pattern = $(TAG_NAME)-$(TAG_VERSION)-0_%_$(TAG_RELEASE)
+ifeq (,$(filter-out $(tag-pattern),$(CHECKOUT_TAG)))
+variant := $(patsubst $(tag-pattern),%,$(CHECKOUT_TAG))
+srpm: SPECFILE := $(wildcard $(SPECFILE:.spec=-$(variant).spec) \
+ $(SPECFILE:.spec=.t.$(variant).spec))
+srpm beehive-sprm: RELEASE := 0.$(variant).$(RELEASE)
+endif
+endif
+
+#
+# Hacks for building kernel rpms from upstream code plus local GIT branches.
+# Use "make git/BRANCH/TARGET" like "make TARGET".
+# Use "make git/BRANCH-fedora/TARGET" to include Fedora patches on top.
+#
+ifndef GIT_SPEC
+git/%:
+ @$(MAKE) GIT_SPEC=$(subst /,-,$(*D)) git-$(*F)
+else
+git-%: $(SPECFILE:.spec=.t.$(GIT_SPEC).spec)
+ @$(MAKE) GIT_SPEC= $* SPECFILE=$<
+endif
+
+#
+# Your git-branches.mk file can define GIT_DIR, e.g.:
+# GIT_DIR = ${HOME}/kernel/.git
+# Make sure GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL are also set
+# or your rpm changelogs will look like crap.
+#
+# For each branch it can define a variable branch-BRANCH or tag-BRANCH
+# giving the parent of BRANCH to diff against in a separate patch. If
+# the parent is unknown, it will use $(branch-upstream) defaulting to
+# "refs/remotes/upstream/master".
+#
+# Defining tag-BRANCH means the tag corresponds to an upstream patch in
+# the sources file, so that is used instead of generating a patch with
+# git. If there is no tag-upstream defined, it will figure out a vNNN
+# tag or vNNN-gitN pseudo-tag from the last patch in the sources file.
+# For example:
+# tag-some-hacks = v2.6.21-rc5
+# branch-more-hacks = some-hacks
+# Leads to patches:
+# git diff v2.6.21-rc5..more-hacks > linux-2.6.21-rc5-some-hacks.patch
+# git diff some-hacks..more-hacks > linux-2.6.21-rc5-more-hacks.patch
+# Whereas having no git-branches.mk at all but doing
+# "make GIT_DIR=... git/mybranch/test-srpm" does:
+# id=`cat patch-2.6.21-rc5-git4.id` # auto-fetched via upstream file
+# git diff $id..upstream > linux-2.6.21-rc5-git4-upstream.patch
+# git diff upstream..mybranch > linux-2.6.21-rc5-git4-mybranch.patch
+# If the upstream patch (or any branch patch) is empty it's left out.
+#
+git-branches.mk:;
+-include git-branches.mk
+
+branch-upstream ?= refs/remotes/upstream/master
+
+ifdef GIT_DIR
+export GIT_DIR
+export GIT_AUTHOR_NAME
+export GIT_AUTHOR_EMAIL
+gen-patches ?= gen-patches
+
+ifndef havespec
+$(SPECFILE:.spec=.t.%-fedora.spec): $(SPECFILE) $(gen-patches) FORCE
+ ./$(gen-patches) --fedora < $< > $@ $(gen-patches-args)
+$(SPECFILE:.spec=.t.%.spec): $(SPECFILE) $(gen-patches) FORCE
+ ./$(gen-patches) < $< > $@ $(gen-patches-args)
+.PRECIOUS: $(SPECFILE:.spec=.t.%.spec) $(SPECFILE:.spec=.t.%-fedora.spec)
+endif
+
+spec-%: $(SPECFILE:.spec=.t.%.spec) ;
+$(SPECFILE):;
+FORCE:;
+
+branch-of-* = $(firstword $(head-$*) $*)
+gen-patches-args = --name $* v$(KVERSION) $(call heads,$(branch-of-*))
+define heads
+$(if $(tag-$1),$(filter-out v$(KVERSION),$(tag-$1)),\
+ $(call heads,$(firstword $(branch-$1) $(branch-upstream)))) $1
+endef
+
+files-%-fedora:
+ @echo $(SPECFILE:.spec=.t.$*-fedora.spec)
+ @$(call list-patches,$(branch-of-*))
+files-%:
+ @echo $(SPECFILE:.spec=.t.$*.spec)
+ @$(call list-patches,$(branch-of-*))
+define list-patches
+$(if $(tag-$1),version=$(patsubst v%,%,$(tag-$1)),\
+ $(call list-patches,$(firstword $(branch-$1) $(branch-upstream)))); \
+echo linux-$${version}-$(patsubst refs/remotes/%/master,%,$1).patch
+endef
+
+ifndef tag-$(branch-upstream)
+tag-$(branch-upstream) := $(shell \
+ sed -n 's/^.* *//;s/\.bz2$$//;s/patch-/v/;/^v/h;$${g;p}' sources)
+endif
+endif
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/config-generic b/freed-ora/current/F-13-2.6.33-branch/F-13/config-generic
new file mode 100644
index 000000000..0dfa5d7d3
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/config-generic
@@ -0,0 +1,4317 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_MMU=y
+CONFIG_SMP=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_LOCALVERSION=""
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_HOTPLUG=y
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+
+CONFIG_BUILD_DOCSRC=y
+
+#
+# General setup
+#
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_SYSCTL=y
+CONFIG_LOG_BUF_SHIFT=17
+# CONFIG_IKCONFIG is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_KALLSYMS_STRIP_GENERATED=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_CFQ_GROUP_IOSCHED=y
+CONFIG_DEFAULT_CFQ=y
+CONFIG_USER_NS=y
+CONFIG_PID_NS=y
+CONFIG_UTS_NS=y
+CONFIG_IPC_NS=y
+CONFIG_NET_NS=y
+
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_VOLUNTARY=y
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+
+CONFIG_SLUB=y
+# CONFIG_SLUB_STATS is not set
+
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+CONFIG_IWMC3200TOP=m
+# CONFIG_IWMC3200TOP_DEBUG is not set
+CONFIG_IWMC3200TOP_DEBUGFS=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+# -- MODULE_FORCE_UNLOAD is controlled by config-debug/nodebug
+# CONFIG_MODVERSIONS is not set
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_PCI_STUB=y
+CONFIG_PCI_IOV=y
+CONFIG_HT_IRQ=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_MSI_DEFAULT_ON=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIE_ECRC=y
+CONFIG_PCIEAER_INJECT=m
+CONFIG_HOTPLUG_PCI_PCIE=y
+CONFIG_HOTPLUG_PCI_FAKE=m
+CONFIG_PCI_LEGACY=y
+
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_YENTA=m
+CONFIG_CARDBUS=y
+CONFIG_I82092=m
+CONFIG_PD6729=m
+CONFIG_PCMCIA_IOCTL=y
+
+CONFIG_PCCARD=y
+CONFIG_MMC=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=m
+# CONFIG_MMC_TEST is not set
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_SDHCI=m
+CONFIG_MMC_SDHCI_PCI=m
+CONFIG_MMC_SDRICOH_CS=m
+CONFIG_MMC_TIFM_SD=m
+CONFIG_MMC_WBSD=m
+CONFIG_MMC_VIA_SDMMC=m
+CONFIG_MMC_SDHCI_PLTFM=m
+CONFIG_MMC_CB710=m
+
+CONFIG_CB710_CORE=m
+# CONFIG_CB710_DEBUG is not set
+
+CONFIG_INFINIBAND=m
+CONFIG_INFINIBAND_MTHCA=m
+# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
+CONFIG_INFINIBAND_IPOIB=m
+CONFIG_INFINIBAND_IPOIB_DEBUG=y
+CONFIG_INFINIBAND_IPOIB_DEBUG_DATA=y
+CONFIG_INFINIBAND_IPOIB_CM=y
+CONFIG_INFINIBAND_SRP=m
+CONFIG_INFINIBAND_USER_MAD=m
+CONFIG_INFINIBAND_USER_ACCESS=m
+CONFIG_INFINIBAND_IPATH=m
+CONFIG_INFINIBAND_ISER=m
+CONFIG_INFINIBAND_AMSO1100=m
+# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+CONFIG_INFINIBAND_CXGB3=m
+# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
+CONFIG_MLX4_INFINIBAND=m
+CONFIG_INFINIBAND_NES=m
+# CONFIG_INFINIBAND_NES_DEBUG is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_FW_LOADER=y
+# CONFIG_FIRMWARE_IN_KERNEL is not set
+CONFIG_EXTRA_FIRMWARE=""
+
+# CONFIG_SPI is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_AR7_PARTS=m
+CONFIG_MTD_CONCAT=m
+CONFIG_MTD_CMDLINE_PARTS=y
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=m
+CONFIG_MTD_BLOCK_RO=m
+CONFIG_MTD_BLOCK2MTD=m
+
+CONFIG_MTD_OOPS=m
+# CONFIG_MTD_INTEL_VR_NOR is not set
+CONFIG_MTD_ALAUDA=m
+
+CONFIG_FTL=m
+CONFIG_NFTL=m
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=m
+
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+# CONFIG_MTD_UBI_DEBUG is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PNC2000 is not set
+CONFIG_MTD_SC520CDP=m
+CONFIG_MTD_NETSC520=m
+# CONFIG_MTD_SBC_GXX is not set
+# CONFIG_MTD_SCx200_DOCFLASH is not set
+# CONFIG_MTD_AMD76XROM is not set
+CONFIG_MTD_SCB2_FLASH=m
+# CONFIG_MTD_NETtel is not set
+# CONFIG_MTD_DILNETPC is not set
+# CONFIG_MTD_L440GX is not set
+CONFIG_MTD_PCI=m
+CONFIG_MTD_TS5500=m
+# CONFIG_MTD_GPIO_ADDR is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+# CONFIG_MTD_PMC551_BUGFIX is not set
+# CONFIG_MTD_PMC551_DEBUG is not set
+# CONFIG_MTD_SLRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=4096
+CONFIG_MTDRAM_ERASE_SIZE=128
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_DOCPROBE is not set
+# CONFIG_MTD_DOCPROBE_ADVANCED is not set
+# CONFIG_MTD_DOCPROBE_ADDRESS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_CAFE is not set
+CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_NANDSIM=m
+# CONFIG_MTD_ONENAND is not set
+CONFIG_MTD_NAND_ECC_SMC=y
+CONFIG_MTD_NAND_CS553X=m
+
+CONFIG_MTD_REDBOOT_PARTS=m
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_XIP is not set
+# CONFIG_MTD_ICHXROM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_NAND_DISKONCHIP=m
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_PLATRAM is not set
+
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_LPDDR=m
+CONFIG_MTD_QINFO_PROBE=m
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_1284=y
+# CONFIG_PARPORT_AX88796 is not set
+
+#
+# Plug and Play support
+#
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+# CONFIG_PNP_DEBUG_MESSAGES is not set
+
+#
+# Protocols
+#
+CONFIG_ISAPNP=y
+# CONFIG_PNPBIOS is not set
+
+CONFIG_ACPI_PCI_SLOT=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+
+#
+# Block devices
+#
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=m
+# CONFIG_BLK_DEV_XD is not set
+CONFIG_PARIDE=m
+CONFIG_PARIDE_PD=m
+CONFIG_PARIDE_PCD=m
+CONFIG_PARIDE_PF=m
+CONFIG_PARIDE_PT=m
+CONFIG_PARIDE_PG=m
+CONFIG_PARIDE_ATEN=m
+CONFIG_PARIDE_BPCK=m
+CONFIG_PARIDE_BPCK6=m
+CONFIG_PARIDE_COMM=m
+CONFIG_PARIDE_DSTR=m
+CONFIG_PARIDE_FIT2=m
+CONFIG_PARIDE_FIT3=m
+CONFIG_PARIDE_EPAT=m
+CONFIG_PARIDE_EPATC8=y
+CONFIG_PARIDE_EPIA=m
+CONFIG_PARIDE_FRIQ=m
+CONFIG_PARIDE_FRPW=m
+CONFIG_PARIDE_KBIC=m
+CONFIG_PARIDE_KTTI=m
+CONFIG_PARIDE_ON20=m
+CONFIG_PARIDE_ON26=m
+CONFIG_BLK_CPQ_DA=m
+CONFIG_BLK_CPQ_CISS_DA=m
+CONFIG_CISS_SCSI_TAPE=y
+CONFIG_BLK_DEV_DAC960=m
+CONFIG_BLK_DEV_UMEM=m
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_OSD=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_ATIIXP=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+
+CONFIG_BLK_DEV_DELKIN=m
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+CONFIG_LBDAF=y
+CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_INTEGRITY=y
+
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+CONFIG_BLK_DEV_IDEFLOPPY=y
+CONFIG_IDE_TASK_IOCTL=y
+# CONFIG_BLK_DEV_IDE_SATA is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_BLK_DEV_CMD640=y
+CONFIG_BLK_DEV_CMD640_ENHANCED=y
+CONFIG_BLK_DEV_IDEPNP=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_AEC62XX=y
+CONFIG_BLK_DEV_ALI15X3=y
+# CONFIG_WDC_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+CONFIG_BLK_DEV_CMD64X=y
+CONFIG_BLK_DEV_TRIFLEX=y
+# CONFIG_BLK_DEV_CY82C693 is not set
+CONFIG_BLK_DEV_CS5520=y
+CONFIG_BLK_DEV_CS5530=y
+CONFIG_BLK_DEV_CS5535=y
+CONFIG_BLK_DEV_HPT34X=y
+CONFIG_BLK_DEV_HPT366=y
+CONFIG_BLK_DEV_IT821X=y
+CONFIG_BLK_DEV_JMICRON=y
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_NS87415 is not set
+CONFIG_BLK_DEV_PDC202XX_OLD=y
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=y
+CONFIG_BLK_DEV_SVWKS=y
+CONFIG_BLK_DEV_SIIMAGE=y
+CONFIG_BLK_DEV_SIS5513=y
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+CONFIG_BLK_DEV_VIA82CXXX=y
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_HD is not set
+
+CONFIG_VIRTIO=m
+CONFIG_VIRTIO_BLK=m
+CONFIG_VIRTIO_RING=m
+CONFIG_VIRTIO_PCI=m
+CONFIG_VIRTIO_BALLOON=m
+CONFIG_VIRTIO_NET=m
+CONFIG_VMXNET3=m
+CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_VIRTIO_CONSOLE=m
+CONFIG_VHOST_NET=m
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+
+CONFIG_SCSI_ENCLOSURE=m
+CONFIG_SCSI_PROC_FS=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_SRP=m
+CONFIG_SCSI_SRP_ATTRS=m
+CONFIG_SCSI_TGT=m
+
+CONFIG_SCSI_DH=y
+CONFIG_SCSI_DH_RDAC=m
+CONFIG_SCSI_DH_HP_SW=m
+CONFIG_SCSI_DH_EMC=m
+CONFIG_SCSI_DH_ALUA=m
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_FC_TGT_ATTRS=y
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SRP_TGT_ATTRS=y
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+CONFIG_SCSI_SAS_HOST_SMP=y
+CONFIG_RAID_ATTRS=m
+
+CONFIG_ISCSI_TCP=m
+
+#
+# SCSI low-level drivers
+#
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_3W_9XXX=m
+# CONFIG_SCSI_7000FASST is not set
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=4
+CONFIG_AIC7XXX_RESET_DELAY_MS=15000
+# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
+CONFIG_SCSI_AIC7XXX_OLD=m
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=4
+CONFIG_AIC79XX_RESET_DELAY_MS=15000
+# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
+# CONFIG_SCSI_ADVANSYS is not set
+CONFIG_SCSI_BFA_FC=m
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_MVSAS=m
+# CONFIG_SCSI_MVSAS_DEBUG is not set
+CONFIG_SCSI_MPT2SAS=m
+CONFIG_SCSI_MPT2SAS_MAX_SGE=128
+CONFIG_SCSI_MPT2SAS_LOGGING=y
+
+CONFIG_SCSI_OSD_INITIATOR=m
+CONFIG_SCSI_OSD_ULD=m
+CONFIG_SCSI_OSD_DPRINT_SENSE=1
+# CONFIG_SCSI_OSD_DEBUG is not set
+
+CONFIG_SCSI_BNX2_ISCSI=m
+CONFIG_BE2ISCSI=m
+CONFIG_SCSI_PMCRAID=m
+
+CONFIG_SCSI_HPSA=m
+CONFIG_SCSI_3W_SAS=m
+CONFIG_SCSI_PM8001=m
+CONFIG_VMWARE_PVSCSI=m
+
+CONFIG_ATA=y
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_ATA_SFF=y
+CONFIG_ATA_PIIX=y
+CONFIG_ATA_ACPI=y
+CONFIG_BLK_DEV_SX8=m
+CONFIG_PDC_ADMA=m
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MV=m
+CONFIG_SATA_NV=m
+CONFIG_SATA_PMP=y
+CONFIG_SATA_PROMISE=m
+CONFIG_SATA_QSTOR=m
+CONFIG_SATA_SIL=m
+CONFIG_SATA_SIL24=m
+CONFIG_SATA_SIS=m
+CONFIG_SATA_SVW=m
+CONFIG_SATA_SX4=m
+CONFIG_SATA_ULI=m
+CONFIG_SATA_VIA=m
+CONFIG_SATA_VITESSE=m
+
+CONFIG_PATA_ACPI=m
+CONFIG_PATA_ALI=m
+CONFIG_PATA_AMD=m
+CONFIG_PATA_ARTOP=m
+CONFIG_PATA_ATIIXP=m
+CONFIG_PATA_CMD640_PCI=m
+CONFIG_PATA_CMD64X=m
+CONFIG_PATA_CS5520=m
+CONFIG_PATA_CS5530=m
+CONFIG_PATA_CS5535=m
+CONFIG_PATA_CS5536=m
+CONFIG_PATA_CYPRESS=m
+CONFIG_PATA_EFAR=m
+CONFIG_ATA_GENERIC=m
+CONFIG_PATA_HPT366=m
+CONFIG_PATA_HPT37X=m
+CONFIG_PATA_HPT3X2N=m
+CONFIG_PATA_HPT3X3=m
+# CONFIG_PATA_HPT3X3_DMA is not set
+# CONFIG_PATA_ISAPNP is not set
+CONFIG_PATA_IT821X=m
+CONFIG_PATA_IT8213=m
+CONFIG_PATA_JMICRON=m
+# CONFIG_PATA_LEGACY is not set
+CONFIG_PATA_NINJA32=m
+CONFIG_PATA_MARVELL=m
+# CONFIG_PATA_WINBOND_VLB is not set
+CONFIG_PATA_MPIIX=m
+CONFIG_PATA_NETCELL=m
+CONFIG_PATA_NS87410=m
+CONFIG_PATA_NS87415=m
+CONFIG_PATA_OLDPIIX=m
+CONFIG_PATA_OPTI=m
+CONFIG_PATA_OPTIDMA=m
+CONFIG_PATA_PCMCIA=m
+CONFIG_PATA_PDC_OLD=m
+CONFIG_PATA_QDI=m
+# CONFIG_PATA_RADISYS is not set
+CONFIG_PATA_RDC=m
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+CONFIG_PATA_SERVERWORKS=m
+CONFIG_PATA_PDC2027X=m
+CONFIG_PATA_SCH=m
+CONFIG_PATA_SIL680=m
+CONFIG_PATA_SIS=m
+CONFIG_PATA_TOSHIBA=m
+CONFIG_PATA_TRIFLEX=m
+CONFIG_PATA_VIA=m
+CONFIG_PATA_WINBOND=m
+CONFIG_PATA_ATP867X=m
+
+CONFIG_SCSI_BUSLOGIC=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_FLASHPOINT=y
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+CONFIG_SCSI_GDTH=m
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_EPP16 is not set
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_DC395x=m
+# CONFIG_SCSI_NSP32 is not set
+CONFIG_SCSI_DEBUG=m
+CONFIG_SCSI_DC390T=m
+CONFIG_SCSI_QLA_FC=m
+CONFIG_SCSI_QLA_ISCSI=m
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_DPT_I2O is not set
+CONFIG_SCSI_LPFC=m
+# CONFIG_SCSI_SEAGATE is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_AHA152X=m
+# CONFIG_PCMCIA_FDOMAIN is not set
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_AUTODETECT=y
+CONFIG_MD_FAULTY=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+# CONFIG_MULTICORE_RAID456 is not set
+CONFIG_ASYNC_RAID6_TEST=m
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=m
+CONFIG_DM_DEBUG=y
+# CONFIG_DM_DELAY is not set
+CONFIG_DM_MIRROR=y
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_HP=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_ZERO=y
+CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_MULTIPATH_QL=m
+CONFIG_DM_MULTIPATH_ST=m
+
+#
+# Fusion MPT device support
+#
+CONFIG_FUSION=y
+CONFIG_FUSION_SPI=m
+CONFIG_FUSION_FC=m
+CONFIG_FUSION_MAX_SGE=40
+CONFIG_FUSION_CTL=m
+CONFIG_FUSION_LAN=m
+CONFIG_FUSION_SAS=m
+CONFIG_FUSION_LOGGING=y
+
+#
+# IEEE 1394 (FireWire) support (JUJU alternative stack)
+#
+CONFIG_FIREWIRE=m
+CONFIG_FIREWIRE_OHCI=m
+CONFIG_FIREWIRE_SBP2=m
+CONFIG_FIREWIRE_NET=m
+CONFIG_FIREWIRE_OHCI_DEBUG=y
+# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_LCT_NOTIFY_ON_CHANGES is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_VEGAS=m
+CONFIG_TCP_CONG_VENO=m
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_YEAH=m
+
+CONFIG_TCP_MD5SIG=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_INET_LRO=y
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_DIAG=m
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_NF_SECURITY=m
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_ARPD=y
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL_TRAP=y
+CONFIG_NET_POLL_CONTROLLER=y
+
+#
+# IP: Virtual Server Configuration
+#
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+CONFIG_IP_VS_FTP=m
+
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_SIT_6RD=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_PIMSM_V2=y
+
+CONFIG_RDS=m
+# CONFIG_RDS_DEBUG is not set
+CONFIG_RDS_RDMA=m
+CONFIG_RDS_TCP=m
+
+CONFIG_NET_9P=m
+CONFIG_NET_9P_FD=m
+CONFIG_NET_9P_VIRTIO=m
+# CONFIG_NET_9P_DEBUG is not set
+CONFIG_NET_9P_RDMA=m
+
+CONFIG_DECNET=m
+CONFIG_DECNET_ROUTER=y
+# CONFIG_DECNET_NF_GRABULATOR is not set
+CONFIG_BRIDGE=m
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_LED=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
+
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_ENABLED=y
+
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_RAW=m
+
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_RAW=m
+CONFIG_IP6_NF_SECURITY=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_HL=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_IP6=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_NFLOG=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_XFRM=y
+CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_SUB_POLICY=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_XFRM_USER=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+CONFIG_SCTP_HMAC_SHA1=y
+# CONFIG_SCTP_HMAC_MD5 is not set
+CONFIG_ATM=m
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=y
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+CONFIG_WAN_ROUTER=m
+CONFIG_IP_DCCP=m
+CONFIG_IP_DCCP_CCID2=m
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+CONFIG_IP_DCCP_CCID3=y
+# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+CONFIG_IP_DCCP_CCID3_RTO=100
+# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_NET_DCCPPROBE=m
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+
+CONFIG_NETLABEL=y
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_DRR=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_RR=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_CGROUP=y
+CONFIG_NET_CLS_FLOW=m
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_POLICE=y
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_MARK=y
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_EMATCH_U32=m
+
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_SIMP=m
+
+CONFIG_DCB=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_NET_TCPPROBE is not set
+CONFIG_NET_DROP_MONITOR=y
+CONFIG_NETDEVICES=y
+
+# disable later --kyle
+CONFIG_COMPAT_NET_DEV_OPS=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+CONFIG_IFB=m
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_NET_SB1000=m
+
+#
+# ATM
+#
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+CONFIG_ATM_CLIP=m
+CONFIG_ATM_LANE=m
+CONFIG_ATM_BR2684=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_ATM_TCP=m
+# CONFIG_ATM_LANAI is not set
+CONFIG_ATM_ENI=m
+CONFIG_ATM_FIRESTREAM=m
+# CONFIG_ATM_ZATM is not set
+# CONFIG_ATM_IDT77252 is not set
+# CONFIG_ATM_AMBASSADOR is not set
+# CONFIG_ATM_HORIZON is not set
+# CONFIG_ATM_FORE200E is not set
+# CONFIG_ATM_FORE200E_USE_TASKLET is not set
+CONFIG_ATM_FORE200E_TX_RETRY=16
+CONFIG_ATM_FORE200E_DEBUG=0
+
+CONFIG_ATM_HE=m
+CONFIG_PPPOATM=m
+CONFIG_PPPOL2TP=m
+CONFIG_ATM_NICSTAR=m
+# CONFIG_ATM_IA is not set
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+# CONFIG_ATM_MPOA is not set
+# CONFIG_ATM_BR2684_IPFILTER is not set
+# CONFIG_ATM_ENI_DEBUG is not set
+# CONFIG_ATM_ENI_TUNE_BURST is not set
+# CONFIG_ATM_ZATM_DEBUG is not set
+# CONFIG_ATM_IDT77252_DEBUG is not set
+# CONFIG_ATM_IDT77252_RCV_ALL is not set
+# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+# CONFIG_ATM_HORIZON_DEBUG is not set
+# CONFIG_ATM_HE_USE_SUNI is not set
+# CONFIG_ATM_NICSTAR_USE_SUNI is not set
+# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set
+# CONFIG_ATM_IA_DEBUG is not set
+CONFIG_ATM_SOLOS=m
+
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=y
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+CONFIG_NET_ETHERNET=y
+CONFIG_PHYLIB=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_CICADA_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_FIXED_PHY=y
+CONFIG_FIXED_MII_10_FDX=y
+CONFIG_FIXED_MII_100_FDX=y
+CONFIG_FIXED_MII_1000_FDX=y
+CONFIG_FIXED_MII_AMNT=1
+CONFIG_MDIO_BITBANG=m
+CONFIG_NATIONAL_PHY=m
+CONFIG_ICPLUS_PHY=m
+CONFIG_LSI_ET1011C_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_MARVELL_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_REALTEK_PHY=m
+CONFIG_SMSC_PHY=m
+CONFIG_STE10XP=m
+CONFIG_VITESSE_PHY=m
+
+CONFIG_MII=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_DNET=m
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_DE2104X_DSL=0
+CONFIG_TULIP=m
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_TULIP_MWI is not set
+CONFIG_TULIP_MMIO=y
+# CONFIG_NI5010 is not set
+# CONFIG_PCMCIA_XIRTULIP is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_ULI526X=m
+# CONFIG_HP100 is not set
+CONFIG_LNE390=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_PCNET32_NAPI=y
+CONFIG_AMD8111_ETH=m
+CONFIG_AMD8111E_NAPI=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_ADAPTEC_STARFIRE_NAPI=y
+CONFIG_B44=m
+CONFIG_B44_PCI=y
+CONFIG_BNX2=m
+CONFIG_CNIC=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_ATL1C=m
+CONFIG_ATL2=m
+CONFIG_ATL1E=m
+# CONFIG_EEPRO100 is not set
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_FORCEDETH=m
+CONFIG_FORCEDETH_NAPI=y
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_SIS190=m
+CONFIG_EPIC100=m
+CONFIG_SC92031=m
+CONFIG_SMSC9420=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+CONFIG_VIA_VELOCITY=m
+CONFIG_NET_POCKET=y
+CONFIG_ATP=m
+CONFIG_DE600=m
+CONFIG_DE620=m
+CONFIG_CASSINI=m
+# CONFIG_FEC_8XX is not set
+CONFIG_ETHOC=m
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851_MLL is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+CONFIG_E1000_NAPI=y
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_E1000E=m
+CONFIG_IGB=m
+# CONFIG_IGB_LRO is not set
+CONFIG_IGB_DCA=y
+CONFIG_IGBVF=m
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+CONFIG_R8169_NAPI=y
+CONFIG_R8169_VLAN=y
+# CONFIG_SK98LIN is not set
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_TIGON3=m
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+CONFIG_JME=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T1_NAPI=y
+CONFIG_CHELSIO_T3=m
+CONFIG_IP1000=m
+CONFIG_IXGB=m
+CONFIG_IXGB_NAPI=y
+CONFIG_IXGBE=m
+CONFIG_IXGBE_DCA=y
+CONFIG_IXGBE_DCB=y
+CONFIG_MYRI10GE=m
+CONFIG_MYRI10GE_DCA=y
+CONFIG_NETXEN_NIC=m
+CONFIG_NIU=m
+CONFIG_S2IO=m
+CONFIG_S2IO_NAPI=y
+CONFIG_VXGE=m
+# CONFIG_VXGE_DEBUG_TRACE_ALL is not set
+CONFIG_TEHUTI=m
+CONFIG_ENIC=m
+CONFIG_MLX4_EN=m
+# CONFIG_MLX4_DEBUG is not set
+CONFIG_QLGE=m
+CONFIG_SFC=m
+CONFIG_SFC_MTD=y
+CONFIG_BE2NET=m
+
+CONFIG_FDDI=y
+# CONFIG_DEFXX is not set
+CONFIG_SKFP=m
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_IPPP_FILTER=y
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+CONFIG_PPP_MPPE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+
+#
+# Wireless LAN
+#
+#
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=m
+CONFIG_CFG80211_WEXT=y
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEBUGFS=y
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+CONFIG_NL80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_WIRELESS_OLD_REGULATORY is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=m
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_LIB80211_DEBUG is not set
+
+CONFIG_MAC80211=m
+CONFIG_MAC80211_QOS=y
+CONFIG_MAC80211_RC_MINSTREL=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
+CONFIG_MAC80211_MESH=y
+CONFIG_MAC80211_LEDS=y
+CONFIG_MAC80211_DEBUGFS=y
+# CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_MAC80211_DEFAULT_PS=y
+
+CONFIG_WIMAX=m
+CONFIG_WIMAX_DEBUG_LEVEL=8
+CONFIG_WIMAX_I2400M_USB=m
+CONFIG_WIMAX_I2400M_SDIO=m
+CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
+CONFIG_WIMAX_IWMC3200_SDIO=y
+
+CONFIG_ADM8211=m
+CONFIG_ATH_COMMON=m
+CONFIG_ATH5K=m
+CONFIG_ATH5K_DEBUG=y
+CONFIG_ATH9K=m
+# CONFIG_ATH9K_DEBUG is not set
+CONFIG_ATH9K_DEBUGFS=y
+CONFIG_AT76C50X_USB=m
+CONFIG_AIRO=m
+CONFIG_AIRO_CS=m
+CONFIG_ATMEL=m
+# CONFIG_BCM43XX is not set
+CONFIG_B43=m
+CONFIG_B43_PCMCIA=y
+CONFIG_B43_SDIO=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43_PHY_LP=y
+# CONFIG_B43_FORCE_PIO is not set
+CONFIG_B43LEGACY=m
+# CONFIG_B43LEGACY_DEBUG is not set
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_HERMES=m
+CONFIG_HERMES_CACHE_FW_ON_INIT=y
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_PCI=m
+CONFIG_HOSTAP_PLX=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_IPW2100_DEBUG is not set
+# CONFIG_IPW2200_DEBUG is not set
+# CONFIG_LIBIPW_DEBUG is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+CONFIG_LIBERTAS_DEBUG=y
+CONFIG_LIBERTAS_THINFIRM=m
+CONFIG_LIBERTAS_THINFIRM_USB=m
+CONFIG_IWLWIFI=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLWIFI_RUN_TIME_CALIB=y
+CONFIG_IWLWIFI_DEBUG=y
+CONFIG_IWLWIFI_DEBUGFS=y
+CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y
+CONFIG_IWLAGN=m
+CONFIG_IWL4965=y
+CONFIG_IWL5000=y
+CONFIG_IWL5000_RUN_TIME_CALIB=y
+CONFIG_IWL3945=m
+CONFIG_IWL3945_RFKILL=y
+CONFIG_IWL3945_DEBUG=y
+CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+CONFIG_IWL3945_LEDS=y
+CONFIG_IWM=m
+# CONFIG_IWM_DEBUG is not set
+CONFIG_MAC80211_HWSIM=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_PCI_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_PCI_ATMEL=m
+CONFIG_MWL8K=m
+# CONFIG_PRISM54 is not set
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB_DEBUGFS=y
+# CONFIG_RT2X00_DEBUG is not set
+CONFIG_RT2400PCI=m
+CONFIG_RT2400PCI_RFKILL=y
+CONFIG_RT2400PCI_LEDS=y
+CONFIG_RT2500PCI=m
+CONFIG_RT2500PCI_RFKILL=y
+CONFIG_RT2500PCI_LEDS=y
+CONFIG_RT61PCI=m
+CONFIG_RT61PCI_RFKILL=y
+CONFIG_RT61PCI_LEDS=y
+CONFIG_RT2500USB=m
+CONFIG_RT2500USB_LEDS=y
+CONFIG_RT2800USB=m
+# CONFIG_RT2800USB_RT30XX is not set
+# CONFIG_RT2800USB_RT35XX is not set
+# CONFIG_RT2800USB_UNKNOWN is not set
+CONFIG_RT2800PCI=m
+# CONFIG_RT2800PCI_RT30XX is not set
+# CONFIG_RT2800PCI_RT35XX is not set
+CONFIG_RT73USB=m
+CONFIG_RT73USB_LEDS=y
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_TMD_HERMES=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_AR9170_USB=m
+
+CONFIG_WL12XX=y
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+CONFIG_WL1271=m
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_IBMOL is not set
+# CONFIG_3C359 is not set
+# Broken with gcc4.1
+# CONFIG_TMS380TR is not set
+# CONFIG_TMSPCI is not set
+# CONFIG_ABYSS is not set
+# CONFIG_IBMLS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+
+
+CONFIG_NET_FC=y
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Amateur Radio support
+#
+CONFIG_HAMRADIO=y
+CONFIG_AX25=m
+CONFIG_AX25_DAMA_SLAVE=y
+CONFIG_CAN=m
+CONFIG_CAN_RAW=m
+CONFIG_CAN_BCM=m
+CONFIG_CAN_VCAN=m
+CONFIG_CAN_DEV=m
+CONFIG_CAN_CALC_BITTIMING=y
+CONFIG_CAN_SJA1000=m
+CONFIG_CAN_SJA1000_ISA=m
+CONFIG_CAN_SJA1000_PLATFORM=m
+CONFIG_CAN_EMS_PCI=m
+CONFIG_CAN_EMS_USB=m
+CONFIG_CAN_KVASER_PCI=m
+CONFIG_NETROM=m
+CONFIG_ROSE=m
+CONFIG_MKISS=m
+CONFIG_6PACK=m
+CONFIG_BPQETHER=m
+CONFIG_SCC=m
+CONFIG_DMASCC=m
+# CONFIG_SCC_DELAY is not set
+CONFIG_SCC_TRXECHO=y
+CONFIG_BAYCOM_SER_FDX=m
+CONFIG_BAYCOM_SER_HDX=m
+CONFIG_BAYCOM_PAR=m
+CONFIG_BAYCOM_EPP=m
+CONFIG_YAM=m
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=m
+# CONFIG_IRDA_DEBUG is not set
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRTTY_SIR=m
+CONFIG_DONGLE=y
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_ESI_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_IRPORT_SIR=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+# CONFIG_DONGLE_OLD is not set
+
+CONFIG_ALI_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_NSC_FIR=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_SMC_IRCC_FIR=m
+# CONFIG_TOSHIBA_FIR is not set
+CONFIG_USB_IRDA=m
+CONFIG_VLSI_FIR=m
+CONFIG_VIA_FIR=m
+CONFIG_WINBOND_FIR=m
+
+#
+# Bluetooth support
+#
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_CMTP=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+# Disable the BT_HCIUSB driver.
+# It sucks more power than BT_HCIBTUSB which has the same functionality.
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_ATH3K=m
+
+#
+# ISDN subsystem
+#
+CONFIG_ISDN=y
+CONFIG_MISDN=m
+CONFIG_MISDN_DSP=m
+CONFIG_MISDN_L1OIP=m
+CONFIG_MISDN_AVMFRITZ=m
+CONFIG_MISDN_SPEEDFAX=m
+CONFIG_MISDN_INFINEON=m
+CONFIG_MISDN_W6692=m
+CONFIG_MISDN_NETJET=m
+
+#
+# mISDN hardware drivers
+#
+CONFIG_MISDN_HFCPCI=m
+CONFIG_MISDN_HFCMULTI=m
+CONFIG_ISDN_I4L=m
+CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+CONFIG_ISDN_DRV_AVMB1_C4=m
+
+CONFIG_MISDN_HFCUSB=m
+
+CONFIG_ISDN_PPP=y
+CONFIG_ISDN_PPP_VJ=y
+CONFIG_ISDN_MPP=y
+# CONFIG_ISDN_PPP_BSDCOMP is not set
+CONFIG_ISDN_TTY_FAX=y
+CONFIG_DE_AOC=y
+
+CONFIG_ISDN_AUDIO=y
+
+CONFIG_ISDN_DRV_HISAX=m
+CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+
+CONFIG_ISDN_CAPI_CAPIDRV=m
+CONFIG_ISDN_DIVERSION=m
+
+CONFIG_HISAX_EURO=y
+CONFIG_HISAX_1TR6=y
+CONFIG_HISAX_NI1=y
+CONFIG_HISAX_MAX_CARDS=8
+CONFIG_HISAX_16_3=y
+CONFIG_HISAX_TELESPCI=y
+CONFIG_HISAX_S0BOX=y
+CONFIG_HISAX_FRITZPCI=y
+CONFIG_HISAX_AVM_A1_PCMCIA=y
+CONFIG_HISAX_ELSA=y
+CONFIG_HISAX_DIEHLDIVA=y
+CONFIG_HISAX_SEDLBAUER=y
+CONFIG_HISAX_NETJET=y
+CONFIG_HISAX_NETJET_U=y
+CONFIG_HISAX_NICCY=y
+CONFIG_HISAX_BKM_A4T=y
+CONFIG_HISAX_SCT_QUADRO=y
+CONFIG_HISAX_GAZEL=y
+CONFIG_HISAX_HFC_PCI=y
+CONFIG_HISAX_W6692=y
+CONFIG_HISAX_HFC_SX=y
+CONFIG_HISAX_ENTERNOW_PCI=y
+# CONFIG_HISAX_DEBUG is not set
+CONFIG_HISAX_AVM_A1_CS=m
+CONFIG_HISAX_ST5481=m
+# CONFIG_HISAX_HFCUSB is not set
+CONFIG_HISAX_FRITZ_PCIPNP=m
+CONFIG_HISAX_NO_SENDCOMPLETE=y
+CONFIG_HISAX_NO_LLC=y
+CONFIG_HISAX_NO_KEYPAD=y
+CONFIG_HISAX_SEDLBAUER_CS=m
+CONFIG_HISAX_ELSA_CS=m
+CONFIG_HISAX_TELES_CS=m
+CONFIG_HISAX_HFC4S8S=m
+
+CONFIG_ISDN_DRV_LOOP=m
+CONFIG_HYSDN=m
+CONFIG_HYSDN_CAPI=y
+
+
+#
+# CAPI subsystem
+#
+CONFIG_ISDN_CAPI=m
+# CONFIG_CAPI_TRACE is not set
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
+CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+CONFIG_ISDN_CAPI_CAPIFS=m
+
+#
+# CAPI hardware drivers
+#
+
+#
+# Active AVM cards
+#
+CONFIG_CAPI_AVM=y
+
+#
+# Active Eicon DIVA Server cards
+#
+# CONFIG_CAPI_EICON is not set
+CONFIG_ISDN_DIVAS=m
+CONFIG_ISDN_DIVAS_BRIPCI=y
+CONFIG_ISDN_DIVAS_PRIPCI=y
+CONFIG_ISDN_DIVAS_DIVACAPI=m
+CONFIG_ISDN_DIVAS_USERIDI=m
+CONFIG_ISDN_DIVAS_MAINT=m
+
+CONFIG_ISDN_DRV_GIGASET=m
+CONFIG_GIGASET_CAPI=y
+CONFIG_GIGASET_BASE=m
+CONFIG_GIGASET_M101=m
+CONFIG_GIGASET_M105=m
+# CONFIG_GIGASET_DEBUG is not set
+# CONFIG_GIGASET_UNDOCREQ is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+CONFIG_INPUT_TABLET=y
+CONFIG_TABLET_USB_ACECAD=m
+CONFIG_TABLET_USB_AIPTEK=m
+CONFIG_TABLET_USB_GTCO=m
+CONFIG_TABLET_USB_KBTAB=m
+CONFIG_TABLET_USB_WACOM=m
+
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_CM109=m
+CONFIG_INPUT_POLLDEV=m
+CONFIG_INPUT_SPARSEKMAP=m
+
+#
+# Input I/O drivers
+#
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_RAW=m
+CONFIG_SERIO_ALTERA_PS2=m
+
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+CONFIG_QT2160=m
+CONFIG_KEYBOARD_ADP5588=m
+CONFIG_KEYBOARD_MAX7359=m
+CONFIG_KEYBOARD_OPENCORES=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_MOUSE_PS2_SENTELIC=y
+CONFIG_MOUSE_SERIAL=m
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_BCM5974=m
+CONFIG_MOUSE_SYNAPTICS_I2C=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+CONFIG_JOYSTICK_IFORCE_232=y
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_WALKERA0701=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_GUNZE=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_HTCPEN=m
+CONFIG_TOUCHSCREEN_INEXIO=m
+CONFIG_TOUCHSCREEN_MTOUCH=m
+CONFIG_TOUCHSCREEN_MK712=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_TSC2007=m
+CONFIG_TOUCHSCREEN_AD7879_I2C=m
+CONFIG_TOUCHSCREEN_TOUCHIT213=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_UCB1400=m
+CONFIG_TOUCHSCREEN_WACOM_W8001=m
+CONFIG_TOUCHSCREEN_USB_E2I=y
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_DYNAPRO=m
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+CONFIG_TOUCHSCREEN_EETI=m
+CONFIG_TOUCHSCREEN_W90X900=m
+CONFIG_TOUCHSCREEN_MCS5000=m
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_WISTRON_BTNS=m
+CONFIG_INPUT_ATLAS_BTNS=m
+
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_IMON=m
+
+CONFIG_MAC_EMUMOUSEBTN=y
+
+CONFIG_INPUT_WM831X_ON=m
+
+CONFIG_INPUT_APPLEIR=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_ROCKETPORT=m
+CONFIG_SYNCLINK=m
+CONFIG_SYNCLINKMP=m
+CONFIG_SYNCLINK_GT=m
+CONFIG_N_HDLC=m
+# CONFIG_STALDRV is not set
+# CONFIG_IBM_ASM is not set
+CONFIG_TIFM_CORE=m
+CONFIG_TIFM_7XX1=m
+CONFIG_TCG_TPM=m
+CONFIG_TCG_TIS=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+# CONFIG_TCG_INFINEON is not set
+CONFIG_TELCLOCK=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+# CONFIG_COMPUTONE is not set
+CONFIG_CYCLADES=m
+# CONFIG_CYZ_INTR is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_ESPSERIAL is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALLION is not set
+# CONFIG_ISTALLION is not set
+CONFIG_SERIAL_JSM=m
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=m
+CONFIG_LP_CONSOLE=y
+CONFIG_PPDEV=m
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_DEBUG_ALGO is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+
+#
+# I2C Hardware Bus support
+#
+
+CONFIG_I2C_ALGOPCA=m
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD756_S4882 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+# CONFIG_I2C_ELEKTOR is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_ISCH is not set
+# CONFIG_I2C_NFORCE2_S4985 is not set
+
+CONFIG_EEPROM_AT24=m
+CONFIG_EEPROM_LEGACY=m
+CONFIG_EEPROM_93CX6=m
+CONFIG_EEPROM_MAX6875=m
+
+CONFIG_I2C_NFORCE2=m
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_PARPORT=m
+CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_PASEMI=m
+CONFIG_I2C_PCA_ISA=m
+CONFIG_I2C_PCA_PLATFORM=m
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_PROSAVAGE=m
+CONFIG_I2C_SAVAGE4=m
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+CONFIG_I2C_SIMTEC=m
+CONFIG_I2C_STUB=m
+CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+CONFIG_I2C_VOODOO3=m
+# CONFIG_I2C_DESIGNWARE is not set
+
+#
+# I2C Hardware Sensors Chip support
+#
+CONFIG_SENSORS_ATK0110=m
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7414=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1021=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_ADT7462=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7473=m
+CONFIG_SENSORS_ADT7475=m
+CONFIG_SENSORS_APPLESMC=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_DS1337=m
+CONFIG_SENSORS_DS1374=m
+# CONFIG_DS1682 is not set
+CONFIG_SENSORS_FSCHER=m
+CONFIG_SENSORS_FSCPOS=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_HDAPS=m
+# CONFIG_SENSORS_I5K_AMB is not set
+# FIXME: IBMAEM x86 only?
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_K10TEMP=m
+CONFIG_SENSORS_LIS3LV02D=m
+CONFIG_SENSORS_LIS3_I2C=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_LTC4245=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_MAX6875=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_PCA9539=m
+CONFIG_SENSORS_PCF8574=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_SHT15=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_TMP401=m
+CONFIG_SENSORS_TSL2550=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VIA_CPUTEMP=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_LTC4215=m
+CONFIG_SENSORS_LM95241=m
+CONFIG_SENSORS_TMP421=m
+CONFIG_SENSORS_WM8350=m
+CONFIG_SENSORS_WM831X=m
+CONFIG_SENSORS_LM73=m
+CONFIG_SENSORS_AMC6821=m
+
+CONFIG_W1=m
+CONFIG_W1_CON=y
+# This is busted.
+# If we enable it, it steals Matrox cards, and the
+# framebuffer drivers stop working.
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2482=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS1WM=m
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2431=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+CONFIG_W1_SLAVE_DS2760=m
+#
+# Mice
+#
+
+#
+# IPMI
+#
+CONFIG_IPMI_HANDLER=m
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_POWEROFF=m
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_WDT_501 is not set
+CONFIG_WDTPCI=m
+CONFIG_WDT_501_PCI=y
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_SCx200_WDT is not set
+# CONFIG_60XX_WDT is not set
+CONFIG_W83877F_WDT=m
+CONFIG_W83627HF_WDT=m
+CONFIG_MACHZ_WDT=m
+# CONFIG_SC520_WDT is not set
+CONFIG_ALIM7101_WDT=m
+CONFIG_ALIM1535_WDT=m
+CONFIG_ITCO_WDT=m
+CONFIG_ITCO_VENDOR_SUPPORT=y
+# CONFIG_SC1200_WDT is not set
+# CONFIG_PC87413_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_CPU5_WDT is not set
+CONFIG_I6300ESB_WDT=m
+CONFIG_IT8712F_WDT=m
+# CONFIG_SBC8360_WDT is not set
+# CONFIG_SBC7240_WDT is not set
+CONFIG_SMSC_SCH311X_WDT=m
+CONFIG_W83977F_WDT=m
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_USBPCWATCHDOG=m
+# CONFIG_SBC_EPX_C3_WATCHDOG is not set
+CONFIG_WM8350_WATCHDOG=m
+CONFIG_WM831X_WATCHDOG=m
+
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_TIMERIOMEM=m
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_RTC_DEBUG is not set
+# CONFIG_GEN_RTC is not set
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_DS1307=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1672=m
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS1374=m
+# CONFIG_RTC_DRV_EP93XX is not set
+CONFIG_RTC_DRV_FM3130=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_MAX6900=m
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_RS5C372=m
+# CONFIG_RTC_DRV_SA1100 is not set
+# CONFIG_RTC_DRV_TEST is not set
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_V3020=m
+CONFIG_RTC_DRV_STK17TA8=m
+# CONFIG_RTC_DRV_S35390A is not set
+CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RX8025=m
+CONFIG_RTC_DRV_DS1286=m
+CONFIG_RTC_DRV_M48T35=m
+CONFIG_RTC_DRV_BQ4802=m
+CONFIG_RTC_DRV_WM8350=m
+CONFIG_RTC_DRV_AB3100=m
+CONFIG_RTC_DRV_WM831X=m
+CONFIG_RTC_DRV_BQ32K=m
+CONFIG_RTC_DRV_MSM6242=m
+CONFIG_RTC_DRV_RP5C01=m
+
+CONFIG_DTLK=m
+CONFIG_R3964=m
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+CONFIG_AGP=y
+CONFIG_AGP_ALI=y
+CONFIG_AGP_ATI=y
+CONFIG_AGP_AMD=y
+CONFIG_AGP_AMD64=y
+CONFIG_AGP_INTEL=y
+CONFIG_AGP_NVIDIA=y
+CONFIG_AGP_SIS=y
+CONFIG_AGP_SWORKS=y
+CONFIG_AGP_VIA=y
+CONFIG_AGP_EFFICEON=y
+CONFIG_VGA_ARB=y
+CONFIG_DRM=m
+CONFIG_DRM_TDFX=m
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_RADEON_KMS=y
+CONFIG_DRM_I810=m
+# CONFIG_DRM_I830 is not set
+CONFIG_DRM_MGA=m
+CONFIG_DRM_SIS=m
+CONFIG_DRM_SAVAGE=m
+CONFIG_DRM_I915=m
+CONFIG_DRM_I915_KMS=y
+CONFIG_DRM_VIA=m
+CONFIG_DRM_NOUVEAU=m
+CONFIG_DRM_NOUVEAU_KMS=y
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_DEBUG=y
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_VMWGFX=n
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+
+CONFIG_CARDMAN_4000=m
+CONFIG_CARDMAN_4040=m
+
+CONFIG_MWAVE=m
+CONFIG_RAW_DRIVER=y
+CONFIG_MAX_RAW_DEVS=8192
+CONFIG_HANGCHECK_TIMER=m
+
+#
+# Multimedia devices
+#
+CONFIG_MEDIA_SUPPORT=m
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+# CONFIG_VIDEO_VIVI is not set
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_BT848=m
+CONFIG_VIDEO_BT848_DVB=y
+CONFIG_VIDEO_BWQCAM=m
+# CONFIG_VIDEO_CAFE_CCIC is not set
+# CONFIG_VIDEO_CPIA is not set
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CX23885=m
+CONFIG_VIDEO_CX18=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ALSA=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_VP3054=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_CX231XX=m
+CONFIG_VIDEO_CX231XX_ALSA=m
+CONFIG_VIDEO_CX231XX_DVB=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_IVTV=m
+CONFIG_VIDEO_MEYE=m
+CONFIG_VIDEO_MXB=m
+# CONFIG_VIDEO_OVCAMCHIP is not set
+CONFIG_VIDEO_PVRUSB2_DVB=y
+CONFIG_VIDEO_HDPVR=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_W9966=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_FB_IVTV=m
+CONFIG_VIDEO_SAA7164=m
+
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+
+#
+# Radio Adapters
+#
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_TUNER_CUSTOMISE=y
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_MEDIA_TUNER_MAX2165=m
+
+#
+# Digital Video Broadcasting Devices
+#
+CONFIG_DVB_CAPTURE_DRIVERS=y
+CONFIG_DVB_CORE=m
+CONFIG_DVB_MAX_ADAPTERS=8
+CONFIG_DVB_DYNAMIC_MINORS=y
+
+CONFIG_DVB_FE_CUSTOMISE=y
+CONFIG_DVB_STB0899=m
+CONFIG_DVB_STB6100=m
+CONFIG_DVB_STV090x=m
+CONFIG_DVB_STV6110x=m
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_ZL10036=m
+CONFIG_DVB_ZL10039=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0288=m
+CONFIG_DVB_STB6000=m
+CONFIG_DVB_STV6110=m
+CONFIG_DVB_STV0900=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_TDA8261=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TUNER_CX24113=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TUA6100=m
+CONFIG_DVB_CX24116=m
+CONFIG_DVB_SI21XX=m
+CONFIG_DVB_DS3000=m
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_S5H1411=m
+CONFIG_DVB_DIB8000=m
+CONFIG_DVB_TUNER_DIB0070=m
+CONFIG_DVB_TUNER_DIB0090=m
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_ISL6423=m
+CONFIG_DVB_LGS8GXX=m
+CONFIG_DVB_ATBM8830=m
+CONFIG_DVB_TDA665x=m
+
+#
+# Supported Frontend Modules
+#
+CONFIG_DVB_BT8XX=m
+CONFIG_DVB_BUDGET_CORE=m
+CONFIG_DVB_PLUTO2=m
+CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_USB_DRV=m
+CONFIG_SMS_SDIO_DRV=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_USB_DTV5100=m
+CONFIG_DVB_USB_AF9015=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_FRIIO=m
+CONFIG_DVB_USB_EC168=m
+CONFIG_DVB_DM1105=m
+CONFIG_DVB_DRX397XD=m
+CONFIG_DVB_LGDT3304=m
+CONFIG_DVB_S921=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_LGS8GL5=m
+CONFIG_DVB_DUMMY_FE=m
+CONFIG_DVB_FIREDTV=m
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_DVB_AV7110=m
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_TTUSB_BUDGET=m
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_USB_CINERGY_T2=m
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_CE6230=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_VP7045=m
+
+CONFIG_DVB_PT1=m
+
+CONFIG_MANTIS_CORE=m
+CONFIG_DVB_MANTIS=m
+CONFIG_DVB_HOPPER=m
+
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+# CONFIG_VIDEO_TUNER_CUSTOMISE is not set
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_24XXX=y
+CONFIG_VIDEO_PVRUSB2_29XXX=y
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+
+#
+# Broadcom Crystal HD video decoder driver
+#
+CONFIG_CRYSTALHD=m
+
+#
+# Graphics support
+#
+
+CONFIG_DISPLAY_SUPPORT=m
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+
+CONFIG_FB=y
+CONFIG_VIDEO_SELECT=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_3DFX_I2C=y
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ARK is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_CARMINE is not set
+CONFIG_FB_CIRRUS=m
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_HECUBA is not set
+# CONFIG_FB_HGA is not set
+CONFIG_FB_I810=m
+CONFIG_FB_I810_GTF=y
+CONFIG_FB_I810_I2C=y
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_IMAC is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_INTEL_DEBUG is not set
+# CONFIG_FB_INTEL_I2C is not set
+CONFIG_FB_KYRO=m
+# CONFIG_FB_LE80578 is not set
+CONFIG_FB_MATROX=m
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G=y
+CONFIG_FB_MATROX_I2C=m
+CONFIG_FB_MATROX_MAVEN=m
+CONFIG_FB_MATROX_MULTIHEAD=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_NVIDIA=m
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_PM2_FIFO_DISCONNECT is not set
+# CONFIG_FB_PM3 is not set
+CONFIG_FB_RADEON=m
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RIVA=m
+# CONFIG_FB_RIVA_DEBUG is not set
+# CONFIG_FB_RIVA_I2C is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3=m
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+# CONFIG_FB_SIS is not set
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_SM501=m
+CONFIG_FB_TILEBLITTING=y
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_UVESA is not set
+CONFIG_FB_VESA=y
+CONFIG_FB_VGA16=m
+CONFIG_FB_VIRTUAL=m
+CONFIG_FB_VOODOO1=m
+# CONFIG_FB_VT8623 is not set
+CONFIG_FB_EFI=y
+CONFIG_FB_VIA=m
+CONFIG_FB_METRONOME=m
+CONFIG_FB_MB862XX=m
+CONFIG_FB_MB862XX_PCI_GDC=y
+CONFIG_FB_MB862XX_LIME=y
+# CONFIG_FB_PRE_INIT_FB is not set
+# CONFIG_FB_TMIO is not set
+# CONFIG_FB_BROADSHEET is not set
+
+# CONFIG_FIRMWARE_EDID is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+CONFIG_VGACON_SOFT_SCROLLBACK=y
+CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FONTS is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_LIBRE_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+# CONFIG_SND_DEBUG_VERBOSE is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+CONFIG_SND_SEQUENCER=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_RTCTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_SUPPORT_OLD_API is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+
+CONFIG_SND_DRIVERS=y
+
+#
+# ISA devices
+#
+CONFIG_SND_AD1889=m
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_MSND_PINNACLE is not set
+# CONFIG_SND_MSND_CLASSIC is not set
+
+#
+# PCI devices
+#
+CONFIG_SND_PCI=y
+CONFIG_SND_ADLIB=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+# CONFIG_SND_AW2 is not set
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS5530=m
+CONFIG_SND_CS5535AUDIO=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_CTXFI=m
+CONFIG_SND_LX6464ES=m
+CONFIG_SND_HDA_INTEL=y
+CONFIG_SND_HDA_INPUT_BEEP=y
+CONFIG_SND_HDA_INPUT_BEEP_MODE=0
+CONFIG_SND_HDA_INPUT_JACK=y
+CONFIG_SND_HDA_PATCH_LOADER=y
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_CODEC_CA0110=y
+CONFIG_SND_HDA_CODEC_ANALOG=y
+CONFIG_SND_HDA_CODEC_SIGMATEL=y
+CONFIG_SND_HDA_CODEC_VIA=y
+CONFIG_SND_HDA_CODEC_ATIHDMI=y
+CONFIG_SND_HDA_CODEC_CIRRUS=y
+CONFIG_SND_HDA_CODEC_CONEXANT=y
+CONFIG_SND_HDA_CODEC_CMEDIA=y
+CONFIG_SND_HDA_CODEC_INTELHDMI=y
+CONFIG_SND_HDA_CODEC_SI3054=y
+CONFIG_SND_HDA_CODEC_NVHDMI=y
+CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_POWER_SAVE=y
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDA_RECONFIG=y
+CONFIG_SND_HDSPM=m
+CONFIG_SND_HIFIER=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=y
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIRO=m
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_RME32=m
+CONFIG_SND_PCSP=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SC6000=m
+CONFIG_SND_SIS7019=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_HDSP=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+
+#
+# ALSA USB devices
+#
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_US122L=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_PCMCIA=y
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB=y
+CONFIG_USB_SUPPORT=y
+# CONFIG_USB_DEBUG is not set
+
+# DEPRECATED: See bug 362221. Fix udev.
+# CONFIG_USB_DEVICE_CLASS is not set
+
+CONFIG_USB_PERSIST=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_SSB is not set
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_SL811_CS is not set
+# CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_XHCI_HCD=m
+# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+CONFIG_USB_ISP1362_HCD=m
+
+#
+# USB Device Class drivers
+#
+
+#
+# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+CONFIG_USB_TMC=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_SIERRA=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+CONFIG_USB_HID=y
+
+CONFIG_HID_SUPPORT=y
+
+CONFIG_HID=m
+# debugging default is y upstream now
+CONFIG_HID_DEBUG=y
+CONFIG_HIDRAW=y
+CONFIG_HID_FF=y
+CONFIG_HID_PID=y
+# CONFIG_HID_COMPAT is not set
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_PANTHERLORD_FF=y
+CONFIG_THRUSTMASTER_FF=y
+CONFIG_HID_WACOM=y
+CONFIG_ZEROPLUS_FF=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_IDMOUSE=m
+CONFIG_DRAGONRISE_FF=y
+CONFIG_GREENASIA_FF=y
+CONFIG_SMARTJOYPLUS_FF=y
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+
+#
+# USB Multimedia devices
+#
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+CONFIG_USB_VICAM=m
+CONFIG_USB_DSBR=m
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_M5602=m
+CONFIG_USB_STV06XX=m
+CONFIG_USB_GSPCA=m
+CONFIG_USB_GSPCA_MR97310A=m
+CONFIG_USB_GSPCA_BENQ=m
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_CPIA1=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+CONFIG_USB_GSPCA_MARS=m
+CONFIG_USB_GSPCA_OV519=m
+CONFIG_USB_GSPCA_OV534=m
+CONFIG_USB_GSPCA_OV534_9=m
+CONFIG_USB_GSPCA_PAC207=m
+CONFIG_USB_GSPCA_PAC7311=m
+CONFIG_USB_GSPCA_SN9C2028=m
+CONFIG_USB_GSPCA_SN9C20X=m
+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
+CONFIG_USB_GSPCA_SONIXB=m
+CONFIG_USB_GSPCA_SONIXJ=m
+CONFIG_USB_GSPCA_SPCA500=m
+CONFIG_USB_GSPCA_SPCA501=m
+CONFIG_USB_GSPCA_SPCA505=m
+CONFIG_USB_GSPCA_SPCA506=m
+CONFIG_USB_GSPCA_SPCA508=m
+CONFIG_USB_GSPCA_SPCA561=m
+CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TV8532=m
+CONFIG_USB_GSPCA_VC032X=m
+CONFIG_USB_GSPCA_ZC3XX=m
+CONFIG_USB_GSPCA_SQ905=m
+CONFIG_USB_GSPCA_SQ905C=m
+CONFIG_USB_GSPCA_PAC7302=m
+CONFIG_USB_GSPCA_STV0680=m
+CONFIG_USB_GL860=m
+CONFIG_USB_GSPCA_JEILINJ=m
+
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_OV511 is not set
+CONFIG_USB_S2255=m
+CONFIG_USB_SE401=m
+# CONFIG_VIDEO_SH_MOBILE_CEU is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_SN9C102 is not set
+CONFIG_USB_ZR364XX=m
+CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_MT9M001=m
+CONFIG_SOC_CAMERA_MT9V022=m
+CONFIG_SOC_CAMERA_PLATFORM=m
+CONFIG_SOC_CAMERA_MT9M111=m
+CONFIG_SOC_CAMERA_MT9T031=m
+CONFIG_SOC_CAMERA_TW9910=m
+CONFIG_SOC_CAMERA_OV772X=m
+CONFIG_SOC_CAMERA_MT9T112=m
+CONFIG_SOC_CAMERA_RJ54N1=m
+CONFIG_SOC_CAMERA_OV9640=m
+
+#
+# USB Network adaptors
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_HSO=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_USB_CDC_PHONET=m
+
+#
+# USB Host-to-Host Cables
+#
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+
+#
+# Intelligent USB Devices/Gadgets
+#
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_QUALCOMM=m
+CONFIG_USB_SERIAL_SYMBOL=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_OPTION=y
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_SAFE=m
+CONFIG_USB_SERIAL_SAFE_PADDED=y
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_DEBUG=m
+
+CONFIG_USB_EZUSB=y
+CONFIG_USB_EMI62=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# USB Miscellaneous drivers
+#
+
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_SEVSEG=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_ATM=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_CXACRU=m
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_CYTHERM is not set
+CONFIG_USB_EMI26=m
+CONFIG_USB_ETH=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_VST=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LD=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_MON=y
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PWC=m
+CONFIG_USB_PWC_INPUT_EVDEV=y
+# CONFIG_USB_PWC_DEBUG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+CONFIG_RADIO_SI470X=y
+CONFIG_USB_SI470X=m
+CONFIG_I2C_SI470X=m
+CONFIG_RADIO_SI4713=m
+# CONFIG_RADIO_TEF6862 is not set
+CONFIG_USB_MR800=m
+CONFIG_USB_STKWEBCAM=m
+# CONFIG_USB_TEST is not set
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_U132_HCD=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_UVCVIDEO=m
+CONFIG_USB_XUSBATM=m
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_ZERO=m
+
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_SDIOHOST=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE=y
+
+# Multifunction USB devices
+# CONFIG_MFD_PCF50633 is not set
+CONFIG_PCF50633_ADC=m
+CONFIG_PCF50633_GPIO=m
+CONFIG_AB3100_CORE=m
+CONFIG_INPUT_PCF50633_PMU=m
+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
+CONFIG_CHARGER_PCF50633=m
+CONFIG_REGULATOR_PCF50633=m
+CONFIG_RTC_DRV_PCF50633=m
+
+CONFIG_MFD_SM501=m
+CONFIG_MFD_SM501_GPIO=y
+# CONFIG_MFD_TC6393XB is not set
+CONFIG_MFD_WM8400=m
+CONFIG_MFD_WM8350_I2C=m
+CONFIG_MFD_WM8350=m
+# CONFIG_MFD_WM831X is not set
+CONFIG_AB3100_OTP=m
+
+#
+# File systems
+#
+CONFIG_MISC_FILESYSTEMS=y
+
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT2_FS_XIP=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4DEV_COMPAT=y
+CONFIG_JBD2=y
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_DEBUG is not set
+# CONFIG_XFS_RT is not set
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_SECURITY=y
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+# Autofsv3 is obsolete.
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_EXOFS_FS=m
+# CONFIG_EXOFS_DEBUG is not set
+CONFIG_NILFS2_FS=m
+
+CONFIG_FSCACHE=m
+CONFIG_FSCACHE_STATS=y
+# CONFIG_FSCACHE_HISTOGRAM is not set
+# CONFIG_FSCACHE_DEBUG is not set
+CONFIG_FSCACHE_OBJECT_LIST=y
+
+CONFIG_CACHEFILES=m
+# CONFIG_CACHEFILES_DEBUG is not set
+# CONFIG_CACHEFILES_HISTOGRAM is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_VMCORE=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+CONFIG_DEBUG_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+CONFIG_AFFS_FS=m
+CONFIG_ECRYPT_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_VXFS_FS=m
+# CONFIG_HPFS_FS is not set
+CONFIG_QNX4FS_FS=m
+# CONFIG_QNX4FS_RW is not set
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_9P_FS=m
+CONFIG_9P_FSCACHE=y
+CONFIG_FUSE_FS=m
+CONFIG_OMFS_FS=m
+CONFIG_CUSE=m
+
+#
+# Network File Systems
+#
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_NFS_FSCACHE=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_XPRT_RDMA=m
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+# CONFIG_SMB_FS is not set
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_DFS_UPCALL=y
+CONFIG_NCP_FS=m
+CONFIG_NCPFS_PACKET_SIGNING=y
+CONFIG_NCPFS_IOCTL_LOCKING=y
+CONFIG_NCPFS_STRONG=y
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+CONFIG_NCPFS_SMALLDOS=y
+CONFIG_NCPFS_NLS=y
+CONFIG_NCPFS_EXTRAS=y
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_AF_RXRPC is not set
+
+CONFIG_OCFS2_FS=m
+# CONFIG_OCFS2_DEBUG_FS is not set
+# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+# CONFIG_OCFS2_FS_STATS is not set
+# CONFIG_OCFS2_COMPAT_JBD is not set
+CONFIG_OCFS2_FS_POSIX_ACL=y
+
+CONFIG_BTRFS_FS=m
+CONFIG_BTRFS_FS_POSIX_ACL=y
+
+CONFIG_CONFIGFS_FS=m
+
+CONFIG_DLM=m
+CONFIG_DLM_DEBUG=y
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_DLM=y
+
+CONFIG_UBIFS_FS=m
+CONFIG_UBIFS_FS_XATTR=y
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+# CONFIG_UBIFS_FS_DEBUG is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+CONFIG_AMIGA_PARTITION=y
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_BSD_DISKLABEL=y
+CONFIG_EFI_PARTITION=y
+CONFIG_KARMA_PARTITION=y
+# CONFIG_LDM_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_OSF_PARTITION=y
+CONFIG_SGI_PARTITION=y
+CONFIG_SOLARIS_X86_PARTITION=y
+CONFIG_SUN_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_UNIXWARE_DISKLABEL=y
+# CONFIG_ULTRIX_PARTITION is not set
+
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+CONFIG_NLS_ASCII=y
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+CONFIG_OPROFILE_EVENT_MULTIPLEX=y
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_INFO=y
+CONFIG_FRAME_POINTER=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_HEADERS_CHECK=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_TRACE is not set
+# CONFIG_LKDTM is not set
+
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_LOCKDEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+
+CONFIG_KGDB=y
+CONFIG_KGDB_SERIAL_CONSOLE=y
+CONFIG_KGDB_TESTS=y
+# CONFIG_KGDB_TESTS_ON_BOOT is not set
+
+#
+# Security options
+#
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_NETWORK_XFRM=y
+# CONFIG_SECURITY_PATH is not set
+CONFIG_SECURITY_CAPABILITIES=y
+CONFIG_SECURITY_FILE_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SELINUX=y
+CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+CONFIG_SECURITY_SELINUX_DISABLE=y
+CONFIG_SECURITY_SELINUX_DEVELOP=y
+CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
+CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
+CONFIG_SECURITY_SELINUX_AVC_STATS=y
+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=65536
+# CONFIG_SECURITY_SMACK is not set
+# CONFIG_SECURITY_TOMOYO is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_FIPS=y
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_RMD128=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_RMD256=m
+CONFIG_CRYPTO_RMD320=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_586=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SEQIV=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_VMAC=m
+CONFIG_CRYPTO_XTS=m
+CONFIG_CRYPTO_TEST=m
+CONFIG_LIBCRC32C=m
+CONFIG_CRYPTO_CRC32C_INTEL=m
+CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_ANSI_CPRNG=m
+CONFIG_CRYPTO_DEV_HIFN_795X=m
+CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+
+# Random number generation
+CONFIG_CRYPTO_PRNG=m
+
+#
+# Library routines
+#
+CONFIG_CRC16=y
+CONFIG_CRC32=m
+CONFIG_CRC_CCITT=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC_T10DIF=m
+
+CONFIG_CRYPTO_ZLIB=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_KEYS=y
+CONFIG_KEYS_DEBUG_PROC_KEYS=y
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+CONFIG_ATA_OVER_ETH=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_BACKLIGHT_PROGEAR=m
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY_BACKLIGHT=y
+# CONFIG_BACKLIGHT_SAHARA is not set
+CONFIG_BACKLIGHT_WM831X=m
+
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_PLATFORM=m
+
+CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_DEBUG=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+CONFIG_GROUP_SCHED=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_MEM_RES_CTLR=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
+
+CONFIG_CPUSETS=y
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_NS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_PROC_PID_CPUSET=y
+
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+
+CONFIG_RELAY=y
+# CONFIG_PRINTK_TIME is not set
+
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+
+CONFIG_KEXEC=y
+
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+
+CONFIG_IBMASR=m
+
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TRACE=y
+# CONFIG_PM_VERBOSE is not set
+# CONFIG_PM_TEST_SUSPEND is not set
+CONFIG_PM_RUNTIME=y
+
+## BEGIN ISA Junk.
+
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_PROBE is not set
+# CONFIG_LTPC is not set
+# CONFIG_COPS is not set
+
+CONFIG_SCSI_AHA152X=m
+CONFIG_SCSI_AHA1542=m
+# CONFIG_SCSI_IN2000 is not set
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ARCMSR_AER=y
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+
+# CONFIG_EL1 is not set
+# CONFIG_EL2 is not set
+# CONFIG_ELPLUS is not set
+# CONFIG_EL16 is not set
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+# CONFIG_WD80x3 is not set
+CONFIG_ULTRA=m
+# CONFIG_SMC9194 is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NI52 is not set
+# CONFIG_NI65 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+CONFIG_NET_ISA=y
+CONFIG_NE2000=m
+# CONFIG_E2100 is not set
+CONFIG_EWRK3=m
+# CONFIG_EEXPRESS is not set
+# CONFIG_EEXPRESS_PRO is not set
+# CONFIG_HPLAN_PLUS is not set
+# CONFIG_HPLAN is not set
+# CONFIG_LP486E is not set
+# CONFIG_ETH16I is not set
+# CONFIG_ZNET is not set
+# CONFIG_SEEQ8005 is not set
+# CONFIG_AC3200 is not set
+# CONFIG_APRICOT is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_IBMTR is not set
+# CONFIG_SKISA is not set
+# CONFIG_PROTEON is not set
+# CONFIG_SMCTR is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_HISAX_16_0 is not set
+# CONFIG_HISAX_AVM_A1 is not set
+# CONFIG_HISAX_IX1MICROR2 is not set
+# CONFIG_HISAX_ASUSCOM is not set
+# CONFIG_HISAX_TELEINT is not set
+# CONFIG_HISAX_HFCS is not set
+# CONFIG_HISAX_SPORTSTER is not set
+# CONFIG_HISAX_MIC is not set
+# CONFIG_HISAX_ISURF is not set
+# CONFIG_HISAX_HSTSAPHIR is not set
+# CONFIG_ISDN_DRV_ICN is not set
+# CONFIG_ISDN_DRV_PCBIT is not set
+# CONFIG_ISDN_DRV_SC is not set
+# CONFIG_ISDN_DRV_ACT2000 is not set
+# CONFIG_ISDN_DRV_AVMB1_B1ISA is not set
+# CONFIG_ISDN_DRV_AVMB1_T1ISA is not set
+
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_ATIXL is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+
+# CONFIG_SERIAL_8250_FOURPORT is not set
+# CONFIG_SERIAL_8250_ACCENT is not set
+# CONFIG_SERIAL_8250_BOCA is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
+
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_WDT is not set
+
+# CONFIG_VIDEO_PMS is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_RADIO_SF16FMR2 is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TEA5764 is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
+
+# CONFIG_SND_OPL4_LIB is not set
+# CONFIG_SND_AD1848_LIB is not set
+# CONFIG_SND_AD1816A is not set
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+CONFIG_SND_CS4231_LIB=m
+CONFIG_SND_CS4236=m
+# CONFIG_SND_ES968 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUS_SYNTH is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+CONFIG_SND_SB16=m
+CONFIG_SND_SBAWE=m
+# CONFIG_SND_SB16_CSP is not set
+# CONFIG_SND_ALS100 is not set
+# CONFIG_SND_AZT2320 is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_DT019X is not set
+CONFIG_SND_OPL3SA2=m
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_INDIGOIOX=m
+CONFIG_SND_INDIGODJX=m
+# CONFIG_SND_SOC is not set
+
+## END of ISA options.
+
+# CONFIG_FORCED_INLINING is not set
+
+CONFIG_MIGRATION=y
+CONFIG_RESOURCES_64BIT=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+# CONFIG_LEDS_AMS_DELTA is not set
+# CONFIG_LEDS_CORGI is not set
+# CONFIG_LEDS_IXP4XX is not set
+# CONFIG_LEDS_LOCOMO is not set
+# CONFIG_LEDS_NET48XX is not set
+# CONFIG_LEDS_PCA9532 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_S3C24XX is not set
+# CONFIG_LEDS_SPITZ is not set
+# CONFIG_LEDS_TOSA is not set
+CONFIG_LEDS_HP_DISK=m
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+CONFIG_LEDS_ALIX2=m
+CONFIG_LEDS_WM8350=m
+CONFIG_LEDS_LP3944=m
+CONFIG_LEDS_WM831X_STATUS=m
+CONFIG_LEDS_REGULATOR=m
+CONFIG_LEDS_LT3593=m
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_INTEL_SS4200=m
+
+CONFIG_DMADEVICES=y
+CONFIG_DMA_ENGINE=y
+CONFIG_NET_DMA=y
+# CONFIG_DMATEST is not set
+CONFIG_ASYNC_TX_DMA=y
+
+CONFIG_UNUSED_SYMBOLS=y
+
+CONFIG_UTRACE=y
+
+CONFIG_FTRACE=y
+# CONFIG_IRQSOFF_TRACER is not set
+CONFIG_SCHED_TRACER=y
+CONFIG_PROCESS_TRACER=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_WORKQUEUE_TRACER=y
+CONFIG_EVENT_TRACER=y
+CONFIG_FTRACE_SYSCALLS=y
+CONFIG_KMEMTRACE=y
+CONFIG_FTRACE_MCOUNT_RECORD=y
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_TRACE_BRANCH_PROFILING is not set
+CONFIG_FUNCTION_PROFILER=y
+CONFIG_RING_BUFFER_BENCHMARK=m
+
+CONFIG_KPROBES=y
+
+# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+
+CONFIG_HZ_1000=y
+
+CONFIG_TIMER_STATS=y
+
+# Auxillary displays
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+CONFIG_CFAG12864B=y
+CONFIG_CFAG12864B_RATE=20
+
+# CONFIG_PHANTOM is not set
+
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_APM_POWER=m
+CONFIG_WM831X_POWER=m
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
+CONFIG_BATTERY_PMU=m
+CONFIG_BATTERY_BQ27x00=m
+CONFIG_BATTERY_MAX17040=m
+# CONFIG_PDA_POWER is not set
+
+CONFIG_AUXDISPLAY=y
+
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_SMX=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+CONFIG_UIO_AEC=m
+CONFIG_UIO_SERCOS3=m
+CONFIG_UIO_PCI_GENERIC=m
+
+CONFIG_INSTRUMENTATION=y
+CONFIG_MARKERS=y
+# CONFIG_CRC7 is not set
+
+CONFIG_DEFAULT_RELATIME=y
+
+# LIRC
+CONFIG_INPUT_LIRC=m
+CONFIG_LIRC_BT829=m
+CONFIG_LIRC_ENE0100=m
+CONFIG_LIRC_I2C=m
+CONFIG_LIRC_IGORPLUGUSB=m
+CONFIG_LIRC_IMON=m
+CONFIG_LIRC_IT87=m
+CONFIG_LIRC_ITE8709=m
+CONFIG_LIRC_MCEUSB=m
+CONFIG_LIRC_ZILOG=m
+CONFIG_LIRC_PARALLEL=m
+CONFIG_LIRC_SERIAL=m
+CONFIG_LIRC_SERIAL_TRANSMITTER=y
+CONFIG_LIRC_SASEM=m
+CONFIG_LIRC_SIR=m
+CONFIG_LIRC_STREAMZAP=m
+CONFIG_LIRC_TTUSBIR=m
+
+# CONFIG_SAMPLES is not set
+
+# CONFIG_DEVKMEM is not set
+
+CONFIG_PM_TRACE_RTC=y
+CONFIG_R6040=m
+
+CONFIG_BNX2X=m
+CONFIG_NOZOMI=m
+CONFIG_PCF8575=m
+# CONFIG_TPS65010 is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+# CONFIG_KPROBES_SANITY_TEST is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+CONFIG_LATENCYTOP=y
+CONFIG_RESOURCE_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+
+CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+
+#FIXME: x86 generic?
+CONFIG_LEDS_CLEVO_MAIL=m
+CONFIG_I8K=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_X38=m
+CONFIG_INPUT_APANEL=m
+
+# CONFIG_INTEL_MENLOW is not set
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_ISL29003=m
+CONFIG_IPWIRELESS=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_CGROUP_MEM_CONT=y
+
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_MEMSTICK=m
+# CONFIG_MEMSTICK_DEBUG is not set
+# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+CONFIG_MSPRO_BLOCK=m
+CONFIG_MEMSTICK_TIFM_MS=m
+CONFIG_MEMSTICK_JMICRON_38X=m
+
+CONFIG_ACCESSIBILITY=y
+CONFIG_A11Y_BRAILLE_CONSOLE=y
+
+# CONFIG_HTC_PASIC3 is not set
+
+# MT9V022_PCA9536_SWITCH is not set
+
+CONFIG_THERMAL_HWMON=y
+
+CONFIG_OPTIMIZE_INLINING=y
+
+# FIXME: This should be x86/ia64 only
+# CONFIG_HP_ILO is not set
+
+# CONFIG_GPIOLIB is not set
+
+CONFIG_UNEVICTABLE_LRU=y
+
+CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_XT_TARGET_TPROXY=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+CONFIG_NETFILTER_XT_MATCH_SOCKET=m
+
+# CONFIG_IP_VS_IPV6 is not set
+
+CONFIG_NET_DSA=y
+CONFIG_NET_DSA_MV88E6060=y
+CONFIG_NET_DSA_MV88E6131=y
+CONFIG_NET_DSA_MV88E6123_61_65=y
+
+CONFIG_NET_SCH_MULTIQ=m
+CONFIG_NET_ACT_SKBEDIT=m
+
+CONFIG_PHONET=m
+
+CONFIG_ICS932S401=m
+# CONFIG_C2PORT is not set
+CONFIG_W1_SLAVE_BQ27000=m
+
+
+CONFIG_IT87_WDT=m
+CONFIG_W83697UG_WDT=m
+
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+CONFIG_REGULATOR_FIXED_VOLTAGE=m
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+CONFIG_REGULATOR_BQ24022=m
+CONFIG_REGULATOR_WM8350=m
+CONFIG_REGULATOR_WM8400=m
+CONFIG_REGULATOR_DA903X=m
+CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+CONFIG_REGULATOR_MAX1586=m
+CONFIG_REGULATOR_LP3971=m
+CONFIG_REGULATOR_AB3100=m
+CONFIG_REGULATOR_TPS65023=m
+CONFIG_REGULATOR_TPS6507X=m
+CONFIG_REGULATOR_WM831X=m
+CONFIG_REGULATOR_MAX8660=m
+
+CONFIG_WM8350_POWER=m
+
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+
+CONFIG_USB_WUSB=m
+CONFIG_USB_WUSB_CBAF=m
+# CONFIG_USB_WUSB_CBAF_DEBUG is not set
+CONFIG_USB_WHCI_HCD=m
+CONFIG_USB_HWA_HCD=m
+
+CONFIG_UWB=m
+CONFIG_UWB_HWA=m
+CONFIG_UWB_WHCI=m
+CONFIG_UWB_WLP=m
+CONFIG_UWB_I1480U=m
+CONFIG_UWB_I1480U_WLP=m
+
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_ET131X is not set
+# CONFIG_SLICOSS is not set
+# CONFIG_SXG is not set
+# CONFIG_ME4000 is not set
+# CONFIG_MEILHAUS is not set
+# CONFIG_VIDEO_GO7007 is not set
+# CONFIG_USB_IP_COMMON is not set
+# CONFIG_W35UND is not set
+# CONFIG_PRISM2_USB is not set
+# CONFIG_ECHO is not set
+CONFIG_USB_ATMEL=m
+# CONFIG_POCH is not set
+# CONFIG_AGNX is not set
+# CONFIG_OTUS is not set
+# CONFIG_RT2860 is not set
+# CONFIG_RT2870 is not set
+# CONFIG_BENET is not set
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+# CONFIG_PANEL is not set
+# CONFIG_ALTERA_PCIE_CHDMA is not set
+# CONFIG_RTL8187SE is not set
+# CONFIG_INPUT_MIMIO is not set
+# CONFIG_TRANZPORT is not set
+# CONFIG_EPL is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_USB_SERIAL_ATEN2011 is not set
+# CONFIG_B3DFG is not set
+# CONFIG_DST is not set
+# CONFIG_IDE_PHISON is not set
+# CONFIG_PLAN9AUTH is not set
+# CONFIG_HECI is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_USB_SERIAL_QUATECH_ESU100 is not set
+# CONFIG_RT3070 is not set
+# CONFIG_RTL8192SU is not set
+# CONFIG_COWLOOP is not set
+# CONFIG_IIO is not set
+# CONFIG_VME_BUS is not set
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_VT6656 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_RTL8192E is not set
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_VIDEO_CX25821 is not set
+# CONFIG_RT3090 is not set
+# CONFIG_HYPERV is not set
+# CONFIG_R8187SE is not set
+# CONFIG_RTL8192U is not set
+# CONFIG_RAMZSWAP is not set
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_FB_SM7XX is not set
+
+#
+# Android
+#
+# CONFIG_ANDROID is not set
+# CONFIG_ANDROID_BINDER_IPC is not set
+# CONFIG_ANDROID_LOGGER is not set
+# CONFIG_ANDROID_RAM_CONSOLE is not set
+# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
+# CONFIG_ANDROID_TIMED_GPIO is not set
+
+# CONFIG_DEBUG_VIRTUAL is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FUNCTION_GRAPH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+CONFIG_EARLY_PRINTK_DBGP=y
+
+CONFIG_SECURITYFS=y
+
+CONFIG_SCSI_CXGB3_ISCSI=m
+CONFIG_LIBFC=m
+CONFIG_LIBFCOE=m
+CONFIG_FCOE=m
+CONFIG_FCOE_FNIC=m
+# CONFIG_SCSI_LPFC_DEBUG_FS is not set
+
+CONFIG_NOP_USB_XCEIV=m
+
+CONFIG_IMA=y
+CONFIG_IMA_MEASURE_PCR_IDX=10
+CONFIG_IMA_AUDIT=y
+CONFIG_IMA_LSM_RULES=y
+
+CONFIG_LSM_MMAP_MIN_ADDR=65536
+
+# CONFIG_PAGE_POISONING is not set
+
+CONFIG_SLOW_WORK=y
+CONFIG_SLOW_WORK_DEBUG=y
+
+# CONFIG_CRASH_DUMP is not set
+# CONFIG_CRASH is not set
+
+CONFIG_STRIP_ASM_SYMS=y
+
+# CONFIG_RCU_FANOUT_EXACT is not set
+
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+
+CONFIG_FSNOTIFY=y
+
+CONFIG_IEEE802154=m
+CONFIG_IEEE802154_DRIVERS=m
+CONFIG_IEEE802154_FAKEHARD=m
+
+# CONFIG_GCOV_KERNEL is not set
+
+CONFIG_PPS=m
+# CONFIG_PPS_DEBUG is not set
+
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_VT6655 is not set
+# CONFIG_USB_CPC is not set
+# CONFIG_RDC_17F3101X is not set
+# CONFIG_FB_UDL is not set
+
+# DEBUG options that don't get enabled/disabled with 'make debug/release'
+#
+# Kmemleak still produces a lot of false positives.
+# CONFIG_DEBUG_KMEMLEAK is not set
+#
+# This generates a huge amount of dmesg spew
+# CONFIG_DEBUG_KOBJECT is not set
+#
+#
+# These debug options are deliberatly left on (even in 'make release' kernels).
+# They aren't that much of a performance impact, and the value
+# from getting useful bug-reports makes it worth leaving them on.
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_HIGHMEM=y
+CONFIG_DEBUG_SPINLOCK_SLEEP=y
+CONFIG_BOOT_PRINTK_DELAY=y
+CONFIG_DEBUG_LIST=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_DEBUG_DEVRES=y
+CONFIG_DEBUG_RODATA_TEST=y
+CONFIG_DEBUG_NX_TEST=m
+CONFIG_DEBUG_BOOT_PARAMS=y
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+
+CONFIG_MEMORY_FAILURE=y
+CONFIG_HWPOISON_INJECT=m
+
+CONFIG_BLK_DEV_DRBD=m
+
+# CONFIG_MDIO_GPIO is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_W1_MASTER_GPIO is not set
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_CS5535 is not set
+# CONFIG_GPIO_ADP5588 is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_USB_GPIO_VBUS is not set
+
+
+CONFIG_KSYM_TRACER=y
+CONFIG_PROFILE_KSYM_TRACER=y
+CONFIG_KPROBE_EVENT=y
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-2.6.33 b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-2.6.33
new file mode 100755
index 000000000..490ca6373
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-2.6.33
@@ -0,0 +1,2096 @@
+#!/bin/sh
+
+# Copyright (C) 2008, 2009, 2010 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright (C) 2008 Jeff Moe
+# Copyright (C) 2009 Rubén Rodríguez <ruben@gnu.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# deblob - remove non-free blobs from the vanilla linux kernel
+
+# http://www.fsfla.org/svn/fsfla/software/linux-libre
+
+
+# This script, suited for the kernel version named below, in kver,
+# attempts to remove only non-Free Software bits, without removing
+# Free Software that happens to be in the same file.
+
+# Drivers that currently require non-Free firmware are retained, but
+# firmware included in GPLed sources is replaced with /*(DEBLOBBED)*/
+# if the deblob-check script, that knows how to do this, is present.
+# -lxoliva
+
+
+# See also:
+# http://wiki.debian.org/KernelFirmwareLicensing
+# svn://svn.debian.org/kernel/dists/trunk/linux-2.6/debian/patches/debian/dfsg/files-1
+# http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk/firmware/firmware-removed
+# http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk/gen-kernel
+
+# Thanks to Brian Brazil @ gnewsense
+
+
+# For each kver release, start extra with an empty string, then count
+# from 1 if changes are needed that require rebuilding the tarball.
+kver=2.6.33 extra=
+
+case $1 in
+--force)
+ echo "WARNING: Using the force, ignored errors will be" >&2
+ die () {
+ echo ERROR: "$@" >&2
+ errors=:
+ }
+ forced=: errors=false
+ shift
+ ;;
+*)
+ die () {
+ echo ERROR: "$@" >&2
+ echo Use --force to ignore
+ exit 1
+ }
+ forced=false errors=false
+ ;;
+esac
+
+check=`echo "$0" | sed 's,[^/]*$,,;s,^$,.,;s,/*$,,'`/deblob-check
+if [ ! -f $check ] ; then
+ if $forced; then
+ die deblob-check script missing, will remove entire files
+ else
+ die deblob-check script missing
+ fi
+ have_check=false
+else
+ have_check=:
+fi
+
+filetest () {
+ if [ ! -f $1 ]; then
+ die $1 does not exist, something is wrong && return 1
+ fi
+}
+
+announce () {
+ echo
+ echo "$@"
+}
+
+clean_file () {
+ #$1 = filename
+ filetest $1 || return
+ rm $1
+ echo $1: removed
+}
+
+check_changed () {
+ #$1 = filename
+ if cmp $1.deblob $1 > /dev/null; then
+ rm $1.deblob
+ die $1 did not change, something is wrong && return 1
+ fi
+ mv $1.deblob $1
+}
+
+clean_blob () {
+ #$1 = filename
+ filetest $1 || return
+ if $have_check; then
+ name=$1
+ set fnord "$@" -d
+ shift 2
+ $check "$@" -i linux-$kver $name > $name.deblob
+ check_changed $name && echo $name: removed blobs
+ else
+ clean_file $1
+ fi
+}
+
+dummy_blob () {
+ #$1 = filename
+ if test -f $1; then
+ die $1 exists, something is wrong && return
+ elif test ! -f firmware/Makefile; then
+ die firmware/Makefile does not exist, something is wrong && return
+ fi
+
+ clean_sed "s,`echo $1 | sed s,^firmware/,,`,\$(DEBLOBBED),g" \
+ firmware/Makefile "dropped $1"
+}
+
+clean_fw () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_blob $1 -s 4
+ dummy_blob $2
+}
+
+drop_fw_file () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_file $1
+ dummy_blob $2
+}
+
+clean_kconfig () {
+ #$1 = filename $2 = things to remove
+ case $1 in
+ -f)
+ shift
+ ;;
+ *)
+ if $have_check; then
+ return
+ fi
+ ;;
+ esac
+ filetest $1 || return
+ sed "/^config \\($2\\)\$/{p;i\
+ depends on NONFREE
+d;}" $1 > $1.deblob
+ check_changed $1 && echo $1: marked config $2 as depending on NONFREE
+}
+
+clean_mk () {
+ #$1 = config $2 = Makefile name
+ # We don't clean up Makefiles any more --lxoliva
+ # sed -i "/\\($1\\)/d" $2
+ # echo $2: removed $1 support
+ # check_changed $2
+ filetest $2 || return
+ if sed -n "/\\($1\\)/p" $2 | grep . > /dev/null; then
+ :
+ else
+ die $2 does not contain matches for $1
+ fi
+}
+
+clean_sed () {
+ #$1 = sed-script $2 = file $3 = comment
+ filetest $2 || return
+ sed -e "$1" "$2" > "$2".deblob || {
+ die $2: failed: ${3-applied sed script $1} && return 1; }
+ check_changed $2 && echo $2: ${3-applied sed script $1}
+}
+
+reject_firmware () {
+ #$1 = file
+ filetest $1 || return
+ clean_sed '
+s,request\(_ihex\)\?_firmware\(_nowait\)\?,reject_firmware\2,g
+' "$1" 'disabled non-Free firmware-loading machinery'
+}
+
+maybe_reject_firmware () {
+ #$1 = file
+ filetest $1 || return
+ clean_sed '
+s,request_firmware\(_nowait\)\?,maybe_reject_firmware\1,g
+' "$1" 'retain Free firmware-loading machinery, disabling non-Free one'
+}
+
+undefine_macro () {
+ #$1 - macro name
+ #$2 - substitution
+ #$3 - message
+ #rest - file names
+ macro=$1 repl=$2 msg=$3; shift 3
+ for f in "$@"; do
+ clean_sed "
+s,^#define $macro .*\$,/*(DEBLOBBED)*/,;
+s,$macro,$repl,g;
+" "$f" "$msg"
+ done
+}
+
+undefault_firmware () {
+ #$1 - pattern such that $1_DEFAULT_FIRMWARE is #defined to non-Free firmware
+ #$@ other than $1 - file names
+ macro="$1"_DEFAULT_FIRMWARE; shift
+ undefine_macro "$macro" "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" "$@"
+}
+
+# First, check that files that contain firmwares and their
+# corresponding sources are present.
+
+for f in \
+ drivers/char/ser_a2232fw.h \
+ drivers/char/ser_a2232fw.ax \
+ drivers/net/ixp2000/ixp2400_rx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/ixp2000/ixp2400_tx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/wan/wanxlfw.inc_shipped \
+ drivers/net/wan/wanxlfw.S \
+ drivers/net/wireless/atmel.c \
+ drivers/net/wireless/atmel.c \
+ drivers/scsi/53c700_d.h_shipped \
+ drivers/scsi/53c700.scr \
+ drivers/scsi/aic7xxx/aic79xx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic79xx.seq \
+ drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic7xxx.seq \
+ drivers/scsi/aic7xxx_old/aic7xxx_seq.c \
+ drivers/scsi/aic7xxx_old/aic7xxx.seq \
+ drivers/scsi/53c7xx_d.h_shipped \
+ drivers/scsi/53c7xx.scr \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ firmware/dsp56k/bootstrap.bin.ihex \
+ firmware/dsp56k/bootstrap.asm \
+ firmware/keyspan_pda/keyspan_pda.HEX \
+ firmware/keyspan_pda/keyspan_pda.S \
+ firmware/keyspan_pda/xircom_pgs.HEX \
+ firmware/keyspan_pda/xircom_pgs.S \
+ sound/pci/cs46xx/imgs/cwcdma.h \
+ sound/pci/cs46xx/imgs/cwcdma.asp \
+; do
+ if test ! $f; then
+ die $f is not present, something is amiss && return
+ fi
+done
+
+# Identify the tarball.
+grep -q 'EXTRAVERSION.*-libre' Makefile ||
+clean_sed "s,^EXTRAVERSION.*,&-libre$extra,
+" Makefile 'added -libre to EXTRAVERSION'
+
+# Add reject_firmware and maybe_reject_firmware
+grep -q _LINUX_LIBRE_FIRMWARE_H include/linux/firmware.h ||
+clean_sed '$i\
+#ifndef _LINUX_LIBRE_FIRMWARE_H\
+#define _LINUX_LIBRE_FIRMWARE_H\
+\
+#include <linux/device.h>\
+\
+#define NONFREE_FIRMWARE "/*(DEBLOBBED)*/"\
+\
+static inline int\
+report_missing_free_firmware(const char *name, const char *what)\
+{\
+ printk(KERN_ERR "%s: Missing Free %s\\n", name,\
+ what ? what : "firmware");\
+ return -EINVAL;\
+}\
+static inline int\
+reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ const struct firmware *xfw = NULL;\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware(&xfw, NONFREE_FIRMWARE, device);\
+ if (!retval)\
+ release_firmware(xfw);\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware(fw, name, device);\
+ else\
+ return request_firmware(fw, name, device);\
+}\
+static inline void\
+discard_rejected_firmware(const struct firmware *fw, void *context)\
+{\
+ release_firmware(fw);\
+}\
+static inline int\
+reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware_nowait(module, uevent, NONFREE_FIRMWARE,\
+ device, gfp, NULL,\
+ discard_rejected_firmware);\
+ if (retval)\
+ return retval;\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+ else\
+ return request_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+}\
+\
+#endif /* _LINUX_LIBRE_FIRMWARE_H */\
+' include/linux/firmware.h 'added non-Free firmware notification support'
+
+########
+# Arch #
+########
+
+# x86
+
+announce MICROCODE_AMD - "AMD microcode patch loading support"
+reject_firmware arch/x86/kernel/microcode_amd.c
+clean_blob arch/x86/kernel/microcode_amd.c
+clean_kconfig arch/x86/Kconfig 'MICROCODE_AMD'
+clean_mk CONFIG_MICROCODE_AMD arch/x86/kernel/Makefile
+
+announce MICROCODE_INTEL - "Intel microcode patch loading support"
+reject_firmware arch/x86/kernel/microcode_intel.c
+clean_blob arch/x86/kernel/microcode_intel.c
+clean_kconfig arch/x86/Kconfig 'MICROCODE_INTEL'
+clean_mk CONFIG_MICROCODE_INTEL arch/x86/kernel/Makefile
+
+# arm
+
+announce IXP4XX_NPE - "IXP4xx Network Processor Engine support"
+reject_firmware arch/arm/mach-ixp4xx/ixp4xx_npe.c
+clean_blob Documentation/arm/IXP4xx
+
+announce ARCH_NETX - "Hilscher NetX based"
+clean_sed '
+s,\([" ]\)request_firmware(,\1reject_firmware(,
+' arch/arm/mach-netx/xc.c 'disabled non-Free firmware-loading machinery'
+clean_blob arch/arm/mach-netx/xc.c
+clean_blob drivers/net/netx-eth.c
+clean_kconfig arch/arm/Kconfig 'ARCH_NETX'
+clean_mk CONFIG_ARCH_NETX arch/arm/Makefile
+
+#######
+# ATM #
+#######
+
+announce ATM_AMBASSADOR - "Madge Ambassador, Collage PCI 155 Server"
+reject_firmware drivers/atm/ambassador.c
+clean_blob drivers/atm/ambassador.c
+clean_fw firmware/atmsar11.HEX firmware/atmsar11.fw
+clean_kconfig drivers/atm/Kconfig 'ATM_AMBASSADOR'
+clean_mk CONFIG_ATM_AMBASSADOR drivers/atm/Makefile
+
+announce ATM_FORE200E - "FORE Systems 200E-series"
+reject_firmware drivers/atm/fore200e.c
+clean_blob drivers/atm/fore200e.c
+clean_blob Documentation/networking/fore200e.txt
+clean_blob drivers/atm/.gitignore
+clean_blob Documentation/dontdiff
+clean_kconfig drivers/atm/Kconfig 'ATM_FORE200E'
+clean_mk CONFIG_ATM_FORE200E drivers/atm/Makefile
+
+announce ATM_SOLOS - "Solos ADSL2+ PCI Multiport card driver"
+reject_firmware drivers/atm/solos-pci.c
+clean_blob drivers/atm/solos-pci.c
+clean_kconfig drivers/atm/Kconfig 'ATM_SOLOS'
+clean_mk CONFIG_ATM_SOLOS drivers/atm/Makefile
+
+########
+# char #
+########
+
+announce COMPUTONE - "Computone IntelliPort Plus serial"
+drop_fw_file firmware/intelliport2.bin.ihex firmware/intelliport2.bin
+reject_firmware drivers/char/ip2/ip2main.c
+clean_blob drivers/char/ip2/ip2main.c
+clean_kconfig drivers/char/Kconfig 'COMPUTONE'
+clean_mk CONFIG_COMPUTONE drivers/char/Makefile
+
+announce CYCLADES - "Cyclades async mux support"
+reject_firmware drivers/char/cyclades.c
+clean_blob drivers/char/cyclades.c
+clean_kconfig drivers/char/Kconfig 'CYCLADES'
+clean_mk CONFIG_CYCLADES drivers/char/Makefile
+
+announce ISI - "Multi-Tech multiport card support"
+reject_firmware drivers/char/isicom.c
+clean_blob drivers/char/isicom.c
+clean_kconfig drivers/char/Kconfig 'ISI'
+clean_mk CONFIG_ISI drivers/char/Makefile
+
+announce MOXA_INTELLIO - "Moxa Intellio support"
+reject_firmware drivers/char/moxa.c
+clean_blob drivers/char/moxa.c
+clean_kconfig drivers/char/Kconfig 'MOXA_INTELLIO'
+clean_mk CONFIG_MOXA_INTELLIO drivers/char/Makefile
+
+# gpu drm
+
+announce DRM_NOUVEAU - "Nouveau (nVidia) cards"
+reject_firmware drivers/gpu/drm/nouveau/nouveau_grctx.c
+clean_blob drivers/gpu/drm/nouveau/nouveau_grctx.c
+clean_blob drivers/gpu/drm/nouveau/nv50_graph.c
+clean_kconfig drivers/gpu/drk/nouveau/Kconfig 'DRM_NOUVEAU'
+clean_mk CONFIG_DRM_NOUVEAU drivers/gpu/drm/nouveau/Makefile
+
+announce DRM_MGA - "Matrox g200/g400"
+drop_fw_file firmware/matrox/g200_warp.H16 firmware/matrox/g200_warp.fw
+drop_fw_file firmware/matrox/g400_warp.H16 firmware/matrox/g400_warp.fw
+reject_firmware drivers/gpu/drm/mga/mga_warp.c
+clean_blob drivers/gpu/drm/mga/mga_warp.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_MGA'
+clean_mk CONFIG_DRM_MGA drivers/gpu/drm/Makefile
+
+announce DRM_R128 - "ATI Rage 128"
+drop_fw_file firmware/r128/r128_cce.bin.ihex firmware/r128/r128_cce.bin
+reject_firmware drivers/gpu/drm/r128/r128_cce.c
+clean_blob drivers/gpu/drm/r128/r128_cce.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_R128'
+clean_mk CONFIG_DRM_R128 drivers/gpu/drm/Makefile
+
+announce DRM_RADEON - "ATI Radeon"
+drop_fw_file firmware/radeon/R100_cp.bin.ihex firmware/radeon/R100_cp.bin
+drop_fw_file firmware/radeon/R200_cp.bin.ihex firmware/radeon/R200_cp.bin
+drop_fw_file firmware/radeon/R300_cp.bin.ihex firmware/radeon/R300_cp.bin
+drop_fw_file firmware/radeon/R420_cp.bin.ihex firmware/radeon/R420_cp.bin
+drop_fw_file firmware/radeon/R520_cp.bin.ihex firmware/radeon/R520_cp.bin
+drop_fw_file firmware/radeon/R600_me.bin.ihex firmware/radeon/R600_me.bin
+drop_fw_file firmware/radeon/R600_pfp.bin.ihex firmware/radeon/R600_pfp.bin
+drop_fw_file firmware/radeon/RS600_cp.bin.ihex firmware/radeon/RS600_cp.bin
+drop_fw_file firmware/radeon/RS690_cp.bin.ihex firmware/radeon/RS690_cp.bin
+drop_fw_file firmware/radeon/RS780_me.bin.ihex firmware/radeon/RS780_me.bin
+drop_fw_file firmware/radeon/RS780_pfp.bin.ihex firmware/radeon/RS780_pfp.bin
+drop_fw_file firmware/radeon/RV610_me.bin.ihex firmware/radeon/RV610_me.bin
+drop_fw_file firmware/radeon/RV610_pfp.bin.ihex firmware/radeon/RV610_pfp.bin
+drop_fw_file firmware/radeon/RV620_me.bin.ihex firmware/radeon/RV620_me.bin
+drop_fw_file firmware/radeon/RV620_pfp.bin.ihex firmware/radeon/RV620_pfp.bin
+drop_fw_file firmware/radeon/RV630_me.bin.ihex firmware/radeon/RV630_me.bin
+drop_fw_file firmware/radeon/RV630_pfp.bin.ihex firmware/radeon/RV630_pfp.bin
+drop_fw_file firmware/radeon/RV635_me.bin.ihex firmware/radeon/RV635_me.bin
+drop_fw_file firmware/radeon/RV635_pfp.bin.ihex firmware/radeon/RV635_pfp.bin
+drop_fw_file firmware/radeon/RV670_me.bin.ihex firmware/radeon/RV670_me.bin
+drop_fw_file firmware/radeon/RV670_pfp.bin.ihex firmware/radeon/RV670_pfp.bin
+drop_fw_file firmware/radeon/RV710_me.bin.ihex firmware/radeon/RV710_me.bin
+drop_fw_file firmware/radeon/RV710_pfp.bin.ihex firmware/radeon/RV710_pfp.bin
+drop_fw_file firmware/radeon/RV730_me.bin.ihex firmware/radeon/RV730_me.bin
+drop_fw_file firmware/radeon/RV730_pfp.bin.ihex firmware/radeon/RV730_pfp.bin
+drop_fw_file firmware/radeon/RV770_me.bin.ihex firmware/radeon/RV770_me.bin
+drop_fw_file firmware/radeon/RV770_pfp.bin.ihex firmware/radeon/RV770_pfp.bin
+reject_firmware drivers/gpu/drm/radeon/radeon_cp.c
+clean_blob drivers/gpu/drm/radeon/radeon_cp.c
+reject_firmware drivers/gpu/drm/radeon/r100.c
+clean_blob drivers/gpu/drm/radeon/r100.c
+reject_firmware drivers/gpu/drm/radeon/r600.c
+clean_blob drivers/gpu/drm/radeon/r600.c
+reject_firmware drivers/gpu/drm/radeon/r600_cp.c
+clean_blob drivers/gpu/drm/radeon/r600_cp.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_RADEON'
+clean_mk CONFIG_DRM_RADEON drivers/gpu/drm/Makefile
+
+
+#########
+# Media #
+#########
+
+# media/tuner
+
+announce MEDIA_TUNER_XC2028 - "XCeive xc2028/xc3028 tuners"
+undefault_firmware 'XC\(2028\|3028L\)' \
+ drivers/media/common/tuners/tuner-xc2028.h \
+ drivers/media/video/saa7134/saa7134-cards.c \
+ drivers/media/video/ivtv/ivtv-driver.c \
+ drivers/media/video/cx18/cx18-driver.c \
+ drivers/media/video/cx18/cx18-dvb.c \
+ drivers/media/video/cx23885/cx23885-dvb.c \
+ drivers/media/video/cx88/cx88-dvb.c \
+ drivers/media/video/cx88/cx88-cards.c \
+ drivers/media/video/em28xx/em28xx-cards.c \
+ drivers/media/dvb/dvb-usb/dib0700_devices.c \
+ drivers/media/dvb/dvb-usb/cxusb.c
+reject_firmware drivers/media/common/tuners/tuner-xc2028.c
+clean_kconfig drivers/media/common/tuners/Kconfig 'MEDIA_TUNER_XC2028'
+clean_mk CONFIG_MEDIA_TUNER_XC2028 drivers/media/common/tuners/Makefile
+
+announce MEDIA_TUNER_XC5000 - "Xceive XC5000 silicon tuner"
+undefine_macro 'XC5000_DEFAULT_FIRMWARE_SIZE' 0 \
+ 'removed non-Free firmware size' drivers/media/common/tuners/xc5000.c
+undefault_firmware 'XC5000' \
+ drivers/media/common/tuners/xc5000.c \
+ drivers/media/video/cx231xx/cx231xx-cards.c
+reject_firmware drivers/media/common/tuners/xc5000.c
+clean_kconfig drivers/media/common/tuners/Kconfig 'MEDIA_TUNER_XC5000'
+clean_mk CONFIG_MEDIA_TUNER_XC5000 drivers/media/common/tuners/Makefile
+
+announce DVB_USB - "Support for various USB DVB devices"
+reject_firmware drivers/media/dvb/dvb-usb/dvb-usb-firmware.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB'
+clean_mk CONFIG_DVB_USB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1"
+clean_file drivers/media/dvb/dvb-usb/af9005-script.h
+clean_sed '
+s,^ deb_info("load init script\\n");$, {\n err("Missing Free init script\\n");\n return scriptlen = ret = -EINVAL;\n ,;
+' drivers/media/dvb/dvb-usb/af9005-fe.c 'report missing Free init script'
+clean_blob drivers/media/dvb/dvb-usb/af9005-fe.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9005'
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_B2C2_FLEXCOP - "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
+reject_firmware drivers/media/dvb/b2c2/flexcop-fe-tuner.c
+
+announce DVB_BT8XX - "BT8xx based PCI cards"
+reject_firmware drivers/media/dvb/bt8xx/dvb-bt8xx.c
+
+announce DVB_USB_A800 - "AVerMedia AverTV DVB-T USB 2.0 (A800)"
+clean_blob drivers/media/dvb/dvb-usb/a800.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_A800'
+clean_mk CONFIG_DVB_USB_A800 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1 support"
+clean_blob drivers/media/dvb/dvb-usb/af9005.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9005'
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9015 - "Afatech AF9015 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/af9015.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9015'
+clean_mk CONFIG_DVB_USB_AF9015 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_CXUSB - "Conexant USB2.0 hybrid reference design support"
+clean_blob drivers/media/dvb/dvb-usb/cxusb.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_CXUSB'
+clean_mk CONFIG_DVB_USB_CXUSB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIB0700 - "DiBcom DiB0700 USB DVB devices"
+clean_blob drivers/media/dvb/dvb-usb/dib0700_devices.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIB0700'
+clean_mk CONFIG_DVB_USB_DIB0700 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MB - "DiBcom USB DVB-T devices (based on the DiB3000M-B)"
+clean_blob drivers/media/dvb/dvb-usb/dibusb-mb.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MB'
+clean_mk CONFIG_DVB_USB_DIBUSB_MB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MC - "DiBcom USB DVB-T devices (based on the DiB3000M-C/P)"
+clean_blob drivers/media/dvb/dvb-usb/dibusb-mc.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MC'
+clean_mk CONFIG_DVB_USB_DIBUSB_MC drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIGITV - "Nebula Electronics uDigiTV DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/digitv.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIGITV'
+clean_mk CONFIG_DVB_USB_DIGITV drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DTT200U - "WideView WT-200U and WT-220U (pen) DVB-T USB2.0 support (Yakumo/Hama/Typhoon/Yuan)"
+clean_blob drivers/media/dvb/dvb-usb/dtt200u.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DTT200U'
+clean_mk CONFIG_DVB_USB_DTT200U drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DW2102 - "DvbWorld DVB-S/S2 USB2.0 support"
+reject_firmware drivers/media/dvb/dvb-usb/dw2102.c
+clean_blob drivers/media/dvb/dvb-usb/dw2102.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DW2102'
+clean_mk CONFIG_DVB_USB_DW2102 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_EC168 - "E3C EC168 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/ec168.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_EC168'
+clean_mk CONFIG_DVB_USB_EC168 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_GP8PSK - "GENPIX 8PSK->USB module support"
+reject_firmware drivers/media/dvb/dvb-usb/gp8psk.c
+clean_blob drivers/media/dvb/dvb-usb/gp8psk.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_GP8PSK'
+clean_mk CONFIG_DVB_USB_GP8PSK drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_M920X - "Uli m920x DVB-T USB2.0 support"
+reject_firmware drivers/media/dvb/dvb-usb/m920x.c
+clean_blob drivers/media/dvb/dvb-usb/m920x.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_M920X'
+clean_mk CONFIG_DVB_USB_M920X drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_NOVA_T_USB2 - "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/nova-t-usb2.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_NOVA_T_USB2'
+clean_mk CONFIG_DVB_USB_NOVA_T_USB2 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_OPERA1 - "Opera1 DVB-S USB2.0 receiver"
+reject_firmware drivers/media/dvb/dvb-usb/opera1.c
+clean_blob drivers/media/dvb/dvb-usb/opera1.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_OPERA1'
+clean_mk CONFIG_DVB_USB_OPERA1 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_TTUSB2 - "Pinnacle 400e DVB-S USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/ttusb2.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_TTUSB2'
+clean_mk CONFIG_DVB_USB_TTUSB2 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_UMT_010 - "HanfTek UMT-010 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/umt-010.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_UMT_010'
+clean_mk CONFIG_DVB_USB_UMT_010 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_VP702X - "TwinhanDTV StarBox and clones DVB-S USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/vp702x.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_VP702X'
+clean_mk CONFIG_DVB_USB_VP702X drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_VP7045 - "TwinhanDTV Alpha/MagicBoxII, DNTV tinyUSB2, Beetle USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/vp7045.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_VP7045'
+clean_mk CONFIG_DVB_USB_VP7045 drivers/media/dvb/dvb-usb/Makefile
+
+# dvb/frontends
+
+announce DVB_AF9013 - "Afatech AF9013 demodulator"
+undefault_firmware 'AF9013' \
+ drivers/media/dvb/frontends/af9013.c \
+ drivers/media/dvb/frontends/af9013_priv.h
+reject_firmware drivers/media/dvb/frontends/af9013.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_AF9013'
+clean_mk CONFIG_DVB_AF9013 drivers/media/dvb/frontends/Makefile
+
+announce DVB_BCM3510 - "Broadcom BCM3510"
+undefault_firmware 'BCM3510' drivers/media/dvb/frontends/bcm3510.c
+reject_firmware drivers/media/dvb/frontends/bcm3510.c
+reject_firmware drivers/media/dvb/frontends/bcm3510.h
+clean_sed '
+/You.ll need a firmware/,/dvb-fe-bcm/d;
+' drivers/media/dvb/frontends/bcm3510.c \
+ "removed non-Free firmware notes"
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_BCM3510'
+clean_mk CONFIG_DVB_BCM3510 drivers/media/dvb/frontends/Makefile
+
+announce DVB_DS3000 - "Montage Tehnology DS3000 based"
+undefault_firmware 'DS3000' \
+ drivers/media/dvb/frontends/ds3000.c
+reject_firmware drivers/media/dvb/frontends/ds3000.c
+clean_blob drivers/media/dvb/frontends/ds3000.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_DS3000'
+clean_mk CONFIG_DVB_DS3000 drivers/media/dvb/frontends/Makefile
+
+announce DVB_LGS8GXX - "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
+clean_sed '
+/^static int lgs8g75_init_data/i\
+#define lgs8g75_init_data(priv) do { dprintk("lgs8g75: missing Free firmware\\n"); goto error_out; } while(0)
+' drivers/media/dvb/frontends/lgs8gxx.c 'report missing Free firmware'
+clean_blob drivers/media/dvb/frontends/lgs8gxx.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_LGS8GXX'
+clean_mk CONFIG_DVB_LGS8GXX drivers/media/dvb/frontends/Makefile
+
+announce DVB_NXT200X - "NxtWave Communications NXT2002/NXT2004 based"
+undefault_firmware 'NXT200[24]' drivers/media/dvb/frontends/nxt200x.c
+reject_firmware drivers/media/dvb/frontends/nxt200x.c
+clean_blob drivers/media/dvb/frontends/nxt200x.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_NXT200X'
+clean_mk CONFIG_DVB_NXT200X drivers/media/dvb/frontends/Makefile
+
+announce DVB_OR51132 - "Oren OR51132 based"
+reject_firmware drivers/media/dvb/frontends/or51132.c
+clean_blob drivers/media/dvb/frontends/or51132.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_OR51132'
+clean_mk CONFIG_DVB_OR51132 drivers/media/dvb/frontends/Makefile
+
+announce DVB_OR51211 - "Oren OR51211 based"
+undefault_firmware 'OR51211' drivers/media/dvb/frontends/or51211.c
+reject_firmware drivers/media/dvb/frontends/or51211.c
+reject_firmware drivers/media/dvb/frontends/or51211.h
+clean_blob drivers/media/dvb/frontends/or51211.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_OR51211'
+clean_mk CONFIG_DVB_OR51211 drivers/media/dvb/frontends/Makefile
+
+announce DVB_SP8870 - "Spase sp8870"
+undefault_firmware 'SP8870' drivers/media/dvb/frontends/sp8870.c
+reject_firmware drivers/media/dvb/frontends/sp8870.c
+reject_firmware drivers/media/dvb/frontends/sp8870.h
+clean_blob drivers/media/dvb/frontends/sp8870.c
+clean_kconfig drivers/media/dvb/frontends 'DVB_SP8870'
+clean_mk CONFIG_DVB_SP8870 drivers/media/dvb/frontends/Makefile
+
+announce DVB_CX24116 - "Conexant CX24116 based"
+undefault_firmware CX24116 drivers/media/dvb/frontends/cx24116.c
+reject_firmware drivers/media/dvb/frontends/cx24116.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_CX24116'
+clean_mk CONFIG_DVB_CX24116 drivers/media/dvb/frontends/Makefile
+
+announce DVB_SP887X - "Spase sp887x based"
+undefault_firmware 'SP887X' drivers/media/dvb/frontends/sp887x.c
+reject_firmware drivers/media/dvb/frontends/sp887x.c
+reject_firmware drivers/media/dvb/frontends/sp887x.h
+clean_blob drivers/media/dvb/frontends/sp887x.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_SP887X'
+clean_mk CONFIG_DVB_SP887X drivers/media/dvb/frontends/Makefile
+
+announce DVB_TDA10048 - "Philips TDA10048HN based"
+undefine_macro 'TDA10048_DEFAULT_FIRMWARE_SIZE' 0 \
+ 'removed non-Free firmware size' drivers/media/dvb/frontends/tda10048.c
+undefault_firmware 'TDA10048' drivers/media/dvb/frontends/tda10048.c
+reject_firmware drivers/media/dvb/frontends/tda10048.c
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_TDA10048'
+clean_mk CONFIG_DVB_TDA10048 drivers/media/dvb/frontends/Makefile
+
+announce DVB_TDA1004X - "Philips TDA10045H/TDA10046H"
+undefault_firmware 'TDA1004[56]' drivers/media/dvb/frontends/tda1004x.c
+reject_firmware drivers/media/dvb/frontends/tda1004x.c
+reject_firmware drivers/media/dvb/frontends/tda1004x.h
+clean_blob drivers/media/dvb/frontends/tda1004x.c
+clean_kconfig drivers/media/dvb/frontends 'DVB_TDA1004X'
+clean_mk CONFIG_DVB_TDA1004X drivers/media/dvb/frontends/Makefile
+
+# dvb
+
+announce DVB_AV7110 - "AV7110 cards"
+reject_firmware drivers/media/dvb/ttpci/av7110.c
+clean_blob drivers/media/dvb/ttpci/av7110.c
+clean_kconfig drivers/media/dvb/ttpci/Kconfig 'DVB_AV7110'
+clean_mk CONFIG_DVB_AV7110 drivers/media/dvb/ttpci/Makefile
+
+announce DVB_BUDGET - "Budget cards"
+reject_firmware drivers/media/dvb/ttpci/budget.c
+reject_firmware drivers/media/dvb/frontends/tdhd1.h
+
+announce DVB_BUDGET_AV - "Budget cards with analog video inputs"
+reject_firmware drivers/media/dvb/ttpci/budget-av.c
+
+announce DVB_BUDGET_CI - "Budget cards with onboard CI connector"
+reject_firmware drivers/media/dvb/ttpci/budget-ci.c
+
+announce DVB_DRX397XD - "Micronas DRX3975D/DRX3977D based"
+reject_firmware drivers/media/dvb/frontends/drx397xD.c
+clean_blob drivers/media/dvb/frontends/drx397xD_fw.h
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_DRX397XD'
+clean_mk CONFIG_DVB_DRX397XD drivers/media/dvb/frontends/Makefile
+
+announce DVB_PLUTO2 - "Pluto2 cards"
+reject_firmware drivers/media/dvb/pluto2/pluto2.c
+
+announce SMS_SIANO_MDTV - "Siano SMS1xxx based MDTV receiver"
+reject_firmware drivers/media/dvb/siano/smscoreapi.c
+clean_blob drivers/media/dvb/siano/smscoreapi.c
+clean_blob drivers/media/dvb/siano/sms-cards.c
+clean_kconfig drivers/media/dvb/siano/Kconfig 'SMS_SIANO_MDTV'
+clean_mk CONFIG_SMS_SIANO_MDTV drivers/media/dvb/siano/Makefile
+
+announce SMS_USB_DRV - "Siano's USB interface support"
+reject_firmware drivers/media/dvb/siano/smsusb.c
+clean_blob drivers/media/dvb/siano/smsusb.c
+clean_kconfig drivers/media/dvb/siano/Kconfig 'SMS_USB_DRV'
+clean_mk CONFIG_SMS_USB_DRV drivers/media/dvb/siano/Makefile
+
+announce DVB_TTUSB_BUDGET - "Technotrend/Hauppauge Nova-USB devices"
+drop_fw_file firmware/ttusb-budget/dspbootcode.bin.ihex firmware/ttusb-budget/dspbootcode.bin
+reject_firmware drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+clean_blob drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+clean_kconfig drivers/media/dvb/ttusb-budget/Kconfig 'DVB_TTUSB_BUDGET'
+clean_mk CONFIG_DVB_TTUSB_BUDGET drivers/media/dvb/ttusb-budget/Makefile
+
+announce DVB_TTUSB_DEC - "Technotrend/Hauppauge USB DEC devices"
+reject_firmware drivers/media/dvb/ttusb-dec/ttusb_dec.c
+clean_blob drivers/media/dvb/ttusb-dec/ttusb_dec.c
+clean_kconfig drivers/media/dvb/ttusb-dec/Kconfig 'DVB_TTUSB_DEC'
+clean_mk CONFIG_DVB_TTUSB_DEC drivers/media/dvb/ttusb-dec/Makefile
+
+# video
+
+announce VIDEO_BT848 - "BT848 Video For Linux"
+reject_firmware drivers/media/video/bt8xx/bttv-cards.c
+clean_kconfig drivers/media/video/bt8xx/Kconfig 'VIDEO_BT848'
+clean_mk CONFIG_VIDEO_BT848 drivers/media/video/bt8xx/Makefile
+
+announce VIDEO_CPIA2 - "CPiA2 Video For Linux"
+clean_fw firmware/cpia2/stv0672_vp4.bin.ihex firmware/cpia2/stv0672_vp4.bin
+reject_firmware drivers/media/video/cpia2/cpia2_core.c
+clean_blob drivers/media/video/cpia2/cpia2_core.c
+clean_kconfig drivers/media/video/cpia2/Kconfig 'VIDEO_CPIA2'
+clean_mk CONFIG_VIDEO_CPIA2 drivers/media/video/cpia2/Makefile
+
+announce VIDEO_CX18 - "Conexant cx23418 MPEG encoder support"
+reject_firmware drivers/media/video/cx18/cx18-av-firmware.c
+reject_firmware drivers/media/video/cx18/cx18-dvb.c
+reject_firmware drivers/media/video/cx18/cx18-firmware.c
+clean_blob drivers/media/video/cx18/cx18-av-firmware.c
+clean_blob drivers/media/video/cx18/cx18-dvb.c
+clean_blob drivers/media/video/cx18/cx18-firmware.c
+clean_kconfig drivers/media/video/cx18/Kconfig 'VIDEO_CX18'
+clean_mk CONFIG_VIDEO_CX18 drivers/media/video/cx18/Makefile
+
+announce VIDEO_CX23885 - "Conexant cx23885 (2388x successor) support"
+reject_firmware drivers/media/video/cx23885/cx23885-417.c
+clean_blob drivers/media/video/cx23885/cx23885-417.c
+clean_kconfig drivers/media/video/cx23885/Kconfig 'VIDEO_CX23885'
+clean_mk CONFIG_VIDEO_CX23885 drivers/media/video/cx23885/Makefile
+
+announce VIDEO_CX25840 - "Conexant CX2584x audio/video decoders"
+reject_firmware drivers/media/video/cx25840/cx25840-firmware.c
+clean_blob drivers/media/video/cx25840/cx25840-firmware.c
+clean_kconfig drivers/media/video/cx25840/Kconfig 'VIDEO_CX25840'
+clean_mk CONFIG_VIDEO_CX25840 drivers/media/video/cx25840/Makefile
+
+announce VIDEO_CX88_BLACKBIRD - "Blackbird MPEG encoder support (cx2388x + cx23416)"
+reject_firmware drivers/media/video/cx88/cx88-blackbird.c
+clean_kconfig drivers/media/video/cx88/Kconfig 'VIDEO_CX88_BLACKBIRD'
+clean_mk CONFIG_VIDEO_CX88_BLACKBIRD drivers/media/video/cx88/Makefile
+
+announce VIDEO_IVTV - "Conexant cx23416/cx23415 MPEG encoder/decoder support"
+reject_firmware drivers/media/video/ivtv/ivtv-firmware.c
+clean_blob drivers/media/video/ivtv/ivtv-firmware.c
+clean_kconfig drivers/media/video/ivtv/Kconfig 'VIDEO_IVTV'
+clean_mk CONFIG_VIDEO_IVTV drivers/media/video/ivtv/Makefile
+
+announce VIDEO_PVRUSB2 - "Hauppauge WinTV-PVR USB2 support"
+reject_firmware drivers/media/video/pvrusb2/pvrusb2-hdw.c
+clean_blob drivers/media/video/pvrusb2/pvrusb2-devattr.c
+clean_kconfig drivers/media/video/pvrusb2/Kconfig 'VIDEO_PVRUSB2'
+clean_mk CONFIG_VIDEO_PVRUSB2 drivers/media/video/pvrusb2/Makefile
+
+announce "VIDEO_CX23885, VIDEO_CX88_BLACKBIRD, VIDEO_IVTV, VIDEO_PVRUSB2" - "See above"
+clean_blob include/media/cx2341x.h
+
+announce VIDEO_GO7007 - "Go 7007 support"
+reject_firmware drivers/staging/go7007/go7007-driver.c
+clean_blob drivers/staging/go7007/go7007-driver.c
+reject_firmware drivers/staging/go7007/go7007-fw.c
+clean_blob drivers/staging/go7007/go7007-usb.c
+clean_blob drivers/staging/go7007/saa7134-go7007.c
+clean_kconfig drivers/staging/go7007/Kconfig 'VIDEO_GO7007'
+clean_mk CONFIG_VIDEO_GO7007 drivers/staging/go7007/Makefile
+
+announce VIDEO_GO7007_USB_S2250_BOARD - "Sensoray 2250/2251 support"
+reject_firmware drivers/staging/go7007/s2250-loader.c
+clean_blob drivers/staging/go7007/s2250-loader.c
+clean_kconfig drivers/staging/go7007/Kconfig 'VIDEO_GO7007_USB_S2250_BOARD'
+clean_mk CONFIG_VIDEO_GO7007_USB_S2250_BOARD drivers/staging/go7007/Makefile
+
+announce VIDEO_SAA7134_DVB - "DVB/ATSC Support for saa7134 based TV cards"
+reject_firmware drivers/media/video/saa7134/saa7134-dvb.c
+clean_kconfig drivers/media/video/saa7134/Kconfig 'VIDEO_SAA7134_DVB'
+clean_mk CONFIG_VIDEO_SAA7134_DVB drivers/media/video/saa7134/Makefile
+
+announce VIDEO_SAA7164 - "NXP SAA7164 support"
+reject_firmware drivers/media/video/saa7164/saa7164-fw.c
+clean_blob drivers/media/video/saa7164/saa7164-fw.c
+clean_kconfig drivers/media/video/saa7164/Kconfig 'VIDEO_SAA7164'
+clean_mk CONFIG_VIDEO_SAA7164 drivers/media/video/saa7164/Makefile
+
+announce USB_DABUSB - "DABUSB driver"
+clean_fw firmware/dabusb/bitstream.bin.ihex firmware/dabusb/bitstream.bin
+clean_fw firmware/dabusb/firmware.HEX firmware/dabusb/firmware.fw
+reject_firmware drivers/media/video/dabusb.c
+clean_blob drivers/media/video/dabusb.c
+clean_kconfig drivers/media/Kconfig 'USB_DABUSB'
+clean_mk CONFIG_USB_DABUSB drivers/media/video/Makefile
+
+announce USB_S2255 - "USB Sensoray 2255 video capture device"
+reject_firmware drivers/media/video/s2255drv.c
+clean_blob drivers/media/video/s2255drv.c
+clean_kconfig drivers/media/video/Kconfig 'USB_S2255'
+clean_mk CONFIG_USB_S2255 drivers/media/video/Makefile
+
+announce USB_VICAM - "USB 3com HomeConnect, AKA vicam"
+drop_fw_file firmware/vicam/firmware.H16 firmware/vicam/firmware.fw
+reject_firmware drivers/media/video/usbvideo/vicam.c
+clean_blob drivers/media/video/usbvideo/vicam.c
+clean_kconfig drivers/media/video/usbvideo/Kconfig 'USB_VICAM'
+clean_mk CONFIG_USB_VICAM drivers/media/video/usbvideo/Makefile
+
+
+#######
+# net #
+#######
+
+announce ACENIC - "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit"
+drop_fw_file firmware/acenic/tg1.bin.ihex firmware/acenic/tg1.bin
+drop_fw_file firmware/acenic/tg2.bin.ihex firmware/acenic/tg2.bin
+reject_firmware drivers/net/acenic.c
+clean_blob drivers/net/acenic.c
+clean_kconfig drivers/net/Kconfig 'ACENIC'
+clean_mk CONFIG_ACENIC drivers/net/Makefile
+
+announce ADAPTEC_STARFIRE - "Adaptec Starfire/DuraLAN support"
+clean_fw firmware/adaptec/starfire_rx.bin.ihex firmware/adaptec/starfire_rx.bin
+clean_fw firmware/adaptec/starfire_tx.bin.ihex firmware/adaptec/starfire_tx.bin
+reject_firmware drivers/net/starfire.c
+clean_blob drivers/net/starfire.c
+clean_kconfig drivers/net/Kconfig 'ADAPTEC_STARFIRE'
+clean_mk CONFIG_ADAPTEC_STARFIRE drivers/net/Makefile
+
+announce BNX2 - "Broadcom NetXtremeII"
+drop_fw_file firmware/bnx2/bnx2-mips-09-5.0.0.j3.fw.ihex firmware/bnx2/bnx2-mips-09-5.0.0.j3.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09-5.0.0.j3.fw.ihex firmware/bnx2/bnx2-rv2p-09-5.0.0.j3.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw.ihex firmware/bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw
+drop_fw_file firmware/bnx2/bnx2-mips-06-5.0.0.j3.fw.ihex firmware/bnx2/bnx2-mips-06-5.0.0.j3.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-06-5.0.0.j3.fw.ihex firmware/bnx2/bnx2-rv2p-06-5.0.0.j3.fw
+reject_firmware drivers/net/bnx2.c
+clean_blob drivers/net/bnx2.c
+clean_kconfig drivers/net/Kconfig 'BNX2'
+clean_mk CONFIG_BNX2 drivers/net/Makefile
+
+announce BNX2X - "Broadcom NetXtremeII 10Gb support"
+drop_fw_file firmware/bnx2x-e1-5.2.7.0.fw.ihex firmware/bnx2x-e1-5.2.7.0.fw
+drop_fw_file firmware/bnx2x-e1h-5.2.7.0.fw.ihex firmware/bnx2x-e1h-5.2.7.0.fw
+reject_firmware drivers/net/bnx2x_main.c
+clean_sed '
+/^#include "bnx2x_init\.h"/,/^$/{
+ /^$/i\
+#define bnx2x_init_block(bp, start, end) \\\
+ return (printk(KERN_ERR PFX "%s: Missing Free firmware\\n", bp->dev->name),\\\
+ -EINVAL)
+}' drivers/net/bnx2x_main.c 'report missing Free firmware'
+clean_blob drivers/net/bnx2x_main.c
+clean_blob drivers/net/bnx2x_hsi.h
+clean_blob drivers/net/bnx2x_init_ops.h
+clean_kconfig drivers/net/Kconfig 'BNX2X'
+clean_mk CONFIG_BNX2X drivers/net/Makefile
+
+announce CASSINI - "Sun Cassini"
+drop_fw_file firmware/sun/cassini.bin.ihex firmware/sun/cassini.bin
+reject_firmware drivers/net/cassini.c
+clean_blob drivers/net/cassini.c
+clean_kconfig drivers/net/Kconfig 'CASSINI'
+clean_mk CONFIG_CASSINI drivers/net/Makefile
+
+announce CHELSIO_T3 - "Chelsio AEL 2005 support"
+drop_fw_file firmware/cxgb3/t3b_psram-1.1.0.bin.ihex firmware/cxgb3/t3b_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/t3c_psram-1.1.0.bin.ihex firmware/cxgb3/t3c_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/t3fw-7.4.0.bin.ihex firmware/cxgb3/t3fw-7.4.0.bin
+drop_fw_file firmware/cxgb3/ael2005_opt_edc.bin.ihex firmware/cxgb3/ael2005_opt_edc.bin
+drop_fw_file firmware/cxgb3/ael2005_twx_edc.bin.ihex firmware/cxgb3/ael2005_twx_edc.bin
+drop_fw_file firmware/cxgb3/ael2020_twx_edc.bin.ihex firmware/cxgb3/ael2020_twx_edc.bin
+reject_firmware drivers/net/cxgb3/cxgb3_main.c
+clean_blob drivers/net/cxgb3/cxgb3_main.c
+clean_kconfig drivers/net/Kconfig 'CHELSIO_T3'
+clean_mk CONFIG_CHELSIO_T3 drivers/net/cxgb3/Makefile
+
+announce E100 - "Intel PRO/100+"
+drop_fw_file firmware/e100/d101m_ucode.bin.ihex firmware/e100/d101m_ucode.bin
+drop_fw_file firmware/e100/d101s_ucode.bin.ihex firmware/e100/d101s_ucode.bin
+drop_fw_file firmware/e100/d102e_ucode.bin.ihex firmware/e100/d102e_ucode.bin
+reject_firmware drivers/net/e100.c
+clean_sed '
+/^static const struct firmware \*e100_\(reject\|request\)_firmware(/,/^}$/{
+ s:^\(.*\)return ERR_PTR(err);$:\1DPRINTK(PROBE,ERR, "Proceeding without firmware\\n");\n\1return NULL;:
+}' drivers/net/e100.c 'proceed without firmware'
+clean_blob drivers/net/e100.c
+clean_kconfig drivers/net/Kconfig 'E100'
+clean_mk CONFIG_E100 drivers/net/Makefile
+
+announce MYRI_SBUS - "MyriCOM Gigabit Ethernet"
+drop_fw_file firmware/myricom/lanai.bin.ihex firmware/myricom/lanai.bin
+reject_firmware drivers/net/myri_sbus.c
+clean_blob drivers/net/myri_sbus.c
+clean_kconfig drivers/net/Kconfig 'MYRI_SBUS'
+clean_mk CONFIG_MYRI_SBUS drivers/net/Makefile
+
+announce MYRI10GE - "Myricom Myri-10G Ethernet support"
+reject_firmware drivers/net/myri10ge/myri10ge.c
+clean_blob drivers/net/myri10ge/myri10ge.c
+clean_kconfig drivers/net/Kconfig 'MYRI10GE'
+clean_mk CONFIG_MYRI10GE drivers/net/myri10ge/Makefile
+
+announce NETXEN_NIC - "NetXen Multi port (1/10) Gigabit Ethernet NIC"
+reject_firmware drivers/net/netxen/netxen_nic.h
+reject_firmware drivers/net/netxen/netxen_nic_main.c
+reject_firmware drivers/net/netxen/netxen_nic_init.c
+clean_blob drivers/net/netxen/netxen_nic.h
+clean_blob drivers/net/netxen/netxen_nic_main.c
+clean_kconfig drivers/net/Kconfig 'NETXEN_NIC'
+clean_mk CONFIG_NETXEN_NIC drivers/net/Makefile
+
+announce R8169 - "Realtek 8169 gigabit ethernet support"
+clean_sed '
+/^static void rtl_hw_phy_config(.*)$/,/^}$/{
+ /rtl8168d_[12]_hw_phy_config([^,)]*);$/i\
+ printk(KERN_ERR PFX "%s: Missing Free firmware\\n", dev->name);
+}
+' drivers/net/r8169.c 'report missing Free firmware'
+clean_blob drivers/net/r8169.c
+clean_kconfig drivers/net/Kconfig R8169
+clean_mk CONFIG_R8169 drivers/net/Makefile
+
+announce SLICOSS - "Alacritech Gigabit IS-NIC cards"
+reject_firmware drivers/staging/slicoss/slicoss.c
+clean_blob drivers/staging/slicoss/slicoss.c
+clean_kconfig drivers/staging/slicoss/Kconfig 'SLICOSS'
+clean_mk CONFIG_SLICOSS drivers/staging/slicoss/Makefile
+
+announce SPIDER_NET - "Spider Gigabit Ethernet driver"
+reject_firmware drivers/net/spider_net.c
+clean_sed 's,spider_fw\.bin,DEBLOBBED.bin,g' \
+ drivers/net/spider_net.c 'removed non-Free firmware notes'
+clean_blob drivers/net/spider_net.c
+clean_blob drivers/net/spider_net.h
+clean_kconfig drivers/net/Kconfig 'SPIDER_NET'
+clean_mk CONFIG_SPIDER_NET drivers/net/Makefile
+
+announce TEHUTI - "Tehuti Networks 10G Ethernet"
+drop_fw_file firmware/tehuti/bdx.bin.ihex firmware/tehuti/bdx.bin
+reject_firmware drivers/net/tehuti.c
+clean_blob drivers/net/tehuti.c
+clean_kconfig drivers/net/Kconfig 'TEHUTI'
+clean_mk CONFIG_TEHUTI drivers/net/Makefile
+
+announce TIGON3 - "Broadcom Tigon3"
+drop_fw_file firmware/tigon/tg3.bin.ihex firmware/tigon/tg3.bin
+drop_fw_file firmware/tigon/tg3_tso.bin.ihex firmware/tigon/tg3_tso.bin
+drop_fw_file firmware/tigon/tg3_tso5.bin.ihex firmware/tigon/tg3_tso5.bin
+reject_firmware drivers/net/tg3.c
+clean_blob drivers/net/tg3.c
+clean_kconfig drivers/net/Kconfig 'TIGON3'
+clean_mk CONFIG_TIGON3 drivers/net/Makefile
+
+announce TYPHOON - "3cr990 series Typhoon"
+drop_fw_file firmware/3com/typhoon.bin.ihex firmware/3com/typhoon.bin
+reject_firmware drivers/net/typhoon.c
+clean_blob drivers/net/typhoon.c
+clean_kconfig drivers/net/Kconfig 'TYPHOON'
+clean_mk CONFIG_TYPHOON drivers/net/Makefile
+
+# appletalk
+
+announce COPS - "COPS LocalTalk PC"
+clean_sed '
+/sizeof(\(ff\|lt\)drv_code)/{
+ i\
+ printk(KERN_INFO "%s: Missing Free firmware.\\n", dev->name);\
+ return;
+}
+/\(ff\|lt\)drv_code/d;
+' drivers/net/appletalk/cops.c 'report missing Free firmware'
+clean_blob drivers/net/appletalk/cops.c
+clean_file drivers/net/appletalk/cops_ffdrv.h
+clean_file drivers/net/appletalk/cops_ltdrv.h
+clean_kconfig drivers/net/appletalk/Kconfig 'COPS'
+clean_mk CONFIG_COPS drivers/net/appletalk/Makefile
+
+# hamradio
+
+announce YAM - "YAM driver for AX.25"
+drop_fw_file firmware/yam/1200.bin.ihex firmware/yam/1200.bin
+drop_fw_file firmware/yam/9600.bin.ihex firmware/yam/9600.bin
+reject_firmware drivers/net/hamradio/yam.c
+clean_blob drivers/net/hamradio/yam.c
+clean_kconfig drivers/net/hamradio/Kconfig 'YAM'
+clean_mk CONFIG_YAM drivers/net/hamradio/Makefile
+
+# irda
+
+announce USB_IRDA - "IrDA USB dongles"
+reject_firmware drivers/net/irda/irda-usb.c
+clean_blob drivers/net/irda/irda-usb.c
+clean_kconfig drivers/net/irda/Kconfig 'USB_IRDA'
+clean_mk CONFIG_USB_IRDA drivers/net/irda/Makefile
+
+# pcmcia
+
+announce PCMCIA_SMC91C92 - "SMC 91Cxx PCMCIA"
+drop_fw_file firmware/ositech/Xilinx7OD.bin.ihex firmware/ositech/Xilinx7OD.bin
+reject_firmware drivers/net/pcmcia/smc91c92_cs.c
+clean_blob drivers/net/pcmcia/smc91c92_cs.c
+clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_SMC91C92'
+clean_mk CONFIG_PCMCIA_SMC91C92 drivers/net/pcmcia/Makefile
+
+announce PCCARD - "PCCard (PCMCIA/CardBus) support"
+reject_firmware drivers/pcmcia/ds.c
+clean_kconfig drivers/pcmcia/Kconfig 'PCCARD'
+clean_mk CONFIG_PCCARD drivers/pcmcia/Makefile
+
+announce PCMCIA_3C574 - "3Com 3c574 PCMCIA support"
+drop_fw_file firmware/cis/3CCFEM556.cis.ihex firmware/cis/3CCFEM556.cis
+clean_blob drivers/net/pcmcia/3c574_cs.c
+clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C574'
+clean_mk CONFIG_PCMCIA_3C574 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_3C589 - "3Com 3c589 PCMCIA support"
+drop_fw_file firmware/cis/3CXEM556.cis.ihex firmware/cis/3CXEM556.cis
+clean_blob drivers/net/pcmcia/3c589_cs.c
+clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C589'
+clean_mk CONFIG_PCMCIA_3C589 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_PCNET - "NE2000 compatible PCMCIA support"
+drop_fw_file firmware/cis/LA-PCM.cis.ihex firmware/cis/LA-PCM.cis
+drop_fw_file firmware/cis/PCMLM28.cis.ihex firmware/cis/PCMLM28.cis
+drop_fw_file firmware/cis/DP83903.cis.ihex firmware/cis/DP83903.cis
+drop_fw_file firmware/cis/NE2K.cis.ihex firmware/cis/NE2K.cis
+drop_fw_file firmware/cis/tamarack.cis.ihex firmware/cis/tamarack.cis
+drop_fw_file firmware/cis/PE-200.cis.ihex firmware/cis/PE-200.cis
+drop_fw_file firmware/cis/PE520.cis.ihex firmware/cis/PE520.cis
+clean_blob drivers/net/pcmcia/pcnet_cs.c
+clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_PCNET'
+clean_mk CONFIG_PCMCIA_PCNET drivers/net/pcmcia/Makefile
+
+# tokenring
+
+announce 3C359 - "3Com 3C359 Token Link Velocity XL adapter"
+drop_fw_file firmware/3com/3C359.bin.ihex firmware/3com/3C359.bin
+clean_blob drivers/net/tokenring/3c359.c
+clean_kconfig drivers/net/tokenring/Kconfig '3C359'
+clean_mk CONFIG_3C359 drivers/net/tokenring/Makefile
+
+announce SMCTR - "SMC ISA/MCA adapter"
+drop_fw_file firmware/tr_smctr.bin.ihex firmware/tr_smctr.bin
+reject_firmware drivers/net/tokenring/smctr.c
+clean_blob drivers/net/tokenring/smctr.c
+clean_kconfig drivers/net/tokenring/Kconfig 'SMCTR'
+clean_mk CONFIG_SMCTR drivers/net/tokenring/Makefile
+
+announce TMS380TR - "Generic TMS380 Token Ring ISA/PCI adapter support"
+reject_firmware drivers/net/tokenring/tms380tr.c
+clean_blob drivers/net/tokenring/tms380tr.c
+clean_kconfig drivers/net/tokenring/Kconfig 'TMS380TR'
+clean_mk CONFIG_TMS380TR drivers/net/tokenring/Makefile
+
+# usb
+
+announce USB_KAWETH - "USB KLSI KL5USB101-based ethernet device support"
+drop_fw_file firmware/kaweth/new_code.bin.ihex firmware/kaweth/new_code.bin
+drop_fw_file firmware/kaweth/new_code_fix.bin.ihex firmware/kaweth/new_code_fix.bin
+drop_fw_file firmware/kaweth/trigger_code.bin.ihex firmware/kaweth/trigger_code.bin
+drop_fw_file firmware/kaweth/trigger_code_fix.bin.ihex firmware/kaweth/trigger_code_fix.bin
+reject_firmware drivers/net/usb/kaweth.c
+clean_blob drivers/net/usb/kaweth.c
+clean_kconfig drivers/net/usb/Kconfig 'USB_KAWETH'
+clean_mk CONFIG_USB_KAWETH drivers/net/usb/Makefile
+
+# wireless
+
+announce ATMEL "Atmel at76c50x chipset 802.11b support"
+reject_firmware drivers/net/wireless/atmel.c
+clean_blob drivers/net/wireless/atmel.c
+clean_kconfig drivers/net/wireless/Kconfig 'ATMEL'
+clean_mk CONFIG_ATMEL drivers/net/wireless/Makefile
+
+announce AT76C50X_USB - "Atmel at76c503/at76c505/at76c505a USB cards"
+reject_firmware drivers/net/wireless/at76c50x-usb.c
+clean_blob drivers/net/wireless/at76c50x-usb.c
+clean_kconfig drivers/net/wireless/Kconfig 'AT76C50X_USB'
+clean_mk CONFIG_AT76C50X_USB drivers/net/wireless/Makefile
+
+announce B43 - "Broadcom 43xx wireless support (mac80211 stack)"
+maybe_reject_firmware drivers/net/wireless/b43/main.c
+clean_sed '
+/^static int b43_upload_microcode(/,/^}$/{
+ / if (dev->fw\.opensource) {$/i\
+ if (!dev->fw.opensource) {\
+ b43err(dev->wl, "Rejected non-Free firmware\\n");\
+ err = -EOPNOTSUPP;\
+ goto error;\
+ }
+}' drivers/net/wireless/b43/main.c 'double-check and reject non-Free firmware'
+# Major portions of firmware filenames not deblobbed.
+clean_blob drivers/net/wireless/b43/main.c
+clean_kconfig drivers/net/wireless/b43/Kconfig 'B43'
+clean_mk CONFIG_B43 drivers/net/wireless/b43/Makefile
+
+announce B43LEGACY - "Broadcom 43xx-legacy wireless support (mac80211 stack)"
+reject_firmware drivers/net/wireless/b43legacy/main.c
+# Major portions of firwmare filenames not deblobbed.
+clean_blob drivers/net/wireless/b43legacy/main.c
+clean_kconfig drivers/net/wireless/b43legacy/Kconfig 'B43LEGACY'
+clean_mk CONFIG_B43LEGACY drivers/net/wireless/b43legacy/Makefile
+
+announce HERMES - "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
+reject_firmware drivers/net/wireless/orinoco/fw.c
+clean_blob drivers/net/wireless/orinoco/fw.c
+clean_kconfig drivers/net/wireless/Kconfig 'HERMES'
+clean_mk CONFIG_HERMES drivers/net/wireless/orinoco/Makefile
+
+announce WLAGS49_H2 - 'Agere Systems HERMES II Wireless PC Card Model 0110'
+# Some pieces of the firmware images are most definitely data, but
+# others seem to be code.
+clean_file drivers/staging/wlags49_h2/ap_h2.c
+clean_file drivers/staging/wlags49_h2/sta_h2.c
+clean_blob drivers/staging/wlags49_h2/wl_profile.c
+clean_kconfig drivers/staging/wlags49_h2/Kconfig 'WLAGS49_H2'
+clean_mk CONFIG_WLAGS49_H2 drivers/staging/Makefile
+
+announce WLAGS49_H25 - 'Linksys Systems HERMES II.5 Wireless-G_CompactFlash_Card'
+clean_file drivers/staging/wlags49_h2/ap_h25.c
+clean_file drivers/staging/wlags49_h2/sta_h25.c
+clean_kconfig drivers/staging/wlags49_h25/Kconfig 'WLAGS49_H25'
+clean_mk CONFIG_WLAGS49_H25 drivers/staging/Makefile
+
+announce IPW2100 - "Intel PRO/Wireless 2100 Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2100.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2100.c
+clean_kconfig drivers/net/wireless/Kconfig 'IPW2100'
+clean_mk CONFIG_IPW2100 drivers/net/wireless/ipw2x00/Makefile
+
+announce IPW2200 - "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2200.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2200.c
+clean_kconfig drivers/net/wireless/Kconfig 'IPW2200'
+clean_mk CONFIG_IPW2200 drivers/net/wireless/ipw2x00/Makefile
+
+announce IWL3945 - "Intel PRO/Wireless 3945ABG/BG Network Connection"
+reject_firmware drivers/net/wireless/iwlwifi/iwl3945-base.c
+clean_blob drivers/net/wireless/iwlwifi/iwl3945-base.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-3945.h
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL3945'
+clean_mk CONFIG_IWL3945 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWLAGN - "Intel Wireless WiFi Next Gen AGN"
+reject_firmware drivers/net/wireless/iwlwifi/iwl-agn.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-agn.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWLAGN'
+clean_mk CONFIG_IWLAGN drivers/net/wireless/iwlwifi/Makefile
+
+announce IWL4965 - "Intel Wireless WiFi 4965AGN"
+clean_blob drivers/net/wireless/iwlwifi/iwl-4965.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL4965'
+clean_mk CONFIG_IWL4965 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWL5000 - "Intel Wireless WiFi 5000AGN"
+clean_blob drivers/net/wireless/iwlwifi/iwl-5000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-6000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-1000.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL5000'
+clean_mk CONFIG_IWL5000 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWM - "Intel Wireless Multicomm 3200 WiFi driver"
+reject_firmware drivers/net/wireless/iwmc3200wifi/fw.c
+clean_blob drivers/net/wireless/iwmc3200wifi/sdio.c
+clean_kconfig drivers/net/wireless/iwmc3200wifi/Kconfig 'IWM'
+clean_mk CONFIG_IWM drivers/net/wireless/iwmc3200wifi/Makefile
+
+announce IWMC3200TOP - "Intel Wireless MultiCom Top Driver"
+reject_firmware drivers/misc/iwmc3200top/fw-download.c
+undefine_macro '_FW_NAME(api)' '"/*(DEBLOBBED)*/"' \
+ 'removed non-Free firmware name' drivers/misc/iwmc3200top/iwmc3200top.h
+clean_blob drivers/misc/iwmc3200top/main.c
+clean_kconfig drivers/misc/iwmc3200top/Kconfig 'IWMC3200TOP'
+clean_mk CONFIG_IWMC3200TOP drivers/misc/iwmc3200top/Makefile
+
+announce LIBERTAS_CS - "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
+reject_firmware drivers/net/wireless/libertas/if_cs.c
+clean_blob drivers/net/wireless/libertas/if_cs.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_CS'
+clean_mk CONFIG_LIBERTAS_CS drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SDIO - "Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards"
+reject_firmware drivers/net/wireless/libertas/if_sdio.c
+clean_blob drivers/net/wireless/libertas/if_sdio.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_SDIO'
+clean_mk CONFIG_LIBERTAS_SDIO drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SPI - "Marvell Libertas 8686 SPI 802.11b/g cards"
+reject_firmware drivers/net/wireless/libertas/if_spi.c
+clean_blob drivers/net/wireless/libertas/if_spi.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_SPI'
+clean_mk CONFIG_LIBERTAS_SPI drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_USB - "Marvell Libertas 8388 USB 802.11b/g cards"
+reject_firmware drivers/net/wireless/libertas/if_usb.c
+clean_blob drivers/net/wireless/libertas/if_usb.c
+clean_blob drivers/net/wireless/libertas/README
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_USB'
+clean_mk CONFIG_LIBERTAS_USB drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_THINFIRM_USB - "Marvell Libertas 8388 USB 802.11b/g cards with thin firmware"
+reject_firmware drivers/net/wireless/libertas_tf/if_usb.c
+clean_blob drivers/net/wireless/libertas_tf/if_usb.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_THINFIRM_USB'
+clean_mk CONFIG_LIBERTAS_THINFIRM_USB drivers/net/wireless/libertas_tf/Makefile
+
+announce MWL8K - 'Marvell 88W8xxx PCI/PCIe Wireless support'
+reject_firmware drivers/net/wireless/mwl8k.c
+clean_blob drivers/net/wireless/mwl8k.c
+clean_kconfig drivers/net/wireless/Kconfig 'MWL8K'
+clean_mk CONFIG_MWL8K drivers/net/wireless/Makefile
+
+announce OTUS - "Atheros OTUS 802.11n USB wireless support"
+clean_blob drivers/staging/otus/hal/hpDKfwu.c
+clean_blob drivers/staging/otus/hal/hpfw2.c
+clean_blob drivers/staging/otus/hal/hpfwbu.c
+clean_blob drivers/staging/otus/hal/hpfwspiu.c
+clean_blob drivers/staging/otus/hal/hpfwu.c
+clean_blob drivers/staging/otus/hal/hpfwu.c.drv_ba_resend
+clean_blob drivers/staging/otus/hal/hpfwu_2k.c
+clean_blob drivers/staging/otus/hal/hpfwu_BA.c
+clean_blob drivers/staging/otus/hal/hpfwu_FB50_mdk.c
+clean_blob drivers/staging/otus/hal/hpfwu_OTUS_RC.c
+clean_blob drivers/staging/otus/hal/hpfwu_txstream.c
+clean_blob drivers/staging/otus/hal/hpfwuinit.c
+clean_sed '
+/^u16_t zfFirmwareDownload\(NotJump\)\?(.*)$/,/^}$/ {
+ / image = (u8_t\*) fw;/i\
+ zm_msg0_init(ZM_LV_0, "Missing Free firmware");\
+ ret = ZM_ERR_FIRMWARE_WRONG_TYPE;\
+ goto exit;\
+
+}
+' drivers/staging/otus/hal/hpusb.c \
+ 'disabled non-Free firmware-loading machinery'
+clean_sed 's/^extern u16_t \(zfFirmwareDownload\(NotJump\)\?\)([^;]*);/&\n#define \1(dev,fw,len,offset) (\1)(dev,NULL,0,offset)/
+' drivers/staging/otus/hal/hpmain.c \
+ 'disabled non-Free firmware-loading machinery'
+clean_blob drivers/staging/otus/hal/hpmain.c
+clean_kconfig drivers/staging/otus/Kconfig OTUS
+clean_mk CONFIG_OTUS drivers/staging/otus/Makefile
+
+announce PRISM2_USB - "Prism2.5/3 USB driver"
+reject_firmware drivers/staging/wlan-ng/prism2fw.c
+clean_blob drivers/staging/wlan-ng/prism2fw.c
+clean_kconfig drivers/staging/wlan-ng/Kconfig PRISM2_USB
+clean_mk CONFIG_PRISM2_USB drivers/staging/wlan-ng/Makefile
+
+announce P54_PCI - "Prism54 PCI support"
+reject_firmware drivers/net/wireless/p54/p54pci.c
+clean_blob drivers/net/wireless/p54/p54pci.c
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_PCI'
+clean_mk CONFIG_P54_PCI drivers/net/wireless/p54/Makefile
+
+announce P54_SPI - "Prism54 SPI (stlc45xx) support"
+# There's support for loading custom 3826.eeprom here, with a default
+# eeprom that is clearly pure data. Without Free 3826.arm, there's
+# little point in trying to retain the ability to load 3826.eeprom, so
+# we drop it altogether.
+reject_firmware drivers/net/wireless/p54/p54spi.c
+clean_blob drivers/net/wireless/p54/p54spi.c
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_SPI'
+clean_mk CONFIG_P54_SPI drivers/net/wireless/p54/Makefile
+
+announce P54_USB - "Prism54 USB support"
+reject_firmware drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.h
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_USB'
+clean_mk CONFIG_P54_USB drivers/net/wireless/p54/Makefile
+
+announce PRISM54 - 'Intersil Prism GT/Duette/Indigo PCI/Cardbus'
+reject_firmware drivers/net/wireless/prism54/islpci_dev.c
+clean_blob drivers/net/wireless/prism54/islpci_dev.c
+clean_kconfig drivers/net/wireless/Kconfig 'PRISM54'
+clean_mk CONFIG_PRISM54 drivers/net/wireless/prism54/Makefile
+
+announce RT2X00_LIB_FIRMWARE - "Ralink driver firmware support"
+reject_firmware drivers/net/wireless/rt2x00/rt2x00firmware.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT2X00_LIB_FIRMWARE'
+clean_mk CONFIG_RT2X00_LIB_FIRMWARE drivers/net/wireless/rt2x00/Makefile
+
+announce RT61PCI - "Ralink rt2501/rt61 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt61pci.h
+clean_blob drivers/net/wireless/rt2x00/rt61pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT61PCI'
+clean_mk CONFIG_RT61PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT73USB - "Ralink rt2501/rt73 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt73usb.h
+clean_blob drivers/net/wireless/rt2x00/rt73usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT73USB'
+clean_mk CONFIG_RT73USB drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800PCI - "Ralink rt2800 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.h
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800PCI
+clean_mk CONFIG_RT2800PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800USB - "Ralink rt2800 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.h
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800USB
+clean_mk CONFIG_RT2800USB drivers/net/wireless/rt2x00/Makefile
+
+announce RT2860 - "Ralink 2860/3090 wireless support"
+clean_file drivers/staging/rt2860/common/firmware.h
+clean_file drivers/staging/rt2860/common/firmware_3070.h
+clean_file drivers/staging/rt3090/firmware.h
+clean_sed '
+/^int RtmpAsicLoadFirmware(/,/^}$/{
+ s/^\( *\)pFirmwareImage =\( .*FirmwareImage.*;\|$\)/\1return printk("%s: missing Free firmware\\n", __func__),\n\1 NDIS_STATUS_FAILURE;\n&/
+}' drivers/staging/rt2860/common/rtmp_mcu.c 'report missing Free firmware'
+clean_blob drivers/staging/rt2860/common/rtmp_mcu.c
+clean_blob drivers/staging/rt2860/rtmp_def.h
+clean_blob drivers/staging/rt2860/common/ee_efuse.c
+clean_kconfig drivers/staging/rt2860/Kconfig RT2860
+clean_mk CONFIG_RT2860 drivers/staging/rt2860/Makefile
+
+announce RT2870 - "Ralink 2870/3070 wireless support"
+clean_file drivers/staging/rt3070/firmware.h
+clean_kconfig drivers/staging/rt2870/Kconfig RT2870
+clean_mk CONFIG_RT2870 drivers/staging/rt2870/Makefile
+
+announce RTL8192E - "RealTek RTL8192E Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192e/r819xE_firmware.c
+clean_blob drivers/staging/rtl8192e/r819xE_firmware.c
+clean_kconfig drivers/staging/rtl8192e/Kconfig RTL8192E
+clean_mk CONFIG_RTL8192E drivers/staging/rtl8192e/Makefile
+
+announce RTL8192U - "RealTek RTL8192U Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192u/r819xU_firmware.c
+clean_blob drivers/staging/rtl8192u/r819xU_firmware.c
+clean_blob drivers/staging/rtl8192u/r819xU_firmware_img.c
+clean_kconfig drivers/staging/rtl8192u/Kconfig 'RTL8192U'
+clean_mk CONFIG_RTL8192U drivers/staging/rtl8192u/Makefile
+
+announce RTL8192SU - "RealTek RTL8192SU Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192su/r8192S_firmware.c
+clean_blob drivers/staging/rtl8192su/r8192S_firmware.c
+clean_blob drivers/staging/rtl8192su/r8192SU_HWImg.c
+clean_kconfig drivers/staging/rtl8192su/Kconfig 'RTL8192SU'
+clean_mk CONFIG_RTL8192SU drivers/staging/rtl8192su/Makefile
+
+announce VT6656 - "VIA Technologies VT6656 support"
+clean_sed '
+/^FIRMWAREbDownload($/,/^}$/ {
+ /PBYTE.*pBuffer/ i\
+ PBYTE abyFirmware[1] = { 0 };
+ /-->Download firmware/ i\
+ printk("vt6656: missing Free firmware\\n");\
+ return (FALSE);
+}' drivers/staging/vt6656/firmware.c 'report missing Free firmware'
+clean_blob drivers/staging/vt6656/firmware.c
+clean_kconfig drivers/staging/vt6656/Kconfig 'VT6656'
+clean_mk CONFIG_VT6656 drivers/staging/vt6656/Makefile
+
+announce WL1251 - "TI wl1251 support"
+reject_firmware drivers/net/wireless/wl12xx/wl1251_main.c
+clean_blob drivers/net/wireless/wl12xx/wl1251_main.c
+clean_blob drivers/net/wireless/wl12xx/wl1251.h
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL1251'
+clean_mk CONFIG_WL1251 drivers/net/wireless/wl12xx/Makefile
+
+announce WL1271 - "TI wl1271 support"
+reject_firmware drivers/net/wireless/wl12xx/wl1271_main.c
+clean_blob drivers/net/wireless/wl12xx/wl1271_main.c
+clean_blob drivers/net/wireless/wl12xx/wl1271.h
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL1271'
+clean_mk CONFIG_WL1271 drivers/net/wireless/wl12xx/Makefile
+
+announce USB_ZD1201 - "USB ZD1201 based Wireless device support"
+reject_firmware drivers/net/wireless/zd1201.c
+clean_blob drivers/net/wireless/zd1201.c
+clean_kconfig drivers/net/wireless/Kconfig 'USB_ZD1201'
+clean_mk CONFIG_USB_ZD1201 drivers/net/wireless/Makefile
+
+announce ZD1211RW - "ZyDAS ZD1211/ZD1211B USB-wireless support"
+reject_firmware drivers/net/wireless/zd1211rw/zd_usb.c
+clean_blob drivers/net/wireless/zd1211rw/zd_usb.c
+clean_kconfig drivers/net/wireless/zd1211rw/Kconfig 'ZD1211RW'
+clean_mk CONFIG_ZD1211RW drivers/net/wireless/zd1211rw/Makefile
+
+# bluetooth
+
+announce BT_ATH3K - "Atheros firmware download driver"
+reject_firmware drivers/bluetooth/ath3k.c
+clean_blob drivers/bluetooth/ath3k.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_ATH3K'
+clean_mk CONFIG_BT_ATH3K drivers/bluetooth/Makefile
+
+announce BT_HCIBCM203X - "HCI BCM203x USB driver"
+reject_firmware drivers/bluetooth/bcm203x.c
+clean_blob drivers/bluetooth/bcm203x.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBCM203X'
+clean_mk CONFIG_BT_HCIBCM203X drivers/bluetooth/Makefile
+
+announce BT_HCIBFUSB - "HCI BlueFRITZ! USB driver"
+reject_firmware drivers/bluetooth/bfusb.c
+clean_blob drivers/bluetooth/bfusb.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBFUSB'
+clean_mk CONFIG_BT_HCIBFUSB drivers/bluetooth/Makefile
+
+announce BT_HCIBT3C - "HCI BT3C (PC Card) driver"
+reject_firmware drivers/bluetooth/bt3c_cs.c
+clean_blob drivers/bluetooth/bt3c_cs.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBT3C'
+clean_mk CONFIG_BT_HCIBT3C drivers/bluetooth/Makefile
+
+announce BT_MRVL_SDIO - "Marvell BT-over-SDIO driver"
+reject_firmware drivers/bluetooth/btmrvl_sdio.c
+clean_blob drivers/bluetooth/btmrvl_sdio.c
+clean_blob Documentation/btmrvl.txt
+clean_kconfig drivers/bluetooth/Kcofnig 'BT_MRVL_SDIO'
+clean_mk CONFIG_BT_MRVL_SDIO drivers/bluetooth/Makefile
+
+# wimax
+
+announce WIMAX_I2400M - "Intel Wireless WiMAX Connection 2400"
+reject_firmware drivers/net/wimax/i2400m/fw.c
+clean_blob drivers/net/wimax/i2400m/sdio.c
+clean_blob drivers/net/wimax/i2400m/usb.c
+clean_blob Documentation/wimax/README.i2400m
+clean_kconfig drivers/net/wimax/i2400m/Kconfig CONFIG_WIMAX_I2400M
+clean_mk CONFIG_WIMAX_I2400M drivers/net/wimax/i2400m/Makefile
+
+########
+# ISDN #
+########
+
+announce ISDN_DIVAS - "Support Eicon DIVA Server cards"
+clean_blob drivers/isdn/hardware/eicon/cardtype.h
+clean_blob drivers/isdn/hardware/eicon/dsp_defs.h
+clean_kconfig drivers/isdn/hardware/eicon/Kconfig 'ISDN_DIVAS'
+clean_mk CONFIG_ISDN_DIVAS drivers/isdn/hardware/eicon/Makefile
+
+announce MISDN_SPEEDFAX - "Support for Sedlbauer Speedfax+"
+reject_firmware drivers/isdn/hardware/mISDN/speedfax.c
+clean_blob drivers/isdn/hardware/mISDN/speedfax.c
+clean_kconfig drivers/isdn/hardware/mISDN/Kconfig 'MISDN_SPEEDFAX'
+clean_mk CONFIG_MISDN_SPEEDFAX drivers/isdn/hardware/mISDN/Makefile
+
+##########
+# Serial #
+##########
+
+announce SERIAL_8250_CS - "8250/16550 PCMCIA device support"
+drop_fw_file firmware/cis/MT5634ZLX.cis.ihex firmware/cis/MT5634ZLX.cis
+drop_fw_file firmware/cis/RS-COM-2P.cis.ihex firmware/cis/RS-COM-2P.cis
+drop_fw_file firmware/cis/COMpad2.cis.ihex firmware/cis/COMpad2.cis
+drop_fw_file firmware/cis/COMpad4.cis.ihex firmware/cis/COMpad4.cis
+drop_fw_file firmware/cis/SW_555_SER.cis.ihex firmware/cis/SW_555_SER.cis
+drop_fw_file firmware/cis/SW_7xx_SER.cis.ihex firmware/cis/SW_7xx_SER.cis
+drop_fw_file firmware/cis/SW_8xx_SER.cis.ihex firmware/cis/SW_8xx_SER.cis
+clean_blob drivers/serial/serial_cs.c
+clean_kconfig drivers/serial/Kconfig 'SERIAL_8250_CS'
+clean_mk CONFIG_SERIAL_8250_CS drivers/serial/Makefile
+
+announce SERIAL_ICOM - "IBM Multiport Serial Adapter"
+reject_firmware drivers/serial/icom.c
+clean_blob drivers/serial/icom.c
+clean_kconfig drivers/serial/Kconfig 'SERIAL_ICOM'
+clean_mk CONFIG_SERIAL_ICOM drivers/serial/Makefile
+
+announce SERIAL_QE - "Freescale QUICC Engine serial port support"
+reject_firmware drivers/serial/ucc_uart.c
+clean_blob drivers/serial/ucc_uart.c
+clean_kconfig drivers/serial/Kconfig 'SERIAL_QE'
+clean_mk CONFIG_SERIAL_QE drivers/serial/Makefile
+
+####################
+# Data acquisition #
+####################
+
+announce COMEDI_PCI_DRIVERS - "Data acquisition support Comedi PCI drivers"
+reject_firmware drivers/staging/comedi/drivers/jr3_pci.c
+clean_blob drivers/staging/comedi/drivers/jr3_pci.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_PCI_DRIVERS'
+clean_mk CONFIG_COMEDI_PCI_DRIVERS drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_USB_DRIVERS - "Data acquisition support Comedi USB drivers"
+reject_firmware drivers/staging/comedi/drivers/usbdux.c
+clean_blob drivers/staging/comedi/drivers/usbdux.c
+reject_firmware drivers/staging/comedi/drivers/usbduxfast.c
+clean_blob drivers/staging/comedi/drivers/usbduxfast.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_USB_DRIVERS'
+clean_mk CONFIG_COMEDI_USB_DRIVERS drivers/staging/comedi/drivers/Makefile
+
+
+########
+# SCSI #
+########
+
+announce SCSI_QLOGICPTI - "PTI Qlogic, ISP Driver"
+drop_fw_file firmware/qlogic/isp1000.bin.ihex firmware/qlogic/isp1000.bin
+reject_firmware drivers/scsi/qlogicpti.c
+clean_blob drivers/scsi/qlogicpti.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_QLOGICPTI'
+clean_mk CONFIG_SCSI_QLOGICPTI drivers/scsi/Makefile
+
+announce SCSI_ADVANSYS - "AdvanSys SCSI"
+drop_fw_file firmware/advansys/mcode.bin.ihex firmware/advansys/mcode.bin
+drop_fw_file firmware/advansys/3550.bin.ihex firmware/advansys/3550.bin
+drop_fw_file firmware/advansys/38C0800.bin.ihex firmware/advansys/38C0800.bin
+drop_fw_file firmware/advansys/38C1600.bin.ihex firmware/advansys/38C1600.bin
+reject_firmware drivers/scsi/advansys.c
+clean_blob drivers/scsi/advansys.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_ADVANSYS'
+clean_mk CONFIG_SCSI_ADVANSYS drivers/scsi/Makefile
+
+announce SCSI_QLOGIC_1280 - "Qlogic QLA 1240/1x80/1x160 SCSI"
+drop_fw_file firmware/qlogic/1040.bin.ihex firmware/qlogic/1040.bin
+drop_fw_file firmware/qlogic/1280.bin.ihex firmware/qlogic/1280.bin
+drop_fw_file firmware/qlogic/12160.bin.ihex firmware/qlogic/12160.bin
+reject_firmware drivers/scsi/qla1280.c
+clean_blob drivers/scsi/qla1280.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_QLOGIC_1280'
+clean_mk CONFIG_SCSI_QLOGIC_1280 drivers/scsi/Makefile
+
+announce SCSI_AIC94XX - "Adaptec AIC94xx SAS/SATA support"
+reject_firmware drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.h
+clean_kconfig drivers/scsi/aic94xx/Kconfig 'SCSI_AIC94XX'
+clean_mk CONFIG_SCSI_AIC94XX drivers/scsi/aic94xx/Makefile
+
+announce SCSI_BFA_FC - "Brocade BFA Fibre Channel Support"
+reject_firmware drivers/scsi/bfa/bfad_fwimg.c
+clean_blob drivers/scsi/bfa/bfad_fwimg.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_BFA_FC'
+clean_mk CONFIG_SCSI_BFA_FC drivers/scsi/bfa/Makefile
+
+announce SCSI_QLA_FC - "QLogic QLA2XXX Fibre Channel Support"
+reject_firmware drivers/scsi/qla2xxx/qla_gbl.h
+reject_firmware drivers/scsi/qla2xxx/qla_init.c
+reject_firmware drivers/scsi/qla2xxx/qla_os.c
+clean_sed '
+/^config SCSI_QLA_FC$/,/^config /{
+ /^ By default, firmware/i\
+ /*(DEBLOBBED)*/
+ /^ By default, firmware/,/ftp:[/][/].*firmware[/]/d
+}' drivers/scsi/qla2xxx/Kconfig 'removed firmware notes'
+clean_blob drivers/scsi/qla2xxx/qla_os.c
+clean_kconfig drivers/scsi/qla2xxx/Kconfig 'SCSI_QLA_FC'
+clean_mk CONFIG_SCSI_QLA_FC drivers/scsi/qla2xxx/Makefile
+
+
+#######
+# USB #
+#######
+
+# atm
+
+announce USB_CXACRU - "Conexant AccessRunner USB support"
+reject_firmware drivers/usb/atm/cxacru.c
+clean_blob drivers/usb/atm/cxacru.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_CXACRU'
+clean_mk CONFIG_USB_CXACRU drivers/usb/atm/Makefile
+
+announce USB_SPEEDTOUCH - "Speedtouch USB support"
+reject_firmware drivers/usb/atm/speedtch.c
+clean_blob drivers/usb/atm/speedtch.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_SPEEDTOUCH'
+clean_mk CONFIG_USB_SPEEDTOUCH drivers/usb/atm/Makefile
+
+announce USB_UEAGLEATM - "ADI 930 and eagle USB DSL modem"
+reject_firmware drivers/usb/atm/ueagle-atm.c
+clean_blob drivers/usb/atm/ueagle-atm.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_UEAGLEATM'
+clean_mk CONFIG_USB_UEAGLEATM drivers/usb/atm/Makefile
+
+# misc
+
+announce USB_EMI26 - "EMI 2|6 USB Audio interface"
+# These files are not under the GPL, better remove them all.
+drop_fw_file firmware/emi26/bitstream.HEX firmware/emi26/bitstream.fw
+drop_fw_file firmware/emi26/firmware.HEX firmware/emi26/firmware.fw
+drop_fw_file firmware/emi26/loader.HEX firmware/emi26/loader.fw
+reject_firmware drivers/usb/misc/emi26.c
+clean_blob drivers/usb/misc/emi26.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_EMI26'
+clean_mk CONFIG_USB_EMI26 drivers/usb/misc/Makefile
+
+announce USB_EMI62 - "EMI 6|2m USB Audio interface"
+# These files are probably not under the GPL, better remove them all.
+drop_fw_file firmware/emi62/bitstream.HEX firmware/emi62/bitstream.fw
+drop_fw_file firmware/emi62/loader.HEX firmware/emi62/loader.fw
+drop_fw_file firmware/emi62/midi.HEX firmware/emi62/midi.fw
+drop_fw_file firmware/emi62/spdif.HEX firmware/emi62/spdif.fw
+reject_firmware drivers/usb/misc/emi62.c
+clean_blob drivers/usb/misc/emi62.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_EMI62'
+clean_mk CONFIG_USB_EMI62 drivers/usb/misc/Makefile
+
+announce USB_ISIGHTFW - "iSight firmware loading support"
+reject_firmware drivers/usb/misc/isight_firmware.c
+clean_blob drivers/usb/misc/isight_firmware.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_ISIGHTFW'
+clean_mk CONFIG_USB_ISIGHTFW drivers/usb/misc/Makefile
+
+# serial
+
+announce USB_SERIAL_KEYSPAN - "USB Keyspan USA-xxx Serial Driver"
+drop_fw_file firmware/keyspan/mpr.HEX firmware/keyspan/mpr.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_MPR'
+drop_fw_file firmware/keyspan/usa18x.HEX firmware/keyspan/usa18x.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA18X'
+drop_fw_file firmware/keyspan/usa19.HEX firmware/keyspan/usa19.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19'
+drop_fw_file firmware/keyspan/usa19qi.HEX firmware/keyspan/usa19qi.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19QI'
+drop_fw_file firmware/keyspan/usa19qw.HEX firmware/keyspan/usa19qw.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19QW'
+drop_fw_file firmware/keyspan/usa19w.HEX firmware/keyspan/usa19w.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19W'
+drop_fw_file firmware/keyspan/usa28.HEX firmware/keyspan/usa28.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28'
+drop_fw_file firmware/keyspan/usa28xa.HEX firmware/keyspan/usa28xa.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28XA'
+drop_fw_file firmware/keyspan/usa28xb.HEX firmware/keyspan/usa28xb.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28XB'
+drop_fw_file firmware/keyspan/usa28x.HEX firmware/keyspan/usa28x.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28X'
+drop_fw_file firmware/keyspan/usa49w.HEX firmware/keyspan/usa49w.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA49W'
+drop_fw_file firmware/keyspan/usa49wlc.HEX firmware/keyspan/usa49wlc.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA49WLC'
+reject_firmware drivers/usb/serial/keyspan.c
+clean_blob drivers/usb/serial/keyspan.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN'
+clean_mk CONFIG_USB_SERIAL_KEYSPAN drivers/usb/serial/Makefile
+
+announce USB_SERIAL_KEYSPAN_PDA - "USB Keyspan PDA Single Port Serial Driver"
+clean_sed '
+s,request_ihex_firmware,/*KEYSPAN_PDA*/&,
+' drivers/usb/serial/keyspan_pda.c 'accept Free firmware'
+
+announce USB_SERIAL_EDGEPORT - "USB Inside Out Edgeport Serial Driver"
+clean_fw firmware/edgeport/boot.H16 firmware/edgeport/boot.fw
+clean_fw firmware/edgeport/boot2.H16 firmware/edgeport/boot2.fw
+clean_fw firmware/edgeport/down.H16 firmware/edgeport/down.fw
+clean_fw firmware/edgeport/down2.H16 firmware/edgeport/down2.fw
+reject_firmware drivers/usb/serial/io_edgeport.c
+clean_blob drivers/usb/serial/io_edgeport.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_EDGEPORT'
+clean_mk CONFIG_USB_SERIAL_EDGEPORT drivers/usb/serial/Makefile
+
+announce USB_SERIAL_EDGEPORT_TI - "USB Inside Out Edgeport Serial Driver (TI devices)"
+clean_fw firmware/edgeport/down3.bin.ihex firmware/edgeport/down3.bin
+reject_firmware drivers/usb/serial/io_ti.c
+clean_blob drivers/usb/serial/io_ti.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_EDGEPORT_TI'
+clean_mk CONFIG_USB_SERIAL_EDGEPORT_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_TI - "USB TI 3410/5052 Serial Driver"
+drop_fw_file firmware/ti_3410.fw.ihex firmware/ti_3410.fw
+drop_fw_file firmware/ti_5052.fw.ihex firmware/ti_5052.fw
+drop_fw_file firmware/mts_cdma.fw.ihex firmware/mts_cdma.fw
+drop_fw_file firmware/mts_gsm.fw.ihex firmware/mts_gsm.fw
+drop_fw_file firmware/mts_edge.fw.ihex firmware/mts_edge.fw
+reject_firmware drivers/usb/serial/ti_usb_3410_5052.c
+clean_blob drivers/usb/serial/ti_usb_3410_5052.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_TI'
+clean_mk CONFIG_USB_SERIAL_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_WHITEHEAT - "USB ConnectTech WhiteHEAT Serial Driver"
+clean_fw firmware/whiteheat.HEX firmware/whiteheat.fw
+clean_fw firmware/whiteheat_loader.HEX firmware/whiteheat_loader.fw
+clean_fw firmware/whiteheat_loader_debug.HEX firmware/whiteheat_loader_debug.fw
+reject_firmware drivers/usb/serial/whiteheat.c
+clean_blob drivers/usb/serial/whiteheat.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_WHITEHEAT'
+clean_mk CONFIG_USB_SERIAL_WHITEHEAT drivers/usb/serial/Makefile
+
+# uwb
+
+announce UWB_I1480U - Support for Intel Wireless UWB Link 1480 HWA
+reject_firmware drivers/uwb/i1480/dfu/i1480-dfu.h
+reject_firmware drivers/uwb/i1480/dfu/mac.c
+reject_firmware drivers/uwb/i1480/dfu/phy.c
+clean_blob drivers/uwb/i1480/dfu/usb.c
+clean_kconfig drivers/uwb/Kconfig 'UWB_I1480U'
+clean_mk CONFIG_UWB_I1480U drivers/uwb/i1480/dfu/Makefile
+
+
+
+#########
+# Sound #
+#########
+
+announce SND_CS46XX - "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
+# This appears to have been extracted from some non-Free driver
+clean_file sound/pci/cs46xx/cs46xx_image.h
+# The following blobs are definitely extracted from non-Free drivers.
+clean_file sound/pci/cs46xx/imgs/cwc4630.h
+clean_file sound/pci/cs46xx/imgs/cwcasync.h
+clean_file sound/pci/cs46xx/imgs/cwcsnoop.h
+clean_sed '
+/^\(int \)\?snd_cs46xx_download_image([^;]*$/,/^}$/{
+ /for.*BA1_MEMORY_COUNT/i\
+#if 0
+ /^}$/{
+ i\
+#else\
+ snd_printk(KERN_ERR "cs46xx: Missing Free firmware\\n");\
+ return -EINVAL;\
+#endif
+ }
+}
+s/cs46xx_dsp_load_module(chip, [&]cwc\(4630\|async\|snoop\)_module)/(snd_printk(KERN_ERR "cs46xx: Missing Free firmware\\n"),-EINVAL)/
+' sound/pci/cs46xx/cs46xx_lib.c 'report missing Free firmware'
+clean_blob sound/pci/cs46xx/cs46xx_lib.c
+clean_kconfig sound/pci/Kconfig 'SND_CS46XX'
+clean_mk 'CONFIG_SND_CS46XX' sound/pci/cs46xx/Makefile
+
+announce SND_KORG1212 - "Korg 1212 IO"
+drop_fw_file firmware/korg/k1212.dsp.ihex firmware/korg/k1212.dsp
+reject_firmware sound/pci/korg1212/korg1212.c
+clean_blob sound/pci/korg1212/korg1212.c
+clean_kconfig sound/pci/Kconfig 'SND_KORG1212'
+clean_mk 'CONFIG_SND_KORG1212' sound/pci/korg1212/Makefile
+
+announce SND_MAESTRO3 - "ESS Allegro/Maestro3"
+drop_fw_file firmware/ess/maestro3_assp_kernel.fw.ihex firmware/ess/maestro3_assp_kernel.fw
+drop_fw_file firmware/ess/maestro3_assp_minisrc.fw.ihex firmware/ess/maestro3_assp_minisrc.fw
+reject_firmware sound/pci/maestro3.c
+clean_blob sound/pci/maestro3.c
+clean_kconfig sound/pci/Kconfig 'SND_MAESTRO3'
+clean_mk 'CONFIG_SND_MAESTRO3' sound/pci/Makefile
+
+announce SND_YMFPCI - "Yamaha YMF724/740/744/754"
+drop_fw_file firmware/yamaha/ds1_ctrl.fw.ihex firmware/yamaha/ds1_ctrl.fw
+drop_fw_file firmware/yamaha/ds1_dsp.fw.ihex firmware/yamaha/ds1_dsp.fw
+drop_fw_file firmware/yamaha/ds1e_ctrl.fw.ihex firmware/yamaha/ds1e_ctrl.fw
+reject_firmware sound/pci/ymfpci/ymfpci_main.c
+clean_blob sound/pci/ymfpci/ymfpci_main.c
+clean_kconfig sound/pci/Kconfig 'SND_YMFPCI'
+clean_mk 'CONFIG_SND_YMFPCI' sound/pci/ymfpci/Makefile
+
+announce SND_SB16_CSP - "SB16 Advanced Signal Processor"
+drop_fw_file firmware/sb16/alaw_main.csp.ihex firmware/sb16/alaw_main.csp
+drop_fw_file firmware/sb16/mulaw_main.csp.ihex firmware/sb16/mulaw_main.csp
+drop_fw_file firmware/sb16/ima_adpcm_init.csp.ihex firmware/sb16/ima_adpcm_init.csp
+drop_fw_file firmware/sb16/ima_adpcm_capture.csp.ihex firmware/sb16/ima_adpcm_capture.csp
+drop_fw_file firmware/sb16/ima_adpcm_playback.csp.ihex firmware/sb16/ima_adpcm_playback.csp
+reject_firmware sound/isa/sb/sb16_csp.c
+clean_blob sound/isa/sb/sb16_csp.c
+clean_kconfig sound/isa/Kconfig 'SND_SB16_CSP'
+clean_mk 'CONFIG_SND_SB16_CSP' sound/isa/sb/Makefile
+
+announce SND_WAVEFRONT - "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
+drop_fw_file firmware/yamaha/yss225_registers.bin.ihex firmware/yamaha/yss225_registers.bin
+reject_firmware sound/isa/wavefront/wavefront_fx.c
+clean_blob sound/isa/wavefront/wavefront_fx.c
+reject_firmware sound/isa/wavefront/wavefront_synth.c
+clean_blob sound/isa/wavefront/wavefront_synth.c
+clean_kconfig sound/isa/Kconfig 'SND_WAVEFRONT'
+clean_mk 'CONFIG_SND_WAVEFRONT' sound/isa/wavefront/Makefile
+
+announce SND_VX_LIB - Digigram VX soundcards
+reject_firmware sound/drivers/vx/vx_hwdep.c
+clean_blob sound/drivers/vx/vx_hwdep.c
+clean_kconfig sound/drivers/Kconfig 'SND_VX_LIB'
+clean_mk CONFIG_SND_VX_LIB sound/drivers/vx/Makefile
+
+announce SND_DARLA20 - "(Echoaudio) Darla20"
+clean_blob sound/pci/echoaudio/darla20.c
+clean_kconfig sound/pci/Kconfig 'SND_DARLA20'
+clean_mk CONFIG_SND_DARLA20 sound/pci/echoaudio/Makefile
+
+announce SND_DARLA24 - "(Echoaudio) Darla24"
+clean_blob sound/pci/echoaudio/darla24.c
+clean_kconfig sound/pci/Kconfig 'SND_DARLA24'
+clean_mk CONFIG_SND_DARLA24 sound/pci/echoaudio/Makefile
+
+announce SND_ECHO3G - "(Echoaudio) 3G cards"
+clean_blob sound/pci/echoaudio/echo3g.c
+clean_kconfig sound/pci/Kconfig 'SND_ECHO3G'
+clean_mk CONFIG_SND_ECHO3G sound/pci/echoaudio/Makefile
+
+announce SND_GINA20 - "(Echoaudio) Gina20"
+clean_blob sound/pci/echoaudio/gina20.c
+clean_kconfig sound/pci/Kconfig 'SND_GINA20'
+clean_mk CONFIG_SND_GINA20 sound/pci/echoaudio/Makefile
+
+announce SND_GINA24 - "(Echoaudio) Gina24"
+clean_blob sound/pci/echoaudio/gina24.c
+clean_kconfig sound/pci/Kconfig 'SND_GINA24'
+clean_mk CONFIG_SND_GINA24 sound/pci/echoaudio/Makefile
+
+announce SND_INDIGO - "(Echoaudio) Indigo"
+clean_blob sound/pci/echoaudio/indigo.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGO'
+clean_mk CONFIG_SND_INDIGO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJ - "(Echoaudio) Indigo DJ"
+clean_blob sound/pci/echoaudio/indigodj.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGODJ'
+clean_mk CONFIG_SND_INDIGODJ sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJX - "(Echoaudio) Indigo DJx"
+clean_blob sound/pci/echoaudio/indigodjx.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGODJX'
+clean_mk CONFIG_SND_INDIGODJX sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIO - "(Echoaudio) Indigo IO"
+clean_blob sound/pci/echoaudio/indigoio.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGOIO'
+clean_mk CONFIG_SND_INDIGOIO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIOX - "(Echoaudio) Indigo IOx"
+clean_blob sound/pci/echoaudio/indigoiox.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGOIOX'
+clean_mk CONFIG_SND_INDIGOIOX sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA20 - "(Echoaudio) Layla20"
+clean_blob sound/pci/echoaudio/layla20.c
+clean_kconfig sound/pci/Kconfig 'SND_LAYLA20'
+clean_mk CONFIG_SND_LAYLA20 sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA24 - "(Echoaudio) Layla24"
+clean_blob sound/pci/echoaudio/layla24.c
+clean_kconfig sound/pci/Kconfig 'SND_LAYLA24'
+clean_mk CONFIG_SND_LAYLA24 sound/pci/echoaudio/Makefile
+
+announce SND_MIA - "(Echoaudio) Mia"
+clean_blob sound/pci/echoaudio/mia.c
+clean_kconfig sound/pci/Kconfig 'SND_MIA'
+clean_mk CONFIG_SND_MIA sound/pci/echoaudio/Makefile
+
+announce SND_MONA - "(Echoaudio) Mona"
+clean_blob sound/pci/echoaudio/mona.c
+clean_kconfig sound/pci/Kconfig 'SND_MONA'
+clean_mk CONFIG_SND_MONA sound/pci/echoaudio/Makefile
+
+announce SND_'<(Echoaudio)>' - "(Echoaudio) all of the above "
+reject_firmware sound/pci/echoaudio/echoaudio.c
+clean_blob sound/pci/echoaudio/echoaudio.c
+
+announce SND_EMU10K1 - "Emu10k1 (SB Live!, Audigy, E-mu APS)"
+reject_firmware sound/pci/emu10k1/emu10k1_main.c
+clean_blob sound/pci/emu10k1/emu10k1_main.c
+clean_kconfig sound/pci/Kconfig 'SND_EMU10K1'
+clean_mk CONFIG_SND_EMU10K1 sound/pci/emu10k1/Makefile
+
+announce SND_MIXART - "Digigram miXart"
+reject_firmware sound/pci/mixart/mixart_hwdep.c
+clean_blob sound/pci/mixart/mixart_hwdep.c
+clean_kconfig sound/pci/Kconfig 'SND_MIXART'
+clean_mk CONFIG_SND_MIXART sound/pci/mixart/Makefile
+
+announce SND_PCXHR - "Digigram PCXHR"
+reject_firmware sound/pci/pcxhr/pcxhr_hwdep.c
+clean_blob sound/pci/pcxhr/pcxhr_hwdep.c
+clean_kconfig sound/pci/Kconfig 'SND_PCXHR'
+clean_mk CONFIG_SND_PCXHR sound/pci/pcxhr/Makefile
+
+announce SND_RIPTIDE - "Conexant Riptide"
+reject_firmware sound/pci/riptide/riptide.c
+clean_blob sound/pci/riptide/riptide.c
+clean_kconfig sound/pci/Kconfig 'SND_RIPTIDE'
+clean_mk CONFIG_SND_RIPTIDE sound/pci/riptide/Makefile
+
+# This is ok, patch filenames are supplied as module parameters, and
+# they are text files with patch instructions.
+#announce SND_HDA_PATCH_LOADER - "Support initialization patch loading for HD-audio"
+#reject_firmware sound/pci/hda/hda_hwdep.c
+#clean_kconfig sound/pci/hda/Kconfig 'SND_HDA_PATCH_LOADER'
+
+announce SND_HDSP - "RME Hammerfall DSP Audio"
+reject_firmware sound/pci/rme9652/hdsp.c
+clean_blob sound/pci/rme9652/hdsp.c
+clean_kconfig sound/pci/Kconfig 'SND_HDSP'
+clean_mk CONFIG_SND_HDSP sound/pci/rme9652/Makefile
+
+announce SND_AICA - "Dreamcast Yamaha AICA sound"
+reject_firmware sound/sh/aica.c
+clean_blob sound/sh/aica.c
+clean_kconfig sound/sh/Kconfig 'SND_AICA'
+clean_mk CONFIG_SND_AICA sound/sh/Makefile
+
+announce SND_MSND_PINNACLE - "Support for Turtle Beach MultiSound Pinnacle"
+clean_blob sound/isa/msnd/msnd_pinnacle.h
+reject_firmware sound/isa/msnd/msnd_pinnacle.c
+clean_blob sound/isa/msnd/msnd_pinnacle.c
+clean_kconfig sound/isa/Kconfig 'SND_MSND_PINNACLE'
+clean_mk CONFIG_SND_MSND_PINNACLE sound/isa/msnd/Makefile
+
+announce SND_MSND_CLASSIC - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey"
+clean_blob sound/isa/msnd/msnd_classic.h
+clean_kconfig sound/isa/Kconfig 'SND_MSND_CLASSIC'
+clean_mk CONFIG_SND_MSND_CLASSIC sound/isa/msnd/Makefile
+
+announce SOUND_MSNDCLAS - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey (oss)"
+clean_blob sound/oss/msnd_classic.h
+clean_kconfig sound/oss/Kconfig 'SOUND_MSNDCLAS'
+clean_sed '
+/^config MSNDCLAS_INIT_FILE$/, /^config / {
+ /^ default.*msndinit\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDCLAS_PERM_FILE$/, /^config / {
+ /^ default.*msndperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDCLAS sound/oss/Makefile
+
+announce SOUND_MSNDPIN - "Support for Turtle Beach MultiSound Pinnacle (oss)"
+clean_blob sound/oss/msnd_pinnacle.h
+clean_kconfig sound/oss/Kconfig 'SOUND_MSNDPIN'
+clean_sed '
+/^config MSNDPIN_INIT_FILE$/, /^config / {
+ /^ default.*pndspini\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDPIN_PERM_FILE$/, /^config / {
+ /^ default.*pndsperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDPIN sound/oss/Makefile
+
+announce SND_SSCAPE - "Ensoniq SoundScape driver"
+reject_firmware sound/isa/sscape.c
+clean_blob sound/isa/sscape.c
+clean_sed '
+/^config SND_SSCAPE$/, /^config / {
+ s,"\(scope\|sndscape\)\.co[d?]","/*(DEBLOBBED)*/",g;
+}' sound/isa/Kconfig 'removed firmware names'
+clean_kconfig sound/isa/Kconfig 'SND_SSCAPE'
+clean_mk CONFIG_SND_SSCAPE sound/isa/Makefile
+
+announce SOUND_TRIX - "MediaTrix AudioTrix Pro support"
+clean_blob sound/oss/trix.c
+clean_kconfig sound/oss/Kconfig 'SOUND_TRIX'
+clean_sed '
+/^config TRIX_BOOT_FILE$/, /^config / {
+ /^ default.*trxpro\.hex/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_TRIX sound/oss/Makefile
+
+announce SOUND_TRIX - "See above,"
+announce SOUND_PAS - "ProAudioSpectrum 16 support,"
+announce SOUND_SB - "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
+clean_blob sound/oss/sb_common.c
+clean_kconfig sound/oss/Kconfig 'SOUND_PAS'
+clean_kconfig sound/oss/Kconfig 'SOUND_SB'
+clean_mk CONFIG_SOUND_PAS sound/oss/Makefile
+clean_mk CONFIG_SOUND_SB sound/oss/Makefile
+
+announce SOUND_PSS - "PSS (AD1848, ADSP-2115, ESC614) support"
+clean_sed 's,^\( [*] .*synth"\)\.$,\1/*.,' sound/oss/pss.c 'avoid nested comments'
+clean_blob sound/oss/pss.c
+clean_kconfig sound/oss/Kconfig 'SOUND_PSS'
+clean_sed '
+/^config PSS_BOOT_FILE$/, /^config / {
+ /^ default.*dsp001\.ld/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_PSS sound/oss/Makefile
+
+##########
+# Crypto #
+##########
+
+announce DX_SEP - "Discretix SEP driver"
+reject_firmware drivers/staging/sep/sep_driver.c
+clean_blob drivers/staging/sep/sep_driver.c
+clean_kconfig drivers/staging/sep/Kconfig 'DX_SEP'
+clean_mk CONFIG_DX_SEP drivers/staging/sep/Makefile
+
+#################
+# Documentation #
+#################
+
+announce Documentation - "non-Free firmware scripts and documentation"
+clean_blob Documentation/dvb/avermedia.txt
+clean_blob Documentation/dvb/opera-firmware.txt
+clean_blob Documentation/dvb/ttusb-dec.txt
+clean_blob Documentation/sound/alsa/ALSA-Configuration.txt
+clean_blob Documentation/sound/oss/MultiSound
+clean_blob Documentation/sound/oss/PSS
+clean_blob Documentation/sound/oss/PSS-updates
+clean_blob Documentation/sound/oss/README.OSS
+clean_file Documentation/dvb/get_dvb_firmware
+clean_file Documentation/video4linux/extract_xc3028.pl
+clean_sed s,usb8388,whatever,g drivers/base/Kconfig 'removed blob name'
+clean_blob firmware/README.AddingFirmware
+clean_blob firmware/WHENCE
+
+if $errors; then
+ echo errors above were ignored because of --force >&2
+fi
+
+exit 0
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-check b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-check
new file mode 100755
index 000000000..ff5f611d1
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-check
@@ -0,0 +1,4749 @@
+#! /bin/sh
+
+# deblob-check version 2010-07-06
+# Inspired in gNewSense's find-firmware script.
+# Written by Alexandre Oliva <lxoliva@fsfla.org>
+
+# Check http://www.fsfla.org/svn/fsfla/software/linux-libre for newer
+# versions.
+
+# Copyright 2008, 2009, 2010 Alexandre Oliva <lxoliva@fsfla.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+
+# usage: deblob-check [-S] [-v] [-v] [-s S] [--reverse-patch] \
+# [--use-...|--gen-flex] [-lDdBbCcXxPpFftVh?H] \
+# *.tar* patch-* [-i prefix/] *.patch *.diff...
+
+# Look for and report too-long undocumented sequences of numbers
+# (generally blobs in disguise) in source files, as well as requests
+# for loading non-Free firmware.
+
+# The order of command line flags is significant. Flags given out of
+# the order above won't be handled correctly, sorry.
+
+# -s --sensitivity: Specifies the number of consecutive integral or
+# character constants that trigger the blob detector.
+# Must be followed by a blank and a number.
+
+# --reverse-patch: Test the removed parts of a patch, rather than
+# the added ones.
+
+# --use-awk: Choose the internal GNU awk script for the bulk of the
+# work. This is the default option, if GNU awk is found.
+# The awk interpreter is named gawk, unless AWK is set.
+
+# --use-sed: Choose the internal GNU sed script for the bulk of the
+# work. This is the default option, if GNU awk is not
+# found.
+
+# --use-python: Choose the internal python script. This is not
+# recommended, because the regular expressions we use
+# invoke exponential behavior in the python engine.
+
+# --use-perl: Choose the internal perl script. This is not
+# recommended, because our regular expressions exceed
+# some limits hard-coded into perl.
+
+# --save-script-input: Save the input that would have been fed to
+# any of the engines above.
+
+# --gen-flex: Generate a flex input file with all known blob and
+# false positive patterns. It would have been a fast
+# regular expression processor if only the flex program
+# completed in reasonable time.
+
+
+# The default sensitivity is 32 constants.
+
+# The sensitivity, if present, must be the first option. The action
+# selection, if present, must be the first argument, except for the
+# sensitivity and verbosity.
+
+# The default can be overridden with one of:
+
+# -l --list-blobs: list files that contain sequences that match the
+# blob detector test and that are not known to be false
+# positives. This is the default option.
+
+# -d --deblob --mark-blobs: print the processed input, replacing
+# sequences that match the blob detector test and that
+# are NOT known to be false positives with
+# /*(DEBLOBBED)*/.
+
+# -D --cat: print the processed input, as it would have been fed to
+# the blob detector script. Use -S to save the sed
+# script used to process it, and search for `sedcat:' in
+# comments to locate the relevant adaptation points.
+
+# -b --print-marked-blobs: like -d, but print only the matching
+# sequences.
+
+# -B --print-blobs: like -b, but do not deblob the sequences.
+
+# -c --print-marked-blobs-with-context: like -b, but try to maximize
+# the context around the blobs. This maximization will
+# sometimes disregard known false positives, if they
+# happen to be contained within the extended match.
+# This is probably an indication that the false positive
+# matching rule could be improved.
+
+# -C --print-blobs-with-context: like -B, but try to maximize the
+# context around the blobs.
+
+# -X --print-all-matches: print all blobs, be they known false
+# positives or actual blobs.
+
+# -x --list-all-matches: list files that contain sequences that appear
+# to be blobs, be they known false positives or not.
+
+# -p --mark-false-positives: print the processed input, replacing
+# sequences that match the blob detector test, even those
+# known to be false positives, with /*(DEBLOBBED)*/.
+
+# -P --list-false-positives: list files that contain false positives.
+
+# -f --print-marked-false-positives: like -p, but print only the
+# matching sequences.
+
+# -F --print-false-positives: like -f, but do not deblob the sequences.
+
+# -t --test: run (very minimal) self-test.
+
+# -V --version: print a version number
+
+# -h -? -H --help: print short or long help message
+
+
+# debugging options:
+
+# -S --save-scripts: save scripts and temporary files.
+
+# -v --verbose: increase verbosity level, for internal debugging. May
+# be given at most twice.
+
+
+# file options:
+
+# --: Don't process command-line options any further. All following
+# arguments are taken as filenames.
+
+# -i --implied-prefix --prefix: prepend the given prefix to each filename
+# listed after this option, when configuring false positives
+# and negatives.
+
+# *.tar*: iterate over all files in the named tar file.
+
+# *.patch, patch-*, *.diff: Look for blobs in the [ +] parts of the
+# *patch, unless --reverse-patch is given, in which case
+# the [ -] parts will be used.
+
+# Anything else is assumed to be a source file.
+
+# *.gz | *.bz2: Decompress automatically.
+
+
+# The exit status is only significant for the --list options: it will
+# be true if nothing was found, and false otherwise.
+
+: # Mark the end of the help message.
+
+# TODO:
+
+# - Improve handling of command-line arguments, so as to not make the
+# order relevant.
+
+# - Add an option for the user to feed their own false positive
+# patterns.
+
+# - Add support to recognize known blobs (or other non-Free
+# signatures, really), to speed up the scanning of files containing
+# blobs, and to avoid attempts to disguise blobs.
+
+# - Factor out the code in the various print_* and list_* parts of the
+# sed script, at least in the shell sources. Make sure they're all
+# included and expanded in a saved --cat script though.
+
+# - Add support for file name tagging in patterns, such that blobs or
+# false positives are recognized only when handling the specific
+# filename, be it stand-alone, as part of a patch or a tarball. This
+# should help avoid recognition of actual blobs as false positives
+# just because there's a symbol with a different name elsewhere.
+
+# It is convenient that the patterns provided by the user to
+# recognize file names can be empty (for backward compatibility), but
+# this should ideally be phased out in favor of more precise matches.
+# It's important that files can be recognized with leading tarball or
+# patch names, that the filename used within the tarball contain
+# leading garbage, and even that a partial pathname be recognizable
+# (say recognize drivers/net/whatever.c when the input file is named
+# ../net/whatever.c).
+
+# Rather than using regular expressions to recognize multiple files
+# it's convenient (but not quite essential) that filename patterns be
+# specifiable as regular expressions, rather than simple filenames,
+# but there are other ways around this.
+
+# Maintaining begin/end markers in a stack-like fashion as part of
+# the processed stream, and using the names in them as (optional) part
+# of the recognition patterns, would enable us to do it.
+
+# Introducing annotations next to the false positives (and recognized
+# blobs) as an early part of the process may speed things up and
+# enable fast processing, but how to introduce the annotations quickly
+# in the first place? Given patterns such as
+
+# \(\(file1\)\(.*\)\(pat1\)\|\(file2\)\(.*\)\(pat2\)\|...\)
+
+# how do we get sed to introduce a marker that contains file2 right
+# before or right after pat2, without turning a big efficient regexp
+# into a slowish sequence of s/// commands?
+
+# - Re-check and narrow false-positive patterns to make sure they
+# apply only to the relevant content.
+
+# - Scripting abilities, so as to be able to automate the removal of
+# source files or of blobs from source files in a tarball without
+# having to extract the entire tarball (as in tar --update/--delete)
+# would be nice. Carrying over removed files automatically into
+# patches would also be great, and this sort of script would be
+# perfect to document what has been done to a tarball plus a set of
+# patches. Something like deblob.script:
+#
+# tarball linux-2.6.24.tar.bz2
+# delete net/wireloss/freedom.c drivers/me/crazy.c
+# deblob include/linux/slab-blob-kfree.h
+# deconfig drivers/char/drm DRM_IS_BAD
+#
+# patch patch-2.6.25-rc7.bz2
+# delete arch/power/over/you.c
+
+# such that the deletes from an earlier file would carry over into the
+# subsequent ones, and new tarballs and patch files would be generated
+# with the libre- prefix in their basename, and the xdeltas between
+# the original files and the modified files would be minimal, and
+# redundant with this script and the input script while at that.
+
+# - Improve documentation of the code.
+
+# - Write a decent testsuite.
+
+# - Insert your idea here. :-)
+
+# Yeah, lots of stuff to do. Want to help?
+
+# This makes it much faster, and mostly immune to non-ASCII stuff, as
+# long as a 8-bit-safe sed is used. Probably a safe assumption these
+# days.
+case ${LANG+set} in set) LANG=C; export LANG;; esac
+
+rm="rm -f"
+
+for echo in 'echo' 'printf %s\n'; do
+ case `$echo '\nx'` in
+ '\nx') break;;
+ esac
+done
+case `$echo '\nx'` in
+'\nx') ;; *) echo Cannot find out what echo to use >&2; exit 1;;
+esac
+
+for echo_n in "echo -n" "printf %s"; do
+ case `$echo_n '\na'; $echo_n '\nb'` in
+ '\na\nb') break;;
+ esac
+done
+case `$echo_n a; $echo_n b` in
+'ab') ;; *) echo Cannot find out an echo -n equivalent to use >&2; exit 1;;
+esac
+
+case $1 in
+--save-scripts | -S)
+ shift
+ rm="echo preserving"
+ ;;
+esac
+
+# Choose verbosity level for sed script debugging and performance
+# analysis.
+case $1 in
+--verbose | -v)
+ shift
+ case $1 in
+ --verbose | -v)
+ shift
+ v="i\\
+:
+p
+i\\
+"
+ vp="2"
+ ;;
+ *)
+ v="P;i\\
+"
+ vp="1"
+ ;;
+ esac
+ ;;
+*)
+ v="# "
+ vp="0"
+ ;;
+esac
+
+sens=31 # 32 - 1
+case $1 in
+--sensitivity | -s)
+ sens=$2;
+ shift 2 || exit 1
+
+ if test "$sens" -gt 0 2>/dev/null; then
+ :
+ else
+ echo invalid sensitivity: $sens >&2
+ exit 1
+ fi
+
+ sens=`expr $sens - 1`
+ ;;
+esac
+
+reverse_patch=false
+case $1 in
+--reverse-patch)
+ reverse_patch=:
+ shift;
+ ;;
+esac
+
+prefix=/
+case $1 in
+--implied-prefix | --prefix| -i)
+ prefix=$2
+ case $prefix in
+ /*/) ;;
+ */) prefix=/$prefix ;;
+ /*) prefix=$prefix/ ;;
+ *) prefix=/$prefix/ ;;
+ esac
+ shift 2 || exit 1
+ ;;
+esac
+
+test_mode=false
+
+name=deblob-check
+
+set_eqscript_main () {
+ $set_main_cmd "$@"
+}
+
+set_eqscript_cmd () {
+ set_eqscript_main "list_blob"
+}
+
+set_sed_cmd () {
+ set_sed_main "
+i\\
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
+q 1"
+}
+
+set_flex_cmd () {
+ set_flex_main
+}
+
+set_save_script_input_cmd () {
+ set_save_script_input_main
+}
+
+set_cmd=set_eqscript_cmd
+if (${PYTHON-python} --version) > /dev/null 2>&1; then
+ # Python will exhibit exponential behavior processing some regular
+ # expressions, but we may have already fixed them all. (see
+ # http://swtch.com/~rsc/regexp/regexp1.html for details)
+ set_main_cmd=set_python_main
+elif (${AWK-gawk} --re-interval --version) > /dev/null 2>&1; then
+ # GNU awk works fine, but it requires --re-interval to accept regexp
+ # ranges, which we rely on to match blobs. We could expand the blob
+ # on our own, but, yuck.
+ set_main_cmd=set_awk_main
+elif (${PERL-false} --version) > /dev/null 2>&1; then
+ # Don't choose perl by default. Besides the potential for
+ # exponential behavior, we exceed some internal recursion limits.
+ set_main_cmd=set_perl_main
+else
+ # Sed takes GBs of RAM to compile all the huge regexps in the sed
+ # script we generate with all known false positives and blobs in
+ # Linux. However, it is somewhat faster than GNU awk and even
+ # python for long runs.
+ # Try it: deblob-check --use-sed linux-2.6.32.tar.bz2
+ set_cmd=set_sed_cmd
+fi
+
+case $1 in
+--use-python)
+ shift;
+ set_cmd=set_eqscript_cmd;
+ set_main_cmd=set_python_main;
+ ;;
+
+--use-perl)
+ shift;
+ set_cmd=set_eqscript_cmd;
+ set_main_cmd=set_perl_main;
+ ;;
+
+--use-awk)
+ shift;
+ set_cmd=set_eqscript_cmd;
+ set_main_cmd=set_awk_main;
+ ;;
+
+--use-sed)
+ shift;
+ set_cmd=set_sed_cmd;
+ ;;
+
+--gen-flex)
+ shift;
+ set_cmd=set_flex_cmd;
+ ;;
+
+--save-script-input)
+ shift;
+ set_cmd=set_save_script_input_cmd;
+ ;;
+esac
+
+case $1 in
+--version | -V)
+ ${SED-sed} -e '/^# '$name' version /,/^# Written by/ { s/^# //; p; }; d' < $0
+ exit 0
+ ;;
+
+-\? | -h)
+ ${SED-sed} -n -e '/^# usage:/,/# -h/ { /^# -/,/^$/{s/^# \(-.*\):.*/\1/p; d; }; s/^\(# \?\)\?//p; }' < $0 &&
+ echo
+ echo "run \`$name --help | more' for full usage"
+ exit 0
+ ;;
+
+--help | -H)
+ ${SED-sed} -n -e '/^# '$name' version /,/^[^#]/ s/^\(# \?\)\?//p' < $0
+ exit 0
+ ;;
+
+--test | -t)
+ test_mode=:
+ ;;
+
+--mark-false-positives | -p)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b list_both" "p" "b list_matches"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "replace_blob = print_blob = without_falsepos"
+ }
+ ;;
+
+--print-marked-false-positives | -f)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_marked_matches" "" "b print_marked_matches"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "replace_falsepos = print_falsepos"
+ }
+ ;;
+
+--print-false-positives | -F)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_matches" "" "b print_matches"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "print_falsepos"
+ }
+ ;;
+
+--deblob | --mark-blobs | -d)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b list_blobs" "p" "p"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "replace_blob = print_blob = print_falsepos = print_nomatch"
+ }
+ ;;
+
+--cat | -D)
+ shift;
+ set_sed_cmd () {
+ set_sed_main \
+ "# sedcat: Actual blob detected, but there may be false positives." \
+ "# sedcat: No blob whatsoever found." \
+ "# sedcat: False positives found." \
+ "p
+d
+# sedcat: Just print stuff, remove this line to run the actual script."
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "print_blob = print_falsepos = print_nomatch"
+ }
+ ;;
+
+--print-marked-blobs | -b)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_marked_blobs"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "replace_blob = print_blob"
+ }
+ ;;
+
+--print-blobs | -B)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_blobs"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "print_blob"
+ }
+ ;;
+
+--print-marked-blobs-with-context | -c)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_marked_cblobs"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "with_context = replace_blob = print_blob"
+ }
+ ;;
+
+--print-blobs-with-context | -C)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_cblobs"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "with_context = print_blob"
+ }
+ ;;
+
+--list-false-positives | -P)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "" "" "
+i\\
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
+q 1"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "list_falsepos"
+ }
+ ;;
+
+--list-all-matches | -x)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "
+i\\
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
+q 1" "" "
+i\\
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
+q 1"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "list_blob = list_falsepos"
+ }
+ ;;
+
+--print-all-matches | -X)
+ shift;
+ set_sed_cmd () {
+ set_sed_main "b print_both" "" "b print_matches"
+ }
+ set_eqscript_cmd () {
+ set_eqscript_main "print_blob = print_falsepos"
+ }
+ ;;
+
+*)
+ case $1 in
+ --list-blobs | -l) shift;;
+ esac
+ case $1 in
+ -- | --implied-prefix | --prefix | -i) ;;
+ -*)
+ if test ! -f "$1"; then
+ echo "$name: \`$1' given too late or out of the proper sequence." >&2
+ echo "$name: The order of arguments is significant, see the usage." >&2
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+
+esac
+
+case $1 in
+--)
+ sawdashdash=t
+ shift;;
+esac
+
+if $test_mode; then
+ allpass=:
+ for tool in awk perl python sed; do
+ echo testing $tool...
+
+ targs="-s 4 -i /deblob-check-testsuite/ --use-$tool"
+
+ pass=:
+
+
+ # Exercise some nasty inputs to see that we
+ # recognize them as blobs with full context.
+ test="positive context"
+ for string in \
+ "1,2,3,4" \
+ "= {
+1, 0x2, 03, L'\x4'
+}" \
+ "=
+{
+ '\\x1', '\\002'
+ ,
+ {
+ { \"\\x3\", },
+ \"\\004\"
+ },
+};" \
+ ".long 1,2
+ .long \$3,\$4" \
+ "#define X { 1, 2, \\
+ 3, 4, /* comment */ \\
+ }" \
+ "= {
+/*
+ * multi-line
+ * comment
+ */
+ {
+ 0x4c00c000, 0x00000000, 0x00060000, 0x00000000,
+ },
+}" \
+ "= {
+blob(
+)
+accept(
+)
+1, 2, 3, 4
+}" \
+ ; do
+ case `echo "$string" | $0 $targs -C` in
+ "::: - :::
+$string") ;;
+ *) echo "failed $test test for:
+$string" >&2
+ pass=false;;
+ esac
+ done
+
+ # Make sure we do not recognize these as blobs.
+ test=negative
+ for string in \
+ "#define X { 1, 2 }
+#define Y { 3, 4 }" \
+ " 0x00, 0x00, 0x00 " \
+ "accept(1, 2, 3,
+4, 5, 6)" \
+ ; do
+ case `echo "$string" | $0 $targs` in
+ "") ;;
+ *) echo "failed $test test for:
+$string" >&2
+ pass=false;;
+ esac
+ done
+
+ # Make sure we print only the lines with blobs.
+ test="only blob"
+ odd=:
+ for string in \
+ "= {
+1, 0x2, 03, L'\x4'
+}" \
+ "1, 0x2, 03, L'\x4'" \
+\
+ "=
+{
+ '\\x1', '\\002'
+ ,
+ {
+ { \"\\x3\", },
+ \"\\004\"
+ },
+};" \
+ " '\\x1', '\\002'
+ ,
+ {
+ { \"\\x3\", },
+ \"\\004\"" \
+\
+ ".long 1,2
+ .long \$3,\$4" \
+ ".long 1,2
+ .long \$3,\$4" \
+\
+ "#define X { 1, 2, \\
+ 3, 4, /* comment */ \\
+ }" \
+ "#define X { 1, 2, \\
+ 3, 4, /* comment */ \\" \
+\
+ "= {
+/*
+ * multi-line
+ * comment
+ */
+ {
+ 0x4c00c000, 0x00000000, 0x00060000, 0x00000000,
+ },
+}" \
+ " 0x4c00c000, 0x00000000, 0x00060000, 0x00000000," \
+\
+ "MODULE_FIRMWARE(x);
+MODULE_FIRMWARE(y);
+1, 2, 3, 4; 5, 6, 7, 8;
+9, 10, 11" \
+ "MODULE_FIRMWARE(x);
+MODULE_FIRMWARE(y);
+::: - :::
+1, 2, 3, 4; 5, 6, 7, 8;" \
+\
+ "= {
+blob()
+accept()
+1, 2, 3, 4
+}" \
+ "blob()
+::: - :::
+1, 2, 3, 4" \
+\
+ "a blobeol y
+x" \
+ "a blobeol y
+x" \
+\
+ ; do
+ if $odd; then
+ input=$string odd=false
+ continue
+ fi
+ case `echo "$input" | $0 $targs -B` in
+ "::: - :::
+$string") ;;
+ *)
+ echo "failed $test test for:
+$input" >&2
+ pass=false
+ ;;
+ esac
+ odd=:
+ done
+ $odd || { echo "internal testsuite failure in $test" >&2; }
+
+ # Make sure we deblob only the blobs.
+ test="deblobs"
+ odd=:
+ for string in \
+ "= { 1, 0x2, 03, L'\x4' }" \
+ "= { /*(DEBLOBBED)*/' }" \
+\
+ "=
+{
+ '\\x1', '\\002'
+ ,
+ {
+ { \"\\x3\", },
+ \"\\004\"
+ },
+};" \
+ " '\\x/*(DEBLOBBED)*/\"" \
+\
+ ".long 1,2
+ .long \$3,\$4" \
+ ".long /*(DEBLOBBED)*/" \
+\
+ "#define X { 1, 2, \\
+ 3, 4, /* comment */ \\
+ }" \
+ "#define X { /*(DEBLOBBED)*/, /* comment */ \\" \
+\
+ "= {
+/*
+ * multi-line
+ * comment
+ */
+ {
+ 0x4c00c000, 0x00000000, 0x00060000, 0x00000000,
+ },
+}" \
+ " /*(DEBLOBBED)*/," \
+\
+ "MODULE_FIRMWARE(x);
+MODULE_FIRMWARE(y);
+1, 2, 3, 4; 5, 6; 7, 8, 9, 10;
+9, 10, 11" \
+ "/*(DEBLOBBED)*/
+::: - :::
+/*(DEBLOBBED)*/; 5, 6; /*(DEBLOBBED)*/;" \
+\
+ "= {
+accept() blob() x blob(
+) y
+}" \
+ "accept() /*(DEBLOBBED)*/ x /*(DEBLOBBED)*/ y" \
+\
+ "= {
+accept() blob() x blob(
+w) y
+}" \
+ "accept() /*(DEBLOBBED)*/ x /*(DEBLOBBED)*/ y" \
+\
+ "a blobeol y
+x" \
+ "a /*(DEBLOBBED)*/x" \
+\
+ ; do
+ if $odd; then
+ input=$string odd=false
+ continue
+ fi
+ case `echo "$input" | $0 $targs -b` in
+ "::: - :::
+$string") ;;
+ *)
+ echo "failed $test test for:
+$input" >&2
+ pass=false
+ ;;
+ esac
+ odd=:
+ done
+ $odd || { echo "internal testsuite failure in $test" >&2; }
+
+ # How did we do?
+ if $pass; then
+ echo success for $tool
+ else
+ allpass=$pass
+ fi
+ done
+ $allpass
+ exit
+fi
+
+# Call addx as needed to set up more patterns to be recognized as
+# false positives. Takes the input filename in $1.
+
+set_except () {
+ blob "$blobseq"
+ blobna 'request_firmware_nowait'
+ blobna 'request_firmware'
+ blobna 'request_ihex_firmware'
+ blobna 'MODULE_FIRMWARE[ ]*[(][^\n;]*[)][ ]*[;]\([ \n]*MODULE_FIRMWARE[ ]*[(][^\n;]*[)][ ]*[;]\)*'
+ blobna 'DEFAULT_FIRMWARE'
+ blobna '\([.]\|->\)firmware[ \n]*=[^=]'
+ blobna 'mod_firmware_load' # sound/
+ blobname '[.]\(fw\|bin[0-9]*\|hex\|frm\|co[dx]\|cis\|dat\|elf\|xlx\|rfb\|ucode\|img\|sbcf\|ctx\(prog\|vals\)\)["]'
+
+ case $prefix$1 in
+ */*linux*.tar* | */*kernel*.tar* | */*linux-*.*.*/*)
+ # false alarms, contain source
+ # drivers/net/wan/wanxlfw.inc_shipped -> wanxlfw.S
+ accept 'static[ ]u8[ ]firmware\[\]=[{][\n]0x60,\(0x00,\)*0x16,\(0x00,\)*\([\n]\(0x[0-9A-F][0-9A-F],\)*\)*[\n]0x23,0xFC,0x00,0x00,0x00,0x01,0xFF,0xF9,0x00,0xD4,0x61,0x00,0x06,0x74,0x33,0xFC,\([\n]\(0x[0-9A-F][0-9A-F],\)*\)*0x00[\n][}][;]'
+ # drivers/usb/serial/xircom_pgs_fw.h -> xircom_pgs.S
+ initnc 'static[ ]const[ ]struct[ ]ezusb_hex_record[ ]xircom_pgs_firmware\[\][ ]='
+ # drivers/usb/serial/keyspan_pda_fw_h -> keyspan_pda.S
+ initnc 'static[ ]const[ ]struct[ ]ezusb_hex_record[ ]keyspan_pda_firmware\[\][ ]='
+ # arch/m68k/ifpsp060/*.sa -> src/*.s
+ accept '[ ]\.long[ ]0x60ff0000,0x02360000,0x60ff0000,0x16260000[\n]'"$sepx$blobpat*"
+ accept '[ ]\.long[ ]0x60ff0000,0x17400000,0x60ff0000,0x15f40000[\n]'"$sepx$blobpat*"
+ # arch/powerpc/platforms/cell/spufs/spu_save_dump.h_shipped -> spu_save.c
+ initnc 'static[ ]unsigned[ ]int[ ]spu_save_code\[\][ ][ ]__attribute__[(][(]__aligned__[(]128[)][)][)][ ]='
+ # arch/powerpc/platforms/cell/spufs/spu_restore_dump.h_shipped -> spu_restore.c
+ initnc 'static[ ]unsigned[ ]int[ ]spu_restore_code\[\][ ][ ]__attribute__[(][(]__aligned__[(]128[)][)][)][ ]='
+ # drivers/net/ixp2000/ixp2400_tx.ucode -> ixp2400_tx.uc
+ initnc '[ ]\.initial_reg_values[ ]=[ ][(]struct[ ]ixp2000_reg_value[ ]\[\][)][ ][{]'
+ # drivers/net/ixp2000/ixp2400_rx.ucode -> ixp2400_rx.uc
+ initnc '[ ]\.initial_reg_values[ ]=[ ][(]struct[ ]ixp2000_reg_value[ ]\[\][)][ ][{]'
+
+
+ # checked:
+
+ accept '[ ][$]3[ ]=[ ][{][{]pge[ ]=[ ][{][{]ste[ ]=[ ][{]\(\([0-9][0-9a-fx{},\n ]*\|\(pge\|ste\)[ ]=\|<repeats[ ][0-9]\+[ ]times>\)[{},\n ]*\)*<repeats[ ]11[ ]times>[}]$'
+ accept '__clz_tab:[\n][ ]\.byte[ ]0\(,[0-5]\)\+'"$sepx$blobpat*" arch/sparc/lib/divdi3.S
+ accept 'PITBL:[\n][ ][ ]\.long[ ][ ]0xC0040000,0xC90FDAA2,'"$blobpat*" arch/sparc/lib/divdi3.S
+ accept '\(0x[0F][0F],\)\+\\[\n]\(\(0x[0F][0F],\)\+\\[\n]\)*\(0x[0F][0F],\)\+0x00' arch/m68k/mac/mac_penguin.S
+ accept '\.lowcase:[\n][ ]\.byte[ ]0x00\(,0x0[1-7]\)\+'"$sepx$blobpat*"'$' arch/s390/kernel/head.S
+ accept '_zb_findmap:[\n][ ][ ][ ][ ][ ][ ][ ][ ][ ]\.byte[ ][ ]0\(,[123],0\)\+,4'"$sepx$blobpat*"'$' arch/s390/kernel/bitmap.S
+ accept '_sb_findmap:[\n][ ][ ][ ][ ][ ][ ][ ][ ][ ]\.byte[ ][ ]8\(,0,[123]\)\+,0'"$sepx$blobpat*"'$' arch/s390/kernel/bitmap.S
+ accept '[ ]\.section[ ]__ex_table,["]a["]'"$sepx$blobpat*" arch/powerpc/lib/copyuser_64.S
+ accept '[ ]memcpy[(]src,[ ]["]\\x01\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00["].*PROGxxxx' arch/powerpc/platforms/iseries/mf.c
+ initnc 'static[ ]const[ ]unsigned[ ]int[ ]cpu_745x\[2\]\[16\][ ]=' arch/ppc/platforms/ev64260.c
+ initnc 'const[ ]unsigned[ ]char[ ]__flsm1_tab\[256\][ ]=' arch/alpha/lib/fls.c
+ accept '#define[ ]_MAP_0_32_ASCII_SEG7_NON_PRINTABLE[ ]\\[\n][ ]\(0,\)\+$' 'drivers/input/misc/map_to_7segment\.h\|include/linux/map_to_7segment\.h'
+ initc '[ ]static[ ]int[ ][ ][ ][ ][ ][ ]init_values_b\[\][ ]=' sound/oss/ad1848.c
+ initnc 'static[ ]unsigned[ ]char[ ]atkbd_set2_keycode\[512\][ ]=' drivers/input/keyboard/atkbd.c
+ accept 'desc_config1:[\n][ ]\.byte[ ]0x09,[ ]0x02'"$sepx$blobpat*" 'drivers/usb/serial/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_mfg:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_mfg_end:' 'drivers/usb/serial/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_product:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_product_end:' 'drivers/usb/serial/\(keyspan_pda\|xircom_pgs\).S'
+ accept '[ ][ ][ ][/][*][ ]\(SQCIF\|QSIF\|QCIF\|SIF\|CIF\|VGA\)[ ][*][/][\n][ ][ ][ ][{][\n][ ][ ][ ][ ][ ][ ][{]'"$blobpat*" drivers/media/video/pwc/pwc-nala.h
+ accept 'P[13]\([\n]#[^\n]*\)*[\n]*\([\n][0-9 ]*\)\+' drivers/video/logo/*.ppm
+ accept 'for[ ]i[ ]in[ ][ 0-9\\\n]*[\n]do' 'Documentation/specialix\.txt|Documentation/serial/specialix\.txt'
+ accept '[ ][ ][ ][ ][ ][ ][ ][ ][ ]:[ ][ ][ ]3600000[ ][ ][ ]3400000[ ][ ][ ]3200000[ ][ ][ ]3000000[ ][ ][ ]2800000[ ]' Documentation/cpu-freq/cpufreq-stats.txt
+ accept '00[ ]00[\n]64[ ]01[\n]8e[ ]0b[\n][\n][0-9a-f \n]*fe[ ]fe' 'Documentation/scsi/\(sym\|ncr\)53c8xx_2.txt'
+ accept '0f[ ]00[ ]08[ ]08[ ]64[ ]00[ ]0a[ ]00[ ]-[ ]id[ ]0[\n]'"$blobpat*" 'Documentation/scsi/\(sym\|ncr\)53c8xx_2.txt'
+ accept 'default[ ]nvram[ ]data:'"$sepx$blobpat*" 'Documentation/scsi/\(sym\|ncr\)53c8xx_2.txt'
+ accept '0x0458[ ][ ][ ][ ][ ]0x7025[\n]'"$blobpat*" Documentation/video4linux/sn9c102.txt
+ accept '0x102c[ ][ ][ ][ ][ ]0x6151[\n]'"$blobpat*" Documentation/video4linux/et61x251.txt
+ accept '0x041e[ ][ ][ ][ ][ ]0x4017[\n]'"$blobpat*" Documentation/video4linux/zc0301.txt
+ accept '[ ][ ][(]gdb[)][ ]x[/]100x[ ][$]25[\n][ ][ ]0x507d2434:[ ][ ][ ][ ][ ]0x507d2434[ ][ ][ ][ ][ ][ ]0x00000000[ ][ ][ ][ ][ ][ ]0x08048000[ ][ ][ ][ ][ ][ ]0x080a4f8c'"$sepx$blobpat*" Documentation/uml/UserModeLinux-HOWTO.txt
+ accept '[ ][ ][ ][ ][ ][ ]1[ ][ ]0[ ][ ]0[ ][ ]0[ ][ ]0x308'"$sepx$blobpat*" Documentation/isdn/README.inc
+ accept 'domain<N>[ ]<cpumask>[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]10[ ]11[ ]12[ ]13[ ]14[ ]15[ ]16[ ]17[ ]18[ ]19[ ]20[ ]21[ ]22[ ]23[ ]24[ ]25[ ]26[ ]27[ ]28[ ]29[ ]30[ ]31[ ]32[ ]33[ ]34[ ]35[ ]36$' Documentation/sched-stats.txt
+ accept '[ * ]*0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]1[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]2[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]3[\n][ * ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1' 'net/\(netfilter\|ipv4\)/ipvs/ip_vs_sync.c|net/sctp/sm_make_chunk.c|include/linux/scpt.h'
+ accept '[ ][*][ ][ ]1[ ]1[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]1[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0[ ]0' arch/x86/lguest/boot.c
+ ocomment '[ ][/][*][ ]Configure[ ]the[ ]PCI[ ]bus[ ]bursts[ ]and[ ]FIFO[ ]thresholds.' drivers/net/fealnx.c
+ ocomment '[/][*][ ]the[ ]original[ ]LUT[ ]values[ ]from[ ]Alex[ ]van[ ]Kaam[ ]<darkside@chello\.nl>' drivers/hwmon/via686a.c
+ initc 'static[ ]const[ ]unsigned[ ]char[ ]init\[\][ ]=[ ][{][^;]*MODE=0[ ][;].*SAA_7114_NTSC_HSYNC_START' drivers/media/video/saa7114.c
+
+ defsnc 'static[ ]struct[ ]cipher_testvec[ ]\(aes\|anubis\|bf\|camellia\|cts_mode\|des3_ede\|cast6\|salsa20_stream\|serpent\|tf\|tnepres\|xeta\|x\?tea\)\(_\(cbc\|ctr\(_rfc3686\)\?\|xts\)\)\?_\(enc\|dec\)_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ defsnc 'static[ ]struct[ ]comp_testvec[ ]\(deflate\|lzo\)_\(de\)\?comp_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ defsnc 'static[ ]struct[ ]hash_testvec[ ]\(aes_xcbc128\|crc32c\|hmac_sha2\(24\|56\)\|\(sha\|wp\)\(256\|384\|512\)\)_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ # initnc '[ ]*\.\(digest\|entries\|input\|key\|output\|plaintext\|result\)[ \n ]*=[ ][{"]' 'crypto/\(tcrypt\|testmgr\).h'
+
+ defsnc 'static[ ]\(const[ ]\)\?RegInitializer[ ]initData\[\][ ]__initdata[ ]=' 'drivers/ide/ali14xx\.c\|drivers/ide/legacy/ali14xx\.c'
+ defsnc 'static[ ]const[ ]u8[ ]setup\[\][ ]=' 'drivers/ide/delkin_cb\.c\|drivers/ide/pci/delkin_cb\.c'
+ defsnc 'static[ ]u8[ ]cvs_time_value\[\]\[XFER_UDMA_6[ ]-[ ]XFER_UDMA_0[ ][+][ ]1\][ ]=' 'drivers/ide/sis5513\.c\|drivers/ide/pci/sis5513\.c'
+ defsnc 'static[ ]u8[ ]\(act\|ini\|rco\)_time_value\[\]\[8\][ ]=' 'drivers/ide/sis5513\.c\|drivers/ide/pci/sis5513\.c'
+ defsnc 'static[ ]const[ ]u8[ ]speedtab[ ]\[3\]\[12\][ ]=' 'drivers/ide/umc8672\.c\|drivers/ide/legacy/umc8672\.c'
+ defsnc 'static[ ]const[ ]s8[ ]\(b43\(legacy\)\?\|bcm43xx\)_tssi2dbm_[bg]_table\[\][ ]=' net/wireless/b43/phy.c
+ defsnc 'static[ ]const[ ]char[ ]zr360[56]0_dht\[0x1a4\][ ]=' 'drivers/media/video/zr36060\.c\|drivers/media/video/zoran/zr36060\.c'
+ defsnc 'static[ ]const[ ]char[ ]zr360[56]0_dqt\[0x86\][ ]=' 'drivers/media/video/zr36060\.c\|drivers/media/video/zoran/zr36060\.c'
+ defsnc 'static[ ]u8[ ]tas3004_treble_table\[\][ ]=' sound/aoa/codecs/tas-basstreble.h
+
+ # This file contains firmwares that we deblob with high
+ # sensitivity, so make sure the sequences of numbers that are not
+ # blobs are not deblobbed. FIXME: we should have patterns to
+ # recognize the blobs instead.
+ defsnc '[ ]static[ ]const[ ]u32[ ]test_pat\[4\]\[6\][ ]=' drivers/net/tg3.c
+ accept "[ ][}]\\(,\\?[ ]mem_tbl_5\\(70x\\|705\\|755\\|906\\)\\[\\][ ]=[ ][{]$sepx$blobpat*$sepx[}]\\)*[;]" drivers/net/tg3.c
+
+ # end of generic checked expressions.
+ # version-specific checked bits start here
+
+ # removed in 2.6.28
+ defsnc 'static[ ]unsigned[ ]char[ ]irq_xlate\[32\][ ]=' arch/sparc/kernel/sun4m_irq.c
+ defsnc 'static[ ]int[ ]logitech_expanded_keymap\[LOGITECH_EXPANDED_KEYMAP_SIZE\][ ]=' drivers/hid/hid-input.c
+ defsnc '[ ]static[ ]const[ ]\(__\)\?u8[ ]\(read_indexs\|n\(set\)\?[0-9]*\(_other\)\?\|missing\)\[[0-9x]*\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc 'static[ ]const[ ]u_char[ ]nand_ecc_precalc_table\[\][ ]=' drivers/mtd/nand/nand_ecc.c
+ oprepline '#define[ ]AR5K_RATES_\(11[ABG]\|TURBO\|XR\)[ ]' drivers/net/wireless/ath5k/ath5k.h
+ defsnc 'static[ ]const[ ]struct[ ]ath_hal[ ]ar5416hal[ ]=' drivers/net/wireless/ath9k/hw.c
+ defsnc 'const[ ]unsigned[ ]char[ ]INIT_2\[127\][ ]=' drivers/video/omap/lcd_sx1.c
+
+ # removed in 2.6.24
+ accept "[ ]Psize[ ][ ][ ][ ]Ipps[ ][ ][ ][ ][ ][ ][ ]Tput[ ][ ][ ][ ][ ]Rxint[ ][ ][ ][ ][ ]Txint[ ][ ][ ][ ]Done[ ][ ][ ][ ][ ]Ndone[\\n][ ]---------------------------------------------------------------\\([\\n][ 0-9]\\+\\)\\+"'$'
+ initnc 'static[ ]u_short[ ]ataplain_map\[NR_KEYS\][ ]__initdata[ ]='
+ initnc '[ ]static[ ]const[ ]unsigned[ ]char[ ]invert5\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]alpa2target\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]target2alpa\[\][ ]='
+ oprepline '#define[ ]INIT_THREAD[ ][{0},]\+[ ]*\\[\n][ ]*[{0},]\+'
+ initnc 'static[ ]uint[ ]tas300\(1c\|4\)_\(master\|mixer\|treble\|bass\)_tab\[\]='
+ initnc 'static[ ]short[ ]dmasound_[au]law2dma16\[\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]DACVolTable\[101\][ ]='
+
+ # removed in 2.6.23
+ initnc 'static[ ]const[ ]UQItype[ ]__clz_tab\[\][ ]=' arch/arm26/lib/udivdi3.c
+ initnc '[ ]static[ ]unsigned[ ]char[ ]scale\[101\][ ]=' sound/oss/opl3sa2.c
+ initnc '[}][ ]syncs\[\][ ]=' drivers/scsi/53c7xx.c
+ initnc 'genoa_md:'"$sepx$blobpat*"'[\n][ ]\.ascii[ ]["]Genoa["]' arch/i386/boot/video.S
+
+ # removed in 2.6.22
+ initnc 'Vendor[ ]ID[ ][ ]Product[ ]ID[\n]-\+[ ][ ]-\+[\n]'"$blobpat*" Documentation/video4linux/sn9c102.txt
+ defsnc 'static[ ]short[ ][au]law2dma16\[\]' arch/ppc/8xx_io/cs4218_tdm.c
+ defsnc '[ ]static[ ]const[ ]char[ ]minimal_ascii_table\[\]' drivers/ieee1394/csr1212.c
+ defsnc 'static[ ]u16[ ]key_map[ ]\[256\][ ]=' drivers/media/dvb/ttpci/av7110_ir.c
+ defsnc 'static[ ]unsigned[ ]char[ ]gf64_inv\[64\][ ]=' drivers/mtd/nand/cafe_ecc.c
+ defsnc 'static[ ]unsigned[ ]short[ ]err_pos_lut\[4096\][ ]=' drivers/mtd/nand/cafe_ecc.c
+ defsnc 'static[ ]unsigned[ ]char[ ]testdata\[TESTDATA_LEN\][ ]=' fs/jffs2/comprtest.c
+
+ # added in 2.6.25
+ accept "%canned_values[ ]=[ ][(][\\n][ ]\\([0-9]\\+[ ]=>[ ]\\[[ \\n]\\+\\(\\([0-9]\\+\\|\\'0x[0-9a-f]\\+\\'\\),[ \\n]*\\)*\\]\\(,[ ]\\|[\\n]\\)\\)*[)][;]"
+
+ # from 2.6.25-rc* patches
+ initnc '[ ]int[ ]bcomm_irq\[3[*]16\][ ]='
+ initnc '[ ]static[ ]const[ ]int8[ ]countLeadingZerosHigh\[\][ ]='
+ initnc 'static[ ]struct[ ]nic_qp_map[ ]nic_qp_mapping_[01]\[\][ ]='
+ initnc 'static[ ]struct[ ]regval[ ]ov_initvals\[\][ ]='
+ initnc 'static[ ]struct[ ]regval[ ]stk1125_initvals\[\][ ]='
+ initnc 'static[ ]u8[ ]bnx2x_stats_len_arr\[BNX2X_NUM_STATS\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]arb_line[ ]read_arb_data\[NUM_RD_Q\]\[MAX_RD_ORD[ ][+][ ]1\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]arb_line[ ]write_arb_data\[NUM_WR_Q\]\[MAX_WR_ORD[ ][+][ ]1\][ ]='
+ initnc '[ ][ ][}][ ]blinkrates\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini[ ]ar5212_ini\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf5413_ini_mode_end\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5111\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112a\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5413\[\][ ]='
+ defsnc '\(static[ ]\)\?const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+
+ # new in 2.6.26
+ initnc 'static[ ]u64[ ]vec2off\[68\][ ]=' arch/ia64/kvm/process.c
+ initnc "[ ][ ][ ]interrupts[ ]=[ ]<\\(0x\\)\\?3[ ]\\(0x\\)\\?0[ ]\\(0x\\)\\?0[ ][ ]$blobpat*>[;]" 'arch/powerpc/boot/dts/\(cm5200\|lite5200b\?\|kuroboxHG\|pcm030\|tqm5200\).dts'
+ initnc 'static[ ]const[ ]u32[ ]crctab32\[\][ ]=' arch/x86/boot/tools/build.c
+ defsnc 'static[ ]struct[ ]mse2snr_tab[ ]\(vsb\|qam\(64\|256\)\)_mse2snr_tab\[\][ ]=' drivers/media/dvb/frontends/au8522.c
+ defsnc '[}][ ]\(VSB\|QAM\(64\|256\)\?\)_mod_tab\[\][ ]=' 'drivers/media/dvb/frontends/au8522\(_dig\)\?\.c'
+ initnc '[}][ ]itd1000_\(lpf_pga\|fre_values\)\[\][ ]=' drivers/media/dvb/frontends/itd1000.c
+ initnc '[}][ ]\(vsb\|qam\(64\|256\)\)_snr_tab\[\][ ]=' drivers/media/dvb/frontends/s5h1411.c
+ initnc '[}][ ]snr_tab\[\][ ]=' drivers/media/dvb/frontends/tda10048.c
+ initnc 'static[ ]u32[ ]reg_init_initialize\[\][ ]=' drivers/media/video/saa717x.c
+ initnc 'static[ ]const[ ]u32[ ]\(main\|gear\)_seedset\[BACKOFF_SEEDSET_ROWS\]\[BACKOFF_SEEDSET_LFSRS\][ ]=' drivers/net/forcedeth.c
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf24\(13\|25\)_ini_mode_end\[\][ ]=' drivers/net/wireless/ath5k/initvals.c
+ initnc 'static[ ]const[ ]u16[ ]wm9713_reg\[\][ ]=' sound/soc/codecs/wm9713.c
+
+ # new in 2.6.27
+ accept '[ ]\.section[ ]__ex_table,["]a["]'"$sepx$blobpat*" 'arch/x86/lib/copy_user_\(nocache_\)\?64.S'
+ accept 'desc_config1:[\n][ ]\.byte[ ]0x09,[ ]0x02'"$sepx$blobpat*" 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_mfg:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_mfg_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_product:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_product_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept ':03000000020200F9[\n]:040023000205\(9B0037\|5F0073\)[\n]\(:050030000000000000CB[\n]\|:0400430002010000B6[\n]\)*'"$sepx$blobpat*"'[\n]:\(0E06E0006400670065007400060334003700F4\|0606A000060334003700E0\)[\n]:00000001FF' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).HEX'
+ accept ':100000000C004000000000000000000000000000A4[\n]'"$sepx$blobpat*"'[\n][/][*][ ]DSP56001[ ]bootstrap[ ]code[ ][*][/]' firmware/dsp56k/bootstrap.bin.ihex
+ initnc 'static[ ]const[ ]u16[ ]uda1380_reg\[UDA1380_CACHEREGNUM\][ ]=' sound/soc/codecs/uda1380.c
+ initnc 'static[ ]const[ ]u16[ ]wm8510_reg\[WM8510_CACHEREGNUM\][ ]=' sound/soc/codecs/wm8510.c
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]atkbd_unxlate_table\[128\][ ]=' drivers/input/keyboard/atkbd.c
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]usb_kbd_keycode\[256\][ ]=' drivers/hid/usbhid/usbkbd.c
+ initnc '[ ][ ]u8[ ]buf,[ ]bufs\[\][ ]=' drivers/media/dvb/dvb-usb/cxusb.c
+ initnc 'static[ ]struct[ ]dvb_pll_desc[ ][^\n]*[ ]=' drivers/media/dvb/frontends/dvb-pll.c
+ initnc '[ ]static[ ]int[ ]sysdiv_to_div_x_2\[\][ ]=' arch/powerpc/platforms/512x/clock.c
+ defsnc 'static[ ]const[ ]__u8[ ]cx_inits_\(176\|320\|352\|640\)\[\][ ]=' drivers/media/video/gspca/conex.c
+ defsnc 'static[ ]const[ ]__u8[ ]cx_jpeg_init\[\]\[8\][ ]=' drivers/media/video/gspca/conex.c
+ defsnc 'static[ ]const[ ]__u8[ ]cxjpeg_\(640\|352\|320\|176\|qtable\)\[\]\[8\][ ]=' drivers/media/video/gspca/conex.c
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]quant\[\]\[0x88\][ ]=' drivers/media/video/gspca/jpeg.h
+ defsnc 'static[ ]unsigned[ ]char[ ]huffman\[\][ ]=' drivers/media/video/gspca/jpeg.h
+ initc '[ ]\?static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]norm_76[1247]0\[\][ ]=' drivers/media/video/gspca/ov519.c
+ initnc 'static[ ]const[ ]__u8[ ]pac207_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/pac207.c
+ initnc 'static[ ]const[ ]__u8[ ]pac7311_jpeg_header\[\][ ]=' drivers/media/video/gspca/pac7311.c
+ defsnc 'static[ ]const[ ]__u8[ ]\(start\|page[34]\)_73\(02\|11\)\[\][ ]=' 'drivers/media/video/gspca/pac73\(02\|11\)\.c'
+ initnc 'static[ ]const[ ]__u8[ ]init\(Hv7131\|Ov\(6650\|7630\(_3\)\?\)\|Pas\(106\|202\)\|Tas51[13]0\)\[\][ ]=' drivers/media/video/gspca/sonixb.c
+ initnc 'static[ ]const[ ]__u8[ ]\(hv7131\|ov\(6650\|7630\(_3\)\?\)\|pas\(106\|202\)\|tas51[13]0\)_sensor_init\(_com\)\?\[\]\[8\][ ]=' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131r\|mi0360\|mo4000\|ov76\([36]0\|48\)\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ initnc 'static[ ]const[ ]__u8[ ]qtable4\[\][ ]=' drivers/media/video/gspca/sonixj.c
+ initnc 'static[ ]const[ ]__u16[ ]\(spca500_visual\|Clicksmart510\)_defaults\[\]\[3\][ ]=' drivers/media/video/gspca/spca500.c
+ initnc 'static[ ]const[ ]__u8[ ]qtable_\(creative_pccam\|kodak_ez200\|pocketdv\)\[2\]\[64\][ ]=' drivers/media/video/gspca/spca500.c
+ initnc 'static[ ]const[ ]__u16[ ]spca501c\?_\(\(3com\|arowana\|mysterious\)_\)\?\(init\|open\)_data\[\]\[3\][ ]=' drivers/media/video/gspca/spca501.c
+ defsnc 'static[ ]const[ ]\(__u16\|u8\)[ ]spca505b\?_\(init\|open\)_data\(_ccd\)\?\[\]\[3\][ ]=' drivers/media/video/gspca/spca505.c
+ defsnc 'static[ ]const[ ]\(__\)\?u16[ ]spca508\(cs110\|_sightcam2\?\|_vista\)\?_init_data\[\]\[[23]\][ ]=' drivers/media/video/gspca/spca508.c
+ initnc 'static[ ]const[ ]__u16[ ]\(spca561\|rev72a\)_init_data3\?\[\]\[2\][ ]=' drivers/media/video/gspca/spca561.c
+ defsnc 'static[ ]const[ ]\(__u16\|struct[ ]cmd\)[ ]spca504\(_pccam600\|A_clicksmart420\)_\(init\|open\)_data\[\]\(\[3\]\)\?[ ]=' drivers/media/video/gspca/sunplus.c
+ defsnc 'static[ ]const[ ]\(__\)\?u8[ ]qtable_\(creative_pccam\|spca504_default\)\[2\]\[64\][ ]=' drivers/media/video/gspca/sunplus.c
+ initnc 'static[ ]const[ ]__u8[ ]\(effects\|gamma\)_table\[\(MAX_[A-Z]*\|[A-Z]*_MAX\)\]\[[0-9]*\][ ]=' drivers/media/video/gspca/t631.c
+ initnc 'static[ ]const[ ]\(__\)\?u8[ ]tas5130a_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc 'static[ ]const[ ]struct[ ]usb_action[ ]\(cs2102\|hdcs2020xx\|icm105a\(xx\)\?\|ov7630c\|pb0330\([3x]x\)\?\|mi0360soc\)_Initial\(Scale\)\?\[\][ ]=' drivers/media/video/gspca/zc3xx.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_agc\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_ofdm\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck_ch14\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]__u16[ ]t10_dif_crc_table\[256\][ ]=' lib/crc-t10dif.c
+ initnc 'static[ ]crb_128M_2M_block_map_t[ ]crb_128M_2M_map\[64\][ ]=' drivers/net/netxen/netxen_hw.c
+ initnc 'static[ ]const[ ]__u16[ ]crc10_table\[256\][ ]=' drivers/usb/serial/safe_serial.c
+ accept '[ ]*\([ ]*0\)*\([ ]*1\)*[\n][ ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]*2[ ]3[ ]4[ ]5[ ]6[ ]7' Documentation/bt8xxgpio.txt
+ initnc '[ ]static[ ]int[ ]exp_lut\[256\][ ]=' drivers/isdn/mISDN/dsp_audio.c
+ initnc 'static[ ]const[ ]u32[ ]bf_pbox\[16[ ][+][ ]2\][ ]=' drivers/isdn/mISDN/dsp_blowfish.c
+ initnc 'static[ ]const[ ]u32[ ]bf_sbox\[256[ ][*][ ]4\][ ]=' drivers/isdn/mISDN/dsp_blowfish.c
+ initnc 'static[ ]u8[ ]sample_\(german_\(all\|old\)\|american_\(dialtone\|ringing\|busy\)\|special[123]\|silence\)\[\][ ]=' drivers/isdn/mISDN/dsp_tones.c
+ initnc 'struct[ ]pattern[ ][{][^}]*int[ ]tone[;][^}]*[}][ ]pattern\[\][ ]=' drivers/isdn/mISDN/dsp_tones.c
+ initnc 'static[ ]u8[ ]\([au]\|_4\)law_to_\([ua]law\|4bit\)\[256\][ ]=' drivers/isdn/mISDN/l1oip_codec.c
+ initnc 'static[ ]unsigned[ ]char[ ]banner_table\[\][ ]=' arch/sh/boards/mach-microdev/led.c
+ defsnc '[ ]static[ ]const[ ]int[ ]desc_idx_table\[\][ ]=' arch/arm/include/asm/hardware/iop3xx-adma.h
+ defsnc 'static[ ]\(const[ ]\)\?u32[ ]ar\(5416\|9280\)\(Modes\(_fast_clock\)\?\|Common\|BB_RfGain\|Bank6\(TPC\)\?\|Addac\)\(_91[06]0\(1_1\)\?\|_9280\(_2\)\?\)\?\[\]\[[236]\][ ]=' drivers/net/wireless/ath9k/initvals.h
+
+ # new in 2.6.28
+ accept '\(static[ ]\)\?const[ ]char[ ]\(inv\)\?parity\[256\][ ]=[ ][{][ \n01,]*[}][;]' 'Documentation/mtd/nand_ecc\.txt\|drivers/mtd/nand/nand_ecc\.c'
+ defsnc 'static[ ]const[ ]char[ ]\(bitsperbyte\|addressbits\)\[256\][ ]=' drivers/mtd/nand/nand_ecc.c
+ defsnc 'static[ ]struct[ ]pinmux_cfg_reg[ ]pinmux_config_regs\[\][ ]=' 'arch/sh/kernel/cpu/sh2a/pinmux-sh7203\.c\|arch/arm/mach-shmobile/pfc-sh73[67]7\.c'
+ defsnc '[ ]static[ ]const[ ]u8[ ]e_keymap\[\][ ]=' drivers/hid/hid-lg.c
+ defsnc 'DEFINE_DEFAULT_PDR[(]0x0161,[ ]256,' drivers/net/wireless/hermes_dld.c
+ defsnc 'static[ ]const[ ]int[ ]isink_cur\[\][ ]=' drivers/regulator/wm8350-regulator.c
+ defsnc 'static[ ]const[ ]s16[ ]\(converge_speed_ipb\?\|LAMBDA_table\[4\]\)\[101\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]u32[ ]addrinctab\[33\]\[2\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]u8[ ]\(default_intra_quant_table\|\(val\|bits\)_[ad]c_\(lu\|chro\)minance\)\[\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]int[ ]zz\[64\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc '[ ]u16[ ]pack\[\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]u8[ ]\(initial\|channel\)_registers\[\][ ]=' 'drivers/staging/go7007/wis-\(ov7640\|saa7113\|tw2804\).c'
+ defsnc 'u16[ ]MTO_One_Exchange_Time_Tbl_[ls]\[MTO_MAX_FRAG_TH_LEVELS\]\[MTO_MAX_DATA_RATE_LEVELS\][ ]=' drivers/staging/winbond/mto.c
+ defsnc 'u32[ ]\(al2230_txvga_data\|w89rf242_txvga_old_mapping\)\[\]\[2\][ ]=' drivers/staging/winbond/reg.c
+ defsnc 'static[ ]const[ ]UINT16[ ]crc16tab\[256\][ ]=' drivers/staging/wlan-ng/hfa384x.c
+ defsnc 'static[ ]const[ ]\(UINT32\|u32\)[ ]wep_crc32_table\[256\][ ]=' drivers/staging/wlan-ng/p80211wep.c
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]=' 'sound/pci/ice1712/\(phase\|aureon\)\.c'
+ defsnc 'static[ ]const[ ]u16[ ]wm8900_reg_defaults\[WM8900_MAXREG\][ ]=' sound/soc/wm8900.c
+ defsnc '[}][ ]\(clk_sys_ratios\|bclk_divs\)\[\][ ]=' 'sound/soc/wm890[34]\.c'
+ defsnc 'static[ ]u8[ ]af9015_ir_table_\(leadtek\|twinhan\|a_link\|msi\|mygictv\|kworld\)\[\][ ]=' drivers/media/dvb/dvb-usb/af9015.h
+ defsnc 'static[ ]struct[ ]snr_table[ ]\(qpsk\|qam\(16\|64\)\)_snr_table\[\][ ]=' drivers/media/dvb/frontends/af9013_priv.h
+ defsnc 'static[ ]struct[ ]regdesc[ ]\(ofsm_init\|tuner_init_\(env77h11d5\|mt2060\(_2\)\?\|mxl500\(3d\|5\)\|qt1010\|mc44s803\|unknown\|tda18271\)\)\[\][ ]=' drivers/media/dvb/frontends/af9013_priv.h
+ defsnc 'static[ ]u8[ ]stv0288_earda_inittab\[\][ ]=' drivers/media/dvb/frontends/eds1547.h
+ defsnc 'static[ ]u8[ ]serit_sp1511lhb_inittab\[\][ ]=' drivers/media/dvb/frontends/si21xx.c
+ defsnc 'static[ ]u8[ ]stv0288_inittab\[\][ ]=' drivers/media/dvb/frontends/stv0288.c
+ defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_b\[\][ ]=' drivers/net/wireless/rt2x00/rt2400pci.c
+
+ # request_firmware matches for 2.6.28
+ accept 'D:[ ]Firmware[ ]loader[ ][(]request_firmware[)]' CREDITS
+ accept 'FIRMWARE[ ]LOADER[ ][(]request_firmware[)]' MAINTAINERS
+ accept '[ ]-[ ]request_firmware[(][)][ ]hotplug[ ]interface[ ]info.' Documentation/00-INDEX
+ accept 'This[ ]driver[ ]requires[ ]a[ ]patch[ ]for[ ]firmware_class[^\n]*[\n]request_firmware_nowait[ ]function\.' Documentation/dell_rbu.txt
+ accept '\([ ]request_firmware[(][)][ ]hotplug[ ]interface:[\n][ ]--*[\n].*[ ]\)\?-[ ]request_firmware_nowait[(][)][ ]is[ ]also[ ]provided[ ]for[ ]convenience' Documentation/firmware_class/README
+ accept 'Still,[ ]there[ ]are[ ]kernel[ ]threads[ ]that[ ]may[ ]want.*For[ ]example,[ ]if[ ]request_.*_firmware[(][)][ ]will[ ]fail[ ]regardless' Documentation/power/freezing-of-tasks.txt
+ accept 'Also,[ ]there[ ]may[ ]be[ ]some[ ]operations,.*calling[ ]request_firmware[(][)][ ]from[ ]their[ ].resume[(][)][ ]routines' Documentation/power/notifiers.txt
+ accept 'There[ ]is[ ]an[ ]USB[ ]interface[ ]for[ ]downloading[/]uploading.*request_firmware[ ]interface\.' Documentation/video4linux/si470x.txt
+ accept '[ ]-[ ]move[ ]firmware[ ]loading[ ]to[ ]request_firmware[(][)]' drivers/staging/slicoss/README
+ accept 'config[ ]FIRMWARE_IN_KERNEL.*let[ ]firmware[ ]be[ ]loaded[ ]from[ ]userspace\.' drivers/base/Kconfig
+ accept '[ ]*and[ ]request_firmware[(][)][ ]in[ ]the[ ]source' drivers/base/Kconfig
+ accept 'static[ ]int[\n]_request_firmware[(]const[ ]struct[ ]firmware[ ][*][*]firmware_p,[ ]const[ ]char[ ][*]name,[^{]*[\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}][\n]' drivers/base/firmware_class.c
+ accept 'static[ ]int[\n]request_firmware_work_func[(]void[ ][*]arg[)][\n][{]\([\n]\+[^\n}][^\n]*\)*ret[ ]=[ ]_request_firmware[(][^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}][\n]' drivers/base/firmware_class.c
+ accept '[/][*][*][\n][ ][*][ ]request_firmware:[ ]-[ ]send[ ]firmware[ ][^{]*[\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}][\n]' drivers/base/firmware_class.c
+ accept '[/][*][*][\n][ ][*][ ]request_firmware_nowait\(:\|[ ]-\)[ ]asynchronous[ ]version[^{]*[\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}][\n]' drivers/base/firmware_class.c
+ accept 'EXPORT_SYMBOL[(]request_firmware\(_nowait\)\?[)][;]' drivers/base/firmware_class.c
+ accept 'int[ ]request_firmware\(_nowait\)\?[(][^;]*[)][;]' include/linux/firmware.h
+ accept 'static[ ]inline[ ]int[ ]request_firmware\(_nowait\)\?[(][^{]*[)][\n][{][\n][ ]return[ ]-EINVAL[;][\n][}]' include/linux/firmware.h
+ accept 'static[ ]inline[ ]int[\n]\(maybe_\)\?reject_firmware\(_nowait\)\?[(][^{;]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' include/linux/firmware.h
+
+ accept 'static[ ]inline[ ]int[ ]request_ihex_firmware\?[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}][\n]' include/linux/ihex.h
+ ocomment '[/][*][ ]Optional[ ]firmware\([^\n]*[\n][ ][*]\)*[^\n]*[ ]MODULE_FIRMWARE[(][)]'
+ oprepline '#define[ ]MODULE_FIRMWARE[(]_firmware[)]' include/linux/module.h
+ accept '[ ][*][ ]Sample[ ]code[ ]on[ ]how[ ]to[ ]use[ ]request_firmware[(][)][ ]from[ ]drivers\.' samples/firmware_class/firmware_sample_driver.c
+ accept '[ ]\(retval\|error\)[ ]=[ ]request_firmware\(_nowait\)\?[(][^;]*["]sample_driver_fw["],[^;]*[)][;]' samples/firmware_class/firmware_sample_driver.c
+ ocomment '[ ][/][*][ ]request_firmware[ ]blocks[ ]until[ ]userspace[ ]finished' samples/firmware_class/firmware_sample_driver.c
+ accept '[ ][ ][ ]*["][ ]request_firmware_nowait[ ]failed' samples/firmware_class/firmware_sample_driver.c
+
+ # We used to remove these in early versions of Linux-libre.
+ # They're now believed to be mere initialization data, rather than
+ # code disguised as such, and they're not long enough so as to
+ # render the software non-Free.
+ defsnc 'static[ ]u8[ ]tda10021_inittab\[0x40\]=' drivers/media/dvb/frontends/tda10021.c
+ defsnc 'static[ ]u8[ ]tda8083_init_tab[ ]\[\][ ]=' drivers/media/dvb/frontends/tda8083.c
+ defsnc 'static[ ]u8[ ]ves1820_inittab\[\][ ]=' drivers/media/dvb/frontends/ves1820.c
+ defsnc 'static[ ]u8[ ]init_1[89]93_w\?tab[ ]\?\[\][ ]=' drivers/media/dvb/frontends/ves1x93.c
+ defsnc 'static[ ]const[ ]u8[ ]saa7113_tab\[\][ ]=' drivers/media/dvb/ttpci/budget-av.c
+ defsnc 'static[ ]u8[ ]philips_sd1878_inittab\[\][ ]=' drivers/media/dvb/ttpci/budget-av.c
+ defsnc 'const[ ]struct[ ]Kiara_table_entry[ ]Kiara_table\[PSZ_MAX\]\[6\]\[4\][ ]=' drivers/media/video/pwc/pwc-kiara.c
+ defsnc 'const[ ]unsigned[ ]int[ ]KiaraRomTable[ ]\[8\]\[2\]\[16\]\[8\][ ]=' drivers/media/video/pwc/pwc-kiara.c
+ defsnc 'const[ ]struct[ ]Timon_table_entry[ ]Timon_table\[PSZ_MAX\]\[PWC_FPS_MAX_TIMON\]\[4\][ ]=' drivers/media/video/pwc/pwc-timon.c
+ defsnc 'const[ ]unsigned[ ]int[ ]TimonRomTable[ ]\[16\]\[2\]\[16\]\[8\][ ]=' drivers/media/video/pwc/pwc-timon.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]struct_initData[ ]initData\[\][ ]=' drivers/media/video/usbvideo/ibmcam.c
+ defsnc 'static[ ]const[ ]u8[ ]rtl8187b_reg_table\[\]\[3\][ ]=' drivers/net/wireless/rtl8187_dev.c
+ defsnc 'unsigned[ ]char[ ]\(IDX_ACTIVATE_\(READ\|WRITE\)\|\(CM\|ULP\)_\(ENABLE\|SETUP\)\|DM_ACT\|IPA_PDU_HEADER\|\(READ\|WRITE\)_CCW\)\[\][ ]=' drivers/net/qeth_core_mpc.c
+ defsnc 'static[ ]unsigned[ ]char[ ]camera_ncm03j_magic\[\][ ]=' 'arch/sh/boards/\(board-ap325rxa\.c\|mach-ap325rxa/setup\.c\)'
+ defsnc 'static[ ]const[ ]unsigned[ ]short[ ]\(sync\|magic[0-3]\)_data\[\][ ]=' arch/sh/boards/mach-migor/lcd_qvga.c
+ defsnc 'static[ ]unsigned[ ]char[ ]camera_ov772x_magic\[\][ ]=' arch/sh/boards/mach-migor/setup.c
+ defsnc 'static[ ]struct[ ]chips_init_reg[ ]chips_init_[sgacfx]r\[\][ ]=' 'drivers/video/\(asiliant\|chips\)fb.c'
+
+ # This one is quite suspicious, but it's small enough (64 bytes
+ # total) that it's believable that it could be actual source code.
+ defsnc 'static[ ]const[ ]__u8[ ]cx11646_fw1\[\]\[3\][ ]=' drivers/media/video/gspca/conex.c
+
+ # Hunting down non-Free firmware-loading code and instructions.
+ # Firmware names are to be caught anywhere.
+
+ # 2.6.26 but not later
+
+ blobname 'atmsar1[12]\.\(x\|start\|regions\|data\|bin[12]\?\)' 'drivers/atm/\(Makefile\|ambassador\.c\)'
+ blob '#\(define\|include\)[ ]UCODE2\?[(][^\n]*' drivers/atm/ambassador.c
+ blob 'static[ ]\(u32\|region\)[ ]__devinitdata[ ]ucode_\(start\|\(regions\|data\)\[\]\)[ ]=[^;]*[;]' drivers/atm/ambassador.c
+ blob '\(#\(ifdef[ ]AMB_NEW_MICROCODE\|else\|endif\)[\n]#\(define\|include\)[ ]UCODE2\?[(][^\n]*[\n]\)\+\([\n]*static[ ]\(u32\|region\)[ ]__devinitdata[ ]ucode_\(start\|\(regions\|data\)\[\]\)[ ]=[^;]*[;]\)*' drivers/atm/ambassador.c
+
+ blobname '\(pca\|sba\)200e\(_ecd\)\?\.\(data\|bin[12]\?\)' 'drivers/atm/\(Makefile\|fore200e\(_mkfirm\)\?\.c\)'
+ blobna '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*PCA-200E[ ]firmware[ ][*][/]' drivers/atm/fore200e_mkfirm.c
+ blobna '_fore200e_\(pca\|sba\)_fw_\(data\|size\)' drivers/atm/fore200e.c
+ blob '#ifdef[ ]CONFIG_ATM_FORE200E_\(PCA\|SBA\)\([\n]extern[ ]const[ ]unsigned[ ]\(char\|int\)[ ]*_fore200e_\(pca\|sba\)_fw_\(data\[\]\|size\)[;]\)\+[\n]#endif\([\n]\+#ifdef[ ]CONFIG_ATM_FORE200E_\(PCA\|SBA\)\([\n]extern[ ]const[ ]unsigned[ ]\(char\|int\)[ ]*_fore200e_\(pca\|sba\)_fw_\(data\[\]\|size\)[;]\)\+[\n]#endif\)*' drivers/atm/fore200e.c
+
+ # 2.6.27 but not later
+
+ blob 'cas_saturn_patch_t[ ]cas_saturn_patch\[\][ ]=[ ][{][^;]*[}][;]' drivers/net/cassini.h
+ accept '[ ][ ][ ]firmware[ ]files[ ]--[ ]the[ ]same[ ]names[ ]which[ ]appear[ ]in[ ]MODULE_FIRMWARE[(][)]' drivers/base/Kconfig
+
+ # 2.6.28 or earlier
+
+ blobname 'atmsar11\.fw' drivers/atm/ambassador.c
+
+ blob '\(#ifdef[ ]__\(LITTLE\|BIG\)_ENDIAN[\n]\)\?#define[ ]FW_EXT[ ]["]\(_ecd\)\?\.bin2\?["]\([\n]#else[\n]#define[ ]FW_EXT[ ]["]\(_ecd\)\?\.bin2\?["]\)*\([\n]#endif\)\?' drivers/atm/fore200e.c
+ blobna 'sprintf[(][^;]*fore200[^;]*FW_EXT[^;]*[)][;]' drivers/atm/fore200e.c
+ blobname '\(pc\|sb\)a200e\(_ecd\)\?\.bin[12]\?' drivers/atm/fore200e.c
+ blobna 'The[ ]supplied[ ]firmware[ ]images.*fore.*Rebuild[ ]and[ ]re-install[^.]*\.' Documentation/networking/fore200e.txt
+
+ blobname 'intelliport2\.bin' drivers/char/ip2/ip2main.c
+
+ blob 'static[ ]unsigned[ ]char[ ]warp_g[24]00_t2\?gzs\?a\?f\?\[\][ ]=[ ][{][^{};]*[}][;]\([\n][\n]*static[ ]unsigned[ ]char[ ]warp_g[24]00_t2\?gzs\?a\?f\?\[\][ ]=[ ][{][^{};]*[}][;]\)*' drivers/gpu/drm/mga/mga_ucode.h
+ blob '\(#define[ ]WARP_UCODE_\(SIZE\|INSTALL\)[(][ ]*which\([^\n]*\\[ ]*[\n]\)*[^\n]*\|static[ ]const[ ]unsigned[ ]int[ ]mga_warp_g[24]00_microcode_size[ ]=[^;]*[;]\|static[ ]int[ ]mga_warp_install_g[24]00_microcode[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]\)\([\n][\n]*\(#define[ ]WARP_UCODE_\(SIZE\|INSTALL\)[(][ ]*which\([^\n]*\\[ ]*[\n]\)*[^\n]*\|static[ ]const[ ]unsigned[ ]int[ ]mga_warp_g[24]00_microcode_size[ ]=[^;]*[;]\|static[ ]int[ ]mga_warp_install_g[24]00_microcode[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]\)\)*' drivers/gpu/drm/mga/mga_warp.c
+ blobna '\(case[ ]MGA_CARD_TYPE_G[^:]*:[ \n]*\)\+return[ ][^;]*mga_warp[^;]*microcode[^;]*[;]\([ \n]*\(case[ ]MGA_CARD_TYPE_G[^:]*:[ \n]*\)\+return[ ][^;]*mga_warp[^;]*microcode[^;]*[;][ ]*\)*' drivers/gpu/drm/mga/mga_warp.c
+
+ blob 'static[ ]u32[ ]r128_cce_microcode\[\][ ]=[ ][{][^;]*[}][;]' drivers/gpu/drm/r128/r128_cce.c
+ blob 'static[ ]void[ ]r128_cce_load_microcode[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' drivers/gpu/drm/r128/r128_cce.c
+ # blobna 'R128_WRITE[(]R128_PM4_MICROCODE_DATA[HL],[\n ]*r128_cce_microcode\[i[ ][*][ ]2\([ ][+][ ]1\)\?\][)]\([;][\n ]*R128_WRITE[(]R128_PM4_MICROCODE_DATA[HL],[\n ]*r128_cce_microcode\[i[ ][*][ ]2\([ ][+][ ]1\)\?\][)]\)*' drivers/gpu/drm/r128/r128_cce.c
+
+ blob 'static[ ]const[ ]u32[ ]R[SV0-9]*[05]_\(c\|pf\)p_microcode\[\]\(\[[23]\]\)\?[ ]=[ ][{][^;]*[}][;]\([\n][\n]*static[ ]const[ ]u32[ ]R[SV0-9]*[05]_\(c\|pf\)p_microcode\[\]\(\[[23]\]\)\?[ ]=[ ][{][^;]*[}][;]\)*' 'drivers/gpu/drm/radeon/\(radeon\|r600\)_microcode\.h'
+ blob 'static[ ]void[ ]r\(adeon\|[167]00\)_cp_load_microcode[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*cp_microcode[^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' 'drivers/gpu/drm/radeon/r\(\(adeon\|600\)_cp\|100\)\.c'
+ # blobna 'RADEON_WRITE[(]R\(ADEON\|600\)_CP_\(ME_RAM\|PFP_UCODE\)_DATA[HL]\?,[\n ]*R[SV0-9]*[05]_\(c\|pf\)p_microcode\[i\]\(\[[012]\]\)\?[)]\([;][\n ]*RADEON_WRITE[(]R\(ADEON\|600\)_CP_\(ME_RAM\|PFP_UCODE\)_DATA[HL]\?,[\n ]*R[SV0-9]*[05]_\(c\|pf\)p_microcode\[i\]\(\[[012]\]\)\?[)]\)*' 'drivers/gpu/drm/radeon/\(radeon\|r600\)_cp\.c'
+
+ blob 'sub[ ]\(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|cx\(23\(1xx\|885\)\|18\)\|pvrusb2\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\|mpc718\|af9015\|ngene\)[ ]*[{]\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]\([\n]\+sub[ ]\(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|cx\(23\(1xx\|885\)\|18\)\|pvrusb2\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\|mpc718\|af9015\|ngene\)[ ]*[{]\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]\)*' Documentation/dvb/get_dvb_firmware
+ blobna 'Please[ ]use[^\n]*firmware[^\n]*sp887x[^\n]*\([\n][^\n]\+\)\+' Documentation/dvb/avermedia.txt
+ blob 'To[ ]extract[ ]the[ ]firmware[^\n]*Opera[ ]DVB-S1[ ]USB-Box.*[/]lib[/]firmware[/][ ]\.' Documentation/dvb/opera-firmware.txt
+ blobname '\(dvb-usb-opera[^\n]*\.fw\|2830S[^\n]*2\.sys\)' Documentation/dvb/opera-firmware.txt
+ blob 'Getting[ ]the[ ]Firmware\([\n][^\n]\+\)*' Documentation/dvb/ttusb-dec.txt
+
+ blob '[/][*][\n ]*File[ ]automatically[ ]generated[ ]by[ ]createinit\.py[ ]using[ ]data[\n ]*extracted[ ]from[ ]AF05BDA\.sys.*[}][;]' drivers/media/dvb/dvb-usb/af9005-script.h
+ blob '#include[ ]["]af9005-script\.h["]' drivers/media/dvb/dvb-usb/af9005-fe.c
+ blobna '[\n][ ]scriptlen[ ]=[ ]sizeof[(]script[)][^;]*[;][\n][ ]for[^{]*scriptlen[^{]*[{][^}]*[^\n }]' drivers/media/dvb/dvb-usb/af9005-fe.c
+
+ accept 'struct[ ]\(sp8870\|tda1004x\)_config[\n][{][^}]*[(][*]request_firmware[)][^}]*[\n][}][;]' 'drivers/media/dvb/frontends/\(sp8870\|tda1004x\)\.h'
+ blob '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*get_dvb_firmware[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\([\n]\(#define[ ]\(\([^\n ]*_DEFAULT\|NONFREE\)_FIRMWARE\|["][^"]*["]\)[ ]\([^\n]\|[\\][\n]\)*\|[/][*][(]DEBLOBBED[)][*][/]\)\)*' 'drivers/media/dvb/frontends/\(nxt200x\|or51211\|sp887[0x]\|tda1004[8x]\)\.c'
+ blobname 'dvb-fe-sp8870\.fw' drivers/media/dvb/frontends/sp8870.c
+ blobname 'dvb-fe-tda1004[56]\.fw' drivers/media/dvb/frontends/tda1004x.c
+
+ # This bootcode is actually Free Software under GPLv2, but since it's
+ # being distributed without source code, we're taking it out.
+ blob 'static[ ]u8[ ]bootcode\[\][ ]=[ ][{][^}]*[}][;]' drivers/media/dvb/ttpci/av7110_hw.c
+ blobname 'dvb-ttpci-01\.fw' drivers/media/dvb/ttpci/av7110.c
+ defsnc 'static[ ]u8[ ]nexusca_stv0297_inittab\[\][ ]=' drivers/media/dvb/ttpci/av7110.c
+
+ defsnc 'static[ ]u8[ ]philips_su1278_tt_inittab\[\][ ]=' drivers/media/dvb/ttpci/budget-ci.c
+ defsnc 'static[ ]u8[ ]dvbc_philips_tdm1316l_inittab\[\][ ]=' drivers/media/dvb/ttpci/budget-ci.c
+
+ blobname 'ttusb-budget[/]dspbootcode\.bin' drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+
+ blobname 'cpia2[/]stv0672_vp4\.bin' drivers/media/video/cpia2/cpia2_core.c
+
+ blobname 'dabusb[/]\(firmware\.fw\|bitstream\.bin\)' drivers/media/video/dabusb.c
+
+ blob 'static[ ]u32[ ]tigon2\?Fw\(Text\|Rodata\|Data\)\[[(]MAX_\(TEXT\|RODATA\|DATA\)_LEN[/]4[)][ ][+][ ]1\][ ]__devinitdata[ ]=[ ][{][^}]*[}][;]\([\n]static[ ]u32[ ]tigon2\?Fw\(Text\|Rodata\|Data\)\[[(]MAX_\(TEXT\|RODATA\|DATA\)_LEN[/]4[)][ ][+][ ]1\][ ]__devinitdata[ ]=[ ][{][^}]*[}][;]\)*' drivers/net/acenic_firwmare.h
+ blob '#define[ ]tigon2\?Fw[^ ]*\(Addr\|Len\)[ ]0x[^\n]*\([\n]#define[ ]tigon2\?Fw[^ ]*\(Addr\|Len\)[ ]0x[^\n]*\)\+' drivers/net/acenic_firmware.h
+ blob '\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Do[ ]not[ ]try[ ]to[ ]clear[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n][ ]\)\?ace_clear[^;]*[;][\n]\([^}]*[{][^}]*ace_copy[^}]*tigon2\?Fw[^}]*[}]\)*[\n]\+[ ]return[ ]0[;][\n][}]' drivers/net/acenic.c
+ blob 'if[ ][(]\(ACE_IS_TIGON_I[(]ap[)]\|ap->version[ ]==[ ]2\)[)][\n][ ][ ]writel[(]tigon2\?FwStartAddr,[ ][&]regs->Pc[)][;]\([\n][ ]if[ ][(]\(ACE_IS_TIGON_I[(]ap[)]\|ap->version[ ]==[ ]2\)[)][\n][ ][ ]writel[(]tigon2\?FwStartAddr,[ ][&]regs->Pc[)][;]\)*' drivers/net/acenic.c
+
+ blob '#include[ ]["]starfire_firmware\.h["]' drivers/net/starfire.c
+ blob '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Load[ ]Rx[/]Tx[ ]firmware[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\([\n][ ]for[ ][(][^)]*FIRMWARE_[RT]X_SIZE[^)]*[)][\n][ ][ ]writel[^;]*firmware_[rt]x[^;]*[;]\)\+' drivers/net/starfire.c
+
+ blob 'static[ ]\(u8\|const[ ]u32\|struct[ ]fw_info\)[ ]bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)*[ ]=[ ][{][^}]*[}][;]\([\n][\n]*static[ ]\(u8\|const[ ]u32\|struct[ ]fw_info\)[ ]bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)*[ ]=[ ][{][^}]*[}][;]\)*' 'drivers/net/bnx2_fw2\?.h'
+ blob '#include[ ]["]bnx2_fw\.h["][\n][\n]*#include[ ]["]bnx2_fw2\.h["]' drivers/net/bnx2.c
+ blob 'static[ ]void[\n]load_rv2p_fw[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' drivers/net/bnx2.c
+ blob 'static[ ]int[\n]bnx2_init_cpus[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' drivers/net/bnx2.c
+
+ # init_data_e1h? might actually be just data, but it doesn't
+ # really matter.
+ blob 'static[ ]const[ ]u32[ ]\(init\?\|[tucx]sem_\(int_table\|pram\)\)_data_e1h\?\[\][ ]=[ ][{][^}]*[}][;]\([\n][\n]*static[ ]const[ ]u32[ ]\(init\?\|[tucx]sem_\(int_table\|pram\)\)_data_e1h\?\[\][ ]=[ ][{][^}]*[}][;]\)*' drivers/net/bnx2x_init_values.h
+ blob 'static[ ]\(void[ ]\|const[ ]u32[ ][*]\)bnx2x_\(sel_blob\|init_wr_wb\|init_block\)[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]\([\n][\n]*static[ ]\(void[ ]\|const[ ]u32[ ][*]\)bnx2x_\(sel_blob\|init_wr_wb\|init_block\)[(][^{]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]\)*' 'drivers/net/bnx2x_init\(_ops\)\?\.h'
+
+ blobname 'sun[/]cassini\.bin' drivers/net/cassini.c
+
+ blobna 'static[ ]u16[ ]\(sr\|twinax\)_edc\[\][ ]=[ ][{][^;]*[}][;]' drivers/net/cxgb3/ael1002.c
+ blobna 'for[ ][(][^\n]*ARRAY_SIZE[(]\(sr\|twinax\)_edc[)][^\n]*[)][\n][^;]*mdio_write[^;]*[;]' drivers/net/cxgb3/ael1002.c
+ blobname '\(cxgb3[/]\)\?t3\(fw\|\(%c\|.\)_p\(rotocol_\)\?sram\)-\(%d\|[0-9]*\)\.\(%d\|[0-9]*\)\.\(%d\|[0-9]*\)\.bin' drivers/net/cxgb3/cxgb3_main.c
+
+ blob '\([/][*][*]\+[/][\n]*\)*\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Micro[ ]code[^*]*\([*]\+[^/*][^*]*\)*[*]*8086:[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\([\n]*[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)*\|#define[ ][ ]*D10\(1M\(_B\)\?\|1S\|2_E\)_\(CPUSAVER_\(TIMER\|BUNDLE\|MIN_SIZE\)_DWORD\|RCVBUNDLE_UCODE\)[ ][^\n]*\([\\][\n][^\n]*\)*\)\([\n]*[/][*][^*]*\([*]\+\([^/*]\|[/][\n]*[/][*]\+\)[^*]*\)*[*]*Micro[ ]code[^*]*\([*]\+[^/*][^*]*\)*[*]*8086:[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\([\n]*[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)*\|[\n][\n]*#define[ ][ ]*D10\(1M\(_B\)\?\|1S\|2_E\)_\(CPUSAVER_\(TIMER\|BUNDLE\|MIN_SIZE\)_DWORD\|RCVBUNDLE_UCODE\)[ ]\(\\[\n]\|[^\n]\)*\)*' drivers/net/e100.c
+ blobna '\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n]*[ ][ ]\)\(ucode\[opts->\(timer\|bundle\|min_size\)_dword\][ ].=[ ][^;]*[;][\n][\n]*[ ][ ]\)*[^}]*UCODE_SIZE[^}]*cb_ucode[^}]*return[;][\n][ ][}]' drivers/net/e100.c
+
+ blob 'static[ ]unsigned[ ]char[ ]__devinitdata[ ]lanai4_\(code\|data\)\[[0-9]*\][ ]=[ ][{][^;]*[}][;]' drivers/net/myri_code.h
+ blob '#include[ ]["]myri_code\.h["]' drivers/net/myri_sbus.c
+ blobna '\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n ]*\)\?for[ ][(][^\n]*sizeof[(]lanai4_\(code\|data\)[^\n]*[)][\n][^\n]*sbus_writeb[^;]*lanai4_\(code\|data\)[^;]*lanai4_code_off[^;]*[;]\([\n ]*\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n ]*\)\?for[ ][(][^\n]*sizeof[(]lanai4_\(code\|data\)[^\n]*[)][\n][^\n]*sbus_writeb[^;]*lanai4_\(code\|data\)[^;]*lanai4_\(code\|data\)_off[^;]*[;]\)*' drivers/net/myri_sbus.c
+
+ blob 'static[ ]u32[ ]s_firmLoad\[\][ ]=[ ][{][^;]*[}][;]' drivers/net/tehuti_fw.h
+ blobna 'bdx_tx_push_desc_safe[^;]*s_firmLoad[^;]*[;]' drivers/net/tehuti.c
+ blobna 'for[ ][(][^\n]*ARRAY_SIZE[(]s_firmLoad[)][^\n]*[)][\n ]*s_firmLoad[^;]*=[^;]*s_firmLoad[^;]*[;]' drivers/net/tehuti.c
+
+ blob '[ ][*][ ]Firmware[ ]is:[\n][ ][*][ ]Derived[ ]from[ ]proprietary[^/]*notice[ ]is[ ]accompanying[ ]it\.[\n][ ][*][/]' drivers/net/tg3.c
+ blobna 'Derived[ ]from[ ]proprietary[ ]unpublished[ ]source[ ]code' drivers/net/tg3.c
+ blob '\(static[ ]const[ ]\)\?u32[ ]tg3\(Tso5\?\)\?Fw\(Text\|Rodata\|Data\)\[[^{]*\][ ]=[ ][{][^}]*[}][;]\([\n][\n]*\(static[ ]const[ ]u32[ ]tg3\(Tso5\?\)\?Fw\(Text\|Rodata\|Data\)\[[^{]*\][ ]=[ ][{][^}]*[}][;]\|#if[ ]0\([ ][/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)\?[\n]\(static[ ]const[ ]\)\?u32[ ]tg3\(Tso5\?\)\?Fw\(Text\|Rodata\|Data\)\[[^{]*\][ ]=[ ][{][^}]*[}][;][\n]#endif\)\)*' drivers/net/tg3.c
+
+ blob 'static[ ]const[ ]u8[ ]typhoon_firmware_image\[\][ ]=[ ][{][^}]*[}][;]' drivers/net/typhoon-firmware.h
+
+ blobna 'licensed[^\n]*strictly[ ]for[ ]use[^\n]*[\n]*[^\n]*COPS[ ]LocalTalk' 'drivers/net/appletalk/cops_\(ff\|lt\)drv\.h'
+ blob 'static[ ]const[ ]unsigned[ ]char[ ]ffdrv_code\[\][ ]=[ ][{][^}]*[}][;]' drivers/net/appletalk/cops_ffdrv.h
+ blob 'static[ ]const[ ]unsgined[ ]char[ ]ltdrv_code\[\][ ]=[ ][{][^}]*[}][;]' drivers/net/appletalk/cops_ltdrv.h
+ blob '#include[ ]["]cops_\(lt\|ff\)drv\.h["][ ]*\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Firmware[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)\?\([\n][\n]*#include[ ]["]cops_\(lt\|ff\)drv\.h["][ ]*\([/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Firmware[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)\?\)*' drivers/net/appletalk/cops.c
+
+ blob 'static[ ]unsigned[ ]char[ ]bits_1200\[\][ ]*=[ ][{][^}]*[}][;]' drivers/net/hamradio/yam1200.h
+ blob 'static[ ]unsigned[ ]char[ ]bits_9600\[\][ ]*=[ ][{][^}]*[}][;]' drivers/net/hamradio/yam9600.h
+ blob '#include[ ]["]yam\(96\|12\)00\.h["]\([\n][\n]*#include[ ]["]yam\(96\|12\)00\.h["]\)*' drivers/net/hamradio/yam.c
+
+ blobna 'static[ ]const[ ]u_char[ ]__Xilinx7OD\[\][ ]=[ ][{][^}]*[}][;]' drivers/net/pcmcia/ositech.h
+ blob '#include[ ]["]ositech\.h["]' drivers/net/pcmcia/smc91c92_cs.c
+ blobna '\([/][*][ ]Download[ ]the[ ]Seven[ ]of[ ]Diamonds[ ]firmware[^/]*[*][/][\n ]*\)\?for[ ]*[(][^\n]*__Xilinx7OD[^{}]*[{][\n][ ]*outb[ ]*[(]__Xilinx7OD[^}]*[}]' drivers/net/pcmcia/smc91c92_cs.c
+
+ blob 'static[ ]const[ ]u8[ ]microcode\[\][ ]=[ ][{][^}]*[}][ ]*[;]' drivers/net/tokenring/3c359_microcode.h
+ blob '#include[ ]["]3c359_microcode\.h["]' drivers/net/tokenring/3c359.c
+ blobna 'start[ ]=[ ][(]0xFFFF[ ]-[ ][(]mc_size[)][^;]*[;][\n ]*[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n ]*printk[(]KERN_INFO[ ]["]3C359:[ ]Uploading[ ]Microcode:[ ]["][)][;][\n ]*for[ ][(][^{]*\(mc_size[^{]*[)][ ][{][^}]*writeb[(]microcode\[\|[)][ ][{][^}]*writeb[(]microcode\[mc_size\)[^}]*[}]\([\n][ ]*printk[^\n]*[;][\n ]*for[ ][(][^{]*\(mc_size[^{]*[)][ ][{][^}]*writeb[(]microcode\[\|[)][ ][{][^}]*writeb[(]microcode\[mc_size\)[^}]*[}]\)*' drivers/net/tokenring/3c359.c
+
+ blobname 'tr_smctr\.bin' drivers/net/tokenring/smctr.c
+
+ blobname 'kaweth[/]\(new\|trigger\)_code\(_fix\)\?\.bin' drivers/net/usb/kaweth.c
+
+
+ blobname '\(agere\|prism\)_\(sta\|ap\)_fw\.bin' 'drivers/net/wireless/\(orinico/\)\?\(orinoco\|fw\)\.c'
+ blobname 'symbol_sp24t_\(prim\|sec\)_fw' 'drivers/net/wireless/\(\(orinico/\)\?orinoco\.c\|spectrum_cs\.c\)'
+
+ blob 'unsigned[ ]short[ ]sbus_risc_code01\[\][ ]__devinitdata[ ]=[ ][{][^}]*[}][;]' drivers/scsi/qlogicpti_asm.c
+ blob '#include[ ]["]qlogicpti_asm\.c["]' drivers/scsi/qlogicpti.c
+
+ blob '\([/][*][ ]Microcode[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n]*\)\?static[ ]\(u\(nsigned[ ]\)\?char\|unsigned[ ]short\|ADV_DCNT\)[ ]_\(asc_mcode\|adv_asc3\(550\|8C\(08\|16\)00\)\)_\(buf\[\][ ]=[ ][{][^}]*[}]\|size[ ]=[ ]sizeof[^;]*\|chksum[ ]=[ ]0x[^;]*\)[;]\([ ]*[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)\?\([\n][\n]*\([/][*][ ]Microcode[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/][\n]*\)\?static[ ]\(u\(nsigned[ ]\)\?char\|unsigned[ ]short\|ADV_DCNT\)[ ]_\(asc_mcode\|adv_asc3\(550\|8C\(08\|16\)00\)\)_\(buf\[\][ ]=[ ][{][^}]*[}]\|size[ ]=[ ]sizeof[^;]*\|chksum[ ]=[ ]0x[^;]*\)[;]\([ ]*[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]\)\?\)*' drivers/scsi/advansys.c
+
+ blob '\(#ifdef[ ]UNIQUE_FW_NAME[\n]\)\?static[ ]unsigned[ ]short[ ]\(risc\|fw12\(80e\|160\)i\)_code01\[\][ ]=[ ][{]\([\n]#else[\n]static[ ]unsigned[ ]short[ ]risc_code01\[\][ ]=[ ][{][\n]#endif[\n]\)\?[^}]*[}][;]\([\n][\n]*\(#ifdef[ ]UNIQUE_FW_NAME[\n]\)\?static[ ]unsigned[ ]short[ ]\(risc_code\|fw12\(80e\|160\)i\)_length01[ ]=[ ][^;]*[;]\([\n]#else[\n]static[ ]unsigned[ ]short[ ]risc_code_length01[ ]=[ ][^;]*[;][\n]#endif\)\?\)\?' 'drivers/scsi/ql1\(04\|2\(8\|16\)\)0_fw\.h'
+
+ blobname 'emi26[/]\(bitstream\|firmware\|loader\)\.fw' drivers/usb/misc/emi26.c
+
+ blobname 'emi62[/]\(bitstream\|midi\|spdif\|loader\)\.fw' drivers/usb/misc/emi62.c
+
+ blobname 'keyspan[/]\(mpr\|usa\(18x\|19\(q[iw]\|w\)\?\|28\(x\(a\|b\)\?\)\?\|49w\(lc\)\?\)\)\.fw' drivers/usb/serial/keyspan.c
+
+ accept '[ ][ ]fw_name[ ]=[ ]["]keyspan_pda[/]\(keyspan_pda\|xircom_pgs\)\.fw["][;]' drivers/usb/serial/keyspan_pda.c
+ blobna 'fw_name[ ]=[ ][^\n]*\([\n]\+[^\n}][^\n]*\)*\([/][*]KEYSPAN_PDA[*][/]\)\?request_ihex_firmware' drivers/usb/serial/keyspan_pda.c
+ accept '[ ]if[ ][(][/][*]KEYSPAN_PDA[*][/]request_ihex_firmware' drivers/usb/serial/keyspan_pda.c
+
+ blobname 'edgeport[/]\(boot\|down\)2\?\.fw' drivers/usb/serial/io_edgeport.c
+ blobname 'edgeport[/]down3\.bin' drivers/usb/serial/io_ti.c
+
+ blobname 'ti_\(usb-\)\?\(%d\|3410\|5052\)\.\(fw\|bin\)' drivers/usb/serial/ti_usb_3410_5052.c
+
+ blobname 'whiteheat\(_loader\(_debug\)\?\)\?\.fw' drivers/usb/serial/whiteheat.c
+
+ blob 'static[ ]struct[ ]BA1struct[ ]BA1Struct[ ]=[ ][{][^;]*[}][;]' sound/pci/cs46xx/cs46xx_image.h
+
+ blob 'static[ ]u32[ ]cwc\(4630\|async\|snoop\)_\(code\|parameter\)\[\][ ]=[ ][{][^;]*[}][;]' 'sound/pci/cs46xx/imgs/cwc\(4630\|async\|snoop\)\.h'
+ # cwcbinhack appears to have been created by hand.
+ # cwcdma has sources (not verified) in cwcdma.asp.
+ accept 'static[ ]u32[ ]cwc\(binhack\|dma\)_code\[\][ ]=[ ][{][^;]*[}][;]' 'sound/pci/cs46xx/imgs/cwc\(binhack\|dma\)\.h'
+ blob '#include[ ]["]\(cs46xx_image\|imgs[/]cwc\(4630\|async\|snoop\)\)\.h["]\([\n][\n]*#include[ ]["]\(cs46xx_image\|imgs[/]cwc\(4630\|async\|snoop\)\)\.h["]\)*' sound/pci/cs46xx/cs46xx_lib.c
+
+ blobname 'korg[/]k1212\.dsp' sound/pci/korg1212/korg1212.c
+
+ blobname 'ess[/]maestro3_assp_\(kernel\|minisrc\)\.fw' sound/pci/maestro3.c
+
+ blobname 'yamaha[/]ds1e\?_\(ctrl\|dsp\)\.fw' sound/pci/ymfpci/ymfpci_main.c
+
+ blobname 'sb16[/]\(\(a\|mu\)law_main\|ima_adpcm_\(init\|capture\|playback\)\)\.csp' sound/isa/sb/sb16_dsp.c
+
+ blob 'static[ ]const[ ]struct[ ][{][^}]*[}][ ]yss225_registers\[\][ ]__devinitdata[ ]=[ ][{][^;]*[}][;]' sound/isa/wavefront/yss225.c
+ blobname 'yamaha[/]yss225_registers\.bin' sound/isa/wavefront/wavefront_fx.c
+ blobna 'firmware[ ]=[ ][&]yss225_registers_firmware[;]' sound/isa/wavefront/wavefront_fx.c
+ blob 'static[ ]const[ ]struct[ ]firmware[ ]yss225_registers_firmware[ ]=[ ][{][^;]*[}][;]' sound/isa/wavefront/wavefront_fx.c
+ blobna '\(ospath[ ]*-[ ]Pathname[^\n]*ICS2115[^-]*wavefront\.os\|Note:[ ]the[ ]firmware[ ]file[ ]["]wavefront\.os["]\)[^-]*[/]lib[/]firmware\.\([^.]*after[ ]upgrading[ ]the[ ]kernel\)\?' Documentation/sound/alsa/ALSA-Configuration.txt
+ blobname 'wavefront\.os' sound/isa/wavefront/wavefront_synth.c
+
+ blobna 'and[\n]require[ ]the[ ]use[ ]of[^\n]*propr\?ietary[^:]*' Documentation/arm/IXP4xx
+ blob 'If[ ]you[ ]need[ ]to[ ]use[ ]any[ ]of[ ]the[ ]above[^\n]*download[^:]*:[\n ]*http:[^\n]*ixp4[^\n]*' Documentation/arm/IXP4xx
+
+ blobname 'xc\(%d\|[0-9]*\)\.bin' arch/arm/mach-netx/include/mach/xc.h
+ accept 'int[ ]xc_request_firmware[(]struct[ ]xc[ ]*[*][ ]*x[)][;]' arch/arm/mach-netx/include/mach/xc.h
+ accept 'int[ ]xc_request_firmware[(]struct[ ]xc[ ]*[*][ ]*x[)][\n][{]' arch/arm/mach-netx/xc.c
+ accept '[ ][ ]dev_err[(]x->dev,[ ]["]request_firmware[ ]failed\\n["][)][;]' arch/arm/mach-netx/xc.c
+ accept 'EXPORT_SYMBOL[(]xc_request_firmware[)][;]' arch/arm/mach-netx/xc.c
+ accept '[ ][ ]if[ ][(]xc_request_firmware[(]priv->xc[)][)][ ][{]' drivers/net/netx-eth.c
+
+ blobname 'iop_fw_load_[sm]pu' arch/cris/arch-v32/drivers/iop_fw_load.c
+ accept 'int[ ]iop_fw_load_[sm]pu[(]' arch/cris/arch-v32/drivers/iop_fw_load.c
+ accept '[ ]retval[ ]=[ ]request_firmware[^;]*[&]iop_[sm]pu_device' arch/cris/arch-v32/drivers/iop_fw_load.c
+ accept 'EXPORT_SYMBOL[(]iop_fw_load_[sm]pu[)][;]' arch/cris/arch-v32/drivers/iop_fw_load.c
+
+ accept '[/][*][ ]fake[ ]device[ ]for[ ]request_firmware[ ][*][/]' arch/x86/kernel/microcode_core.c
+
+ blobname 'amd-ucode[/]microcode_amd\.bin' arch/x86/kernel/microcode_amd.c
+
+ blobname 'intel-ucode[/]\([0-9a-f][0-9a-f]\|%02x\)-\([0-9a-f][0-9a-f]\|%02x\)-\([0-9a-f][0-9a-f]\|%02x\)' 'arch/x86/kernel/microcode\(_intel\)\?\.c'
+
+ blobname 'BCM2033-\(MD\.hex\|FW\.bin\)' drivers/bluetooth/bcm203x.c
+
+ blobname 'bfubase\.frm' drivers/bluetooth/bfusb.c
+
+ blobname 'BT3CPCC\.bin' drivers/bluetooth/bt3c_cs.c
+
+ blobname 'cyzfirm\.bin' drivers/char/cyclades.c
+
+ accept 'MODULE_FIRMWARE[(]["]dsp56k[/]bootstrap\.bin["][)][;]' drivers/char/dsp56k.c
+ blobna 'const[ ]char[ ]fw_name\[\][ ]=[ ]["]dsp56k[/]bootstrap\.bin["][;][^\n]*\([\n]\+[^\n}][^\n]*\)*request_firmware[^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[ ]err[ ]=[ ]request_firmware[(][&]fw,[ ]fw_name,[ ]' drivers/char/dsp56k.c
+ accept '[ ]const[ ]char[ ]fw_name\[\][ ]=[ ]["]dsp56k[/]bootstrap\.bin["][;][^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[ ]err[ ]=[ ]request_firmware[(][&]fw,[ ]fw_name,[ ]' drivers/char/dsp56k.c
+
+ blobname 'isi\(6\(08\|\(08\|16\)em\)\|46\(08\|16\)\)\.bin' drivers/char/isicom.c
+
+ blobname 'c\(218t\|p204\|320t\)unx\.cod' drivers/char/moxa.c
+ accept '[ ][ ]printk[(]KERN_ERR[ ]["]MOXA:[ ]request_firmware[ ]failed' drivers/char/moxa.c
+
+ # This driver enables the user to update the non-Free BIOS, but it
+ # only issues a firmware request if specifically told to. It
+ # doesn't require any non-Free firwmare to function, and it
+ # doesn't actually recommend users to perform updates, so I'm
+ # leaving it in.
+ accept '[ ][ ][ ]req_firm_rc[ ]=[ ]request_firmware_nowait[(][^;]*,[ ]["]dell_rbu["],' drivers/firmware/dell_rbu.c
+ accept '[ ]*["]dell_rbu:%s[ ]request_firmware_nowait["]' drivers/firmware/dell_rbu.c
+
+ blobname 'xc3028-v27\.fw' drivers/media/common/tuners/tuner-xc2028.h
+ blobname 'xc3028L-v36\.fw' drivers/media/common/tuners/tuner-xc2028.h
+
+ blobname 'dvb-fe-xc5000-1\.1\.fw' drivers/media/common/tuners/xc5000.c
+
+ blobname '4210\(100[12]\|%4X\)\.sb' drivers/net/irda/irda-usb.c
+ blobna '[/][*][ \n*]*[ ]Known[ ]firmware[^*]*\([*]\+[^/*][^*]*\)*[*]*\(STIR421x\|4210\(100[12]\|%4X\)\.sb\)[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/net/irda/irda-usb.c
+
+ blobname 'myri10ge_\(rss_\)\?ethp\?_z8e\.dat' drivers/net/myri10ge.c
+ blobna 'If[ ]the[ ]driver[ ]can[ ]neither[ ]enable[ ]ECRC[^*]*\([*]\+[^/*][^*]*\)*[*]*myri10ge_\(rss_\)\?ethp\?_z8e\.dat[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/net/myri10ge.c
+
+ blobname 'spider_fw\.bin' drivers/net/spider_net.h
+
+ blobname 'tms380tr\.bin' drivers/net/tokenring/tms380tr.c
+
+ blobname 'atmel_at76c50\(2\([de]\|_3com\)\?\|4a\?\(_2958\)\?\|6\)\(\.bin\)\?' drivers/net/wireless/atmel.c
+ accept '[ ]*priv->firmware[ ]=[ ]\(NULL\|new_firmware\)[;]' drivers/net/wireless/atmel.c
+
+ blobname 'b43\(legacy\)\?\(%s\)\?[/]\(%s\|ucode\([2459]\|1[1345]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c'
+ blobna 'b43legacyerr[(][^;]*must[ ]go[ ]to[ ]http[^;]*b43#devicefirmware[^;]*[)][;]' drivers/net/wireless/b43legacy/main.c
+
+ blob '#define[ ]IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)[(]x[)]\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\([\n][\n]*#define[ ]IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)[(]x[)]\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\)*' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ blobname 'ipw2100-\(["]\([^"\n]\|[\\][\n]\)*["]\([^"]\|[\\]["]\)*\)\+' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ blobname '__stringify[(]IPW2100_FW_MINOR_VERSION[)]' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ accept '[ ]*Portions[ ]of[ ]ipw2100_\(do_\)\?mod_firmware_load[, ]*\(ipw2100_\(do_\)\?mod_firmware_load[, and\n]*\)*' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ accept '[ ]ipw2100_mod_firmware_load[(]fw[)][;]' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ accept 'static[ ]int[ ]ipw2100_mod_firmware_load[(]' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ blobna 'if[ ][(]IPW2100_FW_MAJOR[^{]*[{][^}]*[ ][}]' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+ blobname '["]["][ ]x[ ]["]\.fw["]' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2100\.c'
+
+ accept '[/][*][ ]Call[ ]this[ ]function[ ]from[ ]process[ ]context[^*]*\([*]\+[^/*][^*]*\)*[*]*request_firmware' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2200.c'
+ blobname 'ipw2200-\(i\?bss\|sniffer\)\.fw' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2200.c'
+ accept '[ ][ ]IPW_ERROR[(]["]%s[ ]request_firmware[ ]failed' 'drivers/net/wireless/\(ipw2x00/\)\?ipw2200.c'
+
+ blobname 'iwlwifi-\(3945\|4965\|[156]000\|6050\)["][ ]IWL\(3945\|4965\|[156]000\|6050\)_UCODE_API[ ]["]\.ucode' 'drivers/net/iwlwifi/iwl\(3945-base\|-\(3945\|4965\|[156]000\)\)\.[ch]'
+ blobname 'iwlwifi-3945-' drivers/net/iwlwifi/iwl-3945.h
+ blobname '#api[ ]["]\.ucode["]' 'drivers/net/iwlwifi/iwl-\(3945.h\|\(4965\|[156]000\)\.c\)'
+ accept '#define\([ ]_\?IWL3945_MODULE_FIRMWARE[(]api[)]\)\+' drivers/net/iwlwifi/iwl-3945.h
+ accept '[ ][ ][*][ ]request_firmware[(][)][ ]is[ ]synchronous' 'drivers/net/iwlwifi/iwl\(3945-base\|-agn\)\.c'
+ blobname 'iwlwifi-4965-' drivers/net/iwlwifi/iwl-4965.c
+ blobname 'iwlwifi-5\(00\|15\)0-' drivers/net/iwlwifi/iwl-5000.c
+ blobname '%s%[du]%s["],[\n ]*name_pre,[ ]\(priv->fw_\)\?index,[ ]["]\.ucode' 'drivers/net/iwlwifi/iwl\(3945-base\|-agn\).c'
+
+ blobname 'libertas_cs\(_helper\)\?\.fw' drivers/net/wireless/libertas/if_cs.c
+ blobname 'sd\(8385\|868[68]\)\(_helper\)\?\.bin\(["],[\n][ ]*\.firmware[ ]=[ ]["]sd\(8385\|868[68]\)\.bin\)\?' 'drivers/\(net/wireless/libertas/if_sdio\.c\|bluetooth/btmrvl_sdio\.c\)'
+ blobname 'sd\(8385\|868[68]\)\(_helper\)\?\.bin' 'drivers/\(net/wireless/libertas/if_sdio\.c\|bluetooth/btmrvl_sdio\.c\)'
+ accept '[ ]*card->firmware[ ]=[ ]\(if_sdio\|lbs_fw\)' drivers/net/wireless/libertas/if_sdio.c
+ blobname 'usb8388\(-5\.126\.0\.p5\)\?\.bin' drivers/net/wireless/libertas/if_usb.c
+ blob '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*usb8388\(-5\.126\.0\.p5\)\?\.bin[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/net/wireless/libertas/if_usb.c
+ accept '[ ][ ]lbs_pr_err[(]["]request_firmware\([(][)]\)\?[ ]failed' 'drivers/net/wireless/if_\(spi\|usb\)\.c'
+ blobna 'o\.[ ]Copy[ ]the[ ]firmware[ ]image[^\n]*usb8388\([^\n]\|[\n][ ]*[^ \n]\)*' drivers/net/wireless/libertas/README
+ blobna '\[fw_name=usb8388[^]]*\]' drivers/net/wireless/libertas/README
+
+ blobname 'usb8388\.bin' drivers/base/Kconfig
+ accept '[ ][ ][ ]So,[ ]for[ ]example,[ ]you[ ]might[ ]set[ ]CONFIG_EXTRA_FIRMWARE=["]whatever\.bin["]' drivers/base/Kconfig
+ accept '[ ][ ][ ]kernel\.[ ]Then[ ]any[ ]request_firmware[(]\(["]whatever\.bin["]\)[)]' drivers/base/Kconfig
+
+ blobname 'lbtf_usb\.bin' drivers/net/wireless/libertas_tf/if_usb.c
+
+ blobname 'isl38\(86\|87\|90\)\(pci\|usb\(_bare\)\?\)\?' 'drivers/net/wireless/p54/p54\(pci\.c\|usb\.[ch]\)'
+ blob '[/][*][ ]for[ ]isl3886[ ]register[ ]definitions[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/net/wireless/p54/p54usb.h
+ blobna 'If[ ]you[ ]enable[ ]this\([^\n]\|[\n][ ]*[^ \n]\)*isl3890\([^\n]\|[\n][ ]*[^ \n]\)*' drivers/net/wireless/Kconfig
+
+ blobname 'isl38\(77\|86\|90\)' drivers/net/wireless/prism54/islpci_dev.c
+
+ blobname 'rt2[56]61s\?\.bin' drivers/net/wireless/rt2x00/rt61pci.h
+ blobname 'rt73\.bin' drivers/net/wireless/rt2x00/rt73usb.h
+
+ blobname 'zd1201\(-ap\)\?\.fw' drivers/net/wireless/zd1201.c
+
+ blobname 'zd1211[/]zd1211b\?_\(u\([rb]\|phr\)\?\)\?' drivers/net/wireless/zd1211/zd_usb.c
+
+ # ??? gotta introduce some means to match false-positives
+ # including post context containing blobs, so that the macro name
+ # is not flagged or deblobbed, but the blob name is.
+ # blobna 'PCMCIA_\([PM]FC_\)\?DEVICE_CIS_\(MANF_CARD\|PROD_ID[1-4]*\)'
+ # accept '[ ] PCMCIA_\([PM]FC_\)\?DEVICE_CIS_\(MANF_CARD\|PROD_ID[1-4]*\)[(][^)]*, ["][/][*][(]DEBLOBBED[)][*][/]["][)]'
+ # accept '#define PCMCIA_\([PM]FC_\)\?DEVICE_CIS_\(MANF_CARD\|PROD_ID[1-4]*\)[(]' include/pcmcia/device_id.h
+
+ blobname '\(cis[/]\)\?3CCFEM556\.cis' drivers/net/pcmcia/3c574_cs.c
+
+ blobname '\(cis[/]\)\?3CXEM556\.cis' drivers/net/pcmcia/3c589_cs.c
+
+ blobname '\(cis[/]\)\?\(PCMLM28\|DP83903\|LA-PCM\|PE520\|NE2K\|PE-200\|tamarack\)\.cis' drivers/net/pcmcia/pcnet_cs.c
+
+ blobname '\(cis[/]\)\?\(PCMLM28\|DP83903\|3C\(CF\|X\)EM556\|SW_\([78]xx\|555\)_SER\|MT5634ZLX\|COMpad[24]\|RS-COM-2P\|GLOBETROTTER\)\.cis' drivers/serial/serial_cs.c
+
+ # This enables but does not encourage firmware updates.
+ accept '[ ]err[ ]=[ ]request_firmware[(][&]asd_ha->bios_image,[\n ]*filename_ptr,[\n ]*[&]asd_ha->pcidev->dev[)][;]' drivers/scsi/aic94xx/aic94xx_init.c
+ blobname 'aic94xx-seq\.fw' drivers/scsi/aic94xx/aic94xx_seq.h
+
+ # This enables but does not encourage firmware updates.
+ accept '[ ]if[(]request_firmware[(]&fw_entry,[ ]fname,[ ]&ioa_cfg->pdev->dev[)][)]' drivers/scsi/ipr.c
+
+ accept '[ ]res[ ]=[ ]request_firmware[(]&fw,[ ]["]sas_addr["],[ ]&shost->shost_gendev[)][;]' drivers/scsi/libsas/sas_scsi_host.c
+
+ blobname 'ql\(2\([12345]00\|322\)\|8100\)_fw\.bin' drivers/scsi/qla2xxx/qla_os.c
+ blobna 'By[ ]default,[ ]firmware[ ]for[ ]the[ ]ISP[ ]parts\([^\n]\|[\n]*[ ]\)*ql2[12345]00_fw\.bin\([^\n]\|[\n]*[ ]\)*ftp:[/][/][^\n]*firmware[/]' drivers/scsi/qla2xxx/Kconfig
+
+ blobname 'icom_\(asc\|res_dce\|call_setup\)\.bin' drivers/serial/icom.c
+
+ blobname 'fsl_qe_ucode_uart_\(%u\|[0-9]*\)_\(%u\|[0-9]*\)\(%u\|[0-9]*\)\.bin' drivers/serial/ucc_uart.c
+
+ blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' 'drivers/\(\(staging\|net/wireless\)/at76_usb/at76_usb\.c\|at76c50x-usb\.c\)'
+
+ accept 'static[ ]struct[ ]go7007_usb_board[ ]board_\(matrix_\(ii\|reload\|revolution\)\|star_trek\|px_tv402u\|xmen\|lifeview_lr192\|endura\|adlink_mpg24\|sensoray_2250\)[ ]=[ ][{][\n]\([ ]\.flags[ ]*=[ ][^",]*,[\n]*\)*[ ]\.main_info[ ]*=[ ][{][\n][ ][ ]\.firmware[ ]*=[ ]' drivers/staging/go7007/go7007-usb.c
+ accept 'static[ ]struct[ ]go7007_board_info[ ]board_voyager[ ]=[ ][{][\n][ ]\.firmware[ ]*=[ ]' drivers/staging/go7007/saa7134-go7007.c
+ blobname 'go7007\(fw\|tv\)\.bin' 'drivers/staging/go7007/\(go7007-\(driver\|usb\)\|saa7134-go7007\)\.c'
+
+ blobname 'cxacru-\(%s\|fw\|bp\|cf\)\.bin' drivers/usb/atm/cxacru.c
+
+ blobname 'speedtch-\(%d\|[0-9]*\)\.bin\(\.\(%x\|\(0x\)\?[0-9a-fA-F]*\)\(\.\(%02x\|[0-9a-fA-F][0-9a-fA-F]\)\)\?\)\?' drivers/usb/atm/speedtch.c
+
+ blobname 'ueagle-atm[/]' drivers/usb/atm/ueagle-atm.c
+ blobname '\(adi930\|eagle\(I*\|IV\)\)\.fw' drivers/usb/atm/ueagle-atm.c
+ blobname 'DSP[49e][ip]\.bin' drivers/usb/atm/ueagle-atm.c
+ blobname '930-fpga\.bin' drivers/usb/atm/ueagle-atm.c
+ blobname 'CMV[x9ae][yip]\.bin\(\.v2\)\?' drivers/usb/atm/ueagle-atm.c
+
+ blobname 'isight\.fw' drivers/usb/misc/isight_firwmare.c
+
+ blobname '\(i1480-\(pre-phy\|usb\|phy\)\|ptc\)-0\.0\.bin' drivers/uwb/i1480/dfu/usb.c
+
+ accept '[ ]retval[ ]=[ ]request_firmware[(][&]fw_entry,[ ]["]metronome\.wbf["],[ ][&]dev->dev[)][;]' drivers/video/metronomefb.c
+
+ blobname '\(vx[/]\)\?\(bx_1_v\(xp\|p4\)\.b56\|x1_\(1_v\(x[2p]\|p4\)\|2_v22\)\.xlx\|bd56\(002\|3v2\|3s3\)\.boot\|l_1_v\(x[2p]\|p4\|22\)\.d56\)' sound/drivers/vx/vx_hwdep.c
+
+ blobname '\(ea[/]\)\?darla20_dsp\.fw' sound/pci/echoaudio/darla20.c
+ blobname '\(ea[/]\)\?darla24_dsp\.fw' sound/pci/echoaudio/darla24.c
+ blobname '\(ea[/]\)\?\(\(loader\|echo3g\)_dsp\|3g_asic\)\.fw' sound/pci/echoaudio/echo3g.c
+ blobname '\(ea[/]\)\?gina20_dsp\.fw' sound/pci/echoaudio/gina20.c
+ blobname '\(ea[/]\)\?\(\(loader\|gina24_3[06]1\)_dsp\|gina24_3[06]1_asic\)\.fw' sound/pci/echoaudio/gina24.c
+ blobname '\(ea[/]\)\?\(loader\|indigo\)_dsp\.fw' sound/pci/echoaudio/indigo.c
+ blobname '\(ea[/]\)\?\(loader\|indigo_dj\)_dsp\.fw' sound/pci/echoaudio/indigodj.c
+ blobname '\(ea[/]\)\?\(loader\|indigo_io\)_dsp\.fw' sound/pci/echoaudio/indigoio.c
+ blobname '\(ea[/]\)\?layla20_\(dsp\|asic\)\.fw' sound/pci/echoaudio/layla20.c
+ blobname '\(ea[/]\)\?\(\(loader\|layla24\)_dsp\|layla24_\(1\|2[AS]\)_asic\)\.fw' sound/pci/echoaudio/layla24.c
+ blobname '\(ea[/]\)\?\(loader\|mia\)_dsp\.fw' sound/pci/echoaudio/mia.c
+ blobname '\(ea[/]\)\?\(\(loader\|mona_3[06]1\)_dsp\|mona_3[06]1\(_1\)\?_asic_\(48\|96\)\|mona_2_asic\)\.fw' sound/pci/echoaudio/gina24.mona
+ blobname 'ea[/]%s' sound/pci/echoaudio/echoaudio.c
+
+ blobname 'emu[/]\(hana\|\(audio\|micro\)_dock\|emu\(0404\|1010\(b\|_notebook\)\)\)\.fw' sound/pci/emu10k1/emu10k1_main.c
+
+ blobname '\(mixart[/]\)\?miXart8\(AES\)\?\.\(xlx\|elf\)' sound/pci/mixart/mixart_hwdep.c
+
+ blobname '\(pcxhr[/]\)\?\(x[ic]_1_882\|[ebd]321_512\|xlxint\|\(xlxc\|dsp[ebd]\)\(882\|1\?222\|924\)\(e\|hr\)\?\)\(\.dat\|\.[ebd]56\)' sound/pci/pcxhr/pcxhr_hwdep.c
+
+ blobna 'You[ ]need[ ]to[ ]install[\n]*riptide\.hex[\n]\.[\n]' Documentation/sound/alsa/ALSA-Configuration.txt
+ blobname 'riptide\.hex' sound/pci/riptide/riptide.c
+ defsnc 'static[ ]union[ ]firmware_version[ ]firmware_versions\[\][ ]=' sound/pci/riptide/riptide.c
+ blobna 'chip->firmware[ ]=[ ]firmware[;]' sound/pci/riptide/riptide.c
+
+ blobname '\(multi\|digi\)face_firmware\(_rev11\)\?\.bin' sound/pci/rme9652/hdsp.c
+
+ blobname 'aica_firmware\.bin' sound/sh/aica.c
+
+ accept '[ ][*][^*]*\([*]\+[^/*][^*]*\)*[*]*Caution:[ ]This[ ]API[^*]*\([*]\+[^/*][^*]*\)*[*]*request_firmware.' sound/sound_firmware.c
+ accept 'static[ ]int[ ]do_mod_firmware_load[(]' sound/sound_firmware.c
+ accept 'int[ ]mod_firmware_load[(]' sound/sound_firmware.c
+ accept '[ ]r[ ]=[ ]do_mod_firmware_load[(]' sound/sound_firmware.c
+ accept 'EXPORT_SYMBOL[(]mod_firmware_load[)][;]' sound/sound_firmware.c
+ accept 'extern[ ]int[ ]mod_firmware_load[(]' sound/oss/sound_firmware.h
+
+ accept '[ ]INITCODESIZE[ ]=[ ]mod_firmware_load[(]INITCODEFILE,[ ][&]INITCODE[)][;]' sound/oss/msnd_pinnacle.c
+ accept '[ ]PERMCODESIZE[ ]=[ ]mod_firmware_load[(]PERMCODEFILE,[ ][&]PERMCODE[)][;]' sound/oss/msnd_pinnacle.c
+ blobname '\([/]etc[/]sound[/]\|turtlebeach[/]\)\?pndsp\(ini\|erm\)\.bin' '\(sound/oss/msnd_pinnacle.h\|Documentation/sound/alsa/ALSA-Configuration.txt\)'
+ blobname '\([/]etc[/]sound[/]\|turtlebeach[/]\)\?msnd\(init\|perm\)\.bin' '\(sound/oss/msnd_classic.h\|Documentation/sound/alsa/ALSA-Configuration.txt\)'
+ blobna '\(Important[ ]Notes[ ]-[ ]Read[ ]Before[ ]Using\|Obtaining[ ]and[ ]Creating[ ]Firmware[ ]Files\)[\n]#[ ][ ]~*\([^\n]\|[\n]#[ ]*\([\n]#[ ]*\([\n]#[ ]*For[ ]the[^\n]*[\n]#[ ]*~*[\n]\)\?\)\?[^\n ]\)*\.' Documentation/sound/oss/MultiSound
+
+ accept '[ ]len[ ]=[ ]mod_firmware_load[(]fn,[ ][&]data[)][;][\n][ ]if[ ][^{]*[ ][{][\n][ ][ ]*printk[(]KERN_ERR[ ]["]sscape:' sound/oss/sscape.c
+ blobname '[/]sndscape[/]\(scope\.cod\|sndscape\.co\([?dx01234]\|%d\)\)' sound/oss/sscape.c
+
+ accept '[ ][ ]trix_boot_len[ ]=[ ]mod_firmware_load[(]' sound/oss/trix.c
+ blobname '\([/]etc[/]sound[/]\)\?trxpro\.bin' sound/oss/trix.c
+
+ accept '[ ][ ]smw_ucodeLen[ ]=[ ]mod_firmware_load[(]' sound/oss/sb_common.c
+ blobname '\([/]etc[/]sound[/]\)\?midi0001\.bin' sound/oss/sb_common.c
+ blobname '\([/]etc[/]sound[/]\|turtlebeach[/]\)\?msnd\(init\|perm\)\.bin' sound/oss/Kconfig
+
+ blob 'When[ ]the[ ]module[ ]is[ ]loaded[^\n]*\([\n][^\n]*\)*[/]pss_synth[^\n]*\([\n][^\n]*\)*' Documentation/sound/oss/PSS
+ blob 'pss_firmware[ \n ]*This[ ]parameter[^\n]*\([\n][^\n]*\)*[/]pss_synth[^\n]*\([\n][^\n]\+\)*' Documentation/sound/oss/PSS-updates
+ accept '[ ][ ]pss_synthLen[ ]=[ ]mod_firmware_load[(]pss_firmware,[ ][(]void[ ][*][)][ ][&]pss_synth[)][;]' sound/oss/pss.c
+ accept '[ ]*if[ ]\?[(]\(!\|fw_load[ ][&][&][ ]\)\?pss_synth' sound/oss/pss.c
+ accept '[ ]*if[ ][(]!pss_download_boot[(]devc,[ ]pss_synth,[ ]pss_synthLen,' sound/oss/pss.c
+ accept '[ ]*vfree[(]pss_synth[)][;]' sound/oss/pss.c
+ blobna 'to[ ]allow[ ]the[ ]user[ ][^/"]*fir[em]ware[ ]file[^/"]*["][^"*]*["]' sound/oss/pss.c
+ blobname '\([/]etc[/]sound[/]\)\?pss_synth' sound/oss/pss.c
+ accept '[ ][$][(]obj[)][/]bin2hex[ ]pss_synth' sound/oss/Makefile
+ accept '[ ][ ]*echo[ ][\'"'"']static[ ]\(unsigned[ ]char[ ][*][ ]*\|int[ ]\)pss_synth\(Len\)\?[ ]=[ ]\(NULL\|0\)[;]' sound/oss/Makefile
+
+ accept '[ ]\.request_firmware[ ]=[ ]NULL,' drivers/media/dvb/dvb-usb/m920x.c
+
+ accept '[ ]*["]request_firmware[ ]\(fatal[ ]error\|unable[ ]to[ ]locate\|:[ ]Failed[ ]to[ ]find\)' drivers/media/video/pvrusb2/pvrusb2-hdw.c
+ accept '[ ][*][ ]NOTE[ ]:[ ]the[ ]pointer[ ]to[ ]the[ ]firmware[ ]data[ ]given[ ]by[ ]request_firmware[(][)]' drivers/media/video/pvrusb2-hdw.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]\(dw\(210[24]\|3101\)\|s6[3x]0\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dw2102.c
+ blobname 'dvb-usb-\(dw\(210[124]\|3101\)\|s630\)\.fw' drivers/media/dvb/dvb-usb/dw2102.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]gp8psk_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/gp8psk.c
+ blobname 'dvb-usb-gp8psk-0[12]\.fw' drivers/media/dvb/dvb-usb/gp8psk.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]opera1_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/nova-t-usb2.c
+ blobname 'dvb-usb-opera-\(fpga-\)\?-01\.fw' drivers/media/dvb/dvb-usb/opera1.c
+
+ blobname 'dvb-fe-af9013\.fw' drivers/media/dvb/frontends/af9013_priv.h
+
+ blobname 'dvb-fe-bcm3510-01\.fw' drivers/media/dvb/frontends/bcm3510.c
+
+ blobname 'dvb-fe-cx24116\.fw' drivers/media/dvb/frontends/cx24116.c
+
+ blobname 'dvb-fe-nxt2002\.fw' drivers/media/dvb/frontends/nxt200x.c
+
+ blob '[/][*][\n][ ][*][ ]This[ ]driver[ ]needs[ ]two[ ]external[ ]firmware[ ]files[^*]*\([*]\+[^/*][^*]*\)*[*]*dvb-fe-or51132-\(vsb\|qam\)\.fw[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/media/dvb/frontends/or51132.c
+ blobname 'dvb-fe-or51132-\(vsb\|qam\)\.fw' drivers/media/dvb/frontends/or51132.c
+
+ blobname 'dvb-fe-or51211\.fw' drivers/media/dvb/frontends/or51211.c
+
+ blobname 'dvb-fe-sp887x\.fw' drivers/media/dvb/frontends/sp887x.c
+
+ blobname 'dvb-fe-tda10048-1\.0\.fw' drivers/media/dvb/frontends/tda10048.c
+
+ blobname '\(\(dvb\|tdmb\|isdbt\)_nova\|cmmb_vega\)_12mhz\(_b0\)\?\.inp' drivers/media/dvb/siano/smscoreapi.c
+
+ blobname '\(dvb[th]\(_bda\)\?\|tdmb\)_stellar_usb\.inp' drivers/media/dvb/siano/smsusb.c
+
+ blobname 'dvb-ttusb-dec-\(2000t\|2540t\|3000s\)\.fw' drivers/media/dvb/ttusb-dec/ttusb_dec.c
+
+ blobname 'hcwamc\.rfb' drivers/media/video/bt8xx/bttv-cards.c
+
+ blobname 'v4l-cx23418-dig\.fw' drivers/media/video/cx18/cx18-av-firmware.c
+ blobname 'v4l-cx23418-[ac]pu\.fw' drivers/media/video/cx18/cx18-firwmare.c
+
+ blobname 'v4l-cx23885-enc\.fw' drivers/media/video/cx23885/cx23885-417.c
+
+ blobname 'v4l-\(cx23\(885\|1xx\)-avcore-01\|cx25840\)\.fw' drivers/media/video/cx25840/cx25840-firmware.c
+
+ blobname 'v4l-cx2341x-\(enc\|dec\)\.fw' include/media/cr2341x.h
+
+ blobname 'v4l-cx2341x-init\.mpg' drivers/media/video/ivtv/ivtv-firwmare.c
+
+ blobname 'v4l-pvrusb2-\(2[49]\|73\)xxx-01\.fw' drivers/media/video/pvrusb2/pvrusb2-devattr.c
+
+ blobname 'f2255usb\.bin' drivers/media/video/s2255drv.c
+
+ blobname 'drx397xD\.\(A2\|B1\)\.fw' drivers/media/dvb/frontends/drx397xD_fw.h
+
+ accept '#define[ ]DIB0700_DEFAULT_DEVICE_PROPERTIES[ ]\\[\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^\n",]*,[ ]\\[\n]\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dib0700_devices.c
+ blobname 'dvb-usb-dib0700-1\.[12]0\.fw' drivers/media/dvb/dvb-usb/dib0700_devices.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]nova_t_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/nova-t-usb2.c
+ blobname 'dvb-usb-nova-t-usb2-02\.fw' drivers/media/dvb/dvb-usb/nova-t-usb2.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]umt_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/umt-010.c
+ blobname 'dvb-usb-umt-010-02\.fw' drivers/media/dvb/dvb-usb/umt-010.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]ttusb2_properties\(_s2400\)\?[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/ttusb2.c
+ blobname 'dvb-usb-\(pctv-400e\|tt-s2400\)-01\.fw' drivers/media/dvb/dvb-usb/ttusb2.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]cxusb_bluebird_\(lgh064f\|dee1601\|lgz201\|dtt7579\|nano2_needsfirmware\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/cxusb.c
+ blobname 'dvb-usb-bluebird-0[12]\.fw' drivers/media/dvb/dvb-usb/cxusb.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]\(dtt200u\|wt220u\(_\(fc\|zl0353\|miglia\)\)\?\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dtt200u.c
+ blobname 'dvb-usb-\(dtt200u-01\|wt220u-\(02\|fc03\|\(zl0353\|miglia\)-01\)\)\.fw' drivers/media/dvb/dvb-usb/dtt200u.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]vp7045_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/vp7045.c
+ blobname 'dvb-usb-vp7045-01\.fw' drivers/media/dvb/dvb-usb/vp7045.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]\(dibusb\(1_1\(_an2235\)\?\|2_0b\)\|artec_t1_usb2\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dibusb-mb.c
+ blobname 'dvb-usb-\(dibusb-\(5\.0\.0\.11\|an2235-01\|6\.0\.0\.8\)\|adstech-usb2-02\)\.fw' drivers/media/dvb/dvb-usb/dibusb-mb.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]a800_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/a800.c
+ blobname 'dvb-usb-avertv-a800-02\.fw' drivers/media/dvb/dvb-usb/a800.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]af9005_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/af9005.c
+ blobname 'af9005\.fw' drivers/media/dvb/dvb-usb/af9005.c
+
+ accept '[ ][ ]\.download_firmware[ ]=[ ]af9015_download_firmware,[\n][ ][ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/af9015.c
+ blobname 'dvb-usb-af9015\.fw' drivers/media/dvb/dvb-usb/af9015.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]dibusb_mc_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dibusb-mc.c
+ blobname 'dvb-usb-dibusb-6\.0\.0\.8\.fw' drivers/media/dvb/dvb-usb/dibusb-mc.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]\(megasky\|digivox_mini_ii\|tvwalkertwin\|dposh\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/m920x.c
+ blobname 'dvb-usb-\(\(megasky\|digivox\)-02\|tvwalkert\|dposh-01\)\.fw' drivers/media/dvb/dvb-usb/m920x.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]vp702x_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/vp702x.c
+ blobname 'dvb-usb-vp702x-02\.fw' drivers/media/dvb/dvb-usb/vp702x.c
+
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]digitv_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/digitv.c
+ blobname 'dvb-usb-digitv-02\.fw' drivers/media/dvb/dvb-usb/digitv.c
+
+ blob 'Driver:[ ]\(acenic\|ADAPTEC_STARFIRE\|cxgb3\|e100\|tigon3\|korg1212\|maestro3\|ymfpci\|smctr\|kaweth\|ttusb-budget\|keyspan\|emi26\|emi62\|t[iu]_usb_3410_5052\|whiteheat\|ip2\|CPiA2\|DABUSB\|USB_VICAM\|USB_SERIAL_EDGEPORT\(_TI\)\?\|SND_SB16_CSP\|CASSINI\|ambassador\|SCSI_\(ADVANSYS\|QLOGIC\(_1280\|PTI\)\)\|TEHUTI\|TYPHOON\|YAM\|3C359\|PCMCIA_\(PCNET\|SMC91C92\|3C5\(89\|74\)\)\|MYRI_SBUS\|BNX2\|bnx2x\|wavefront\|SERIAL_8250_CS\|mga\|r128\|radeon\)\([ ]--*\|:\)[ ]\([^\n]\|[\n]*[^\n\-]\)*\([\n][\n]--*[\n][\n]\?Driver:[ ]\(acenic\|ADAPTEC_STARFIRE\|cxgb3\|e100\|tigon3\|korg1212\|maestro3\|ymfpci\|smctr\|kaweth\|ttusb-budget\|keyspan\|emi26\|emi62\|t[iu]_usb_3410_5052\|whiteheat\|ip2\|CPiA2\|DABUSB\|USB_VICAM\|USB_SERIAL_EDGEPORT\(_TI\)\?\|SND_SB16_CSP\|CASSINI\|ambassador\|SCSI_\(ADVANSYS\|QLOGIC\(_1280\|PTI\)\)\|TEHUTI\|TYPHOON\|YAM\|3C359\|PCMCIA_\(PCNET\|SMC91C92\|3C5\(89\|74\)\)\|MYRI_SBUS\|BNX2\|bnx2x\|wavefront\|SERIAL_8250_CS\|mga\|r128\|radeon\)\([ ]--*\|:\)[ ]\([^\n]\|[\n]*[^\n\-]\)*\)*' firmware/WHENCE
+
+ blobname 'sms1xxx-\(stellar\|nova-[ab]\|hcw-55xxx\)-dvbt-0[12]\.fw' drivers/media/dvb/siano/sms-cards.c
+
+ accept '[ ][ ][ ][ ]mv[ ]["][$]ofile["][ ]["][$]ofile\.elf["]' arch/powerpc/boot/wrapper
+ accept '[ ][ ][ ][ ][$]objbin[/]mktree[ ]["][$]ofile\.elf["]' arch/powerpc/boot/wrapper
+ accept '[ ]rm[ ]-f[ ]["][$]ofile\.elf["]' arch/powerpc/boot/wrapper
+ accept '[ ][ ][ ][ ][$][{]CROSS[}]objcopy[ ]-O[ ]binary[ ]["][$]ofile["][ ]["][$]ofile\.bin["]' arch/powerpc/boot/wrapper
+ accept '[ ][ ][ ][ ]dd[ ]if=["][$]ofile\.bin["][ ]of=["][$]ofile\.bin["]' arch/powerpc/boot/wrapper
+ accept '[ ][ ][ ][ ]odir=["][$][(]dirname[ ]["][$]ofile\.bin["][)]["]' arch/powerpc/boot/wrapper
+ accept '[ ][ ][ ][ ]gzip[ ]--force[ ]-9[ ]--stdout[ ]["][$]ofile\.bin["][ ]>[ ]["][$]odir[/]otheros\.bld["]' arch/powerpc/boot/wrapper
+ accept '[ ]\.incbin[ ]["]arch[/]x86[/]kernel[/]acpi[/]realmode[/]wakeup\.bin["]' arch/x86/kernel/acpi/wakeup_rm.S
+ accept '[;]set[ ]executable[ ]["]2232\.bin["]' drivers/char/ser_a2232fw.ax
+
+ blobname 'di\(\(dn\|pr\)load\|diva\(pp\)\?\|hscx\|v110\|modem\|fax\|_etsi\|_\(1tr6\|belg\|franc\|atel\|ni\|5ess\|japan\|swed\)\|dspdld\)\.\(bin\|s[xyqm]\|p\)' drivers/isdn/hardware/eicon/cardtype.h
+ blobname 'dsp\(dload\|dqsig\|dvmdm\|dvfax\)\.bin' drivers/isdn/hardware/eicon/dsp_defs.h
+
+ blobname 'vicam[/]firmware\.fw' drivers/media/video/usbvideo/vicam.c
+
+ accept '#include[ ]["]ixp2400_[rt]x\.ucode["]' drivers/net/ixp2000/ixpdev.c
+
+ # New in 2.6.29
+ blobname 'acenic[/]tg[12]\.bin' drivers/net/acenic.c
+ blobname 'adaptec[/]starfire_[rt]x\.bin' drivers/net/starfire.c
+ blobname 'e100[/]d10\(1[ms]\|2e\)_ucode\.bin' drivers/net/e100.c
+ blobname 'tigon[/]tg3\(_tso5\?\)\?\.bin' drivers/net/tg3.c
+ blobname '\(ti_usb-v\(%04x\|[0-9a-f]*\)-p\(%04x\|[0-9a-f]*\)\|mts_\(cdma\|gsm\|edge\)\)\.\(bin\|fw\)' drivers/usb/serial/ti_usb_3410_5052.c
+ blobname 'iw\?\(2400\|6050\)m\?-fw-\(sdio\|usb\)-\(\(["][ ]I2400M_FW_VERSION[ ]["]\|[0-9.]*\)\.sbcf\|[^". \n]*\)' 'drivers/net/wimax/i2400m/\(sdio\|usb\)\.c'
+ blob '3\.[ ]Installing[ ]the[ ]firmware[^\n]*\([\n][\n]*[ ][ ][ ][^\n]*\)*[\n]*[$][^\n]*i2400m-fw[^\n]*\([\n][\n]*[ ][ ][ ][^\n]*\)*' Documentation/wimax/README.i2400m
+ blob '6\.1\.[ ]Driver[ ]complains[^\n]*i2400m-fw[^\n]*\([\n][\n]*\([ ][ ][ ]\|i2400m_usb\)[^\n]*\)*' Documentation/wimax/README.i2400m
+ accept '[ ][ ]ranges[ ]=[ ]<'"$blobpat*"'>[;]' 'arch/powerpc/boot/dts/\(mpc8572ds\|p2020ds\|katmai\)\.dts'
+ accept '\(div_table_\(clz\|inv\|ix\)\|zero_l\):\([\n][ ]\.\(byte[ ]-\?[0-9]*\|long[ ]0x[0-9A-F]*\)\)*' arch/sh/lib/udivsi3_i4i.S
+ defsnc 'const[ ]u32[ ]crypto_[fi][tl]_tab\[4\]\[256\][ ]=' crypto/aes_generic.c
+ accept '[ ][ ][ ]every[ ]driver[ ]which[ ]uses[ ]request_firmware[(][)][ ]and[ ]ships[ ]its' drivers/base/Kconfig
+ defsnc 'static[ ]const[ ]u32[ ]filter_table\[\][ ]=' drivers/gpu/drm/i915/intel_tv.c
+ defsnc 'static[ ]u8[ ]af9015_ir_table_\(avermedia\(_ks\)\?\|digittrade\|trekstor\)\[\][ ]=' drivers/media/dvb/dvb-usb/af9015.h
+ defsnc '[ ]static[ ]__u8[ ]lgdt3304_\(vsb8\|qam\(64\|256\)\)_data\[\][ ]=' drivers/media/dvb/frontends/lgdt3304.c
+ defsnc 'static[ ]u8[ ]\(init\|c\)_table\[\]=' drivers/media/dvb/frontends/s921_core.c
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]stb0899_tab[ ]stb0899_\(cn\|dvbs2\?rf\|quant\|est\)_tab\[\][ ]=' drivers/media/dvb/frontends/stb0899_drv.c
+ defsnc 'static[ ]const[ ]struct[ ]stb6100_lkup[ ]lkup\[\][ ]=' drivers/media/dvb/frontends/stb6100.c
+ initnc 'static[ ]const[ ]__u8[ ]ov\(534\|772x\)_reg_initdata\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsc 'static[ ]const[ ]\(__\)\?u8[ ]\(mi\(0360\|13[12]0\)\|po\(1200\|3130\)\|hv7131r\|ov76[67]0\)_\(\(soc\)\?_\?[iI]nit\(Q\?V\|SX\)GA\(_\(JPG\|data\)\)\?\|rundata\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ defsnc 'static[ ]\(const[ ]\)\?u\(32\|_int32_t\)[ ]ar928[05]\(Common\|Modes\(_\(fast_clock\|backoff_[12]3db_rxgain\|\(original\|high_power\)_[tr]x_\?gain\)\)\?\)_928\(0_2\|5\(_1_2\)\?\)\[\]\[[236]\][ ]=' drivers/net/wireless/ath9k/initvals.h
+ defsnc 'static[ ]u32[ ]channel_tbl\[15\]\[9\][ ]=' drivers/staging/agnx/rf.c
+ defsnc 'static[ ]const[ ]u32[\n]gain_table\[\][ ]=' drivers/staging/agnx/rf.c
+ accept '<[frs]:[0-9]*x[0-9]*>[\n][01 \n]*' 'drivers/staging/asus_oled/\(linux\(_fr\?\)\?\|tux\(_r2\?\)\?\|zig\).txt'
+ defsnc 'static[ ]unsigned[ ]char[ ]\(aud\|vid\)_regs\[\][ ]=' drivers/staging/go7007/s2250-board.c
+ defsnc 'static[ ]u16[ ]vid_regs_fp\[\][ ]=' drivers/staging/go7007/s2250-board.c
+ blobname 's2250\(_loader\)\?\.fw' drivers/staging/go7007/s2250-loader.c
+ blobna 'me_xilinx_download' 'drivers/staging/meilhaus/.*'
+ accept 'int[ ]me_xilinx_download[(]' 'drivers/staging/meilhaus/mefirmware\.[ch]'
+ blobname 'me46[01]0\(_bosch\)\?\.bin' drivers/staging/meilhaus/me4600_device.c
+ accept '\([ ]if[ ][(]me4600_device->base\.info\.pci\.device_id[ ]==[ ]PCI_DEVICE_ID_MEILHAUS_ME4610[)][ ][{][ ][/][/]Jekyll[ ]<=>[ ]me4610\|#ifdef[ ]BOSCH\|#else[ ][/][/]~BOSCH\)[\n][ ][ ]err[ ]=[\n][ ][ ][ ][ ][ ][ ]me_xilinx_download[(]me4600_device' drivers/staging/meilhaus/me4600_device.c
+ blobname 'me6000\.bin' drivers/staging/meilhaus/me6000_device.c
+ accept '[ ][/][*][ ]Download[ ]the[ ]xilinx[ ]firmware[ ][*][/][\n][ ]err[ ]=[ ]me_xilinx_download[(]me6000_device' drivers/staging/meilhaus/me6000_device.c
+ defsnc '[ ][}][ ]grtpkts\[\][ ]=' drivers/staging/mimio/mimio.c
+ defsnc 'u16_t[ ]zgTkipSbox\(Lower\|Upper\)\[256\][ ]=' drivers/staging/otus/80211core/ctkip.c
+ accept '[ ]*[/][*][ ]*0\([ ]*[123]\)*[ ]*[*][/][\n][ ]*[/][*][ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9\([ ][0-9]\)*[ ][*][/]' drivers/staging/otus/80211core/ctxrx.c
+ defsnc 'u32_t[ ]crc32_tab\[\][ ]=' drivers/staging/otus/80211core/cwep.c
+ blob 'const[ ]u32_t[ ]zc\(DK\|P2\)\?Fw\(Buf\)\?Image\(SPI\)\?\(\[\][ ]*=[ ]*[{][^;]*[}]\|Size[ ]*=[ ]*[0-9]*\)[;]\([\n][\n]*const[ ]u32_t[ ]zc\(DK\|P2\)\?Fw\(Buf\)\?Image\(SPI\)\?\(\[\][ ]*=[ ]*[{][^;]*[}]\|Size[ ]*=[ ]*[0-9]*\)[;]\)*' 'drivers/staging/otus/hal/hp.*fwu.*\.c'
+ blob 'extern[ ]const[ ]u32_t[ ]zc\(DK\|P2\)\?Fw\(Buf\)\?Image\(SPI\)\?\(\[\]\|Size\)[;]\([\n]extern[ ]const[ ]u32_t[ ]zc\(DK\|P2\)\?Fw\(Buf\)\?Image\(SPI\)\?\(\[\]\|Size\)[;]\)*' drivers/staging/otus/hal/hpmain.c
+ defsnc '[ ][ ][ ][ ]u32_t[ ]eepromBoardData\[15\]\[6\][ ]=' drivers/staging/otus/hal/hpmain.c
+ defsnc 'static[ ]const[ ]u32_t[ ]channel_frequency_11A\[\][ ]=' drivers/staging/otus/ioctl.c
+ defsnc 'static[ ]const[ ]u32_t[ ]\(ar5416Modes\|otusBank\)\[\]\[[36]\][ ]=' drivers/staging/otus/hal/otus.ini
+ defsnc '[ ][ ][ ][ ]static[ ]UINT32[ ]MD5Table\[64\][ ]=' 'drivers/staging/rt28[67]0/common/md5\.c'
+ defsnc 'static[ ]uint32[ ][FR]Sb\[256\][ ]=' 'drivers/staging/rt28[67]0/common/\(md5\|cmm_aes\)\.c'
+ defsnc '\(UCHAR\|u8\)[ ]RateSwitchTable\(11B\?G\?\(N[123]S\(ForABand\)\?\)\?\)\?\[\][ ]=' 'drivers/staging/rt28[67]0/common/mlme\.c'
+ defsnc '\(UCHAR\|u8\)[ ]*ZeroSsid\[32\][ ]=' 'drivers/staging/rt28[67]0/common/mlme\.c'
+ defsnc '\(RTMP_RF_REGS\|struct[ ]rt_rtmp_rf_regs\)[ ]RF2850RegTable\[\][ ]=' 'drivers/staging/rt28[67]0/common/\(mlme\.c\|cmm_asic\.c\)'
+ defsnc '\(FREQUENCY_ITEM\|struct[ ]rt_frequency_item\)[ ]FreqItems3020\[\][ ]=' 'drivers/staging/rt28[67]0/common/\(mlme\.c\|cmm_asic\.c\)'
+ blob '\(UCHAR\|u8\)[ ]FirmwareImage\(_\(2870\|30[79]0\)\)\?[ ]\[\][ ]=[ ][{][^;]*[}][ ][;]' 'drivers/staging/rt\(28[67]\|30[79]\)0/common/firmware\(_3070\)\?\.h'
+ defsnc 'ULONG[ ][ ]*BIT32\[\][ ]=' 'drivers/staging/rt28[67]0/common/rtmp_init\.c'
+ defsnc 'const[ ]unsigned[ ]short[ ]ccitt_16Table\[\][ ]=' 'drivers/staging/rt\(28[67]0\|3090\)/common/rtmp_init\.c'
+ blobna '\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c'
+ blobname 'rate\.bin' drivers/staging/rt2870/rtmp_init.c
+ defsnc '\(U\(INT\|CHAR\)\|u\(32\|8\)\)[ ]\(Tkip_Sbox_\(Lower\|Upper\)\|SboxTable\)\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_tkip\.c'
+ defsnc '\(UINT\|u32\)[ ]FCSTAB_32\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_wep\.c'
+ accept '[ ]*#[ ]*define[ ]\(STA_PROFILE\|CARD_INFO\)_PATH[ ]*["][/]etc[/]Wireless[/]RT\(28[67]\|307\)0STA[/]RT\(28[67]\|307\)0STA\(Card\)\?\.dat["]' 'drivers/staging/rt\(28[67]0\|3070\)/rt_linux\.h'
+ blobname '\([/]etc[/]Wireless[/]\)\?\(RT\(28[67]\|307\)0STA[/]\)\?\(RT\(28[67]\|307\)0STA\|rt28[67]0\)\.bin' 'drivers/staging/rt\(28[67]0\|3070\)/rt_linux\.h'
+ blobname '\([/]etc[/]Wireless[/]\)\?\(RT28[67]0STA[/]\)\?e2p\.bin' 'drivers/staging/rt\(28[67]0\|3070\)/rt_ate\.[hc]'
+ defsnc '\([ ][ ][ ][ ]\|[ ]\)u_int32_t[ ]ralinkrate\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/rt_linux\.c'
+ defsnc 'unsigned[ ]char[ ]\(QUALITY\|STRENGTH\)_MAP\[\][ ]=' drivers/staging/rtl8187se/r8180_core.c
+ defsnc 'u\(8\|16\|32\)[ ]rtl8225\(\(a\|bcd\?\)_rxgain\|agc\|tx_\(gain_cck\|power\)_ofdm\|tx_power_cck\(_ch14\)\?\)\[\]=' drivers/staging/rtl8187se/r8180_rtl8225.c
+ defsnc '\(static[ ]const[ ]\)\?u\(8\|16\|32\)[ ]\(rtl8225\(z2\)\?_\(threshold\|gain_\(a\|bg\)\|chan\|rxgain\|agc\|tx_\(gain_cck\|power\)_ofdm\|tx_power_cck\(_ch14\)\?\)\|ZEBRA2_CCK_OFDM_GAIN_SETTING\)\[\][ ]\?=' drivers/staging/rtl8187se/r8180_rtl8225z2.c
+ defsnc 'static[ ]short[ ]rtl8255_agc\[\]=' drivers/staging/rtl8187se/r8180_rtl8255.c
+ defsnc '[ ]\?static[ ]u\(8\|32\)[ ]\(MAC_REG_TABLE\[\]\[2\]\|[ ]*ZEBRA_\(AGC\|RF_RX_GAIN_TABLE\)\[\]\|OFDM_CONFIG\[\]\)=' drivers/staging/rtl8187se/r8185b_init.c
+ accept '[ ]-[ ]move[ ]firmware[ ]loading[ ]to[ ]request_firmware[(][)]' drivers/staging/slicoss/README
+ blobname '\(\(oasis\|gb\)_rcv\|slic_\(oasis\|mojave\)\)\.bin' drivers/staging/slicoss/slicoss.c
+
+ blob 'static[ ]unsigned[ ]char[ ]xilinx_firm\(_4610\)\?\[\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]' 'drivers/staging/me4000/me4\(00\|61\)0_firmware\.h'
+ blob 'static[ ]struct[ ]PHY_UCODE[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode.h
+ blob 'static[ ]unsigned[ ]char[ ]SaharaUCode\[2\]\[57972\][ ]=[^;]*[;]' drivers/staging/sxg/saharadbgdownload.h
+ blob '#include[ ]["]\(sxgphycode\(-1\.2\)\?\|saharadbgdownload\)\.h["]\([\n][\n]*#include[ ]["]\(sxgphycode\(-1\.2\)\?\|saharadbgdownload\)\.h["]\)*' drivers/staging/sxg/sxg.c
+ blob 'static[ ]u8[ ]\(Mojave\|Oasis\)UCode\[2\]\[65536\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\(dbg\)\?\)download\.h'
+ blob 'static[ ]u8[ ]\(GB\|Oasis\)RcvUCode\[2560\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\)rcvucode\.h'
+ blob '#include[ ]["]\(gb\|oasis\)\(dbg\)\?\(download\|rcvucode\)\.h["]\([\n][\n]*#include[ ]["]\(gb\|oasis\)\(dbg\)\?\(download\|rcvucode\)\.h["]\)*' drivers/staging/slicoss/slicoss.c
+ blobna 'instruction[ ]=[ ][^;]*\(Oasis\|GB\|Mojave\)\(Rcv\)\?UCode[^:}]*[;]' drivers/staging/slicoss/slicoss.c
+ blobna 'seq_printf[(]seq[,][ ]["][^"]*%s[ ]%s[^"]*["][,][ \n]*\(GB_RCV\|MOJAVE_\)UCODE_VERS_STRING[,][ ]\(GB_RCV\|MOJAVE_\)UCODE_VERS_DATE[)][;]\([ \n]*seq_printf[(]seq[,][ ]["][^"]*%s[ ]%s[^"]*["][,][ \n]*\(GB_RCV\|MOJAVE_\)UCODE_VERS_STRING[,][ ]\(GB_RCV\|MOJAVE_\)UCODE_VERS_DATE[)][;]\)*' drivers/staging/slicoss/slicoss.c
+ blobna 'numsects[ ]=[ ][OM]NumSections[;][\n][ ]*for[ ][(][^;]*[;][^;]*[;][^;{]*[)][ ][{][\n][^}]*[\n][ ][ ][}]' drivers/staging/slicoss/slicoss.c
+
+ # post 2.6.29 patches
+ defsnc 'static[ ]int[ ]atom_dst_to_src\[8\]\[4\][ ]=' drivers/gpu/drm/radeon/atom.c
+ defsnc 'const[ ]unsigned[ ]char[ ]map_table\[\][ ]=' drivers/input/lirc/lirc_ttusbir.c
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?struct[ ]au8522_register_config[ ]lpfilter_coef\[\][ ]=' drivers/media/dvb/frontends/au8522_decoder.c
+ defsnc 'static[ ]const[ ]u8[ ]jpeg_head\[\][ ]=' drivers/media/video/gspca/jpeg.h
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init_ov\(7[27]2x\|965x\(_2\)\?\)\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]probe_tb\[\]\[4\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]const[ ]u8[ ]eeprom_data\[\]\[3\][ ]=' drivers/media/gspca/tv8532.c
+ defsnc '\(static[ ]uint32_t\|[}]\)[ ]nv04_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv04_graph.c
+ defsnc 'static[ ]int[ ]nv10_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv10_graph.c
+
+ # This looks suspicious, but it pretty much just sets stuff to zero.
+ initnc 'static[ ]__u8[ ]mode8420\(pro\|con\)\[\][ ]=' drivers/media/video/cs8420.h
+
+ # quite suspicious
+ # arch/parisc/kernel/perf_images.h
+ initc 'static[ ]uint32_t[ ]onyx_images\[\]\[PCXU_IMAGE_SIZE[/]sizeof[(]uint32_t[)]\][ ]__read_mostly[ ]='
+ initc 'static[ ]uint32_t[ ]cuda_images\[\]\[PCXW_IMAGE_SIZE[/]sizeof[(]uint32_t[)]\][ ]__read_mostly[ ]='
+
+ # These are regarded as ok
+ initnc 'static[ ]const[ ]u8[ ]SN9C102_\(Y\|UV\)_QTABLE[01]\[64\][ ]=[ ][{]'
+ initnc '[ ]static[ ]\(const[ ]\)\?u8[ ]jpeg_header\[589\][ ]=[ ][{]' media/video/sn9c102/sn9c102_core.c
+ accept '[ ][ ]\?err[ ]=[ ]sn9c102_write_const_regs[(]cam\(,[ \n]\+[{]0x[0-9a-fA-F][0-9a-fA-F],[ ]0x[0-9a-fA-F][0-9a-fA-F][}]\)*[)][;]'
+
+ # too lax?
+ defsnc 'static[ ]yyconst[ ]\(flex_int\(16\|32\)_t\|\(\(short[ ]\)\?int\)\)[ ]yy_[^[]*\[[][0-9]*\][ ]='
+ defsnc 'static[ ]const[ ]\(yytype_u\?int\(8\|16\)\|\(unsigned[ ]\)\?\(short\([ ]int\)\?\|char\)\)[ ]yy[^[]*\[\][ ]='
+ initnc '\([ ]\)\?static[ ]\(const[ ]\)\?\(unsigned[ ]\(short\|char\)\|struct[ ]SiS_[^ ]*\)[ ]SiS[^[]*\(\[[][ *0-9]*\]\)\+[ ]*='
+
+ initnc 'static[ ]const[ ]a3d_Hrtf_t[ ]A3dHrirZeros[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]a3d_Hrtf_t[ ]A3dHrirImpulse[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]a3d_Hrtf_t[ ]A3dHrirOnes[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]a3d_Hrtf_t[ ]A3dHrirSatTest[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]a3d_Hrtf_t[ ]A3dHrirDImpulse[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]a3d_ItdDline_t[ ]A3dItdDlineZeros[ ]=[ ][{]'
+ initnc 'static[ ]auxxEqCoeffSet_t[ ]asEqCoefsNormal[ ]=[ ][{]'
+ initnc 'static[ ]xtalk_dline_t[ ]const[ ]alXtalkDlineTest[ ]=[ ][{]'
+ initnc 'static[ ]struct[ ]nand_ecclayout[ ]rtc_from4_nand_oobinfo[ ]=[ ][{]'
+ initnc 'static[ ]const[ ]s16[ ]tempLUT\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]viaLUT\[\][ ]='
+ initnc 'static[ ]struct[ ][{][ ]int[ ]xres,[ ]yres,[ ]left,[ ]right,[ ]upper,[ ]lower,[ ]hslen,[ ]vslen,[ ]vfreq[;][ ][}][ ]timmings\[\][ ]__initdata[ ]=[ ][{]'
+ initnc 'static[ ]struct[ ]platinum_regvals[ ]platinum_reg_init_[0-9]*[ ]=[ ][{]'
+ initnc '[}][ ]sisfb_ddc[sf]modes\[\][ ]__devinitdata[ ]='
+ initnc 'static[ ]struct[ ]dvb_pll_desc[ ][^\n]*[ ]=[ ][{]'
+ initnc 'static[ ]u32[ ]LABELPATCHES\[\][ ]__attribute[(][(]unused[)][)][ ]='
+
+ initnc 'static[ ]dbdev_tab_t[ ]dbdev_tab\[\][ ]='
+ accept '\(EXP\|LOG\|ATAN\)TBL:'"$sepx$blobpat*"
+ initnc 'static[ ]char[ ]fm_volume_table\[128\][ ]='
+ initnc 'unsigned[ ]int[ ]snd_gf1_scale_table\[SNDRV_GF1_SCALE_TABLE_SIZE\][ ]='
+ # remaining after original deblob_2_6_24, not fully checked
+
+ oprepline '#define[ ]OV51[18]_\(Y\|UV\)QUANTABLE[ ][{]'
+ initnc '[ ][ ]static[ ]unsigned[ ]char[ ]const[ ]data_bit\[64\][ ]='
+ initnc '[ ][ ]static[ ]const[ ]u8[ ]data_sbit\[32\][ ]='
+ initnc '[ ]\.RightCoefs[ ]='
+ initnc '[ ]#define[ ]WakeupSeq[ ][ ][ ][ ][{]'
+ initnc '[ ]SetRate44100\[\][ ]='
+ initnc '[ ]const[ ]short[ ]period\[32\][ ]='
+ defsnc '[ ]\(const[ ]static\|static[ ]const\)[ ]int[ ]desc_idx_table\[\][ ]=' 'arch/arm/include/asm/hardware/iop3xx-adma.h|include/asm-arm/hardware/iop3xx-adma.h'
+ initnc '[ ]int[ ]prop_bcomm_irq\[3[*]16\][ ]='
+ initnc '[ ]static[ ]char[ ]logSlopeTable\[128\][ ]='
+ initnc '[ ]static[ ]const[ ]int[ ]uc_\(dup\|word\)_table\[\]\[2\][ ]='
+ initnc '[ ]static[ ]const[ ]struct[ ]mc7_timing_params[ ]mc7_timings\[\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]biphase_tbl\[\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]cs170\[7[ ][*][ ]8\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]cs3[13]a\[8[ ][*][ ]4\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]dramsr13\[12[ ][*][ ]5\][ ]='
+ defsnc '[ ]static[ ]const[ ]u8[ ]log10\[\][ ]=' drivers/net/wireless/zd1211rw/zd_chip.c
+ initnc '[ ]static[ ]const[ ]u8[ ]mpeg_hdr_data\[\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]sdramtype\[13\]\[5\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]t\[\][ ]='
+ initnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]avg_pkts\[NCCTRL_WIN\][ ]='
+ initnc '[ ]static[ ]const[ ]unsigned[ ]short[ ]ac97_defaults\[\][ ]='
+ initnc '[ ]static[ ]int[ ]exp_lut\[256\][ ]='
+ initnc '[ ]static[ ]u16[ ]jpeg_tables\[\]\[70\][ ]='
+ initnc '[ ]static[ ]u16[ ]tables\[\][ ]='
+ initnc '[ ]static[ ]u32[ ]logMagTable\[128\][ ]='
+ initnc '[ ]static[ ]u8[ ]init_bufs\[13\]\[5\][ ]='
+ initnc '[ ]static[ ]u8[ ]sine[ ]\[\][ ]='
+ initnc '[ ]static[ ]u_short[ ]geometry_table\[\]\[[45]\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]CRCTable1\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]CRCTable2\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]default_colors\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]iso_regs\[8\]\[4\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]log_scale\[101\][ ]=' sound/oss/pss.c
+ initnc '[ ]static[ ]unsigned[ ]char[ ]msg\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]static_pad\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]table_alaw2ulaw\[\][ ]='
+ initnc '[ ]static[ ]unsigned[ ]char[ ]table_ulaw2alaw\[\][ ]='
+ defsnc '[ ]u32[ ]reg_boundaries\[\][ ]=' drivers/net/bnx2.c
+ initnc '[ ]u8[ ]b\[\][ ]='
+ initnc '[ ]uint8_t[ ]tx\[\][ ]='
+ initnc '[ ]unsigned[ ]char[ ]saa7111_regs\[\][ ]='
+ initnc '[ ]unsigned[ ]char[ ]sas_pcd_m_pg\[\][ ]='
+ initnc '[ ][}][ ]modedb\[5\][ ]='
+ defsnc '[ ][}][ ]reg_tbl\[\][ ]=' drivers/net/bnx2.c
+ initnc '[ ][}][ ]vals\[\][ ]='
+ initnc '[ ][}][ ]vm_devices\[\][ ]='
+ initnc '[ ][ ][ ][ ]static[ ]const[ ]code[ ]distfix\[32\][ ]='
+ initnc '[ ][ ][ ][ ]static[ ]const[ ]code[ ]lenfix\[512\][ ]='
+ initnc '[ ][ ]int[ ]poly\[\]='
+ defsnc '[ ][ ]static[ ]const[ ]unsigned[ ]char[ ]asso_values\[\][ ]=' scripts/genksyms/keywords.c_shipped
+ initnc '[ ][ ]static[ ]unsigned[ ]char[ ]asso_values\[\][ ]='
+ initnc '[ ][ ][}][ ]cards_ds\[\][ ]='
+ initnc '[ ][ ][ ][ ]static[ ]const[ ]int8[ ]countLeadingZerosHigh\[\][ ]='
+ initnc '[ ][ ][ ][ ]static[ ]const[ ]unsigned[ ]short[ ]d\(base\|ext\)\[32\][ ]='
+ initnc '#define[ ]OV511_QUANTABLESIZE[ ]64'
+ initnc 'BYTE[ ]BtCard::SRAMTable_\(NTSC\|PAL\)\[\][ ]='
+ initnc 'BYTE[ ]SRAMTable\[\]\[[ ]60[ ]\][ ]='
+ accept 'irq_prio_\([hdl]\|l[cd]\):'"$sepx$blobpat*" 'arch/arm/inlcude/asm/hardware/entry-macro-iomd.S|include/asm-arm/hardware/entry-macro-iomd.S'
+ initc '__u8[ ]_ascebc\[256\][ ]='
+ initc '__u8[ ]_ebc_tolower\[256\][ ]='
+ initc '__u8[ ]_ebc_toupper\[256\][ ]='
+ initnc 'adapter_tag_info_t[ ]aic7[9x]xx_tag_info\[\][ ]='
+ initnc 'char[ ]dmasound_alaw2dma8\[\][ ]='
+ initnc 'char[ ]dmasound_ulaw2dma8\[\][ ]='
+ initnc 'const[ ]struct[ ]aper_size_info_16[ ]agp3_generic_sizes\[AGP_GENERIC_SIZES_ENTRIES\][ ]='
+ initnc 'const[ ]u16[ ]crc_itu_t_table\[256\][ ]='
+ initnc 'const[ ]u8[ ]byte_rev_table\[256\][ ]='
+ initnc 'const[ ]u8[ ]crc7_syndrome_table\[256\][ ]='
+ initnc 'int[ ]snd_sf_vol_table\[128\][ ]='
+ initnc 'static[ ]u_char[ ]irq_to_siubit\[\][ ]='
+ initnc 'static[ ]u_char[ ]irq_to_siureg\[\][ ]='
+ initnc 'static[ ]Byte_t[ ]RData\[RDATASIZE\][ ]='
+ initnc 'static[ ]__const__[ ]__u16[ ]gx_coeff\[256\][ ]='
+ initnc 'static[ ]__u8[ ]init7121ntsc\[\][ ]='
+ initnc 'static[ ]__u8[ ]init7121pal\[\][ ]='
+ initnc 'static[ ]byte[ ]capidtmf_leading_zeroes_table\[0x100\][ ]='
+ defsnc 'static[ ]char[ ]channel_map_madi_[sdq]s\[HDSPM_MAX_CHANNELS\][ ]=' sound/pci/rme9652/hdspm.c
+ initnc 'static[ ]char[ ]coefficients\[NM_TOTAL_COEFF_COUNT[ ][*][ ]4\][ ]='
+ initnc 'static[ ]char[ ]ecc_syndrome_table\[\][ ]='
+ initnc 'static[ ]char[ ]isdn_audio_alaw_to_ulaw\[\][ ]='
+ initnc 'static[ ]char[ ]isdn_audio_ulaw_to_alaw\[\][ ]='
+ initnc 'static[ ]char[ ]mix_cvt\[101\][ ]='
+ initnc 'static[ ]char[ ]opl3_volume_table\[128\][ ]='
+ initnc 'static[ ]const[ ]__u16[ ]crc10_table\[256\][ ]='
+ initnc 'static[ ]const[ ]__u32[ ]crc_c\[256\][ ]='
+ initnc 'static[ ]const[ ]fixp_t[ ]cos_table\[46\][ ]='
+ initnc 'static[ ]const[ ]int[ ]init_seq\[\][ ]='
+ initnc 'static[ ]const[ ]int[ ]mobile_vid_table\[32\][ ]='
+ initnc 'static[ ]const[ ]s16[ ]snd_opl4_pitch_map\[0x600\][ ]='
+ initnc 'static[ ]const[ ]s8[ ]budtab\[256\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]aper_size_info_8[ ]via_generic_sizes\[9\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]color[ ]clut_vga16\[16\][ ]='
+ defsnc 'static[ ]const[ ]struct[ ]gain_entry[ ]gain_table\[2\]\[108\][ ]=' drivers/net/wireless/iwl-4965.c
+ initnc 'static[ ]const[ ]struct[ ]mV_pos[ ]__initdata[ ]mobilevrm_mV\[32\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]mV_pos[ ]__initdata[ ]vrm85_mV\[32\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]menelaus_vtg_value[ ]vcore_values\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]opl4_region[ ]regions_[0-9a-frums]*\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]regval[ ]regval_table\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5222\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5225_2527\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5226\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2522\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2523\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2524\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2525\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2525e\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2528\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_noseq\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_seq\[\][ ]='
+ defsnc 'static[ ]const[ ]u16[ ]Sbox\[256\][ ]=' # 'drivers/staging/rtl8192u/r819xU_firmware.c' and elsewhere
+ initnc 'static[ ]const[ ]u16[ ]count_lut\[\][ ]=' drivers/misc/tsl2550.c
+ # drivers/net/e1000e/phy.c
+ initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225bcd_rxgain\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225z2_rxgain\[\][ ]='
+ defsnc 'static[ ]const[ ]u16[ ]stufftab\[5[ ][*][ ]256\][ ]=' drivers/isdn/gigaset/isocdata.c
+ initnc 'static[ ]const[ ]u16[ ]tkip_sbox\[256\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]wm8753_reg\[\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]SS[0-3]\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]S[1-8]\[64\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]T[0-5]\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]Tm\[24\]\[8\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]bass_table\[41\]\[5\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]bf_sbox\[256[ ][*][ ]4\][ ]='
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp0222\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp1110\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp3033\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp4404\[256\][ ]=' crypto/camellia.c
+ initnc 'static[ ]const[ ]u32[ ]crc32c_table\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]db_table\[101\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]m8xx_size_to_gray\[M8XX_SIZES_NO\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]mds\[4\]\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]pc2\[1024\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]s[1-7]\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]sb8\[256\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]tfrc_calc_x_lookup\[TFRC_CALC_X_ARRSIZE\]\[2\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]treble_table\[41\]\[5\][ ]='
+ initnc 'static[ ]const[ ]u64[ ][CT][0-7]\[256\][ ]='
+ initnc 'static[ ]const[ ]u64[ ]sbox[1-4]\[256\][ ]='
+ initnc 'static[ ]const[ ]u64[ ]sha512_K\[80\][ ]=' 'crypto/sha512\(_generic\)\?.c'
+ initnc 'static[ ]const[ ]u8[ ]Tr\[4\]\[8\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]aes_sbox\[256\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]calc_sb_tbl\[512\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]exp_to_poly\[492\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]legal_ansi_char_array\[0x40\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]parity\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]pc1\[256\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]poly_to_exp\[255\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]q[01]\[256\][ ]='
+ defsnc 'static[ ]const[ ]u8[ ]ratio_lut\[\][ ]=' drivers/misc/tsl2550.c
+ initnc 'static[ ]const[ ]u8[ ]rs\[256\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_agc\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck_ch14\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_gain_cck_ofdm\[\][ ]='
+ initnc 'static[ ]const[ ]u_char[ ]irq_to_siubit\[\][ ]='
+ initnc 'static[ ]const[ ]u_char[ ]irq_to_siureg\[\][ ]='
+ initnc 'static[ ]const[ ]uint8_t[ ]parity\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]\(UV\|Y\)_QUANTABLE\[64\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]__initdata[ ]mV_mobilevrm\[32\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]__initdata[ ]mV_vrm85\[32\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]barco_p1\[2\]\[9\]\[7\]\[3\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]bitcounts\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]blue\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]chktab[hl]\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]comet_miireg2offset\[32\][ ]='
+ initnc 'static[ ]\(const[ ]\)\?unsigned[ ]char[ ]euc2sjisibm_g3upper_map\[\]\[2\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]green\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]hash_table_ops\[64[*]4\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]hid_keyboard\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]mts_direction\[256[/]8\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]red\[256\][ ]='
+ initnc 'static[ ]\(const[ ]\)\?unsigned[ ]char[ ]sjisibm2euc_map\[\]\[2\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]vol_cvt_datt\[128\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]int[ ]MulIdx\[16\]\[16\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]int[ ]crctab32\[\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]crc_flex_table\[\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]logtable\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]wd7000_iobase\[\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]x86_keycodes\[256\][ ]='
+ initnc 'static[ ]const[ ]unsigned[ ]table\[\][ ]='
+ initnc 'static[ ]int[ ]MV300_reg_8bit\[256\][ ]\?=' drivers/video/atafb.c
+ initnc 'static[ ]int[ ]fifo_map\[\]\[MAX_TX_FIFOS\][ ]='
+ initnc 'static[ ]int[ ]initial_lfsr\[\][ ]='
+ initnc 'static[ ]int[ ]log_tbl\[129\][ ]='
+ initnc 'static[ ]int[ ]miro_fmtuner\[\][ ][ ]=' drivers/media/video/bt8xx/bt-cards.c
+ initnc 'static[ ]int[ ]miro_tunermap\[\][ ]=' drivers/media/video/bt8xx/bt-cards.c
+ initnc 'static[ ]int[ ]register_size\[\][ ]='
+ initnc 'static[ ]int[ ]reserve_list\[MAX_RES_ARGS\][ ]='
+ initnc 'static[ ]int[ ]reverse6\[64\][ ]='
+ initnc 'static[ ]short[ ]attack_time_tbl\[128\][ ]='
+ defsnc 'static[ ]short[ ]beep_wform\[256\][ ]=' 'sound/ppc/beep.c|sound/oss/dmasound/dmasound_awacs.c|arch/ppc/8xx_io/cs4218_tdm.c'
+ initnc 'static[ ]short[ ]decay_time_tbl\[128\][ ]='
+ initnc 'static[ ]short[ ]isdn_audio_[ua]law_to_s16\[\][ ]='
+ initnc 'static[ ]struct[ ]iwl\(3945\)\?_tx_power[ ]power_gain_table\[2\]\[IWL_MAX_GAIN_ENTRIES\][ ]='
+ initnc 'static[ ]struct[ ]ovcamchip_regvals[ ]regvals_init_\(76be\|7[16]20\|7x10\)\[\][ ]='
+ initnc 'static[ ]struct[ ]regval_list[ ]ov7670_default_regs\[\][ ]='
+ initnc 'static[ ]struct[ ]s_c2[ ]SetRate48000\[\][ ]='
+ initnc 'static[ ]struct[ ]tea6420_multiplex[ ]TEA6420_line\[MXB_AUDIOS[+]1\]\[2\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_16_100\[\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_16_133\[\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_24_100\[\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_24_133\[\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_8_100\[\][ ]='
+ initnc 'static[ ]struct[ ]wm_info[ ]i810_wm_8_133\[\][ ]='
+ initnc 'static[ ]struct[ ][{][ ]struct[ ]fb_bitfield[ ]red,[ ]green,[ ]blue,[ ]transp[;][ ]int[ ]bits_per_pixel[;][ ][}][ ]colors\[\][ ]='
+ initnc 'static[ ]u16[ ]asEqCoefsPipes\[64\][ ]='
+ initnc 'static[ ]u16[ ]asEqCoefsZeros\[50\][ ]='
+ initnc 'static[ ]u16[ ]asEqOutStateZeros\[48\][ ]='
+ initnc 'static[ ]u16[ ]default_key_map[ ]\[256\][ ]='
+ initnc 'static[ ]u16[ ]eq_levels\[64\][ ]='
+ initnc 'static[ ]u32[ ][ ]crc32tab\[\][ ]__attribute__[ ][(][(]aligned[(]8[)][)][)][ ]='
+ initnc 'static[ ]u32[ ]ac3_frames\[3\]\[32\][ ]='
+ initnc 'static[ ]u32[ ]adwDecim8\[33\][ ]='
+ initnc 'static[ ]u32[ ]h_prescale\[64\][ ]='
+ initnc 'static[ ]u32[ ]v_gain\[64\][ ]='
+ initnc 'static[ ]u8[ ]SRAM_Table\[\]\[60\][ ]='
+ initnc 'static[ ]u8[ ]alps_tdee4_stv0297_inittab\[\][ ]='
+ defsnc 'static[ ]u8[ ]bnx2_570[68]_stats_len_arr\[BNX2_NUM_STATS\][ ]=' drivers/net/bnx2.c
+ initnc 'static[ ]u8[ ]flit_desc_map\[\][ ]='
+ defsnc 'static[ ]u8[ ]init_tab[ ]\?\[\][ ]=' 'drivers/media/dvb/frontends/cx2270\(0\|2\)\.c'
+ defsnc 'static[ ]u8[ ]mac_reader\[\][ ]=' drivers/net/wireless/atmel.c
+ initnc 'static[ ]u8[ ]mt2131_config1\[\][ ]=' drivers/media/dvb/frontends/mt2131.c # <= 2.6.25
+ initnc 'static[ ]u8[ ]mt2131_config1\[\][ ]=' drivers/media/common/tuners/mt2131.c # >= 2.6.26
+ initnc 'static[ ]u8[ ]mt2266_init2\[\][ ]=' drivers/media/dvb/frontends/mt2266.c # <= 2.6.25
+ initnc 'static[ ]u8[ ]mt2266_init2\[\][ ]=' drivers/media/common/tuners/mt2266.c # >= 2.6.26
+ initnc 'static[ ]u8[ ]opera1_inittab\[\][ ]='
+ initnc 'static[ ]u8[ ]saa7113_init_regs\[\][ ]='
+ initnc 'static[ ]u8[ ]samsung_tbmu24112_inittab\[\][ ]='
+ initnc 'static[ ]u8[ ]w1_crc8_table\[\][ ]='
+ initnc 'static[ ]u_char[ ]const[ ]data_sizes_32\[32\][ ]='
+ initnc 'static[ ]u_long[ ]ident_map\[32\][ ]='
+ initnc 'static[ ]u_short[ ]alt_map\[NR_KEYS\][ ]='
+ initnc 'static[ ]u_short[ ]altgr_map\[NR_KEYS\][ ]='
+ initnc 'static[ ]u_short[ ]ctrl_alt_map\[NR_KEYS\][ ]='
+ initnc 'static[ ]u_short[ ]ctrl_map\[NR_KEYS\][ ]*='
+ initnc 'static[ ]u_short[ ]shift_ctrl_map\[NR_KEYS\][ ]='
+ initnc 'static[ ]u_short[ ]shift_map\[NR_KEYS\][ ]*='
+ initnc 'static[ ]uchar[ ]perm1\[56\][ ]='
+ initnc 'static[ ]uchar[ ]perm2\[48\][ ]='
+ initnc 'static[ ]uchar[ ]perm3\[64\][ ]='
+ initnc 'static[ ]uchar[ ]perm4\[48\][ ]='
+ initnc 'static[ ]uchar[ ]perm5\[32\][ ]='
+ initnc 'static[ ]uchar[ ]perm6\[64\][ ]='
+ initnc 'static[ ]uchar[ ]sbox\[8\]\[4\]\[16\][ ]='
+ initnc 'static[ ]uint16_t[ ]crc_table\[256\][ ]='
+ initnc 'static[ ]uint8_t[ ]lpfcAlpaArray\[\][ ]='
+ initnc 'static[ ]\(const[ ]\)\?uint8_t[ ]seqprog\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]V110_OffMatrix_9600\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]V110_OnMatrix_9600\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]a2232_65EC02code\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]atkbd_set3_keycode\[512\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]atkbd_unxlate_table\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]banner_table\[\][ ]=' arch/sh/boards/superh/microdev/led.c
+ initnc 'static[ ]unsigned[ ]char[ ]bootlogo_bits\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]bus2core_8260\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]bus2core_8280\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]caseorder\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]crystal_key\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]dsp_ulaw\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]expressiontab\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]header2\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]hidp_keycode\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]nkbd_keycode\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]pan_volumes\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]parm_block\[32\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]raw3270_ebcgraf\[64\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]rfcomm_crc_table\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]rwa_unlock\[\][ ]__initdata[ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]seqprog\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]snd_opl4_volume_table\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]splash_bits\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]sunkbd_keycode\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]ufs_fragtable_8fpb\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]ufs_fragtable_other\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]ulaw_dsp\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]usb_kbd_keycode\[256\][ ]='
+ defsnc 'static[ ]unsigned[ ]char[ ]vga_font\[cmapsz\][ ]\(BTDATA[ ]\)\?=' arch/sparc/kernel/btext.c
+ initnc 'static[ ]unsigned[ ]char[ ]voltab[12]\[128\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]vpd89_data\[\][ ]='
+ initnc 'static[ ]unsigned[ ]char[ ]xtkbd_keycode\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]ac3_bitrates\[32\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]bass_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]bitrates\[3\]\[16\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]isa_dma_port\[8\]\[7\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]master_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]mixer_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]pan_table\[63\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]snapper_bass_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]snapper_treble_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]treble_volume_table\[\][ ]='
+ initnc 'static[ ]unsigned[ ]int[ ]valid_mem\[\][ ]='
+ initnc 'static[ ]unsigned[ ]long[ ]arthur_to_linux_signals\[32\][ ]='
+ initnc 'static[ ]unsigned[ ]long[ ]shmedia_opcode_table\[64\][ ]='
+ initnc 'static[ ]unsigned[ ]nv\([34]\|10\)TableP\(FIFO\|GRAPH\|RAMIN\)\[\]\[2\][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]fcstab\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]init[1234]\[128\][ ][/][*]__devinitdata[*][/][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]log_table\[LOG_TABLE_SIZE[*]2\][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]rc_ioport\[\][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]translations\[\]\[256\][ ]='
+ initnc 'static[ ]unsigned[ ]short[ ]treble_parm\[12\]\[9\][ ]='
+ initnc 'struct[ ]RGBColors[ ]TextCLUT\[256\][ ]='
+ initnc 'struct[ ]VgaRegs[ ]GenVgaTextRegs\[NREGS[+]1\][ ]='
+ defsnc 'struct[ ]battery_thresh[ ][ ]*\(spitz\|sharpsl\)_battery_levels_\(noac\|acin\)\[\][ ]=' arch/arm/mach-pxa/sharpsl_pm.c
+ initnc 'struct[ ]fb_bitfield[ ]rgb_bitfields\[\]\[4\][ ]='
+ initnc 'struct[ ]mode_registers[ ]std_modes\[\][ ]='
+ initnc 'struct[ ]vmode_attr[ ]vmode_attrs\[VMODE_MAX\][ ]='
+ initnc 'u16[ ]const[ ]crc16_table\[256\][ ]='
+ initnc 'u16[ ]const[ ]crc_ccitt_table\[256\][ ]='
+ initnc 'u16[ ]hfsplus_compose_table\[\][ ]='
+ initnc 'u16[ ]hfsplus_decompose_table\[\][ ]='
+ initnc 'u_char[ ]const[ ]data_sizes_16\[32\][ ]='
+ initnc 'u_short[ ]alt_map\[NR_KEYS\][ ]='
+ initnc 'u_short[ ]altgr_map\[NR_KEYS\][ ]='
+ initnc 'u_short[ ]ctrl_alt_map\[NR_KEYS\][ ]='
+ initnc 'u_short[ ]ctrl_map\[NR_KEYS\][ ]*='
+ initnc 'u_short[ ]plain_map\[NR_KEYS\][ ]*='
+ initnc 'u_short[ ]shift_ctrl_map\[NR_KEYS\][ ]='
+ initnc 'u_short[ ]shift_map\[NR_KEYS\][ ]*='
+ initnc 'uint[ ]patch_2[0f]00\[\][ ]='
+ initnc '\(uint16_t\|u16\)[ ]e1000_igp_cable_length_table\[IGP01E1000_AGC_LENGTH_TABLE_SIZE\][ ]=' drivers/net/e1000/e1000_hw.c # u16 on 2.6.26
+ initnc '\(uint16_t\|u16\)[ ]e1000_igp_2_cable_length_table\[IGP02E1000_AGC_LENGTH_TABLE_SIZE\][ ]=' drivers/net/e1000/e1000_hw.c # u16 on 2.6.26
+ initnc '[}][ ]euc2sjisibm_jisx0212_map\[\][ ]='
+ initnc '[}][ ]freq\[\][ ]='
+ initnc '[}][ ]hps_h_coeff_tab[ ]\[\][ ]='
+ initnc '[}][ ]hps_v_coeff_tab[ ]\[\][ ]='
+ initnc '[}][ ]init_tab\[\][ ]='
+ initnc '[}][ ]maven_gamma\[\][ ]='
+ initnc '[}][ ]mem_table\[\][ ]='
+ initnc '[}][ ]mxb_saa7740_init\[\][ ]='
+ initnc '[}][ ]pll_table\[\][ ]=' drivers/video/geode/lxfb_ops.c
+ initnc '[}][ ]qam256_snr_tab\[\][ ]='
+ initnc '[}][ ]qam64_snr_tab\[\][ ]='
+ initnc '[}][ ]sil_port\[\][ ]='
+ initnc '[}][ ]vsb_snr_tab\[\][ ]='
+
+ # new in 2.6.30
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]sync\[\][ ]=' Documentation/networking/timestamping/timestamping.c
+ blob 'The[ ]driver[ ]requires[ ]firmware[ ]files[ ]["]turtlebeach\([^\n]*[^\n.][\n]\)*directory.' Documentation/sound/alsa/ALSA-Configuration.txt
+ defsnc 'static[ ]int[ ]sdp3430_batt_table\[\][ ]=' arch/arm/mach-omap2/board-3430sdp.c
+ defsnc 'const[ ]char[ ]_[zs]b_findmap\[\][ ]=' arch/s390/kernel/bitmap.c
+ initnc '[ ][{][ ]CnINT2MSKR0,[ ]CnINT2MSKCR0[ ],[ ]32,' arch/sh/kernel/cpu/sh4a/setup-sh7786.c
+ blobname 'solos-\(\(db-\)\?FPGA\|Firmware\)\.bin' drivers/atm/solos-pci.c
+ defsnc 'static[ ]u16[ ]__initdata[ ]i2c_clk_div\[50\]\[2\][ ]=' drivers/i2c/busses/i2c-imx.c
+ defsnc 'static[ ]const[ ]struct[ ]mpc_i2c_divider[ ]mpc_i2c_dividers_\(52xx\|8xxx\)\[\][ ]\(__devinitconst[ ]\)\?=' drivers/i2c/busses/i2c-mpc.c
+ accept '[ ]const[ ]char[ ]\*fw_name[ ]=[ ]["]av7110[/]bootcode\.bin["][;]' drivers/media/dvb/ttpci/av7110_hw.c
+ accept '[ ]ret[ ]=[ ]request_firmware[(][^;]*[)][;][\n][ ]if[ ][(]ret[)][ ][{][^}]*[}][\n][\n][ ]mwdebi[(]av7110,[ ]DEBISWAB,[ ]DPRAM_BASE' drivers/media/dvb/ttpci/av7110_fw.c
+ accept 'MODULE_FIRMWARE[(]["]av7110[/]bootcode\.bin["][)][;]' drivers/media/dvb/ttpci/av7110_fw.c
+ defsnc 'static[ ]const[ ]u8[ ]jpeg_head\[\][ ]=' drivers/media/video/gspca/jpeg.h
+ defsnc 'static[ ]struct[ ]nand_ecclayout[ ]nand_oob_128[ ]=' drivers/mtd/nand/nand_base.c
+ blobname 'bnx2[/]bnx2-\(mips\|rv2p\)-[-0-9a-z.]*\.fw' drivers/net/bnx2.c
+ accept 'static[ ]void[\n]load_rv2p_fw[(][^{)]*const[ ]struct[ ]bnx2_mips_fw_file_entry' drivers/net/bnx2.c
+ accept 'static[ ]int[\n]bnx2_init_cpus[(][^{]*[)][\n][{][\n][ ]const[ ]struct[ ]bnx2_mips_fw_file'
+ blobname 'yam[/]\(12\|96\)00\.bin' drivers/net/hamradio/yam.c
+ blobname 'myricom[/]lanai\.bin' drivers/net/myri_sbus.c
+ blobname '3com[/]3C359\.bin' drivers/net/tokenring/3c359.c
+ blobname '3com[/]typhoon\.bin' drivers/net/typhoon.c
+ defsnc 'static[ ]struct[ ]ar9170_phy_init[ ]ar5416_phy_init\[\][ ]=' drivers/net/wireless/ar9170/phy.c
+ defsnc 'static[ ]struct[ ]ar9170_rf_init[ ]ar9170_rf_init\[\][ ]=' drivers/net/wireless/ar9170/phy.c
+ defsnc 'static[ ]const[ ]struct[ ]ar9170_phy_freq_entry[ ]ar9170_phy_freq_params\[\][ ]=' drivers/net/wireless/ar9170/phy.c
+ accept 'static[ ]int[ ]ar9170_usb_request_firmware[(]' drivers/net/wireless/ar9170/usb.c
+ accept '[ ]\(err[ ]=\|return\)[ ]request_firmware\(_nowait\)\?[(][^\n]*["]ar9170\(-[12]\)\?\.fw["],' drivers/net/wireless/ar9170/usb.c
+ accept '[ ]err[ ]=[ ]ar9170_usb_request_firmware[(]' drivers/net/wireless/ar9170/usb.c
+ accept 'MODULE_FIRMWARE[(]["]ar9170\(-[12]\)\?\.fw["][)][;]\([\n]MODULE_FIRMWARE[(]["]ar9170\(-[12]\)\?\.fw["][)][;]\)*' drivers/net/wireless/ar9170/usb.c
+ blobname 'slicoss[/]\(oasis\|gb\)\(rcvucode\|download\)\.sys' drivers/staging/slicoss/slicoss.c
+ blobname 'sxg[/]sahara\(dbg\)\?downloadB\.sys' drivers/staging/sxg/sxg.c
+ blobname 'qlogic[/]isp1000\.bin' drivers/scsi/qlogicpti.c
+ blobname 'advansys[/]\(3550\|38C\(08\|16\)00\|mcode\)\.bin' drivers/scsi/advansys.c
+ blobname 'qlogic[/]\(1040\|1280\|12160\)\.bin' drivers/scsi/qla1280.c
+ blobname 'yamaha[/]yss225_registers\.bin' sound/isa/wavefront/wavefront_fx.c
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini[ ]rf\([52]413\|2425\)_ini_common_end\[\][ ]=' drivers/net/wireless/ath5k/initvals.c
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rfbuffer[ ]rfb_\(511[12]a\?\|5413\|231[67]\|24\(1[37]\|25\)\)\[\][ ]=' drivers/net/wireless/ath5k/rfbuffer.h
+ accept '#define\([ ]_\?IWL\(4965\|[156]000\|5150\|6050\)_MODULE_FIRMWARE[(]api[)]\)\+' 'drivers/net/iwlwifi/iwl-\([156]000\|4965\)\.c'
+ blobname 'iwlwifi-1000-' drivers/net/iwlwifi/iwl-1000.c
+ blobname 'iwlwifi-60[05]0-' drivers/net/iwlwifi/iwl-6000.c
+ blobname 'libertas[/]gspi\(%d\|[0-9]\+\)\(_hlp\)\?\.bin' drivers/net/wireless/libertas/if_spi.c
+ blobname 'mwl8k[/]\(helper\|fmimage\)_\(%u\|[0-9]\+\)\.fw' drivers/net/wireless/mwl8k.c
+ blobname '3826\.arm' 'drivers/\(net/wireless/p54/p54spi\|staging/stlc45xx/stlc45xx\)\.c'
+ defsnc 'static[ ]unsigned[ ]char[ ]p54spi_eeprom\[\][ ]=' drivers/net/wireless/p54/p54spi_eeprom.h
+ blobname '\(comedi[/]\)\?jr3pci\.idm' drivers/staging/comedi/drivers/jr3_pci.c
+ blobname 'usbdux\(fast\)\?_firmware\.\(hex\|bin\)' 'drivers/staging/comedi/drivers/usbdux\(fast\)\?\.c'
+ blobname 'RT30xxEEPROM\.bin' drivers/staging/rt3070/common/eeprom.c
+ defsnc 'static[ ]const[ ]u8[ ]default_cal_\(channels\|rssi\)\[\][ ]=' drivers/staging/stlc45xx/stlc45xx.c
+ accept '[ ][ ]stlc45xx_error[(]["]request_firmware[(][)][ ]failed' drivers/staging/stlc45xx/stlc45xx.c
+ blob 'static[ ]struct[ ]phy_ucode[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode-1.2.h
+ accept 'device[ ]drivers[ ]which[ ]predate[ ]the[ ]common[ ]use[ ]of[ ]request_firmware[(][)]' firmware/README.AddingFirmware
+ accept 'As[ ]we[ ]update[ ]those[ ]drivers[ ]to[ ]use[ ]request_firmware[(][)]' firmware/README.AddingFirmware
+ blob 'This[ ]directory[ ]is[ ]_NOT_[ ]for[ ]adding[ ]arbitrary[ ]new[ ]firmware[ ]images.*git[ ]pull[ ]request[ ]to:[\n][^\n]*infradead\.org>' firmware/README.AddingFirmware
+ blobna 'linux-firmware\.git' firmware/README.AddingFirmware
+ blobname '\(ea[/]\)\?\(loader\|indigo_djx\)_dsp\.fw' sound/pci/echoaudio/indigodjx.c
+ blobname '\(ea[/]\)\?\(loader\|indigo_iox\)_dsp\.fw' sound/pci/echoaudio/indigoiox.c
+ blobname 'cis[/]LA-PCM\.cis' drivers/net/pcmcia/pcnet_cs.c
+ blobname 'ositech[/]Xilinx7OD\.bin' drivers/net/pcmcia/smc91c92_cs.c
+ blobname 'tehuti[/]\(firmware\|bdx\)\.bin' drivers/net/tehuti.c
+ accept '[ ]*["]b43-open%s[/]%s\.fw["]' drivers/net/wireless/b43/main.c
+ blobname '\(nx\(romimg\|3fw\(ct\|mn\)\)\|phanfw\)\.bin' 'drivers/net/netxen/netxen_nic\(_\(hw\|init\)\.c\|\.h\)'
+
+ # New in 2.6.31
+ accept '[ ][*][ ]page[ ]tables[ ]as[ ]follows:[\n][ ][*][\n][ ][*][ ][ ][ ]3[ ]3[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]2[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[ ]1[\n][ ][*][ ][ ][ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0[ ]9[ ]8[ ]7[ ]6[ ]5[ ]4[ ]3[ ]2[ ]1[ ]0' arch/arm/include/asm/pgtable.h
+ defsnc '\([ ]static[ ]const[ ]u8[ ]snum_init\[\][ ]=[ ][{]\|static[ ]void[ ]qe_snums_init[(]void[)]\)[\n][ ][ ]0x04,[ ]0x05,' arch/powerpc/sysdev/qe_lib/qe.c
+ accept '[.]LgoS4:[\n][ ][.]word[ ][.]LmtoS4-\.LgoS4\([\n][ ]\.\(long\|word\|byte\)[ ][01]\(,0\)*\)*' arch/s390/kernel/sclp.S
+ defsnc 'static[ ]int[ ]sh_clk_div6_divisors\[64\][ ]=' arch/sh/kernel/cpu/clock-cpg.c
+ accept '[ ][*][ ]*1[ ]1\([ ]0\)*[ ]1\([ ]0\)*' arch/x86/lguest/boot.c
+ defsnc 'struct[ ]scrubrate[ ]scrubrates\[\][ ]=' drivers/edac/amd64_edac.c
+ defsnc 'static[ ]const[ ]unsigned[ ]r\([35]\|s6\)00_reg_safe_bm\[[0-9]*\][ ]=' 'drivers/gpu/drm/radeon/r\(300\|v515\|s600\)\.c'
+ defsnc 'static[ ]struct[ ]keyboard_layout_map_t[ ]keyboard_layout_maps\[\][ ]=' drivers/media/dvb/siano/smsir.c
+ blobname 'dvb-cx18-mpc718-mt352\.fw' drivers/media/video/cx18/cx18-dvb.c
+ defsnc '[ ]const[ ]unsigned[ ]char[ ]\(y\|uv\)QuanTable51[18]\[\][ ]=' 'drivers/media/video/\(ov511\|gspca/ov519\)\.c'
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_ov965x_\(\([qs]\?v\|x\)ga\|cif\)\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc 'static[ ]const[ ]\(int\|s16\)[ ]hsv_\(red\|green\|blue\)_[xy]\[\][ ]=' drivers/media/video/gspca/sn9c20x.c
+ defsnc 'static[ ]\(u16\|struct[ ]i2c_reg_u16\)[ ]\(bridge\|mt9\(v\(11[12]\|011\)\|m001\)\)_init\[\]\(\[2\]\)\?[ ]=' drivers/media/video/gspca/sn9c20x.c
+ defsnc 'static[ ]\(u8\|struct[ ]i2c_reg_u8\)[ ]\(soi968\|ov\(76[67]0\|965[05]\)\|hv7131r\)_init\[\]\(\[2\]\)\?[ ]=' drivers/media/video/gspca/sn9c20x.c
+ defsnc 'static[ ]struct[ ]nand_ecclayout[ ]onenand_oob_128[ ]=' drivers/mtd/onenand/onenand_base.c
+ blob '#define[ ]BCM_5710_FW_\(\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION\|COMPILE_FLAGS\)[ ]*[0-9]\+\([\n]#define[ ]BCM_5710_FW_\(\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION\|COMPILE_FLAGS\)[ ]*[0-9]\+\)*' drivers/net/bnx2x_hsi.h
+ blob 'static[ ]int[ ]__devinit[ ]bnx2x_check_firmware[(]struct[ ]bnx2x[ ][*]bp[)][\n][{][^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' drivers/net/bnx2x_main.c
+ blobna 'if[ ][(][(]fw_ver\[[0-3]\][ ]!=[ ]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\([ ][|][|][\n][ ]*[(]fw_ver\[[0-3]\][ ]!=[ ]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\)*[)][ ][{][^{}]*[}]' drivers/net/bnx2x_main.c
+ blobna 'sprintf[(]fw_file_name[ ][+][ ]offset,[ ]["]%d[.]%d[.]%d[.]%d[.]fw["]\(,[\n][ ]*BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION\)*[)][;]' drivers/net/bnx2x_main.c
+ blobna 'rc[ ]=[ ]bnx2x_check_firmware[(]bp[)][;]' drivers/net/bnx2x_main.c
+ defsnc 'crb_128M_2M_map\[64\][ ]__cacheline_aligned_in_smp[ ]=' 'drivers/net/\(netxen/netxen_nic_hw.c\|qlcnic/qlcnic_hw.c\)'
+ defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals\(_3070\)\?\[\][ ]=' 'drivers/net/wireless/\(prism54/islpci_dev\.c\|rt2x00/rt2800usb\.c\)'
+ blobname 'wl1251-\(fw\|nvs\)\.bin' drivers/net/wireless/wl12xx/wl1251.h
+ blobname 'iwmc3200wifi-\([ul]mac\|calib\)-sdio\.bin' drivers/net/wireless/iwmc3200wifi/sdio.c
+ defsnc 'u16[ ]MCS_DATA_RATE\[2\]\[2\]\[77\][ ]=' 'drivers/staging/\(rtl8192su/ieee80211/rtl819x_HTProc\.c\|rtl8192u/r819xU_firmware\.c\)'
+ blob 'u8[ ]Rtl8192SUFw\(Img\|Main\|Data\)Array\[\(Img\|Main\|Data\)ArrayLength\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]\([\n][\n]*u8[ ]Rtl8192SUFw\(Img\|Main\|Data\)Array\[\(Img\|Main\|Data\)ArrayLength\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]\)*' drivers/staging/rtl8192su/r8192SU_HWImg.c
+ blobname 'RTL8192SU[/]\(rtl8192sfw\.bin\|\(boot\|main\|data\)\.img\)' drivers/staging/rtl8192su/r8192S_firmware.c
+ blobna 'case[ ]FW_SOURCE_HEADER_FILE:[\n]#if[ ]1[\n]#define[^#]*[\n]#endif[\n][ ][ ][ ]break[;]' drivers/staging/rtl8192su/r8192S_firmware.c
+ defsnc 'u32[ ]Rtl8192SU\(PHY_\(REG\|ChangeTo\)_[12]T[12]R\|Radio[AB]_\(\(\(to\)\?[12]T\|GM\)_\)\?\|MAC\(PHY\|_[12]T\)_\|AGCTAB_\)Array\(_PG\)\?\[\(PHY_\(REG\|ChangeTo\)_[12]T[12]R\|Radio[AB]_\(\(\(to\)\?[12]T\|GM\)_\)\?\|MAC\(PHY\|_[12]T\)_\|AGCTAB_\)Array\(_PG\)\?Length\][ ]=' drivers/staging/rtl8192su/rtl92SU_HWImg.c
+ blob 'u8[ ]Rtl8192PciEFw\(Boot\|Main\|Data\)ArrayDTM\[\(Boot\|Main\|Data\)ArrayLengthDTM\][ ]=[ ][{][^}]*[}][;]' drivers/staging/rtl8192su/r8192S_FwImgDTM.h
+ defsnc '\(static[ ]\)\?u32[ ]Rtl8192PciE\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?\(DTM\)\?\[\(\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?Length\(DTM\)\?\)\?\][ ]=' drivers/staging/rtl8192su/rtl8192S_FwImgDTM.h
+ blobna '\([&]\|sizeof[(]\)rtl8190_fw\(boot\|main\|data\)_array\(\[0\]\|[)]\)\(,[ \n]*\([&]\|sizeof[(]\)rtl8190_fw\(boot\|main\|data\)_array\(\[0\]\|[)]\)\)*' 'drivers/staging/rtl8192su/r819\(2S\|xU\)_firmware\.c'
+ blobname 'RTL8192U[/]\(boot\|main\|data\)\.img' 'drivers/staging/rtl8192s\?u/r819xU_firmware\.c'
+ blob 'u8[ ]rtl8190_fw\(boot\|main\|data\)_array\[\][ ]=[ ]\?[{][^}]*[}][;]' 'drivers/staging/rtl8192s\?u/r8192xU_firmware_img\.c'
+ defsnc 'u32[ ]Rtl8192Usb\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?\[\][ ]=' drivers/staging/rtl8192su/rtl819xU_firmware_img.c
+ defsnc 'BYTE[ ]\(sbox\|dot[23]\)_table\[256\][ ]=' drivers/staging/vt6655/aes_ccmp.c
+ defsnc 'BYTE[ ]byVT3253\(InitTab\|B0\(_AGC4\?\)\?\)_\(RFMD\(2959\)\?\|AIROHA2230\|UW2451\|AGC\)\[CB_VT3253\(B0\(_AGC4\?\)\?\)\?\(\(_INIT\)\?_FOR_\(RFMD\(2959\)\?\|AIROHA2230\|UW2451\|AGC\)\)\?\]\[2\][ ]=' drivers/staging/vt6655/baseband.c
+ defsnc 'SCountryTable[ ]ChannelRuleTab\[CCODE_MAX[+]1\][ ]=' drivers/staging/vt6655/card.c
+ defsnc 'static[ ]const[ ]long[ ]frequency_list\[\][ ]=' drivers/staging/vt6655/iwctl.c
+ accept '#define[ ]CONFIG_PATH[ ]*["][/]etc[/]vntconfiguration[.]dat["]' drivers/staging/vt6655/device_cfg.h
+ defsnc 'static[ ]const[ ]DWORD[ ]s_adwCrc32Table\[256\][ ]=' drivers/staging/vt6655/tcrc.c
+ defsnc 'const[ ]BYTE[ ]TKIP_Sbox_\(Lower\|Upper\)\[256\][ ]=' drivers/staging/vt6655/tkip.c
+ blobname 'prism2_ru\.\(hex\|fw\)' drivers/staging/wlan-ng/prism2fw.c
+ defsnc 'static[ ]const[ ]u16[ ]wm8960_reg\[WM8960_CACHEREGNUM\][ ]=' sound/soc/codecs/wm8960.c
+ blob '#include[ ]["]me4\(00\|61\)0_firmware\.h["]\([\n][\n]*#include[ ]["]me4\(00\|61\)0_firmware\.h["]\)*' drivers/staging/me4000/me4000.c
+ blobna 'firm[ ]=[ ][^;]*xilinx_firm[^;]*[;]' drivers/staging/me4000/me4000.c
+ # end of new in 2.6.31
+ accept '[ ]*ramdisk[ ]=[ ]["][/]boot[/][^ ]*initrd[^ ]*\.img["]' Documentation/ia64/xen.txt
+
+ # in drm-*.patch, post-2.6.31
+ blobname 'matrox[/]g[24]00_warp\.fw' drivers/gpu/drm/mga/mga_warp.c
+ blobname 'r128[/]r128_cce\.bin' drivers/gpu/drm/r128/r128_cce.c
+ blobname 'radeon[/]R\([123]0\|[45]2\|S6[09]\)0_cp\.bin' drivers/gpu/drm/radeon/r100.c
+ blobname 'radeon[/]\(R\(60\|V6[1237]\|S7[1378]\)[05]\|%s\)_\(pfp\|rlc\|me\)\.bin' drivers/gpu/drm/radeon/r600.c
+ defsnc 'const[ ]u32[ ]r[67]xx_default_state\[\][ ]=' drivers/gpu/drm/radeon/r600_blit_shaders.c
+ defsnc 'struct[ ]nv17_tv_norm_params[ ]nv17_tv_norms\[NUM_TV_NORMS\][ ]=' drivers/gpu/drm/nouveau/nv17_tv_modes.c
+
+ # New in or modified for 2.6.32
+ blobname '\(cxgb3[/]\)\?ael20\(05_\(opt\|twx\)\|20_twx\)_edc\.bin' drivers/net/cxgb3/cxgb3_main.c
+ blobname 'wl1271-\(fw\|nvs\)\.bin' drivers/net/wireless/wl12xx/wl1271.h
+ defsnc 'static[ ]const[ ]struct[ ]aper_size_info_32[ ]u3_sizes\[8\?\][ ]=' drivers/char/agp/uninorth-agp.c
+ defsnc 'static[ ]const[ ]unsigned[ ]short[ ]atkbd_set[23]_keycode\[\(512\|ATKBD_KEYMAP_SIZE\)\][ ]=' drivers/input/keyboard/atkbd.c
+ defsnc '[ ][}][ ]common_modes\[17\][ ]=' drivers/gpu/drm/radeon/radeon_connectors.c
+ defsnc '[ ][ ]*\(static[ ]\)\?\(const[ ]\)\?struct[ ]phy_reg[ ]phy_reg_init\(_0\)\?\[\][ ]=' drivers/net/r8169.c
+ accept '[ ][ ]*struct[ ]phy_reg[ ]phy_reg_init_1\[\][ ]=[ ][{][^;]*0x8300[^;]*[}][;]' drivers/net/r8169.c
+ blob 'static[ ]void[ ]rtl8168d_[12]_hw_phy_config[(]void[ ]__iomem[ ][*]ioaddr[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' drivers/net/r8169.c
+ blobna 'rtl8168d_[12]_hw_phy_config[(]ioaddr[)][;]' drivers/net/r8169.c
+ blobna 'static[ ]\(const[ ]\)\?struct[ ]phy_reg_init_[12]\[\][ ]=[ ][{][\n {}0-9a-fx]*0x06,[ ]0xf8f9[\n {}0-9a-fx]*[}][;]' drivers/net/r8169.c
+ # This loads firmware to be flashed from filename provided through ethtool.
+ accept 'int[ ]be_load_fw[(][^\n;{]*[)][ \n][{][^\n]*\([\n]\+[^\n}][^\n]*\)*ETHTOOL_FLASH_MAX_FILENAME[^\n]*\([\n]\+[^\n}][^\n]*\)*request_firmware[^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' drivers/net/benet/be_main.c
+ defsnc '[ ]u8[ ]init_hash_seed\[\][ ]=' drivers/net/qlge/qlge_main.c
+ defsnc 'static[ ]const[ ]u_int32_t[ ]ar9287\(Common\|Modes\(_\([tr]x_gain\)\)\?\)_9287_1_[01]\[\]\[[236]\][ ]=' drivers/net/wireless/ath9k/initvals.h
+ defsnc 'static[ ]const[ ]u_int32_t[ ]ar9271\(Common\|Modes\)_9271\(_1_0\)\?\[\]\[[26]\][ ]=' drivers/net/wireless/ath9k/initvals.h
+ defsnc 'static[ ]const[ ]u8[ ]lpphy_min_sig_sq_table\[\][ ]=' drivers/net/wireless/b43/tables_lpphy.c
+ defsnc 'static[ ]const[ ]u16[ ]lpphy_\(rev\(01\|2plus\)_noise_scale\|crs_gain_nft\|iqlo_cal\|rev[01]_ofdm_cck_gain\|\(a0_\)\?gain\|sw_control\)_table\[\][ ]=' drivers/net/wireless/b43/tables_lpphy.c
+ defsnc 'static[ ]const[ ]u32[ ]lpphy_\(\(rev01_ps\|tx_power\)_control\|\(a0_\)\?gain_\(idx\|value\)\|papd_\(eps\|mult\)\)_table\[\][ ]=' drivers/net/wireless/b43/tables_lpphy.c
+ blobname 'v4l-saa7164-1\.0\.[23]\.fw' drivers/media/video/saa7164/saa7164-fw.c
+ defsnc 'static[ ]const[ ]u8[ ]n4_\(om6802\|other\|tas5130a\)\[\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc '[ ][ ]const[ ]struct[ ]sensor_w_data[ ]\(cif\|vga\)_sensor[01]_init_data\[\][ ]=' drivers/media/video/gspca/mr97310a.c
+ defsnc '[ ]struct[ ]jlj_command[ ]start_commands\[\][ ]=' drivers/media/video/gspca/jeilinj.c
+ defsnc 'static[ ]u8[ ]init_code\[\]\[2\][ ]=' drivers/media/dvb/dvb-usb/friio-fe.c
+ defsnc 'static[ ]const[ ]u8[ ]va1j5jf8007[ts]_prepare_bufs\[\]\[2\][ ]=' 'drivers/media/dvb/pt1/va1j5jf8007[st]\.c'
+ accept '[ ]request_firmware[(][)][ ]will[ ]hit[ ]an[ ]OOPS' drivers/media/dvb/frontends/dib7000p.c
+ defsnc 'static[ ]long[ ]limiter_times\[\][ ]=' drivers/media/radio/si4713-i2c.c
+ blobname 'c[tb]fw\.bin' drivers/scsi/bfa/bfad_fwimg.c
+ defsnc 'static[ ]const[ ]u16[ ]\(VDCDC[1x]\|LDO[12]\)_VSEL_table\[\][ ]=' 'drivers/regulator/tps650\(23\|7x\)-regulator\.c'
+ defsnc 'static[ ]struct[ ]lms283gf05_seq[ ]disp_\(init\|pwdn\)seq\[\][ ]=' drivers/video/backlight/lms283gf05.c
+ defsnc '[}][ ]csc_table\[\][ ]=' drivers/video/msm/mdp_csc_table.h
+ defsnc '\(static[ ]\)\?struct[ ]mdp_table_entry[ ]mdp_\(\(upscale\|gaussian_blur\)_table\|downscale_[xy]_table_PT[2468]TO\(PT[468]\|1\)\)\[\][ ]=' drivers/video/msm/mdp_scale_tables.c
+ accept '[ ][ ]card->firmware[ ]=[ ]data->firmware[;]' drivers/bluetooth/btmrvl_sdio.c
+ accept '[ ]isar->firmware[ ]=[ ][&]load_firmware[;]' drivers/isdn/hardware/mISDN/mISDNisar.c
+ blobname 'isdn[/]ISAR\.BIN' drivers/isdn/hardware/mISDN/speedfax.c
+ blobname '\(sep[/]\)\?\(cache\|resident\)\.image\.bin' drivers/staging/sep/sep_driver.c
+ blobname 'RTL8192E[/]\(boot\|main\|data\)\.img' drivers/staging/rtl8192e/r819xE_firmware.c
+ defsnc '\(static[ ]\)\?u32[ ]Rtl8190PciE\?\(AGCTAB_\|PHY_REG\(_1T2R\)\?\|Radio[ABCD]_\)Array\[\(AGCTAB_\|PHY_REG\(_1T2R\)\?\|Radio[ABCD]_\)ArrayLength\][ ]=' 'drivers/staging/\(rtl8192e/r819xE_phy\.c\|rtl8192u/r819xU_firmware_img.c\)'
+ accept '[ ][*][ ]File:[ ]main_usb\.c\([\n][ ][*]\([^\n/]*\|[^*\n/][/]*\)*\)*[\n][ ][*][/]\([\n][\n]*#\(undef[ ][^\n]*\|include[ ]["][^\n]*["]\)\)*[\n][\n]*#include[ ]["]firmware\.h["]' drivers/staging/vt6656/main_usb.c
+ blob 'const[ ]BYTE[ ]abyFirmware\[\][ ]=[ ][{][^;]*[}][;]' drivers/staging/vt6656/firmware.c
+ defsnc '[}][ ][ ][ ]ChannelRuleTab\[\][ ]=' drivers/staging/vt6656/channel.c
+ defsnc '\(static[ ]\)\?struct[ ]register_address_value_pair[\n]\(preview_snapshot_mode\|noise_reduction\)_reg_settings_array\[\][ ]=' drivers/staging/dream/camera/mt9d112_reg.c
+ blobname '\([/]tmp[/]\)\?RT30xxEEPROM\.bin' 'drivers/staging/rt3090/\(common/ee_efuse\.c\|rtmp_def\.h\)'
+ defsnc 'static[ ]UINT8[ ]WPS_DH_\([PRX]\|RRModP\)_VALUE\[1\(9[23]\|84\)\][ ]=' drivers/staging/rt3090/common/crypt_biginteger.c
+ defsnc '\(CH_FREQ_MAP\|struct[ ]rt_ch_freq_map\)[ ]CH_HZ_ID_MAP\[\][ ]\?=' 'drivers/staging/\(rt2860\|rt3090\)/common/rt_channel\.c'
+ defsnc 'static[ ]const[ ]UINT32[ ]SHA256_K\[64\][ ]=' drivers/staging/rt3090/common/crpt_sha2.c
+ defsnc '\(DOT11_REGULATORY_INFORMATION\|struct[ ]rt_dot11_regulatory_information\)[ ]\(USA\|Europe\|Japan\)RegulatoryInfo\[\][ ]=' 'drivers/staging/\(rt3090\|rt2860\)/common/spectrum\.c'
+ defsnc 'static[ ]const[ ]USHORT[ ]Sbox\[256\][ ]=' drivers/staging/rt3090/sta/rtmp_ckipmic.c
+ blob '#include[ ]*["]\(\.\.[/]\(\.\.[/]rt\(28[67]\|30[79]\)0[/]\(common[/]\)\?\)\?\)\?firmware\(_\(28[67]\|30[79]\)0\)\?\.h["]\([\n][\n]*#include[ ]*["]\(\.\.[/]\(\.\.[/]rt\(28[67]\|30[79]\)0[/]\(common[/]\)\?\)\?\)\?firmware\(_\(28[67]\|30[79]\)0\)\?\.h["]\)' 'drivers/staging/rt\(28[67]\|309\)0/common/rtmp_\(init\|mcu\)\.c'
+ blobna 'FIRMWAREIMAGE_LENGTH[ ]==' drivers/staging/rt3090/common/rtmp_mcu.c
+ defsnc 'int[ ]wm831x_isinkv_values\[WM831X_ISINK_MAX_ISEL[ ][+][ ][1]\][ ]=' drivers/mfd/wm831x-core.c
+ defsnc 'static[ ]struct[ ]nand_ecclayout[ ]hwecc4_2048[ ]__initconst[ ]=' drivers/mtd/nand/davinci_nand.c
+ defsnc 'static[ ]const[ ]u16[ ]wm8974_reg\[WM8974_CACHEREGNUM\][ ]=' sound/soc/codecs/wm8974.c
+ defsnc 'static[ ]const[ ]u16[ ]ak4642_reg\[AK4642_CACHEREGNUM\][ ]=' sound/soc/codecs/ak4642.c
+ accept 'int[ ]snd_hda_load_patch[(][^\n;{]*[)][ \n][{][^\n]*\([\n]\+[^\n}][^\n]*\)*hda_codec[^\n]*\([\n]\+[^\n}][^\n]*\)*request_firmware[^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' sound/pci/hda/hda_hwdep.c
+ accept '[ ][ ][ ]Bit[ 0-7]*' Documentation/input/sentelic.txt
+ accept 'The[ ]hd-audio[ ]driver[ ]reads[ ]the[ ]file[ ]via[ ]request_firmware[(][)]\.' Documentation/sound/alsa/HD-Audio.txt
+ blob 'SD8688[ ]firmware:[\n]*\([/]lib[/]firmware[^\n]*[\n]*\)*The[ ]images[^:]*:[\n]*[^\n]*[/]linux-firmware[^\n]*' Documentation/btmrvl.txt
+ defsnc 'static[ ]u8[ ]ibm405ex_fbdv_multi_bits\[\][ ]=' arch/powerpc/boot/4xx.c
+ defsnc 'static[ ]int[ ]zoom2_batt_table\[\][ ]=' arch/arm/mach-omap2/board-zoom2.c
+ defsnc 'static[ ]struct[ ]ad714x_platf\(or\|ro\)m_data[ ]ad714[27]_\(\(spi\|i2c\)_\)\?platf\(or\|ro\)m_data[ ]=' arch/blackfin/mach-bf537/boards/stamp.c
+ blob 'static[ ]const[ ]u8[ ]lgs8g75_initdat\[\][ ]=[ ][{][^;]*[}][;]' drivers/media/dvb/frontends/lgs8gxx.c
+ blob 'static[ ]int[ ]lgs8g75_init_data[(][^\n;{]*[)][ \n][{][^\n]*\([\n]\+[^\n}][^\n]*\)*lgs8g75_initdat[^\n]*\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]' drivers/media/dvb/frontends/lgs8gxx.c
+ defsc 'static[ ]struct[ ]idxdata[ ]tbl_common\(_[a-e]\|5\)\[\][ ]=' 'drivers/media/video/gspca/gl860/gl860-\(mi2020\|mi1320\|ov9655\|ov2640\)\.c'
+ defsnc 'static[ ]struct[ ]validx[ ]tbl_\(commm\?on\|init_\(at_startup\|post_alt\)\|sensor_settings_common\(_[ab]\|1\)\|big\(_[abc]\|[123]\)\|640\|800\)\[\][ ]=' 'drivers/media/video/gspca/gl860/gl860-\(mi2020\|mi1320\|ov9655\|ov2640\).c'
+ defsnc 'static[ ]u8[ ][*]tbl_\(640\|800\)\[\][ ]=' 'drivers/media/video/gspca/gl860/gl860-\(mi1320\|ov9655\).c'
+ accept '[<][<]\([/]Subtype[/]Type1\)\?[/]BaseFont[^ ]*[/]FontDescriptor[ ][0-9][0-9]*[ ]0[ ]R\([/]Type[/]Font\)\?[\n]\?[/]FirstChar[ ][0-9][0-9]*[/]LastChar[ ][0-9][0-9]*[/]Widths\[[\n][0-9 \n]*\]' 'Documentation/DocBook/v4l/.*\.pdf'
+
+ # New in 2.6.33
+ accept '[ ]*just[ ]run[ ]["]cat[ ][/]sys[/]firmware[/]acpi[/]tables[/]DSDT[ ]>[ ][/]tmp[/]dsdt[.]dat["]' Documentation/acpi/method-customizing.txt
+ accept '[ ]*b[)][ ]disassemble[ ]the[ ]table[ ]by[ ]running[ ]["]iasl[ ]-d[ ]dsdt[.]dat["][.]' Documentation/acpi/method-customizing.txt
+ accept '[ ]*x=["]7999\([ ][0-9]\+\)\+["]' Documentation/blockdev/drbd/DRBD-8.3-data-packets.svg
+ defsnc 'static[ ]int[ ]zoom_batt_table\[\][ ]=' arch/arm/mach-omap2/board-zoom-peripherals.c
+ defsnc 'static[ ]u16[ ]x[48]_vectors\[\][ ]=' drivers/edac/amd64_edac.c
+ defsnc 'static[ ]const[ ]u16[ ]\(y\|uv\)_static_hcoeffs\[N_HORIZ_\(Y\|UV\)_TAPS[ ][*][ ]N_PHASES\][ ]=' drivers/gpu/drm/i915/intel_overlay.c
+ accept '[ ]\.download_firmware[ ]=[ ]ec168_download_firmware,[\n][ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/ec168.c
+ blobname 'dvb-usb-ec168\.fw' drivers/media/dvb/dvb-usb/ec168.c
+ defsnc 'static[ ]const[ ]u16[ ]dib0090_defaults\[\][ ]=' drivers/media/dvb/frontends/dib0090.c
+ defsnc 'static[ ]const[ ]struct[ ]dib0090_pll[ ]dib0090_pll_table\[\][ ]=' drivers/media/dvb/frontends/dib0090.c
+ blobname 'dvb-fe-ds3000\.fw' drivers/media/dvb/frontends/ds3000.c
+ blob '[/][*][ ]\(as[ ]of[ ][^\n]*[ ]current[ ]DS3000[ ]firmware\|DS3000[ ]FW\)[^/]*[*][/]\([\n][/][*]\([ ]\(as[ ]of[ ][^\n]*[ ]current[ ]DS3000[ ]firmware\|DS3000[ ]FW\)[^/]*\|[(]DEBLOBBED[)]\)[*][/]\)*' drivers/media/dvb/frontends/ds3000.c
+ defsnc 'static[ ]u8[ ]ds3000_dvbs2\?_init_tab\[\][ ]=' drivers/media/dvb/frontends/ds3000.c
+ defsnc '[ ]static[ ]const[ ]u16[ ]dvbs2_snr_tab\[\][ ]=' drivers/media/dvb/frontends/ds3000.c
+ defsnc 'static[ ]const[ ]struct[ ]cnr[ ]cnr_tab\[\][ ]=' drivers/media/dvb/frontends/mb86a16.c
+ defsnc 'u8[ ]lgtdqcs001f_inittab\[\][ ]=' drivers/media/dvb/mantis/mantis_vp1033.c
+ defsnc 'static[ ]const[ ]struct[ ]ov9640_reg[ ]ov9640_regs_dflt\[\][ ]=' drivers/media/video/ov9640.c
+ defsnc '\(const[ ]static\|static[ ]const\)[ ]struct[ ]rj54n1_reg_val[ ]bank_[4578]\[\][ ]=' drivers/media/video/rj54n1cb0c.c
+ blob '#define[ ]_FW_NAME[(]api[)][ ]DRV_NAME[ ]["][.]["][ ]#api[ ]["]\.fw["]' drivers/media/video/iwmc3200top.h
+ defsnc 'static[ ]struct[ ]nand_ecclayout[ ]nandv2_hw_eccoob_largepage[ ]=' drivers/mtd/nand/mxc_nand.c
+ blob '#define[ ]FW_FILE_VERSION\([ ]*[\\][\n][ ]__stringify[(]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\([ ]["][.]["]\)\?\)\+' drivers/net/bnx2x_main.c
+ blobname 'bnx2x-e1h\?-["][ ]FW_FILE_VERSION[ ]["]\.fw' drivers/net/bnx2x_main.c
+ blobname 'bnx2x-e1h\?-\([0-9.%d]*\.fw\)\?' drivers/net/bnx2x_main.c
+ blob '#define[ ]FW_VERSION\([ ]__stringify[(]FW_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c
+ blobname 'cxgb3[/]t3fw-["][ ]FW_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c
+ blob '#define[ ]TPSRAM_VERSION\([ ]__stringify[(]TP_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c
+ blobname 'cxgb3[/]t3\(%c\|[bc]\)_psram-["][ ]TPSRAM_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]rsshash\[40\][ ]=' drivers/net/igb/igb_main.c
+ defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_302x\[\][ ]=' drivers/net/wireless/rt2x00/rt2800lib.c
+ defsnc 'static[ ]struct[ ]conf_drv_settings[ ]default_conf[ ]=' drivers/net/wireless/wl12xx/wl1271_main.c
+ defsnc 'static[ ]u16[ ]bios_to_linux_keycode\[256\][ ]=' drivers/platform/x86/dell-wmi.c
+ accept '[ ]err[ ]=[ ]request_firmware[(][&]pm8001_ha->fw_image,' drivers/scsi/pm8001/pm8001_ctl.c
+ defsnc 'static[ ]unsigned[ ]char[ ]vpdb0_data\[\][ ]=' drivers/scsi/scsi_debug.c
+ defsnc 'static[ ]struct[ ]vesa_mode_table[ ]vesa_mode\[\][ ]=' drivers/staging/sm7xx/smtcfb.c
+ defsnc 'struct[ ]ModeInit[ ]VGAMode\[\][ ]=' drivers/staging/sm7xx/smtcfb.h
+ blob 'static[ ]const[ ]hcf_8[ ]fw_image_[1234]_data\[\][ ]=[^;]*[;]\([ ]*[/][*][ ]fw_image_[1234]_data[ ][*][/]\)\?' 'drivers/staging/wlags49_h2/\(ap\|sta\)_h25\?\.c'
+ blobname '[/]etc[/]agere[/]fw\.bin' drivers/staging/wlags49_h2/wl_profile.c
+ defsnc 'static[ ]const[ ]long[ ]chan_freq_list\[\]\[MAX_CHAN_FREQ_MAP_ENTRIES\][ ]=' drivers/staging/wlags49_h2/wl_util.c
+ blob 'The[ ]ssinit[ ]program.*nsoniq.*sndscape.*sound[ ]weird\.' Documentation/sound/oss/README.OSS
+ blobname 'scope\.cod' 'sound/isa/\(Kconfig\|sscape\.c\)'
+ blobname '\(sndscape\|soundscape\)\.co\([?dx01234]\|%d\)' 'sound/isa/\(Kconfig\|sscape\.c\)\|Documentation/sound/oss/README\.OSS'
+ defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ blobname 'ath3k-1\.fw' drivers/bluetooth/ath3k.c
+ blobname 'nouveau[/]nv\([0-9a-f][0-9a-f]\|%02x\)\.ctx\(prog\|vals\)' 'drivers/gpu/drm/nouveau/\(nv50_graph\|nouveau_grctx\)\.c'
+
+ # New in 2.6.34
+ blobname 'mts_mt9234\(mu\|zba\)\.fw' drivers/usb/serial/ti_usb_3410_5052.c
+ blobname 'cxgb4[/]t4fw\.bin' drivers/net/cxgb4/cxgb4_main.c
+ defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]reg_ranges\[\][ ]=' drivers/net/cxgb4/cxgb4_main.c
+ defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]avg_pkts\[NCCTRL_WIN\][ ]=' drivers/net/cxgb4/t4_hw.c
+ # above in -rc5
+ defsnc 'static[ ]u32[ ]epll_div\[\]\[5\][ ]=' arch/arm/mach-s5p6440/clock.c
+ accept '[ ]aru->firmware[ ]=[ ]fw[;]' drivers/net/wireless/ath/ar9170/usb.c
+ accept '[ ]err[ ]=[ ]request_firmware[(][&]fw_entry,[ ]["]broadsheet\.wbf["],[ ]dev[)][;]' drivers/video/broadsheetfb.c
+ # above in -rc2, below in -rc1
+ accept '\(#[ ]\)\?\(Usage:[ ]cxacru-cf\.py[ ][<]\|Warning:\|Note:[ ]support[ ]for\)[ ]cxacru-cf\.bin' 'Documentation/networking/cxacru\(-cf\.py\|\.txt\)'
+ defsnc 'static[ ]struct[ ]cdce_reg[ ]cdce_y1_27000\[\][ ]=' arch/arm/mach-davinci/cdce949.c
+ defsnc '[ ]u16[ ]map\[\][ ]=' drivers/hwmon/asc7621.c
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]az6027_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/az6027.c
+ blobname 'dvb-usb-az6027-03\.fw' drivers/media/dvb/dvb-usb/az6027.c
+ accept '[ ]p7500->firmware[ ]=' drivers/media/dvb/dvb-usb/dw2102.c
+ blobname 'dvb-usb-p7500\.fw' drivers/media/dvb/dvb-usb/dw2102.c
+ defsnc 'static[ ]u8[ ]ITUDecoderSetup\[4\]\[16\][ ]=' drivers/media/dvb/ngene/ngene-core.c
+ blobname 'ngene_1[567]\.fw' drivers/media/dvb/ngene/ngene-core.c
+ blobname 'sms1xxx-hcw-55xxx-i\?sdbt-02\.fw' drivers/media/dvb/siano/sms-cards.c
+ defsnc 'static[ ]u8[ ]samsung_smt_7020_inittab\[\][ ]=' drivers/media/video/cx88/cx88-dvb.c
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_\([qs]\?v\|x\)ga\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc '[ ]struct[ ]init_command[ ]\(spy\|cif\|ms350\|genius\|vivitar\)_start_commands\[\][ ]=' drivers/media/video/gspca/sn9c2028.c
+ defsnc 'static[ ]const[ ]u8[ ]n4_lt168g\[\][ ]=' drivers/media/video/gspca/t613.c
+ initc 'static[ ]const[ ]\(__\)\?u8[ ]\(mi\(0360\|13[12]0\)\|po\(1200\|3130\)\|hv7131r\|ov76[67]0\)_\(\(soc\)\?_\?[iI]nit\(Q\?V\|SX\)GA\(_\(JPG\|data\)\)\?\|rundata\)\[\]\[4\][ ]=\([ ][{][*][/][;]\)\?' drivers/media/video/gspca/vc032x.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]gamma_tb\[6\]\[16\][ ]=' drivers/media/video/gspca/zc3xx.c
+ blobname 'tlg2300_firmware\.bin' drivers/media/video/tlg2300/pd-main.c
+ defsnc '[ ]u8[ ]pattern\[42\][ ]=' drivers/net/ksz884x.c
+ defsnc '\(static[ ]\)\?const[ ]u8[ ]b43_ntab_framelookup\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u32[ ]\(b43_ntab_tx_gain_rev\(0_1_2\|3plus_2ghz\|\([34]\|5plus\)_5ghz\)\|txpwrctrl_tx_gain_ipa\(_\(rev\)\?[56]g\?\)\?\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u16[ ]tbl_iqcal_gainparams\[2\]\[9\]\[8\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]struct[ ]nphy_txiqcal_ladder[ ]ladder_\(lo\|iq\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u16[ ]loscale\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ blobname 'isl38\(86\|87\|90\)\(pci\|usb\(_bare\)\?\)\?' 'drivers/net/wireless/p54/p54\(pci\.c\|usb\.[ch]\)'
+ defsnc 'static[ ]struct[ ]conf_drv_settings[ ]default_conf[ ]=[ ][{][*][/][;]' drivers/net/wireless/wl12xx/wl1271_main.c
+ defsnc '[ ][}][ ]grtpkts\[\][ ]=' drivers/staging/mimio/mimio.c
+ blobname 'rt\(28[67]0\|30[79][01]\)\.bin' drivers/staging/rt2860/common/rtmp_mcu.c
+ accept '[ ]adapter->firmware[ ]=[ ]fw[;]' drivers/staging/rt2860/common/rtmp_mcu.c
+ blob '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*RTL8192SU[/]rtl1892swf\.bin[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/staging/rtl8192su/r8192S_firmware.c
+ accept 'MODULE_FIRMWARE[(]["]keyspan_pda[/]\(keyspan_pda\|xircom_pgs\)\.fw["][)][;]' drivers/usb/serial/keyspan_pda.c
+ # It's not clear that wm2000_anc.bin is pure data.
+ # Check with developer, clean up for now.
+ blobname 'wm2000_anc\.bin' sound/soc/codecs/wm2000.c
+ blob '[ ][*][ ]The[ ]download[ ]image[ ]for[ ]the[ ]WM2000[^*]*\([*]\+[^/*][^*]*\)*[*]*[<][ ]file[^*\n]*[\n][ ][*][/]' sound/soc/codecs/wm2000.c
+ # accept '[ ][*][ ].wm2000_anc\.bin.[ ]by[ ]default' sound/soc/codecs/wm2000.c
+ # accept '[ ][*][ ]*[<][ ]file[ ]\+[>]wm2000_anc\.bin' sound/soc/codecs/wm2000.c
+ # accept '[ ]filename[ ]=[ ]["]wm2000_anc\.bin["][;]' sound/soc/codecs/wm2000.c
+ defsnc '[}][ ]\(clk_sys_ratios\|bclk_divs\)\[\][ ]=' 'sound/soc/wm890[34]\.c'
+ defsnc '[}][ ]clock_cfgs\[\][ ]=' sound/soc/codecs/wm8955.c
+ blobname 'siu_spb\.bin' sound/soc/sh/siu_dai.c
+ defsnc 'static[ ]const[ ]u8[ ]poxxxx_init\(_common\|Q\?VGA\|_end_1\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ defsnc 'crb_128M_2M_map\[64\][ ]__cacheline_aligned_in_smp[ ]=' 'drivers/net/\(netxen/netxen_nic_hw.c\|qlcnic/qlcnic_hw.c\)'
+ ;;
+
+ */*freedo*.patch | */*logo*.patch)
+ accept 'P[13]\([\n]#[^\n]*\)*[\n]*\([\n][0-9 ]*\)\+' drivers/video/logo/logo_libre_clut224.ppm
+ ;;
+
+ */sched-fix-over-scheduling-bug.patch)
+ accept 'CPU[ ]\+before[ ]\+after[\n]\([\n][01][0-9][ ]\+:[ ][0-9]\+[ ]\+:[ ][67]\)*'
+ ;;
+
+ */*-loongson.patch)
+ defsnc 'static[ ]const[ ]u16[ ]Sbox\[256\][ ]=' drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c
+ defsnc 'u16[ ]rtl8225bcd_rxgain\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225.c
+ defsnc 'u8[ ]rtl8225_tx_power_cck\(_ch14\)\?\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225.c
+ defsnc 'u8[ ]rtl8225_agc\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225.c
+ defsnc 'static[ ]u32[ ]MAC_REG_TABLE\[\]\[3\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'static[ ]u8[ ][ ]*ZEBRA_AGC\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'static[ ]u32[ ]ZEBRA_RF_RX_GAIN_TABLE\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'u8[ ]ZEBRA2_CCK_OFDM_GAIN_SETTING\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'u16[ ]rtl8225z2_rxgain\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'u8[ ]rtl8225z2_tx_power_cck\(_ch14\)\?\[\]=' drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+ defsnc 'static[ ]struct[ ]vesa_mode_table[ ]vesa_mode\[\][ ]=' drivers/staging/sm7xx/smtcfb.c
+ defsnc 'struct[ ]ModeInit[ ]VGAMode\[\][ ]=' drivers/staging/sm7xx/smtcfb.h
+ ;;
+
+ */patch*2.6.34-rc*)
+ # New in 2.6.34, should be duplicated in the main pattern set.
+ blobname 'cxgb4[/]t4fw\.bin' drivers/net/cxgb4/cxgb4_main.c
+ defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]reg_ranges\[\][ ]=' drivers/net/cxgb4/cxgb4_main.c
+ defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]avg_pkts\[NCCTRL_WIN\][ ]=' drivers/net/cxgb4/t4_hw.c
+ # above in -rc5
+ defsnc 'static[ ]u32[ ]epll_div\[\]\[5\][ ]=' arch/arm/mach-s5p6440/clock.c
+ accept '[ ]aru->firmware[ ]=[ ]fw[;]' drivers/net/wireless/ath/ar9170/usb.c
+ accept '[ ]err[ ]=[ ]request_firmware[(][&]fw_entry,[ ]["]broadsheet\.wbf["],[ ]dev[)][;]' drivers/video/broadsheetfb.c
+ # above in -rc2, below in -rc1
+ accept '#[ ]\(Usage:[ ]cxacru-cf\.py[ ][<]\|Warning:\|Note:[ ]support[ ]for\)[ ]cxacru-cf\.bin' 'Documentation/networking/cxacru\(-cf\.py\|\.txt\)'
+ defsnc 'static[ ]struct[ ]cdce_reg[ ]cdce_y1_27000\[\][ ]=' arch/arm/mach-davinci/cdce949.c
+ defsnc '[ ]u16[ ]map\[\][ ]=' drivers/hwmon/asc7621.c
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]az6027_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/az6027.c
+ blobname 'dvb-usb-az6027-03\.fw' drivers/media/dvb/dvb-usb/az6027.c
+ accept '[ ]p7500->firmware[ ]=' drivers/media/dvb/dvb-usb/dw2102.c
+ blobname 'dvb-usb-p7500\.fw' drivers/media/dvb/dvb-usb/dw2102.c
+ defsnc 'static[ ]u8[ ]ITUDecoderSetup\[4\]\[16\][ ]=' drivers/media/dvb/ngene/ngene-core.c
+ blobname 'ngene_1[567]\.fw' drivers/media/dvb/ngene/ngene-core.c
+ blobname 'sms1xxx-hcw-55xxx-i\?sdbt-02\.fw' drivers/media/dvb/siano/sms-cards.c
+ defsnc 'static[ ]u8[ ]samsung_smt_7020_inittab\[\][ ]=' drivers/media/video/cx88/cx88-dvb.c
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_\([qs]\?v\|x\)ga\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc '[ ]struct[ ]init_command[ ]\(spy\|cif\|ms350\|genius\|vivitar\)_start_commands\[\][ ]=' drivers/media/video/gspca/sn9c2028.c
+ defsnc 'static[ ]const[ ]u8[ ]n4_lt168g\[\][ ]=' drivers/media/video/gspca/t613.c
+ initc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]\(__\)\?u8[ ]\(mi\(0360\|13[12]0\)\|po\(1200\|3130\)\|hv7131r\|ov76[67]0\)_\(\(soc\)\?_\?[iI]nit\(Q\?V\|SX\)GA\(_\(JPG\|data\)\)\?\|rundata\)\[\]\[4\][ ]=\([ ][{][*][/][;]\)\?' drivers/media/video/gspca/vc032x.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]gamma_tb\[6\]\[16\][ ]=' drivers/media/video/gspca/zc3xx.c
+ blobname 'tlg2300_firmware\.bin' drivers/media/video/tlg2300/pd-main.c
+ defsnc '[ ]u8[ ]pattern\[42\][ ]=' drivers/net/ksz884x.c
+ defsnc '\(static[ ]\)\?const[ ]u8[ ]b43_ntab_framelookup\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u32[ ]\(b43_ntab_tx_gain_rev\(0_1_2\|3plus_2ghz\|\([34]\|5plus\)_5ghz\)\|txpwrctrl_tx_gain_ipa\(_\(rev\)\?[56]g\?\)\?\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u16[ ]tbl_iqcal_gainparams\[2\]\[9\]\[8\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]struct[ ]nphy_txiqcal_ladder[ ]ladder_\(lo\|iq\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'const[ ]u16[ ]loscale\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ blobname 'isl38\(86\|87\|90\)\(pci\|usb\(_bare\)\?\)\?' 'drivers/net/wireless/p54/p54\(pci\.c\|usb\.[ch]\)'
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]struct[ ]conf_drv_settings[ ]default_conf[ ]=[ ][{][*][/][;]' drivers/net/wireless/wl12xx/wl1271_main.c
+ defsnc '[ ][}][ ]grtpkts\[\][ ]=' drivers/staging/mimio/mimio.c
+ blobname 'rt\(28[67]0\|30[79][01]\)\.bin' drivers/staging/rt2860/common/rtmp_mcu.c
+ accept '[ ]adapter->firmware[ ]=[ ]fw[;]' drivers/staging/rt2860/common/rtmp_mcu.c
+ blob '[/][*][^*]*\([*]\+[^/*][^*]*\)*[*]*RTL8192SU[/]rtl1892swf\.bin[^*]*\([*]\+[^/*][^*]*\)*[*]\+[/]' drivers/staging/rtl8192su/r8192S_firmware.c
+ accept 'MODULE_FIRMWARE[(]["]keyspan_pda[/]\(keyspan_pda\|xircom_pgs\)\.fw["][)][;]' drivers/usb/serial/keyspan_pda.c
+ # It's not clear that wm2000_anc.bin is pure data.
+ # Check with developer, clean up for now.
+ blobname 'wm2000_anc\.bin' sound/soc/codecs/wm2000.c
+ blob '[ ][*][ ]The[ ]download[ ]image[ ]for[ ]the[ ]WM2000[^*]*\([*]\+[^/*][^*]*\)*[*]*[<][ ]file[^*\n]*[\n][ ][*][/]' sound/soc/codecs/wm2000.c
+ # accept '[ ][*][ ].wm2000_anc\.bin.[ ]by[ ]default' sound/soc/codecs/wm2000.c
+ # accept '[ ][*][ ]*[<][ ]file[ ]\+[>]wm2000_anc\.bin' sound/soc/codecs/wm2000.c
+ # accept '[ ]filename[ ]=[ ]["]wm2000_anc\.bin["][;]' sound/soc/codecs/wm2000.c
+ defsnc '[}][ ]\(clk_sys_ratios\|bclk_divs\)\[\][ ]=' 'sound/soc/wm890[34]\.c'
+ defsnc '[}][ ]clock_cfgs\[\][ ]=' sound/soc/codecs/wm8955.c
+ blobname 'siu_spb\.bin' sound/soc/sh/siu_dai.c
+ defsnc 'static[ ]const[ ]u8[ ]poxxxx_init\(_common\|Q\?VGA\|_end_1\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ defsnc 'crb_128M_2M_map\[64\][ ]__cacheline_aligned_in_smp[ ]=' 'drivers/net/\(netxen/netxen_nic_hw.c\|qlcnic/qlcnic_hw.c\)'
+ # Pattern present prior to 2.6.34, or already adjusted for 2.6.34 in
+ # the main pattern set.
+ accept '[ ][ ][ ]Bit[ 0-7]*' Documentation/input/sentelic.txt
+ accept 'The[ ]hd-audio[ ]driver[ ]reads[ ]the[ ]file[ ]via[ ]request_firmware[(][)]\.' Documentation/sound/alsa/HD-Audio.txt
+ accept '[ ]\.section[ ]__ex_table,["]a["]'"$sepx$blobpat*" arch/powerpc/lib/copyuser_64.S
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp0222\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp1110\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp3033\[256\][ ]=' crypto/camellia.c
+ defsnc 'static[ ]const[ ]u32[ ]camellia_sp4404\[256\][ ]=' crypto/camellia.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u8[ ]\(start\|page3\)_7302\[\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/pac7302.c
+ defsnc 'static[ ]const[ ]__u8[ ]pas202_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ blob 'sub[ ]\(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|cx\(23\(1xx\|885\)\|18\)\|pvrusb2\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\|mpc718\|af9015\|ngene\)[ ]*[{]\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]\([\n]\+sub[ ]\(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|cx\(23\(1xx\|885\)\|18\)\|pvrusb2\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\|mpc718\|af9015\|ngene\)[ ]*[{]\([\n]\+[^\n}][^\n]*\)*[\n]\+[}]\)*' Documentation/dvb/get_dvb_firmware
+ accept '\([/][*][*][\n]\)\?[ ][*][ ]request_firmware_nowait\(:\|[ ]-\)[ ]asynchronous[ ]version[ ]of[ ]request_firmware' drivers/base/firmware_class.c
+ blobname 'b43\(legacy\)\?\(%s\)\?[/]\(%s\|ucode\([2459]\|1[1345]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c'
+ blobname '\(sep[/]\)\?\(cache\|resident\)\.image\.bin' drivers/staging/sep/sep_driver.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u8[ ]\(mi1320\|po3130\)_initVGA_data\[\]\[4\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ accept '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]request_firmware_work_func' drivers/base/firmware_class.c
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init_ov965x\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_ov965x_\(\([qs]\?v\|x\)ga\|cif\)\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]\(__u16\|struct[ ]cmd\)[ ]spca504\(_pccam600\|A_clicksmart420\)_\(init\|open\)_data\[\]\(\[3\]\)\?[ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sunplus.c
+ # above is in -rc1, below in -rc2
+ defsnc 'static[ ]struct[ ]pinmux_cfg_reg[ ]pinmux_config_regs\[\][ ]=' 'arch/sh/kernel/cpu/sh2a/pinmux-sh7203\.c\|arch/arm/mach-shmobile/pfc-sh73[67]7\.c'
+ defsnc 'static[ ]const[ ]u8[ ]ratio_lut\[\][ ]=' drivers/misc/tsl2550.c
+ initnc 'static[ ]const[ ]u16[ ]count_lut\[\][ ]=' drivers/misc/tsl2550.c
+ accept 'static[ ]int[ ]ar9170_usb_request_firmware[(]' drivers/net/wireless/ar9170/usb.c
+ accept '[ ]\(err[ ]=\|return\)[ ]request_firmware\(_nowait\)\?[(][^\n]*["]ar9170\(-[12]\)\?\.fw["],' drivers/net/wireless/ar9170/usb.c
+ accept '[ ]err[ ]=[ ]ar9170_usb_request_firmware[(]' drivers/net/wireless/ar9170/usb.c
+ blobname '%s%[du]%s["],[\n ]*name_pre,[ ]\(priv->fw_\)\?index,[ ]["]\.ucode' 'drivers/net/iwlwifi/iwl\(3945-base\|-agn\).c'
+ accept '#include[ ]["]ixp2400_[rt]x\.ucode["]' drivers/net/ixp2000/ixpdev.c
+ ;;
+
+ */patch*2.6.33-rc*)
+ accept 'static[ ]inline[ ]int[\n]\(maybe_\)\?reject_firmware\(_nowait\)\?[(][^{;]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*\([\n]\+[}]\)\?' include/linux/firmware.h
+ accept '[ ][ ]ranges[ ]=[ ]<'"$blobpat*"'>[;]' 'arch/powerpc/boot/dts/\(mpc8572ds\|p2020ds\|katmai\)\.dts'
+ defsnc 'static[ ]unsigned[ ]char[ ]camera_ncm03j_magic\[\][ ]=' 'arch/sh/boards/\(board-ap325rxa\.c\|mach-ap325rxa/setup\.c\)'
+ defsnc 'static[ ]unsigned[ ]char[ ]vga_font\[cmapsz\][ ]\(BTDATA[ ]\)\?=' arch/sparc/kernel/btext.c
+ accept '[ ][ ][ ]req_firm_rc[ ]=[ ]request_firmware_nowait[(][^;]*,[ ]["]dell_rbu["],' drivers/firmware/dell_rbu.c
+ defsnc 'struct[ ]nv17_tv_norm_params[ ]nv17_tv_norms\[NUM_TV_NORMS\][ ]=' drivers/gpu/drm/nouveau/nv17_tv_modes.c
+ defsnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]u16[ ]stufftab\[5[ ][*][ ]256\][ ]=[ ][{]\([*][/][;]\)\?[\n]' drivers/isdn/gigaset/isocdata.c
+ defsnc 'static[ ]const[ ]__u8[ ]\(start\|page[34]\)_73\(02\|11\)\[\][ ]=' 'drivers/media/video/gspca/pac73\(02\|11\)\.c'
+ defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals\(_3070\)\?\[\][ ]=' drivers/net/wireless/prism54/islpci_dev.c
+ defsnc 'static[ ]uint32[ ][FR]Sb\[256\][ ]=' 'drivers/staging/rt28[67]0/common/\(md5\|cmm_aes\)\.c'
+ defsnc 'static[ ]const[ ]u16[ ]Sbox\[256\][ ]=' # 'drivers/staging/rtl8192u/r819xU_firmware.c' and elsewhere
+ defsnc 'u16[ ]MCS_DATA_RATE\[2\]\[2\]\[77\][ ]=' 'drivers/staging/\(rtl8192su/ieee80211/rtl819x_HTProc\.c\|rtl8192u/r819xU_firmware\.c\)'
+ defsnc '\(static[ ]\)\?u32[ ]Rtl8190PciE\?\(AGCTAB_\|PHY_REG\(_1T2R\)\?\|Radio[ABCD]_\)Array\[\(AGCTAB_\|PHY_REG\(_1T2R\)\?\|Radio[ABCD]_\)ArrayLength\][ ]=' 'drivers/staging/\(rtl8192e/r819xE_phy\.c\|rtl8192u/r819xU_firmware_img.c\)'
+ defsnc 'u32[ ]Rtl8192Usb\(PHY_REG\(_1T2R\)\?\|\(Radio[ABCD]\|MACPHY\|AGCTAB\)_\)Array\(_PG\)\?\[\][ ]=' drivers/staging/rtl8192su/rtl819xU_firmware_img.c
+ defsnc '[ ][ ]static[ ]const[ ]unsigned[ ]char[ ]asso_values\[\][ ]=' scripts/genksyms/keywords.c_shipped
+ accept '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]request_firmware_work_func[(]void[ ][*]arg[)][*][/][;][\n]\([^\n]*[\n]\)\+\([ ]ret[ ]=[ ]_request_firmware[(]\|request_firmware_nowait[(]\)\?' drivers/base/firmware_class.c
+ accept '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]struct[ ]dvb_usb_device_properties[ ]af9015_properties\(\[\]\)\?[ ]=[ ][{][*][/][;][\n][ ][ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/af9015.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u8[ ]bridge_start_ov965x\[\]\[2\][ ]=[ ][{][*][/][;][\n]' drivers/media/video/gspca/ov534.c
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_ov965x_\(\([qs]\?v\|x\)ga\|cif\)\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131r\|mi0360\|mo4000\|ov76\([36]0\|48\)\|om6802\|po1030\)_sensor_init\[\]\[8\][ ]=[ ][{]\([*][/][;]\)\?[\n]' drivers/media/video/gspca/sonixj.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]\(const[ ]\)\?u32[ ]ar\(5416\|9280\)\(Modes\(_fast_clock\)\?\|Common\|BB_RfGain\|Bank6\(TPC\)\?\|Addac\)\(_91[06]0\(1_1\)\?\|_9280\(_2\)\?\)\?\[\]\[[236]\][ ]=[ ][{][*][/][;][\n]' drivers/net/wireless/ath9k/initvals.h
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u_int32_t[ ]ar9271\(Common\|Modes\)_9271_1_0\[\]\[[26]\][ ]=[ ][{][*][/][;][\n]' drivers/net/wireless/ath9k/initvals.h
+ defsnc '\(U\(INT\|CHAR\)\|u\(32\|8\)\)[ ]\(Tkip_Sbox_\(Lower\|Upper\)\|SboxTable\)\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_tkip\.c'
+ defsnc '\(RTMP_RF_REGS\|struct[ ]rt_rtmp_rf_regs\)[ ]RF2850RegTable\[\][ ]=' 'drivers/staging/rt28[67]0/common/\(mlme\.c\|cmm_asic\.c\)'
+ defsnc '\(FREQUENCY_ITEM\|struct[ ]rt_frequency_item\)[ ]FreqItems3020\[\][ ]=' 'drivers/staging/rt28[67]0/common/\(mlme\.c\|cmm_asic\.c\)'
+ defsnc '\(UINT\|u32\)[ ]FCSTAB_32\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/common/\(rtmp\|cmm\)_wep\.c'
+ defsnc '\(UCHAR\|u8\)[ ]RateSwitchTable\(11B\?G\?\(N[123]S\(ForABand\)\?\)\?\)\?\[\][ ]=' 'drivers/staging/rt28[67]0/common/mlme\.c'
+ defsnc '\(UCHAR\|u8\)[ ]*ZeroSsid\[32\][ ]=' 'drivers/staging/rt28[67]0/common/mlme\.c'
+ defsnc '\(CH_FREQ_MAP\|struct[ ]rt_ch_freq_map\)[ ]CH_HZ_ID_MAP\[\][ ]\?=' 'drivers/staging/\(rt2860\|rt3090\)/common/rt_channel\.c'
+ defsnc '\(DOT11_REGULATORY_INFORMATION\|struct[ ]rt_dot11_regulatory_information\)[ ]\(USA\|Europe\|Japan\)RegulatoryInfo\[\][ ]=' 'drivers/staging/\(rt3090\|rt2860\)/common/spectrum\.c'
+ defsnc '\([ ][ ][ ][ ]\|[ ]\)u_int32_t[ ]ralinkrate\[256\][ ]=' 'drivers/staging/rt\(28[67]0\|3070\)/rt_linux\.c'
+ defsnc '\(static[ ]uint32_t\|[}]\)[ ]nv04_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv04_graph.c
+ defsnc 'static[ ]int[ ]nv10_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv10_graph.c
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]\(dw\(210[24]\|3101\)\|s6[3x]0\)_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/dw2102.c
+ defsnc 'static[ ]int[ ]zoom2_batt_table\[\][ ]=' arch/arm/mach-omap2/board-zoom2.c
+ defsnc 'static[ ]u8[ ]af9015_ir_table_\(leadtek\|twinhan\|a_link\|msi\|mygictv\|kworld\)\[\][ ]=' drivers/media/dvb/dvb-usb/af9015.h
+ defsnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]struct[ ]usb_action[ ]\(cs2102\|hdcs2020xx\|icm105axx\|ov7630c\|pb0330[3x]x\)_Initial\(Scale\)\?\[\][ ]=[ ][{]\([*][/][;]\)\?[\n]' drivers/media/video/gspca/zc3xx.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]log10\[\][ ]=' drivers/net/wireless/zd1211rw/zd_chip.c
+ defsnc '[ ][ ][ ][ ]static[ ]UINT32[ ]MD5Table\[64\][ ]=' 'drivers/staging/rt28[67]0/common/md5\.c'
+ defsnc 'ULONG[ ][ ]*BIT32\[\][ ]=' 'drivers/staging/rt28[67]0/common/rtmp_init\.c'
+ defsnc 'static[ ]UINT8[ ]WPS_DH_\([PRX]\|RRModP\)_VALUE\[1\(9[23]\|84\)\][ ]=' drivers/staging/rt3090/common/crypt_biginteger.c
+ defsnc 'static[ ]const[ ]UINT32[ ]SHA256_K\[64\][ ]=' drivers/staging/rt3090/common/crpt_sha2.c
+ accept '[ * ]*0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]1[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]2[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]3[\n][ * ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1' 'net/\(netfilter\|ipv4\)/ipvs/ip_vs_sync\.c\|net/sctp/sm_make_chunk\.c\|include/linux/scpt\.h\|drivers/staging/rt3090/common/igmp_snoop\.c'
+ defsnc 'const[ ]unsigned[ ]short[ ]ccitt_16Table\[\][ ]=' 'drivers/staging/rt\(28[67]0\|3090\)/common/rtmp_init\.c'
+ defsnc 'static[ ]const[ ]USHORT[ ]Sbox\[256\][ ]=' drivers/staging/rt3090/sta/rtmp_ckipmic.c
+ accept '[ ]len[ ]=[ ]mod_firmware_load[(]fn,[ ][&]data[)][;][\n][ ]if[ ][^{]*[ ][{][\n][ ][ ]*printk[(]KERN_ERR[ ]["]sscape:' sound/oss/sscape.c
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]=' 'sound/pci/ice1712/\(phase\|aureon\)\.c'
+ accept '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?\(static[ ]inline[ ]\)\?int[ ]request_firmware\(_nowait\)\?[(]\(const[ ]struct[ ]firmware[ ][*][*]\|[\n][ ]struct[ ]module[ ][*]\)' include/linux/firmware.h
+ blobname 'isl38\(77\|86\|90\)' drivers/net/wireless/prism54/islpci_dev.c
+ accept '[ ]*#[ ]*define[ ]\(STA_PROFILE\|CARD_INFO\)_PATH[ ]*["][/]etc[/]Wireless[/]RT\(28[67]\|307\)0STA[/]RT\(28[67]\|307\)0STA\(Card\)\?\.dat["]' 'drivers/staging/rt\(28[67]0\|3070\)/rt_linux\.h'
+ accept '#include[ ]["]rf\.h["][\n]#include[ ]["]firmware\.h["]' drivers/staging/vt6656/main_usb.c
+ blob '#include[ ]*["]\(\.\.[/]\(\.\.[/]rt30[79]0[/]\)\?\)\?firmware\.h["]' 'drivers/staging/rt\(28[67]\|309\)0/common/rtmp_\(init\|mcu\)\.c'
+ blobna 'Derived[ ]from[ ]proprietary[ ]unpublished[ ]source[ ]code' drivers/net/tg3.c
+ blobname 'atmel_at76c50\(2\([de]\|_3com\)\?\|4a\?\(_2958\)\?\|6\)\(\.bin\)\?' drivers/net/wireless/atmel.c
+ blobna '\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\([\n ]*\(pFirmwareImage[ ]=\([ ]FirmwareImage\(_\(28[67]\|30[79]\)0\)\?\|[\n ]*[(]\(PUCHAR\|u8[ ][*]\)[)][&][\n ]*FirmwareImage\(_\(28\|30\)70\)\?\[FIRMWAREIMAGE\(V[12]\)\?_LENGTH\]\)\|File[lL]ength[ ]=[ ]\(sizeof[(]FirmwareImage[)]\|FIRMWAREIMAGE\(V[12]\|_MAX\)\?_LENGTH\)\)[;]\)*' 'drivers/staging/rt\(28[67]0\|30[79]0\)/common/rtmp_init\.c'
+ blobname '\(nx\(romimg\|3fw\(ct\|mn\)\)\|phanfw\)\.bin' 'drivers/net/netxen/netxen_nic\(_\(hw\|init\)\.c\|\.h\)'
+ # The above are covered by the main Linux patterns. The patterns
+ # below are to be kept in sync in the 2.6.33 block within the main
+ # Linux patterns, until 2.6.33 is released.
+ accept '[ ]*just[ ]run[ ]["]cat[ ][/]sys[/]firmware[/]acpi[/]tables[/]DSDT[ ]>[ ][/]tmp[/]dsdt[.]dat["]' Documentation/acpi/method-customizing.txt
+ accept '[ ]*b[)][ ]disassemble[ ]the[ ]table[ ]by[ ]running[ ]["]iasl[ ]-d[ ]dsdt[.]dat["][.]' Documentation/acpi/method-customizing.txt
+ accept '[ ]*x=["]7999\([ ][0-9]\+\)\+["]' Documentation/blockdev/drbd/DRBD-8.3-data-packets.svg
+ defsnc 'static[ ]int[ ]zoom_batt_table\[\][ ]=' arch/arm/mach-omap2/board-zoom-peripherals.c
+ defsnc 'static[ ]u16[ ]x[48]_vectors\[\][ ]=' drivers/edac/amd64_edac.c
+ defsnc 'static[ ]const[ ]u16[ ]\(y\|uv\)_static_hcoeffs\[N_HORIZ_\(Y\|UV\)_TAPS[ ][*][ ]N_PHASES\][ ]=' drivers/gpu/drm/i915/intel_overlay.c
+ accept '[ ]\.download_firmware[ ]=[ ]ec168_download_firmware,[\n][ ]\.firmware[ ]=[ ]' drivers/media/dvb/dvb-usb/ec168.c
+ blobname 'dvb-usb-ec168\.fw' drivers/media/dvb/dvb-usb/ec168.c
+ defsnc 'static[ ]const[ ]u16[ ]dib0090_defaults\[\][ ]=' drivers/media/dvb/frontends/dib0090.c
+ defsnc 'static[ ]const[ ]struct[ ]dib0090_pll[ ]dib0090_pll_table\[\][ ]=' drivers/media/dvb/frontends/dib0090.c
+ blobname 'dvb-fe-ds3000\.fw' drivers/media/dvb/frontends/ds3000.c
+ blob '[/][*][ ]\(as[ ]of[ ][^\n]*[ ]current[ ]DS3000[ ]firmware\|DS3000[ ]FW\)[^/]*[*][/]\([\n][/][*]\([ ]\(as[ ]of[ ][^\n]*[ ]current[ ]DS3000[ ]firmware\|DS3000[ ]FW\)[^/]*\|[(]DEBLOBBED[)]\)[*][/]\)*' drivers/media/dvb/frontends/ds3000.c
+ defsnc 'static[ ]u8[ ]ds3000_dvbs2\?_init_tab\[\][ ]=' drivers/media/dvb/frontends/ds3000.c
+ defsnc '[ ]static[ ]const[ ]u16[ ]dvbs2_snr_tab\[\][ ]=' drivers/media/dvb/frontends/ds3000.c
+ defsnc 'static[ ]const[ ]struct[ ]cnr[ ]cnr_tab\[\][ ]=' drivers/media/dvb/frontends/mb86a16.c
+ defsnc 'u8[ ]lgtdqcs001f_inittab\[\][ ]=' drivers/media/dvb/mantis/mantis_vp1033.c
+ defsnc 'static[ ]const[ ]struct[ ]ov9640_reg[ ]ov9640_regs_dflt\[\][ ]=' drivers/media/video/ov9640.c
+ defsnc 'const[ ]static[ ]struct[ ]rj54n1_reg_val[ ]bank_[4578]\[\][ ]=' drivers/media/video/rj54n1cb0c.c
+ blob '#define[ ]_FW_NAME[(]api[)][ ]DRV_NAME[ ]["][.]["][ ]#api[ ]["]\.fw["]' drivers/media/video/iwmc3200top.h
+ defsnc 'static[ ]struct[ ]nand_ecclayout[ ]nandv2_hw_eccoob_largepage[ ]=' drivers/mtd/nand/mxc_nand.c
+ blob '#define[ ]FW_FILE_VERSION\([ ]*[\\][\n][ ]__stringify[(]BCM_5710_FW_\(MAJOR\|MINOR\|REVISION\|ENGINEERING\)_VERSION[)]\([ ]["][.]["]\)\?\)\+' drivers/net/bnx2x_main.c
+ blobname 'bnx2x-e1h\?-["][ ]FW_FILE_VERSION[ ]["]\.fw' drivers/net/bnx2x_main.c
+ blob '#define[ ]FW_VERSION\([ ]__stringify[(]FW_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c
+ blobname 'cxgb3[/]t3fw-["][ ]FW_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c
+ blob '#define[ ]TPSRAM_VERSION\([ ]__stringify[(]TP_VERSION_\(MAJOR\|MINOR\|MICRO\)[)]\([ ]["][.]["]\)\?\([ ]*[\\][\n]\)\?\)\+' drivers/net/cxgb3/cxgb3_main.c
+ blobname 'cxgb3[/]t3\(%c\|[bc]\)_psram-["][ ]TPSRAM_VERSION[ ]["]\.bin' drivers/net/cxgb3/cxgb3_main.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]rsshash\[40\][ ]=' drivers/net/igb/igb_main.c
+ defsnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_302x\[\][ ]=' drivers/net/wireless/rt2x00/rt2800lib.c
+ defsnc 'static[ ]struct[ ]conf_drv_settings[ ]default_conf[ ]=' drivers/net/wireless/wl12xx/wl1271_main.c
+ defsnc 'static[ ]u16[ ]bios_to_linux_keycode\[256\][ ]=' drivers/platform/x86/dell-wmi.c
+ accept '[ ]err[ ]=[ ]request_firmware[(][&]pm8001_ha->fw_image,' drivers/scsi/pm8001/pm8001_ctl.c
+ defsnc 'static[ ]unsigned[ ]char[ ]vpdb0_data\[\][ ]=' drivers/scsi/scsi_debug.c
+ defsnc 'static[ ]struct[ ]vesa_mode_table[ ]vesa_mode\[\][ ]=' drivers/staging/sm7xx/smtcfb.c
+ defsnc 'struct[ ]ModeInit[ ]VGAMode\[\][ ]=' drivers/staging/sm7xx/smtcfb.h
+ blob 'static[ ]const[ ]hcf_8[ ]fw_image_[1234]_data\[\][ ]=[^;]*[;]\([ ]*[/][*][ ]fw_image_[1234]_data[ ][*][/]\)\?' 'drivers/staging/wlags49_h2/\(ap\|sta\)_h25\?\.c'
+ blobname '[/]etc[/]agere[/]fw\.bin' drivers/staging/wlags49_h2/wl_profile.c
+ defsnc 'static[ ]const[ ]long[ ]chan_freq_list\[\]\[MAX_CHAN_FREQ_MAP_ENTRIES\][ ]=' drivers/staging/wlags49_h2/wl_util.c
+ blobname 'scope\.cod' 'sound/isa/\(Kconfig\|sscape\.c\)'
+ blobname 'sndscape\.co\([?dx01234]\|%d\)' 'sound/\(isa/\(Kconfig\|sscape\.c\)\|oss/README\.OSS\)'
+ defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ blobname 'ath3k-1\.fw' drivers/bluetooth/ath3k.c
+ ;;
+
+ */patch*2.6.27*|*/patch*2.6.31.*)
+ accept '[ ]request_firmware[(][)][ ]will[ ]hit[ ]an[ ]OOPS' drivers/media/dvb/frontends/dib7000p.c
+ ;;
+
+ */patch*2.6.30*)
+ initnc '[}][ ]bclk_divs\[\][ ]=[ ][{]' sound/soc/codecs/wm8903.c
+ ;;
+
+ */patch*2.6.28-rc*)
+ # new in 2.6.28
+ accept '\(static[ ]\)\?const[ ]char[ ]\(inv\)\?parity\[256\][ ]=[ ][{][ \n01,]*[}][;]' 'Documentation/mtd/nand_ecc\.txt\|drivers/mtd/nand/nand_ecc\.c'
+ defsnc 'static[ ]const[ ]char[ ]\(bitsperbyte\|addressbits\)\[256\][ ]=' drivers/mtd/nand/nand_ecc.c
+ defsnc 'static[ ]struct[ ]pinmux_cfg_reg[ ]pinmux_config_regs\[\][ ]=' arch/sh/kernel/cpu/sh2a/pinmux-sh7203.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]e_keymap\[\][ ]=' drivers/hid/hid-lg.c
+ defsnc '[ ][ ]*struct[ ]phy_reg[ ]phy_reg_init_[01]\[\][ ]=' drivers/net/r8169.c
+ defsnc 'DEFINE_DEFAULT_PDR[(]0x0161,[ ]256,' drivers/net/wireless/hermes_dld.c
+ defsnc 'static[ ]const[ ]int[ ]isink_cur\[\][ ]=' drivers/regulator/wm8350-regulator.c
+ defsnc 'static[ ]const[ ]s16[ ]\(converge_speed_ipb\?\|LAMBDA_table\[4\]\)\[101\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]u32[ ]addrinctab\[33\]\[2\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]u8[ ]\(default_intra_quant_table\|\(val\|bits\)_[ad]c_\(lu\|chro\)minance\)\[\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]const[ ]int[ ]zz\[64\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc '[ ]u16[ ]pack\[\][ ]=' drivers/staging/go7007/go7007-fw.c
+ defsnc 'static[ ]u8[ ]\(initial\|channel\)_registers\[\][ ]=' 'drivers/staging/go7007/wis-\(ov7640\|saa7113\|tw2804\).c'
+ defsnc 'u16[ ]MTO_One_Exchange_Time_Tbl_[ls]\[MTO_MAX_FRAG_TH_LEVELS\]\[MTO_MAX_DATA_RATE_LEVELS\][ ]=' drivers/staging/winbond/mto.c
+ defsnc 'u32[ ]\(al2230_txvga_data\|w89rf242_txvga_old_mapping\)\[\]\[2\][ ]=' drivers/staging/winbond/reg.c
+ defsnc 'static[ ]const[ ]UINT16[ ]crc16tab\[256\][ ]=' drivers/staging/wlan-ng/hfa384x.c
+ defsnc 'static[ ]const[ ]UINT32[ ]wep_crc32_table\[256\][ ]=' drivers/staging/wlan-ng/p80211wep.c
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]=' sound/pci/ice1712/phase.c
+ defsnc 'static[ ]const[ ]u16[ ]wm8900_reg_defaults\[WM8900_MAXREG\][ ]=' sound/soc/wm8900.c
+ defsnc '[}][ ]\(clk_sys_ratios\|bclk_divs\)\[\][ ]=' sound/soc/wm8903.c
+ defsnc 'static[ ]u8[ ]af9015_ir_table_\(leadtek\|twinhan\|a_link\|msi\|mygictv\|kworld\)\[\][ ]=' drivers/media/dvb/dvb-usb/af9015.h
+ defsnc 'static[ ]struct[ ]snr_table[ ]\(qpsk\|qam\(16\|64\)\)_snr_table\[\][ ]=' drivers/media/dvb/frontends/af9013_priv.h
+ defsnc 'static[ ]struct[ ]regdesc[ ]\(ofsm_init\|tuner_init_\(env77h11d5\|mt2060\(_2\)\?\|mxl500\(3d\|5\)\|qt1010\|mc44s803\|unknown\|tda18271\)\)\[\][ ]=' drivers/media/dvb/frontends/af9013_priv.h
+ defsnc 'static[ ]u8[ ]stv0288_earda_inittab\[\][ ]=' drivers/media/dvb/frontends/eds1547.h
+ defsnc 'static[ ]u8[ ]serit_sp1511lhb_inittab\[\][ ]=' drivers/media/dvb/frontends/si21xx.c
+ defsnc 'static[ ]u8[ ]stv0288_inittab\[\][ ]=' drivers/media/dvb/frontends/stv0288.c
+
+ blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c
+
+ # Non-Free license in entire file.
+ blob 'static[ ]unsigned[ ]char[ ]xilinx_firm\(_4610\)\?\[\][ ]=[ ][{]'"$sepx$blobpat*$sepx"'[}][;]' 'drivers/staging/me4000/me4\(00\|61\)0_firmware\.h'
+ blob 'static[ ]struct[ ]PHY_UCODE[ ]PhyUcode\[\][ ]=[^;]*[;]' drivers/staging/sxg/sxgphycode.h
+ blob 'static[ ]unsigned[ ]char[ ]SaharaUCode\[2\]\[57972\][ ]=[^;]*[;]' drivers/staging/sxg/saharadbgdownload.h
+ blob '#include[ ]["]saharadbgdownload\.h["]' drivers/staging/sxg/sxg.c
+ blob 'static[ ]u8[ ]\(Mojave\|Oasis\)UCode\[2\]\[65536\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\(dbg\)\?\)download\.h'
+ blob 'static[ ]u8[ ]\(GB\|Oasis\)RcvUCode\[2560\][ ]=[^;]*[;]' 'drivers/staging/slicoss/\(gb\|oasis\)rcvucode\.h'
+
+ # ok from earlier releases
+ accept 'for[ ]i[ ]in[ ][ 0-9\\\n]*[\n]do' 'Documentation/specialix.txt|Documentation/serial/specialix.txt'
+ defsnc 'static[ ]yyconst[ ]flex_int\(16\|32\)_t[ ]yy_[^[]*\[[0-9]*\][ ]=' '.*\.lex\.c_shipped'
+ defsnc 'static[ ]const[ ]yytype_u\?int\(8\|16\)[ ]yy[^\n []*\[\][ ]=' '.*\.lex\.c_shipped'
+ initnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]yytype_u\?int\(8\|16\)[ ]yy[^\n []*\[\][ ]=[*][/][;]' '.*\.tab\.c_shipped'
+ defsnc 'static[ ]struct[ ]cipher_testvec[ ]\(aes\|anubis\|bf\|camellia\|cts_mode\|des3_ede\|cast6\|salsa20_stream\|serpent\|tf\|tnepres\|xeta\|x\?tea\)\(_\(cbc\|ctr\|xts\)\)\?_\(enc\|dec\)_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ defsnc 'static[ ]struct[ ]comp_testvec[ ]\(deflate\|lzo\)_\(de\)\?comp_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ defsnc 'static[ ]struct[ ]hash_testvec[ ]\(aes_xcbc128\|crc32c\|hmac_sha2\(24\|56\)\|\(sha\|wp\)\(256\|384\|512\)\)_tv_template\[\][ ]=' 'crypto/\(tcrypt\|testmgr\).h'
+ defsnc 'static[ ]\(const[ ]\)\?RegInitializer[ ]initData\[\][ ]__initdata[ ]=' 'drivers/ide/ali14xx\.c\|drivers/ide/legacy/ali14xx\.c'
+ defsnc 'static[ ]const[ ]u8[ ]setup\[\][ ]=' 'drivers/ide/pci/delkin_cb\.c\|drivers/ide/delkin_cb\.c'
+ defsnc 'static[ ]u8[ ]cvs_time_value\[\]\[XFER_UDMA_6[ ]-[ ]XFER_UDMA_0[ ][+][ ]1\][ ]=' 'drivers/ide/sis5513\.c\|drivers/ide/pci/sis5513\.c'
+ defsnc 'static[ ]u8[ ]\(act\|ini\|rco\)_time_value\[\]\[8\][ ]=' 'drivers/ide/sis5513\.c\|drivers/ide/pci/sis5513\.c'
+ defsnc 'static[ ]const[ ]u8[ ]speedtab[ ]\[3\]\[12\][ ]=' 'drivers/ide/umc8672\.c\|drivers/ide/legacy/umc8672\.c'
+ initnc 'static[ ]const[ ]__u8[ ]\(effects\|gamma\)_table\[\(MAX_[A-Z]*\|[A-Z]*_MAX\)\]\[[0-9]*\][ ]=' drivers/media/video/gspca/t631.c
+ defsnc 'static[ ]const[ ]s8[ ]\(b43\(legacy\)\?\|bcm43xx\)_tssi2dbm_[bg]_table\[\][ ]=' net/wireless/b43/phy.c
+ accept '#define[ ]_MAP_0_32_ASCII_SEG7_NON_PRINTABLE[ ]\\[\n][ ]\(0,\)\+$' 'drivers/input/misc/map_to_7segment\.h\|include/linux/map_to_7segment\.h'
+ accept '[ * ]*0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]1[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]2[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]3[\n][ * ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1' 'net/\(netfilter\|ipv4\)/ipvs/ip_vs_sync\.c\|net/sctp/sm_make_chunk\.c\|include/linux/scpt\.h\|drivers/staging/rt3090/common/igmp_snoop\.c'
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]=' sound/pci/ice1712/phase.c
+ defsnc 'static[ ]const[ ]char[ ]zr360[56]0_dht\[0x1a4\][ ]=' 'drivers/media/video/zr36060\.c\|drivers/media/video/zoran/zr36060\.c'
+ defsnc 'static[ ]const[ ]char[ ]zr360[56]0_dqt\[0x86\][ ]=' 'drivers/media/video/zr36060\.c\|drivers/media/video/zoran/zr36060\.c'
+
+ # These are removed in 2.6.28, they're here so --reverse-patch tests pass.
+ defsnc 'static[ ]unsigned[ ]char[ ]irq_xlate\[32\][ ]=' arch/sparc/kernel/sun4m_irq.c
+ defsnc 'static[ ]int[ ]logitech_expanded_keymap\[LOGITECH_EXPANDED_KEYMAP_SIZE\][ ]=' drivers/hid/hid-input.c
+ initc '[ ]static[ ]const[ ]__u8[ ]\(read_indexs\|n\(set\)\?[0-9]*\|missing\)\[[0-9x]*\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc 'static[ ]const[ ]u_char[ ]nand_ecc_precalc_table\[\][ ]=' drivers/mtd/nand/nand_ecc.c
+ oprepline '#define[ ]AR5K_RATES_\(11[ABG]\|TURBO\|XR\)[ ]' drivers/net/wireless/ath5k/ath5k.h
+ defsnc 'static[ ]const[ ]struct[ ]ath_hal[ ]ar5416hal[ ]=' drivers/net/wireless/ath9k/hw.c
+ defsnc 'const[ ]unsigned[ ]char[ ]INIT_2\[127\][ ]=' drivers/video/omap/lcd_sx1.c
+
+ initc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u8[ ]ov7630_sensor_init\[\]\[8\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ ;;
+
+ */patch*2.6.27-rc* | */patch*2.6.26-git* | */git-linus.diff)
+ accept '[ ]\.section[ ]__ex_table,["]a["]'"$sepx$blobpat*" 'arch/x86/lib/copy_user_\(nocache_\)\?64.S'
+ initnc 'static[ ]struct[ ]cipher_testvec[ ]des3_ede_cbc_\(enc\|dec\)_tv_template\[\][ ]=' crypto/tcrypt.h
+ accept 'desc_config1:[\n][ ]\.byte[ ]0x09,[ ]0x02'"$sepx$blobpat*" 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_mfg:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_mfg_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_product:[\n]\?\([;]\?[ ]\.byte[^\n]*[\n]\)\+string_product_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept ':03000000020200F9[\n]:040023000205\(9B0037\|5F0073\)[\n]\(:050030000000000000CB[\n]\|:0400430002010000B6[\n]\)*'"$sepx$blobpat*"'[\n]:\(0E06E0006400670065007400060334003700F4\|0606A000060334003700E0\)[\n]:00000001FF[\n]' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).HEX'
+ accept ':100000000C004000000000000000000000000000A4[\n]'"$sepx$blobpat*"'[\n][/][*][ ]DSP56001[ ]bootstrap[ ]code[ ][*][/]' firmware/dsp56k/bootstrap.bin.ihex
+ initnc 'static[ ]const[ ]u16[ ]uda1380_reg\[UDA1380_CACHEREGNUM\][ ]=' sound/soc/codecs/uda1380.c
+ initnc 'static[ ]const[ ]u16[ ]wm8510_reg\[WM8510_CACHEREGNUM\][ ]=' sound/soc/codecs/wm8510.c
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]atkbd_set[23]_keycode\[512\][ ]=' drivers/input/keyboard/atkbd.c
+ initnc 'static[ ]const[ ]unsigned[ ]short[ ]atkbd_unxlate_table\[128\][ ]=' drivers/input/keyboard/atkbd.c
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]usb_kbd_keycode\[256\][ ]=' drivers/hid/usbhid/usbkbd.c
+ initnc '[ ][ ]u8[ ]buf,[ ]bufs\[\][ ]=' drivers/media/dvb/dvb-usb/cxusb.c
+ initnc 'static[ ]struct[ ]dvb_pll_desc[ ][^\n]*[ ]=' drivers/media/dvb/frontends/dvb-pll.c
+ initnc '[ ]static[ ]int[ ]sysdiv_to_div_x_2\[\][ ]=' arch/powerpc/platforms/512x/clock.c
+ defsnc 'static[ ]const[ ]__u8[ ]cx_inits_\(176\|320\|352\|640\)\[\][ ]=' drivers/media/video/gspca/conex.c
+ defsnc 'static[ ]const[ ]__u8[ ]cx_jpeg_init\[\]\[8\][ ]=' drivers/media/video/gspca/conex.c
+ defsnc 'static[ ]const[ ]__u8[ ]cxjpeg_\(640\|352\|320\|176\|qtable\)\[\]\[8\][ ]=' drivers/media/video/gspca/conex.c
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]quant\[\]\[0x88\][ ]=' drivers/media/video/gspca/jpeg.h
+ initnc 'static[ ]unsigned[ ]char[ ]huffman\[\][ ]=' drivers/media/video/gspca/jpeg.h
+ initc '[ ]\?static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]norm_76[1247]0\[\][ ]=' drivers/media/video/gspca/ov519.c
+ initnc 'static[ ]const[ ]__u8[ ]pac207_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/pac207.c
+ initnc 'static[ ]const[ ]__u8[ ]pac7311_jpeg_header\[\][ ]=' drivers/media/video/gspca/pac7311.c
+ defsnc 'static[ ]const[ ]__u8[ ]\(start\|page[34]\)_73\(02\|11\)\[\][ ]=' drivers/media/video/gspca/pac7311.c
+ initnc 'static[ ]const[ ]__u8[ ]init\(Hv7131\|Ov\(6650\|7630\(_3\)\?\)\|Pas\(106\|202\)\|Tas51[13]0\)\[\][ ]=' drivers/media/video/gspca/sonixb.c
+ initnc 'static[ ]const[ ]__u8[ ]\(hv7131\|ov\(6650\|7630\(_3\)\?\)\|pas\(106\|202\)\|tas51[13]0\)_sensor_init\(_com\)\?\[\]\[8\][ ]=' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]\(const[ ]\)\?__u8[ ]\(hv7131r\|mi0360\|mo4000\|ov76\([36]0\|48\)\|om6802\)_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ initnc 'static[ ]const[ ]__u8[ ]qtable4\[\][ ]=' drivers/media/video/gspca/sonixj.c
+ initnc 'static[ ]const[ ]__u16[ ]\(spca500_visual\|Clicksmart510\)_defaults\[\]\[3\][ ]=' drivers/media/video/gspca/spca500.c
+ initnc 'static[ ]const[ ]__u8[ ]qtable_\(creative_pccam\|kodak_ez200\|pocketdv\)\[2\]\[64\][ ]=' drivers/media/video/gspca/spca500.c
+ initnc 'static[ ]const[ ]__u16[ ]spca501c\?_\(\(3com\|arowana\|mysterious\)_\)\?\(init\|open\)_data\[\]\[3\][ ]=' drivers/media/video/gspca/spca501.c
+ defsnc 'static[ ]const[ ]\(__u16\|u8\)[ ]spca505b\?_\(init\|open\)_data\(_ccd\)\?\[\]\[3\][ ]=' drivers/media/video/gspca/spca505.c
+ initnc 'static[ ]const[ ]__u16[ ]spca508\(cs110\|_sightcam2\?\|_vista\)\?_init_data\[\]\[3\][ ]=' drivers/media/video/gspca/spca508.c
+ initnc 'static[ ]const[ ]__u16[ ]spca561_init_data\[\]\[2\][ ]=' drivers/media/video/gspca/spca561.c
+ initnc 'static[ ]const[ ]__u16[ ]spca504\(_pccam600\|A_clicksmart420\)_\(init\|open\)_data\[\]\[3\][ ]=' drivers/media/video/gspca/sunplus.c
+ initnc 'static[ ]const[ ]__u8[ ]qtable_\(creative_pccam\|spca504_default\)\[2\]\[64\][ ]=' drivers/media/video/gspca/sunplus.c
+ initnc 'static[ ]const[ ]__u8[ ]\(effects\|gamma\)_table\[MAX_[A-Z]*\]\[[0-9]*\][ ]=' drivers/media/video/gspca/t631.c
+ initnc 'static[ ]const[ ]__u8[ ]tas5130a_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc '[ ]static[ ]const[ ]\(__\)\?u8[ ]\(read_indexs\|n\(set\)\?[0-9]*\(_other\)\?\|missing\)\[[0-9x]*\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc 'static[ ]const[ ]__u8[ ]\(mi13[12]0\|po3130\|hv7131r\|ov76[67]0\)_\(\(soc\)\?initQ\?VGA_\(JPG\|data\)\|rundata\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ initnc 'static[ ]const[ ]struct[ ]usb_action[ ]\(cs2102\|hdcs2020xx\|icm105axx\|ov7630c\|pb0330[3x]x\)_Initial\(Scale\)\?\[\][ ]=' drivers/media/video/gspca/zc3xx.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_agc\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_ofdm\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck_ch14\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]__u16[ ]t10_dif_crc_table\[256\][ ]=' lib/crc-t10dif.c
+ initnc 'static[ ]crb_128M_2M_block_map_t[ ]crb_128M_2M_map\[64\][ ]=' drivers/net/netxen/netxen_hw.c
+ initnc 'static[ ]const[ ]__u16[ ]crc10_table\[256\][ ]=' drivers/usb/serial/safe_serial.c
+ accept '[ ]*\([ ]*0\)*\([ ]*1\)*[\n][ ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]*2[ ]3[ ]4[ ]5[ ]6[ ]7' 'Documentation/bt8xxgpio.txt'
+ initnc '[ ]static[ ]int[ ]exp_lut\[256\][ ]=' drivers/isdn/mISDN/dsp_audio.c
+ initnc 'static[ ]const[ ]u32[ ]bf_pbox\[16[ ][+][ ]2\][ ]=' drivers/isdn/mISDN/dsp_blowfish.c
+ initnc 'static[ ]const[ ]u32[ ]bf_sbox\[256[ ][*][ ]4\][ ]=' drivers/isdn/mISDN/dsp_blowfish.c
+ initnc 'static[ ]u8[ ]sample_\(german_\(all\|old\)\|american_\(dialtone\|ringing\|busy\)\|special[123]\|silence\)\[\][ ]=' drivers/isdn/mISDN/dsp_tones.c
+ initnc 'struct[ ]pattern[ ][{][^}]*int[ ]tone[;][^}]*[}][ ]pattern\[\][ ]=' drivers/isdn/mISDN/dsp_tones.c
+ initnc 'static[ ]u8[ ]\([au]\|_4\)law_to_\([ua]law\|4bit\)\[256\][ ]=' drivers/isdn/mISDN/l1oip_codec.c
+ initnc 'static[ ]unsigned[ ]char[ ]banner_table\[\][ ]=' arch/sh/boards/mach-microdev/led.c
+ initnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]\(yytype_u\?int\(8\|16\)\|\(unsigned[ ]\)\?\(short\([ ]int\)\?\|char\)\)[ ]yy[^[]*\[\][ ]=[*][/][;]' scripts/genksyms/parse.c_shipped
+ accept 'irq_prio_\([hdl]\|l[cd]\):'"$sepx$blobpat*" arch/arm/inlcude/asm/hardware/entry-macro-iomd.S
+ defsnc '[ ]static[ ]const[ ]int[ ]desc_idx_table\[\][ ]=' arch/arm/include/asm/hardware/iop3xx-adma.h
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u8[ ]\(hv7131r\|mi0360\|mo4000\|ov76\(60\|48\)\)_sensor_init\[\]\[8\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]const[ ]struct[ ]ath_hal[ ]ar5416hal[ ]=' drivers/net/wireless/ath9k/hw.c
+ defsnc 'static[ ]\(const[ ]\)\?u32[ ]ar\(5416\|9280\)\(Modes\(_fast_clock\)\?\|Common\|BB_RfGain\|Bank6\(TPC\)\?\|Addac\)\(_91[06]0\(1_1\)\?\|_9280\(_2\)\?\)\?\[\]\[[236]\][ ]=' drivers/net/wireless/ath9k/initvals.h
+ ;;
+
+ */linux-2.6-gspca-git.patch)
+ # Probably for 2.6.28 or .29.
+ initnc 'static[ ]const[ ]__u8[ ]ov\(534\|772x\)_reg_initdata\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsc 'static[ ]const[ ]\(__\)\?u8[ ]\(mi\(0360\|13[12]0\)\|po\(1200\|3130\)\|hv7131r\|ov76[67]0\)_\(\(soc\)\?_\?[iI]nit\(Q\?V\|SX\)GA\(_\(JPG\|data\)\)\?\|rundata\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ # Already in 2.6.27.
+ initnc 'static[ ]const[ ]__u8[ ]initOv6650\[\][ ]=' drivers/media/video/gspca/sonixb.c
+ initnc '[ ][/][*][ ]Some[ ]more[ ]unknown[ ]stuff[ ][*][/]' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]const[ ]__u8[ ]ov7648_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ # No merge needed
+ defsnc '#if[ ]0[\n][ ][{]0x30,[ ]0x0154,[ ]0x0008[}],' drivers/media/video/gspca/sunplus.c
+ ;;
+
+ */linux*alsa*.patch)
+ defsnc 'static[ ]u8[ ]tas3004_treble_table\[\][ ]=' sound/aoa/codecs/tas-basstreble.h
+ defsnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]=' sound/pci/ice1712/phase.c
+ defsnc 'static[ ]const[ ]u16[ ]wm8900_reg_defaults\[WM8900_MAXREG\][ ]=' sound/soc/wm8900.c
+ defsnc '[}][ ]\(clk_sys_ratios\|bclk_divs\)\[\][ ]=' sound/soc/wm8903.c
+ ;;
+
+ */patch*2.6.26-rc*)
+ initnc 'static[ ]u64[ ]vec2off\[68\][ ]=' arch/ia64/kvm/process.c
+ initnc "[ ][ ][ ]interrupts[ ]=[ ]<\\(0x\\)\\?3[ ]\\(0x\\)\\?0[ ]\\(0x\\)\\?0[ ][ ]$blobpat*>[;]" 'arch/powerpc/boot/dts/\(cm5200\|lite5200b\?\|kuroboxHG\|pcm030\|tqm5200\).dts'
+ initnc 'static[ ]const[ ]u32[ ]crctab32\[\][ ]=' arch/x86/boot/tools/build.c
+ initnc 'static[ ]const[ ]u64[ ]sha512_K\[80\][ ]=' 'crypto/sha512\(_generic\)\?.c'
+ initnc 'static[ ]struct[ ]hash_testvec[ ]\(hmac_sha\(224\|256\)\|aes_xcbc128\|crc32c\)_tv_template\[\][ ]=' crypto/tcrypt.h
+ initnc 'static[ ]struct[ ]cipher_testvec[ ]\(bf_cbc\|serpent\|tnepres\|aes\(_\(cbc\|ctr\|xts\)\)\?\|x\?tea\|anubis\(_cbc\)\?\|xeta\|camellia_cbc\|cts_mode\)_\(enc\|dec\)_tv_template\[\][ ]=' crypto/tcrypt.h
+ initnc '[ ][ ]\.\(digest\|entries\|input\|key\|output\|plaintext\|result\)[ ]*=[ ][{"]' crypto/tcrypt.h
+ initnc 'static[ ]const[ ]u8[ ]speedtab[ ]\[3\]\[12\][ ]=' drivers/ide/legacy/umc8672.c
+ initnc 'static[ ]u8[ ]cvs_time_value\[\]\[XFER_UDMA_6[ ]-[ ]XFER_UDMA_0[ ][+][ ]1\][ ]=' drivers/ide/pci/sis5513.c
+ initnc 'static[ ]u8[ ]\(ini\|act\|rco\)_time_value\[\]\[8\][ ]=' drivers/ide/pci/sis5513.c
+ initnc 'static[ ]u8[ ]mt2131_config1\[\][ ]=' drivers/media/common/tuners/mt2131.c
+ initnc 'static[ ]u8[ ]mt2266_init2\[\][ ]=' drivers/media/common/tuners/mt2266.c
+ initnc 'u16[ ]e1000_igp_cable_length_table\[IGP01E1000_AGC_LENGTH_TABLE_SIZE\][ ]=' drivers/net/e1000/e1000_hw.c
+ initnc '\(uint16_t\|u16\)[ ]e1000_igp_2_cable_length_table\[IGP02E1000_AGC_LENGTH_TABLE_SIZE\][ ]=' drivers/net/e1000/e1000_hw.c # u16 on 2.6.26
+ oprepline '#define[ ]AR5K_RATES_11[ABG][ ]' drivers/net/wireless/ath5k/ath5k.h
+ oprepline '[ ][{][ ]1,[ ]MODULATION_XR,[ ]1000,[ ]2,[ ]139,[ ]1[ ][}],[ ]' drivers/net/wireless/ath5k/ath5k.h
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf\(5413\|24\(13\|25\)\)_ini_mode_end\[\][ ]=' drivers/net/wireless/ath5k/initvals.c
+ initnc 'static[ ]yyconst[ ]flex_int\(16\|32\)_t[ ]yy_[^[]*\[[0-9]*\][ ]=' '.*\.lex\.c_shipped'
+ initnc 'static[ ]const[ ]yytype_u\?int\(8\|16\)[ ]yy[^\n []*\[\][ ]=' '.*\.lex\.c_shipped'
+ # new in 2.6.26
+ defsnc 'static[ ]struct[ ]mse2snr_tab[ ]\(vsb\|qam\(64\|256\)\)_mse2snr_tab\[\][ ]=' drivers/media/dvb/frontends/au8522.c
+ defsnc '[}][ ]\(VSB\|QAM\)_mod_tab\[\][ ]=' drivers/media/dvb/frontends/au8522.c
+ initnc '[}][ ]itd1000_\(lpf_pga\|fre_values\)\[\][ ]=' drivers/media/dvb/frontends/itd1000.c
+ initnc '[}][ ]\(vsb\|qam\(64\|256\)\)_snr_tab\[\][ ]=' drivers/media/dvb/frontends/s5h1411.c
+ initnc '[}][ ]snr_tab\[\][ ]=' drivers/media/dvb/frontends/tda10048.c
+ initnc '[ ]static[ ]const[ ]u8[ ]biphase_tbl\[\][ ]=' drivers/media/video/cx18/cx18-av-vbi.c
+ initnc '[ ]static[ ]const[ ]u8[ ]mpeg_hdr_data\[\][ ]=' drivers/media/video/cx18/cx18-vbi.c
+ initnc 'static[ ]u32[ ]reg_init_initialize\[\][ ]=' drivers/media/video/saa717x.c
+ initnc '[ ][}][ ]vals\[\][ ]=' drivers/media/video/saa717x.c
+ initnc 'static[ ]const[ ]u32[ ]\(main\|gear\)_seedset\[BACKOFF_SEEDSET_ROWS\]\[BACKOFF_SEEDSET_LFSRS\][ ]=' drivers/net/forcedeth.c
+ blob 'unsigned[ ]char[ ]\(IDX_ACTIVATE_\(READ\|WRITE\)\|\(CM\|ULP\)_\(ENABLE\|SETUP\)\|DM_ACT\)[ ]=[ ]'"$sepx$blobpat*$sepx[;]" drivers/s390/net/qeth_core_mpc.c # from drivers/s390/net/qeth_mpc.c in 2.6.25
+ initnc '[}][ ]pll_table\[\][ ]=' drivers/video/geode/lxfb_ops.c
+ accept "[ ][ ][{][ ]0x00014284,[ ][ ]19688[ ][}],[\n][ ][ ][{][ ]0x00011104,[ ][ ]20400[ ][}],[\n][ ][ ][{][ ]$blobpat*[ ][}]," drivers/video/geode/lxfb_ops.c # won't be necessary in rc3
+ initnc 'static[ ]const[ ]u16[ ]wm9713_reg\[\][ ]=' sound/soc/codecs/wm9713.c
+ accept 'P[13]\([\n]#[^\n]*\)*[\n]*\([\n][0-9 ]*\)\+' drivers/video/logo/logo_blackfin_clut224.ppm
+ ;;
+ */patch*2.6.25-rc*)
+ initnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]uchar[ ]sbox\[8\]\[4\]\[16\][ ]=[ ][{][*][/][;]'
+ accept '[ ][$]3[ ]=[ ][{][{]pge[ ]=[ ][{][{]ste[ ]=[ ][{]\(\([0-9][0-9a-fx{},\n ]*\|\(pge\|ste\)[ ]=\|<repeats[ ][0-9]\+[ ]times>\)[{},\n ]*\)*<repeats[ ]11[ ]times>[}]$'
+ initnc 'static[ ]yyconst[ ]flex_int\(16\|32\)_t[ ]yy_[^[]*\[[0-9]*\][ ]='
+ initnc 'static[ ]const[ ]yytype_u\?int\(8\|16\)[ ]yy[^[]*\[\][ ]='
+ initnc '[ ]int[ ]bcomm_irq\[3[*]16\][ ]='
+ initnc '[ ]static[ ]const[ ]int8[ ]countLeadingZerosHigh\[\][ ]='
+ initnc 'static[ ]unsigned[ ]long[ ]shmedia_opcode_table\[64\][ ]='
+ initnc 'u_char[ ]const[ ]data_sizes_16\[32\][ ]='
+ initnc 'static[ ]u_char[ ]const[ ]data_sizes_32\[32\][ ]='
+ initnc '[ ][ ]\.\(digest\|entries\|input\|key\|output\|plaintext\|result\)[ ]*=[ ][{]'
+ initnc 'static[ ]struct[ ][^\n]*_testvec[ ][^\n]*_tv_template\[\][ ]='
+ initnc 'static[ ]struct[ ]nic_qp_map[ ]nic_qp_mapping_[01]\[\][ ]='
+ initnc 'static[ ]u8[ ]mt2266_init2\[\][ ]='
+ initnc 'static[ ]struct[ ]regval[ ]ov_initvals\[\][ ]='
+ initnc 'static[ ]struct[ ]regval[ ]stk1125_initvals\[\][ ]='
+ initnc 'static[ ]u8[ ]bnx2x_stats_len_arr\[BNX2X_NUM_STATS\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]arb_line[ ]read_arb_data\[NUM_RD_Q\]\[MAX_RD_ORD[ ][+][ ]1\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]arb_line[ ]write_arb_data\[NUM_WR_Q\]\[MAX_WR_ORD[ ][+][ ]1\][ ]='
+ initnc 'uint16_t[ ]e1000_igp_cable_length_table\[IGP01E1000_AGC_LENGTH_TABLE_SIZE\][ ]='
+ initnc 'uint16_t[ ]e1000_igp_2_cable_length_table\[IGP02E1000_AGC_LENGTH_TABLE_SIZE\][ ]='
+ oprepline '#define[ ]AR5K_RATES_11\([ABG]\|TURBO\|XR\)[ ]' drivers/net/wireless/ath5k/ath5k.h
+ initnc '[ ][ ][}][ ]blinkrates\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini[ ]ar5212_ini\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5111\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112a\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5413\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225bcd_rxgain\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_agc\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck_ch14\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225z2_rxgain\[\][ ]='
+ accept '[ ][ ][ ][ ][ ]\([ ]49,\)*[\n]\([ 0-9,]*[\n]\)*[ ][ ][ ][ ][ ]\([ ]49,\)*$'
+ initnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]='
+ accept 'domain<N>[ ]<cpumask>[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]10[ ]11[ ]12[ ]13[ ]14[ ]15[ ]16[ ]17[ ]18[ ]19[ ]20[ ]21[ ]22[ ]23[ ]24[ ]25[ ]26[ ]27[ ]28[ ]29[ ]30[ ]31[ ]32[ ]33[ ]34[ ]35[ ]36$'
+ # drivers/net/e1000e/phy.c
+ initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]='
+ accept '[ ]24[ ]=>[ ]\[[\n]\([^\n]*[\n]\)*[ ]\]\(,[ ][0-9]\+[ ]=>[ ]\[\)\?$'
+ accept '[ ][ ]'"[']"'0x[^\n]*[\n]\([^\n]*[\n]\)*[ ]\]\([,][ ][0-9]\+[ ]=>[ ]\[\)\?$'
+ initnc 'const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]='
+ ;;
+ */*drm*.patch)
+ defsnc 'static[ ]struct[ ]v_table[ ]v_table\[\][ ]=' drivers/gpu/drm/i915/i915_dma.c
+ defsnc '[}][ ]est3_modes\[\][ ]=' drivers/gpu/drm/drm_edid.c
+ defsnc 'const[ ]u32[ ]r[67]xx_default_state\[\][ ]=' drivers/gpu/drm/radeon/r600_blit_shaders.c
+ defsnc 'struct[ ]nv17_tv_norm_params[ ]nv17_tv_norms\[NUM_TV_NORMS\][ ]=' drivers/gpu/drm/nouveau/nv17_tv_modes.c
+ defsnc 'static[ ]int[ ]atom_dst_to_src\[8\]\[4\][ ]=' drivers/gpu/drm/radeon/atom.c
+ blobname 'matrox[/]g[24]00_warp\.fw' drivers/gpu/drm/mga/mga_warp.c
+ blobname 'r128[/]r128_cce\.bin' drivers/gpu/drm/r128/r128_cce.c
+ blobname 'radeon[/]R\([123]0\|[45]2\|S6[09]\)0_cp\.bin' drivers/gpu/drm/radeon/r100.c
+ blobname 'radeon[/]\(R\(60\|V6[1237]\|S7[1378]\)[05]\|%s\)_\(pfp\|me\)\.bin' drivers/gpu/drm/radeon/r600.c
+
+ # linux-2.6-drm-i915-modeset.patch, nouveau-drm*.patch,
+ # drm-fedora9-rollup.patch
+ initnc 'static[ ]const[ ]u32[ ]filter_table\[\][ ]=' drivers/char/drm/intel_tv.c
+ defsnc '\(static[ ]uint32_t\|[}]\)[ ]nv04_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv04_graph.c
+ defsnc 'static[ ]int[ ]nv1[07]_graph_ctx_regs[ ]\?\[\][ ]=' drivers/char/drm/nv10_graph.c
+ defsnc '[ ][}][ ]common_modes\[17\][ ]=' drivers/gpu/drm/radeon/radeon_connectors.c
+
+ # drm-upgrayedd.patch
+ defsnc 'static[ ]const[ ]u16[ ]\(y\|uv\)_static_hcoeffs\[N_HORIZ_\(Y\|UV\)_TAPS[ ][*][ ]N_PHASES\][ ]=' drivers/gpu/drm/i915/intel_overlay.c
+
+ # Although the developers of the drivers are not trying to stop
+ # anyone from modifying it or understanding it, they acknowledge
+ # these are bits of code, obtained through mmio interactions.
+ # This means these blobs are not source code, AND original authors
+ # of the blobs have power to stop others from modifying them.
+ # Non-Free Software, for sure.
+
+ # initnc 'static[ ]uint32_t[ ]nv\(4[013467ace]\|49_4b\|8[46]\)_ctx_\(voodoo\|prog\)\[\][ ]=' 'drivers/char/drm/nv40_graph.c|.*'
+ ;;
+ */linux-2.6*-lirc.patch | */lirc-*.patch)
+ defsnc 'const[ ]unsigned[ ]char[ ]map_table\[\][ ]=' drivers/input/lirc/lirc_ttusbir.c
+ blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c
+ ;;
+ */linux-2.6*-at76.patch)
+ blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' drivers/net/wireless/at76_usb/at76_usb.c
+ ;;
+ */linux-2.6-v4l-dvb*.patch)
+ # post 2.6.33 fixes start here
+ defsnc 'static[ ]struct[ ]i2c_reg_u8[ ]ov9655_init\[\][ ]=' drivers/media/video/gspca/sn9c20x.c
+ defsnc 'static[ ]const[ ]u8[ ]\(gc0307\|po2030n\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ # rebase-gspca-to-latest 2.6.33ish starts here
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc 'static[ ]const[ ]u8[ ]bridge_start_\([qs]\?v\|x\)ga\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
+ defsnc 'static[ ]const[ ]__u8[ ]\(start\|page3\)_7302\[\][ ]=' drivers/media/video/gspca/pac7302.c
+ defsnc '[ ]struct[ ]init_command[ ]\(spy\|cif\|ms350\|genius\|vivitar\)_start_commands\[\][ ]=' drivers/media/video/gspca/sn9c2028.c
+ defsnc 'static[ ]const[ ]__u8[ ]initOv6650\[\][ ]=' drivers/media/video/gspca/sonixb.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u8[ ]ov6650_sensor_init\[\]\[8\][ ]=[*][/][;]' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]const[ ]__u8[ ]pas202_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/sonixb.c
+ defsnc 'static[ ]const[ ]u8[ ]\(adcm1700\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u8[ ]hv7131r_sensor_init\[\]\[8\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u8[ ]po1030_sensor_param1\[\]\[8\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ defsnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]u8[ ]\(mi1320\|po3130\)_initVGA_data\[\]\[4\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]const[ ]u8[ ]poxxxx_init\(_common\|Q\?VGA\|_end_1\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]gamma_tb\[6\]\[16\][ ]=' drivers/media/video/gspca/zc3xx.c
+ # rebase-gspca-to-latest ends here
+ defsnc 'static[ ]u8[ ]af9015_ir_table_\(avermedia\(_ks\)\?\|digittrade\)\[\][ ]=' drivers/media/dvb/dvb-usb/af9015.h
+ defsnc 'struct[ ]au8522_register_config[ ]lpfilter_coef\[\][ ]=' drivers/media/dvb/frontends/au8522_decoder.c
+ defsnc 'static[ ]struct[ ]mse2snr_tab[ ]\(vsb\|qam\(64\|256\)\)_mse2snr_tab\[\][ ]=' drivers/media/dvb/frontends/au8522.c
+ defsnc '[}][ ]\(VSB\|QAM\)_mod_tab\[\][ ]=' drivers/media/dvb/frontends/au8522.c
+ initc 'static[ ]const[ ]u8[ ]jpeg_head\[\][ ]=' drivers/media/video/gspca/jpeg.h
+ defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init_ov965x\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534.c
+ defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131r\|mi0360\|mo4000\|ov76\([36]0\|48\)\|om6802\)_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]probe_tb\[\]\[4\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]const[ ]\(__u16\|u8\)[ ]spca505b\?_\(init\|open\)_data\(_ccd\)\?\[\]\[3\][ ]=' drivers/media/video/gspca/spca505.c
+ defsnc 'static[ ]const[ ]u8[ ]n4_lt168g\[\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc '[ ]static[ ]const[ ]\(__\)\?u8[ ]\(read_indexs\|n\(set\)\?[0-9]*\(_other\)\?\|missing\)\[[0-9x]*\][ ]=' drivers/media/video/gspca/t613.c
+ defsnc 'static[ ]const[ ]u8[ ]eeprom_data\[\]\[3\][ ]=' drivers/media/gspca/tv8532.c
+ initnc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u16[ ]spca508_vista_init_data\[\]\[3\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/spca508.c
+ defsc '[;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]static[ ]const[ ]__u8[ ]mi1310_socinitVGA_JPG\[\]\[4\][ ]=[ ][{][*][/][;]' drivers/media/video/gspca/vc032x.c
+ initc 'static[ ]const[ ]\(__\)\?u8[ ]\(mi\(0360\|13[12]0\)\|po\(1200\|3130\)\|hv7131r\|ov76[67]0\)_\(\(soc\)\?_\?[iI]nit\(Q\?V\|SX\)GA\(_\(JPG\|data\)\)\?\|rundata\)\[\]\[4\][ ]=' drivers/media/video/gspca/vc032x.c
+ ;;
+ */linux-2.6-modsign-mpilib.patch)
+ initnc 'const[ ]unsigned[ ]char[ ]__clz_tab\[\][ ]='
+ ;;
+ */linux-2.6-netdev*.patch | \
+ */linux-2.6.27-net-r8169-2.6.28.patch)
+ defsnc '[ ][ ]*struct[ ]phy_reg[ ]phy_reg_init_[01]\[\][ ]=' drivers/net/r8169.c
+ ;;
+ */linux-2.6-wireless*.patch | */linux-2.6-ath5k.patch | \
+ */git-wireless-dev.patch | */linux-2.6-zd1211rw-mac80211.patch)
+ initnc 'const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]='
+ initnc 'static[ ]const[ ]s8[ ]\(b43\(legacy\)\?\|bcm43xx\)_tssi2dbm_[bg]_table\[\][ ]='
+ initnc 'static[ ]struct[ ]iwl\(3945\)\?_tx_power[ ]power_gain_table\[2\]\[IWL_MAX_GAIN_ENTRIES\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]gain_entry[ ]gain_table\[2\]\[108\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5222\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5225_2527\[\][ ]=' drivers/net/wireless/rt2x00/rt73usb.c
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_5226\[\][ ]=' drivers/net/wireless/rt2x00/rt73usb.c
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2522\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2523\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2524\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2525\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2525e\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_bg_2528\[\][ ]=' drivers/net/wireless/rt2x00/rt73usb.c
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_noseq\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_seq\[\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]t\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225bcd_rxgain\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_agc\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck_ch14\[\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]rtl8225z2_rxgain\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5111\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112a\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5413\[\][ ]='
+ oprepline '#define[ ]AR5K_RATES_11A[ ]'
+ oprepline '#define[ ]AR5K_RATES_11B[ ]'
+ oprepline '#define[ ]AR5K_RATES_11G[ ]'
+ oprepline '#define[ ]AR5K_RATES_TURBO[ ]'
+ oprepline '#define[ ]AR5K_RATES_XR[ ]'
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini[ ]ar5212_ini\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf\(5413\|24\(13\|25\)\)_ini_mode_end\[\][ ]=' drivers/net/wireless/ath5k/initvals.c # ?
+ initnc '[ ][ ][}][ ]blinkrates\[\][ ]='
+
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_agc\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_ofdm\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck_ch14\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+
+ # git logs
+ accept '[ ][ ][ ]sudo[ ]modprobe[ ]ath5k[ ]debug=0x00000400[\n][ ]*[\n]\([ ]*Band[^\n]*[\n]\([ ]*\(\(channels\|rates\):\|[- 0-9a-f]*\|\[\.\.\.[ ]etc[ ]\]\)[\n]\)\+\)\+[ ][ ][ ][ ][ ][ ][ ]540[ ]000c[ ]0000[ ]0000'
+ oprepline '[ ][{][ ]1,[ ]MODULATION_XR,[ ]3000,[ ]1,[ ]150,[ ]3[ ][}],'
+
+ # Fedora 8ish kernel-xen builds
+ initnc 'const[ ]u16[ ]crc_itu_t_table\[256\][ ]='
+ initnc 'static[ ]const[ ]u16[ ]tkip_sbox\[256\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]ar5211_ini_mode\[\][ ]='
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]ar5212_rf511[12]_ini_mode\[\][ ]='
+ initnc '[ ]static[ ]const[ ]u8[ ]log10\[\][ ]='
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_gain_cck_ofdm\[\][ ]='
+ initnc 'static[ ]const[ ]u32[ ]rf_vals_abg_5222\[\][ ]='
+ ;;
+
+ */linux-2.6-netdev-e1000e*.patch)
+ initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]=' drivers/net/e1000e/phy.c
+ ;;
+
+ */deblob-check-testsuite/*)
+ accept 'accept[(][^)]*[)]'
+ blobname 'blob[(][^)]*[)]'
+ blobname 'blobeol[^\n]*[\n]'
+ ;;
+ esac
+}
+
+# Regular expression that matches a literal constant.
+constx="[0-9][0-9a-fA-FxX]*"
+# Regular expression that matches a separator between consecutive
+# literal constants.
+sepx="\\([ \\n]*\\(\\([ \\n]\\|[,:{}LlUu\"\'\\\\][,:{} \\nLlUu\"\'\\\\]*\\)[xX\$]\\?\\|[.][a-zA-Z][a-zA-Z0-9]*[ ][ ]*[\$]\\?\\)\\)"
+
+# Regular expression that matches a continuation of a blob, after an
+# initial constant. *, \+ and \? can be safely appended to it without
+# \(\)s.
+blobcont="\\($sepx$constx\\)"
+
+# Regular expression that matches the initial constant of a blob plus
+# its continuation. *, \+ and \? can be safely appended to it without
+# \(\)s.
+blobpat="$constx$blobcont"
+
+# Regular expression that matches a blob with at least the number of
+# constants specified as sensitivity.
+blobseq="$blobpat\\{$sens,\\}"
+
+# Regular expression that matches the beginning of the pattern or a
+# line break. It must be \(\)ed, such that it can be named in
+# replacement patterns.
+bol="\\(^\\|[\\n]\\)"
+
+# Regular expression that matches the end of the pattern or a line
+# break. It must be \(\)ed, such that it can be named in replacement
+# patterns.
+eol="\\([\\n]\\|\$\\)"
+
+# Regular expression that matches a C-style comment.
+comment="\\([/][*][^*]*\\([*]\\+[^*/][^*]*\\)*[*]\\+[/]\\|[/][/][^\\n]*[\\n]\\)"
+
+# Regular expression that matches comments typically used in assembly.
+asmcomment="\\($comment\\|[;#][^\\n]*[\\n]\\)"
+
+# Regular expression that matches a braced initializer containing at
+# least one blob.
+initblob="[^\\n=]*=\\([ \\n\\\\]\\|$comment\\)*[{]\\([^;]\\|$comment\\)*$blobseq\\([^;]\\|$comment\\)*[}]\\?\\([ \\n\\\\]*\\|$comment\\)[;]\\?"
+
+# Regular expression that matches a C (possibly multi-line) #define
+# that contains a blob.
+defineblob='[ ]*#[ ]*define[ ][^\n]*\([\\][\n][^\n]*\)*'"$blobseq"'\([^\n]*\\[\n]\)*'
+
+# Regular expression that matches an assembly label followed by a blob
+# without any intervening label.
+asmblob="[a-zA-Z_.][^\\n:;#/ ]*:\\([^:{}]\\|$asmcomment\\)*$blobseq\\([^:]*\\|$asmcomment\\)*"
+
+# Set up the sed script that will go through the (processed) input,
+# looking for sequences of blobs and printing whatever was requested.
+# It accepts 3 arguments.
+
+# $1 is the action in case blobs were found in the input.
+
+# $2 is the action in case no blobs were found, not even false positives.
+
+# $3 is the action in case false positives were located.
+
+# $4 is the action for every complete input pattern.
+
+set_sed_main () {
+ falsepos=`${SED-sed} -n 's,^[+]\^*,,p' < "$regex_name" |
+ ${SED-sed} -n -e 's,[$]$,\\\\([\\\\n]\\\\|$\\\\),' \
+ -e '1h; 1!H; ${g;s,[\n],\\\\|,g;s,^\(..*\)$,\\\\(\1\\\\),;p;}'`
+ blobs=`${SED-sed} -n 's,^[-],,p' < "$regex_name" |
+ ${SED-sed} -n -e 's,[$]$,\\\\([\\\\n]\\\\|$\\\\),' \
+ -e '1h; 1!H; ${g;s,[\n],\\\\|,g;s,^\(..*\)$,\\\\(\1\\\\),;p;}'`
+
+ # Regular expression that matches one or more blobs without
+ # intervening line breaks.
+ sblobctx="\\(\\([^\\n]\\|[/][*](DEBLOB-\\nBED)[*][/]\\)*$blobs\\)\\+"
+
+ # Regular expression that matches the context for a long blob match.
+ lblobctx="\\($initblob\\|$defineblob\\|$asmblob\\|$sblobctx\\)"
+
+ if test "X$falsepos" != X; then
+ check_false_positives="$v:???falsepos
+/$bol$falsepos/!b blob
+$v:+++falsepos
+h
+s/$bol$falsepos/\\1;\/**\/;/g
+# See if, after removing all matches, we end up without any blobs.
+$v:???blobs
+/$blobs/!{
+ g
+ b falsepos
+}
+g
+"
+ else
+ falsepos="$.^"
+ check_false_positives=
+ fi
+
+ $echo "#! /bin/sed -nf
+
+/^$/N
+/^[\\n]\\?;[/][*]\\(end .*\\)\\?[*][/];$/{
+ $4
+ d
+}
+# /^;[/][*]begin /!{
+# : internal_error
+# $v:internal_error
+# s,.*,Internal error at\\n&[\\n]/*(DEBLOB-\\nERROR)*/,;
+# q 2
+# }
+$v:reading file in
+h
+n
+: read_more
+/^;[/][*]end [^\\n]*[*][/];$/! {
+ H
+ n
+ b read_more
+}
+H
+g
+$4
+$v:read all
+s/^\\(;[/][*]begin [^\\n]*[\\n]\\)*//
+s/\\($bol[\n]\?;[/][*]\\(end [^\\n]*\\)\\?[*][/];\\)*$//
+$v:???!blobs
+/$blobs/!b clean
+$check_false_positives
+# Fall through.
+: blob
+$v:blob
+$1
+d
+: clean
+$v:clean
+$2
+d
+: falsepos
+$v:falsepos
+$3
+d
+
+: print_matches
+$v:print_matches
+/^$falsepos/! {
+ $v:delete unmatching lines
+ h
+ s/[\\n]$falsepos.*//
+ : print_matches_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_matches_nomatch_loop
+ }
+ x
+ b print_matches_delete_to_eol
+}
+h
+s/^\\($falsepos[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to match
+/$blobs/ {
+ i\\
+::: $file :::
+ p
+}
+g
+s/^\\($falsepos[^\\n]*\\)//
+: print_matches_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_matches
+
+: print_marked_matches
+$v:print_marked_matches
+/^$falsepos/! {
+ h
+ s/[\\n]$falsepos.*//
+ : print_marked_matches_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_marked_matches_nomatch_loop
+ }
+ x
+ b print_marked_matches_delete_to_eol
+}
+h
+s/^\\($falsepos[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to match
+/$blobs/{
+ i\\
+::: $file :::
+ # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+ s/$blobs/\/*(DEBLOBBED)*\//g
+ p
+}
+g
+s/^\\($falsepos[^\\n]*\\)//
+: print_marked_matches_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_marked_matches
+
+: print_blobs
+$v:print_blobs
+/^$falsepos/ {
+ $v:delete false positive
+ # This is tricky. We don't want to print the false positive.
+ /^$falsepos[^\\n]*$blobs/ {
+ $v:delete false positive immediately followed by blob
+ s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//
+ h
+ s/^\\($falsepos\\).*/\\1/
+ $v:matched false positive
+ : print_blobs_match_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_blobs_match_loop
+ }
+ G
+ b print_blobs_delete_to_eol
+ }
+ /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! {
+ s/^$falsepos//
+ b print_blobs_delete_to_eol
+ }
+}
+/^\([^\\n]\|[/][*](DEBLOB-\\nBED)[*][/]\)*$blobs/! {
+ $v:delete non-blob header
+ h
+ s/[\\n]\\($falsepos\\|[^\\n]*$blobs\\).*//
+ $v:matched non-blob header
+ : print_blobs_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_blobs_nomatch_loop
+ }
+ x
+ b print_blobs_delete_to_eol
+}
+i\\
+::: $file :::
+: print_blobs_output_false_positive
+/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ {
+ P
+ s,^[^\\n]*[\\n],,
+ b print_blobs_output_false_positive
+}
+h
+s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+p
+g
+s/\\(\\($blobs[^\\n]*\\)\\+\\)//
+: print_blobs_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_blobs
+
+: print_marked_blobs
+$v:print_marked_blobs
+/^$falsepos/ {
+ $v:delete false positive
+ # This is tricky. We don't want to print the false positive.
+ /^$falsepos[^\\n]*$blobs/ {
+ $v:delete false positive immediately followed by blob
+ s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//
+ h
+ s/^\\($falsepos\\).*/\\1/
+ $v:matched false positive
+ : print_marked_blobs_match_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_marked_blobs_match_loop
+ }
+ G
+ b print_marked_blobs_delete_to_eol
+ }
+ /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! {
+ s/^falsepos//
+ b print_marked_blobs_delete_to_eol
+ }
+}
+/^\([^\\n]\|[/][*](DEBLOB-\\nBED)[*][/]\)*$blobs/! {
+ $v:delete non-blob header
+ h
+ s/[\\n]\\($falsepos\\|[^\\n]*$blobs\\).*//
+ $v:matched non-blob header
+ : print_marked_blobs_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_marked_blobs_nomatch_loop
+ }
+ x
+ b print_marked_blobs_delete_to_eol
+}
+i\\
+::: $file :::
+: print_marked_blobs_output_false_positive
+/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ {
+ P
+ s,^[^\\n]*[\\n],,
+ b print_marked_blobs_output_false_positive
+}
+h
+s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+# s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+s/$blobs/\/*(DEBLOBBED)*\//g
+p
+g
+s/\\(\\($blobs[^\\n]*\\)\\+\\)//
+: print_marked_blobs_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_marked_blobs
+
+: print_cblobs
+$v:print_cblobs
+/^$falsepos/ {
+ $v:delete false positive
+ # This is tricky. We don't want to print the false positive.
+ /^$falsepos[^\\n]*$blobs/ {
+ $v:delete false positive immediately followed by blob
+ s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//
+ h
+ s/^\\($falsepos\\).*/\\1/
+ $v:matched false positive
+ : print_cblobs_match_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_cblobs_match_loop
+ }
+ G
+ b print_cblobs_delete_to_eol
+ }
+ /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! {
+ s/^$falsepos//
+ b print_cblobs_delete_to_eol
+ }
+}
+/^$lblobctx/! {
+ $v:delete non-blob header
+ h
+ s/[\\n]\\($falsepos\\|$lblobctx\\).*//
+ $v:matched non-blob header
+ : print_cblobs_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_cblobs_nomatch_loop
+ }
+ x
+ b print_cblobs_delete_to_eol
+}
+i\\
+::: $file :::
+: print_cblobs_output_false_positive
+/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ {
+ P
+ s,^[^\\n]*[\\n],,
+ b print_cblobs_output_false_positive
+}
+h
+s/^\\($lblobctx\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+p
+g
+s/^\\($lblobctx[^\\n]*\\($blobs[^\\n]*\\)*\\)//
+: print_cblobs_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_cblobs
+
+: print_marked_cblobs
+$v:print_marked_cblobs
+/^$falsepos/ {
+ $v:delete false positive
+ # This is tricky. We don't want to print the false positive.
+ /^$falsepos[^\\n]*$blobs/ {
+ $v:delete false positive immediately followed by blob
+ s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//
+ h
+ s/^\\($falsepos\\).*/\\1/
+ $v:matched false positive
+ : print_marked_cblobs_match_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_marked_cblobs_match_loop
+ }
+ G
+ b print_marked_cblobs_delete_to_eol
+ }
+ /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! {
+ s/^$falsepos//
+ b print_marked_cblobs_delete_to_eol
+ }
+}
+/^$lblobctx/! {
+ $v:delete non-blob header
+ h
+ s/[\\n]\\($falsepos\\|$lblobctx\\).*//
+ $v:matched non-blob header
+ : print_marked_cblobs_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_marked_cblobs_nomatch_loop
+ }
+ x
+ b print_marked_cblobs_delete_to_eol
+}
+i\\
+::: $file :::
+: print_marked_cblobs_output_false_positive
+/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ {
+ P
+ s,^[^\\n]*[\\n],,
+ b print_marked_cblobs_output_false_positive
+}
+h
+s/^\\($lblobctx\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+# s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+s/$blobs/\/*(DEBLOBBED)*\//g
+p
+g
+s/^\\($lblobctx[^\\n]*\\($blobs[^\\n]*\\)*\\)//
+: print_marked_cblobs_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_marked_cblobs
+
+: print_both
+$v:print_both
+/^\\($falsepos\\|[^\\n]*$blobs\\)/! {
+ $v:delete non-blob header
+ h
+ s/[\\n]\\($falsepos\\|[^\\n]*$blobs\\).*//
+ $v:matched non-blob header
+ : print_both_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b print_both_nomatch_loop
+ }
+ x
+ b print_both_delete_to_eol
+}
+h
+i\\
+::: $file :::
+s/^\\(\\($falsepos\\|[^\\n]*$blobs\\)\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+p
+g
+s/^\\(\\($falsepos[^\\n]*\\|[^\\n]*$blobs[^\\n]*\\)\\($blobs[^\\n]*\\)*\\)//
+: print_both_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b print_both
+
+: list_matches
+$v:list_matches
+/^$falsepos/! {
+ $v:print unmatching lines
+ h
+ s/[\\n]$falsepos.*//
+ p
+ : list_matches_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b list_matches_nomatch_loop
+ }
+ x
+ b list_matches_delete_to_eol
+}
+h
+s/^\\($falsepos[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to match
+/$blobs/{
+ # s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+ s/$blobs/\/*(DEBLOBBED)*\//g
+}
+p
+g
+s/^\\($falsepos[^\\n]*\\)//
+: list_matches_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b list_matches
+
+: list_blobs
+$v:list_blobs
+/^$falsepos/ {
+ $v:print false positive
+ # This is tricky. We don't want to deblob the false positive.
+ /^$falsepos[^\\n]*$blobs/ {
+ $v:print false positive immediately followed by blob
+ s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//
+ h
+ s/^\\($falsepos\\).*/\\1\\n/
+ : list_blobs_match_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ P
+ s/^[^\\n]*[\\n]//
+ x
+ b list_blobs_match_loop
+ }
+ G
+ b list_blobs_delete_to_eol
+ }
+ h
+ s/^\\($falsepos[^\\n]*\\)[\\n].*/\\1/
+ p
+ g
+ s/^\\($falsepos[^\\n]*\\)//
+ b list_blobs_delete_to_eol
+}
+/^[^\\n]*$blobs/! {
+ $v:print non-blob header
+ h
+ s/[\\n]\\($falsepos\\|[^\\n]*$blobs\\).*//
+ p
+ : list_blobs_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b list_blobs_nomatch_loop
+ }
+ x
+ b list_blobs_delete_to_eol
+}
+h
+s/\\($blobs\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+# s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+s/$blobs/\/*(DEBLOBBED)*\//g
+p
+g
+s/\\(\\($blobs[^\\n]*\\)\\+\\)//
+: list_blobs_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b list_blobs
+
+: list_both
+$v:list_both
+/^\\($falsepos\\|[^\\n]*$blobs\\)/! {
+ $v:print non-blob header
+ h
+ s/[\\n]\\($falsepos\\|[^\\n]*$blobs\\).*//
+ p
+ : list_both_nomatch_loop
+ /[\\n]/ {
+ s/^[^\\n]*[\\n]//
+ x
+ s/^[^\\n]*[\\n]//
+ x
+ b list_both_nomatch_loop
+ }
+ x
+ b list_both_delete_to_eol
+}
+h
+s/^\\(\\($falsepos\\|[^\\n]*$blobs\\)\\([^\\n]*$blobs\\)*[^\\n]*\\)\\([\\n].*\\)\\?$/\\1/
+$v:narrowed to blob
+# s/{\\($sepx\\)\\?$blobseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g
+s/$blobs/\/*(DEBLOBBED)*\//g
+p
+g
+s/^\\(\\($falsepos[^\\n]*\\|[^\\n]*$blobs[^\\n]*\\)\\($blobs[^\\n]*\\)*\\)//
+: list_both_delete_to_eol
+$v:delete to eol
+s/^[^\\n]*//
+/^$/d
+s/^[\\n]//
+b list_both
+
+" > "$scriptname"
+
+ scriptcmd='${SED-sed} -n -f "$scriptname"'
+
+ case $vp in
+ [01]) xv= ;;
+ 2) xv='# ';;
+ esac
+
+ sedunbreak='
+: restart
+/[/][*](DEBLOB-$/ {
+ N
+ /[/][*](DEBLOB-[\n]ERROR)[*][/]/{q 1;}'"
+$xv"'s,[/][*](DEBLOB-[\n]BED)[*][/],,
+ b restart
+}
+p
+'
+ scriptcmd2='${SED-sed} -n -e "$sedunbreak"'
+}
+
+set_flex_main () {
+ adjust_rx='
+s,\\\([{(|)}?+]\),\1,g
+s,^\([-+]\)\(\^\?\)\(.*\)\(\$\?\)$,\2(?s:\3)\4\1,g
+s,[+]$, { falsepos (); },
+s,[-]$, { blob (); },
+'
+
+ echo '%%' > "$scriptname"
+ ${SED-sed} "$adjust_rx" < "$regex_name" >> "$scriptname"
+ echo '\n|. { unmatched (); }
+%%
+int falsepos () {}
+int blob () {}
+int unmatched () {}
+' >> "$scriptname"
+
+ scriptcmd=false
+}
+
+set_python_main () {
+ adjust_rx='
+s,\\(,\\(?:,g;
+s,\\\([{(|)}?+]\),\1,g;
+'
+
+ cat >> "$scriptname" <<EOF
+#! /usr/bin/python
+
+import sys
+import re
+
+# Should we replace blobs and false positives with replacement?
+replace_blob = 0
+replace_falsepos = 0
+replacement = '/*(DEBLOBBED)*/'
+
+# Should we print lines containing blobs, false positives, and neither?
+print_blob = 0
+with_context = 0
+print_falsepos = 0
+print_nomatch = 0
+
+# Should we print the input stack if we find blobs or false positives?
+list_blob = 0
+list_falsepos = 0
+
+# Should we forget everything we know about false positives?
+falsepos = None
+no_falsepos = 0
+
+verbose = $vp
+
+# Which of the defaults above should we override?
+$@ = 1
+
+EOF
+
+ if test "X$DEBLOB_CHECK_PYTHON_REGEX" = Xdebug; then
+ ${SED-sed} -e 's,^[+-],,' -e "$adjust_rx" \
+ -e "s,.*,re.compile (r'&'),g" \
+ < "$regex_name" >> "$scriptname"
+ fi
+
+ ${SED-sed} -n 's,^[+],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" -e 's,\^,,' \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; '"\
+s,^\\(.*\\)\$,falsepos = r'(?P<falsepos>\\1)',;\
+"' p;}' >> "$scriptname"
+
+ ${SED-sed} -n 's,^[-],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; '"\
+s,^\\(.*\\)\$,blob = r'(?P<blob>\\1)',;\
+"' p;}' >> "$scriptname"
+
+ echo "\\($initblob\\|$defineblob\\|$asmblob\\)" |
+ ${SED-sed} -e "$adjust_rx" \
+ -e "s,^\\(.*\\)\$,cblob = r'(?P<cblob>\\1)'," >> "$scriptname"
+
+ cat >> "$scriptname" <<\EOF
+
+if no_falsepos or falsepos is None:
+ falsepos = r'(?!)'
+
+rx = '^%s|%s' % (falsepos, blob)
+
+if with_context:
+ rx += '|^' + cblob
+
+rxc = re.compile('(?<=.)(?:%s)' % rx, re.M | re.S)
+
+filenames = None
+
+s = '\n'
+
+for line in sys.stdin:
+ # Read into s all lines between begin and end. An empty line, without
+ # even the '\n', flags the end of the input.
+ if line[:3] == ';/*' and line[-4:] == '*/;\n':
+ if line[3:9] == 'begin ':
+ nextfilenames = (line[9:-4], filenames)
+ if s == '\n':
+ filenames = nextfilenames
+ del nextfilenames
+ continue
+ elif line[3:7] == 'end ':
+ #if print_blob and not print_nomatch:
+ # from time import time
+ # sys.stderr.write('%i %i %s\n' % (time(), len(s), filenames[0]))
+ assert line[7:-4] == filenames[0]
+ nextfilenames = filenames[1]
+ else:
+ assert filenames != None
+ s += line
+ continue
+ else:
+ assert filenames != None
+ s += line
+ continue
+
+ if verbose:
+ print 'looking for matches'
+ sfilenames = filenames
+ while filenames != None:
+ if filenames[1] is None:
+ print filenames[0]
+ else:
+ print filenames[0] + ' within'
+ filenames = filenames[1]
+ filenames = sfilenames
+
+ if s[-1] == '\n':
+ s = s[:-1]
+
+ pp = 1
+ p = pend = 0
+ match = rxc.search (s, p)
+ while match != None:
+ firstmatch = match
+ blobs = falses = 0
+ while 1:
+ if verbose:
+ print 'found match'
+ what = match.lastgroup
+
+ if what == 'cblob':
+ if verbose: print 'match is a blob context'
+ pend = s.find ('\n', match.end()) + 1
+ if pend == 0:
+ pend = len(s)
+ p = match.start() + 1
+ blob_p = 2
+ else:
+ blob_p = what == 'blob'
+ assert blob_p or what == 'falsepos'
+
+ if blob_p:
+ if verbose: print 'match is a blob'
+ blobs += 1
+ else:
+ if verbose: print 'match is a false positive'
+ falses += 1
+
+ if blob_p and replace_blob or not blob_p and replace_falsepos:
+ s = s[:match.start(what)] + replacement + s[match.end(what):]
+ p = match.start(what) + len(replacement)
+ if pend > match.start(what):
+ pend += p - match.end(what)
+ else:
+ p = match.end(what)
+
+ if p > pend:
+ pend = s.find ('\n', p) + 1
+ if (pend == 0):
+ pend = len(s)
+
+ match = rxc.search (s, p)
+ if match is None or match.start () >= pend or \
+ (blob_p and not print_blob and not falses) or \
+ (not blob_p and not print_falsepos and not blobs):
+ break
+
+ if print_nomatch:
+ sys.stdout.write (s[pp:firstmatch.start() + 1])
+ pp = firstmatch.start() + 1
+ else:
+ pp = s.rfind ('\n', 0, firstmatch.start () + 1) + 1
+
+ if print_blob and blobs or print_falsepos and falses:
+ if not print_nomatch:
+ sfilenames = filenames
+ while filenames != None:
+ print '::: ' + filenames[0] + ' :::'
+ filenames = filenames[1]
+ filenames = sfilenames
+ sys.stdout.write (s[pp:pend])
+ pp = pend
+
+ if list_blob and blobs or list_falsepos and falses:
+ while filenames != None:
+ if filenames[1] is None:
+ print filenames[0]
+ else:
+ print filenames[0] + ' within'
+ filenames = filenames[1]
+ exit (1)
+
+ if print_nomatch:
+ sys.stdout.write(s[pp:])
+
+ if verbose:
+ print 'no further matches'
+
+ s = '\n'
+ filenames = nextfilenames
+ del nextfilenames
+
+assert filenames is None
+
+exit (0)
+EOF
+
+ scriptcmd="${PYTHON-python} "'"$scriptname"'
+}
+
+set_perl_main () {
+ adjust_rx='
+s,\\(,\\(?:,g;
+s,\\\([{(|)}?+]\),\1,g;
+'
+
+ # Add $ before arguments
+ set `echo "$@" | sed 's,\(^\|= *\),&$,g'`
+
+ cat >> "$scriptname" <<\EOF
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+# Should we replace blobs and false positives with replacement?
+my $replace_blob = 0;
+my $replace_falsepos = 0;
+my $replacement = '/*(DEBLOBBED)*/';
+
+# Should we print lines containing blobs, false positives, and neither?
+my $print_blob = 0;
+my $with_context = 0;
+my $print_falsepos = 0;
+my $print_nomatch = 0;
+
+# Should we print the input stack and exit if we find blobs or false positives?
+my $list_blob = 0;
+my $list_falsepos = 0;
+
+# Should we forget everything we know about false positives?
+my $falsepos;
+my $no_falsepos = 0;
+
+EOF
+
+ cat >> "$scriptname" <<EOF
+my \$verbose = $vp;
+
+# Which of the defaults above should we override?
+$@ = 1;
+
+EOF
+
+ ${SED-sed} -n 's,^[+],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" -e 's,\^,,' \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; '"\
+s,^\\(.*\\)\$,\$falsepos = qr'(?<falsepos>\\1)'ms;,;\
+"' p;}' >> "$scriptname"
+
+ ${SED-sed} -n 's,^[-],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; '"\
+s,^\\(.*\\)\$,my \$blob = qr'(?<blob>\\1)'ms;,;\
+"' p;}' >> "$scriptname"
+
+ echo "\\($initblob\\|$defineblob\\|$asmblob\\)" |
+ ${SED-sed} -e "$adjust_rx" \
+ -e "s,^\\(.*\\)\$,my \$cblob = qr'(?<cblob>\\1)'ms if \$with_context;," >> "$scriptname"
+
+ cat >> "$scriptname" <<\EOF
+
+$falsepos = qr/(?<falsepos>(?!))/ if $no_falsepos || ! defined $falsepos;
+
+my $rx = qr/^$falsepos|$blob/ms;
+
+$rx = qr/$rx|^$cblob/ms if $with_context;
+
+my @filenames;
+my $nfilenames = 0;
+my $nextnfilenames;
+
+my $s = '';
+
+while (<STDIN>) {
+ # Read into s all lines between begin and end. An empty line, without
+ # even the '\n', flags the end of the input.
+ if (m:^[;][/][*](begin|end) (.*)[*][/][;]$:) {
+ if ($1 eq 'begin') {
+ print "entering $2\n" if $verbose;
+ $filenames[$nfilenames] = $2;
+ $nextnfilenames = $nfilenames + 1;
+ if ($s eq '') {
+ $nfilenames = $nextnfilenames;
+ next;
+ }
+ } else {
+ $nextnfilenames = $nfilenames - 1;
+ print "processing $filenames[$nextnfilenames]\n" if $verbose;
+ }
+ } else {
+ $s .= $_;
+ next;
+ }
+
+ if ($verbose) {
+ print "looking for matches in\n";
+ for (my $i = $nfilenames; --$i > 0; ) {
+ print $filenames[$i], " within\n";
+ }
+ print $filenames[0], "\n";
+ }
+
+ $s =~ s/[\n]$//;
+
+ my $pp = my $p = 0;
+
+ my $matchfound = substr ($s, $p) =~ /$rx/o;
+ while ($matchfound) {
+ print "found first match\n" if $verbose;
+ my $firstmatchstart = $-[0] + $p;
+ my $blobs = my $falses = 0;
+ my $matchstart = $-[0] + $p;
+ my $pend = -1;
+ my $blob_p;
+ do {{
+ my $matchend = $+[0] + $p;
+ print "found match $matchstart..$matchend\n" if $verbose;
+ print "$&" if $verbose > 1;
+
+ if (defined $+{'cblob'}) {
+ print "match is a blob context\n" if ($verbose);
+ $pend = index ($s, "\n", $matchend) + 1;
+ $pend = length $s if !$pend;
+ }
+
+ if (defined $+{'falsepos'}) {
+ print "match is a false positive\n" if ($verbose);
+ # $matchend -= $+[0] - $+[1];
+ $blob_p = 0;
+ $falses++;
+ } elsif (defined $+{'blob'}) {
+ $blob_p = 1;
+ $blobs++;
+ print "match is a blob at $matchstart\n" if ($verbose);
+ } else {
+ $blob_p = 2;
+ $p = $matchstart;
+ print "searching up to $pend\n" if $verbose;
+ next;
+ }
+
+ if ($blob_p ? $replace_blob : $replace_falsepos) {
+ substr ($s, $matchstart, $matchend - $matchstart,
+ $replacement);
+ $p = $matchstart + length $replacement;
+ $pend += $p - $matchend if $pend >= $matchstart;
+ } else {
+ $p = $matchend;
+ }
+
+ $pend = index ($s, "\n", $p) + 1 if $p >= $pend;
+ $pend = length $s if !$pend;
+ print "searching up to $pend\n" if $verbose;
+ $p--;
+ }} while (($matchfound = (substr ($s, $p) =~ /(?<=.)$rx/mso))
+ && ($matchstart = $-[0] + $p) < $pend
+ && !($blob_p
+ ? (!$print_blob && !$falses)
+ : (!$print_falsepos && !$blobs)));
+
+ print "last match before $pend\n" if $verbose;
+
+ if ($print_nomatch) {
+ print substr ($s, $pp, $firstmatchstart - $pp);
+ $pp = $firstmatchstart;
+ } elsif (($print_blob || $print_falsepos) && $firstmatchstart > 0) {
+ $pp = rindex ($s, "\n", $firstmatchstart - 1) + 1;
+ }
+
+ if (($print_blob && $blobs) || ($print_falsepos && $falses)) {
+ if (!$print_nomatch) {
+ for (my $i = $nfilenames; $i-- > 0;) {
+ print "::: ", $filenames[$i], " :::\n";
+ }
+ }
+
+ print substr ($s, $pp, $pend - $pp);
+ $pp = $pend;
+ }
+
+ if (($list_blob && $blobs) || ($list_falsepos && $falses)) {
+ for (my $i = $nfilenames; --$i > 0;) {
+ print $filenames[$i], " within ";
+ }
+ print $filenames[0], "\n";
+ exit (1);
+ }
+ }
+
+ print substr ($s, $pp) if $print_nomatch;
+
+ print "no further matches\n" if $verbose;
+
+ $s = '';
+ $nfilenames = $nextnfilenames;
+}
+
+exit (0);
+EOF
+
+ scriptcmd="${PERL-perl} "'"$scriptname"'
+}
+
+set_awk_main () {
+ adjust_rx='
+s,[$]$,([\\n]|$),;
+s,\[^\],[^\\],g;
+s,\\\([{(|)}?+]\),\1,g;
+'
+
+ case " = $@ = " in
+ *" = no_falsepos = "*) falsepos='$.^';;
+ *) falsepos=`
+ ${SED-sed} -n 's,^[+],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" -e 's,\^,,' \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; p;}'
+ `
+ case $falsepos in "") falsepos='$.^';; esac;;
+ esac
+
+ blob=`
+ ${SED-sed} -n 's,^[-],,p' < "$regex_name" |
+ ${SED-sed} -n -e "$adjust_rx" \
+ -e '1h; 1!H; $ { g; s,[\n],|,g; p;}'`
+
+ case " = $@ = " in
+ *" = with_context = "*) cblob=`
+ $echo "\\($initblob\\|$defineblob\\|$asmblob\\)" |
+ ${SED-sed} -e "$adjust_rx"
+ `;;
+ *) cblob='$.^';;
+ esac
+
+ xrs= nrs="# " eor="RT" eormatch='RT ~ ' eornl='[\n]' eornlsz=1
+ # Uncomment the line below to disable the use of a regular
+ # expression for the awk Record Separator, a GNU awk extension.
+ # Using this extension appears to save a lot of memory for long
+ # deblob-check runs.
+ # xrs="# " nrs= eor='$0' eormatch='' eornl= eornlsz=0
+
+ cat >> "$scriptname" <<EOF
+#! /bin/gawk --re-interval -f
+
+BEGIN {
+ # Should we replace blobs and false positives with replacement?
+ replace_blob = 0;
+ replace_falsepos = 0;
+ replacement = "/*(DEBLOBBED)*/";
+
+ # Should we print lines containing blobs, false positives, and neither?
+ print_blob = 0;
+ with_context = 0;
+ print_falsepos = 0;
+ print_nomatch = 0;
+
+ # Should we print the input stack and exit if we find blobs or
+ # false positives?
+ list_blob = 0;
+ list_falsepos = 0;
+
+ # Should we forget everything we know about false positives?
+ no_falsepos = 0;
+
+ verbose = $vp;
+
+ nfilenames = 0;
+ s = "\n";
+
+ # Which of the defaults above should we override?
+ $@ = 1;
+
+ # requires GNU awk RS extension:
+$xrs RS = "[;][/][*](begin|end) [^\n]*[*][/][;][\n]";
+}
+# requires GNU awk RS extension:
+$xrs { s = s \$0; }
+# does not require GNU awk RS extension:
+$nrs !/^[;][/][*].*[*][/][;]$/ {
+$nrs s = s \$0 "\n";
+$nrs next;
+$nrs }
+$eormatch /^[;][/][*]begin .*[*][/][;]$eornl$/ {
+ filenames[nfilenames] = substr($eor, 10, length ($eor) - 12 - $eornlsz);
+ if (verbose) print "entering " nfilenames ": " filenames[nfilenames];
+ nextnfilenames = nfilenames + 1;
+ if (s == "\n") {
+ nfilenames = nextnfilenames;
+ next;
+ }
+}
+$eormatch /^[;][/][*]end .*[*][/][;]$eornl$/ {
+ nextnfilenames = nfilenames - 1;
+ if (verbose)
+ print "got to the end of " nextnfilenames ": " filenames[nextnfilenames];
+}
+{
+ if (verbose) {
+ print "looking for matches";
+ for (i = nfilenames; --i > 0;)
+ print filenames[i] " within";
+ print filenames[0]
+ }
+
+ s = substr (s, 1, length (s) - 1)
+
+ pp = 2;
+ p = pend = 1;
+ if (verbose > 1) print "searching starting at", substr (s, p, 10)
+ matchfound = match (substr (s, p),
+ /[\n]($falsepos)|[\n]($cblob)|.($blob)/);
+ while (matchfound) {
+ blobs = falses = 0;
+ firstmatchstart = RSTART + p;
+ for (;;) {
+ matchstart = RSTART + p - 1;
+ matchlen = RLENGTH;
+ if (verbose) {
+ print "found match", matchstart, matchlen;
+ if (verbose > 1)
+ print substr (s, matchstart + 1, matchlen - 1);
+ }
+
+ if (match (substr (s, matchstart, matchlen), /^[\n]($falsepos)/) == 1) {
+ matchlen = RLENGTH;
+ if (verbose) print "match is a false positive of length", matchlen;
+ blob_p = 0;
+ falses++;
+ } else if (match (substr (s, matchstart, matchlen), /^.($blob)/) == 1) {
+ matchlen = RLENGTH;
+ if (verbose) print "match is a blob of length", matchlen;
+ blob_p = 1;
+ blobs++;
+ } else if (match (substr (s, matchstart, matchlen), /^[\n]($cblob)$/) == 1) {
+ if (verbose) print "match is a blob context";
+ pend = index (substr (s, matchstart + matchlen), "\n");
+ if (pend)
+ pend += matchstart + matchlen;
+ else
+ pend = length (s);
+ p = matchstart + 1;
+ blob_p = 2;
+ if (verbose > 1) print "range is:", substr (s, p, pend - p);
+ }
+
+ if (blob_p < 2) {
+ if (blob_p ? replace_blob : replace_falsepos) {
+ s = substr (s, 1, matchstart) \\
+ replacement \\
+ substr (s, matchstart + matchlen);
+ p = matchstart + length (replacement) - 1;
+ pend += (p + 1 - matchstart - matchlen);
+ } else
+ p = matchstart + matchlen - 1;
+
+ if (p >= pend) {
+ i = index (substr (s, p + 1), "\n");
+ if (i)
+ pend = p + 1 + i;
+ else
+ pend = length (s)
+ }
+ }
+
+ if (verbose) print "search until", pend;
+
+ if (!(matchfound = match (substr (s, p),
+ /[\n]($falsepos)|[\n]($cblob)|.($blob)/)) ||
+ p + RSTART >= pend ||
+ (blob_p ?
+ (!print_blob && !falses) :
+ (!print_falsepos && !blobs)))
+ break;
+ }
+
+ if (print_nomatch)
+ printf "%s", substr (s, pp, firstmatchstart - pp);
+ else if (print_blob || print_falsepos) {
+ lastline = substr (s, pp, firstmatchstart - pp);
+ sub (/.*[\n]/, "", lastline);
+ if (verbose) print "lastline: " lastline "\\\\n"
+ firstmatchstart -= length (lastline);
+ }
+ pp = firstmatchstart;
+
+ if (verbose) print "match set range:", pp, pend
+
+ if ((print_blob && blobs) || (print_falsepos && falses)) {
+ if (!print_nomatch)
+ for (i = nfilenames; i-- > 0;)
+ print "::: " filenames[i] " :::";
+ printf "%s", substr (s, pp, pend - pp);
+ pp = pend;
+ }
+
+ if ((list_blob && blobs) || (list_falsepos && falses)) {
+ for (i = nfilenames; --i > 0;)
+ print filenames[i] " within";
+ print filenames[0];
+ exit (1);
+ }
+ }
+
+ if (print_nomatch)
+ printf "%s", substr (s, pp)
+
+ if (verbose)
+ print "no further matches";
+
+ s = "\n";
+ nfilenames = nextnfilenames;
+ next;
+}
+EOF
+
+ scriptcmd="${AWK-gawk} --re-interval -f "'"$scriptname"'
+}
+
+set_flex_main () {
+ adjust_rx='
+s,\\\([{(|)}?+]\),\1,g
+s,^\([-+]\)\(\^\?\)\(.*\)\(\$\?\)$,\2(?s:\3)\4\1,g
+s,[+]$, { falsepos (); },
+s,[-]$, { blob (); },
+'
+
+ echo '%%' > "$scriptname"
+ ${SED-sed} "$adjust_rx" < "$regex_name" >> "$scriptname"
+ echo '\n|. { unmatched (); }
+%%
+int falsepos () {}
+int blob () {}
+int unmatched () {}
+' >> "$scriptname"
+
+ scriptcmd=false
+}
+
+set_save_script_input_main () {
+ savename=`mktemp -t deblob-check-input-XXXXXX`
+ scriptcmd="{ echo saving input in $savename && cat > $savename && echo done; }"
+}
+
+# Process an input file named in $1 and run it through the blob
+# recognizer. Functions set_except and set_sed_cmd provide additional
+# arguments on a per-file and per-action basis.
+
+check () {
+ case "$#" in 1) ;; *) echo ICE >&2; exit 1;; esac
+
+ input=$1
+
+ # Add $1 to falsepos. Its usage makes it implicitly anchored to the
+ # beginning of the line. $2, if present, will some day narrow the
+ # falsepos matches to files that match it.
+ addx () {
+ $echo "+^$1" >> $regex_name
+ }
+
+ # Add $1 to falseneg. Unlike addx, it is NOT implicitly anchored to
+ # the beginning of the line. $2, if present, will some day narrow
+ # the falseneg matches to files that match it.
+ badx () {
+ $echo "-$1" >> $regex_name
+ }
+
+ # Look for a multi-line definition starting with a line that matches
+ # $1 (implicitly anchored to the beginning of the line), and ending
+ # at the first ';'. $2 may optionally name the files in which this
+ # match is to be disregarded as a potential blob.
+ initnc () {
+ addx "$1[^;]*[;]\\?" $2
+ }
+
+ # Same as initnc, but require the terminating semicolon.
+ defsnc () {
+ addx "$1[^;]*[;]" $2
+ }
+
+ # Look for a multi-line definition starting with a line that matches
+ # $1 (implicitly anchored to the beginning of the line), and ending
+ # at the first ';' that's not within comments.
+ initc () {
+ addx "$1\\([^;/]\\+\\($comment\\|[/][^/*;]\\)\\+\\)*[^;/]*[;]\\?" $2
+ }
+
+ # Same as initc, but require the terminating semicolon.
+ defsc () {
+ addx "$1\\([^;/]\\+\\($comment\\|[/][^/*;]\\)\\+\\)*[^;/]*[;]" $2
+ }
+
+ # Accept as a non-blob an expression $1 that would have otherwise
+ # triggered blob detection. The expression must end in a way that
+ # would trigger the blob detection machinery.
+ accept () {
+ addx "$1" $2
+ }
+
+ # Match up to the end a comment started in $1.
+ ocomment () {
+ addx "$1[/]*\\([*]*[^*/][/]*\\)*[*]\+[/]" $2
+ }
+
+ # Match $1 followed by backslash-terminated lines and a last
+ # non-backslash-terminated line.
+ oprepline () {
+ addx "$1\\([^\\\\\\n]*[\\\\][\\n]\\)*[^\\\\\\n]*$" $2
+ }
+
+ # Match $1 in $2 as a blob. Not anchored.
+ blobna () {
+ badx "$1" $2
+ }
+
+ # Match $1 as a blob anywhere. $2 is just for documentation purposes.
+ blobname () {
+ badx "$1"
+ }
+
+ # Match $1 in $2 as a blob. The expectation is a match in the
+ # beginning of line, but we don't do anchoring of blob patterns ATM.
+ blob () {
+ badx "$1" $2
+ }
+
+ regex_name=`mktemp -t deblob-check-regex-XXXXXX`
+ tempfiles="$regex_name"
+
+ set_except "$input"
+
+ # Check that all regular expressions match our requirements.
+ ${SED-sed} -n '
+s,^\(-\^\?\|[+]\^\),,
+h
+s,[$]$,,
+s,\([^\\]\|^\)\(\(\\\\\)*\)\(\[^\?[]]\?[^]]\+\]\([*]\|\\[+?]\)\?\(\\\\\)*\)\+,\1\2,g
+/\([^\\]\|^\)\(\\\\\)*\([{(|)}?+^$"'"'"'; ]\)\|^$/{
+ g
+ i\
+BAD regular expression:
+ p
+ q 1
+}' $regex_name >&2 || exit 1
+
+ scriptname=`mktemp -t deblob-check-script-XXXXXX`
+ tempfiles="$tempfiles $scriptname"
+
+ scriptcmd=false
+ scriptcmd2=
+
+ $set_cmd "$input"
+
+ for f in $tempfiles; do
+ case $f in "$scriptname") ;;
+ *) rm -f "$f" ;;
+ esac
+ done
+ tempfiles="$scriptname"
+
+ # Choose the input source...
+ case $input in
+ -) in= ;;
+ *) in='< "$input"' ;;
+ esac
+
+ set fnord # shifted out below
+
+ # Decompress as needed...
+ case $input in
+ *.bz2) cmd='bunzip2' ;;
+ *.gz) cmd='gunzip' ;;
+ *) cmd= ;;
+ esac
+ if test -n "$cmd"; then
+ set "$@" "$cmd"
+ fi
+
+ # Extract or otherwise munge...
+ case /$input in
+ *.tar*)
+ cmd="tar -xf - --to-command='echo \";/*begin \$TAR_FILENAME*/;\"; cat; echo; echo \";/*end \$TAR_FILENAME*/;\"'"
+ ;;
+ *.patch | *.patch.*z* | */patch-* | *.diff | *.diff.*z*)
+ if $reverse_patch; then
+ s=- r=+
+ else
+ s=+ r=-
+ fi
+ sedpatch="
+ /^[$r]/b testlastline;
+ # /^[*!]/ {
+ # s,^,context diffs are not properly supported\\n,;
+ # W /dev/stderr
+ # d;
+ # }
+ /^\\(@@ \\|$s$s$s \\|[^$s @]\\|$\\)/ {
+ x;
+ /^@@ /{
+ s,^,;/*end ,;
+ s,\\([\\n]\\|$\\),*/;&,;
+ i\\
+;/**/;
+
+ P;
+ s,^[^\\n]*\\([\\n]\\|$\\),,;
+ }
+ x;
+ }
+ /^\\($s$s$s \\|[^$s @]\\|$\\)/ {
+ x;
+ /^$s$s$s /{
+ s,^$s$s$s,;/*end,;
+ s,\\([\\n]\\|$\\),*/;&,;
+ i\\
+
+ P;
+ s,^[^\\n]*\\([\\n]\\|$\\),,;
+ }
+ x;
+ }
+ /^$s$s$s / {
+ H;
+ x;
+ s,^[\\n],,;
+ s,^\\(.*\\)[\\n]\\([^\\n]*\\)$,\\2\\n\\1,;
+ x;
+ s,^$s$s$s \\(.*\\)$,;/*begin \\1*/;,;
+ p;
+ d;
+ }
+ /^@@ / {
+ H;
+ x;
+ s,^[\\n],,;
+ s,^\\(.*\\)[\\n]\\([^\\n]*\\)$,\\2\\n\\1,;
+ x;
+ # A number of patterns for patches depend on the ;/*@@ lines for
+ # context.
+ s,^.*$,;/*begin &*/;\\n;/*&*/;,;
+ p;
+ d;
+ }
+ s,^[ !$s],,
+ p;
+ :testlastline
+ $ {
+ x;
+ /^@@ /{
+ s,^,;/*end ,;
+ s,\\([\\n]\\|$\\),*/;&,;
+ i\\
+;/**/;
+
+ P;
+ s,^[^\\n]*\\([\\n]\\|$\\),,;
+ }
+ /^$s$s$s /{
+ s,^$s$s$s,;/*end,;
+ s,\\([\\n]\\|$\\),*/;&,;
+ i\\
+
+ P;
+ s,^[^\\n]*\\([\\n]\\|$\\),,;
+ }
+ x;
+ }
+ d;"
+ cmd='${SED-sed} "$sedpatch"'
+ ;;
+ *)
+ cmd='cat'
+ ;;
+ esac
+ cmd="{ echo \";/*begin $input*/;\"; $cmd; echo; echo \";/*end $input*/;\"; }"
+ set "$@" "$cmd"
+
+ case $input in
+ *.tar*)
+ cmd="{ cat; cat > /dev/null; }"
+ set "$@" "$cmd"
+ ;;
+ esac
+
+ # Then run through the selected action.
+ set "$@" "$scriptcmd"
+
+ case $scriptcmd2 in "" | cat) ;;
+ *) set "$@" "$scriptcmd2"
+ esac
+
+ # test $# = 1 || set "$@" "cat"
+
+ shift # fnord goes out here
+
+ pipe=
+ for cmd
+ do
+ if test -z "$pipe"; then
+ pipe="$cmd $in"
+ else
+ pipe="$pipe | $cmd"
+ fi
+ done
+
+ eval "$pipe"
+ status=$?
+
+ $rm $tempfiles
+ tempfiles=
+
+ (exit $status)
+}
+
+# If no input given, use stdin.
+case $# in
+0)
+ test -t 0 && echo reading from standard input >&2
+ set fnord -
+ shift
+ ;;
+esac
+
+# The lines below commented out out #list: can be used to get a list
+# of matching inputs. ATM this is useless, so we just use a shell
+# boolean.
+
+#list: n=$#
+pass=:
+
+tempfiles=
+trap "status=$?; test -z \"$tempfiles\" || rm -f $tempfiles; (exit $status); exit" 0 1 2 15
+
+process_arg=
+
+# Go through each of the input files in the command line.
+for file
+do
+ case $process_arg in
+ "") ;;
+ --implied-prefix | --prefix | -i)
+ prefix=$file
+ case $prefix in
+ /*/) ;;
+ */) prefix=/$prefix ;;
+ /*) prefix=$prefix/ ;;
+ *) prefix=/$prefix/ ;;
+ esac
+ process_arg=
+ continue
+ ;;
+ *)
+ echo Internal error with process_arg=$process_arg >&2
+ exit 1
+ ;;
+ esac
+
+ case $sawdashdash$file in
+ --implied-prefix | --prefix | -i)
+ process_arg=$file
+ continue
+ ;;
+ esac
+
+ # If we print anything whatsoever (even a blank line) while
+ # processing it, we've failed.
+ if check "$file"; then
+ :
+ else
+ pass=false
+ #list: set fnord "$@" "$file"
+ #list: shift
+ fi
+done
+
+case $process_arg in
+"") ;;
+*)
+ echo Missing argument to $process_arg >&2
+ exit 1
+ ;;
+esac
+
+#list: shift $n
+
+#list: exec test $# = 0
+$pass
+exit
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-main b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-main
new file mode 100755
index 000000000..7d8a29cd5
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/deblob-main
@@ -0,0 +1,243 @@
+#! /bin/sh
+
+# Copyright (C) 2008, 2009, 2010 Alexandre Oliva <lxoliva@fsfla.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+# deblob.sh - prepare a linux-libre tarball out of a non-libre Linux
+# tarball. It expects the Linux release (mver, say 2.6.25) as the
+# first argument, the libre sub-release (extra) as the second optional
+# argument, and the patch release (sver, say .13) as an optional third
+# argument. mver and sver are pasted together to form kver.
+
+# linux-$kver.tar.bz2 and deblob-$mver must exist in the current
+# directory, and the line that sets kver and extra in deblob-$mver
+# must match mver and extra.
+
+# The resulting tarball is put in linux-$kver-libre$extra.tar.bz2, and
+# an uncompressed xdelta that produces linux-$kver-libre$extra.tar out
+# of linux-$kver.tar is created as linux-$kver-libre$extra.xdelta.
+# This xdelta can be distributed to enable third parties to easily
+# reconstruct the binary tarball starting out of sources downloaded
+# from kernel.org, but without distributing non-Free Software
+# yourself, because xdelta (unlike patches) is not reversible: the
+# removed bits are not present in it at all.
+
+# To enable you to check the differences between the tarballs, a patch
+# file is generated in linux-$kver-libre$extra.patch. This patch file
+# contains the non-Free blobs, even though in reversed form, so its
+# distribution is discouraged.
+
+# At the end, the script attempts to generate a digital signature for
+# the newly-created tarball. This is the last thing the script does,
+# so interrupting it at that point to skip the signing won't fail to
+# do anything else.
+
+# It is safe to interrupt the script at any other point. When it gets
+# a ^C (other than during signing), it starts cleaning up all of its
+# temporary and output files. If you insist, it may leave junk
+# behind, and then it will refuse to run again before you clean it up
+# by hand. It takes extra care to avoid overwriting useful files.
+
+# If deblob-$mver finds any unexpected situation, it will error out,
+# and then deblob-main will quit. Pass --force to deblob-main, before
+# any other argument, for deblob-main to ignore any such situations.
+
+case $1 in
+--force) force=--force; shift;;
+*) force=;;
+esac
+
+mver=$1 extra=$2 sver=$3
+kver=$mver$sver libre=libre$extra
+deblob= dir=`echo "$0" | sed 's,[^/]*$,,;s,^$,.,;s,/*$,,'`
+
+if test ! -f linux-$kver.tar.bz2; then
+ echo linux-$kver.tar.bz2 does not exist >&2
+ exit 1
+fi
+
+if test -f deblob-$mver; then
+ deblob=deblob-$mver
+elif test -f deblob; then
+ deblob=deblob
+elif test -f $dir/deblob-$mver; then
+ cp $dir/deblob-$mver deblob
+ deblob=deblob
+else
+ echo deblob does not exist >&2
+ exit 1
+fi
+
+x1="kver=$mver extra=$extra"
+x2=`grep "^kver=[^ ]* extra=" $deblob`
+if test "$x1" = "$x2"; then
+ :
+else
+ echo deblob script does not match command-line arguments >&2
+ echo expected: $x1 >&2
+ echo found : $x2 >&2
+ exit 1
+fi
+
+cleanup=
+
+for f in \
+ linux-$kver-$libre.tar.bz2 \
+ linux-$kver-$libre.tar.bz2.asc \
+ linux-$kver-$libre.tar.bz2.sign \
+ linux-$kver-$libre.tar.lz \
+ linux-$kver-$libre.tar.lz.asc \
+ linux-$kver-$libre.tar.lz.sign \
+ linux-$kver.tar \
+ linux-$kver-$libre.tar \
+ linux-$kver-$libre.patch \
+ linux-$kver-$libre.log \
+ linux-$kver-$libre.xdelta \
+ linux-$kver-$libre.xdelta.asc \
+ linux-$kver-$libre.xdelta.sign \
+; do
+ if test -f $f; then
+ echo $f already exists >&2
+ exit 1
+ fi
+ cleanup="$cleanup $f"
+done
+
+for d in \
+ linux-$kver \
+ linux-$kver-$libre \
+ orig-linux-$kver \
+; do
+ if test -d $d; then
+ echo $d already exists >&2
+ exit 1
+ fi
+ cleanup="$cleanup $d"
+done
+
+if test -f $dir/deblob-$kver; then
+ if cmp $dir/deblob-$kver $deblob; then
+ :
+ else
+ echo $dir/deblob-$kver and $deblob are different >&2
+ exit 1
+ fi
+fi
+
+if test ! -f deblob-check; then
+ if test -f $dir/deblob-check; then
+ cp $dir/deblob-check deblob-check
+ fi
+else
+ if test -f $dir/deblob-check; then
+ if cmp $dir/deblob-check deblob-check; then
+ :
+ else
+ echo $dir/deblob-check and deblob-check are different >&2
+ exit 1
+ fi
+ fi
+fi
+
+trap "status=$?; echo cleaning up...; rm -rf $cleanup; (exit $status); exit" 0 1 2 15
+
+set -e
+
+echo Uncompressing linux-$kver.tar.bz2 into linux-$kver.tar
+rm -rf linux-$kver linux-$kver.tar
+bunzip2 < linux-$kver.tar.bz2 > linux-$kver.tar
+
+echo Extracting linux-$kver.tar into linux-$kver
+tar -xf linux-$kver.tar
+rm -rf linux-$kver-$libre linux-$kver-$libre.tar
+
+echo Copying linux-$kver to linux-$kver-$libre
+cp linux-$kver.tar linux-$kver-$libre.tar
+cp -lR linux-$kver/. linux-$kver-$libre
+
+rm -f linux-$kver-$libre.log linux-$kver-$libre.log.tmp
+echo Deblobbing within linux-$kver-$libre, saving output to linux-$kver-$libre.log
+# We can't just pipe deblob into tee, for then we fail to detect
+# error conditions. Use file renaming to tell whether we succeeded.
+if (cd linux-$kver-$libre && /bin/sh ../$deblob $force) 2>&1; then
+ mv linux-$kver-$libre.log.tmp linux-$kver-$libre.log
+fi | tee linux-$kver-$libre.log.tmp
+if test ! -f linux-$kver-$libre.log; then
+ mv linux-$kver-$libre.log.tmp linux-$kver-$libre.log
+ echo $deblob failed, aborting >&2
+ exit 1
+fi
+rm -f linux-$kver-$libre.patch
+
+# Do not copy these scripts for now, deblob-check regards itself as a blob.
+# cp -p $0 $deblob deblob-check linux-$kver-$libre
+
+echo Generating linux-$kver-$libre.patch
+diff -druN linux-$kver linux-$kver-$libre > linux-$kver-$libre.patch || :
+
+echo Removing removed or modified files from linux-$kver-$libre.tar
+diff -rq linux-$kver linux-$kver-$libre |
+sed -n "
+ s,^Only in \\(linux-$kver\\(/.*\\)\\?\\): \\(.*\\),\1/\3,p;
+ s,^Files \\(linux-$kver\\)/\\(.*\\) and \\1-$libre/\\2 differ,\\1/\\2,p;
+" |
+xargs tar --delete -f linux-$kver-$libre.tar
+
+echo Adding modified or added files to linux-$kver-$libre.tar
+rm -rf orig-linux-$kver
+mv linux-$kver orig-linux-$kver
+mv linux-$kver-$libre linux-$kver
+diff -rq orig-linux-$kver linux-$kver |
+sed -n "
+ s,^Files orig-\\(linux-$kver/.*\\) and \\1 differ,\\1,p;
+ s,^Only in \\(linux-$kver\\(/.*\\)\\?\\): \\(.*\\),\\1/\\3,p;
+" |
+xargs tar --append -f linux-$kver-$libre.tar
+
+echo Wiping out extracted trees
+rm -rf linux-$kver orig-linux-$kver
+
+echo Creating xdelta between linux-$kver.tar and linux-$kver-$libre.tar
+xdelta delta -0 linux-$kver.tar linux-$kver-$libre.tar linux-$kver-$libre.xdelta || : # xdelta returns nonzero on success
+
+echo Compressing linux-$kver-$libre.tar and linux-$kver-$libre.xdelta
+rm -f linux-$kver.tar
+lzip -k9 linux-$kver-$libre.tar
+bzip2 -9 linux-$kver-$libre.tar
+if test -f linux-$kver-$libre.xdelta; then
+ lzip -k9 linux-$kver-$libre.xdelta
+ bzip2 -9 linux-$kver-$libre.xdelta
+fi
+
+trap "status=$?; (exit $status); exit" 0 1 2 15
+
+echo Done except for signing, feel free to interrupt
+for f in \
+ linux-$kver-$libre.tar.bz2 \
+ linux-$kver-$libre.tar.lz \
+ linux-$kver-$libre.xdelta.bz2 \
+ linux-$kver-$libre.xdelta.lz \
+; do
+ if test -f $f; then
+ gpg -a --detach-sign $f
+ mv $f.asc $f.sign
+ fi
+done
+
+echo All set, please review linux-$kver-$libre.patch
+
+exit 0
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/drm-nouveau-updates.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/drm-nouveau-updates.patch
new file mode 100644
index 000000000..5e8019c0b
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/drm-nouveau-updates.patch
@@ -0,0 +1,9153 @@
+* drivers/gpu/drm/nouveau/nv50_graph.c: Adjusted, was already deblobbed.
+
+From 1fe467ac55c8503078f679b1f503e4895d6c5895 Mon Sep 17 00:00:00 2001
+From: Marcin Slusarz <marcin.slusarz@gmail.com>
+Date: Wed, 17 Feb 2010 19:04:00 +0100
+Subject: [PATCH 1/3] drm-nouveau-updates
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+drm/nouveau: fix pramdac_table range checking
+
+get_tmds_index_reg reads some value from stack when mlv happens
+to be equal to size of pramdac_table array. Fix it.
+
+Reported-by: Dan Carpenter <error27@gmail.com>
+Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: fix nouveau_i2c_find bounds checking
+
+Reported-by: Dan Carpenter <error27@gmail.com>
+Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: fix i2ctable bounds checking
+
+i2c_entries seems to be the number of i2c entries,
+so with index equal to this number, we could read
+invalid data from i2ctable. Fix it.
+
+Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: allow retrieval of vbios image from debugfs
+
+It's very useful to be able to access this without additional tools for
+debugging purposes.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: rename parsed_dcb_gpio to dcb_gpio_table
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: merge parsed_dcb and bios_parsed_dcb into dcb_table
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: merge nvbios and nouveau_bios_info
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: reorganise bios header, add dcb connector type enums
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: parse dcb gpio/connector tables after encoders
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: check for known dcb connector types
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: construct a connector table for cards that lack a real one
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: use dcb connector table for creating drm connectors
+
+This makes this code common to both the nv04 and nv50 paths.
+
+For the moment, we keep the previous behaviour with HDMI/eDP connectors
+and report them as DVI-D/DP instead. This will be fixed once the rest
+of the code has been fixed to deal with those types.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: enable hpd on any connector we know the gpio line for
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: use dcb connector types throughout the driver
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Implement ctxprog/state generation.
+
+This removes dependence on external firmware for NV50 generation cards.
+If the generated ctxprogs don't work for you for some reason, please
+report it.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Fix noaccel/nofbaccel option descriptions.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: support version 0x20 displayport tables
+
+Not entirely identical to 0x21, the per-encoder table header lacks the
+third init table pointer. However, our current parsing of the table
+should work just fine.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: report unknown connector state if lid closed
+
+This is in preference to disconnected. If there's no other outputs
+connected this will cause LVDS to be programmed even with the lid
+closed rather than having X fail to start because of no available
+outputs.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: use ALIGN instead of open coding it
+
+CC: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Matt Turner <mattst88@gmail.com>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: protect channel create/destroy and irq handler with a spinlock
+
+The nv50 pgraph handler (for example) could reenable pgraph fifo access
+and that would be bad when pgraph context is being unloaded (we need the
+guarantee a ctxprog isn't running).
+
+Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Remove redundant/incorrect ctxvals initialisation.
+
+11c/004 offset corresponds to PGRAPH reg 0x400828, and is initialised
+earlier anyway by both our ctxprog generator and blob ctxvals. It's
+actually incorrect with the generator, since we use different layout
+on pre-NVA0.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Fix fbcon corruption with font width not divisible by 8
+
+NV50 is nice and has a switch that autoaligns stuff for us. Pre-NV50,
+we need to align input bitmap width manually.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nv50: Make ctxprog wait until interrupt handler is done.
+
+This will fix races between generated ctxprogs and interrupt handler.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Improve PGRAPH interrupt handling.
+
+This makes nouveau recognise and report more kinds of PGRAPH errors, as
+well as prevent GPU lockups resulting from some of them.
+
+Lots of guesswork was involved and some part of this is probably
+incorrect. Some potential-lockuop situations are handled by just
+resetting a whole PGRAPH subunit, which doesn't sound like a "proper"
+solution, but seems to work just fine... for now.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: add option to allow override of dcb connector table types
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Gigabyte NX85T connector table lies, it has DVI-I not HDMI
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv04-nv40: Fix up the programmed horizontal sync pulse delay.
+
+The calculated values were a little bit off (~16 clocks), the only
+effect it could have had is a slightly offset image with respect to
+the blob on analog outputs (bug 26790).
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: print a message very early during suspend
+
+- In case of suspend lockups it's nice to know it happened in nouveau.
+
+Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
+
+drm/nv50: add a memory barrier to pushbuf submission
+
+- This is useful for vram pushbuffers that are write combined.
+- pre-nv50 has one too (in WRITE_PUT).
+
+Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
+
+drm/nv50: fix connector table parsing for some cards
+
+The connector table index in the DCB entry for each output type is an
+index into the connector table, and does *not* necessarily match up
+with what was previously called "index" in the connector table entries
+themselves.
+
+Not real sure what that index is exactly, renamed to "index2" as we
+still use it to prevent creating multiple TV connectors.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Never evict VRAM buffers to system.
+
+VRAM->system is a synchronous operation: it involves scheduling a
+VRAM->TT DMA transfer and stalling the CPU until it's finished so that
+we can unbind the new memory from the translation tables. VRAM->TT can
+always be performed asynchronously, even if TT is already full and we
+have to move something out of it.
+
+Additionally, allowing VRAM->system behaves badly under heavy memory
+pressure because once we run out of TT, stuff starts to be moved back
+and forth between VRAM and system, and the TT contents are hardly
+renewed.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: add module option to disable TV detection
+
+Intended to be used as a workaround in cases where we falsely detect
+that a TV is connected when it's not.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: add more 0x100c80 flushy magic
+
+Fixes the !vbo_fifo path in the 3D driver on certain chipsets. Still not
+really any good idea of what exactly the magic achieves, but it makes
+things work.
+
+While we're at it, in the PCIEGART path, flush on unbinding also.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: bail out of auxch transaction if we repeatedly recieve defers
+
+There's one known case where we never stop recieving DEFER, and loop here
+forever. Lets not do that..
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix fbcon when framebuffer above 4GiB mark
+
+This can't actually happen right now, but lets fix it anyway.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Fix NEWCTX_DONE flag number
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: remove some unused members from drm_nouveau_private
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: detect vram amount once, and save the value
+
+As opposed to repeatedly reading the amount back from the GPU every
+time we need to know the VRAM size.
+
+We should now fail to load gracefully on detecting no VRAM, rather than
+something potentially messy happening.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv40: rework lvds table parsing
+
+All indications seem to be that the version 0x30 table should be handled
+the same way as 0x40 (as used on G80), at least for the parts that we
+currently try use.
+
+This commit cleans up the parsing to make it clearer about what we're
+actually trying to achieve, and unifies the 0x30/0x40 parsing.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv40: add LVDS table quirk for Dell Latitude D620
+
+Should fix:
+ https://bugzilla.redhat.com/show_bug.cgi?id=505132
+ https://bugzilla.redhat.com/show_bug.cgi?id=543091
+ https://bugzilla.redhat.com/show_bug.cgi?id=530425
+ https://bugs.edge.launchpad.net/ubuntu/+source/xserver-xorg-video-nouveau/
+ +bug/539730
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix instmem init on IGPs if stolen mem crosses 4GiB mark
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: fixup the init failure paths some more
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: move pdisp init earlier, and cleanup if it fails
+
+Moving it earlier is to avoid some extra cleanup if it fails.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Allow using the NVA3 new compute class.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Make use of TTM busy_placements.
+
+Previously we were filling it the same as "placements", but in some
+cases there're valid alternatives that we were ignoring completely.
+Keeping a back-up memory type helps on several low-mem situations.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nv50: preserve an unknown SOR_MODECTRL value for DP encoders
+
+This value interacts with some registers we don't currently know how to
+program properly ourselves. The default of 5 that we were using matches
+what the VBIOS on early DP cards do, but later ones use 6, which would
+cause nouveau to program an incorrect mode on these chips.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: punt hotplug irq handling out to workqueue
+
+On DP outputs we'll likely end up running vbios init tables here, which
+may sleep.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: partially revert ec99dbe438787d62ecde3a22f8ce3f880a4f4e14
+
+The commit mentioned above breaks the DP SOR_MODE_CTRL detection as once
+nv50_display_init() has been called all the MODE_CTRL registers are reset.
+
+This wasn't noticed when initially writing the DP SOR_MODE_CTRL patch
+as it was done on another machine, without ec99dbe..4e14 applied.
+
+This commit moves the nv50_display_init() call to back where it was,
+after the KMS setup, and adds the additional cleanup needed.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: another dodgy DP hack
+
+Allows *some* DP cards to keep working in some corner cases that most
+people shouldn't hit. I hit it all the time with development, so this
+can stay for now.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: Add NVA3 support in ctxprog/ctxvals generator.
+
+Signed-off-by: Marcin Kościelnicki <koriakin@0x04.net>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv40: Init some tiling-related PGRAPH state.
+
+Fixes garbled 3D on an nv46 card.
+
+Reported-by: Francesco Marella <francesco.marella@gmail.com>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: store raw gpio table entry in bios gpio structs
+
+And use our own version of the GPIO table for the INIT_GPIO opcode.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: parse/use some more de-magiced parts of gpio table entries
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: implement gpio set/get routines
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+Revert "drm/nouveau: report unknown connector state if lid closed"
+
+Included in upstream stable point-release.
+
+This reverts commit b30083bdb990bcc2829fce83d871a86059ff4fc1.
+
+drm/nouveau: fix a nouveau_bo dereference after it's been destroyed
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: bios parser fixes for eDP boards
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: dump pll limits entries when debugging is on
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: output calculated crtc pll when debugging on
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix suspend/resume with DP outputs
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: store full dcb i2c entry from vbios
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix monitor detection on certain chipsets
+
+There appears to be some kind of switch on certain chips to control whether
+the DP auxch or traditional i2c bus will be operational on a connector,
+this commit hopefully fixes nouveau to do the right thing.
+
+Likely only relevent on chips with DP outputs.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: send hotplug event to userspace
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: support fractional feedback divider on newer chips
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: don't execute INIT_GPIO unless we're really running the table
+
+This resulted in accidently switching off the eDP panel on certain laptops
+since the default state in the GPIO table was off.
+
+Fixes rh#582621
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix iommu errors caused by device reading from address 0
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: fix POST detection for certain chipsets
+
+We totally fail at detecting un-POSTed chipsets prior to G80. This commit
+changes the pre-G80 POST detection to read the programmed horizontal total
+from CRTC 0, and assume the card isn't POSTed if it's 0.
+
+NVIDIA use some other heuristics more similar to what we do on G80, but I
+wasted quite a long time trying to figure out the exact specifics of what
+they do so we can try this for a bit instead.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv40: allow cold-booting of nv4x chipsets
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: fix init table handlers to return proper error codes
+
+We really want to be able to distinguish between INIT_DONE and an actual
+error sometimes. This commit fixes up several lazy "return 0;" to be
+actual error codes, and explicitly reserves "0" as "success, but stop
+parsing this table".
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: display error message for any failed init table opcode
+
+Some handlers don't report specific errors, but we still *really* want to
+know if we failed to parse a complete init table.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: ensure we've parsed i2c table entry for INIT_*I2C* handlers
+
+We may not have parsed the entry yet if the i2c_index is for an i2c bus
+that's not referenced by a DCB encoder.
+
+This could be done oh so much more nicely, except we have to care about
+prehistoric DCB tables too, and they make life painful.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: support init table i2c device identifier 0x81
+
+It appears to be meant to reference the second "default index".
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: fix i2c-related init table handlers
+
+Mutliple issues. INIT_ZM_I2C_BYTE/INIT_I2C_BYTE didn't even try and
+use the register value, and all the handlers were using the wrong
+slave address.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: cast IGP memory location to u64 before shifting
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: match U/DP script against SOR link
+
+It appears version 0x21 'U' and 'd' tables require us to take the SOR link
+into account when selecting the appropriate table for a particular output.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix memory detection for cards with >=4GiB VRAM
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: completely fail init if we fail to map the PRAMIN BAR
+
+On cards where there's a specific BAR for PRAMIN, we used to try and fall
+back to the "legacy" aperture within the mmio BAR.
+
+This is doomed to cause problems, so lets just fail completely as there's
+obviously something else very wrong anyway.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Don't clear AGPCMD completely on INIT_RESET.
+
+We just need to clear the SBA and ENABLE bits to reset the AGP
+controller: If the AGP bridge was configured to use "fast writes",
+clearing the FW bit would break the subsequent MMIO writes and
+eventually end with a lockup.
+
+Note that all the BIOSes I've seen do the same as we did (it works for
+them because they don't use MMIO), OTOH the blob leaves FW untouched.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: Ignore broken legacy I2C entries.
+
+The nv05 card in the bug report [1] doesn't have usable I2C port
+register offsets (they're all filled with zeros). Ignore them and use
+the defaults.
+
+[1] http://bugs.launchpad.net/bugs/569505
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nv50: use alternate source of SOR_MODE_CTRL for DP hack
+
+Fixes module unload+reload on Dell M4500, where the "normal" registers
+get reset to 0.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix duallink_possible calculation for DCB 4.0 cards
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: obey dcb->duallink_possible
+
+It was once assumed that all G8x had dual-link TMDS everywhere, this isn't
+actually the case - especially considering passive DP->DVI converters and
+some HDMI connectors only support single-link.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: fix dual-link displays when plugged into single-link outputs
+
+When selecting the native mode for a display we weren't taking into account
+whether or not it was actually supported on that particular output.
+
+This patch modifies our native mode selection to run all modes through
+mode_valid() first.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: reduce usage of fence spinlock to when absolutely necessary
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: move LVDS detection back to connector detect() time
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nouveau: Put the dithering check back in nouveau_connector_create.
+
+a7b9f9e5adef dropped it by accident.
+
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+Tested-by: Thibaut Girka <thib@sitedethib.com>
+
+drm/nouveau: set encoder for lvds
+
+fixes oops in nouveau_connector_get_modes with nv_encoder is NULL
+
+Signed-off-by: Albert Damen <albrt@gmx.net>
+Signed-off-by: Francisco Jerez <currojerez@riseup.net>
+
+drm/nouveau: tidy connector/encoder creation a little
+
+Create connectors before encoders to avoid having to do another loop across
+encoder list whenever we create a new connector. This allows us to pass
+the connector to the encoder creation functions, and avoid using a
+create_resources() callback since we can now call it directly.
+
+This can also potentially modify the connector ordering on nv50. On cards
+where the DCB connector and encoder tables are in the same order, things
+will be unchanged. However, there's some cards where the ordering between
+the tables differ, and in one case, leads us to naming the connectors
+"wrongly".
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv50: fix regression caused by ed15e77b6ee7c4fa6f50c18b3325e7f96ed3aade
+
+It became possible for us to have connectors present without any encoders
+attached (TV out, we don't support TVDAC yet), which caused the DDX to
+segfault.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+drm/nv04: fix regression caused by ed15e77b6ee7c4fa6f50c18b3325e7f96ed3aade
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ drivers/gpu/drm/nouveau/Makefile | 7 +-
+ drivers/gpu/drm/nouveau/nouveau_bios.c | 1057 ++++++++-----
+ drivers/gpu/drm/nouveau/nouveau_bios.h | 133 +-
+ drivers/gpu/drm/nouveau/nouveau_bo.c | 68 +-
+ drivers/gpu/drm/nouveau/nouveau_calc.c | 4 +-
+ drivers/gpu/drm/nouveau/nouveau_channel.c | 17 +-
+ drivers/gpu/drm/nouveau/nouveau_connector.c | 383 +++---
+ drivers/gpu/drm/nouveau/nouveau_connector.h | 3 +-
+ drivers/gpu/drm/nouveau/nouveau_debugfs.c | 18 +-
+ drivers/gpu/drm/nouveau/nouveau_dma.c | 5 +
+ drivers/gpu/drm/nouveau/nouveau_dp.c | 8 +-
+ drivers/gpu/drm/nouveau/nouveau_drv.c | 14 +-
+ drivers/gpu/drm/nouveau/nouveau_drv.h | 70 +-
+ drivers/gpu/drm/nouveau/nouveau_encoder.h | 7 +-
+ drivers/gpu/drm/nouveau/nouveau_fence.c | 31 +-
+ drivers/gpu/drm/nouveau/nouveau_gem.c | 55 +-
+ drivers/gpu/drm/nouveau/nouveau_hw.c | 6 +-
+ drivers/gpu/drm/nouveau/nouveau_i2c.c | 23 +-
+ drivers/gpu/drm/nouveau/nouveau_irq.c | 615 +++++++-
+ drivers/gpu/drm/nouveau/nouveau_mem.c | 129 +-
+ drivers/gpu/drm/nouveau/nouveau_reg.h | 1 +
+ drivers/gpu/drm/nouveau/nouveau_sgdma.c | 18 +
+ drivers/gpu/drm/nouveau/nouveau_state.c | 39 +-
+ drivers/gpu/drm/nouveau/nv04_crtc.c | 6 +-
+ drivers/gpu/drm/nouveau/nv04_dac.c | 15 +-
+ drivers/gpu/drm/nouveau/nv04_dfp.c | 12 +-
+ drivers/gpu/drm/nouveau/nv04_display.c | 64 +-
+ drivers/gpu/drm/nouveau/nv04_fbcon.c | 6 +-
+ drivers/gpu/drm/nouveau/nv04_fifo.c | 5 +
+ drivers/gpu/drm/nouveau/nv04_graph.c | 3 +-
+ drivers/gpu/drm/nouveau/nv04_tv.c | 10 +-
+ drivers/gpu/drm/nouveau/nv17_tv.c | 12 +-
+ drivers/gpu/drm/nouveau/nv40_fifo.c | 7 +-
+ drivers/gpu/drm/nouveau/nv40_graph.c | 21 +
+ drivers/gpu/drm/nouveau/nv50_calc.c | 87 +
+ drivers/gpu/drm/nouveau/nv50_crtc.c | 46 +-
+ drivers/gpu/drm/nouveau/nv50_dac.c | 13 +-
+ drivers/gpu/drm/nouveau/nv50_display.c | 122 +-
+ drivers/gpu/drm/nouveau/nv50_display.h | 1 +
+ drivers/gpu/drm/nouveau/nv50_fb.c | 38 +
+ drivers/gpu/drm/nouveau/nv50_fbcon.c | 17 +-
+ drivers/gpu/drm/nouveau/nv50_fifo.c | 5 +
+ drivers/gpu/drm/nouveau/nv50_gpio.c | 76 +
+ drivers/gpu/drm/nouveau/nv50_graph.c | 103 +-
+ drivers/gpu/drm/nouveau/nv50_grctx.c | 2383 +++++++++++++++++++++++++++
+ drivers/gpu/drm/nouveau/nv50_instmem.c | 18 +-
+ drivers/gpu/drm/nouveau/nv50_sor.c | 42 +-
+ 47 files changed, 4702 insertions(+), 1121 deletions(-)
+ create mode 100644 drivers/gpu/drm/nouveau/nv50_calc.c
+ create mode 100644 drivers/gpu/drm/nouveau/nv50_fb.c
+ create mode 100644 drivers/gpu/drm/nouveau/nv50_gpio.c
+ create mode 100644 drivers/gpu/drm/nouveau/nv50_grctx.c
+
+diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
+index 48c290b..acd31ed 100644
+--- a/drivers/gpu/drm/nouveau/Makefile
++++ b/drivers/gpu/drm/nouveau/Makefile
+@@ -12,17 +12,18 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \
+ nouveau_dp.o nouveau_grctx.o \
+ nv04_timer.o \
+ nv04_mc.o nv40_mc.o nv50_mc.o \
+- nv04_fb.o nv10_fb.o nv40_fb.o \
++ nv04_fb.o nv10_fb.o nv40_fb.o nv50_fb.o \
+ nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
+ nv04_graph.o nv10_graph.o nv20_graph.o \
+ nv40_graph.o nv50_graph.o \
+- nv40_grctx.o \
++ nv40_grctx.o nv50_grctx.o \
+ nv04_instmem.o nv50_instmem.o \
+ nv50_crtc.o nv50_dac.o nv50_sor.o \
+ nv50_cursor.o nv50_display.o nv50_fbcon.o \
+ nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \
+ nv04_crtc.o nv04_display.o nv04_cursor.o nv04_fbcon.o \
+- nv17_gpio.o
++ nv17_gpio.o nv50_gpio.o \
++ nv50_calc.o
+
+ nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o
+ nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
+index 0e9cd1d..1803cc4 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
+@@ -26,6 +26,7 @@
+ #define NV_DEBUG_NOTRACE
+ #include "nouveau_drv.h"
+ #include "nouveau_hw.h"
++#include "nouveau_encoder.h"
+
+ /* these defines are made up */
+ #define NV_CIO_CRE_44_HEADA 0x0
+@@ -256,6 +257,11 @@ static bool NVShadowVBIOS(struct drm_device *dev, uint8_t *data)
+ struct init_tbl_entry {
+ char *name;
+ uint8_t id;
++ /* Return:
++ * > 0: success, length of opcode
++ * 0: success, but abort further parsing of table (INIT_DONE etc)
++ * < 0: failure, table parsing will be aborted
++ */
+ int (*handler)(struct nvbios *, uint16_t, struct init_exec *);
+ };
+
+@@ -311,11 +317,11 @@ valid_reg(struct nvbios *bios, uint32_t reg)
+
+ /* C51 has misaligned regs on purpose. Marvellous */
+ if (reg & 0x2 ||
+- (reg & 0x1 && dev_priv->VBIOS.pub.chip_version != 0x51))
++ (reg & 0x1 && dev_priv->vbios.chip_version != 0x51))
+ NV_ERROR(dev, "======= misaligned reg 0x%08X =======\n", reg);
+
+ /* warn on C51 regs that haven't been verified accessible in tracing */
+- if (reg & 0x1 && dev_priv->VBIOS.pub.chip_version == 0x51 &&
++ if (reg & 0x1 && dev_priv->vbios.chip_version == 0x51 &&
+ reg != 0x130d && reg != 0x1311 && reg != 0x60081d)
+ NV_WARN(dev, "=== C51 misaligned reg 0x%08X not verified ===\n",
+ reg);
+@@ -420,7 +426,7 @@ bios_wr32(struct nvbios *bios, uint32_t reg, uint32_t data)
+ LOG_OLD_VALUE(bios_rd32(bios, reg));
+ BIOSLOG(bios, " Write: Reg: 0x%08X, Data: 0x%08X\n", reg, data);
+
+- if (dev_priv->VBIOS.execute) {
++ if (dev_priv->vbios.execute) {
+ still_alive();
+ nv_wr32(bios->dev, reg, data);
+ }
+@@ -647,7 +653,7 @@ nv50_pll_set(struct drm_device *dev, uint32_t reg, uint32_t clk)
+ reg0 = (reg0 & 0xfff8ffff) | (pll.log2P << 16);
+ reg1 = (reg1 & 0xffff0000) | (pll.N1 << 8) | pll.M1;
+
+- if (dev_priv->VBIOS.execute) {
++ if (dev_priv->vbios.execute) {
+ still_alive();
+ nv_wr32(dev, reg + 4, reg1);
+ nv_wr32(dev, reg + 0, reg0);
+@@ -689,7 +695,7 @@ setPLL(struct nvbios *bios, uint32_t reg, uint32_t clk)
+ static int dcb_entry_idx_from_crtchead(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+
+ /*
+ * For the results of this function to be correct, CR44 must have been
+@@ -700,7 +706,7 @@ static int dcb_entry_idx_from_crtchead(struct drm_device *dev)
+
+ uint8_t dcb_entry = NVReadVgaCrtc5758(dev, bios->state.crtchead, 0);
+
+- if (dcb_entry > bios->bdcb.dcb.entries) {
++ if (dcb_entry > bios->dcb.entries) {
+ NV_ERROR(dev, "CR58 doesn't have a valid DCB entry currently "
+ "(%02X)\n", dcb_entry);
+ dcb_entry = 0x7f; /* unused / invalid marker */
+@@ -709,29 +715,121 @@ static int dcb_entry_idx_from_crtchead(struct drm_device *dev)
+ return dcb_entry;
+ }
+
++static int
++read_dcb_i2c_entry(struct drm_device *dev, int dcb_version, uint8_t *i2ctable, int index, struct dcb_i2c_entry *i2c)
++{
++ uint8_t dcb_i2c_ver = dcb_version, headerlen = 0, entry_len = 4;
++ int i2c_entries = DCB_MAX_NUM_I2C_ENTRIES;
++ int recordoffset = 0, rdofs = 1, wrofs = 0;
++ uint8_t port_type = 0;
++
++ if (!i2ctable)
++ return -EINVAL;
++
++ if (dcb_version >= 0x30) {
++ if (i2ctable[0] != dcb_version) /* necessary? */
++ NV_WARN(dev,
++ "DCB I2C table version mismatch (%02X vs %02X)\n",
++ i2ctable[0], dcb_version);
++ dcb_i2c_ver = i2ctable[0];
++ headerlen = i2ctable[1];
++ if (i2ctable[2] <= DCB_MAX_NUM_I2C_ENTRIES)
++ i2c_entries = i2ctable[2];
++ else
++ NV_WARN(dev,
++ "DCB I2C table has more entries than indexable "
++ "(%d entries, max %d)\n", i2ctable[2],
++ DCB_MAX_NUM_I2C_ENTRIES);
++ entry_len = i2ctable[3];
++ /* [4] is i2c_default_indices, read in parse_dcb_table() */
++ }
++ /*
++ * It's your own fault if you call this function on a DCB 1.1 BIOS --
++ * the test below is for DCB 1.2
++ */
++ if (dcb_version < 0x14) {
++ recordoffset = 2;
++ rdofs = 0;
++ wrofs = 1;
++ }
++
++ if (index == 0xf)
++ return 0;
++ if (index >= i2c_entries) {
++ NV_ERROR(dev, "DCB I2C index too big (%d >= %d)\n",
++ index, i2ctable[2]);
++ return -ENOENT;
++ }
++ if (i2ctable[headerlen + entry_len * index + 3] == 0xff) {
++ NV_ERROR(dev, "DCB I2C entry invalid\n");
++ return -EINVAL;
++ }
++
++ if (dcb_i2c_ver >= 0x30) {
++ port_type = i2ctable[headerlen + recordoffset + 3 + entry_len * index];
++
++ /*
++ * Fixup for chips using same address offset for read and
++ * write.
++ */
++ if (port_type == 4) /* seen on C51 */
++ rdofs = wrofs = 1;
++ if (port_type >= 5) /* G80+ */
++ rdofs = wrofs = 0;
++ }
++
++ if (dcb_i2c_ver >= 0x40) {
++ if (port_type != 5 && port_type != 6)
++ NV_WARN(dev, "DCB I2C table has port type %d\n", port_type);
++
++ i2c->entry = ROM32(i2ctable[headerlen + recordoffset + entry_len * index]);
++ }
++
++ i2c->port_type = port_type;
++ i2c->read = i2ctable[headerlen + recordoffset + rdofs + entry_len * index];
++ i2c->write = i2ctable[headerlen + recordoffset + wrofs + entry_len * index];
++
++ return 0;
++}
++
+ static struct nouveau_i2c_chan *
+ init_i2c_device_find(struct drm_device *dev, int i2c_index)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct bios_parsed_dcb *bdcb = &dev_priv->VBIOS.bdcb;
++ struct dcb_table *dcb = &dev_priv->vbios.dcb;
+
+ if (i2c_index == 0xff) {
+ /* note: dcb_entry_idx_from_crtchead needs pre-script set-up */
+ int idx = dcb_entry_idx_from_crtchead(dev), shift = 0;
+- int default_indices = bdcb->i2c_default_indices;
++ int default_indices = dcb->i2c_default_indices;
+
+- if (idx != 0x7f && bdcb->dcb.entry[idx].i2c_upper_default)
++ if (idx != 0x7f && dcb->entry[idx].i2c_upper_default)
+ shift = 4;
+
+ i2c_index = (default_indices >> shift) & 0xf;
+ }
+ if (i2c_index == 0x80) /* g80+ */
+- i2c_index = bdcb->i2c_default_indices & 0xf;
++ i2c_index = dcb->i2c_default_indices & 0xf;
++ else
++ if (i2c_index == 0x81)
++ i2c_index = (dcb->i2c_default_indices & 0xf0) >> 4;
++
++ if (i2c_index > DCB_MAX_NUM_I2C_ENTRIES) {
++ NV_ERROR(dev, "invalid i2c_index 0x%x\n", i2c_index);
++ return NULL;
++ }
++
++ /* Make sure i2c table entry has been parsed, it may not
++ * have been if this is a bus not referenced by a DCB encoder
++ */
++ read_dcb_i2c_entry(dev, dcb->version, dcb->i2c_table,
++ i2c_index, &dcb->i2c[i2c_index]);
+
+ return nouveau_i2c_find(dev, i2c_index);
+ }
+
+-static uint32_t get_tmds_index_reg(struct drm_device *dev, uint8_t mlv)
++static uint32_t
++get_tmds_index_reg(struct drm_device *dev, uint8_t mlv)
+ {
+ /*
+ * For mlv < 0x80, it is an index into a table of TMDS base addresses.
+@@ -744,6 +842,7 @@ static uint32_t get_tmds_index_reg(struct drm_device *dev, uint8_t mlv)
+ */
+
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ struct nvbios *bios = &dev_priv->vbios;
+ const int pramdac_offset[13] = {
+ 0, 0, 0x8, 0, 0x2000, 0, 0, 0, 0x2008, 0, 0, 0, 0x2000 };
+ const uint32_t pramdac_table[4] = {
+@@ -756,13 +855,12 @@ static uint32_t get_tmds_index_reg(struct drm_device *dev, uint8_t mlv)
+ dcb_entry = dcb_entry_idx_from_crtchead(dev);
+ if (dcb_entry == 0x7f)
+ return 0;
+- dacoffset = pramdac_offset[
+- dev_priv->VBIOS.bdcb.dcb.entry[dcb_entry].or];
++ dacoffset = pramdac_offset[bios->dcb.entry[dcb_entry].or];
+ if (mlv == 0x81)
+ dacoffset ^= 8;
+ return 0x6808b0 + dacoffset;
+ } else {
+- if (mlv > ARRAY_SIZE(pramdac_table)) {
++ if (mlv >= ARRAY_SIZE(pramdac_table)) {
+ NV_ERROR(dev, "Magic Lookup Value too big (%02X)\n",
+ mlv);
+ return 0;
+@@ -817,7 +915,7 @@ init_io_restrict_prog(struct nvbios *bios, uint16_t offset,
+ NV_ERROR(bios->dev,
+ "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n",
+ offset, config, count);
+- return 0;
++ return -EINVAL;
+ }
+
+ configval = ROM32(bios->data[offset + 11 + config * 4]);
+@@ -919,7 +1017,7 @@ init_io_restrict_pll(struct nvbios *bios, uint16_t offset,
+ NV_ERROR(bios->dev,
+ "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n",
+ offset, config, count);
+- return 0;
++ return -EINVAL;
+ }
+
+ freq = ROM16(bios->data[offset + 12 + config * 2]);
+@@ -1066,6 +1164,126 @@ init_io_flag_condition(struct nvbios *bios, uint16_t offset,
+ }
+
+ static int
++init_dp_condition(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
++{
++ /*
++ * INIT_DP_CONDITION opcode: 0x3A ('')
++ *
++ * offset (8 bit): opcode
++ * offset + 1 (8 bit): "sub" opcode
++ * offset + 2 (8 bit): unknown
++ *
++ */
++
++ struct bit_displayport_encoder_table *dpe = NULL;
++ struct dcb_entry *dcb = bios->display.output;
++ struct drm_device *dev = bios->dev;
++ uint8_t cond = bios->data[offset + 1];
++ int dummy;
++
++ BIOSLOG(bios, "0x%04X: subop 0x%02X\n", offset, cond);
++
++ if (!iexec->execute)
++ return 3;
++
++ dpe = nouveau_bios_dp_table(dev, dcb, &dummy);
++ if (!dpe) {
++ NV_ERROR(dev, "0x%04X: INIT_3A: no encoder table!!\n", offset);
++ return -EINVAL;
++ }
++
++ switch (cond) {
++ case 0:
++ {
++ struct dcb_connector_table_entry *ent =
++ &bios->dcb.connector.entry[dcb->connector];
++
++ if (ent->type != DCB_CONNECTOR_eDP)
++ iexec->execute = false;
++ }
++ break;
++ case 1:
++ case 2:
++ if (!(dpe->unknown & cond))
++ iexec->execute = false;
++ break;
++ case 5:
++ {
++ struct nouveau_i2c_chan *auxch;
++ int ret;
++
++ auxch = nouveau_i2c_find(dev, bios->display.output->i2c_index);
++ if (!auxch)
++ return -ENODEV;
++
++ ret = nouveau_dp_auxch(auxch, 9, 0xd, &cond, 1);
++ if (ret)
++ return ret;
++
++ if (cond & 1)
++ iexec->execute = false;
++ }
++ break;
++ default:
++ NV_WARN(dev, "0x%04X: unknown INIT_3A op: %d\n", offset, cond);
++ break;
++ }
++
++ if (iexec->execute)
++ BIOSLOG(bios, "0x%04X: continuing to execute\n", offset);
++ else
++ BIOSLOG(bios, "0x%04X: skipping following commands\n", offset);
++
++ return 3;
++}
++
++static int
++init_op_3b(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
++{
++ /*
++ * INIT_3B opcode: 0x3B ('')
++ *
++ * offset (8 bit): opcode
++ * offset + 1 (8 bit): crtc index
++ *
++ */
++
++ uint8_t or = ffs(bios->display.output->or) - 1;
++ uint8_t index = bios->data[offset + 1];
++ uint8_t data;
++
++ if (!iexec->execute)
++ return 2;
++
++ data = bios_idxprt_rd(bios, 0x3d4, index);
++ bios_idxprt_wr(bios, 0x3d4, index, data & ~(1 << or));
++ return 2;
++}
++
++static int
++init_op_3c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
++{
++ /*
++ * INIT_3C opcode: 0x3C ('')
++ *
++ * offset (8 bit): opcode
++ * offset + 1 (8 bit): crtc index
++ *
++ */
++
++ uint8_t or = ffs(bios->display.output->or) - 1;
++ uint8_t index = bios->data[offset + 1];
++ uint8_t data;
++
++ if (!iexec->execute)
++ return 2;
++
++ data = bios_idxprt_rd(bios, 0x3d4, index);
++ bios_idxprt_wr(bios, 0x3d4, index, data | (1 << or));
++ return 2;
++}
++
++static int
+ init_idx_addr_latched(struct nvbios *bios, uint16_t offset,
+ struct init_exec *iexec)
+ {
+@@ -1169,7 +1387,7 @@ init_io_restrict_pll2(struct nvbios *bios, uint16_t offset,
+ NV_ERROR(bios->dev,
+ "0x%04X: Config 0x%02X exceeds maximal bound 0x%02X\n",
+ offset, config, count);
+- return 0;
++ return -EINVAL;
+ }
+
+ freq = ROM32(bios->data[offset + 11 + config * 4]);
+@@ -1230,12 +1448,11 @@ init_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ */
+
+ uint8_t i2c_index = bios->data[offset + 1];
+- uint8_t i2c_address = bios->data[offset + 2];
++ uint8_t i2c_address = bios->data[offset + 2] >> 1;
+ uint8_t count = bios->data[offset + 3];
+- int len = 4 + count * 3;
+ struct nouveau_i2c_chan *chan;
+- struct i2c_msg msg;
+- int i;
++ int len = 4 + count * 3;
++ int ret, i;
+
+ if (!iexec->execute)
+ return len;
+@@ -1246,35 +1463,34 @@ init_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ chan = init_i2c_device_find(bios->dev, i2c_index);
+ if (!chan)
+- return 0;
++ return -ENODEV;
+
+ for (i = 0; i < count; i++) {
+- uint8_t i2c_reg = bios->data[offset + 4 + i * 3];
++ uint8_t reg = bios->data[offset + 4 + i * 3];
+ uint8_t mask = bios->data[offset + 5 + i * 3];
+ uint8_t data = bios->data[offset + 6 + i * 3];
+- uint8_t value;
++ union i2c_smbus_data val;
+
+- msg.addr = i2c_address;
+- msg.flags = I2C_M_RD;
+- msg.len = 1;
+- msg.buf = &value;
+- if (i2c_transfer(&chan->adapter, &msg, 1) != 1)
+- return 0;
++ ret = i2c_smbus_xfer(&chan->adapter, i2c_address, 0,
++ I2C_SMBUS_READ, reg,
++ I2C_SMBUS_BYTE_DATA, &val);
++ if (ret < 0)
++ return ret;
+
+ BIOSLOG(bios, "0x%04X: I2CReg: 0x%02X, Value: 0x%02X, "
+ "Mask: 0x%02X, Data: 0x%02X\n",
+- offset, i2c_reg, value, mask, data);
++ offset, reg, val.byte, mask, data);
+
+- value = (value & mask) | data;
++ if (!bios->execute)
++ continue;
+
+- if (bios->execute) {
+- msg.addr = i2c_address;
+- msg.flags = 0;
+- msg.len = 1;
+- msg.buf = &value;
+- if (i2c_transfer(&chan->adapter, &msg, 1) != 1)
+- return 0;
+- }
++ val.byte &= mask;
++ val.byte |= data;
++ ret = i2c_smbus_xfer(&chan->adapter, i2c_address, 0,
++ I2C_SMBUS_WRITE, reg,
++ I2C_SMBUS_BYTE_DATA, &val);
++ if (ret < 0)
++ return ret;
+ }
+
+ return len;
+@@ -1300,12 +1516,11 @@ init_zm_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ */
+
+ uint8_t i2c_index = bios->data[offset + 1];
+- uint8_t i2c_address = bios->data[offset + 2];
++ uint8_t i2c_address = bios->data[offset + 2] >> 1;
+ uint8_t count = bios->data[offset + 3];
+- int len = 4 + count * 2;
+ struct nouveau_i2c_chan *chan;
+- struct i2c_msg msg;
+- int i;
++ int len = 4 + count * 2;
++ int ret, i;
+
+ if (!iexec->execute)
+ return len;
+@@ -1316,23 +1531,25 @@ init_zm_i2c_byte(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ chan = init_i2c_device_find(bios->dev, i2c_index);
+ if (!chan)
+- return 0;
++ return -ENODEV;
+
+ for (i = 0; i < count; i++) {
+- uint8_t i2c_reg = bios->data[offset + 4 + i * 2];
+- uint8_t data = bios->data[offset + 5 + i * 2];
++ uint8_t reg = bios->data[offset + 4 + i * 2];
++ union i2c_smbus_data val;
++
++ val.byte = bios->data[offset + 5 + i * 2];
+
+ BIOSLOG(bios, "0x%04X: I2CReg: 0x%02X, Data: 0x%02X\n",
+- offset, i2c_reg, data);
+-
+- if (bios->execute) {
+- msg.addr = i2c_address;
+- msg.flags = 0;
+- msg.len = 1;
+- msg.buf = &data;
+- if (i2c_transfer(&chan->adapter, &msg, 1) != 1)
+- return 0;
+- }
++ offset, reg, val.byte);
++
++ if (!bios->execute)
++ continue;
++
++ ret = i2c_smbus_xfer(&chan->adapter, i2c_address, 0,
++ I2C_SMBUS_WRITE, reg,
++ I2C_SMBUS_BYTE_DATA, &val);
++ if (ret < 0)
++ return ret;
+ }
+
+ return len;
+@@ -1356,7 +1573,7 @@ init_zm_i2c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ */
+
+ uint8_t i2c_index = bios->data[offset + 1];
+- uint8_t i2c_address = bios->data[offset + 2];
++ uint8_t i2c_address = bios->data[offset + 2] >> 1;
+ uint8_t count = bios->data[offset + 3];
+ int len = 4 + count;
+ struct nouveau_i2c_chan *chan;
+@@ -1373,7 +1590,7 @@ init_zm_i2c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ chan = init_i2c_device_find(bios->dev, i2c_index);
+ if (!chan)
+- return 0;
++ return -ENODEV;
+
+ for (i = 0; i < count; i++) {
+ data[i] = bios->data[offset + 4 + i];
+@@ -1387,7 +1604,7 @@ init_zm_i2c(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ msg.len = count;
+ msg.buf = data;
+ if (i2c_transfer(&chan->adapter, &msg, 1) != 1)
+- return 0;
++ return -EIO;
+ }
+
+ return len;
+@@ -1426,7 +1643,7 @@ init_tmds(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ reg = get_tmds_index_reg(bios->dev, mlv);
+ if (!reg)
+- return 0;
++ return -EINVAL;
+
+ bios_wr32(bios, reg,
+ tmdsaddr | NV_PRAMDAC_FP_TMDS_CONTROL_WRITE_DISABLE);
+@@ -1470,7 +1687,7 @@ init_zm_tmds_group(struct nvbios *bios, uint16_t offset,
+
+ reg = get_tmds_index_reg(bios->dev, mlv);
+ if (!reg)
+- return 0;
++ return -EINVAL;
+
+ for (i = 0; i < count; i++) {
+ uint8_t tmdsaddr = bios->data[offset + 3 + i * 2];
+@@ -1909,7 +2126,8 @@ init_reset(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ /* no iexec->execute check by design */
+
+ pci_nv_19 = bios_rd32(bios, NV_PBUS_PCI_NV_19);
+- bios_wr32(bios, NV_PBUS_PCI_NV_19, 0);
++ bios_wr32(bios, NV_PBUS_PCI_NV_19, pci_nv_19 & ~0xf00);
++
+ bios_wr32(bios, reg, value1);
+
+ udelay(10);
+@@ -1945,7 +2163,7 @@ init_configure_mem(struct nvbios *bios, uint16_t offset,
+ uint32_t reg, data;
+
+ if (bios->major_version > 2)
+- return 0;
++ return -ENODEV;
+
+ bios_idxprt_wr(bios, NV_VIO_SRX, NV_VIO_SR_CLOCK_INDEX, bios_idxprt_rd(
+ bios, NV_VIO_SRX, NV_VIO_SR_CLOCK_INDEX) | 0x20);
+@@ -2000,7 +2218,7 @@ init_configure_clk(struct nvbios *bios, uint16_t offset,
+ int clock;
+
+ if (bios->major_version > 2)
+- return 0;
++ return -ENODEV;
+
+ clock = ROM16(bios->data[meminitoffs + 4]) * 10;
+ setPLL(bios, NV_PRAMDAC_NVPLL_COEFF, clock);
+@@ -2033,7 +2251,7 @@ init_configure_preinit(struct nvbios *bios, uint16_t offset,
+ uint8_t cr3c = ((straps << 2) & 0xf0) | (straps & (1 << 6));
+
+ if (bios->major_version > 2)
+- return 0;
++ return -ENODEV;
+
+ bios_idxprt_wr(bios, NV_CIO_CRX__COLOR,
+ NV_CIO_CRE_SCRATCH4__INDEX, cr3c);
+@@ -2572,48 +2790,37 @@ init_gpio(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ * each GPIO according to various values listed in each entry
+ */
+
+- const uint32_t nv50_gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 };
++ struct drm_nouveau_private *dev_priv = bios->dev->dev_private;
+ const uint32_t nv50_gpio_ctl[2] = { 0xe100, 0xe28c };
+- const uint8_t *gpio_table = &bios->data[bios->bdcb.gpio_table_ptr];
+- const uint8_t *gpio_entry;
+ int i;
+
+- if (!iexec->execute)
+- return 1;
+-
+- if (bios->bdcb.version != 0x40) {
+- NV_ERROR(bios->dev, "DCB table not version 4.0\n");
+- return 0;
+- }
+-
+- if (!bios->bdcb.gpio_table_ptr) {
+- NV_WARN(bios->dev, "Invalid pointer to INIT_8E table\n");
+- return 0;
++ if (dev_priv->card_type != NV_50) {
++ NV_ERROR(bios->dev, "INIT_GPIO on unsupported chipset\n");
++ return -ENODEV;
+ }
+
+- gpio_entry = gpio_table + gpio_table[1];
+- for (i = 0; i < gpio_table[2]; i++, gpio_entry += gpio_table[3]) {
+- uint32_t entry = ROM32(gpio_entry[0]), r, s, v;
+- int line = (entry & 0x0000001f);
++ if (!iexec->execute)
++ return 1;
+
+- BIOSLOG(bios, "0x%04X: Entry: 0x%08X\n", offset, entry);
++ for (i = 0; i < bios->dcb.gpio.entries; i++) {
++ struct dcb_gpio_entry *gpio = &bios->dcb.gpio.entry[i];
++ uint32_t r, s, v;
+
+- if ((entry & 0x0000ff00) == 0x0000ff00)
+- continue;
++ BIOSLOG(bios, "0x%04X: Entry: 0x%08X\n", offset, gpio->entry);
+
+- r = nv50_gpio_reg[line >> 3];
+- s = (line & 0x07) << 2;
+- v = bios_rd32(bios, r) & ~(0x00000003 << s);
+- if (entry & 0x01000000)
+- v |= (((entry & 0x60000000) >> 29) ^ 2) << s;
+- else
+- v |= (((entry & 0x18000000) >> 27) ^ 2) << s;
+- bios_wr32(bios, r, v);
++ BIOSLOG(bios, "0x%04X: set gpio 0x%02x, state %d\n",
++ offset, gpio->tag, gpio->state_default);
++ if (bios->execute)
++ nv50_gpio_set(bios->dev, gpio->tag, gpio->state_default);
+
+- r = nv50_gpio_ctl[line >> 4];
+- s = (line & 0x0f);
++ /* The NVIDIA binary driver doesn't appear to actually do
++ * any of this, my VBIOS does however.
++ */
++ /* Not a clue, needs de-magicing */
++ r = nv50_gpio_ctl[gpio->line >> 4];
++ s = (gpio->line & 0x0f);
+ v = bios_rd32(bios, r) & ~(0x00010001 << s);
+- switch ((entry & 0x06000000) >> 25) {
++ switch ((gpio->entry & 0x06000000) >> 25) {
+ case 1:
+ v |= (0x00000001 << s);
+ break;
+@@ -2669,7 +2876,7 @@ init_ram_restrict_zm_reg_group(struct nvbios *bios, uint16_t offset,
+ NV_ERROR(bios->dev,
+ "0x%04X: Zero block length - has the M table "
+ "been parsed?\n", offset);
+- return 0;
++ return -EINVAL;
+ }
+
+ strap_ramcfg = (bios_rd32(bios, NV_PEXTDEV_BOOT_0) >> 2) & 0xf;
+@@ -2853,14 +3060,14 @@ init_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ if (!bios->display.output) {
+ NV_ERROR(dev, "INIT_AUXCH: no active output\n");
+- return 0;
++ return -EINVAL;
+ }
+
+ auxch = init_i2c_device_find(dev, bios->display.output->i2c_index);
+ if (!auxch) {
+ NV_ERROR(dev, "INIT_AUXCH: couldn't get auxch %d\n",
+ bios->display.output->i2c_index);
+- return 0;
++ return -ENODEV;
+ }
+
+ if (!iexec->execute)
+@@ -2873,7 +3080,7 @@ init_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ ret = nouveau_dp_auxch(auxch, 9, addr, &data, 1);
+ if (ret) {
+ NV_ERROR(dev, "INIT_AUXCH: rd auxch fail %d\n", ret);
+- return 0;
++ return ret;
+ }
+
+ data &= bios->data[offset + 0];
+@@ -2882,7 +3089,7 @@ init_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ ret = nouveau_dp_auxch(auxch, 8, addr, &data, 1);
+ if (ret) {
+ NV_ERROR(dev, "INIT_AUXCH: wr auxch fail %d\n", ret);
+- return 0;
++ return ret;
+ }
+ }
+
+@@ -2912,14 +3119,14 @@ init_zm_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+
+ if (!bios->display.output) {
+ NV_ERROR(dev, "INIT_ZM_AUXCH: no active output\n");
+- return 0;
++ return -EINVAL;
+ }
+
+ auxch = init_i2c_device_find(dev, bios->display.output->i2c_index);
+ if (!auxch) {
+ NV_ERROR(dev, "INIT_ZM_AUXCH: couldn't get auxch %d\n",
+ bios->display.output->i2c_index);
+- return 0;
++ return -ENODEV;
+ }
+
+ if (!iexec->execute)
+@@ -2930,7 +3137,7 @@ init_zm_auxch(struct nvbios *bios, uint16_t offset, struct init_exec *iexec)
+ ret = nouveau_dp_auxch(auxch, 8, addr, &bios->data[offset], 1);
+ if (ret) {
+ NV_ERROR(dev, "INIT_ZM_AUXCH: wr auxch fail %d\n", ret);
+- return 0;
++ return ret;
+ }
+ }
+
+@@ -2947,6 +3154,9 @@ static struct init_tbl_entry itbl_entry[] = {
+ { "INIT_COPY" , 0x37, init_copy },
+ { "INIT_NOT" , 0x38, init_not },
+ { "INIT_IO_FLAG_CONDITION" , 0x39, init_io_flag_condition },
++ { "INIT_DP_CONDITION" , 0x3A, init_dp_condition },
++ { "INIT_OP_3B" , 0x3B, init_op_3b },
++ { "INIT_OP_3C" , 0x3C, init_op_3c },
+ { "INIT_INDEX_ADDRESS_LATCHED" , 0x49, init_idx_addr_latched },
+ { "INIT_IO_RESTRICT_PLL2" , 0x4A, init_io_restrict_pll2 },
+ { "INIT_PLL2" , 0x4B, init_pll2 },
+@@ -3014,7 +3224,7 @@ parse_init_table(struct nvbios *bios, unsigned int offset,
+ * is changed back to EXECUTE.
+ */
+
+- int count = 0, i, res;
++ int count = 0, i, ret;
+ uint8_t id;
+
+ /*
+@@ -3029,26 +3239,33 @@ parse_init_table(struct nvbios *bios, unsigned int offset,
+ for (i = 0; itbl_entry[i].name && (itbl_entry[i].id != id); i++)
+ ;
+
+- if (itbl_entry[i].name) {
+- BIOSLOG(bios, "0x%04X: [ (0x%02X) - %s ]\n",
+- offset, itbl_entry[i].id, itbl_entry[i].name);
+-
+- /* execute eventual command handler */
+- res = (*itbl_entry[i].handler)(bios, offset, iexec);
+- if (!res)
+- break;
+- /*
+- * Add the offset of the current command including all data
+- * of that command. The offset will then be pointing on the
+- * next op code.
+- */
+- offset += res;
+- } else {
++ if (!itbl_entry[i].name) {
+ NV_ERROR(bios->dev,
+ "0x%04X: Init table command not found: "
+ "0x%02X\n", offset, id);
+ return -ENOENT;
+ }
++
++ BIOSLOG(bios, "0x%04X: [ (0x%02X) - %s ]\n", offset,
++ itbl_entry[i].id, itbl_entry[i].name);
++
++ /* execute eventual command handler */
++ ret = (*itbl_entry[i].handler)(bios, offset, iexec);
++ if (ret < 0) {
++ NV_ERROR(bios->dev, "0x%04X: Failed parsing init "
++ "table opcode: %s %d\n", offset,
++ itbl_entry[i].name, ret);
++ }
++
++ if (ret <= 0)
++ break;
++
++ /*
++ * Add the offset of the current command including all data
++ * of that command. The offset will then be pointing on the
++ * next op code.
++ */
++ offset += ret;
+ }
+
+ if (offset >= bios->length)
+@@ -3123,7 +3340,7 @@ run_digital_op_script(struct drm_device *dev, uint16_t scriptptr,
+ struct dcb_entry *dcbent, int head, bool dl)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ struct init_exec iexec = {true, false};
+
+ NV_TRACE(dev, "0x%04X: Parsing digital output script table\n",
+@@ -3140,7 +3357,7 @@ run_digital_op_script(struct drm_device *dev, uint16_t scriptptr,
+ static int call_lvds_manufacturer_script(struct drm_device *dev, struct dcb_entry *dcbent, int head, enum LVDS_script script)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint8_t sub = bios->data[bios->fp.xlated_entry + script] + (bios->fp.link_c_increment && dcbent->or & OUTPUT_C ? 1 : 0);
+ uint16_t scriptofs = ROM16(bios->data[bios->init_script_tbls_ptr + sub * 2]);
+
+@@ -3194,10 +3411,9 @@ static int run_lvds_table(struct drm_device *dev, struct dcb_entry *dcbent, int
+ * of a list of pxclks and script pointers.
+ */
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ unsigned int outputset = (dcbent->or == 4) ? 1 : 0;
+ uint16_t scriptptr = 0, clktable;
+- uint8_t clktableptr = 0;
+
+ /*
+ * For now we assume version 3.0 table - g80 support will need some
+@@ -3216,26 +3432,29 @@ static int run_lvds_table(struct drm_device *dev, struct dcb_entry *dcbent, int
+ scriptptr = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 11 + outputset * 2]);
+ break;
+ case LVDS_RESET:
++ clktable = bios->fp.lvdsmanufacturerpointer + 15;
++ if (dcbent->or == 4)
++ clktable += 8;
++
+ if (dcbent->lvdsconf.use_straps_for_mode) {
+ if (bios->fp.dual_link)
+- clktableptr += 2;
+- if (bios->fp.BITbit1)
+- clktableptr++;
++ clktable += 4;
++ if (bios->fp.if_is_24bit)
++ clktable += 2;
+ } else {
+ /* using EDID */
+- uint8_t fallback = bios->data[bios->fp.lvdsmanufacturerpointer + 4];
+- int fallbackcmpval = (dcbent->or == 4) ? 4 : 1;
++ int cmpval_24bit = (dcbent->or == 4) ? 4 : 1;
+
+ if (bios->fp.dual_link) {
+- clktableptr += 2;
+- fallbackcmpval *= 2;
++ clktable += 4;
++ cmpval_24bit <<= 1;
+ }
+- if (fallbackcmpval & fallback)
+- clktableptr++;
++
++ if (bios->fp.strapless_is_24bit & cmpval_24bit)
++ clktable += 2;
+ }
+
+- /* adding outputset * 8 may not be correct */
+- clktable = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 15 + clktableptr * 2 + outputset * 8]);
++ clktable = ROM16(bios->data[clktable]);
+ if (!clktable) {
+ NV_ERROR(dev, "Pixel clock comparison table not found\n");
+ return -ENOENT;
+@@ -3261,7 +3480,7 @@ int call_lvds_script(struct drm_device *dev, struct dcb_entry *dcbent, int head,
+ */
+
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint8_t lvds_ver = bios->data[bios->fp.lvdsmanufacturerpointer];
+ uint32_t sel_clk_binding, sel_clk;
+ int ret;
+@@ -3395,7 +3614,7 @@ static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios)
+ #ifndef __powerpc__
+ NV_ERROR(dev, "Pointer to flat panel table invalid\n");
+ #endif
+- bios->pub.digital_min_front_porch = 0x4b;
++ bios->digital_min_front_porch = 0x4b;
+ return 0;
+ }
+
+@@ -3428,7 +3647,7 @@ static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios)
+ * fptable[4] is the minimum
+ * RAMDAC_FP_HCRTC -> RAMDAC_FP_HSYNC_START gap
+ */
+- bios->pub.digital_min_front_porch = fptable[4];
++ bios->digital_min_front_porch = fptable[4];
+ ofs = -7;
+ break;
+ default:
+@@ -3467,7 +3686,7 @@ static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios)
+
+ /* nv4x cards need both a strap value and fpindex of 0xf to use DDC */
+ if (lth.lvds_ver > 0x10)
+- bios->pub.fp_no_ddc = fpstrapping != 0xf || fpindex != 0xf;
++ bios->fp_no_ddc = fpstrapping != 0xf || fpindex != 0xf;
+
+ /*
+ * If either the strap or xlated fpindex value are 0xf there is no
+@@ -3491,7 +3710,7 @@ static int parse_fp_mode_table(struct drm_device *dev, struct nvbios *bios)
+ bool nouveau_bios_fp_mode(struct drm_device *dev, struct drm_display_mode *mode)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint8_t *mode_entry = &bios->data[bios->fp.mode_ptr];
+
+ if (!mode) /* just checking whether we can produce a mode */
+@@ -3562,11 +3781,11 @@ int nouveau_bios_parse_lvds_table(struct drm_device *dev, int pxclk, bool *dl, b
+ * until later, when this function should be called with non-zero pxclk
+ */
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ int fpstrapping = get_fp_strap(dev, bios), lvdsmanufacturerindex = 0;
+ struct lvdstableheader lth;
+ uint16_t lvdsofs;
+- int ret, chip_version = bios->pub.chip_version;
++ int ret, chip_version = bios->chip_version;
+
+ ret = parse_lvds_manufacturer_table_header(dev, bios, &lth);
+ if (ret)
+@@ -3637,37 +3856,40 @@ int nouveau_bios_parse_lvds_table(struct drm_device *dev, int pxclk, bool *dl, b
+ *if_is_24bit = bios->data[lvdsofs] & 16;
+ break;
+ case 0x30:
+- /*
+- * My money would be on there being a 24 bit interface bit in
+- * this table, but I have no example of a laptop bios with a
+- * 24 bit panel to confirm that. Hence we shout loudly if any
+- * bit other than bit 0 is set (I've not even seen bit 1)
+- */
+- if (bios->data[lvdsofs] > 1)
+- NV_ERROR(dev,
+- "You have a very unusual laptop display; please report it\n");
++ case 0x40:
+ /*
+ * No sign of the "power off for reset" or "reset for panel
+ * on" bits, but it's safer to assume we should
+ */
+ bios->fp.power_off_for_reset = true;
+ bios->fp.reset_after_pclk_change = true;
++
+ /*
+ * It's ok lvdsofs is wrong for nv4x edid case; dual_link is
+- * over-written, and BITbit1 isn't used
++ * over-written, and if_is_24bit isn't used
+ */
+ bios->fp.dual_link = bios->data[lvdsofs] & 1;
+- bios->fp.BITbit1 = bios->data[lvdsofs] & 2;
+- bios->fp.duallink_transition_clk = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 5]) * 10;
+- break;
+- case 0x40:
+- bios->fp.dual_link = bios->data[lvdsofs] & 1;
+ bios->fp.if_is_24bit = bios->data[lvdsofs] & 2;
+ bios->fp.strapless_is_24bit = bios->data[bios->fp.lvdsmanufacturerpointer + 4];
+ bios->fp.duallink_transition_clk = ROM16(bios->data[bios->fp.lvdsmanufacturerpointer + 5]) * 10;
+ break;
+ }
+
++ /* Dell Latitude D620 reports a too-high value for the dual-link
++ * transition freq, causing us to program the panel incorrectly.
++ *
++ * It doesn't appear the VBIOS actually uses its transition freq
++ * (90000kHz), instead it uses the "Number of LVDS channels" field
++ * out of the panel ID structure (http://www.spwg.org/).
++ *
++ * For the moment, a quirk will do :)
++ */
++ if ((dev->pdev->device == 0x01d7) &&
++ (dev->pdev->subsystem_vendor == 0x1028) &&
++ (dev->pdev->subsystem_device == 0x01c2)) {
++ bios->fp.duallink_transition_clk = 80000;
++ }
++
+ /* set dual_link flag for EDID case */
+ if (pxclk && (chip_version < 0x25 || chip_version > 0x28))
+ bios->fp.dual_link = (pxclk >= bios->fp.duallink_transition_clk);
+@@ -3679,20 +3901,37 @@ int nouveau_bios_parse_lvds_table(struct drm_device *dev, int pxclk, bool *dl, b
+
+ static uint8_t *
+ bios_output_config_match(struct drm_device *dev, struct dcb_entry *dcbent,
+- uint16_t record, int record_len, int record_nr)
++ uint16_t record, int record_len, int record_nr,
++ bool match_link)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint32_t entry;
+ uint16_t table;
+ int i, v;
+
++ switch (dcbent->type) {
++ case OUTPUT_TMDS:
++ case OUTPUT_LVDS:
++ case OUTPUT_DP:
++ break;
++ default:
++ match_link = false;
++ break;
++ }
++
+ for (i = 0; i < record_nr; i++, record += record_len) {
+ table = ROM16(bios->data[record]);
+ if (!table)
+ continue;
+ entry = ROM32(bios->data[table]);
+
++ if (match_link) {
++ v = (entry & 0x00c00000) >> 22;
++ if (!(v & dcbent->sorconf.link))
++ continue;
++ }
++
+ v = (entry & 0x000f0000) >> 16;
+ if (!(v & dcbent->or))
+ continue;
+@@ -3716,7 +3955,7 @@ nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent,
+ int *length)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint8_t *table;
+
+ if (!bios->display.dp_table_ptr) {
+@@ -3725,7 +3964,7 @@ nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent,
+ }
+ table = &bios->data[bios->display.dp_table_ptr];
+
+- if (table[0] != 0x21) {
++ if (table[0] != 0x20 && table[0] != 0x21) {
+ NV_ERROR(dev, "DisplayPort table version 0x%02x unknown\n",
+ table[0]);
+ return NULL;
+@@ -3734,7 +3973,7 @@ nouveau_bios_dp_table(struct drm_device *dev, struct dcb_entry *dcbent,
+ *length = table[4];
+ return bios_output_config_match(dev, dcbent,
+ bios->display.dp_table_ptr + table[1],
+- table[2], table[3]);
++ table[2], table[3], table[0] >= 0x21);
+ }
+
+ int
+@@ -3765,7 +4004,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
+ */
+
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint8_t *table = &bios->data[bios->display.script_table_ptr];
+ uint8_t *otable = NULL;
+ uint16_t script;
+@@ -3823,7 +4062,7 @@ nouveau_bios_run_display_table(struct drm_device *dev, struct dcb_entry *dcbent,
+ dcbent->type, dcbent->location, dcbent->or);
+ otable = bios_output_config_match(dev, dcbent, table[1] +
+ bios->display.script_table_ptr,
+- table[2], table[3]);
++ table[2], table[3], table[0] >= 0x21);
+ if (!otable) {
+ NV_ERROR(dev, "Couldn't find matching output script table\n");
+ return 1;
+@@ -3918,8 +4157,8 @@ int run_tmds_table(struct drm_device *dev, struct dcb_entry *dcbent, int head, i
+ */
+
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
+- int cv = bios->pub.chip_version;
++ struct nvbios *bios = &dev_priv->vbios;
++ int cv = bios->chip_version;
+ uint16_t clktable = 0, scriptptr;
+ uint32_t sel_clk_binding, sel_clk;
+
+@@ -3978,8 +4217,8 @@ int get_pll_limits(struct drm_device *dev, uint32_t limit_match, struct pll_lims
+ */
+
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
+- int cv = bios->pub.chip_version, pllindex = 0;
++ struct nvbios *bios = &dev_priv->vbios;
++ int cv = bios->chip_version, pllindex = 0;
+ uint8_t pll_lim_ver = 0, headerlen = 0, recordlen = 0, entries = 0;
+ uint32_t crystal_strap_mask, crystal_straps;
+
+@@ -4293,31 +4532,32 @@ int get_pll_limits(struct drm_device *dev, uint32_t limit_match, struct pll_lims
+ break;
+ }
+
+-#if 0 /* for easy debugging */
+- ErrorF("pll.vco1.minfreq: %d\n", pll_lim->vco1.minfreq);
+- ErrorF("pll.vco1.maxfreq: %d\n", pll_lim->vco1.maxfreq);
+- ErrorF("pll.vco2.minfreq: %d\n", pll_lim->vco2.minfreq);
+- ErrorF("pll.vco2.maxfreq: %d\n", pll_lim->vco2.maxfreq);
+-
+- ErrorF("pll.vco1.min_inputfreq: %d\n", pll_lim->vco1.min_inputfreq);
+- ErrorF("pll.vco1.max_inputfreq: %d\n", pll_lim->vco1.max_inputfreq);
+- ErrorF("pll.vco2.min_inputfreq: %d\n", pll_lim->vco2.min_inputfreq);
+- ErrorF("pll.vco2.max_inputfreq: %d\n", pll_lim->vco2.max_inputfreq);
+-
+- ErrorF("pll.vco1.min_n: %d\n", pll_lim->vco1.min_n);
+- ErrorF("pll.vco1.max_n: %d\n", pll_lim->vco1.max_n);
+- ErrorF("pll.vco1.min_m: %d\n", pll_lim->vco1.min_m);
+- ErrorF("pll.vco1.max_m: %d\n", pll_lim->vco1.max_m);
+- ErrorF("pll.vco2.min_n: %d\n", pll_lim->vco2.min_n);
+- ErrorF("pll.vco2.max_n: %d\n", pll_lim->vco2.max_n);
+- ErrorF("pll.vco2.min_m: %d\n", pll_lim->vco2.min_m);
+- ErrorF("pll.vco2.max_m: %d\n", pll_lim->vco2.max_m);
+-
+- ErrorF("pll.max_log2p: %d\n", pll_lim->max_log2p);
+- ErrorF("pll.log2p_bias: %d\n", pll_lim->log2p_bias);
+-
+- ErrorF("pll.refclk: %d\n", pll_lim->refclk);
+-#endif
++ NV_DEBUG(dev, "pll.vco1.minfreq: %d\n", pll_lim->vco1.minfreq);
++ NV_DEBUG(dev, "pll.vco1.maxfreq: %d\n", pll_lim->vco1.maxfreq);
++ NV_DEBUG(dev, "pll.vco1.min_inputfreq: %d\n", pll_lim->vco1.min_inputfreq);
++ NV_DEBUG(dev, "pll.vco1.max_inputfreq: %d\n", pll_lim->vco1.max_inputfreq);
++ NV_DEBUG(dev, "pll.vco1.min_n: %d\n", pll_lim->vco1.min_n);
++ NV_DEBUG(dev, "pll.vco1.max_n: %d\n", pll_lim->vco1.max_n);
++ NV_DEBUG(dev, "pll.vco1.min_m: %d\n", pll_lim->vco1.min_m);
++ NV_DEBUG(dev, "pll.vco1.max_m: %d\n", pll_lim->vco1.max_m);
++ if (pll_lim->vco2.maxfreq) {
++ NV_DEBUG(dev, "pll.vco2.minfreq: %d\n", pll_lim->vco2.minfreq);
++ NV_DEBUG(dev, "pll.vco2.maxfreq: %d\n", pll_lim->vco2.maxfreq);
++ NV_DEBUG(dev, "pll.vco2.min_inputfreq: %d\n", pll_lim->vco2.min_inputfreq);
++ NV_DEBUG(dev, "pll.vco2.max_inputfreq: %d\n", pll_lim->vco2.max_inputfreq);
++ NV_DEBUG(dev, "pll.vco2.min_n: %d\n", pll_lim->vco2.min_n);
++ NV_DEBUG(dev, "pll.vco2.max_n: %d\n", pll_lim->vco2.max_n);
++ NV_DEBUG(dev, "pll.vco2.min_m: %d\n", pll_lim->vco2.min_m);
++ NV_DEBUG(dev, "pll.vco2.max_m: %d\n", pll_lim->vco2.max_m);
++ }
++ if (!pll_lim->max_p) {
++ NV_DEBUG(dev, "pll.max_log2p: %d\n", pll_lim->max_log2p);
++ NV_DEBUG(dev, "pll.log2p_bias: %d\n", pll_lim->log2p_bias);
++ } else {
++ NV_DEBUG(dev, "pll.min_p: %d\n", pll_lim->min_p);
++ NV_DEBUG(dev, "pll.max_p: %d\n", pll_lim->max_p);
++ }
++ NV_DEBUG(dev, "pll.refclk: %d\n", pll_lim->refclk);
+
+ return 0;
+ }
+@@ -4332,7 +4572,7 @@ static void parse_bios_version(struct drm_device *dev, struct nvbios *bios, uint
+ */
+
+ bios->major_version = bios->data[offset + 3];
+- bios->pub.chip_version = bios->data[offset + 2];
++ bios->chip_version = bios->data[offset + 2];
+ NV_TRACE(dev, "Bios version %02x.%02x.%02x.%02x\n",
+ bios->data[offset + 3], bios->data[offset + 2],
+ bios->data[offset + 1], bios->data[offset]);
+@@ -4402,7 +4642,7 @@ static int parse_bit_A_tbl_entry(struct drm_device *dev, struct nvbios *bios, st
+ }
+
+ /* First entry is normal dac, 2nd tv-out perhaps? */
+- bios->pub.dactestval = ROM32(bios->data[load_table_ptr + headerlen]) & 0x3ff;
++ bios->dactestval = ROM32(bios->data[load_table_ptr + headerlen]) & 0x3ff;
+
+ return 0;
+ }
+@@ -4526,8 +4766,8 @@ static int parse_bit_i_tbl_entry(struct drm_device *dev, struct nvbios *bios, st
+ return -ENOSYS;
+ }
+
+- bios->pub.dactestval = ROM32(bios->data[daccmpoffset + dacheaderlen]);
+- bios->pub.tvdactestval = ROM32(bios->data[daccmpoffset + dacheaderlen + 4]);
++ bios->dactestval = ROM32(bios->data[daccmpoffset + dacheaderlen]);
++ bios->tvdactestval = ROM32(bios->data[daccmpoffset + dacheaderlen + 4]);
+
+ return 0;
+ }
+@@ -4796,11 +5036,11 @@ static int parse_bmp_structure(struct drm_device *dev, struct nvbios *bios, unsi
+ uint16_t legacy_scripts_offset, legacy_i2c_offset;
+
+ /* load needed defaults in case we can't parse this info */
+- bios->bdcb.dcb.i2c[0].write = NV_CIO_CRE_DDC_WR__INDEX;
+- bios->bdcb.dcb.i2c[0].read = NV_CIO_CRE_DDC_STATUS__INDEX;
+- bios->bdcb.dcb.i2c[1].write = NV_CIO_CRE_DDC0_WR__INDEX;
+- bios->bdcb.dcb.i2c[1].read = NV_CIO_CRE_DDC0_STATUS__INDEX;
+- bios->pub.digital_min_front_porch = 0x4b;
++ bios->dcb.i2c[0].write = NV_CIO_CRE_DDC_WR__INDEX;
++ bios->dcb.i2c[0].read = NV_CIO_CRE_DDC_STATUS__INDEX;
++ bios->dcb.i2c[1].write = NV_CIO_CRE_DDC0_WR__INDEX;
++ bios->dcb.i2c[1].read = NV_CIO_CRE_DDC0_STATUS__INDEX;
++ bios->digital_min_front_porch = 0x4b;
+ bios->fmaxvco = 256000;
+ bios->fminvco = 128000;
+ bios->fp.duallink_transition_clk = 90000;
+@@ -4907,10 +5147,14 @@ static int parse_bmp_structure(struct drm_device *dev, struct nvbios *bios, unsi
+ bios->legacy.i2c_indices.crt = bios->data[legacy_i2c_offset];
+ bios->legacy.i2c_indices.tv = bios->data[legacy_i2c_offset + 1];
+ bios->legacy.i2c_indices.panel = bios->data[legacy_i2c_offset + 2];
+- bios->bdcb.dcb.i2c[0].write = bios->data[legacy_i2c_offset + 4];
+- bios->bdcb.dcb.i2c[0].read = bios->data[legacy_i2c_offset + 5];
+- bios->bdcb.dcb.i2c[1].write = bios->data[legacy_i2c_offset + 6];
+- bios->bdcb.dcb.i2c[1].read = bios->data[legacy_i2c_offset + 7];
++ if (bios->data[legacy_i2c_offset + 4])
++ bios->dcb.i2c[0].write = bios->data[legacy_i2c_offset + 4];
++ if (bios->data[legacy_i2c_offset + 5])
++ bios->dcb.i2c[0].read = bios->data[legacy_i2c_offset + 5];
++ if (bios->data[legacy_i2c_offset + 6])
++ bios->dcb.i2c[1].write = bios->data[legacy_i2c_offset + 6];
++ if (bios->data[legacy_i2c_offset + 7])
++ bios->dcb.i2c[1].read = bios->data[legacy_i2c_offset + 7];
+
+ if (bmplength > 74) {
+ bios->fmaxvco = ROM32(bmp[67]);
+@@ -4961,82 +5205,10 @@ static uint16_t findstr(uint8_t *data, int n, const uint8_t *str, int len)
+ return 0;
+ }
+
+-static int
+-read_dcb_i2c_entry(struct drm_device *dev, int dcb_version, uint8_t *i2ctable, int index, struct dcb_i2c_entry *i2c)
+-{
+- uint8_t dcb_i2c_ver = dcb_version, headerlen = 0, entry_len = 4;
+- int i2c_entries = DCB_MAX_NUM_I2C_ENTRIES;
+- int recordoffset = 0, rdofs = 1, wrofs = 0;
+- uint8_t port_type = 0;
+-
+- if (!i2ctable)
+- return -EINVAL;
+-
+- if (dcb_version >= 0x30) {
+- if (i2ctable[0] != dcb_version) /* necessary? */
+- NV_WARN(dev,
+- "DCB I2C table version mismatch (%02X vs %02X)\n",
+- i2ctable[0], dcb_version);
+- dcb_i2c_ver = i2ctable[0];
+- headerlen = i2ctable[1];
+- if (i2ctable[2] <= DCB_MAX_NUM_I2C_ENTRIES)
+- i2c_entries = i2ctable[2];
+- else
+- NV_WARN(dev,
+- "DCB I2C table has more entries than indexable "
+- "(%d entries, max index 15)\n", i2ctable[2]);
+- entry_len = i2ctable[3];
+- /* [4] is i2c_default_indices, read in parse_dcb_table() */
+- }
+- /*
+- * It's your own fault if you call this function on a DCB 1.1 BIOS --
+- * the test below is for DCB 1.2
+- */
+- if (dcb_version < 0x14) {
+- recordoffset = 2;
+- rdofs = 0;
+- wrofs = 1;
+- }
+-
+- if (index == 0xf)
+- return 0;
+- if (index > i2c_entries) {
+- NV_ERROR(dev, "DCB I2C index too big (%d > %d)\n",
+- index, i2ctable[2]);
+- return -ENOENT;
+- }
+- if (i2ctable[headerlen + entry_len * index + 3] == 0xff) {
+- NV_ERROR(dev, "DCB I2C entry invalid\n");
+- return -EINVAL;
+- }
+-
+- if (dcb_i2c_ver >= 0x30) {
+- port_type = i2ctable[headerlen + recordoffset + 3 + entry_len * index];
+-
+- /*
+- * Fixup for chips using same address offset for read and
+- * write.
+- */
+- if (port_type == 4) /* seen on C51 */
+- rdofs = wrofs = 1;
+- if (port_type >= 5) /* G80+ */
+- rdofs = wrofs = 0;
+- }
+-
+- if (dcb_i2c_ver >= 0x40 && port_type != 5 && port_type != 6)
+- NV_WARN(dev, "DCB I2C table has port type %d\n", port_type);
+-
+- i2c->port_type = port_type;
+- i2c->read = i2ctable[headerlen + recordoffset + rdofs + entry_len * index];
+- i2c->write = i2ctable[headerlen + recordoffset + wrofs + entry_len * index];
+-
+- return 0;
+-}
+-
+ static struct dcb_gpio_entry *
+ new_gpio_entry(struct nvbios *bios)
+ {
+- struct parsed_dcb_gpio *gpio = &bios->bdcb.gpio;
++ struct dcb_gpio_table *gpio = &bios->dcb.gpio;
+
+ return &gpio->entry[gpio->entries++];
+ }
+@@ -5045,14 +5217,14 @@ struct dcb_gpio_entry *
+ nouveau_bios_gpio_entry(struct drm_device *dev, enum dcb_gpio_tag tag)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ int i;
+
+- for (i = 0; i < bios->bdcb.gpio.entries; i++) {
+- if (bios->bdcb.gpio.entry[i].tag != tag)
++ for (i = 0; i < bios->dcb.gpio.entries; i++) {
++ if (bios->dcb.gpio.entry[i].tag != tag)
+ continue;
+
+- return &bios->bdcb.gpio.entry[i];
++ return &bios->dcb.gpio.entry[i];
+ }
+
+ return NULL;
+@@ -5075,32 +5247,32 @@ parse_dcb30_gpio_entry(struct nvbios *bios, uint16_t offset)
+ gpio->tag = tag;
+ gpio->line = line;
+ gpio->invert = flags != 4;
++ gpio->entry = ent;
+ }
+
+ static void
+ parse_dcb40_gpio_entry(struct nvbios *bios, uint16_t offset)
+ {
++ uint32_t entry = ROM32(bios->data[offset]);
+ struct dcb_gpio_entry *gpio;
+- uint32_t ent = ROM32(bios->data[offset]);
+- uint8_t line = ent & 0x1f,
+- tag = ent >> 8 & 0xff;
+
+- if (tag == 0xff)
++ if ((entry & 0x0000ff00) == 0x0000ff00)
+ return;
+
+ gpio = new_gpio_entry(bios);
+-
+- /* Currently unused, we may need more fields parsed at some
+- * point. */
+- gpio->tag = tag;
+- gpio->line = line;
++ gpio->tag = (entry & 0x0000ff00) >> 8;
++ gpio->line = (entry & 0x0000001f) >> 0;
++ gpio->state_default = (entry & 0x01000000) >> 24;
++ gpio->state[0] = (entry & 0x18000000) >> 27;
++ gpio->state[1] = (entry & 0x60000000) >> 29;
++ gpio->entry = entry;
+ }
+
+ static void
+ parse_dcb_gpio_table(struct nvbios *bios)
+ {
+ struct drm_device *dev = bios->dev;
+- uint16_t gpio_table_ptr = bios->bdcb.gpio_table_ptr;
++ uint16_t gpio_table_ptr = bios->dcb.gpio_table_ptr;
+ uint8_t *gpio_table = &bios->data[gpio_table_ptr];
+ int header_len = gpio_table[1],
+ entries = gpio_table[2],
+@@ -5108,7 +5280,7 @@ parse_dcb_gpio_table(struct nvbios *bios)
+ void (*parse_entry)(struct nvbios *, uint16_t) = NULL;
+ int i;
+
+- if (bios->bdcb.version >= 0x40) {
++ if (bios->dcb.version >= 0x40) {
+ if (gpio_table_ptr && entry_len != 4) {
+ NV_WARN(dev, "Invalid DCB GPIO table entry length.\n");
+ return;
+@@ -5116,7 +5288,7 @@ parse_dcb_gpio_table(struct nvbios *bios)
+
+ parse_entry = parse_dcb40_gpio_entry;
+
+- } else if (bios->bdcb.version >= 0x30) {
++ } else if (bios->dcb.version >= 0x30) {
+ if (gpio_table_ptr && entry_len != 2) {
+ NV_WARN(dev, "Invalid DCB GPIO table entry length.\n");
+ return;
+@@ -5124,7 +5296,7 @@ parse_dcb_gpio_table(struct nvbios *bios)
+
+ parse_entry = parse_dcb30_gpio_entry;
+
+- } else if (bios->bdcb.version >= 0x22) {
++ } else if (bios->dcb.version >= 0x22) {
+ /*
+ * DCBs older than v3.0 don't really have a GPIO
+ * table, instead they keep some GPIO info at fixed
+@@ -5158,30 +5330,82 @@ struct dcb_connector_table_entry *
+ nouveau_bios_connector_entry(struct drm_device *dev, int index)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ struct dcb_connector_table_entry *cte;
+
+- if (index >= bios->bdcb.connector.entries)
++ if (index >= bios->dcb.connector.entries)
+ return NULL;
+
+- cte = &bios->bdcb.connector.entry[index];
++ cte = &bios->dcb.connector.entry[index];
+ if (cte->type == 0xff)
+ return NULL;
+
+ return cte;
+ }
+
++static enum dcb_connector_type
++divine_connector_type(struct nvbios *bios, int index)
++{
++ struct dcb_table *dcb = &bios->dcb;
++ unsigned encoders = 0, type = DCB_CONNECTOR_NONE;
++ int i;
++
++ for (i = 0; i < dcb->entries; i++) {
++ if (dcb->entry[i].connector == index)
++ encoders |= (1 << dcb->entry[i].type);
++ }
++
++ if (encoders & (1 << OUTPUT_DP)) {
++ if (encoders & (1 << OUTPUT_TMDS))
++ type = DCB_CONNECTOR_DP;
++ else
++ type = DCB_CONNECTOR_eDP;
++ } else
++ if (encoders & (1 << OUTPUT_TMDS)) {
++ if (encoders & (1 << OUTPUT_ANALOG))
++ type = DCB_CONNECTOR_DVI_I;
++ else
++ type = DCB_CONNECTOR_DVI_D;
++ } else
++ if (encoders & (1 << OUTPUT_ANALOG)) {
++ type = DCB_CONNECTOR_VGA;
++ } else
++ if (encoders & (1 << OUTPUT_LVDS)) {
++ type = DCB_CONNECTOR_LVDS;
++ } else
++ if (encoders & (1 << OUTPUT_TV)) {
++ type = DCB_CONNECTOR_TV_0;
++ }
++
++ return type;
++}
++
++static void
++apply_dcb_connector_quirks(struct nvbios *bios, int idx)
++{
++ struct dcb_connector_table_entry *cte = &bios->dcb.connector.entry[idx];
++ struct drm_device *dev = bios->dev;
++
++ /* Gigabyte NX85T */
++ if ((dev->pdev->device == 0x0421) &&
++ (dev->pdev->subsystem_vendor == 0x1458) &&
++ (dev->pdev->subsystem_device == 0x344c)) {
++ if (cte->type == DCB_CONNECTOR_HDMI_1)
++ cte->type = DCB_CONNECTOR_DVI_I;
++ }
++}
++
+ static void
+ parse_dcb_connector_table(struct nvbios *bios)
+ {
+ struct drm_device *dev = bios->dev;
+- struct dcb_connector_table *ct = &bios->bdcb.connector;
++ struct dcb_connector_table *ct = &bios->dcb.connector;
+ struct dcb_connector_table_entry *cte;
+- uint8_t *conntab = &bios->data[bios->bdcb.connector_table_ptr];
++ uint8_t *conntab = &bios->data[bios->dcb.connector_table_ptr];
+ uint8_t *entry;
+ int i;
+
+- if (!bios->bdcb.connector_table_ptr) {
++ if (!bios->dcb.connector_table_ptr) {
+ NV_DEBUG_KMS(dev, "No DCB connector table present\n");
+ return;
+ }
+@@ -5199,12 +5423,14 @@ parse_dcb_connector_table(struct nvbios *bios)
+ entry = conntab + conntab[1];
+ cte = &ct->entry[0];
+ for (i = 0; i < conntab[2]; i++, entry += conntab[3], cte++) {
++ cte->index = i;
+ if (conntab[3] == 2)
+ cte->entry = ROM16(entry[0]);
+ else
+ cte->entry = ROM32(entry[0]);
++
+ cte->type = (cte->entry & 0x000000ff) >> 0;
+- cte->index = (cte->entry & 0x00000f00) >> 8;
++ cte->index2 = (cte->entry & 0x00000f00) >> 8;
+ switch (cte->entry & 0x00033000) {
+ case 0x00001000:
+ cte->gpio_tag = 0x07;
+@@ -5226,12 +5452,43 @@ parse_dcb_connector_table(struct nvbios *bios)
+ if (cte->type == 0xff)
+ continue;
+
++ apply_dcb_connector_quirks(bios, i);
++
+ NV_INFO(dev, " %d: 0x%08x: type 0x%02x idx %d tag 0x%02x\n",
+ i, cte->entry, cte->type, cte->index, cte->gpio_tag);
++
++ /* check for known types, fallback to guessing the type
++ * from attached encoders if we hit an unknown.
++ */
++ switch (cte->type) {
++ case DCB_CONNECTOR_VGA:
++ case DCB_CONNECTOR_TV_0:
++ case DCB_CONNECTOR_TV_1:
++ case DCB_CONNECTOR_TV_3:
++ case DCB_CONNECTOR_DVI_I:
++ case DCB_CONNECTOR_DVI_D:
++ case DCB_CONNECTOR_LVDS:
++ case DCB_CONNECTOR_DP:
++ case DCB_CONNECTOR_eDP:
++ case DCB_CONNECTOR_HDMI_0:
++ case DCB_CONNECTOR_HDMI_1:
++ break;
++ default:
++ cte->type = divine_connector_type(bios, cte->index);
++ NV_WARN(dev, "unknown type, using 0x%02x\n", cte->type);
++ break;
++ }
++
++ if (nouveau_override_conntype) {
++ int type = divine_connector_type(bios, cte->index);
++ if (type != cte->type)
++ NV_WARN(dev, " -> type 0x%02x\n", cte->type);
++ }
++
+ }
+ }
+
+-static struct dcb_entry *new_dcb_entry(struct parsed_dcb *dcb)
++static struct dcb_entry *new_dcb_entry(struct dcb_table *dcb)
+ {
+ struct dcb_entry *entry = &dcb->entry[dcb->entries];
+
+@@ -5241,7 +5498,7 @@ static struct dcb_entry *new_dcb_entry(struct parsed_dcb *dcb)
+ return entry;
+ }
+
+-static void fabricate_vga_output(struct parsed_dcb *dcb, int i2c, int heads)
++static void fabricate_vga_output(struct dcb_table *dcb, int i2c, int heads)
+ {
+ struct dcb_entry *entry = new_dcb_entry(dcb);
+
+@@ -5252,7 +5509,7 @@ static void fabricate_vga_output(struct parsed_dcb *dcb, int i2c, int heads)
+ /* "or" mostly unused in early gen crt modesetting, 0 is fine */
+ }
+
+-static void fabricate_dvi_i_output(struct parsed_dcb *dcb, bool twoHeads)
++static void fabricate_dvi_i_output(struct dcb_table *dcb, bool twoHeads)
+ {
+ struct dcb_entry *entry = new_dcb_entry(dcb);
+
+@@ -5279,7 +5536,7 @@ static void fabricate_dvi_i_output(struct parsed_dcb *dcb, bool twoHeads)
+ #endif
+ }
+
+-static void fabricate_tv_output(struct parsed_dcb *dcb, bool twoHeads)
++static void fabricate_tv_output(struct dcb_table *dcb, bool twoHeads)
+ {
+ struct dcb_entry *entry = new_dcb_entry(dcb);
+
+@@ -5290,23 +5547,17 @@ static void fabricate_tv_output(struct parsed_dcb *dcb, bool twoHeads)
+ }
+
+ static bool
+-parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
++parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb,
+ uint32_t conn, uint32_t conf, struct dcb_entry *entry)
+ {
+ entry->type = conn & 0xf;
+ entry->i2c_index = (conn >> 4) & 0xf;
+ entry->heads = (conn >> 8) & 0xf;
+- if (bdcb->version >= 0x40)
++ if (dcb->version >= 0x40)
+ entry->connector = (conn >> 12) & 0xf;
+ entry->bus = (conn >> 16) & 0xf;
+ entry->location = (conn >> 20) & 0x3;
+ entry->or = (conn >> 24) & 0xf;
+- /*
+- * Normal entries consist of a single bit, but dual link has the
+- * next most significant bit set too
+- */
+- entry->duallink_possible =
+- ((1 << (ffs(entry->or) - 1)) * 3 == entry->or);
+
+ switch (entry->type) {
+ case OUTPUT_ANALOG:
+@@ -5314,7 +5565,7 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ * Although the rest of a CRT conf dword is usually
+ * zeros, mac biosen have stuff there so we must mask
+ */
+- entry->crtconf.maxfreq = (bdcb->version < 0x30) ?
++ entry->crtconf.maxfreq = (dcb->version < 0x30) ?
+ (conf & 0xffff) * 10 :
+ (conf & 0xff) * 10000;
+ break;
+@@ -5323,7 +5574,7 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ uint32_t mask;
+ if (conf & 0x1)
+ entry->lvdsconf.use_straps_for_mode = true;
+- if (bdcb->version < 0x22) {
++ if (dcb->version < 0x22) {
+ mask = ~0xd;
+ /*
+ * The laptop in bug 14567 lies and claims to not use
+@@ -5347,7 +5598,7 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ * Until we even try to use these on G8x, it's
+ * useless reporting unknown bits. They all are.
+ */
+- if (bdcb->version >= 0x40)
++ if (dcb->version >= 0x40)
+ break;
+
+ NV_ERROR(dev, "Unknown LVDS configuration bits, "
+@@ -5357,7 +5608,7 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ }
+ case OUTPUT_TV:
+ {
+- if (bdcb->version >= 0x30)
++ if (dcb->version >= 0x30)
+ entry->tvconf.has_component_output = conf & (0x8 << 4);
+ else
+ entry->tvconf.has_component_output = false;
+@@ -5384,8 +5635,20 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ break;
+ case 0xe:
+ /* weird g80 mobile type that "nv" treats as a terminator */
+- bdcb->dcb.entries--;
++ dcb->entries--;
+ return false;
++ default:
++ break;
++ }
++
++ if (dcb->version < 0x40) {
++ /* Normal entries consist of a single bit, but dual link has
++ * the next most significant bit set too
++ */
++ entry->duallink_possible =
++ ((1 << (ffs(entry->or) - 1)) * 3 == entry->or);
++ } else {
++ entry->duallink_possible = (entry->sorconf.link == 3);
+ }
+
+ /* unsure what DCB version introduces this, 3.0? */
+@@ -5396,7 +5659,7 @@ parse_dcb20_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
+ }
+
+ static bool
+-parse_dcb15_entry(struct drm_device *dev, struct parsed_dcb *dcb,
++parse_dcb15_entry(struct drm_device *dev, struct dcb_table *dcb,
+ uint32_t conn, uint32_t conf, struct dcb_entry *entry)
+ {
+ switch (conn & 0x0000000f) {
+@@ -5462,27 +5725,27 @@ parse_dcb15_entry(struct drm_device *dev, struct parsed_dcb *dcb,
+ return true;
+ }
+
+-static bool parse_dcb_entry(struct drm_device *dev, struct bios_parsed_dcb *bdcb,
++static bool parse_dcb_entry(struct drm_device *dev, struct dcb_table *dcb,
+ uint32_t conn, uint32_t conf)
+ {
+- struct dcb_entry *entry = new_dcb_entry(&bdcb->dcb);
++ struct dcb_entry *entry = new_dcb_entry(dcb);
+ bool ret;
+
+- if (bdcb->version >= 0x20)
+- ret = parse_dcb20_entry(dev, bdcb, conn, conf, entry);
++ if (dcb->version >= 0x20)
++ ret = parse_dcb20_entry(dev, dcb, conn, conf, entry);
+ else
+- ret = parse_dcb15_entry(dev, &bdcb->dcb, conn, conf, entry);
++ ret = parse_dcb15_entry(dev, dcb, conn, conf, entry);
+ if (!ret)
+ return ret;
+
+- read_dcb_i2c_entry(dev, bdcb->version, bdcb->i2c_table,
+- entry->i2c_index, &bdcb->dcb.i2c[entry->i2c_index]);
++ read_dcb_i2c_entry(dev, dcb->version, dcb->i2c_table,
++ entry->i2c_index, &dcb->i2c[entry->i2c_index]);
+
+ return true;
+ }
+
+ static
+-void merge_like_dcb_entries(struct drm_device *dev, struct parsed_dcb *dcb)
++void merge_like_dcb_entries(struct drm_device *dev, struct dcb_table *dcb)
+ {
+ /*
+ * DCB v2.0 lists each output combination separately.
+@@ -5534,8 +5797,7 @@ static int
+ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct bios_parsed_dcb *bdcb = &bios->bdcb;
+- struct parsed_dcb *dcb;
++ struct dcb_table *dcb = &bios->dcb;
+ uint16_t dcbptr = 0, i2ctabptr = 0;
+ uint8_t *dcbtable;
+ uint8_t headerlen = 0x4, entries = DCB_MAX_NUM_ENTRIES;
+@@ -5543,9 +5805,6 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ int recordlength = 8, confofs = 4;
+ int i;
+
+- dcb = bios->pub.dcb = &bdcb->dcb;
+- dcb->entries = 0;
+-
+ /* get the offset from 0x36 */
+ if (dev_priv->card_type > NV_04) {
+ dcbptr = ROM16(bios->data[0x36]);
+@@ -5567,21 +5826,21 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ dcbtable = &bios->data[dcbptr];
+
+ /* get DCB version */
+- bdcb->version = dcbtable[0];
++ dcb->version = dcbtable[0];
+ NV_TRACE(dev, "Found Display Configuration Block version %d.%d\n",
+- bdcb->version >> 4, bdcb->version & 0xf);
++ dcb->version >> 4, dcb->version & 0xf);
+
+- if (bdcb->version >= 0x20) { /* NV17+ */
++ if (dcb->version >= 0x20) { /* NV17+ */
+ uint32_t sig;
+
+- if (bdcb->version >= 0x30) { /* NV40+ */
++ if (dcb->version >= 0x30) { /* NV40+ */
+ headerlen = dcbtable[1];
+ entries = dcbtable[2];
+ recordlength = dcbtable[3];
+ i2ctabptr = ROM16(dcbtable[4]);
+ sig = ROM32(dcbtable[6]);
+- bdcb->gpio_table_ptr = ROM16(dcbtable[10]);
+- bdcb->connector_table_ptr = ROM16(dcbtable[20]);
++ dcb->gpio_table_ptr = ROM16(dcbtable[10]);
++ dcb->connector_table_ptr = ROM16(dcbtable[20]);
+ } else {
+ i2ctabptr = ROM16(dcbtable[2]);
+ sig = ROM32(dcbtable[4]);
+@@ -5593,7 +5852,7 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ "signature (%08X)\n", sig);
+ return -EINVAL;
+ }
+- } else if (bdcb->version >= 0x15) { /* some NV11 and NV20 */
++ } else if (dcb->version >= 0x15) { /* some NV11 and NV20 */
+ char sig[8] = { 0 };
+
+ strncpy(sig, (char *)&dcbtable[-7], 7);
+@@ -5641,14 +5900,11 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ if (!i2ctabptr)
+ NV_WARN(dev, "No pointer to DCB I2C port table\n");
+ else {
+- bdcb->i2c_table = &bios->data[i2ctabptr];
+- if (bdcb->version >= 0x30)
+- bdcb->i2c_default_indices = bdcb->i2c_table[4];
++ dcb->i2c_table = &bios->data[i2ctabptr];
++ if (dcb->version >= 0x30)
++ dcb->i2c_default_indices = dcb->i2c_table[4];
+ }
+
+- parse_dcb_gpio_table(bios);
+- parse_dcb_connector_table(bios);
+-
+ if (entries > DCB_MAX_NUM_ENTRIES)
+ entries = DCB_MAX_NUM_ENTRIES;
+
+@@ -5673,7 +5929,7 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ NV_TRACEWARN(dev, "Raw DCB entry %d: %08x %08x\n",
+ dcb->entries, connection, config);
+
+- if (!parse_dcb_entry(dev, bdcb, connection, config))
++ if (!parse_dcb_entry(dev, dcb, connection, config))
+ break;
+ }
+
+@@ -5681,18 +5937,22 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
+ * apart for v2.1+ not being known for requiring merging, this
+ * guarantees dcbent->index is the index of the entry in the rom image
+ */
+- if (bdcb->version < 0x21)
++ if (dcb->version < 0x21)
+ merge_like_dcb_entries(dev, dcb);
+
+- return dcb->entries ? 0 : -ENXIO;
++ if (!dcb->entries)
++ return -ENXIO;
++
++ parse_dcb_gpio_table(bios);
++ parse_dcb_connector_table(bios);
++ return 0;
+ }
+
+ static void
+ fixup_legacy_connector(struct nvbios *bios)
+ {
+- struct bios_parsed_dcb *bdcb = &bios->bdcb;
+- struct parsed_dcb *dcb = &bdcb->dcb;
+- int high = 0, i;
++ struct dcb_table *dcb = &bios->dcb;
++ int i, i2c, i2c_conn[DCB_MAX_NUM_I2C_ENTRIES] = { };
+
+ /*
+ * DCB 3.0 also has the table in most cases, but there are some cards
+@@ -5700,9 +5960,11 @@ fixup_legacy_connector(struct nvbios *bios)
+ * indices are all 0. We don't need the connector indices on pre-G80
+ * chips (yet?) so limit the use to DCB 4.0 and above.
+ */
+- if (bdcb->version >= 0x40)
++ if (dcb->version >= 0x40)
+ return;
+
++ dcb->connector.entries = 0;
++
+ /*
+ * No known connector info before v3.0, so make it up. the rule here
+ * is: anything on the same i2c bus is considered to be on the same
+@@ -5710,37 +5972,38 @@ fixup_legacy_connector(struct nvbios *bios)
+ * its own unique connector index.
+ */
+ for (i = 0; i < dcb->entries; i++) {
+- if (dcb->entry[i].i2c_index == 0xf)
+- continue;
+-
+ /*
+ * Ignore the I2C index for on-chip TV-out, as there
+ * are cards with bogus values (nv31m in bug 23212),
+ * and it's otherwise useless.
+ */
+ if (dcb->entry[i].type == OUTPUT_TV &&
+- dcb->entry[i].location == DCB_LOC_ON_CHIP) {
++ dcb->entry[i].location == DCB_LOC_ON_CHIP)
+ dcb->entry[i].i2c_index = 0xf;
++ i2c = dcb->entry[i].i2c_index;
++
++ if (i2c_conn[i2c]) {
++ dcb->entry[i].connector = i2c_conn[i2c] - 1;
+ continue;
+ }
+
+- dcb->entry[i].connector = dcb->entry[i].i2c_index;
+- if (dcb->entry[i].connector > high)
+- high = dcb->entry[i].connector;
++ dcb->entry[i].connector = dcb->connector.entries++;
++ if (i2c != 0xf)
++ i2c_conn[i2c] = dcb->connector.entries;
+ }
+
+- for (i = 0; i < dcb->entries; i++) {
+- if (dcb->entry[i].i2c_index != 0xf)
+- continue;
+-
+- dcb->entry[i].connector = ++high;
++ /* Fake the connector table as well as just connector indices */
++ for (i = 0; i < dcb->connector.entries; i++) {
++ dcb->connector.entry[i].index = i;
++ dcb->connector.entry[i].type = divine_connector_type(bios, i);
++ dcb->connector.entry[i].gpio_tag = 0xff;
+ }
+ }
+
+ static void
+ fixup_legacy_i2c(struct nvbios *bios)
+ {
+- struct parsed_dcb *dcb = &bios->bdcb.dcb;
++ struct dcb_table *dcb = &bios->dcb;
+ int i;
+
+ for (i = 0; i < dcb->entries; i++) {
+@@ -5826,7 +6089,7 @@ static int load_nv17_hw_sequencer_ucode(struct drm_device *dev,
+ uint8_t *nouveau_bios_embedded_edid(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ const uint8_t edid_sig[] = {
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
+ uint16_t offset = 0;
+@@ -5859,7 +6122,7 @@ nouveau_bios_run_init_table(struct drm_device *dev, uint16_t table,
+ struct dcb_entry *dcbent)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ struct init_exec iexec = { true, false };
+
+ mutex_lock(&bios->lock);
+@@ -5872,7 +6135,7 @@ nouveau_bios_run_init_table(struct drm_device *dev, uint16_t table,
+ static bool NVInitVBIOS(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+
+ memset(bios, 0, sizeof(struct nvbios));
+ mutex_init(&bios->lock);
+@@ -5888,7 +6151,7 @@ static bool NVInitVBIOS(struct drm_device *dev)
+ static int nouveau_parse_vbios_struct(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ const uint8_t bit_signature[] = { 0xff, 0xb8, 'B', 'I', 'T' };
+ const uint8_t bmp_signature[] = { 0xff, 0x7f, 'N', 'V', 0x0 };
+ int offset;
+@@ -5915,7 +6178,7 @@ int
+ nouveau_run_vbios_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ int i, ret = 0;
+
+ NVLockVgaCrtcs(dev, false);
+@@ -5946,9 +6209,9 @@ nouveau_run_vbios_init(struct drm_device *dev)
+ }
+
+ if (dev_priv->card_type >= NV_50) {
+- for (i = 0; i < bios->bdcb.dcb.entries; i++) {
++ for (i = 0; i < bios->dcb.entries; i++) {
+ nouveau_bios_run_display_table(dev,
+- &bios->bdcb.dcb.entry[i],
++ &bios->dcb.entry[i],
+ 0, 0);
+ }
+ }
+@@ -5962,26 +6225,48 @@ static void
+ nouveau_bios_i2c_devices_takedown(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ struct dcb_i2c_entry *entry;
+ int i;
+
+- entry = &bios->bdcb.dcb.i2c[0];
++ entry = &bios->dcb.i2c[0];
+ for (i = 0; i < DCB_MAX_NUM_I2C_ENTRIES; i++, entry++)
+ nouveau_i2c_fini(dev, entry);
+ }
+
++static bool
++nouveau_bios_posted(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ bool was_locked;
++ unsigned htotal;
++
++ if (dev_priv->chipset >= NV_50) {
++ if (NVReadVgaCrtc(dev, 0, 0x00) == 0 &&
++ NVReadVgaCrtc(dev, 0, 0x1a) == 0)
++ return false;
++ return true;
++ }
++
++ was_locked = NVLockVgaCrtcs(dev, false);
++ htotal = NVReadVgaCrtc(dev, 0, 0x06);
++ htotal |= (NVReadVgaCrtc(dev, 0, 0x07) & 0x01) << 8;
++ htotal |= (NVReadVgaCrtc(dev, 0, 0x07) & 0x20) << 4;
++ htotal |= (NVReadVgaCrtc(dev, 0, 0x25) & 0x01) << 10;
++ htotal |= (NVReadVgaCrtc(dev, 0, 0x41) & 0x01) << 11;
++ NVLockVgaCrtcs(dev, was_locked);
++ return (htotal != 0);
++}
++
+ int
+ nouveau_bios_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint32_t saved_nv_pextdev_boot_0;
+ bool was_locked;
+ int ret;
+
+- dev_priv->vbios = &bios->pub;
+-
+ if (!NVInitVBIOS(dev))
+ return -ENODEV;
+
+@@ -6007,11 +6292,9 @@ nouveau_bios_init(struct drm_device *dev)
+ bios->execute = false;
+
+ /* ... unless card isn't POSTed already */
+- if (dev_priv->card_type >= NV_10 &&
+- NVReadVgaCrtc(dev, 0, 0x00) == 0 &&
+- NVReadVgaCrtc(dev, 0, 0x1a) == 0) {
++ if (!nouveau_bios_posted(dev)) {
+ NV_INFO(dev, "Adaptor not initialised\n");
+- if (dev_priv->card_type < NV_50) {
++ if (dev_priv->card_type < NV_40) {
+ NV_ERROR(dev, "Unable to POST this chipset\n");
+ return -ENODEV;
+ }
+@@ -6023,10 +6306,8 @@ nouveau_bios_init(struct drm_device *dev)
+ bios_wr32(bios, NV_PEXTDEV_BOOT_0, saved_nv_pextdev_boot_0);
+
+ ret = nouveau_run_vbios_init(dev);
+- if (ret) {
+- dev_priv->vbios = NULL;
++ if (ret)
+ return ret;
+- }
+
+ /* feature_byte on BMP is poor, but init always sets CR4B */
+ was_locked = NVLockVgaCrtcs(dev, false);
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.h b/drivers/gpu/drm/nouveau/nouveau_bios.h
+index fd94bd6..bd33a54 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bios.h
++++ b/drivers/gpu/drm/nouveau/nouveau_bios.h
+@@ -34,9 +34,73 @@
+
+ #define DCB_LOC_ON_CHIP 0
+
++struct dcb_i2c_entry {
++ uint32_t entry;
++ uint8_t port_type;
++ uint8_t read, write;
++ struct nouveau_i2c_chan *chan;
++};
++
++enum dcb_gpio_tag {
++ DCB_GPIO_TVDAC0 = 0xc,
++ DCB_GPIO_TVDAC1 = 0x2d,
++};
++
++struct dcb_gpio_entry {
++ enum dcb_gpio_tag tag;
++ int line;
++ bool invert;
++ uint32_t entry;
++ uint8_t state_default;
++ uint8_t state[2];
++};
++
++struct dcb_gpio_table {
++ int entries;
++ struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES];
++};
++
++enum dcb_connector_type {
++ DCB_CONNECTOR_VGA = 0x00,
++ DCB_CONNECTOR_TV_0 = 0x10,
++ DCB_CONNECTOR_TV_1 = 0x11,
++ DCB_CONNECTOR_TV_3 = 0x13,
++ DCB_CONNECTOR_DVI_I = 0x30,
++ DCB_CONNECTOR_DVI_D = 0x31,
++ DCB_CONNECTOR_LVDS = 0x40,
++ DCB_CONNECTOR_DP = 0x46,
++ DCB_CONNECTOR_eDP = 0x47,
++ DCB_CONNECTOR_HDMI_0 = 0x60,
++ DCB_CONNECTOR_HDMI_1 = 0x61,
++ DCB_CONNECTOR_NONE = 0xff
++};
++
++struct dcb_connector_table_entry {
++ uint8_t index;
++ uint32_t entry;
++ enum dcb_connector_type type;
++ uint8_t index2;
++ uint8_t gpio_tag;
++ void *drm;
++};
++
++struct dcb_connector_table {
++ int entries;
++ struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES];
++};
++
++enum dcb_type {
++ OUTPUT_ANALOG = 0,
++ OUTPUT_TV = 1,
++ OUTPUT_TMDS = 2,
++ OUTPUT_LVDS = 3,
++ OUTPUT_DP = 6,
++ OUTPUT_ANY = -1
++};
++
+ struct dcb_entry {
+ int index; /* may not be raw dcb index if merging has happened */
+- uint8_t type;
++ enum dcb_type type;
+ uint8_t i2c_index;
+ uint8_t heads;
+ uint8_t connector;
+@@ -71,69 +135,22 @@ struct dcb_entry {
+ bool i2c_upper_default;
+ };
+
+-struct dcb_i2c_entry {
+- uint8_t port_type;
+- uint8_t read, write;
+- struct nouveau_i2c_chan *chan;
+-};
++struct dcb_table {
++ uint8_t version;
+
+-struct parsed_dcb {
+ int entries;
+ struct dcb_entry entry[DCB_MAX_NUM_ENTRIES];
+- struct dcb_i2c_entry i2c[DCB_MAX_NUM_I2C_ENTRIES];
+-};
+-
+-enum dcb_gpio_tag {
+- DCB_GPIO_TVDAC0 = 0xc,
+- DCB_GPIO_TVDAC1 = 0x2d,
+-};
+-
+-struct dcb_gpio_entry {
+- enum dcb_gpio_tag tag;
+- int line;
+- bool invert;
+-};
+-
+-struct parsed_dcb_gpio {
+- int entries;
+- struct dcb_gpio_entry entry[DCB_MAX_NUM_GPIO_ENTRIES];
+-};
+-
+-struct dcb_connector_table_entry {
+- uint32_t entry;
+- uint8_t type;
+- uint8_t index;
+- uint8_t gpio_tag;
+-};
+-
+-struct dcb_connector_table {
+- int entries;
+- struct dcb_connector_table_entry entry[DCB_MAX_NUM_CONNECTOR_ENTRIES];
+-};
+-
+-struct bios_parsed_dcb {
+- uint8_t version;
+-
+- struct parsed_dcb dcb;
+
+ uint8_t *i2c_table;
+ uint8_t i2c_default_indices;
++ struct dcb_i2c_entry i2c[DCB_MAX_NUM_I2C_ENTRIES];
+
+ uint16_t gpio_table_ptr;
+- struct parsed_dcb_gpio gpio;
++ struct dcb_gpio_table gpio;
+ uint16_t connector_table_ptr;
+ struct dcb_connector_table connector;
+ };
+
+-enum nouveau_encoder_type {
+- OUTPUT_ANALOG = 0,
+- OUTPUT_TV = 1,
+- OUTPUT_TMDS = 2,
+- OUTPUT_LVDS = 3,
+- OUTPUT_DP = 6,
+- OUTPUT_ANY = -1
+-};
+-
+ enum nouveau_or {
+ OUTPUT_A = (1 << 0),
+ OUTPUT_B = (1 << 1),
+@@ -190,8 +207,8 @@ struct pll_lims {
+ int refclk;
+ };
+
+-struct nouveau_bios_info {
+- struct parsed_dcb *dcb;
++struct nvbios {
++ struct drm_device *dev;
+
+ uint8_t chip_version;
+
+@@ -199,11 +216,6 @@ struct nouveau_bios_info {
+ uint32_t tvdactestval;
+ uint8_t digital_min_front_porch;
+ bool fp_no_ddc;
+-};
+-
+-struct nvbios {
+- struct drm_device *dev;
+- struct nouveau_bios_info pub;
+
+ struct mutex lock;
+
+@@ -234,7 +246,7 @@ struct nvbios {
+ uint16_t some_script_ptr; /* BIT I + 14 */
+ uint16_t init96_tbl_ptr; /* BIT I + 16 */
+
+- struct bios_parsed_dcb bdcb;
++ struct dcb_table dcb;
+
+ struct {
+ int crtchead;
+@@ -260,7 +272,6 @@ struct nvbios {
+ bool reset_after_pclk_change;
+ bool dual_link;
+ bool link_c_increment;
+- bool BITbit1;
+ bool if_is_24bit;
+ int duallink_transition_clk;
+ uint8_t strapless_is_24bit;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
+index 028719f..8fac10d 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
+@@ -71,7 +71,7 @@ nouveau_bo_fixup_align(struct drm_device *dev,
+ * many small buffers.
+ */
+ if (dev_priv->card_type == NV_50) {
+- uint32_t block_size = nouveau_mem_fb_amount(dev) >> 15;
++ uint32_t block_size = dev_priv->vram_size >> 15;
+ int i;
+
+ switch (tile_flags) {
+@@ -153,17 +153,17 @@ nouveau_bo_new(struct drm_device *dev, struct nouveau_channel *chan,
+
+ nvbo->placement.fpfn = 0;
+ nvbo->placement.lpfn = mappable ? dev_priv->fb_mappable_pages : 0;
+- nouveau_bo_placement_set(nvbo, flags);
++ nouveau_bo_placement_set(nvbo, flags, 0);
+
+ nvbo->channel = chan;
+ ret = ttm_bo_init(&dev_priv->ttm.bdev, &nvbo->bo, size,
+ ttm_bo_type_device, &nvbo->placement, align, 0,
+ false, NULL, size, nouveau_bo_del_ttm);
+- nvbo->channel = NULL;
+ if (ret) {
+ /* ttm will call nouveau_bo_del_ttm if it fails.. */
+ return ret;
+ }
++ nvbo->channel = NULL;
+
+ spin_lock(&dev_priv->ttm.bo_list_lock);
+ list_add_tail(&nvbo->head, &dev_priv->ttm.bo_list);
+@@ -172,26 +172,33 @@ nouveau_bo_new(struct drm_device *dev, struct nouveau_channel *chan,
+ return 0;
+ }
+
++static void
++set_placement_list(uint32_t *pl, unsigned *n, uint32_t type, uint32_t flags)
++{
++ *n = 0;
++
++ if (type & TTM_PL_FLAG_VRAM)
++ pl[(*n)++] = TTM_PL_FLAG_VRAM | flags;
++ if (type & TTM_PL_FLAG_TT)
++ pl[(*n)++] = TTM_PL_FLAG_TT | flags;
++ if (type & TTM_PL_FLAG_SYSTEM)
++ pl[(*n)++] = TTM_PL_FLAG_SYSTEM | flags;
++}
++
+ void
+-nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t memtype)
++nouveau_bo_placement_set(struct nouveau_bo *nvbo, uint32_t type, uint32_t busy)
+ {
+- int n = 0;
+-
+- if (memtype & TTM_PL_FLAG_VRAM)
+- nvbo->placements[n++] = TTM_PL_FLAG_VRAM | TTM_PL_MASK_CACHING;
+- if (memtype & TTM_PL_FLAG_TT)
+- nvbo->placements[n++] = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING;
+- if (memtype & TTM_PL_FLAG_SYSTEM)
+- nvbo->placements[n++] = TTM_PL_FLAG_SYSTEM | TTM_PL_MASK_CACHING;
+- nvbo->placement.placement = nvbo->placements;
+- nvbo->placement.busy_placement = nvbo->placements;
+- nvbo->placement.num_placement = n;
+- nvbo->placement.num_busy_placement = n;
+-
+- if (nvbo->pin_refcnt) {
+- while (n--)
+- nvbo->placements[n] |= TTM_PL_FLAG_NO_EVICT;
+- }
++ struct ttm_placement *pl = &nvbo->placement;
++ uint32_t flags = TTM_PL_MASK_CACHING |
++ (nvbo->pin_refcnt ? TTM_PL_FLAG_NO_EVICT : 0);
++
++ pl->placement = nvbo->placements;
++ set_placement_list(nvbo->placements, &pl->num_placement,
++ type, flags);
++
++ pl->busy_placement = nvbo->busy_placements;
++ set_placement_list(nvbo->busy_placements, &pl->num_busy_placement,
++ type | busy, flags);
+ }
+
+ int
+@@ -199,7 +206,7 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype)
+ {
+ struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev);
+ struct ttm_buffer_object *bo = &nvbo->bo;
+- int ret, i;
++ int ret;
+
+ if (nvbo->pin_refcnt && !(memtype & (1 << bo->mem.mem_type))) {
+ NV_ERROR(nouveau_bdev(bo->bdev)->dev,
+@@ -215,9 +222,7 @@ nouveau_bo_pin(struct nouveau_bo *nvbo, uint32_t memtype)
+ if (ret)
+ goto out;
+
+- nouveau_bo_placement_set(nvbo, memtype);
+- for (i = 0; i < nvbo->placement.num_placement; i++)
+- nvbo->placements[i] |= TTM_PL_FLAG_NO_EVICT;
++ nouveau_bo_placement_set(nvbo, memtype, 0);
+
+ ret = ttm_bo_validate(bo, &nvbo->placement, false, false);
+ if (ret == 0) {
+@@ -244,7 +249,7 @@ nouveau_bo_unpin(struct nouveau_bo *nvbo)
+ {
+ struct drm_nouveau_private *dev_priv = nouveau_bdev(nvbo->bo.bdev);
+ struct ttm_buffer_object *bo = &nvbo->bo;
+- int ret, i;
++ int ret;
+
+ if (--nvbo->pin_refcnt)
+ return 0;
+@@ -253,8 +258,7 @@ nouveau_bo_unpin(struct nouveau_bo *nvbo)
+ if (ret)
+ return ret;
+
+- for (i = 0; i < nvbo->placement.num_placement; i++)
+- nvbo->placements[i] &= ~TTM_PL_FLAG_NO_EVICT;
++ nouveau_bo_placement_set(nvbo, bo->mem.placement, 0);
+
+ ret = ttm_bo_validate(bo, &nvbo->placement, false, false);
+ if (ret == 0) {
+@@ -395,8 +399,8 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
+ man->io_addr = NULL;
+ man->io_offset = drm_get_resource_start(dev, 1);
+ man->io_size = drm_get_resource_len(dev, 1);
+- if (man->io_size > nouveau_mem_fb_amount(dev))
+- man->io_size = nouveau_mem_fb_amount(dev);
++ if (man->io_size > dev_priv->vram_size)
++ man->io_size = dev_priv->vram_size;
+
+ man->gpu_offset = dev_priv->vm_vram_base;
+ break;
+@@ -439,11 +443,11 @@ nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl)
+
+ switch (bo->mem.mem_type) {
+ case TTM_PL_VRAM:
+- nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_TT |
++ nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_TT,
+ TTM_PL_FLAG_SYSTEM);
+ break;
+ default:
+- nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_SYSTEM);
++ nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_SYSTEM, 0);
+ break;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_calc.c b/drivers/gpu/drm/nouveau/nouveau_calc.c
+index ee2b845..88f9bc0 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_calc.c
++++ b/drivers/gpu/drm/nouveau/nouveau_calc.c
+@@ -274,7 +274,7 @@ getMNP_single(struct drm_device *dev, struct pll_lims *pll_lim, int clk,
+ * returns calculated clock
+ */
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- int cv = dev_priv->vbios->chip_version;
++ int cv = dev_priv->vbios.chip_version;
+ int minvco = pll_lim->vco1.minfreq, maxvco = pll_lim->vco1.maxfreq;
+ int minM = pll_lim->vco1.min_m, maxM = pll_lim->vco1.max_m;
+ int minN = pll_lim->vco1.min_n, maxN = pll_lim->vco1.max_n;
+@@ -373,7 +373,7 @@ getMNP_double(struct drm_device *dev, struct pll_lims *pll_lim, int clk,
+ * returns calculated clock
+ */
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- int chip_version = dev_priv->vbios->chip_version;
++ int chip_version = dev_priv->vbios.chip_version;
+ int minvco1 = pll_lim->vco1.minfreq, maxvco1 = pll_lim->vco1.maxfreq;
+ int minvco2 = pll_lim->vco2.minfreq, maxvco2 = pll_lim->vco2.maxfreq;
+ int minU1 = pll_lim->vco1.min_inputfreq, minU2 = pll_lim->vco2.min_inputfreq;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
+index adac0f8..f9b2acf 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_channel.c
++++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
+@@ -142,7 +142,6 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
+ GFP_KERNEL);
+ if (!dev_priv->fifos[channel])
+ return -ENOMEM;
+- dev_priv->fifo_alloc_count++;
+ chan = dev_priv->fifos[channel];
+ INIT_LIST_HEAD(&chan->nvsw.vbl_wait);
+ INIT_LIST_HEAD(&chan->fence.pending);
+@@ -258,9 +257,7 @@ nouveau_channel_free(struct nouveau_channel *chan)
+ nouveau_debugfs_channel_fini(chan);
+
+ /* Give outstanding push buffers a chance to complete */
+- spin_lock_irqsave(&chan->fence.lock, flags);
+ nouveau_fence_update(chan);
+- spin_unlock_irqrestore(&chan->fence.lock, flags);
+ if (chan->fence.sequence != chan->fence.sequence_ack) {
+ struct nouveau_fence *fence = NULL;
+
+@@ -280,9 +277,18 @@ nouveau_channel_free(struct nouveau_channel *chan)
+ */
+ nouveau_fence_fini(chan);
+
+- /* Ensure the channel is no longer active on the GPU */
++ /* This will prevent pfifo from switching channels. */
+ pfifo->reassign(dev, false);
+
++ /* We want to give pgraph a chance to idle and get rid of all potential
++ * errors. We need to do this before the lock, otherwise the irq handler
++ * is unable to process them.
++ */
++ if (pgraph->channel(dev) == chan)
++ nouveau_wait_for_idle(dev);
++
++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
++
+ pgraph->fifo_access(dev, false);
+ if (pgraph->channel(dev) == chan)
+ pgraph->unload_context(dev);
+@@ -298,6 +304,8 @@ nouveau_channel_free(struct nouveau_channel *chan)
+
+ pfifo->reassign(dev, true);
+
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
++
+ /* Release the channel's resources */
+ nouveau_gpuobj_ref_del(dev, &chan->pushbuf);
+ if (chan->pushbuf_bo) {
+@@ -310,7 +318,6 @@ nouveau_channel_free(struct nouveau_channel *chan)
+ iounmap(chan->user);
+
+ dev_priv->fifos[chan->id] = NULL;
+- dev_priv->fifo_alloc_count--;
+ kfree(chan);
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
+index a378bc3..fb51958 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
+@@ -218,7 +218,7 @@ nouveau_connector_set_encoder(struct drm_connector *connector,
+ connector->interlace_allowed = true;
+ }
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) {
++ if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) {
+ drm_connector_property_set_value(connector,
+ dev->mode_config.dvi_i_subconnector_property,
+ nv_encoder->dcb->type == OUTPUT_TMDS ?
+@@ -236,19 +236,6 @@ nouveau_connector_detect(struct drm_connector *connector)
+ struct nouveau_i2c_chan *i2c;
+ int type, flags;
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
+- nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);
+- if (nv_encoder && nv_connector->native_mode) {
+- unsigned status = connector_status_connected;
+-
+-#ifdef CONFIG_ACPI
+- if (!nouveau_ignorelid && !acpi_lid_open())
+- status = connector_status_unknown;
+-#endif
+- nouveau_connector_set_encoder(connector, nv_encoder);
+- return status;
+- }
+-
+ /* Cleanup the previous EDID block. */
+ if (nv_connector->edid) {
+ drm_mode_connector_update_edid_property(connector, NULL);
+@@ -281,7 +268,7 @@ nouveau_connector_detect(struct drm_connector *connector)
+ * same i2c channel so the value returned from ddc_detect
+ * isn't necessarily correct.
+ */
+- if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) {
++ if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) {
+ if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL)
+ type = OUTPUT_TMDS;
+ else
+@@ -302,7 +289,7 @@ nouveau_connector_detect(struct drm_connector *connector)
+
+ detect_analog:
+ nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG);
+- if (!nv_encoder)
++ if (!nv_encoder && !nouveau_tv_disable)
+ nv_encoder = find_encoder_by_type(connector, OUTPUT_TV);
+ if (nv_encoder) {
+ struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
+@@ -320,14 +307,75 @@ detect_analog:
+ return connector_status_disconnected;
+ }
+
++static enum drm_connector_status
++nouveau_connector_detect_lvds(struct drm_connector *connector)
++{
++ struct drm_device *dev = connector->dev;
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ struct nouveau_connector *nv_connector = nouveau_connector(connector);
++ struct nouveau_encoder *nv_encoder = NULL;
++ enum drm_connector_status status = connector_status_disconnected;
++
++ /* Cleanup the previous EDID block. */
++ if (nv_connector->edid) {
++ drm_mode_connector_update_edid_property(connector, NULL);
++ kfree(nv_connector->edid);
++ nv_connector->edid = NULL;
++ }
++
++ nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);
++ if (!nv_encoder)
++ return connector_status_disconnected;
++
++ if (!dev_priv->vbios.fp_no_ddc) {
++ status = nouveau_connector_detect(connector);
++ if (status == connector_status_connected)
++ goto out;
++ }
++
++ /* If no EDID found above, and the VBIOS indicates a hardcoded
++ * modeline is avalilable for the panel, set it as the panel's
++ * native mode and exit.
++ */
++ if (nouveau_bios_fp_mode(dev, NULL) && (dev_priv->vbios.fp_no_ddc ||
++ nv_encoder->dcb->lvdsconf.use_straps_for_mode)) {
++ status = connector_status_connected;
++ goto out;
++ }
++
++ /* Still nothing, some VBIOS images have a hardcoded EDID block
++ * stored for the panel stored in them.
++ */
++ if (!dev_priv->vbios.fp_no_ddc) {
++ struct edid *edid =
++ (struct edid *)nouveau_bios_embedded_edid(dev);
++ if (edid) {
++ nv_connector->edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
++ *(nv_connector->edid) = *edid;
++ status = connector_status_connected;
++ }
++ }
++
++out:
++#ifdef CONFIG_ACPI
++ if (status == connector_status_connected &&
++ !nouveau_ignorelid && !acpi_lid_open())
++ status = connector_status_unknown;
++#endif
++
++ drm_mode_connector_update_edid_property(connector, nv_connector->edid);
++ nouveau_connector_set_encoder(connector, nv_encoder);
++ return status;
++}
++
+ static void
+ nouveau_connector_force(struct drm_connector *connector)
+ {
+- struct drm_device *dev = connector->dev;
++ struct nouveau_connector *nv_connector = nouveau_connector(connector);
+ struct nouveau_encoder *nv_encoder;
+ int type;
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) {
++ if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) {
+ if (connector->force == DRM_FORCE_ON_DIGITAL)
+ type = OUTPUT_TMDS;
+ else
+@@ -337,7 +385,7 @@ nouveau_connector_force(struct drm_connector *connector)
+
+ nv_encoder = find_encoder_by_type(connector, type);
+ if (!nv_encoder) {
+- NV_ERROR(dev, "can't find encoder to force %s on!\n",
++ NV_ERROR(connector->dev, "can't find encoder to force %s on!\n",
+ drm_get_connector_name(connector));
+ connector->status = connector_status_disconnected;
+ return;
+@@ -371,7 +419,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
+ }
+
+ /* LVDS always needs gpu scaling */
+- if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS &&
++ if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS &&
+ value == DRM_MODE_SCALE_NONE)
+ return -EINVAL;
+
+@@ -431,24 +479,27 @@ nouveau_connector_set_property(struct drm_connector *connector,
+ }
+
+ static struct drm_display_mode *
+-nouveau_connector_native_mode(struct nouveau_connector *connector)
++nouveau_connector_native_mode(struct drm_connector *connector)
+ {
+- struct drm_device *dev = connector->base.dev;
++ struct drm_connector_helper_funcs *helper = connector->helper_private;
++ struct nouveau_connector *nv_connector = nouveau_connector(connector);
++ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode, *largest = NULL;
+ int high_w = 0, high_h = 0, high_v = 0;
+
+- /* Use preferred mode if there is one.. */
+- list_for_each_entry(mode, &connector->base.probed_modes, head) {
++ list_for_each_entry(mode, &nv_connector->base.probed_modes, head) {
++ if (helper->mode_valid(connector, mode) != MODE_OK)
++ continue;
++
++ /* Use preferred mode if there is one.. */
+ if (mode->type & DRM_MODE_TYPE_PREFERRED) {
+ NV_DEBUG_KMS(dev, "native mode from preferred\n");
+ return drm_mode_duplicate(dev, mode);
+ }
+- }
+
+- /* Otherwise, take the resolution with the largest width, then height,
+- * then vertical refresh
+- */
+- list_for_each_entry(mode, &connector->base.probed_modes, head) {
++ /* Otherwise, take the resolution with the largest width, then
++ * height, then vertical refresh
++ */
+ if (mode->hdisplay < high_w)
+ continue;
+
+@@ -530,21 +581,28 @@ static int
+ nouveau_connector_get_modes(struct drm_connector *connector)
+ {
+ struct drm_device *dev = connector->dev;
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_connector *nv_connector = nouveau_connector(connector);
+ struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder;
++ struct drm_display_mode mode;
+ int ret = 0;
+
+- /* If we're not LVDS, destroy the previous native mode, the attached
+- * monitor could have changed.
++ /* destroy the native mode, the attached monitor could have changed.
+ */
+- if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS &&
+- nv_connector->native_mode) {
++ if (nv_connector->native_mode) {
+ drm_mode_destroy(dev, nv_connector->native_mode);
+ nv_connector->native_mode = NULL;
+ }
+
+ if (nv_connector->edid)
+ ret = drm_add_edid_modes(connector, nv_connector->edid);
++ else
++ if (nv_encoder->dcb->type == OUTPUT_LVDS &&
++ (nv_encoder->dcb->lvdsconf.use_straps_for_mode ||
++ dev_priv->vbios.fp_no_ddc) &&
++ nouveau_bios_fp_mode(dev, &mode)) {
++ nv_connector->native_mode = drm_mode_duplicate(dev, &mode);
++ }
+
+ /* Find the native mode if this is a digital panel, if we didn't
+ * find any modes through DDC previously add the native mode to
+@@ -552,7 +610,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)
+ */
+ if (!nv_connector->native_mode)
+ nv_connector->native_mode =
+- nouveau_connector_native_mode(nv_connector);
++ nouveau_connector_native_mode(connector);
+ if (ret == 0 && nv_connector->native_mode) {
+ struct drm_display_mode *mode;
+
+@@ -565,7 +623,7 @@ nouveau_connector_get_modes(struct drm_connector *connector)
+ ret = get_slave_funcs(nv_encoder)->
+ get_modes(to_drm_encoder(nv_encoder), connector);
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
++ if (nv_encoder->dcb->type == OUTPUT_LVDS)
+ ret += nouveau_connector_scaler_modes_add(connector);
+
+ return ret;
+@@ -583,9 +641,9 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
+
+ switch (nv_encoder->dcb->type) {
+ case OUTPUT_LVDS:
+- BUG_ON(!nv_connector->native_mode);
+- if (mode->hdisplay > nv_connector->native_mode->hdisplay ||
+- mode->vdisplay > nv_connector->native_mode->vdisplay)
++ if (nv_connector->native_mode &&
++ (mode->hdisplay > nv_connector->native_mode->hdisplay ||
++ mode->vdisplay > nv_connector->native_mode->vdisplay))
+ return MODE_PANEL;
+
+ min_clock = 0;
+@@ -593,8 +651,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
+ break;
+ case OUTPUT_TMDS:
+ if ((dev_priv->card_type >= NV_50 && !nouveau_duallink) ||
+- (dev_priv->card_type < NV_50 &&
+- !nv_encoder->dcb->duallink_possible))
++ !nv_encoder->dcb->duallink_possible)
+ max_clock = 165000;
+ else
+ max_clock = 330000;
+@@ -615,6 +672,9 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
+
+ clock *= 3;
+ break;
++ default:
++ BUG_ON(1);
++ return MODE_BAD;
+ }
+
+ if (clock < min_clock)
+@@ -656,193 +716,138 @@ nouveau_connector_funcs = {
+ .force = nouveau_connector_force
+ };
+
+-static int
+-nouveau_connector_create_lvds(struct drm_device *dev,
+- struct drm_connector *connector)
+-{
+- struct nouveau_connector *nv_connector = nouveau_connector(connector);
+- struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nouveau_i2c_chan *i2c = NULL;
+- struct nouveau_encoder *nv_encoder;
+- struct drm_display_mode native, *mode, *temp;
+- bool dummy, if_is_24bit = false;
+- int ret, flags;
+-
+- nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS);
+- if (!nv_encoder)
+- return -ENODEV;
+-
+- ret = nouveau_bios_parse_lvds_table(dev, 0, &dummy, &if_is_24bit);
+- if (ret) {
+- NV_ERROR(dev, "Error parsing LVDS table, disabling LVDS\n");
+- return ret;
+- }
+- nv_connector->use_dithering = !if_is_24bit;
+-
+- /* Firstly try getting EDID over DDC, if allowed and I2C channel
+- * is available.
+- */
+- if (!dev_priv->VBIOS.pub.fp_no_ddc && nv_encoder->dcb->i2c_index < 0xf)
+- i2c = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index);
+-
+- if (i2c) {
+- nouveau_connector_ddc_prepare(connector, &flags);
+- nv_connector->edid = drm_get_edid(connector, &i2c->adapter);
+- nouveau_connector_ddc_finish(connector, flags);
+- }
+-
+- /* If no EDID found above, and the VBIOS indicates a hardcoded
+- * modeline is avalilable for the panel, set it as the panel's
+- * native mode and exit.
+- */
+- if (!nv_connector->edid && nouveau_bios_fp_mode(dev, &native) &&
+- (nv_encoder->dcb->lvdsconf.use_straps_for_mode ||
+- dev_priv->VBIOS.pub.fp_no_ddc)) {
+- nv_connector->native_mode = drm_mode_duplicate(dev, &native);
+- goto out;
+- }
+-
+- /* Still nothing, some VBIOS images have a hardcoded EDID block
+- * stored for the panel stored in them.
+- */
+- if (!nv_connector->edid && !nv_connector->native_mode &&
+- !dev_priv->VBIOS.pub.fp_no_ddc) {
+- struct edid *edid =
+- (struct edid *)nouveau_bios_embedded_edid(dev);
+- if (edid) {
+- nv_connector->edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
+- *(nv_connector->edid) = *edid;
+- }
+- }
+-
+- if (!nv_connector->edid)
+- goto out;
+-
+- /* We didn't find/use a panel mode from the VBIOS, so parse the EDID
+- * block and look for the preferred mode there.
+- */
+- ret = drm_add_edid_modes(connector, nv_connector->edid);
+- if (ret == 0)
+- goto out;
+- nv_connector->detected_encoder = nv_encoder;
+- nv_connector->native_mode = nouveau_connector_native_mode(nv_connector);
+- list_for_each_entry_safe(mode, temp, &connector->probed_modes, head)
+- drm_mode_remove(connector, mode);
+-
+-out:
+- if (!nv_connector->native_mode) {
+- NV_ERROR(dev, "LVDS present in DCB table, but couldn't "
+- "determine its native mode. Disabling.\n");
+- return -ENODEV;
+- }
+-
+- drm_mode_connector_update_edid_property(connector, nv_connector->edid);
+- return 0;
+-}
++static const struct drm_connector_funcs
++nouveau_connector_funcs_lvds = {
++ .dpms = drm_helper_connector_dpms,
++ .save = NULL,
++ .restore = NULL,
++ .detect = nouveau_connector_detect_lvds,
++ .destroy = nouveau_connector_destroy,
++ .fill_modes = drm_helper_probe_single_connector_modes,
++ .set_property = nouveau_connector_set_property,
++ .force = nouveau_connector_force
++};
+
+-int
+-nouveau_connector_create(struct drm_device *dev, int index, int type)
++struct drm_connector *
++nouveau_connector_create(struct drm_device *dev, int index)
+ {
++ const struct drm_connector_funcs *funcs = &nouveau_connector_funcs;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_connector *nv_connector = NULL;
++ struct dcb_connector_table_entry *dcb = NULL;
+ struct drm_connector *connector;
+- struct drm_encoder *encoder;
+- int ret;
++ int type, ret = 0;
+
+ NV_DEBUG_KMS(dev, "\n");
+
+- nv_connector = kzalloc(sizeof(*nv_connector), GFP_KERNEL);
+- if (!nv_connector)
+- return -ENOMEM;
+- nv_connector->dcb = nouveau_bios_connector_entry(dev, index);
+- connector = &nv_connector->base;
++ if (index >= dev_priv->vbios.dcb.connector.entries)
++ return ERR_PTR(-EINVAL);
+
+- switch (type) {
+- case DRM_MODE_CONNECTOR_VGA:
+- NV_INFO(dev, "Detected a VGA connector\n");
++ dcb = &dev_priv->vbios.dcb.connector.entry[index];
++ if (dcb->drm)
++ return dcb->drm;
++
++ switch (dcb->type) {
++ case DCB_CONNECTOR_VGA:
++ type = DRM_MODE_CONNECTOR_VGA;
+ break;
+- case DRM_MODE_CONNECTOR_DVID:
+- NV_INFO(dev, "Detected a DVI-D connector\n");
++ case DCB_CONNECTOR_TV_0:
++ case DCB_CONNECTOR_TV_1:
++ case DCB_CONNECTOR_TV_3:
++ type = DRM_MODE_CONNECTOR_TV;
+ break;
+- case DRM_MODE_CONNECTOR_DVII:
+- NV_INFO(dev, "Detected a DVI-I connector\n");
++ case DCB_CONNECTOR_DVI_I:
++ type = DRM_MODE_CONNECTOR_DVII;
+ break;
+- case DRM_MODE_CONNECTOR_LVDS:
+- NV_INFO(dev, "Detected a LVDS connector\n");
++ case DCB_CONNECTOR_DVI_D:
++ type = DRM_MODE_CONNECTOR_DVID;
+ break;
+- case DRM_MODE_CONNECTOR_TV:
+- NV_INFO(dev, "Detected a TV connector\n");
++ case DCB_CONNECTOR_HDMI_0:
++ case DCB_CONNECTOR_HDMI_1:
++ type = DRM_MODE_CONNECTOR_HDMIA;
+ break;
+- case DRM_MODE_CONNECTOR_DisplayPort:
+- NV_INFO(dev, "Detected a DisplayPort connector\n");
++ case DCB_CONNECTOR_LVDS:
++ type = DRM_MODE_CONNECTOR_LVDS;
++ funcs = &nouveau_connector_funcs_lvds;
+ break;
+- default:
+- NV_ERROR(dev, "Unknown connector, this is not good.\n");
++ case DCB_CONNECTOR_DP:
++ type = DRM_MODE_CONNECTOR_DisplayPort;
++ break;
++ case DCB_CONNECTOR_eDP:
++ type = DRM_MODE_CONNECTOR_eDP;
+ break;
++ default:
++ NV_ERROR(dev, "unknown connector type: 0x%02x!!\n", dcb->type);
++ return ERR_PTR(-EINVAL);
+ }
+
++ nv_connector = kzalloc(sizeof(*nv_connector), GFP_KERNEL);
++ if (!nv_connector)
++ return ERR_PTR(-ENOMEM);
++ nv_connector->dcb = dcb;
++ connector = &nv_connector->base;
++
+ /* defaults, will get overridden in detect() */
+ connector->interlace_allowed = false;
+ connector->doublescan_allowed = false;
+
+- drm_connector_init(dev, connector, &nouveau_connector_funcs, type);
++ drm_connector_init(dev, connector, funcs, type);
+ drm_connector_helper_add(connector, &nouveau_connector_helper_funcs);
+
++ /* Check if we need dithering enabled */
++ if (dcb->type == DCB_CONNECTOR_LVDS) {
++ bool dummy, is_24bit = false;
++
++ ret = nouveau_bios_parse_lvds_table(dev, 0, &dummy, &is_24bit);
++ if (ret) {
++ NV_ERROR(dev, "Error parsing LVDS table, disabling "
++ "LVDS\n");
++ goto fail;
++ }
++
++ nv_connector->use_dithering = !is_24bit;
++ }
++
+ /* Init DVI-I specific properties */
+- if (type == DRM_MODE_CONNECTOR_DVII) {
++ if (dcb->type == DCB_CONNECTOR_DVI_I) {
+ drm_mode_create_dvi_i_properties(dev);
+ drm_connector_attach_property(connector, dev->mode_config.dvi_i_subconnector_property, 0);
+ drm_connector_attach_property(connector, dev->mode_config.dvi_i_select_subconnector_property, 0);
+ }
+
+- if (type != DRM_MODE_CONNECTOR_LVDS)
+- nv_connector->use_dithering = false;
+-
+- if (type == DRM_MODE_CONNECTOR_DVID ||
+- type == DRM_MODE_CONNECTOR_DVII ||
+- type == DRM_MODE_CONNECTOR_LVDS ||
+- type == DRM_MODE_CONNECTOR_DisplayPort) {
+- nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN;
+-
+- drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property,
+- nv_connector->scaling_mode);
+- drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property,
+- nv_connector->use_dithering ? DRM_MODE_DITHERING_ON
+- : DRM_MODE_DITHERING_OFF);
+-
+- } else {
+- nv_connector->scaling_mode = DRM_MODE_SCALE_NONE;
+-
+- if (type == DRM_MODE_CONNECTOR_VGA &&
+- dev_priv->card_type >= NV_50) {
++ switch (dcb->type) {
++ case DCB_CONNECTOR_VGA:
++ if (dev_priv->card_type >= NV_50) {
+ drm_connector_attach_property(connector,
+ dev->mode_config.scaling_mode_property,
+ nv_connector->scaling_mode);
+ }
+- }
+-
+- /* attach encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
+-
+- if (nv_encoder->dcb->connector != index)
+- continue;
+-
+- if (get_slave_funcs(nv_encoder))
+- get_slave_funcs(nv_encoder)->create_resources(encoder, connector);
++ /* fall-through */
++ case DCB_CONNECTOR_TV_0:
++ case DCB_CONNECTOR_TV_1:
++ case DCB_CONNECTOR_TV_3:
++ nv_connector->scaling_mode = DRM_MODE_SCALE_NONE;
++ break;
++ default:
++ nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN;
+
+- drm_mode_connector_attach_encoder(connector, encoder);
++ drm_connector_attach_property(connector,
++ dev->mode_config.scaling_mode_property,
++ nv_connector->scaling_mode);
++ drm_connector_attach_property(connector,
++ dev->mode_config.dithering_mode_property,
++ nv_connector->use_dithering ?
++ DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF);
++ break;
+ }
+
+ drm_sysfs_connector_add(connector);
++ dcb->drm = connector;
++ return dcb->drm;
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) {
+- ret = nouveau_connector_create_lvds(dev, connector);
+- if (ret) {
+- connector->funcs->destroy(connector);
+- return ret;
+- }
+- }
++fail:
++ drm_connector_cleanup(connector);
++ kfree(connector);
++ return ERR_PTR(ret);
+
+- return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.h b/drivers/gpu/drm/nouveau/nouveau_connector.h
+index 728b809..1ce3d91 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_connector.h
++++ b/drivers/gpu/drm/nouveau/nouveau_connector.h
+@@ -49,6 +49,7 @@ static inline struct nouveau_connector *nouveau_connector(
+ return container_of(con, struct nouveau_connector, base);
+ }
+
+-int nouveau_connector_create(struct drm_device *dev, int i2c_index, int type);
++struct drm_connector *
++nouveau_connector_create(struct drm_device *, int index);
+
+ #endif /* __NOUVEAU_CONNECTOR_H__ */
+diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
+index 89e36ee..a251886 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
++++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
+@@ -137,16 +137,28 @@ nouveau_debugfs_memory_info(struct seq_file *m, void *data)
+ {
+ struct drm_info_node *node = (struct drm_info_node *) m->private;
+ struct drm_minor *minor = node->minor;
+- struct drm_device *dev = minor->dev;
++ struct drm_nouveau_private *dev_priv = minor->dev->dev_private;
++
++ seq_printf(m, "VRAM total: %dKiB\n", (int)(dev_priv->vram_size >> 10));
++ return 0;
++}
++
++static int
++nouveau_debugfs_vbios_image(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_nouveau_private *dev_priv = node->minor->dev->dev_private;
++ int i;
+
+- seq_printf(m, "VRAM total: %dKiB\n",
+- (int)(nouveau_mem_fb_amount(dev) >> 10));
++ for (i = 0; i < dev_priv->vbios.length; i++)
++ seq_printf(m, "%c", dev_priv->vbios.data[i]);
+ return 0;
+ }
+
+ static struct drm_info_list nouveau_debugfs_list[] = {
+ { "chipset", nouveau_debugfs_chipset_info, 0, NULL },
+ { "memory", nouveau_debugfs_memory_info, 0, NULL },
++ { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL },
+ };
+ #define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_dma.c b/drivers/gpu/drm/nouveau/nouveau_dma.c
+index c8482a1..65c441a 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_dma.c
++++ b/drivers/gpu/drm/nouveau/nouveau_dma.c
+@@ -190,6 +190,11 @@ nv50_dma_push(struct nouveau_channel *chan, struct nouveau_bo *bo,
+ nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8);
+
+ chan->dma.ib_put = (chan->dma.ib_put + 1) & chan->dma.ib_max;
++
++ DRM_MEMORYBARRIER();
++ /* Flush writes. */
++ nouveau_bo_rd32(pb, 0);
++
+ nvchan_wr32(chan, 0x8c, chan->dma.ib_put);
+ chan->dma.ib_free--;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c
+index f954ad9..deeb21c 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_dp.c
++++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
+@@ -483,7 +483,7 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,
+ ctrl |= (cmd << NV50_AUXCH_CTRL_CMD_SHIFT);
+ ctrl |= ((data_nr - 1) << NV50_AUXCH_CTRL_LEN_SHIFT);
+
+- for (;;) {
++ for (i = 0; i < 16; i++) {
+ nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x80000000);
+ nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl);
+ nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x00010000);
+@@ -502,6 +502,12 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,
+ break;
+ }
+
++ if (i == 16) {
++ NV_ERROR(dev, "auxch DEFER too many times, bailing\n");
++ ret = -EREMOTEIO;
++ goto out;
++ }
++
+ if (cmd & 1) {
+ if ((stat & NV50_AUXCH_STAT_COUNT) != data_nr) {
+ ret = -EREMOTEIO;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c
+index da3b93b..60a709c 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.c
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.c
+@@ -75,14 +75,22 @@ MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status");
+ int nouveau_ignorelid = 0;
+ module_param_named(ignorelid, nouveau_ignorelid, int, 0400);
+
+-MODULE_PARM_DESC(noagp, "Disable all acceleration");
++MODULE_PARM_DESC(noaccel, "Disable all acceleration");
+ int nouveau_noaccel = 0;
+ module_param_named(noaccel, nouveau_noaccel, int, 0400);
+
+-MODULE_PARM_DESC(noagp, "Disable fbcon acceleration");
++MODULE_PARM_DESC(nofbaccel, "Disable fbcon acceleration");
+ int nouveau_nofbaccel = 0;
+ module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400);
+
++MODULE_PARM_DESC(override_conntype, "Ignore DCB connector type");
++int nouveau_override_conntype = 0;
++module_param_named(override_conntype, nouveau_override_conntype, int, 0400);
++
++MODULE_PARM_DESC(tv_disable, "Disable TV-out detection\n");
++int nouveau_tv_disable = 0;
++module_param_named(tv_disable, nouveau_tv_disable, int, 0400);
++
+ MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
+ "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"
+ "\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n"
+@@ -154,9 +162,11 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
+ if (pm_state.event == PM_EVENT_PRETHAW)
+ return 0;
+
++ NV_INFO(dev, "Disabling fbcon acceleration...\n");
+ fbdev_flags = dev_priv->fbdev_info->flags;
+ dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED;
+
++ NV_INFO(dev, "Unpinning framebuffer(s)...\n");
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ struct nouveau_framebuffer *nouveau_fb;
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
+index 5be0cca..c31159a 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
+@@ -76,6 +76,7 @@ struct nouveau_bo {
+ struct ttm_buffer_object bo;
+ struct ttm_placement placement;
+ u32 placements[3];
++ u32 busy_placements[3];
+ struct ttm_bo_kmap_obj kmap;
+ struct list_head head;
+
+@@ -195,7 +196,7 @@ struct nouveau_channel {
+ struct list_head pending;
+ uint32_t sequence;
+ uint32_t sequence_ack;
+- uint32_t last_sequence_irq;
++ atomic_t last_sequence_irq;
+ } fence;
+
+ /* DMA push buffer */
+@@ -519,6 +520,7 @@ struct drm_nouveau_private {
+
+ struct workqueue_struct *wq;
+ struct work_struct irq_work;
++ struct work_struct hpd_work;
+
+ struct list_head vbl_waiting;
+
+@@ -533,12 +535,14 @@ struct drm_nouveau_private {
+
+ struct fb_info *fbdev_info;
+
+- int fifo_alloc_count;
+ struct nouveau_channel *fifos[NOUVEAU_MAX_CHANNEL_NR];
+
+ struct nouveau_engine engine;
+ struct nouveau_channel *channel;
+
++ /* For PFIFO and PGRAPH. */
++ spinlock_t context_switch_lock;
++
+ /* RAMIN configuration, RAMFC, RAMHT and RAMRO offsets */
+ struct nouveau_gpuobj *ramht;
+ uint32_t ramin_rsvd_vram;
+@@ -550,12 +554,6 @@ struct drm_nouveau_private {
+ uint32_t ramro_offset;
+ uint32_t ramro_size;
+
+- /* base physical adresses */
+- uint64_t fb_phys;
+- uint64_t fb_available_size;
+- uint64_t fb_mappable_pages;
+- uint64_t fb_aper_free;
+-
+ struct {
+ enum {
+ NOUVEAU_GART_NONE = 0,
+@@ -569,10 +567,6 @@ struct drm_nouveau_private {
+ struct nouveau_gpuobj *sg_ctxdma;
+ struct page *sg_dummy_page;
+ dma_addr_t sg_dummy_bus;
+-
+- /* nottm hack */
+- struct drm_ttm_backend *sg_be;
+- unsigned long sg_handle;
+ } gart_info;
+
+ /* nv10-nv40 tiling regions */
+@@ -581,6 +575,16 @@ struct drm_nouveau_private {
+ spinlock_t lock;
+ } tile;
+
++ /* VRAM/fb configuration */
++ uint64_t vram_size;
++ uint64_t vram_sys_base;
++
++ uint64_t fb_phys;
++ uint64_t fb_available_size;
++ uint64_t fb_mappable_pages;
++ uint64_t fb_aper_free;
++ int fb_mtrr;
++
+ /* G8x/G9x virtual address space */
+ uint64_t vm_gart_base;
+ uint64_t vm_gart_size;
+@@ -589,10 +593,6 @@ struct drm_nouveau_private {
+ uint64_t vm_end;
+ struct nouveau_gpuobj *vm_vram_pt[NV50_VM_VRAM_NR];
+ int vm_vram_pt_nr;
+- uint64_t vram_sys_base;
+-
+- /* the mtrr covering the FB */
+- int fb_mtrr;
+
+ struct mem_block *ramin_heap;
+
+@@ -602,8 +602,7 @@ struct drm_nouveau_private {
+
+ struct list_head gpuobj_list;
+
+- struct nvbios VBIOS;
+- struct nouveau_bios_info *vbios;
++ struct nvbios vbios;
+
+ struct nv04_mode_state mode_reg;
+ struct nv04_mode_state saved_reg;
+@@ -612,11 +611,7 @@ struct drm_nouveau_private {
+ uint32_t dac_users[4];
+
+ struct nouveau_suspend_resume {
+- uint32_t fifo_mode;
+- uint32_t graph_ctx_control;
+- uint32_t graph_state;
+ uint32_t *ramin_copy;
+- uint64_t ramin_size;
+ } susres;
+
+ struct backlight_device *backlight;
+@@ -680,6 +675,7 @@ extern int nouveau_uscript_tmds;
+ extern int nouveau_vram_pushbuf;
+ extern int nouveau_vram_notify;
+ extern int nouveau_fbpercrtc;
++extern int nouveau_tv_disable;
+ extern char *nouveau_tv_norm;
+ extern int nouveau_reg_debug;
+ extern char *nouveau_vbios;
+@@ -687,6 +683,7 @@ extern int nouveau_ctxfw;
+ extern int nouveau_ignorelid;
+ extern int nouveau_nofbaccel;
+ extern int nouveau_noaccel;
++extern int nouveau_override_conntype;
+
+ /* nouveau_state.c */
+ extern void nouveau_preclose(struct drm_device *dev, struct drm_file *);
+@@ -711,7 +708,7 @@ extern struct mem_block *nouveau_mem_alloc_block(struct mem_block *,
+ struct drm_file *, int tail);
+ extern void nouveau_mem_takedown(struct mem_block **heap);
+ extern void nouveau_mem_free_block(struct mem_block *);
+-extern uint64_t nouveau_mem_fb_amount(struct drm_device *);
++extern int nouveau_mem_detect(struct drm_device *dev);
+ extern void nouveau_mem_release(struct drm_file *, struct mem_block *heap);
+ extern int nouveau_mem_init(struct drm_device *);
+ extern int nouveau_mem_init_agp(struct drm_device *);
+@@ -928,6 +925,10 @@ extern void nv40_fb_takedown(struct drm_device *);
+ extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t,
+ uint32_t, uint32_t);
+
++/* nv50_fb.c */
++extern int nv50_fb_init(struct drm_device *);
++extern void nv50_fb_takedown(struct drm_device *);
++
+ /* nv04_fifo.c */
+ extern int nv04_fifo_init(struct drm_device *);
+ extern void nv04_fifo_disable(struct drm_device *);
+@@ -1027,6 +1028,7 @@ extern void nv50_graph_destroy_context(struct nouveau_channel *);
+ extern int nv50_graph_load_context(struct nouveau_channel *);
+ extern int nv50_graph_unload_context(struct drm_device *);
+ extern void nv50_graph_context_switch(struct drm_device *);
++extern int nv50_grctx_init(struct nouveau_grctx *);
+
+ /* nouveau_grctx.c */
+ extern int nouveau_grctx_prog_load(struct drm_device *);
+@@ -1081,13 +1083,13 @@ extern long nouveau_compat_ioctl(struct file *file, unsigned int cmd,
+ unsigned long arg);
+
+ /* nv04_dac.c */
+-extern int nv04_dac_create(struct drm_device *dev, struct dcb_entry *entry);
++extern int nv04_dac_create(struct drm_connector *, struct dcb_entry *);
+ extern uint32_t nv17_dac_sample_load(struct drm_encoder *encoder);
+ extern int nv04_dac_output_offset(struct drm_encoder *encoder);
+ extern void nv04_dac_update_dacclk(struct drm_encoder *encoder, bool enable);
+
+ /* nv04_dfp.c */
+-extern int nv04_dfp_create(struct drm_device *dev, struct dcb_entry *entry);
++extern int nv04_dfp_create(struct drm_connector *, struct dcb_entry *);
+ extern int nv04_dfp_get_bound_head(struct drm_device *dev, struct dcb_entry *dcbent);
+ extern void nv04_dfp_bind_head(struct drm_device *dev, struct dcb_entry *dcbent,
+ int head, bool dl);
+@@ -1096,10 +1098,10 @@ extern void nv04_dfp_update_fp_control(struct drm_encoder *encoder, int mode);
+
+ /* nv04_tv.c */
+ extern int nv04_tv_identify(struct drm_device *dev, int i2c_index);
+-extern int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry);
++extern int nv04_tv_create(struct drm_connector *, struct dcb_entry *);
+
+ /* nv17_tv.c */
+-extern int nv17_tv_create(struct drm_device *dev, struct dcb_entry *entry);
++extern int nv17_tv_create(struct drm_connector *, struct dcb_entry *);
+
+ /* nv04_display.c */
+ extern int nv04_display_create(struct drm_device *);
+@@ -1119,7 +1121,8 @@ extern int nouveau_bo_pin(struct nouveau_bo *, uint32_t flags);
+ extern int nouveau_bo_unpin(struct nouveau_bo *);
+ extern int nouveau_bo_map(struct nouveau_bo *);
+ extern void nouveau_bo_unmap(struct nouveau_bo *);
+-extern void nouveau_bo_placement_set(struct nouveau_bo *, uint32_t memtype);
++extern void nouveau_bo_placement_set(struct nouveau_bo *, uint32_t type,
++ uint32_t busy);
+ extern u16 nouveau_bo_rd16(struct nouveau_bo *nvbo, unsigned index);
+ extern void nouveau_bo_wr16(struct nouveau_bo *nvbo, unsigned index, u16 val);
+ extern u32 nouveau_bo_rd32(struct nouveau_bo *nvbo, unsigned index);
+@@ -1139,7 +1142,6 @@ extern int nouveau_fence_wait(void *obj, void *arg, bool lazy, bool intr);
+ extern int nouveau_fence_flush(void *obj, void *arg);
+ extern void nouveau_fence_unref(void **obj);
+ extern void *nouveau_fence_ref(void *obj);
+-extern void nouveau_fence_handler(struct drm_device *dev, int channel);
+
+ /* nouveau_gem.c */
+ extern int nouveau_gem_new(struct drm_device *, struct nouveau_channel *,
+@@ -1163,6 +1165,16 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *,
+ int nv17_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag);
+ int nv17_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state);
+
++/* nv50_gpio.c */
++int nv50_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag);
++int nv50_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state);
++
++/* nv50_calc. */
++int nv50_calc_pll(struct drm_device *, struct pll_lims *, int clk,
++ int *N1, int *M1, int *N2, int *M2, int *P);
++int nv50_calc_pll2(struct drm_device *, struct pll_lims *,
++ int clk, int *N, int *fN, int *M, int *P);
++
+ #ifndef ioread32_native
+ #ifdef __BIG_ENDIAN
+ #define ioread16_native ioread16be
+diff --git a/drivers/gpu/drm/nouveau/nouveau_encoder.h b/drivers/gpu/drm/nouveau/nouveau_encoder.h
+index bc4a240..e4442e2 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_encoder.h
++++ b/drivers/gpu/drm/nouveau/nouveau_encoder.h
+@@ -47,6 +47,9 @@ struct nouveau_encoder {
+
+ union {
+ struct {
++ int mc_unknown;
++ uint32_t unk0;
++ uint32_t unk1;
+ int dpcd_version;
+ int link_nr;
+ int link_bw;
+@@ -68,8 +71,8 @@ static inline struct drm_encoder *to_drm_encoder(struct nouveau_encoder *enc)
+
+ struct nouveau_connector *
+ nouveau_encoder_connector_get(struct nouveau_encoder *encoder);
+-int nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry);
+-int nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry);
++int nv50_sor_create(struct drm_connector *, struct dcb_entry *);
++int nv50_dac_create(struct drm_connector *, struct dcb_entry *);
+
+ struct bit_displayport_encoder_table {
+ uint32_t match;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
+index faddf53..813d853 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
++++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
+@@ -67,12 +67,13 @@ nouveau_fence_update(struct nouveau_channel *chan)
+ if (USE_REFCNT)
+ sequence = nvchan_rd32(chan, 0x48);
+ else
+- sequence = chan->fence.last_sequence_irq;
++ sequence = atomic_read(&chan->fence.last_sequence_irq);
+
+ if (chan->fence.sequence_ack == sequence)
+ return;
+ chan->fence.sequence_ack = sequence;
+
++ spin_lock(&chan->fence.lock);
+ list_for_each_safe(entry, tmp, &chan->fence.pending) {
+ fence = list_entry(entry, struct nouveau_fence, entry);
+
+@@ -84,6 +85,7 @@ nouveau_fence_update(struct nouveau_channel *chan)
+ if (sequence == chan->fence.sequence_ack)
+ break;
+ }
++ spin_unlock(&chan->fence.lock);
+ }
+
+ int
+@@ -119,7 +121,6 @@ nouveau_fence_emit(struct nouveau_fence *fence)
+ {
+ struct drm_nouveau_private *dev_priv = fence->channel->dev->dev_private;
+ struct nouveau_channel *chan = fence->channel;
+- unsigned long flags;
+ int ret;
+
+ ret = RING_SPACE(chan, 2);
+@@ -127,9 +128,7 @@ nouveau_fence_emit(struct nouveau_fence *fence)
+ return ret;
+
+ if (unlikely(chan->fence.sequence == chan->fence.sequence_ack - 1)) {
+- spin_lock_irqsave(&chan->fence.lock, flags);
+ nouveau_fence_update(chan);
+- spin_unlock_irqrestore(&chan->fence.lock, flags);
+
+ BUG_ON(chan->fence.sequence ==
+ chan->fence.sequence_ack - 1);
+@@ -138,9 +137,9 @@ nouveau_fence_emit(struct nouveau_fence *fence)
+ fence->sequence = ++chan->fence.sequence;
+
+ kref_get(&fence->refcount);
+- spin_lock_irqsave(&chan->fence.lock, flags);
++ spin_lock(&chan->fence.lock);
+ list_add_tail(&fence->entry, &chan->fence.pending);
+- spin_unlock_irqrestore(&chan->fence.lock, flags);
++ spin_unlock(&chan->fence.lock);
+
+ BEGIN_RING(chan, NvSubSw, USE_REFCNT ? 0x0050 : 0x0150, 1);
+ OUT_RING(chan, fence->sequence);
+@@ -173,14 +172,11 @@ nouveau_fence_signalled(void *sync_obj, void *sync_arg)
+ {
+ struct nouveau_fence *fence = nouveau_fence(sync_obj);
+ struct nouveau_channel *chan = fence->channel;
+- unsigned long flags;
+
+ if (fence->signalled)
+ return true;
+
+- spin_lock_irqsave(&chan->fence.lock, flags);
+ nouveau_fence_update(chan);
+- spin_unlock_irqrestore(&chan->fence.lock, flags);
+ return fence->signalled;
+ }
+
+@@ -221,27 +217,12 @@ nouveau_fence_flush(void *sync_obj, void *sync_arg)
+ return 0;
+ }
+
+-void
+-nouveau_fence_handler(struct drm_device *dev, int channel)
+-{
+- struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nouveau_channel *chan = NULL;
+-
+- if (channel >= 0 && channel < dev_priv->engine.fifo.channels)
+- chan = dev_priv->fifos[channel];
+-
+- if (chan) {
+- spin_lock_irq(&chan->fence.lock);
+- nouveau_fence_update(chan);
+- spin_unlock_irq(&chan->fence.lock);
+- }
+-}
+-
+ int
+ nouveau_fence_init(struct nouveau_channel *chan)
+ {
+ INIT_LIST_HEAD(&chan->fence.pending);
+ spin_lock_init(&chan->fence.lock);
++ atomic_set(&chan->fence.last_sequence_irq, 0);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
+index 8265fed..0846a1e 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
++++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
+@@ -182,40 +182,35 @@ nouveau_gem_set_domain(struct drm_gem_object *gem, uint32_t read_domains,
+ {
+ struct nouveau_bo *nvbo = gem->driver_private;
+ struct ttm_buffer_object *bo = &nvbo->bo;
+- uint64_t flags;
++ uint32_t domains = valid_domains &
++ (write_domains ? write_domains : read_domains);
++ uint32_t pref_flags = 0, valid_flags = 0;
+
+- if (!valid_domains || (!read_domains && !write_domains))
++ if (!domains)
+ return -EINVAL;
+
+- if (write_domains) {
+- if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) &&
+- (write_domains & NOUVEAU_GEM_DOMAIN_VRAM))
+- flags = TTM_PL_FLAG_VRAM;
+- else
+- if ((valid_domains & NOUVEAU_GEM_DOMAIN_GART) &&
+- (write_domains & NOUVEAU_GEM_DOMAIN_GART))
+- flags = TTM_PL_FLAG_TT;
+- else
+- return -EINVAL;
+- } else {
+- if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) &&
+- (read_domains & NOUVEAU_GEM_DOMAIN_VRAM) &&
+- bo->mem.mem_type == TTM_PL_VRAM)
+- flags = TTM_PL_FLAG_VRAM;
+- else
+- if ((valid_domains & NOUVEAU_GEM_DOMAIN_GART) &&
+- (read_domains & NOUVEAU_GEM_DOMAIN_GART) &&
+- bo->mem.mem_type == TTM_PL_TT)
+- flags = TTM_PL_FLAG_TT;
+- else
+- if ((valid_domains & NOUVEAU_GEM_DOMAIN_VRAM) &&
+- (read_domains & NOUVEAU_GEM_DOMAIN_VRAM))
+- flags = TTM_PL_FLAG_VRAM;
+- else
+- flags = TTM_PL_FLAG_TT;
+- }
++ if (valid_domains & NOUVEAU_GEM_DOMAIN_VRAM)
++ valid_flags |= TTM_PL_FLAG_VRAM;
++
++ if (valid_domains & NOUVEAU_GEM_DOMAIN_GART)
++ valid_flags |= TTM_PL_FLAG_TT;
++
++ if ((domains & NOUVEAU_GEM_DOMAIN_VRAM) &&
++ bo->mem.mem_type == TTM_PL_VRAM)
++ pref_flags |= TTM_PL_FLAG_VRAM;
++
++ else if ((domains & NOUVEAU_GEM_DOMAIN_GART) &&
++ bo->mem.mem_type == TTM_PL_TT)
++ pref_flags |= TTM_PL_FLAG_TT;
++
++ else if (domains & NOUVEAU_GEM_DOMAIN_VRAM)
++ pref_flags |= TTM_PL_FLAG_VRAM;
++
++ else
++ pref_flags |= TTM_PL_FLAG_TT;
++
++ nouveau_bo_placement_set(nvbo, pref_flags, valid_flags);
+
+- nouveau_bo_placement_set(nvbo, flags);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_hw.c b/drivers/gpu/drm/nouveau/nouveau_hw.c
+index dc46792..7855b35 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_hw.c
++++ b/drivers/gpu/drm/nouveau/nouveau_hw.c
+@@ -160,7 +160,7 @@ static void
+ setPLL_single(struct drm_device *dev, uint32_t reg, struct nouveau_pll_vals *pv)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- int chip_version = dev_priv->vbios->chip_version;
++ int chip_version = dev_priv->vbios.chip_version;
+ uint32_t oldpll = NVReadRAMDAC(dev, 0, reg);
+ int oldN = (oldpll >> 8) & 0xff, oldM = oldpll & 0xff;
+ uint32_t pll = (oldpll & 0xfff80000) | pv->log2P << 16 | pv->NM1;
+@@ -216,7 +216,7 @@ setPLL_double_highregs(struct drm_device *dev, uint32_t reg1,
+ struct nouveau_pll_vals *pv)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- int chip_version = dev_priv->vbios->chip_version;
++ int chip_version = dev_priv->vbios.chip_version;
+ bool nv3035 = chip_version == 0x30 || chip_version == 0x35;
+ uint32_t reg2 = reg1 + ((reg1 == NV_RAMDAC_VPLL2) ? 0x5c : 0x70);
+ uint32_t oldpll1 = NVReadRAMDAC(dev, 0, reg1);
+@@ -374,7 +374,7 @@ nouveau_hw_setpll(struct drm_device *dev, uint32_t reg1,
+ struct nouveau_pll_vals *pv)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- int cv = dev_priv->vbios->chip_version;
++ int cv = dev_priv->vbios.chip_version;
+
+ if (cv == 0x30 || cv == 0x31 || cv == 0x35 || cv == 0x36 ||
+ cv >= 0x40) {
+diff --git a/drivers/gpu/drm/nouveau/nouveau_i2c.c b/drivers/gpu/drm/nouveau/nouveau_i2c.c
+index 70e994d..316a3c7 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_i2c.c
++++ b/drivers/gpu/drm/nouveau/nouveau_i2c.c
+@@ -254,16 +254,27 @@ struct nouveau_i2c_chan *
+ nouveau_i2c_find(struct drm_device *dev, int index)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct dcb_i2c_entry *i2c = &dev_priv->vbios.dcb.i2c[index];
+
+- if (index > DCB_MAX_NUM_I2C_ENTRIES)
++ if (index >= DCB_MAX_NUM_I2C_ENTRIES)
+ return NULL;
+
+- if (!bios->bdcb.dcb.i2c[index].chan) {
+- if (nouveau_i2c_init(dev, &bios->bdcb.dcb.i2c[index], index))
+- return NULL;
++ if (dev_priv->chipset >= NV_50 && (i2c->entry & 0x00000100)) {
++ uint32_t reg = 0xe500, val;
++
++ if (i2c->port_type == 6) {
++ reg += i2c->read * 0x50;
++ val = 0x2002;
++ } else {
++ reg += ((i2c->entry & 0x1e00) >> 9) * 0x50;
++ val = 0xe001;
++ }
++
++ nv_wr32(dev, reg, (nv_rd32(dev, reg) & ~0xf003) | val);
+ }
+
+- return bios->bdcb.dcb.i2c[index].chan;
++ if (!i2c->chan && nouveau_i2c_init(dev, i2c, index))
++ return NULL;
++ return i2c->chan;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_irq.c b/drivers/gpu/drm/nouveau/nouveau_irq.c
+index 447f9f6..13e73ce 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_irq.c
++++ b/drivers/gpu/drm/nouveau/nouveau_irq.c
+@@ -51,6 +51,7 @@ nouveau_irq_preinstall(struct drm_device *dev)
+
+ if (dev_priv->card_type == NV_50) {
+ INIT_WORK(&dev_priv->irq_work, nv50_display_irq_handler_bh);
++ INIT_WORK(&dev_priv->hpd_work, nv50_display_irq_hotplug_bh);
+ INIT_LIST_HEAD(&dev_priv->vbl_waiting);
+ }
+ }
+@@ -311,6 +312,31 @@ nouveau_print_bitfield_names_(uint32_t value,
+ #define nouveau_print_bitfield_names(val, namelist) \
+ nouveau_print_bitfield_names_((val), (namelist), ARRAY_SIZE(namelist))
+
++struct nouveau_enum_names {
++ uint32_t value;
++ const char *name;
++};
++
++static void
++nouveau_print_enum_names_(uint32_t value,
++ const struct nouveau_enum_names *namelist,
++ const int namelist_len)
++{
++ /*
++ * Caller must have already printed the KERN_* log level for us.
++ * Also the caller is responsible for adding the newline.
++ */
++ int i;
++ for (i = 0; i < namelist_len; ++i) {
++ if (value == namelist[i].value) {
++ printk("%s", namelist[i].name);
++ return;
++ }
++ }
++ printk("unknown value 0x%08x", value);
++}
++#define nouveau_print_enum_names(val, namelist) \
++ nouveau_print_enum_names_((val), (namelist), ARRAY_SIZE(namelist))
+
+ static int
+ nouveau_graph_chid_from_grctx(struct drm_device *dev)
+@@ -427,14 +453,16 @@ nouveau_graph_dump_trap_info(struct drm_device *dev, const char *id,
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ uint32_t nsource = trap->nsource, nstatus = trap->nstatus;
+
+- NV_INFO(dev, "%s - nSource:", id);
+- nouveau_print_bitfield_names(nsource, nsource_names);
+- printk(", nStatus:");
+- if (dev_priv->card_type < NV_10)
+- nouveau_print_bitfield_names(nstatus, nstatus_names);
+- else
+- nouveau_print_bitfield_names(nstatus, nstatus_names_nv10);
+- printk("\n");
++ if (dev_priv->card_type < NV_50) {
++ NV_INFO(dev, "%s - nSource:", id);
++ nouveau_print_bitfield_names(nsource, nsource_names);
++ printk(", nStatus:");
++ if (dev_priv->card_type < NV_10)
++ nouveau_print_bitfield_names(nstatus, nstatus_names);
++ else
++ nouveau_print_bitfield_names(nstatus, nstatus_names_nv10);
++ printk("\n");
++ }
+
+ NV_INFO(dev, "%s - Ch %d/%d Class 0x%04x Mthd 0x%04x "
+ "Data 0x%08x:0x%08x\n",
+@@ -578,27 +606,502 @@ nouveau_pgraph_irq_handler(struct drm_device *dev)
+ }
+
+ static void
++nv50_pfb_vm_trap(struct drm_device *dev, int display, const char *name)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ uint32_t trap[6];
++ int i, ch;
++ uint32_t idx = nv_rd32(dev, 0x100c90);
++ if (idx & 0x80000000) {
++ idx &= 0xffffff;
++ if (display) {
++ for (i = 0; i < 6; i++) {
++ nv_wr32(dev, 0x100c90, idx | i << 24);
++ trap[i] = nv_rd32(dev, 0x100c94);
++ }
++ for (ch = 0; ch < dev_priv->engine.fifo.channels; ch++) {
++ struct nouveau_channel *chan = dev_priv->fifos[ch];
++
++ if (!chan || !chan->ramin)
++ continue;
++
++ if (trap[1] == chan->ramin->instance >> 12)
++ break;
++ }
++ NV_INFO(dev, "%s - VM: Trapped %s at %02x%04x%04x status %08x %08x channel %d\n",
++ name, (trap[5]&0x100?"read":"write"),
++ trap[5]&0xff, trap[4]&0xffff,
++ trap[3]&0xffff, trap[0], trap[2], ch);
++ }
++ nv_wr32(dev, 0x100c90, idx | 0x80000000);
++ } else if (display) {
++ NV_INFO(dev, "%s - no VM fault?\n", name);
++ }
++}
++
++static struct nouveau_enum_names nv50_mp_exec_error_names[] =
++{
++ { 3, "STACK_UNDERFLOW" },
++ { 4, "QUADON_ACTIVE" },
++ { 8, "TIMEOUT" },
++ { 0x10, "INVALID_OPCODE" },
++ { 0x40, "BREAKPOINT" },
++};
++
++static void
++nv50_pgraph_mp_trap(struct drm_device *dev, int tpid, int display)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ uint32_t units = nv_rd32(dev, 0x1540);
++ uint32_t addr, mp10, status, pc, oplow, ophigh;
++ int i;
++ int mps = 0;
++ for (i = 0; i < 4; i++) {
++ if (!(units & 1 << (i+24)))
++ continue;
++ if (dev_priv->chipset < 0xa0)
++ addr = 0x408200 + (tpid << 12) + (i << 7);
++ else
++ addr = 0x408100 + (tpid << 11) + (i << 7);
++ mp10 = nv_rd32(dev, addr + 0x10);
++ status = nv_rd32(dev, addr + 0x14);
++ if (!status)
++ continue;
++ if (display) {
++ nv_rd32(dev, addr + 0x20);
++ pc = nv_rd32(dev, addr + 0x24);
++ oplow = nv_rd32(dev, addr + 0x70);
++ ophigh= nv_rd32(dev, addr + 0x74);
++ NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - "
++ "TP %d MP %d: ", tpid, i);
++ nouveau_print_enum_names(status,
++ nv50_mp_exec_error_names);
++ printk(" at %06x warp %d, opcode %08x %08x\n",
++ pc&0xffffff, pc >> 24,
++ oplow, ophigh);
++ }
++ nv_wr32(dev, addr + 0x10, mp10);
++ nv_wr32(dev, addr + 0x14, 0);
++ mps++;
++ }
++ if (!mps && display)
++ NV_INFO(dev, "PGRAPH_TRAP_MP_EXEC - TP %d: "
++ "No MPs claiming errors?\n", tpid);
++}
++
++static void
++nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old,
++ uint32_t ustatus_new, int display, const char *name)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ int tps = 0;
++ uint32_t units = nv_rd32(dev, 0x1540);
++ int i, r;
++ uint32_t ustatus_addr, ustatus;
++ for (i = 0; i < 16; i++) {
++ if (!(units & (1 << i)))
++ continue;
++ if (dev_priv->chipset < 0xa0)
++ ustatus_addr = ustatus_old + (i << 12);
++ else
++ ustatus_addr = ustatus_new + (i << 11);
++ ustatus = nv_rd32(dev, ustatus_addr) & 0x7fffffff;
++ if (!ustatus)
++ continue;
++ tps++;
++ switch (type) {
++ case 6: /* texture error... unknown for now */
++ nv50_pfb_vm_trap(dev, display, name);
++ if (display) {
++ NV_ERROR(dev, "magic set %d:\n", i);
++ for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4)
++ NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r,
++ nv_rd32(dev, r));
++ }
++ break;
++ case 7: /* MP error */
++ if (ustatus & 0x00010000) {
++ nv50_pgraph_mp_trap(dev, i, display);
++ ustatus &= ~0x00010000;
++ }
++ break;
++ case 8: /* TPDMA error */
++ {
++ uint32_t e0c = nv_rd32(dev, ustatus_addr + 4);
++ uint32_t e10 = nv_rd32(dev, ustatus_addr + 8);
++ uint32_t e14 = nv_rd32(dev, ustatus_addr + 0xc);
++ uint32_t e18 = nv_rd32(dev, ustatus_addr + 0x10);
++ uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14);
++ uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18);
++ uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c);
++ nv50_pfb_vm_trap(dev, display, name);
++ /* 2d engine destination */
++ if (ustatus & 0x00000010) {
++ if (display) {
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - Unknown fault at address %02x%08x\n",
++ i, e14, e10);
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_2D - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n",
++ i, e0c, e18, e1c, e20, e24);
++ }
++ ustatus &= ~0x00000010;
++ }
++ /* Render target */
++ if (ustatus & 0x00000040) {
++ if (display) {
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - Unknown fault at address %02x%08x\n",
++ i, e14, e10);
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA_RT - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n",
++ i, e0c, e18, e1c, e20, e24);
++ }
++ ustatus &= ~0x00000040;
++ }
++ /* CUDA memory: l[], g[] or stack. */
++ if (ustatus & 0x00000080) {
++ if (display) {
++ if (e18 & 0x80000000) {
++ /* g[] read fault? */
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global read fault at address %02x%08x\n",
++ i, e14, e10 | ((e18 >> 24) & 0x1f));
++ e18 &= ~0x1f000000;
++ } else if (e18 & 0xc) {
++ /* g[] write fault? */
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Global write fault at address %02x%08x\n",
++ i, e14, e10 | ((e18 >> 7) & 0x1f));
++ e18 &= ~0x00000f80;
++ } else {
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - Unknown CUDA fault at address %02x%08x\n",
++ i, e14, e10);
++ }
++ NV_INFO(dev, "PGRAPH_TRAP_TPDMA - TP %d - e0c: %08x, e18: %08x, e1c: %08x, e20: %08x, e24: %08x\n",
++ i, e0c, e18, e1c, e20, e24);
++ }
++ ustatus &= ~0x00000080;
++ }
++ }
++ break;
++ }
++ if (ustatus) {
++ if (display)
++ NV_INFO(dev, "%s - TP%d: Unhandled ustatus 0x%08x\n", name, i, ustatus);
++ }
++ nv_wr32(dev, ustatus_addr, 0xc0000000);
++ }
++
++ if (!tps && display)
++ NV_INFO(dev, "%s - No TPs claiming errors?\n", name);
++}
++
++static void
++nv50_pgraph_trap_handler(struct drm_device *dev)
++{
++ struct nouveau_pgraph_trap trap;
++ uint32_t status = nv_rd32(dev, 0x400108);
++ uint32_t ustatus;
++ int display = nouveau_ratelimit();
++
++
++ if (!status && display) {
++ nouveau_graph_trap_info(dev, &trap);
++ nouveau_graph_dump_trap_info(dev, "PGRAPH_TRAP", &trap);
++ NV_INFO(dev, "PGRAPH_TRAP - no units reporting traps?\n");
++ }
++
++ /* DISPATCH: Relays commands to other units and handles NOTIFY,
++ * COND, QUERY. If you get a trap from it, the command is still stuck
++ * in DISPATCH and you need to do something about it. */
++ if (status & 0x001) {
++ ustatus = nv_rd32(dev, 0x400804) & 0x7fffffff;
++ if (!ustatus && display) {
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH - no ustatus?\n");
++ }
++
++ /* Known to be triggered by screwed up NOTIFY and COND... */
++ if (ustatus & 0x00000001) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_FAULT");
++ nv_wr32(dev, 0x400500, 0);
++ if (nv_rd32(dev, 0x400808) & 0x80000000) {
++ if (display) {
++ if (nouveau_graph_trapped_channel(dev, &trap.channel))
++ trap.channel = -1;
++ trap.class = nv_rd32(dev, 0x400814);
++ trap.mthd = nv_rd32(dev, 0x400808) & 0x1ffc;
++ trap.subc = (nv_rd32(dev, 0x400808) >> 16) & 0x7;
++ trap.data = nv_rd32(dev, 0x40080c);
++ trap.data2 = nv_rd32(dev, 0x400810);
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_TRAP_DISPATCH_FAULT", &trap);
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - 400808: %08x\n", nv_rd32(dev, 0x400808));
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - 400848: %08x\n", nv_rd32(dev, 0x400848));
++ }
++ nv_wr32(dev, 0x400808, 0);
++ } else if (display) {
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_FAULT - No stuck command?\n");
++ }
++ nv_wr32(dev, 0x4008e8, nv_rd32(dev, 0x4008e8) & 3);
++ nv_wr32(dev, 0x400848, 0);
++ ustatus &= ~0x00000001;
++ }
++ if (ustatus & 0x00000002) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_DISPATCH_QUERY");
++ nv_wr32(dev, 0x400500, 0);
++ if (nv_rd32(dev, 0x40084c) & 0x80000000) {
++ if (display) {
++ if (nouveau_graph_trapped_channel(dev, &trap.channel))
++ trap.channel = -1;
++ trap.class = nv_rd32(dev, 0x400814);
++ trap.mthd = nv_rd32(dev, 0x40084c) & 0x1ffc;
++ trap.subc = (nv_rd32(dev, 0x40084c) >> 16) & 0x7;
++ trap.data = nv_rd32(dev, 0x40085c);
++ trap.data2 = 0;
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_TRAP_DISPATCH_QUERY", &trap);
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_QUERY - 40084c: %08x\n", nv_rd32(dev, 0x40084c));
++ }
++ nv_wr32(dev, 0x40084c, 0);
++ } else if (display) {
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH_QUERY - No stuck command?\n");
++ }
++ ustatus &= ~0x00000002;
++ }
++ if (ustatus && display)
++ NV_INFO(dev, "PGRAPH_TRAP_DISPATCH - Unhandled ustatus 0x%08x\n", ustatus);
++ nv_wr32(dev, 0x400804, 0xc0000000);
++ nv_wr32(dev, 0x400108, 0x001);
++ status &= ~0x001;
++ }
++
++ /* TRAPs other than dispatch use the "normal" trap regs. */
++ if (status && display) {
++ nouveau_graph_trap_info(dev, &trap);
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_TRAP", &trap);
++ }
++
++ /* M2MF: Memory to memory copy engine. */
++ if (status & 0x002) {
++ ustatus = nv_rd32(dev, 0x406800) & 0x7fffffff;
++ if (!ustatus && display) {
++ NV_INFO(dev, "PGRAPH_TRAP_M2MF - no ustatus?\n");
++ }
++ if (ustatus & 0x00000001) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_NOTIFY");
++ ustatus &= ~0x00000001;
++ }
++ if (ustatus & 0x00000002) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_IN");
++ ustatus &= ~0x00000002;
++ }
++ if (ustatus & 0x00000004) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_M2MF_OUT");
++ ustatus &= ~0x00000004;
++ }
++ NV_INFO (dev, "PGRAPH_TRAP_M2MF - %08x %08x %08x %08x\n",
++ nv_rd32(dev, 0x406804),
++ nv_rd32(dev, 0x406808),
++ nv_rd32(dev, 0x40680c),
++ nv_rd32(dev, 0x406810));
++ if (ustatus && display)
++ NV_INFO(dev, "PGRAPH_TRAP_M2MF - Unhandled ustatus 0x%08x\n", ustatus);
++ /* No sane way found yet -- just reset the bugger. */
++ nv_wr32(dev, 0x400040, 2);
++ nv_wr32(dev, 0x400040, 0);
++ nv_wr32(dev, 0x406800, 0xc0000000);
++ nv_wr32(dev, 0x400108, 0x002);
++ status &= ~0x002;
++ }
++
++ /* VFETCH: Fetches data from vertex buffers. */
++ if (status & 0x004) {
++ ustatus = nv_rd32(dev, 0x400c04) & 0x7fffffff;
++ if (!ustatus && display) {
++ NV_INFO(dev, "PGRAPH_TRAP_VFETCH - no ustatus?\n");
++ }
++ if (ustatus & 0x00000001) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_VFETCH_FAULT");
++ NV_INFO (dev, "PGRAPH_TRAP_VFETCH_FAULT - %08x %08x %08x %08x\n",
++ nv_rd32(dev, 0x400c00),
++ nv_rd32(dev, 0x400c08),
++ nv_rd32(dev, 0x400c0c),
++ nv_rd32(dev, 0x400c10));
++ ustatus &= ~0x00000001;
++ }
++ if (ustatus && display)
++ NV_INFO(dev, "PGRAPH_TRAP_VFETCH - Unhandled ustatus 0x%08x\n", ustatus);
++ nv_wr32(dev, 0x400c04, 0xc0000000);
++ nv_wr32(dev, 0x400108, 0x004);
++ status &= ~0x004;
++ }
++
++ /* STRMOUT: DirectX streamout / OpenGL transform feedback. */
++ if (status & 0x008) {
++ ustatus = nv_rd32(dev, 0x401800) & 0x7fffffff;
++ if (!ustatus && display) {
++ NV_INFO(dev, "PGRAPH_TRAP_STRMOUT - no ustatus?\n");
++ }
++ if (ustatus & 0x00000001) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_STRMOUT_FAULT");
++ NV_INFO (dev, "PGRAPH_TRAP_STRMOUT_FAULT - %08x %08x %08x %08x\n",
++ nv_rd32(dev, 0x401804),
++ nv_rd32(dev, 0x401808),
++ nv_rd32(dev, 0x40180c),
++ nv_rd32(dev, 0x401810));
++ ustatus &= ~0x00000001;
++ }
++ if (ustatus && display)
++ NV_INFO(dev, "PGRAPH_TRAP_STRMOUT - Unhandled ustatus 0x%08x\n", ustatus);
++ /* No sane way found yet -- just reset the bugger. */
++ nv_wr32(dev, 0x400040, 0x80);
++ nv_wr32(dev, 0x400040, 0);
++ nv_wr32(dev, 0x401800, 0xc0000000);
++ nv_wr32(dev, 0x400108, 0x008);
++ status &= ~0x008;
++ }
++
++ /* CCACHE: Handles code and c[] caches and fills them. */
++ if (status & 0x010) {
++ ustatus = nv_rd32(dev, 0x405018) & 0x7fffffff;
++ if (!ustatus && display) {
++ NV_INFO(dev, "PGRAPH_TRAP_CCACHE - no ustatus?\n");
++ }
++ if (ustatus & 0x00000001) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_CCACHE_FAULT");
++ NV_INFO (dev, "PGRAPH_TRAP_CCACHE_FAULT - %08x %08x %08x %08x %08x %08x %08x\n",
++ nv_rd32(dev, 0x405800),
++ nv_rd32(dev, 0x405804),
++ nv_rd32(dev, 0x405808),
++ nv_rd32(dev, 0x40580c),
++ nv_rd32(dev, 0x405810),
++ nv_rd32(dev, 0x405814),
++ nv_rd32(dev, 0x40581c));
++ ustatus &= ~0x00000001;
++ }
++ if (ustatus && display)
++ NV_INFO(dev, "PGRAPH_TRAP_CCACHE - Unhandled ustatus 0x%08x\n", ustatus);
++ nv_wr32(dev, 0x405018, 0xc0000000);
++ nv_wr32(dev, 0x400108, 0x010);
++ status &= ~0x010;
++ }
++
++ /* Unknown, not seen yet... 0x402000 is the only trap status reg
++ * remaining, so try to handle it anyway. Perhaps related to that
++ * unknown DMA slot on tesla? */
++ if (status & 0x20) {
++ nv50_pfb_vm_trap(dev, display, "PGRAPH_TRAP_UNKC04");
++ ustatus = nv_rd32(dev, 0x402000) & 0x7fffffff;
++ if (display)
++ NV_INFO(dev, "PGRAPH_TRAP_UNKC04 - Unhandled ustatus 0x%08x\n", ustatus);
++ nv_wr32(dev, 0x402000, 0xc0000000);
++ /* no status modifiction on purpose */
++ }
++
++ /* TEXTURE: CUDA texturing units */
++ if (status & 0x040) {
++ nv50_pgraph_tp_trap (dev, 6, 0x408900, 0x408600, display,
++ "PGRAPH_TRAP_TEXTURE");
++ nv_wr32(dev, 0x400108, 0x040);
++ status &= ~0x040;
++ }
++
++ /* MP: CUDA execution engines. */
++ if (status & 0x080) {
++ nv50_pgraph_tp_trap (dev, 7, 0x408314, 0x40831c, display,
++ "PGRAPH_TRAP_MP");
++ nv_wr32(dev, 0x400108, 0x080);
++ status &= ~0x080;
++ }
++
++ /* TPDMA: Handles TP-initiated uncached memory accesses:
++ * l[], g[], stack, 2d surfaces, render targets. */
++ if (status & 0x100) {
++ nv50_pgraph_tp_trap (dev, 8, 0x408e08, 0x408708, display,
++ "PGRAPH_TRAP_TPDMA");
++ nv_wr32(dev, 0x400108, 0x100);
++ status &= ~0x100;
++ }
++
++ if (status) {
++ if (display)
++ NV_INFO(dev, "PGRAPH_TRAP - Unknown trap 0x%08x\n",
++ status);
++ nv_wr32(dev, 0x400108, status);
++ }
++}
++
++/* There must be a *lot* of these. Will take some time to gather them up. */
++static struct nouveau_enum_names nv50_data_error_names[] =
++{
++ { 4, "INVALID_VALUE" },
++ { 5, "INVALID_ENUM" },
++ { 8, "INVALID_OBJECT" },
++ { 0xc, "INVALID_BITFIELD" },
++ { 0x28, "MP_NO_REG_SPACE" },
++ { 0x2b, "MP_BLOCK_SIZE_MISMATCH" },
++};
++
++static void
+ nv50_pgraph_irq_handler(struct drm_device *dev)
+ {
++ struct nouveau_pgraph_trap trap;
++ int unhandled = 0;
+ uint32_t status;
+
+ while ((status = nv_rd32(dev, NV03_PGRAPH_INTR))) {
+- uint32_t nsource = nv_rd32(dev, NV03_PGRAPH_NSOURCE);
+-
++ /* NOTIFY: You've set a NOTIFY an a command and it's done. */
+ if (status & 0x00000001) {
+- nouveau_pgraph_intr_notify(dev, nsource);
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_NOTIFY", &trap);
+ status &= ~0x00000001;
+ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000001);
+ }
+
+- if (status & 0x00000010) {
+- nouveau_pgraph_intr_error(dev, nsource |
+- NV03_PGRAPH_NSOURCE_ILLEGAL_MTHD);
++ /* COMPUTE_QUERY: Purpose and exact cause unknown, happens
++ * when you write 0x200 to 0x50c0 method 0x31c. */
++ if (status & 0x00000002) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_COMPUTE_QUERY", &trap);
++ status &= ~0x00000002;
++ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000002);
++ }
++
++ /* Unknown, never seen: 0x4 */
+
++ /* ILLEGAL_MTHD: You used a wrong method for this class. */
++ if (status & 0x00000010) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_pgraph_intr_swmthd(dev, &trap))
++ unhandled = 1;
++ if (unhandled && nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_ILLEGAL_MTHD", &trap);
+ status &= ~0x00000010;
+ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000010);
+ }
+
++ /* ILLEGAL_CLASS: You used a wrong class. */
++ if (status & 0x00000020) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_ILLEGAL_CLASS", &trap);
++ status &= ~0x00000020;
++ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000020);
++ }
++
++ /* DOUBLE_NOTIFY: You tried to set a NOTIFY on another NOTIFY. */
++ if (status & 0x00000040) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_DOUBLE_NOTIFY", &trap);
++ status &= ~0x00000040;
++ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00000040);
++ }
++
++ /* CONTEXT_SWITCH: PGRAPH needs us to load a new context */
+ if (status & 0x00001000) {
+ nv_wr32(dev, 0x400500, 0x00000000);
+ nv_wr32(dev, NV03_PGRAPH_INTR,
+@@ -613,49 +1116,59 @@ nv50_pgraph_irq_handler(struct drm_device *dev)
+ status &= ~NV_PGRAPH_INTR_CONTEXT_SWITCH;
+ }
+
+- if (status & 0x00100000) {
+- nouveau_pgraph_intr_error(dev, nsource |
+- NV03_PGRAPH_NSOURCE_DATA_ERROR);
++ /* BUFFER_NOTIFY: Your m2mf transfer finished */
++ if (status & 0x00010000) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_BUFFER_NOTIFY", &trap);
++ status &= ~0x00010000;
++ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00010000);
++ }
+
++ /* DATA_ERROR: Invalid value for this method, or invalid
++ * state in current PGRAPH context for this operation */
++ if (status & 0x00100000) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit()) {
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_DATA_ERROR", &trap);
++ NV_INFO (dev, "PGRAPH_DATA_ERROR - ");
++ nouveau_print_enum_names(nv_rd32(dev, 0x400110),
++ nv50_data_error_names);
++ printk("\n");
++ }
+ status &= ~0x00100000;
+ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00100000);
+ }
+
++ /* TRAP: Something bad happened in the middle of command
++ * execution. Has a billion types, subtypes, and even
++ * subsubtypes. */
+ if (status & 0x00200000) {
+- int r;
+-
+- nouveau_pgraph_intr_error(dev, nsource |
+- NV03_PGRAPH_NSOURCE_PROTECTION_ERROR);
+-
+- NV_ERROR(dev, "magic set 1:\n");
+- for (r = 0x408900; r <= 0x408910; r += 4)
+- NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r,
+- nv_rd32(dev, r));
+- nv_wr32(dev, 0x408900,
+- nv_rd32(dev, 0x408904) | 0xc0000000);
+- for (r = 0x408e08; r <= 0x408e24; r += 4)
+- NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r,
+- nv_rd32(dev, r));
+- nv_wr32(dev, 0x408e08,
+- nv_rd32(dev, 0x408e08) | 0xc0000000);
+-
+- NV_ERROR(dev, "magic set 2:\n");
+- for (r = 0x409900; r <= 0x409910; r += 4)
+- NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r,
+- nv_rd32(dev, r));
+- nv_wr32(dev, 0x409900,
+- nv_rd32(dev, 0x409904) | 0xc0000000);
+- for (r = 0x409e08; r <= 0x409e24; r += 4)
+- NV_ERROR(dev, "\t0x%08x: 0x%08x\n", r,
+- nv_rd32(dev, r));
+- nv_wr32(dev, 0x409e08,
+- nv_rd32(dev, 0x409e08) | 0xc0000000);
+-
++ nv50_pgraph_trap_handler(dev);
+ status &= ~0x00200000;
+- nv_wr32(dev, NV03_PGRAPH_NSOURCE, nsource);
+ nv_wr32(dev, NV03_PGRAPH_INTR, 0x00200000);
+ }
+
++ /* Unknown, never seen: 0x00400000 */
++
++ /* SINGLE_STEP: Happens on every method if you turned on
++ * single stepping in 40008c */
++ if (status & 0x01000000) {
++ nouveau_graph_trap_info(dev, &trap);
++ if (nouveau_ratelimit())
++ nouveau_graph_dump_trap_info(dev,
++ "PGRAPH_SINGLE_STEP", &trap);
++ status &= ~0x01000000;
++ nv_wr32(dev, NV03_PGRAPH_INTR, 0x01000000);
++ }
++
++ /* 0x02000000 happens when you pause a ctxprog...
++ * but the only way this can happen that I know is by
++ * poking the relevant MMIO register, and we don't
++ * do that. */
++
+ if (status) {
+ NV_INFO(dev, "Unhandled PGRAPH_INTR - 0x%08x\n",
+ status);
+@@ -672,7 +1185,8 @@ nv50_pgraph_irq_handler(struct drm_device *dev)
+ }
+
+ nv_wr32(dev, NV03_PMC_INTR_0, NV_PMC_INTR_0_PGRAPH_PENDING);
+- nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31));
++ if (nv_rd32(dev, 0x400824) & (1 << 31))
++ nv_wr32(dev, 0x400824, nv_rd32(dev, 0x400824) & ~(1 << 31));
+ }
+
+ static void
+@@ -691,11 +1205,14 @@ nouveau_irq_handler(DRM_IRQ_ARGS)
+ struct drm_device *dev = (struct drm_device *)arg;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ uint32_t status, fbdev_flags = 0;
++ unsigned long flags;
+
+ status = nv_rd32(dev, NV03_PMC_INTR_0);
+ if (!status)
+ return IRQ_NONE;
+
++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
++
+ if (dev_priv->fbdev_info) {
+ fbdev_flags = dev_priv->fbdev_info->flags;
+ dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED;
+@@ -733,5 +1250,7 @@ nouveau_irq_handler(DRM_IRQ_ARGS)
+ if (dev_priv->fbdev_info)
+ dev_priv->fbdev_info->flags = fbdev_flags;
+
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
++
+ return IRQ_HANDLED;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c
+index 2dc09db..816948b 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_mem.c
++++ b/drivers/gpu/drm/nouveau/nouveau_mem.c
+@@ -347,6 +347,20 @@ nv50_mem_vm_bind_linear(struct drm_device *dev, uint64_t virt, uint32_t size,
+ return -EBUSY;
+ }
+
++ nv_wr32(dev, 0x100c80, 0x00040001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
++ return -EBUSY;
++ }
++
++ nv_wr32(dev, 0x100c80, 0x00060001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
++ return -EBUSY;
++ }
++
+ return 0;
+ }
+
+@@ -387,6 +401,20 @@ nv50_mem_vm_unbind(struct drm_device *dev, uint64_t virt, uint32_t size)
+ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
+ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
+ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
++ return;
++ }
++
++ nv_wr32(dev, 0x100c80, 0x00040001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
++ return;
++ }
++
++ nv_wr32(dev, 0x100c80, 0x00060001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
+ }
+ }
+
+@@ -449,9 +477,30 @@ void nouveau_mem_close(struct drm_device *dev)
+ }
+ }
+
+-/*XXX won't work on BSD because of pci_read_config_dword */
+ static uint32_t
+-nouveau_mem_fb_amount_igp(struct drm_device *dev)
++nouveau_mem_detect_nv04(struct drm_device *dev)
++{
++ uint32_t boot0 = nv_rd32(dev, NV03_BOOT_0);
++
++ if (boot0 & 0x00000100)
++ return (((boot0 >> 12) & 0xf) * 2 + 2) * 1024 * 1024;
++
++ switch (boot0 & NV03_BOOT_0_RAM_AMOUNT) {
++ case NV04_BOOT_0_RAM_AMOUNT_32MB:
++ return 32 * 1024 * 1024;
++ case NV04_BOOT_0_RAM_AMOUNT_16MB:
++ return 16 * 1024 * 1024;
++ case NV04_BOOT_0_RAM_AMOUNT_8MB:
++ return 8 * 1024 * 1024;
++ case NV04_BOOT_0_RAM_AMOUNT_4MB:
++ return 4 * 1024 * 1024;
++ }
++
++ return 0;
++}
++
++static uint32_t
++nouveau_mem_detect_nforce(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct pci_dev *bridge;
+@@ -463,11 +512,11 @@ nouveau_mem_fb_amount_igp(struct drm_device *dev)
+ return 0;
+ }
+
+- if (dev_priv->flags&NV_NFORCE) {
++ if (dev_priv->flags & NV_NFORCE) {
+ pci_read_config_dword(bridge, 0x7C, &mem);
+ return (uint64_t)(((mem >> 6) & 31) + 1)*1024*1024;
+ } else
+- if (dev_priv->flags&NV_NFORCE2) {
++ if (dev_priv->flags & NV_NFORCE2) {
+ pci_read_config_dword(bridge, 0x84, &mem);
+ return (uint64_t)(((mem >> 4) & 127) + 1)*1024*1024;
+ }
+@@ -477,50 +526,39 @@ nouveau_mem_fb_amount_igp(struct drm_device *dev)
+ }
+
+ /* returns the amount of FB ram in bytes */
+-uint64_t nouveau_mem_fb_amount(struct drm_device *dev)
++int
++nouveau_mem_detect(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- uint32_t boot0;
+-
+- switch (dev_priv->card_type) {
+- case NV_04:
+- boot0 = nv_rd32(dev, NV03_BOOT_0);
+- if (boot0 & 0x00000100)
+- return (((boot0 >> 12) & 0xf) * 2 + 2) * 1024 * 1024;
+-
+- switch (boot0 & NV03_BOOT_0_RAM_AMOUNT) {
+- case NV04_BOOT_0_RAM_AMOUNT_32MB:
+- return 32 * 1024 * 1024;
+- case NV04_BOOT_0_RAM_AMOUNT_16MB:
+- return 16 * 1024 * 1024;
+- case NV04_BOOT_0_RAM_AMOUNT_8MB:
+- return 8 * 1024 * 1024;
+- case NV04_BOOT_0_RAM_AMOUNT_4MB:
+- return 4 * 1024 * 1024;
+- }
+- break;
+- case NV_10:
+- case NV_20:
+- case NV_30:
+- case NV_40:
+- case NV_50:
+- default:
+- if (dev_priv->flags & (NV_NFORCE | NV_NFORCE2)) {
+- return nouveau_mem_fb_amount_igp(dev);
+- } else {
+- uint64_t mem;
+- mem = (nv_rd32(dev, NV04_FIFO_DATA) &
+- NV10_FIFO_DATA_RAM_AMOUNT_MB_MASK) >>
+- NV10_FIFO_DATA_RAM_AMOUNT_MB_SHIFT;
+- return mem * 1024 * 1024;
++
++ if (dev_priv->card_type == NV_04) {
++ dev_priv->vram_size = nouveau_mem_detect_nv04(dev);
++ } else
++ if (dev_priv->flags & (NV_NFORCE | NV_NFORCE2)) {
++ dev_priv->vram_size = nouveau_mem_detect_nforce(dev);
++ } else
++ if (dev_priv->card_type < NV_50) {
++ dev_priv->vram_size = nv_rd32(dev, NV04_FIFO_DATA);
++ dev_priv->vram_size &= NV10_FIFO_DATA_RAM_AMOUNT_MB_MASK;
++ } else {
++ dev_priv->vram_size = nv_rd32(dev, NV04_FIFO_DATA);
++ dev_priv->vram_size |= (dev_priv->vram_size & 0xff) << 32;
++ dev_priv->vram_size &= 0xffffffff00;
++ if (dev_priv->chipset == 0xaa || dev_priv->chipset == 0xac) {
++ dev_priv->vram_sys_base = nv_rd32(dev, 0x100e10);
++ dev_priv->vram_sys_base <<= 12;
+ }
+- break;
+ }
+
+- NV_ERROR(dev,
+- "Unable to detect video ram size. Please report your setup to "
+- DRIVER_EMAIL "\n");
+- return 0;
++ NV_INFO(dev, "Detected %dMiB VRAM\n", (int)(dev_priv->vram_size >> 20));
++ if (dev_priv->vram_sys_base) {
++ NV_INFO(dev, "Stolen system memory at: 0x%010llx\n",
++ dev_priv->vram_sys_base);
++ }
++
++ if (dev_priv->vram_size)
++ return 0;
++ return -ENOMEM;
+ }
+
+ #if __OS_HAS_AGP
+@@ -631,15 +669,12 @@ nouveau_mem_init(struct drm_device *dev)
+ spin_lock_init(&dev_priv->ttm.bo_list_lock);
+ spin_lock_init(&dev_priv->tile.lock);
+
+- dev_priv->fb_available_size = nouveau_mem_fb_amount(dev);
+-
++ dev_priv->fb_available_size = dev_priv->vram_size;
+ dev_priv->fb_mappable_pages = dev_priv->fb_available_size;
+ if (dev_priv->fb_mappable_pages > drm_get_resource_len(dev, 1))
+ dev_priv->fb_mappable_pages = drm_get_resource_len(dev, 1);
+ dev_priv->fb_mappable_pages >>= PAGE_SHIFT;
+
+- NV_INFO(dev, "%d MiB VRAM\n", (int)(dev_priv->fb_available_size >> 20));
+-
+ /* remove reserved space at end of vram from available amount */
+ dev_priv->fb_available_size -= dev_priv->ramin_rsvd_vram;
+ dev_priv->fb_aper_free = dev_priv->fb_available_size;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_reg.h b/drivers/gpu/drm/nouveau/nouveau_reg.h
+index aa9b310..6ca80a3 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_reg.h
++++ b/drivers/gpu/drm/nouveau/nouveau_reg.h
+@@ -826,6 +826,7 @@
+ #define NV50_SOR_DP_CTRL_TRAINING_PATTERN_2 0x02000000
+ #define NV50_SOR_DP_UNK118(i,l) (0x0061c118 + (i) * 0x800 + (l) * 0x80)
+ #define NV50_SOR_DP_UNK120(i,l) (0x0061c120 + (i) * 0x800 + (l) * 0x80)
++#define NV50_SOR_DP_UNK128(i,l) (0x0061c128 + (i) * 0x800 + (l) * 0x80)
+ #define NV50_SOR_DP_UNK130(i,l) (0x0061c130 + (i) * 0x800 + (l) * 0x80)
+
+ #define NV50_PDISPLAY_USER(i) ((i) * 0x1000 + 0x00640000)
+diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+index ed15905..554fb45 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c
++++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+@@ -171,6 +171,24 @@ nouveau_sgdma_unbind(struct ttm_backend *be)
+ }
+ dev_priv->engine.instmem.finish_access(nvbe->dev);
+
++ if (dev_priv->card_type == NV_50) {
++ nv_wr32(dev, 0x100c80, 0x00050001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n",
++ nv_rd32(dev, 0x100c80));
++ return -EBUSY;
++ }
++
++ nv_wr32(dev, 0x100c80, 0x00000001);
++ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
++ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
++ NV_ERROR(dev, "0x100c80 = 0x%08x\n",
++ nv_rd32(dev, 0x100c80));
++ return -EBUSY;
++ }
++ }
++
+ nvbe->bound = false;
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
+index a8d77c8..7c1d252 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_state.c
++++ b/drivers/gpu/drm/nouveau/nouveau_state.c
+@@ -34,7 +34,6 @@
+ #include "nouveau_drm.h"
+ #include "nv50_display.h"
+
+-static int nouveau_stub_init(struct drm_device *dev) { return 0; }
+ static void nouveau_stub_takedown(struct drm_device *dev) {}
+
+ static int nouveau_init_engine_ptrs(struct drm_device *dev)
+@@ -276,8 +275,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
+ engine->timer.init = nv04_timer_init;
+ engine->timer.read = nv04_timer_read;
+ engine->timer.takedown = nv04_timer_takedown;
+- engine->fb.init = nouveau_stub_init;
+- engine->fb.takedown = nouveau_stub_takedown;
++ engine->fb.init = nv50_fb_init;
++ engine->fb.takedown = nv50_fb_takedown;
+ engine->graph.grclass = nv50_graph_grclass;
+ engine->graph.init = nv50_graph_init;
+ engine->graph.takedown = nv50_graph_takedown;
+@@ -340,7 +339,7 @@ nouveau_card_init_channel(struct drm_device *dev)
+
+ gpuobj = NULL;
+ ret = nouveau_gpuobj_dma_new(dev_priv->channel, NV_CLASS_DMA_IN_MEMORY,
+- 0, nouveau_mem_fb_amount(dev),
++ 0, dev_priv->vram_size,
+ NV_DMA_ACCESS_RW, NV_DMA_TARGET_VIDMEM,
+ &gpuobj);
+ if (ret)
+@@ -391,6 +390,7 @@ nouveau_card_init(struct drm_device *dev)
+ goto out;
+ engine = &dev_priv->engine;
+ dev_priv->init_state = NOUVEAU_CARD_INIT_FAILED;
++ spin_lock_init(&dev_priv->context_switch_lock);
+
+ /* Parse BIOS tables / Run init tables if card not POSTed */
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+@@ -399,6 +399,10 @@ nouveau_card_init(struct drm_device *dev)
+ goto out;
+ }
+
++ ret = nouveau_mem_detect(dev);
++ if (ret)
++ goto out_bios;
++
+ ret = nouveau_gpuobj_early_init(dev);
+ if (ret)
+ goto out_bios;
+@@ -474,7 +478,7 @@ nouveau_card_init(struct drm_device *dev)
+ else
+ ret = nv04_display_create(dev);
+ if (ret)
+- goto out_irq;
++ goto out_channel;
+ }
+
+ ret = nouveau_backlight_init(dev);
+@@ -488,6 +492,11 @@ nouveau_card_init(struct drm_device *dev)
+
+ return 0;
+
++out_channel:
++ if (dev_priv->channel) {
++ nouveau_channel_free(dev_priv->channel);
++ dev_priv->channel = NULL;
++ }
+ out_irq:
+ drm_irq_uninstall(dev);
+ out_fifo:
+@@ -505,6 +514,7 @@ out_mc:
+ out_gpuobj:
+ nouveau_gpuobj_takedown(dev);
+ out_mem:
++ nouveau_sgdma_takedown(dev);
+ nouveau_mem_close(dev);
+ out_instmem:
+ engine->instmem.takedown(dev);
+@@ -691,29 +701,24 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
+ NV_INFO(dev, "Detected an NV%2x generation card (0x%08x)\n",
+ dev_priv->card_type, reg0);
+
+- /* map larger RAMIN aperture on NV40 cards */
+- dev_priv->ramin = NULL;
++ /* Map PRAMIN BAR, or on older cards, the aperture withing BAR0 */
+ if (dev_priv->card_type >= NV_40) {
+ int ramin_bar = 2;
+ if (pci_resource_len(dev->pdev, ramin_bar) == 0)
+ ramin_bar = 3;
+
+ dev_priv->ramin_size = pci_resource_len(dev->pdev, ramin_bar);
+- dev_priv->ramin = ioremap(
+- pci_resource_start(dev->pdev, ramin_bar),
++ dev_priv->ramin =
++ ioremap(pci_resource_start(dev->pdev, ramin_bar),
+ dev_priv->ramin_size);
+ if (!dev_priv->ramin) {
+- NV_ERROR(dev, "Failed to init RAMIN mapping, "
+- "limited instance memory available\n");
++ NV_ERROR(dev, "Failed to PRAMIN BAR");
++ return -ENOMEM;
+ }
+- }
+-
+- /* On older cards (or if the above failed), create a map covering
+- * the BAR0 PRAMIN aperture */
+- if (!dev_priv->ramin) {
++ } else {
+ dev_priv->ramin_size = 1 * 1024 * 1024;
+ dev_priv->ramin = ioremap(mmio_start_offs + NV_RAMIN,
+- dev_priv->ramin_size);
++ dev_priv->ramin_size);
+ if (!dev_priv->ramin) {
+ NV_ERROR(dev, "Failed to map BAR0 PRAMIN.\n");
+ return -ENOMEM;
+diff --git a/drivers/gpu/drm/nouveau/nv04_crtc.c b/drivers/gpu/drm/nouveau/nv04_crtc.c
+index d2f143e..9986aba 100644
+--- a/drivers/gpu/drm/nouveau/nv04_crtc.c
++++ b/drivers/gpu/drm/nouveau/nv04_crtc.c
+@@ -230,9 +230,9 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode)
+ struct drm_framebuffer *fb = crtc->fb;
+
+ /* Calculate our timings */
+- int horizDisplay = (mode->crtc_hdisplay >> 3) - 1;
+- int horizStart = (mode->crtc_hsync_start >> 3) - 1;
+- int horizEnd = (mode->crtc_hsync_end >> 3) - 1;
++ int horizDisplay = (mode->crtc_hdisplay >> 3) - 1;
++ int horizStart = (mode->crtc_hsync_start >> 3) + 1;
++ int horizEnd = (mode->crtc_hsync_end >> 3) + 1;
+ int horizTotal = (mode->crtc_htotal >> 3) - 5;
+ int horizBlankStart = (mode->crtc_hdisplay >> 3) - 1;
+ int horizBlankEnd = (mode->crtc_htotal >> 3) - 1;
+diff --git a/drivers/gpu/drm/nouveau/nv04_dac.c b/drivers/gpu/drm/nouveau/nv04_dac.c
+index 1d73b15..8066c56 100644
+--- a/drivers/gpu/drm/nouveau/nv04_dac.c
++++ b/drivers/gpu/drm/nouveau/nv04_dac.c
+@@ -230,13 +230,13 @@ uint32_t nv17_dac_sample_load(struct drm_encoder *encoder)
+ if (dcb->type == OUTPUT_TV) {
+ testval = RGB_TEST_DATA(0xa0, 0xa0, 0xa0);
+
+- if (dev_priv->vbios->tvdactestval)
+- testval = dev_priv->vbios->tvdactestval;
++ if (dev_priv->vbios.tvdactestval)
++ testval = dev_priv->vbios.tvdactestval;
+ } else {
+ testval = RGB_TEST_DATA(0x140, 0x140, 0x140); /* 0x94050140 */
+
+- if (dev_priv->vbios->dactestval)
+- testval = dev_priv->vbios->dactestval;
++ if (dev_priv->vbios.dactestval)
++ testval = dev_priv->vbios.dactestval;
+ }
+
+ saved_rtest_ctrl = NVReadRAMDAC(dev, 0, NV_PRAMDAC_TEST_CONTROL + regoffset);
+@@ -501,11 +501,13 @@ static const struct drm_encoder_funcs nv04_dac_funcs = {
+ .destroy = nv04_dac_destroy,
+ };
+
+-int nv04_dac_create(struct drm_device *dev, struct dcb_entry *entry)
++int
++nv04_dac_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
+ const struct drm_encoder_helper_funcs *helper;
+- struct drm_encoder *encoder;
+ struct nouveau_encoder *nv_encoder = NULL;
++ struct drm_device *dev = connector->dev;
++ struct drm_encoder *encoder;
+
+ nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL);
+ if (!nv_encoder)
+@@ -527,5 +529,6 @@ int nv04_dac_create(struct drm_device *dev, struct dcb_entry *entry)
+ encoder->possible_crtcs = entry->heads;
+ encoder->possible_clones = 0;
+
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c
+index 483f875..3559d89 100644
+--- a/drivers/gpu/drm/nouveau/nv04_dfp.c
++++ b/drivers/gpu/drm/nouveau/nv04_dfp.c
+@@ -269,10 +269,10 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder,
+ regp->fp_horiz_regs[FP_TOTAL] = output_mode->htotal - 1;
+ if (!nv_gf4_disp_arch(dev) ||
+ (output_mode->hsync_start - output_mode->hdisplay) >=
+- dev_priv->vbios->digital_min_front_porch)
++ dev_priv->vbios.digital_min_front_porch)
+ regp->fp_horiz_regs[FP_CRTC] = output_mode->hdisplay;
+ else
+- regp->fp_horiz_regs[FP_CRTC] = output_mode->hsync_start - dev_priv->vbios->digital_min_front_porch - 1;
++ regp->fp_horiz_regs[FP_CRTC] = output_mode->hsync_start - dev_priv->vbios.digital_min_front_porch - 1;
+ regp->fp_horiz_regs[FP_SYNC_START] = output_mode->hsync_start - 1;
+ regp->fp_horiz_regs[FP_SYNC_END] = output_mode->hsync_end - 1;
+ regp->fp_horiz_regs[FP_VALID_START] = output_mode->hskew;
+@@ -584,11 +584,12 @@ static const struct drm_encoder_funcs nv04_dfp_funcs = {
+ .destroy = nv04_dfp_destroy,
+ };
+
+-int nv04_dfp_create(struct drm_device *dev, struct dcb_entry *entry)
++int
++nv04_dfp_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
+ const struct drm_encoder_helper_funcs *helper;
+- struct drm_encoder *encoder;
+ struct nouveau_encoder *nv_encoder = NULL;
++ struct drm_encoder *encoder;
+ int type;
+
+ switch (entry->type) {
+@@ -613,11 +614,12 @@ int nv04_dfp_create(struct drm_device *dev, struct dcb_entry *entry)
+ nv_encoder->dcb = entry;
+ nv_encoder->or = ffs(entry->or) - 1;
+
+- drm_encoder_init(dev, encoder, &nv04_dfp_funcs, type);
++ drm_encoder_init(connector->dev, encoder, &nv04_dfp_funcs, type);
+ drm_encoder_helper_add(encoder, helper);
+
+ encoder->possible_crtcs = entry->heads;
+ encoder->possible_clones = 0;
+
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv04_display.c b/drivers/gpu/drm/nouveau/nv04_display.c
+index ef77215..b35b7ed 100644
+--- a/drivers/gpu/drm/nouveau/nv04_display.c
++++ b/drivers/gpu/drm/nouveau/nv04_display.c
+@@ -93,10 +93,10 @@ int
+ nv04_display_create(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct parsed_dcb *dcb = dev_priv->vbios->dcb;
++ struct dcb_table *dcb = &dev_priv->vbios.dcb;
++ struct drm_connector *connector, *ct;
+ struct drm_encoder *encoder;
+ struct drm_crtc *crtc;
+- uint16_t connector[16] = { 0 };
+ int i, ret;
+
+ NV_DEBUG_KMS(dev, "\n");
+@@ -133,19 +133,23 @@ nv04_display_create(struct drm_device *dev)
+ for (i = 0; i < dcb->entries; i++) {
+ struct dcb_entry *dcbent = &dcb->entry[i];
+
++ connector = nouveau_connector_create(dev, dcbent->connector);
++ if (IS_ERR(connector))
++ continue;
++
+ switch (dcbent->type) {
+ case OUTPUT_ANALOG:
+- ret = nv04_dac_create(dev, dcbent);
++ ret = nv04_dac_create(connector, dcbent);
+ break;
+ case OUTPUT_LVDS:
+ case OUTPUT_TMDS:
+- ret = nv04_dfp_create(dev, dcbent);
++ ret = nv04_dfp_create(connector, dcbent);
+ break;
+ case OUTPUT_TV:
+ if (dcbent->location == DCB_LOC_ON_CHIP)
+- ret = nv17_tv_create(dev, dcbent);
++ ret = nv17_tv_create(connector, dcbent);
+ else
+- ret = nv04_tv_create(dev, dcbent);
++ ret = nv04_tv_create(connector, dcbent);
+ break;
+ default:
+ NV_WARN(dev, "DCB type %d not known\n", dcbent->type);
+@@ -154,51 +158,15 @@ nv04_display_create(struct drm_device *dev)
+
+ if (ret)
+ continue;
+-
+- connector[dcbent->connector] |= (1 << dcbent->type);
+ }
+
+- for (i = 0; i < dcb->entries; i++) {
+- struct dcb_entry *dcbent = &dcb->entry[i];
+- uint16_t encoders;
+- int type;
+-
+- encoders = connector[dcbent->connector];
+- if (!(encoders & (1 << dcbent->type)))
+- continue;
+- connector[dcbent->connector] = 0;
+-
+- switch (dcbent->type) {
+- case OUTPUT_ANALOG:
+- if (!MULTIPLE_ENCODERS(encoders))
+- type = DRM_MODE_CONNECTOR_VGA;
+- else
+- type = DRM_MODE_CONNECTOR_DVII;
+- break;
+- case OUTPUT_TMDS:
+- if (!MULTIPLE_ENCODERS(encoders))
+- type = DRM_MODE_CONNECTOR_DVID;
+- else
+- type = DRM_MODE_CONNECTOR_DVII;
+- break;
+- case OUTPUT_LVDS:
+- type = DRM_MODE_CONNECTOR_LVDS;
+-#if 0
+- /* don't create i2c adapter when lvds ddc not allowed */
+- if (dcbent->lvdsconf.use_straps_for_mode ||
+- dev_priv->vbios->fp_no_ddc)
+- i2c_index = 0xf;
+-#endif
+- break;
+- case OUTPUT_TV:
+- type = DRM_MODE_CONNECTOR_TV;
+- break;
+- default:
+- type = DRM_MODE_CONNECTOR_Unknown;
+- continue;
++ list_for_each_entry_safe(connector, ct,
++ &dev->mode_config.connector_list, head) {
++ if (!connector->encoder_ids[0]) {
++ NV_WARN(dev, "%s has no encoders, removing\n",
++ drm_get_connector_name(connector));
++ connector->funcs->destroy(connector);
+ }
+-
+- nouveau_connector_create(dev, dcbent->connector, type);
+ }
+
+ /* Save previous state */
+diff --git a/drivers/gpu/drm/nouveau/nv04_fbcon.c b/drivers/gpu/drm/nouveau/nv04_fbcon.c
+index fd01caa..813b25c 100644
+--- a/drivers/gpu/drm/nouveau/nv04_fbcon.c
++++ b/drivers/gpu/drm/nouveau/nv04_fbcon.c
+@@ -118,8 +118,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
+ return;
+ }
+
+- width = (image->width + 31) & ~31;
+- dsize = (width * image->height) >> 5;
++ width = ALIGN(image->width, 8);
++ dsize = ALIGN(width * image->height, 32) >> 5;
+
+ if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
+ info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+@@ -136,8 +136,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
+ ((image->dx + image->width) & 0xffff));
+ OUT_RING(chan, bg);
+ OUT_RING(chan, fg);
+- OUT_RING(chan, (image->height << 16) | image->width);
+ OUT_RING(chan, (image->height << 16) | width);
++ OUT_RING(chan, (image->height << 16) | image->width);
+ OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff));
+
+ while (dsize) {
+diff --git a/drivers/gpu/drm/nouveau/nv04_fifo.c b/drivers/gpu/drm/nouveau/nv04_fifo.c
+index f31347b..66fe559 100644
+--- a/drivers/gpu/drm/nouveau/nv04_fifo.c
++++ b/drivers/gpu/drm/nouveau/nv04_fifo.c
+@@ -117,6 +117,7 @@ nv04_fifo_create_context(struct nouveau_channel *chan)
+ {
+ struct drm_device *dev = chan->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ unsigned long flags;
+ int ret;
+
+ ret = nouveau_gpuobj_new_fake(dev, NV04_RAMFC(chan->id), ~0,
+@@ -127,6 +128,8 @@ nv04_fifo_create_context(struct nouveau_channel *chan)
+ if (ret)
+ return ret;
+
++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
++
+ /* Setup initial state */
+ dev_priv->engine.instmem.prepare_access(dev, true);
+ RAMFC_WR(DMA_PUT, chan->pushbuf_base);
+@@ -144,6 +147,8 @@ nv04_fifo_create_context(struct nouveau_channel *chan)
+ /* enable the fifo dma operation */
+ nv_wr32(dev, NV04_PFIFO_MODE,
+ nv_rd32(dev, NV04_PFIFO_MODE) | (1 << chan->id));
++
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nv04_graph.c b/drivers/gpu/drm/nouveau/nv04_graph.c
+index e260986..f0cbbc0 100644
+--- a/drivers/gpu/drm/nouveau/nv04_graph.c
++++ b/drivers/gpu/drm/nouveau/nv04_graph.c
+@@ -527,8 +527,7 @@ static int
+ nv04_graph_mthd_set_ref(struct nouveau_channel *chan, int grclass,
+ int mthd, uint32_t data)
+ {
+- chan->fence.last_sequence_irq = data;
+- nouveau_fence_handler(chan->dev, chan->id);
++ atomic_set(&chan->fence.last_sequence_irq, data);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nv04_tv.c b/drivers/gpu/drm/nouveau/nv04_tv.c
+index 9c63099..84b5954 100644
+--- a/drivers/gpu/drm/nouveau/nv04_tv.c
++++ b/drivers/gpu/drm/nouveau/nv04_tv.c
+@@ -223,10 +223,12 @@ static void nv04_tv_destroy(struct drm_encoder *encoder)
+ kfree(nv_encoder);
+ }
+
+-int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry)
++int
++nv04_tv_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
+ struct nouveau_encoder *nv_encoder;
+ struct drm_encoder *encoder;
++ struct drm_device *dev = connector->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct i2c_adapter *adap;
+ struct drm_encoder_funcs *funcs = NULL;
+@@ -262,11 +264,11 @@ int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry)
+ nv_encoder->or = ffs(entry->or) - 1;
+
+ /* Run the slave-specific initialization */
+- adap = &dev_priv->vbios->dcb->i2c[i2c_index].chan->adapter;
++ adap = &dev_priv->vbios.dcb.i2c[i2c_index].chan->adapter;
+
+ was_locked = NVLockVgaCrtcs(dev, false);
+
+- ret = drm_i2c_encoder_init(encoder->dev, to_encoder_slave(encoder), adap,
++ ret = drm_i2c_encoder_init(dev, to_encoder_slave(encoder), adap,
+ &nv04_tv_encoder_info[type].board_info);
+
+ NVLockVgaCrtcs(dev, was_locked);
+@@ -294,7 +296,9 @@ int nv04_tv_create(struct drm_device *dev, struct dcb_entry *entry)
+
+ /* Set the slave encoder configuration */
+ sfuncs->set_config(encoder, nv04_tv_encoder_info[type].params);
++ sfuncs->create_resources(encoder, connector);
+
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+
+ fail:
+diff --git a/drivers/gpu/drm/nouveau/nv17_tv.c b/drivers/gpu/drm/nouveau/nv17_tv.c
+index 21ac6e4..44437ff 100644
+--- a/drivers/gpu/drm/nouveau/nv17_tv.c
++++ b/drivers/gpu/drm/nouveau/nv17_tv.c
+@@ -45,8 +45,8 @@ static uint32_t nv42_tv_sample_load(struct drm_encoder *encoder)
+
+ #define RGB_TEST_DATA(r, g, b) (r << 0 | g << 10 | b << 20)
+ testval = RGB_TEST_DATA(0x82, 0xeb, 0x82);
+- if (dev_priv->vbios->tvdactestval)
+- testval = dev_priv->vbios->tvdactestval;
++ if (dev_priv->vbios.tvdactestval)
++ testval = dev_priv->vbios.tvdactestval;
+
+ dacclk = NVReadRAMDAC(dev, 0, NV_PRAMDAC_DACCLK + regoffset);
+ head = (dacclk & 0x100) >> 8;
+@@ -367,7 +367,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
+ !enc->crtc &&
+ nv04_dfp_get_bound_head(dev, dcb) == head) {
+ nv04_dfp_bind_head(dev, dcb, head ^ 1,
+- dev_priv->VBIOS.fp.dual_link);
++ dev_priv->vbios.fp.dual_link);
+ }
+ }
+
+@@ -744,8 +744,10 @@ static struct drm_encoder_funcs nv17_tv_funcs = {
+ .destroy = nv17_tv_destroy,
+ };
+
+-int nv17_tv_create(struct drm_device *dev, struct dcb_entry *entry)
++int
++nv17_tv_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
++ struct drm_device *dev = connector->dev;
+ struct drm_encoder *encoder;
+ struct nv17_tv_encoder *tv_enc = NULL;
+
+@@ -774,5 +776,7 @@ int nv17_tv_create(struct drm_device *dev, struct dcb_entry *entry)
+ encoder->possible_crtcs = entry->heads;
+ encoder->possible_clones = 0;
+
++ nv17_tv_create_resources(encoder, connector);
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv40_fifo.c b/drivers/gpu/drm/nouveau/nv40_fifo.c
+index b4f19cc..500ccfd 100644
+--- a/drivers/gpu/drm/nouveau/nv40_fifo.c
++++ b/drivers/gpu/drm/nouveau/nv40_fifo.c
+@@ -37,6 +37,7 @@ nv40_fifo_create_context(struct nouveau_channel *chan)
+ struct drm_device *dev = chan->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ uint32_t fc = NV40_RAMFC(chan->id);
++ unsigned long flags;
+ int ret;
+
+ ret = nouveau_gpuobj_new_fake(dev, NV40_RAMFC(chan->id), ~0,
+@@ -45,6 +46,8 @@ nv40_fifo_create_context(struct nouveau_channel *chan)
+ if (ret)
+ return ret;
+
++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
++
+ dev_priv->engine.instmem.prepare_access(dev, true);
+ nv_wi32(dev, fc + 0, chan->pushbuf_base);
+ nv_wi32(dev, fc + 4, chan->pushbuf_base);
+@@ -63,6 +66,8 @@ nv40_fifo_create_context(struct nouveau_channel *chan)
+ /* enable the fifo dma operation */
+ nv_wr32(dev, NV04_PFIFO_MODE,
+ nv_rd32(dev, NV04_PFIFO_MODE) | (1 << chan->id));
++
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
+ return 0;
+ }
+
+@@ -273,7 +278,7 @@ nv40_fifo_init_ramxx(struct drm_device *dev)
+ default:
+ nv_wr32(dev, 0x2230, 0);
+ nv_wr32(dev, NV40_PFIFO_RAMFC,
+- ((nouveau_mem_fb_amount(dev) - 512 * 1024 +
++ ((dev_priv->vram_size - 512 * 1024 +
+ dev_priv->ramfc_offset) >> 16) | (3 << 16));
+ break;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv40_graph.c b/drivers/gpu/drm/nouveau/nv40_graph.c
+index 53e8afe..0616c96 100644
+--- a/drivers/gpu/drm/nouveau/nv40_graph.c
++++ b/drivers/gpu/drm/nouveau/nv40_graph.c
+@@ -335,6 +335,27 @@ nv40_graph_init(struct drm_device *dev)
+ nv_wr32(dev, 0x400b38, 0x2ffff800);
+ nv_wr32(dev, 0x400b3c, 0x00006000);
+
++ /* Tiling related stuff. */
++ switch (dev_priv->chipset) {
++ case 0x44:
++ case 0x4a:
++ nv_wr32(dev, 0x400bc4, 0x1003d888);
++ nv_wr32(dev, 0x400bbc, 0xb7a7b500);
++ break;
++ case 0x46:
++ nv_wr32(dev, 0x400bc4, 0x0000e024);
++ nv_wr32(dev, 0x400bbc, 0xb7a7b520);
++ break;
++ case 0x4c:
++ case 0x4e:
++ case 0x67:
++ nv_wr32(dev, 0x400bc4, 0x1003d888);
++ nv_wr32(dev, 0x400bbc, 0xb7a7b540);
++ break;
++ default:
++ break;
++ }
++
+ /* Turn all the tiling regions off. */
+ for (i = 0; i < pfb->num_tiles; i++)
+ nv40_graph_set_region_tiling(dev, i, 0, 0, 0);
+diff --git a/drivers/gpu/drm/nouveau/nv50_calc.c b/drivers/gpu/drm/nouveau/nv50_calc.c
+new file mode 100644
+index 0000000..2cdc2bf
+--- /dev/null
++++ b/drivers/gpu/drm/nouveau/nv50_calc.c
+@@ -0,0 +1,87 @@
++/*
++ * Copyright 2010 Red Hat Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Ben Skeggs
++ */
++
++#include "drmP.h"
++#include "drm_fixed.h"
++#include "nouveau_drv.h"
++#include "nouveau_hw.h"
++
++int
++nv50_calc_pll(struct drm_device *dev, struct pll_lims *pll, int clk,
++ int *N1, int *M1, int *N2, int *M2, int *P)
++{
++ struct nouveau_pll_vals pll_vals;
++ int ret;
++
++ ret = nouveau_calc_pll_mnp(dev, pll, clk, &pll_vals);
++ if (ret <= 0)
++ return ret;
++
++ *N1 = pll_vals.N1;
++ *M1 = pll_vals.M1;
++ *N2 = pll_vals.N2;
++ *M2 = pll_vals.M2;
++ *P = pll_vals.log2P;
++ return ret;
++}
++
++int
++nv50_calc_pll2(struct drm_device *dev, struct pll_lims *pll, int clk,
++ int *N, int *fN, int *M, int *P)
++{
++ fixed20_12 fb_div, a, b;
++
++ *P = pll->vco1.maxfreq / clk;
++ if (*P > pll->max_p)
++ *P = pll->max_p;
++ if (*P < pll->min_p)
++ *P = pll->min_p;
++
++ /* *M = ceil(refclk / pll->vco.max_inputfreq); */
++ a.full = dfixed_const(pll->refclk);
++ b.full = dfixed_const(pll->vco1.max_inputfreq);
++ a.full = dfixed_div(a, b);
++ a.full = dfixed_ceil(a);
++ *M = dfixed_trunc(a);
++
++ /* fb_div = (vco * *M) / refclk; */
++ fb_div.full = dfixed_const(clk * *P);
++ fb_div.full = dfixed_mul(fb_div, a);
++ a.full = dfixed_const(pll->refclk);
++ fb_div.full = dfixed_div(fb_div, a);
++
++ /* *N = floor(fb_div); */
++ a.full = dfixed_floor(fb_div);
++ *N = dfixed_trunc(fb_div);
++
++ /* *fN = (fmod(fb_div, 1.0) * 8192) - 4096; */
++ b.full = dfixed_const(8192);
++ a.full = dfixed_mul(a, b);
++ fb_div.full = dfixed_mul(fb_div, b);
++ fb_div.full = fb_div.full - a.full;
++ *fN = dfixed_trunc(fb_div) - 4096;
++ *fN &= 0xffff;
++
++ return clk;
++}
+diff --git a/drivers/gpu/drm/nouveau/nv50_crtc.c b/drivers/gpu/drm/nouveau/nv50_crtc.c
+index d1a651e..03d0e41 100644
+--- a/drivers/gpu/drm/nouveau/nv50_crtc.c
++++ b/drivers/gpu/drm/nouveau/nv50_crtc.c
+@@ -264,32 +264,40 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update)
+ int
+ nv50_crtc_set_clock(struct drm_device *dev, int head, int pclk)
+ {
+- uint32_t pll_reg = NV50_PDISPLAY_CRTC_CLK_CTRL1(head);
+- struct nouveau_pll_vals pll;
+- struct pll_lims limits;
++ uint32_t reg = NV50_PDISPLAY_CRTC_CLK_CTRL1(head);
++ struct pll_lims pll;
+ uint32_t reg1, reg2;
+- int ret;
++ int ret, N1, M1, N2, M2, P;
+
+- ret = get_pll_limits(dev, pll_reg, &limits);
++ ret = get_pll_limits(dev, reg, &pll);
+ if (ret)
+ return ret;
+
+- ret = nouveau_calc_pll_mnp(dev, &limits, pclk, &pll);
+- if (ret <= 0)
+- return ret;
++ if (pll.vco2.maxfreq) {
++ ret = nv50_calc_pll(dev, &pll, pclk, &N1, &M1, &N2, &M2, &P);
++ if (ret <= 0)
++ return 0;
++
++ NV_DEBUG(dev, "pclk %d out %d NM1 %d %d NM2 %d %d P %d\n",
++ pclk, ret, N1, M1, N2, M2, P);
+
+- if (limits.vco2.maxfreq) {
+- reg1 = nv_rd32(dev, pll_reg + 4) & 0xff00ff00;
+- reg2 = nv_rd32(dev, pll_reg + 8) & 0x8000ff00;
+- nv_wr32(dev, pll_reg, 0x10000611);
+- nv_wr32(dev, pll_reg + 4, reg1 | (pll.M1 << 16) | pll.N1);
+- nv_wr32(dev, pll_reg + 8,
+- reg2 | (pll.log2P << 28) | (pll.M2 << 16) | pll.N2);
++ reg1 = nv_rd32(dev, reg + 4) & 0xff00ff00;
++ reg2 = nv_rd32(dev, reg + 8) & 0x8000ff00;
++ nv_wr32(dev, reg, 0x10000611);
++ nv_wr32(dev, reg + 4, reg1 | (M1 << 16) | N1);
++ nv_wr32(dev, reg + 8, reg2 | (P << 28) | (M2 << 16) | N2);
+ } else {
+- reg1 = nv_rd32(dev, pll_reg + 4) & 0xffc00000;
+- nv_wr32(dev, pll_reg, 0x50000610);
+- nv_wr32(dev, pll_reg + 4, reg1 |
+- (pll.log2P << 16) | (pll.M1 << 8) | pll.N1);
++ ret = nv50_calc_pll2(dev, &pll, pclk, &N1, &N2, &M1, &P);
++ if (ret <= 0)
++ return 0;
++
++ NV_DEBUG(dev, "pclk %d out %d N %d fN 0x%04x M %d P %d\n",
++ pclk, ret, N1, N2, M1, P);
++
++ reg1 = nv_rd32(dev, reg + 4) & 0xffc00000;
++ nv_wr32(dev, reg, 0x50000610);
++ nv_wr32(dev, reg + 4, reg1 | (P << 16) | (M1 << 8) | N1);
++ nv_wr32(dev, reg + 8, N2);
+ }
+
+ return 0;
+diff --git a/drivers/gpu/drm/nouveau/nv50_dac.c b/drivers/gpu/drm/nouveau/nv50_dac.c
+index f08f042..e114f81 100644
+--- a/drivers/gpu/drm/nouveau/nv50_dac.c
++++ b/drivers/gpu/drm/nouveau/nv50_dac.c
+@@ -79,8 +79,8 @@ nv50_dac_detect(struct drm_encoder *encoder, struct drm_connector *connector)
+ }
+
+ /* Use bios provided value if possible. */
+- if (dev_priv->vbios->dactestval) {
+- load_pattern = dev_priv->vbios->dactestval;
++ if (dev_priv->vbios.dactestval) {
++ load_pattern = dev_priv->vbios.dactestval;
+ NV_DEBUG_KMS(dev, "Using bios provided load_pattern of %d\n",
+ load_pattern);
+ } else {
+@@ -275,14 +275,11 @@ static const struct drm_encoder_funcs nv50_dac_encoder_funcs = {
+ };
+
+ int
+-nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry)
++nv50_dac_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
+ struct nouveau_encoder *nv_encoder;
+ struct drm_encoder *encoder;
+
+- NV_DEBUG_KMS(dev, "\n");
+- NV_INFO(dev, "Detected a DAC output\n");
+-
+ nv_encoder = kzalloc(sizeof(*nv_encoder), GFP_KERNEL);
+ if (!nv_encoder)
+ return -ENOMEM;
+@@ -293,12 +290,14 @@ nv50_dac_create(struct drm_device *dev, struct dcb_entry *entry)
+
+ nv_encoder->disconnect = nv50_dac_disconnect;
+
+- drm_encoder_init(dev, encoder, &nv50_dac_encoder_funcs,
++ drm_encoder_init(connector->dev, encoder, &nv50_dac_encoder_funcs,
+ DRM_MODE_ENCODER_DAC);
+ drm_encoder_helper_add(encoder, &nv50_dac_helper_funcs);
+
+ encoder->possible_crtcs = entry->heads;
+ encoder->possible_clones = 0;
++
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
+index 90f0bf5..a0d7467 100644
+--- a/drivers/gpu/drm/nouveau/nv50_display.c
++++ b/drivers/gpu/drm/nouveau/nv50_display.c
+@@ -143,7 +143,7 @@ nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pchan)
+ }
+
+ ret = nv50_evo_dmaobj_new(chan, 0x3d, NvEvoVRAM, 0, 0x19,
+- 0, nouveau_mem_fb_amount(dev));
++ 0, dev_priv->vram_size);
+ if (ret) {
+ nv50_evo_channel_del(pchan);
+ return ret;
+@@ -231,7 +231,7 @@ nv50_display_init(struct drm_device *dev)
+ /* This used to be in crtc unblank, but seems out of place there. */
+ nv_wr32(dev, NV50_PDISPLAY_UNK_380, 0);
+ /* RAM is clamped to 256 MiB. */
+- ram_amount = nouveau_mem_fb_amount(dev);
++ ram_amount = dev_priv->vram_size;
+ NV_DEBUG_KMS(dev, "ram_amount %d\n", ram_amount);
+ if (ram_amount > 256*1024*1024)
+ ram_amount = 256*1024*1024;
+@@ -370,9 +370,7 @@ nv50_display_init(struct drm_device *dev)
+ struct nouveau_connector *conn = nouveau_connector(connector);
+ struct dcb_gpio_entry *gpio;
+
+- if (connector->connector_type != DRM_MODE_CONNECTOR_DVII &&
+- connector->connector_type != DRM_MODE_CONNECTOR_DVID &&
+- connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
++ if (conn->dcb->gpio_tag == 0xff)
+ continue;
+
+ gpio = nouveau_bios_gpio_entry(dev, conn->dcb->gpio_tag);
+@@ -465,8 +463,8 @@ static int nv50_display_disable(struct drm_device *dev)
+ int nv50_display_create(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- struct parsed_dcb *dcb = dev_priv->vbios->dcb;
+- uint32_t connector[16] = {};
++ struct dcb_table *dcb = &dev_priv->vbios.dcb;
++ struct drm_connector *connector, *ct;
+ int ret, i;
+
+ NV_DEBUG_KMS(dev, "\n");
+@@ -509,62 +507,39 @@ int nv50_display_create(struct drm_device *dev)
+ continue;
+ }
+
++ connector = nouveau_connector_create(dev, entry->connector);
++ if (IS_ERR(connector))
++ continue;
++
+ switch (entry->type) {
+ case OUTPUT_TMDS:
+ case OUTPUT_LVDS:
+ case OUTPUT_DP:
+- nv50_sor_create(dev, entry);
++ nv50_sor_create(connector, entry);
+ break;
+ case OUTPUT_ANALOG:
+- nv50_dac_create(dev, entry);
++ nv50_dac_create(connector, entry);
+ break;
+ default:
+ NV_WARN(dev, "DCB encoder %d unknown\n", entry->type);
+ continue;
+ }
+-
+- connector[entry->connector] |= (1 << entry->type);
+ }
+
+- /* It appears that DCB 3.0+ VBIOS has a connector table, however,
+- * I'm not 100% certain how to decode it correctly yet so just
+- * look at what encoders are present on each connector index and
+- * attempt to derive the connector type from that.
+- */
+- for (i = 0 ; i < dcb->entries; i++) {
+- struct dcb_entry *entry = &dcb->entry[i];
+- uint16_t encoders;
+- int type;
+-
+- encoders = connector[entry->connector];
+- if (!(encoders & (1 << entry->type)))
+- continue;
+- connector[entry->connector] = 0;
+-
+- if (encoders & (1 << OUTPUT_DP)) {
+- type = DRM_MODE_CONNECTOR_DisplayPort;
+- } else if (encoders & (1 << OUTPUT_TMDS)) {
+- if (encoders & (1 << OUTPUT_ANALOG))
+- type = DRM_MODE_CONNECTOR_DVII;
+- else
+- type = DRM_MODE_CONNECTOR_DVID;
+- } else if (encoders & (1 << OUTPUT_ANALOG)) {
+- type = DRM_MODE_CONNECTOR_VGA;
+- } else if (encoders & (1 << OUTPUT_LVDS)) {
+- type = DRM_MODE_CONNECTOR_LVDS;
+- } else {
+- type = DRM_MODE_CONNECTOR_Unknown;
++ list_for_each_entry_safe(connector, ct,
++ &dev->mode_config.connector_list, head) {
++ if (!connector->encoder_ids[0]) {
++ NV_WARN(dev, "%s has no encoders, removing\n",
++ drm_get_connector_name(connector));
++ connector->funcs->destroy(connector);
+ }
+-
+- if (type == DRM_MODE_CONNECTOR_Unknown)
+- continue;
+-
+- nouveau_connector_create(dev, entry->connector, type);
+ }
+
+ ret = nv50_display_init(dev);
+- if (ret)
++ if (ret) {
++ nv50_display_destroy(dev);
+ return ret;
++ }
+
+ return 0;
+ }
+@@ -667,8 +642,8 @@ nv50_display_irq_head(struct drm_device *dev, int *phead,
+ return -1;
+ }
+
+- for (i = 0; i < dev_priv->vbios->dcb->entries; i++) {
+- struct dcb_entry *dcbent = &dev_priv->vbios->dcb->entry[i];
++ for (i = 0; i < dev_priv->vbios.dcb.entries; i++) {
++ struct dcb_entry *dcbent = &dev_priv->vbios.dcb.entry[i];
+
+ if (dcbent->type != type)
+ continue;
+@@ -692,7 +667,7 @@ nv50_display_script_select(struct drm_device *dev, struct dcb_entry *dcbent,
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_connector *nv_connector = NULL;
+ struct drm_encoder *encoder;
+- struct nvbios *bios = &dev_priv->VBIOS;
++ struct nvbios *bios = &dev_priv->vbios;
+ uint32_t mc, script = 0, or;
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+@@ -710,7 +685,7 @@ nv50_display_script_select(struct drm_device *dev, struct dcb_entry *dcbent,
+ switch (dcbent->type) {
+ case OUTPUT_LVDS:
+ script = (mc >> 8) & 0xf;
+- if (bios->pub.fp_no_ddc) {
++ if (bios->fp_no_ddc) {
+ if (bios->fp.dual_link)
+ script |= 0x0100;
+ if (bios->fp.if_is_24bit)
+@@ -815,6 +790,37 @@ ack:
+ }
+
+ static void
++nv50_display_unk20_dp_hack(struct drm_device *dev, struct dcb_entry *dcb)
++{
++ int or = ffs(dcb->or) - 1, link = !(dcb->dpconf.sor.link & 1);
++ struct drm_encoder *encoder;
++ uint32_t tmp, unk0 = 0, unk1 = 0;
++
++ if (dcb->type != OUTPUT_DP)
++ return;
++
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
++
++ if (nv_encoder->dcb == dcb) {
++ unk0 = nv_encoder->dp.unk0;
++ unk1 = nv_encoder->dp.unk1;
++ break;
++ }
++ }
++
++ if (unk0 || unk1) {
++ tmp = nv_rd32(dev, NV50_SOR_DP_CTRL(or, link));
++ tmp &= 0xfffffe03;
++ nv_wr32(dev, NV50_SOR_DP_CTRL(or, link), tmp | unk0);
++
++ tmp = nv_rd32(dev, NV50_SOR_DP_UNK128(or, link));
++ tmp &= 0xfef080c0;
++ nv_wr32(dev, NV50_SOR_DP_UNK128(or, link), tmp | unk1);
++ }
++}
++
++static void
+ nv50_display_unk20_handler(struct drm_device *dev)
+ {
+ struct dcb_entry *dcbent;
+@@ -837,6 +843,8 @@ nv50_display_unk20_handler(struct drm_device *dev)
+
+ nouveau_bios_run_display_table(dev, dcbent, script, pclk);
+
++ nv50_display_unk20_dp_hack(dev, dcbent);
++
+ tmp = nv_rd32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head));
+ tmp &= ~0x000000f;
+ nv_wr32(dev, NV50_PDISPLAY_CRTC_CLK_CTRL2(head), tmp);
+@@ -919,10 +927,12 @@ nv50_display_error_handler(struct drm_device *dev)
+ nv_wr32(dev, NV50_PDISPLAY_TRAPPED_ADDR, 0x90000000);
+ }
+
+-static void
+-nv50_display_irq_hotplug(struct drm_device *dev)
++void
++nv50_display_irq_hotplug_bh(struct work_struct *work)
+ {
+- struct drm_nouveau_private *dev_priv = dev->dev_private;
++ struct drm_nouveau_private *dev_priv =
++ container_of(work, struct drm_nouveau_private, hpd_work);
++ struct drm_device *dev = dev_priv->dev;
+ struct drm_connector *connector;
+ const uint32_t gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 };
+ uint32_t unplug_mask, plug_mask, change_mask;
+@@ -975,6 +985,8 @@ nv50_display_irq_hotplug(struct drm_device *dev)
+ nv_wr32(dev, 0xe054, nv_rd32(dev, 0xe054));
+ if (dev_priv->chipset >= 0x90)
+ nv_wr32(dev, 0xe074, nv_rd32(dev, 0xe074));
++
++ drm_sysfs_hotplug_event(dev);
+ }
+
+ void
+@@ -983,8 +995,10 @@ nv50_display_irq_handler(struct drm_device *dev)
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ uint32_t delayed = 0;
+
+- while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG)
+- nv50_display_irq_hotplug(dev);
++ if (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_HOTPLUG) {
++ if (!work_pending(&dev_priv->hpd_work))
++ queue_work(dev_priv->wq, &dev_priv->hpd_work);
++ }
+
+ while (nv_rd32(dev, NV50_PMC_INTR_0) & NV50_PMC_INTR_0_DISPLAY) {
+ uint32_t intr0 = nv_rd32(dev, NV50_PDISPLAY_INTR_0);
+diff --git a/drivers/gpu/drm/nouveau/nv50_display.h b/drivers/gpu/drm/nouveau/nv50_display.h
+index 3ae8d07..581d405 100644
+--- a/drivers/gpu/drm/nouveau/nv50_display.h
++++ b/drivers/gpu/drm/nouveau/nv50_display.h
+@@ -37,6 +37,7 @@
+
+ void nv50_display_irq_handler(struct drm_device *dev);
+ void nv50_display_irq_handler_bh(struct work_struct *work);
++void nv50_display_irq_hotplug_bh(struct work_struct *work);
+ int nv50_display_init(struct drm_device *dev);
+ int nv50_display_create(struct drm_device *dev);
+ int nv50_display_destroy(struct drm_device *dev);
+diff --git a/drivers/gpu/drm/nouveau/nv50_fb.c b/drivers/gpu/drm/nouveau/nv50_fb.c
+new file mode 100644
+index 0000000..32611bd
+--- /dev/null
++++ b/drivers/gpu/drm/nouveau/nv50_fb.c
+@@ -0,0 +1,38 @@
++#include "drmP.h"
++#include "drm.h"
++#include "nouveau_drv.h"
++#include "nouveau_drm.h"
++
++int
++nv50_fb_init(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++
++ /* Not a clue what this is exactly. Without pointing it at a
++ * scratch page, VRAM->GART blits with M2MF (as in DDX DFS)
++ * cause IOMMU "read from address 0" errors (rh#561267)
++ */
++ nv_wr32(dev, 0x100c08, dev_priv->gart_info.sg_dummy_bus >> 8);
++
++ /* This is needed to get meaningful information from 100c90
++ * on traps. No idea what these values mean exactly. */
++ switch (dev_priv->chipset) {
++ case 0x50:
++ nv_wr32(dev, 0x100c90, 0x0707ff);
++ break;
++ case 0xa5:
++ case 0xa8:
++ nv_wr32(dev, 0x100c90, 0x0d0fff);
++ break;
++ default:
++ nv_wr32(dev, 0x100c90, 0x1d07ff);
++ break;
++ }
++
++ return 0;
++}
++
++void
++nv50_fb_takedown(struct drm_device *dev)
++{
++}
+diff --git a/drivers/gpu/drm/nouveau/nv50_fbcon.c b/drivers/gpu/drm/nouveau/nv50_fbcon.c
+index 0f57cdf..a8c70e7 100644
+--- a/drivers/gpu/drm/nouveau/nv50_fbcon.c
++++ b/drivers/gpu/drm/nouveau/nv50_fbcon.c
+@@ -109,7 +109,7 @@ nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
+ return;
+ }
+
+- width = (image->width + 31) & ~31;
++ width = ALIGN(image->width, 32);
+ dwords = (width * image->height) >> 5;
+
+ BEGIN_RING(chan, NvSub2D, 0x0814, 2);
+@@ -157,8 +157,11 @@ nv50_fbcon_accel_init(struct fb_info *info)
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_channel *chan = dev_priv->channel;
+ struct nouveau_gpuobj *eng2d = NULL;
++ uint64_t fb;
+ int ret, format;
+
++ fb = info->fix.smem_start - dev_priv->fb_phys + dev_priv->vm_vram_base;
++
+ switch (info->var.bits_per_pixel) {
+ case 8:
+ format = 0xf3;
+@@ -233,7 +236,7 @@ nv50_fbcon_accel_init(struct fb_info *info)
+ BEGIN_RING(chan, NvSub2D, 0x0808, 3);
+ OUT_RING(chan, 0);
+ OUT_RING(chan, 0);
+- OUT_RING(chan, 0);
++ OUT_RING(chan, 1);
+ BEGIN_RING(chan, NvSub2D, 0x081c, 1);
+ OUT_RING(chan, 1);
+ BEGIN_RING(chan, NvSub2D, 0x0840, 4);
+@@ -248,9 +251,8 @@ nv50_fbcon_accel_init(struct fb_info *info)
+ OUT_RING(chan, info->fix.line_length);
+ OUT_RING(chan, info->var.xres_virtual);
+ OUT_RING(chan, info->var.yres_virtual);
+- OUT_RING(chan, 0);
+- OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys +
+- dev_priv->vm_vram_base);
++ OUT_RING(chan, upper_32_bits(fb));
++ OUT_RING(chan, lower_32_bits(fb));
+ BEGIN_RING(chan, NvSub2D, 0x0230, 2);
+ OUT_RING(chan, format);
+ OUT_RING(chan, 1);
+@@ -258,9 +260,8 @@ nv50_fbcon_accel_init(struct fb_info *info)
+ OUT_RING(chan, info->fix.line_length);
+ OUT_RING(chan, info->var.xres_virtual);
+ OUT_RING(chan, info->var.yres_virtual);
+- OUT_RING(chan, 0);
+- OUT_RING(chan, info->fix.smem_start - dev_priv->fb_phys +
+- dev_priv->vm_vram_base);
++ OUT_RING(chan, upper_32_bits(fb));
++ OUT_RING(chan, lower_32_bits(fb));
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c
+index df5335a..e20c0e2 100644
+--- a/drivers/gpu/drm/nouveau/nv50_fifo.c
++++ b/drivers/gpu/drm/nouveau/nv50_fifo.c
+@@ -243,6 +243,7 @@ nv50_fifo_create_context(struct nouveau_channel *chan)
+ struct drm_device *dev = chan->dev;
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_gpuobj *ramfc = NULL;
++ unsigned long flags;
+ int ret;
+
+ NV_DEBUG(dev, "ch%d\n", chan->id);
+@@ -278,6 +279,8 @@ nv50_fifo_create_context(struct nouveau_channel *chan)
+ return ret;
+ }
+
++ spin_lock_irqsave(&dev_priv->context_switch_lock, flags);
++
+ dev_priv->engine.instmem.prepare_access(dev, true);
+
+ nv_wo32(dev, ramfc, 0x48/4, chan->pushbuf->instance >> 4);
+@@ -306,10 +309,12 @@ nv50_fifo_create_context(struct nouveau_channel *chan)
+ ret = nv50_fifo_channel_enable(dev, chan->id, false);
+ if (ret) {
+ NV_ERROR(dev, "error enabling ch%d: %d\n", chan->id, ret);
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
+ nouveau_gpuobj_ref_del(dev, &chan->ramfc);
+ return ret;
+ }
+
++ spin_unlock_irqrestore(&dev_priv->context_switch_lock, flags);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nv50_gpio.c b/drivers/gpu/drm/nouveau/nv50_gpio.c
+new file mode 100644
+index 0000000..c61782b
+--- /dev/null
++++ b/drivers/gpu/drm/nouveau/nv50_gpio.c
+@@ -0,0 +1,76 @@
++/*
++ * Copyright 2010 Red Hat Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Ben Skeggs
++ */
++
++#include "drmP.h"
++#include "nouveau_drv.h"
++#include "nouveau_hw.h"
++
++static int
++nv50_gpio_location(struct dcb_gpio_entry *gpio, uint32_t *reg, uint32_t *shift)
++{
++ const uint32_t nv50_gpio_reg[4] = { 0xe104, 0xe108, 0xe280, 0xe284 };
++
++ if (gpio->line > 32)
++ return -EINVAL;
++
++ *reg = nv50_gpio_reg[gpio->line >> 3];
++ *shift = (gpio->line & 7) << 2;
++ return 0;
++}
++
++int
++nv50_gpio_get(struct drm_device *dev, enum dcb_gpio_tag tag)
++{
++ struct dcb_gpio_entry *gpio;
++ uint32_t r, s, v;
++
++ gpio = nouveau_bios_gpio_entry(dev, tag);
++ if (!gpio)
++ return -ENOENT;
++
++ if (nv50_gpio_location(gpio, &r, &s))
++ return -EINVAL;
++
++ v = nv_rd32(dev, r) >> (s + 2);
++ return ((v & 1) == (gpio->state[1] & 1));
++}
++
++int
++nv50_gpio_set(struct drm_device *dev, enum dcb_gpio_tag tag, int state)
++{
++ struct dcb_gpio_entry *gpio;
++ uint32_t r, s, v;
++
++ gpio = nouveau_bios_gpio_entry(dev, tag);
++ if (!gpio)
++ return -ENOENT;
++
++ if (nv50_gpio_location(gpio, &r, &s))
++ return -EINVAL;
++
++ v = nv_rd32(dev, r) & ~(0x3 << s);
++ v |= (gpio->state[state] ^ 2) << s;
++ nv_wr32(dev, r, v);
++ return 0;
++}
+diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
+index 6d50480..b203d06 100644
+--- a/drivers/gpu/drm/nouveau/nv50_graph.c
++++ b/drivers/gpu/drm/nouveau/nv50_graph.c
+@@ -28,7 +28,7 @@
+ #include "drm.h"
+ #include "nouveau_drv.h"
+
+-/*(DEBLOBBED)*/
++#include "nouveau_grctx.h"
+
+ #define IS_G80 ((dev_priv->chipset & 0xf0) == 0x50)
+
+@@ -79,6 +56,10 @@ nv50_graph_init_intr(struct drm_device *dev)
+ static void
+ nv50_graph_init_regs__nv(struct drm_device *dev)
+ {
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ uint32_t units = nv_rd32(dev, 0x1540);
++ int i;
++
+ NV_DEBUG(dev, "\n");
+
+ nv_wr32(dev, 0x400804, 0xc0000000);
+@@ -88,6 +69,20 @@ nv50_graph_init_regs__nv(struct drm_device *dev)
+ nv_wr32(dev, 0x405018, 0xc0000000);
+ nv_wr32(dev, 0x402000, 0xc0000000);
+
++ for (i = 0; i < 16; i++) {
++ if (units & 1 << i) {
++ if (dev_priv->chipset < 0xa0) {
++ nv_wr32(dev, 0x408900 + (i << 12), 0xc0000000);
++ nv_wr32(dev, 0x408e08 + (i << 12), 0xc0000000);
++ nv_wr32(dev, 0x408314 + (i << 12), 0xc0000000);
++ } else {
++ nv_wr32(dev, 0x408600 + (i << 11), 0xc0000000);
++ nv_wr32(dev, 0x408708 + (i << 11), 0xc0000000);
++ nv_wr32(dev, 0x40831c + (i << 11), 0xc0000000);
++ }
++ }
++ }
++
+ nv_wr32(dev, 0x400108, 0xffffffff);
+
+ nv_wr32(dev, 0x400824, 0x00004000);
+@@ -111,9 +106,34 @@ nv50_graph_init_ctxctl(struct drm_device *dev)
+
+ NV_DEBUG(dev, "\n");
+
+- nouveau_grctx_prog_load(dev);
+- if (!dev_priv->engine.graph.ctxprog)
+- dev_priv->engine.graph.accel_blocked = true;
++ if (nouveau_ctxfw) {
++ nouveau_grctx_prog_load(dev);
++ dev_priv->engine.graph.grctx_size = 0x70000;
++ }
++ if (!dev_priv->engine.graph.ctxprog) {
++ struct nouveau_grctx ctx = {};
++ uint32_t *cp = kmalloc(512 * 4, GFP_KERNEL);
++ int i;
++ if (!cp) {
++ NV_ERROR(dev, "Couldn't alloc ctxprog! Disabling acceleration.\n");
++ dev_priv->engine.graph.accel_blocked = true;
++ return 0;
++ }
++ ctx.dev = dev;
++ ctx.mode = NOUVEAU_GRCTX_PROG;
++ ctx.data = cp;
++ ctx.ctxprog_max = 512;
++ if (!nv50_grctx_init(&ctx)) {
++ dev_priv->engine.graph.grctx_size = ctx.ctxvals_pos * 4;
++
++ nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_INDEX, 0);
++ for (i = 0; i < ctx.ctxprog_len; i++)
++ nv_wr32(dev, NV40_PGRAPH_CTXCTL_UCODE_DATA, cp[i]);
++ } else {
++ dev_priv->engine.graph.accel_blocked = true;
++ }
++ kfree(cp);
++ }
+
+ nv_wr32(dev, 0x400320, 4);
+ nv_wr32(dev, NV40_PGRAPH_CTXCTL_CUR, 0);
+@@ -193,13 +213,13 @@ nv50_graph_create_context(struct nouveau_channel *chan)
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_gpuobj *ramin = chan->ramin->gpuobj;
+ struct nouveau_gpuobj *ctx;
+- uint32_t grctx_size = 0x70000;
++ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph;
+ int hdr, ret;
+
+ NV_DEBUG(dev, "ch%d\n", chan->id);
+
+- ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, grctx_size, 0x1000,
+- NVOBJ_FLAG_ZERO_ALLOC |
++ ret = nouveau_gpuobj_new_ref(dev, chan, NULL, 0, pgraph->grctx_size,
++ 0x1000, NVOBJ_FLAG_ZERO_ALLOC |
+ NVOBJ_FLAG_ZERO_FREE, &chan->ramin_grctx);
+ if (ret)
+ return ret;
+@@ -209,7 +229,7 @@ nv50_graph_create_context(struct nouveau_channel *chan)
+ dev_priv->engine.instmem.prepare_access(dev, true);
+ nv_wo32(dev, ramin, (hdr + 0x00)/4, 0x00190002);
+ nv_wo32(dev, ramin, (hdr + 0x04)/4, chan->ramin_grctx->instance +
+- grctx_size - 1);
++ pgraph->grctx_size - 1);
+ nv_wo32(dev, ramin, (hdr + 0x08)/4, chan->ramin_grctx->instance);
+ nv_wo32(dev, ramin, (hdr + 0x0c)/4, 0);
+ nv_wo32(dev, ramin, (hdr + 0x10)/4, 0);
+@@ -217,12 +237,16 @@ nv50_graph_create_context(struct nouveau_channel *chan)
+ dev_priv->engine.instmem.finish_access(dev);
+
+ dev_priv->engine.instmem.prepare_access(dev, true);
+- nouveau_grctx_vals_load(dev, ctx);
++ if (!pgraph->ctxprog) {
++ struct nouveau_grctx ctx = {};
++ ctx.dev = chan->dev;
++ ctx.mode = NOUVEAU_GRCTX_VALS;
++ ctx.data = chan->ramin_grctx->gpuobj;
++ nv50_grctx_init(&ctx);
++ } else {
++ nouveau_grctx_vals_load(dev, ctx);
++ }
+ nv_wo32(dev, ctx, 0x00000/4, chan->ramin->instance >> 12);
+- if ((dev_priv->chipset & 0xf0) == 0xa0)
+- nv_wo32(dev, ctx, 0x00004/4, 0x00000000);
+- else
+- nv_wo32(dev, ctx, 0x0011c/4, 0x00000000);
+ dev_priv->engine.instmem.finish_access(dev);
+
+ return 0;
+@@ -386,9 +410,10 @@ struct nouveau_pgraph_object_class nv50_graph_grclass[] = {
+ { 0x5039, false, NULL }, /* m2mf */
+ { 0x502d, false, NULL }, /* 2d */
+ { 0x50c0, false, NULL }, /* compute */
++ { 0x85c0, false, NULL }, /* compute (nva3, nva5, nva8) */
+ { 0x5097, false, NULL }, /* tesla (nv50) */
+- { 0x8297, false, NULL }, /* tesla (nv80/nv90) */
+- { 0x8397, false, NULL }, /* tesla (nva0) */
+- { 0x8597, false, NULL }, /* tesla (nva8) */
++ { 0x8297, false, NULL }, /* tesla (nv8x/nv9x) */
++ { 0x8397, false, NULL }, /* tesla (nva0, nvaa, nvac) */
++ { 0x8597, false, NULL }, /* tesla (nva3, nva5, nva8) */
+ {}
+ };
+diff --git a/drivers/gpu/drm/nouveau/nv50_grctx.c b/drivers/gpu/drm/nouveau/nv50_grctx.c
+new file mode 100644
+index 0000000..42a8fb2
+--- /dev/null
++++ b/drivers/gpu/drm/nouveau/nv50_grctx.c
+@@ -0,0 +1,2383 @@
++/*
++ * Copyright 2009 Marcin Kościelnicki
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++#define CP_FLAG_CLEAR 0
++#define CP_FLAG_SET 1
++#define CP_FLAG_SWAP_DIRECTION ((0 * 32) + 0)
++#define CP_FLAG_SWAP_DIRECTION_LOAD 0
++#define CP_FLAG_SWAP_DIRECTION_SAVE 1
++#define CP_FLAG_UNK01 ((0 * 32) + 1)
++#define CP_FLAG_UNK01_CLEAR 0
++#define CP_FLAG_UNK01_SET 1
++#define CP_FLAG_UNK03 ((0 * 32) + 3)
++#define CP_FLAG_UNK03_CLEAR 0
++#define CP_FLAG_UNK03_SET 1
++#define CP_FLAG_USER_SAVE ((0 * 32) + 5)
++#define CP_FLAG_USER_SAVE_NOT_PENDING 0
++#define CP_FLAG_USER_SAVE_PENDING 1
++#define CP_FLAG_USER_LOAD ((0 * 32) + 6)
++#define CP_FLAG_USER_LOAD_NOT_PENDING 0
++#define CP_FLAG_USER_LOAD_PENDING 1
++#define CP_FLAG_UNK0B ((0 * 32) + 0xb)
++#define CP_FLAG_UNK0B_CLEAR 0
++#define CP_FLAG_UNK0B_SET 1
++#define CP_FLAG_UNK1D ((0 * 32) + 0x1d)
++#define CP_FLAG_UNK1D_CLEAR 0
++#define CP_FLAG_UNK1D_SET 1
++#define CP_FLAG_UNK20 ((1 * 32) + 0)
++#define CP_FLAG_UNK20_CLEAR 0
++#define CP_FLAG_UNK20_SET 1
++#define CP_FLAG_STATUS ((2 * 32) + 0)
++#define CP_FLAG_STATUS_BUSY 0
++#define CP_FLAG_STATUS_IDLE 1
++#define CP_FLAG_AUTO_SAVE ((2 * 32) + 4)
++#define CP_FLAG_AUTO_SAVE_NOT_PENDING 0
++#define CP_FLAG_AUTO_SAVE_PENDING 1
++#define CP_FLAG_AUTO_LOAD ((2 * 32) + 5)
++#define CP_FLAG_AUTO_LOAD_NOT_PENDING 0
++#define CP_FLAG_AUTO_LOAD_PENDING 1
++#define CP_FLAG_NEWCTX ((2 * 32) + 10)
++#define CP_FLAG_NEWCTX_BUSY 0
++#define CP_FLAG_NEWCTX_DONE 1
++#define CP_FLAG_XFER ((2 * 32) + 11)
++#define CP_FLAG_XFER_IDLE 0
++#define CP_FLAG_XFER_BUSY 1
++#define CP_FLAG_ALWAYS ((2 * 32) + 13)
++#define CP_FLAG_ALWAYS_FALSE 0
++#define CP_FLAG_ALWAYS_TRUE 1
++#define CP_FLAG_INTR ((2 * 32) + 15)
++#define CP_FLAG_INTR_NOT_PENDING 0
++#define CP_FLAG_INTR_PENDING 1
++
++#define CP_CTX 0x00100000
++#define CP_CTX_COUNT 0x000f0000
++#define CP_CTX_COUNT_SHIFT 16
++#define CP_CTX_REG 0x00003fff
++#define CP_LOAD_SR 0x00200000
++#define CP_LOAD_SR_VALUE 0x000fffff
++#define CP_BRA 0x00400000
++#define CP_BRA_IP 0x0001ff00
++#define CP_BRA_IP_SHIFT 8
++#define CP_BRA_IF_CLEAR 0x00000080
++#define CP_BRA_FLAG 0x0000007f
++#define CP_WAIT 0x00500000
++#define CP_WAIT_SET 0x00000080
++#define CP_WAIT_FLAG 0x0000007f
++#define CP_SET 0x00700000
++#define CP_SET_1 0x00000080
++#define CP_SET_FLAG 0x0000007f
++#define CP_NEWCTX 0x00600004
++#define CP_NEXT_TO_SWAP 0x00600005
++#define CP_SET_CONTEXT_POINTER 0x00600006
++#define CP_SET_XFER_POINTER 0x00600007
++#define CP_ENABLE 0x00600009
++#define CP_END 0x0060000c
++#define CP_NEXT_TO_CURRENT 0x0060000d
++#define CP_DISABLE1 0x0090ffff
++#define CP_DISABLE2 0x0091ffff
++#define CP_XFER_1 0x008000ff
++#define CP_XFER_2 0x008800ff
++#define CP_SEEK_1 0x00c000ff
++#define CP_SEEK_2 0x00c800ff
++
++#include "drmP.h"
++#include "nouveau_drv.h"
++#include "nouveau_grctx.h"
++
++/*
++ * This code deals with PGRAPH contexts on NV50 family cards. Like NV40, it's
++ * the GPU itself that does context-switching, but it needs a special
++ * microcode to do it. And it's the driver's task to supply this microcode,
++ * further known as ctxprog, as well as the initial context values, known
++ * as ctxvals.
++ *
++ * Without ctxprog, you cannot switch contexts. Not even in software, since
++ * the majority of context [xfer strands] isn't accessible directly. You're
++ * stuck with a single channel, and you also suffer all the problems resulting
++ * from missing ctxvals, since you cannot load them.
++ *
++ * Without ctxvals, you're stuck with PGRAPH's default context. It's enough to
++ * run 2d operations, but trying to utilise 3d or CUDA will just lock you up,
++ * since you don't have... some sort of needed setup.
++ *
++ * Nouveau will just disable acceleration if not given ctxprog + ctxvals, since
++ * it's too much hassle to handle no-ctxprog as a special case.
++ */
++
++/*
++ * How ctxprogs work.
++ *
++ * The ctxprog is written in its own kind of microcode, with very small and
++ * crappy set of available commands. You upload it to a small [512 insns]
++ * area of memory on PGRAPH, and it'll be run when PFIFO wants PGRAPH to
++ * switch channel. or when the driver explicitely requests it. Stuff visible
++ * to ctxprog consists of: PGRAPH MMIO registers, PGRAPH context strands,
++ * the per-channel context save area in VRAM [known as ctxvals or grctx],
++ * 4 flags registers, a scratch register, two grctx pointers, plus many
++ * random poorly-understood details.
++ *
++ * When ctxprog runs, it's supposed to check what operations are asked of it,
++ * save old context if requested, optionally reset PGRAPH and switch to the
++ * new channel, and load the new context. Context consists of three major
++ * parts: subset of MMIO registers and two "xfer areas".
++ */
++
++/* TODO:
++ * - document unimplemented bits compared to nvidia
++ * - NVAx: make a TP subroutine, use it.
++ * - use 0x4008fc instead of 0x1540?
++ */
++
++enum cp_label {
++ cp_check_load = 1,
++ cp_setup_auto_load,
++ cp_setup_load,
++ cp_setup_save,
++ cp_swap_state,
++ cp_prepare_exit,
++ cp_exit,
++};
++
++static void nv50_graph_construct_mmio(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_xfer1(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_xfer2(struct nouveau_grctx *ctx);
++
++/* Main function: construct the ctxprog skeleton, call the other functions. */
++
++int
++nv50_grctx_init(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++
++ switch (dev_priv->chipset) {
++ case 0x50:
++ case 0x84:
++ case 0x86:
++ case 0x92:
++ case 0x94:
++ case 0x96:
++ case 0x98:
++ case 0xa0:
++ case 0xa3:
++ case 0xa5:
++ case 0xa8:
++ case 0xaa:
++ case 0xac:
++ break;
++ default:
++ NV_ERROR(ctx->dev, "I don't know how to make a ctxprog for "
++ "your NV%x card.\n", dev_priv->chipset);
++ NV_ERROR(ctx->dev, "Disabling acceleration. Please contact "
++ "the devs.\n");
++ return -ENOSYS;
++ }
++ /* decide whether we're loading/unloading the context */
++ cp_bra (ctx, AUTO_SAVE, PENDING, cp_setup_save);
++ cp_bra (ctx, USER_SAVE, PENDING, cp_setup_save);
++
++ cp_name(ctx, cp_check_load);
++ cp_bra (ctx, AUTO_LOAD, PENDING, cp_setup_auto_load);
++ cp_bra (ctx, USER_LOAD, PENDING, cp_setup_load);
++ cp_bra (ctx, ALWAYS, TRUE, cp_exit);
++
++ /* setup for context load */
++ cp_name(ctx, cp_setup_auto_load);
++ cp_out (ctx, CP_DISABLE1);
++ cp_out (ctx, CP_DISABLE2);
++ cp_out (ctx, CP_ENABLE);
++ cp_out (ctx, CP_NEXT_TO_SWAP);
++ cp_set (ctx, UNK01, SET);
++ cp_name(ctx, cp_setup_load);
++ cp_out (ctx, CP_NEWCTX);
++ cp_wait(ctx, NEWCTX, BUSY);
++ cp_set (ctx, UNK1D, CLEAR);
++ cp_set (ctx, SWAP_DIRECTION, LOAD);
++ cp_bra (ctx, UNK0B, SET, cp_prepare_exit);
++ cp_bra (ctx, ALWAYS, TRUE, cp_swap_state);
++
++ /* setup for context save */
++ cp_name(ctx, cp_setup_save);
++ cp_set (ctx, UNK1D, SET);
++ cp_wait(ctx, STATUS, BUSY);
++ cp_wait(ctx, INTR, PENDING);
++ cp_bra (ctx, STATUS, BUSY, cp_setup_save);
++ cp_set (ctx, UNK01, SET);
++ cp_set (ctx, SWAP_DIRECTION, SAVE);
++
++ /* general PGRAPH state */
++ cp_name(ctx, cp_swap_state);
++ cp_set (ctx, UNK03, SET);
++ cp_pos (ctx, 0x00004/4);
++ cp_ctx (ctx, 0x400828, 1); /* needed. otherwise, flickering happens. */
++ cp_pos (ctx, 0x00100/4);
++ nv50_graph_construct_mmio(ctx);
++ nv50_graph_construct_xfer1(ctx);
++ nv50_graph_construct_xfer2(ctx);
++
++ cp_bra (ctx, SWAP_DIRECTION, SAVE, cp_check_load);
++
++ cp_set (ctx, UNK20, SET);
++ cp_set (ctx, SWAP_DIRECTION, SAVE); /* no idea why this is needed, but fixes at least one lockup. */
++ cp_lsr (ctx, ctx->ctxvals_base);
++ cp_out (ctx, CP_SET_XFER_POINTER);
++ cp_lsr (ctx, 4);
++ cp_out (ctx, CP_SEEK_1);
++ cp_out (ctx, CP_XFER_1);
++ cp_wait(ctx, XFER, BUSY);
++
++ /* pre-exit state updates */
++ cp_name(ctx, cp_prepare_exit);
++ cp_set (ctx, UNK01, CLEAR);
++ cp_set (ctx, UNK03, CLEAR);
++ cp_set (ctx, UNK1D, CLEAR);
++
++ cp_bra (ctx, USER_SAVE, PENDING, cp_exit);
++ cp_out (ctx, CP_NEXT_TO_CURRENT);
++
++ cp_name(ctx, cp_exit);
++ cp_set (ctx, USER_SAVE, NOT_PENDING);
++ cp_set (ctx, USER_LOAD, NOT_PENDING);
++ cp_out (ctx, CP_END);
++ ctx->ctxvals_pos += 0x400; /* padding... no idea why you need it */
++
++ return 0;
++}
++
++/*
++ * Constructs MMIO part of ctxprog and ctxvals. Just a matter of knowing which
++ * registers to save/restore and the default values for them.
++ */
++
++static void
++nv50_graph_construct_mmio(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int i, j;
++ int offset, base;
++ uint32_t units = nv_rd32 (ctx->dev, 0x1540);
++
++ /* 0800: DISPATCH */
++ cp_ctx(ctx, 0x400808, 7);
++ gr_def(ctx, 0x400814, 0x00000030);
++ cp_ctx(ctx, 0x400834, 0x32);
++ if (dev_priv->chipset == 0x50) {
++ gr_def(ctx, 0x400834, 0xff400040);
++ gr_def(ctx, 0x400838, 0xfff00080);
++ gr_def(ctx, 0x40083c, 0xfff70090);
++ gr_def(ctx, 0x400840, 0xffe806a8);
++ }
++ gr_def(ctx, 0x400844, 0x00000002);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ gr_def(ctx, 0x400894, 0x00001000);
++ gr_def(ctx, 0x4008e8, 0x00000003);
++ gr_def(ctx, 0x4008ec, 0x00001000);
++ if (dev_priv->chipset == 0x50)
++ cp_ctx(ctx, 0x400908, 0xb);
++ else if (dev_priv->chipset < 0xa0)
++ cp_ctx(ctx, 0x400908, 0xc);
++ else
++ cp_ctx(ctx, 0x400908, 0xe);
++
++ if (dev_priv->chipset >= 0xa0)
++ cp_ctx(ctx, 0x400b00, 0x1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ cp_ctx(ctx, 0x400b10, 0x1);
++ gr_def(ctx, 0x400b10, 0x0001629d);
++ cp_ctx(ctx, 0x400b20, 0x1);
++ gr_def(ctx, 0x400b20, 0x0001629d);
++ }
++
++ /* 0C00: VFETCH */
++ cp_ctx(ctx, 0x400c08, 0x2);
++ gr_def(ctx, 0x400c08, 0x0000fe0c);
++
++ /* 1000 */
++ if (dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, 0x401008, 0x4);
++ gr_def(ctx, 0x401014, 0x00001000);
++ } else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa) {
++ cp_ctx(ctx, 0x401008, 0x5);
++ gr_def(ctx, 0x401018, 0x00001000);
++ } else {
++ cp_ctx(ctx, 0x401008, 0x5);
++ gr_def(ctx, 0x401018, 0x00004000);
++ }
++
++ /* 1400 */
++ cp_ctx(ctx, 0x401400, 0x8);
++ cp_ctx(ctx, 0x401424, 0x3);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, 0x40142c, 0x0001fd87);
++ else
++ gr_def(ctx, 0x40142c, 0x00000187);
++ cp_ctx(ctx, 0x401540, 0x5);
++ gr_def(ctx, 0x401550, 0x00001018);
++
++ /* 1800: STREAMOUT */
++ cp_ctx(ctx, 0x401814, 0x1);
++ gr_def(ctx, 0x401814, 0x000000ff);
++ if (dev_priv->chipset == 0x50) {
++ cp_ctx(ctx, 0x40181c, 0xe);
++ gr_def(ctx, 0x401850, 0x00000004);
++ } else if (dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, 0x40181c, 0xf);
++ gr_def(ctx, 0x401854, 0x00000004);
++ } else {
++ cp_ctx(ctx, 0x40181c, 0x13);
++ gr_def(ctx, 0x401864, 0x00000004);
++ }
++
++ /* 1C00 */
++ cp_ctx(ctx, 0x401c00, 0x1);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ gr_def(ctx, 0x401c00, 0x0001005f);
++ break;
++ case 0x84:
++ case 0x86:
++ case 0x94:
++ gr_def(ctx, 0x401c00, 0x044d00df);
++ break;
++ case 0x92:
++ case 0x96:
++ case 0x98:
++ case 0xa0:
++ case 0xaa:
++ case 0xac:
++ gr_def(ctx, 0x401c00, 0x042500df);
++ break;
++ case 0xa3:
++ case 0xa5:
++ case 0xa8:
++ gr_def(ctx, 0x401c00, 0x142500df);
++ break;
++ }
++
++ /* 2400 */
++ cp_ctx(ctx, 0x402400, 0x1);
++ if (dev_priv->chipset == 0x50)
++ cp_ctx(ctx, 0x402408, 0x1);
++ else
++ cp_ctx(ctx, 0x402408, 0x2);
++ gr_def(ctx, 0x402408, 0x00000600);
++
++ /* 2800 */
++ cp_ctx(ctx, 0x402800, 0x1);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, 0x402800, 0x00000006);
++
++ /* 2C00 */
++ cp_ctx(ctx, 0x402c08, 0x6);
++ if (dev_priv->chipset != 0x50)
++ gr_def(ctx, 0x402c14, 0x01000000);
++ gr_def(ctx, 0x402c18, 0x000000ff);
++ if (dev_priv->chipset == 0x50)
++ cp_ctx(ctx, 0x402ca0, 0x1);
++ else
++ cp_ctx(ctx, 0x402ca0, 0x2);
++ if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, 0x402ca0, 0x00000400);
++ else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa)
++ gr_def(ctx, 0x402ca0, 0x00000800);
++ else
++ gr_def(ctx, 0x402ca0, 0x00000400);
++ cp_ctx(ctx, 0x402cac, 0x4);
++
++ /* 3000 */
++ cp_ctx(ctx, 0x403004, 0x1);
++ gr_def(ctx, 0x403004, 0x00000001);
++
++ /* 3404 */
++ if (dev_priv->chipset >= 0xa0) {
++ cp_ctx(ctx, 0x403404, 0x1);
++ gr_def(ctx, 0x403404, 0x00000001);
++ }
++
++ /* 5000 */
++ cp_ctx(ctx, 0x405000, 0x1);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ gr_def(ctx, 0x405000, 0x00300080);
++ break;
++ case 0x84:
++ case 0xa0:
++ case 0xa3:
++ case 0xa5:
++ case 0xa8:
++ case 0xaa:
++ case 0xac:
++ gr_def(ctx, 0x405000, 0x000e0080);
++ break;
++ case 0x86:
++ case 0x92:
++ case 0x94:
++ case 0x96:
++ case 0x98:
++ gr_def(ctx, 0x405000, 0x00000080);
++ break;
++ }
++ cp_ctx(ctx, 0x405014, 0x1);
++ gr_def(ctx, 0x405014, 0x00000004);
++ cp_ctx(ctx, 0x40501c, 0x1);
++ cp_ctx(ctx, 0x405024, 0x1);
++ cp_ctx(ctx, 0x40502c, 0x1);
++
++ /* 5400 or maybe 4800 */
++ if (dev_priv->chipset == 0x50) {
++ offset = 0x405400;
++ cp_ctx(ctx, 0x405400, 0xea);
++ } else if (dev_priv->chipset < 0x94) {
++ offset = 0x405400;
++ cp_ctx(ctx, 0x405400, 0xcb);
++ } else if (dev_priv->chipset < 0xa0) {
++ offset = 0x405400;
++ cp_ctx(ctx, 0x405400, 0xcc);
++ } else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ offset = 0x404800;
++ cp_ctx(ctx, 0x404800, 0xda);
++ } else {
++ offset = 0x405400;
++ cp_ctx(ctx, 0x405400, 0xd4);
++ }
++ gr_def(ctx, offset + 0x0c, 0x00000002);
++ gr_def(ctx, offset + 0x10, 0x00000001);
++ if (dev_priv->chipset >= 0x94)
++ offset += 4;
++ gr_def(ctx, offset + 0x1c, 0x00000001);
++ gr_def(ctx, offset + 0x20, 0x00000100);
++ gr_def(ctx, offset + 0x38, 0x00000002);
++ gr_def(ctx, offset + 0x3c, 0x00000001);
++ gr_def(ctx, offset + 0x40, 0x00000001);
++ gr_def(ctx, offset + 0x50, 0x00000001);
++ gr_def(ctx, offset + 0x54, 0x003fffff);
++ gr_def(ctx, offset + 0x58, 0x00001fff);
++ gr_def(ctx, offset + 0x60, 0x00000001);
++ gr_def(ctx, offset + 0x64, 0x00000001);
++ gr_def(ctx, offset + 0x6c, 0x00000001);
++ gr_def(ctx, offset + 0x70, 0x00000001);
++ gr_def(ctx, offset + 0x74, 0x00000001);
++ gr_def(ctx, offset + 0x78, 0x00000004);
++ gr_def(ctx, offset + 0x7c, 0x00000001);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ offset += 4;
++ gr_def(ctx, offset + 0x80, 0x00000001);
++ gr_def(ctx, offset + 0x84, 0x00000001);
++ gr_def(ctx, offset + 0x88, 0x00000007);
++ gr_def(ctx, offset + 0x8c, 0x00000001);
++ gr_def(ctx, offset + 0x90, 0x00000007);
++ gr_def(ctx, offset + 0x94, 0x00000001);
++ gr_def(ctx, offset + 0x98, 0x00000001);
++ gr_def(ctx, offset + 0x9c, 0x00000001);
++ if (dev_priv->chipset == 0x50) {
++ gr_def(ctx, offset + 0xb0, 0x00000001);
++ gr_def(ctx, offset + 0xb4, 0x00000001);
++ gr_def(ctx, offset + 0xbc, 0x00000001);
++ gr_def(ctx, offset + 0xc0, 0x0000000a);
++ gr_def(ctx, offset + 0xd0, 0x00000040);
++ gr_def(ctx, offset + 0xd8, 0x00000002);
++ gr_def(ctx, offset + 0xdc, 0x00000100);
++ gr_def(ctx, offset + 0xe0, 0x00000001);
++ gr_def(ctx, offset + 0xe4, 0x00000100);
++ gr_def(ctx, offset + 0x100, 0x00000001);
++ gr_def(ctx, offset + 0x124, 0x00000004);
++ gr_def(ctx, offset + 0x13c, 0x00000001);
++ gr_def(ctx, offset + 0x140, 0x00000100);
++ gr_def(ctx, offset + 0x148, 0x00000001);
++ gr_def(ctx, offset + 0x154, 0x00000100);
++ gr_def(ctx, offset + 0x158, 0x00000001);
++ gr_def(ctx, offset + 0x15c, 0x00000100);
++ gr_def(ctx, offset + 0x164, 0x00000001);
++ gr_def(ctx, offset + 0x170, 0x00000100);
++ gr_def(ctx, offset + 0x174, 0x00000001);
++ gr_def(ctx, offset + 0x17c, 0x00000001);
++ gr_def(ctx, offset + 0x188, 0x00000002);
++ gr_def(ctx, offset + 0x190, 0x00000001);
++ gr_def(ctx, offset + 0x198, 0x00000001);
++ gr_def(ctx, offset + 0x1ac, 0x00000003);
++ offset += 0xd0;
++ } else {
++ gr_def(ctx, offset + 0xb0, 0x00000001);
++ gr_def(ctx, offset + 0xb4, 0x00000100);
++ gr_def(ctx, offset + 0xbc, 0x00000001);
++ gr_def(ctx, offset + 0xc8, 0x00000100);
++ gr_def(ctx, offset + 0xcc, 0x00000001);
++ gr_def(ctx, offset + 0xd0, 0x00000100);
++ gr_def(ctx, offset + 0xd8, 0x00000001);
++ gr_def(ctx, offset + 0xe4, 0x00000100);
++ }
++ gr_def(ctx, offset + 0xf8, 0x00000004);
++ gr_def(ctx, offset + 0xfc, 0x00000070);
++ gr_def(ctx, offset + 0x100, 0x00000080);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ offset += 4;
++ gr_def(ctx, offset + 0x114, 0x0000000c);
++ if (dev_priv->chipset == 0x50)
++ offset -= 4;
++ gr_def(ctx, offset + 0x11c, 0x00000008);
++ gr_def(ctx, offset + 0x120, 0x00000014);
++ if (dev_priv->chipset == 0x50) {
++ gr_def(ctx, offset + 0x124, 0x00000026);
++ offset -= 0x18;
++ } else {
++ gr_def(ctx, offset + 0x128, 0x00000029);
++ gr_def(ctx, offset + 0x12c, 0x00000027);
++ gr_def(ctx, offset + 0x130, 0x00000026);
++ gr_def(ctx, offset + 0x134, 0x00000008);
++ gr_def(ctx, offset + 0x138, 0x00000004);
++ gr_def(ctx, offset + 0x13c, 0x00000027);
++ }
++ gr_def(ctx, offset + 0x148, 0x00000001);
++ gr_def(ctx, offset + 0x14c, 0x00000002);
++ gr_def(ctx, offset + 0x150, 0x00000003);
++ gr_def(ctx, offset + 0x154, 0x00000004);
++ gr_def(ctx, offset + 0x158, 0x00000005);
++ gr_def(ctx, offset + 0x15c, 0x00000006);
++ gr_def(ctx, offset + 0x160, 0x00000007);
++ gr_def(ctx, offset + 0x164, 0x00000001);
++ gr_def(ctx, offset + 0x1a8, 0x000000cf);
++ if (dev_priv->chipset == 0x50)
++ offset -= 4;
++ gr_def(ctx, offset + 0x1d8, 0x00000080);
++ gr_def(ctx, offset + 0x1dc, 0x00000004);
++ gr_def(ctx, offset + 0x1e0, 0x00000004);
++ if (dev_priv->chipset == 0x50)
++ offset -= 4;
++ else
++ gr_def(ctx, offset + 0x1e4, 0x00000003);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ gr_def(ctx, offset + 0x1ec, 0x00000003);
++ offset += 8;
++ }
++ gr_def(ctx, offset + 0x1e8, 0x00000001);
++ if (dev_priv->chipset == 0x50)
++ offset -= 4;
++ gr_def(ctx, offset + 0x1f4, 0x00000012);
++ gr_def(ctx, offset + 0x1f8, 0x00000010);
++ gr_def(ctx, offset + 0x1fc, 0x0000000c);
++ gr_def(ctx, offset + 0x200, 0x00000001);
++ gr_def(ctx, offset + 0x210, 0x00000004);
++ gr_def(ctx, offset + 0x214, 0x00000002);
++ gr_def(ctx, offset + 0x218, 0x00000004);
++ if (dev_priv->chipset >= 0xa0)
++ offset += 4;
++ gr_def(ctx, offset + 0x224, 0x003fffff);
++ gr_def(ctx, offset + 0x228, 0x00001fff);
++ if (dev_priv->chipset == 0x50)
++ offset -= 0x20;
++ else if (dev_priv->chipset >= 0xa0) {
++ gr_def(ctx, offset + 0x250, 0x00000001);
++ gr_def(ctx, offset + 0x254, 0x00000001);
++ gr_def(ctx, offset + 0x258, 0x00000002);
++ offset += 0x10;
++ }
++ gr_def(ctx, offset + 0x250, 0x00000004);
++ gr_def(ctx, offset + 0x254, 0x00000014);
++ gr_def(ctx, offset + 0x258, 0x00000001);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ offset += 4;
++ gr_def(ctx, offset + 0x264, 0x00000002);
++ if (dev_priv->chipset >= 0xa0)
++ offset += 8;
++ gr_def(ctx, offset + 0x270, 0x00000001);
++ gr_def(ctx, offset + 0x278, 0x00000002);
++ gr_def(ctx, offset + 0x27c, 0x00001000);
++ if (dev_priv->chipset == 0x50)
++ offset -= 0xc;
++ else {
++ gr_def(ctx, offset + 0x280, 0x00000e00);
++ gr_def(ctx, offset + 0x284, 0x00001000);
++ gr_def(ctx, offset + 0x288, 0x00001e00);
++ }
++ gr_def(ctx, offset + 0x290, 0x00000001);
++ gr_def(ctx, offset + 0x294, 0x00000001);
++ gr_def(ctx, offset + 0x298, 0x00000001);
++ gr_def(ctx, offset + 0x29c, 0x00000001);
++ gr_def(ctx, offset + 0x2a0, 0x00000001);
++ gr_def(ctx, offset + 0x2b0, 0x00000200);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ gr_def(ctx, offset + 0x2b4, 0x00000200);
++ offset += 4;
++ }
++ if (dev_priv->chipset < 0xa0) {
++ gr_def(ctx, offset + 0x2b8, 0x00000001);
++ gr_def(ctx, offset + 0x2bc, 0x00000070);
++ gr_def(ctx, offset + 0x2c0, 0x00000080);
++ gr_def(ctx, offset + 0x2cc, 0x00000001);
++ gr_def(ctx, offset + 0x2d0, 0x00000070);
++ gr_def(ctx, offset + 0x2d4, 0x00000080);
++ } else {
++ gr_def(ctx, offset + 0x2b8, 0x00000001);
++ gr_def(ctx, offset + 0x2bc, 0x000000f0);
++ gr_def(ctx, offset + 0x2c0, 0x000000ff);
++ gr_def(ctx, offset + 0x2cc, 0x00000001);
++ gr_def(ctx, offset + 0x2d0, 0x000000f0);
++ gr_def(ctx, offset + 0x2d4, 0x000000ff);
++ gr_def(ctx, offset + 0x2dc, 0x00000009);
++ offset += 4;
++ }
++ gr_def(ctx, offset + 0x2e4, 0x00000001);
++ gr_def(ctx, offset + 0x2e8, 0x000000cf);
++ gr_def(ctx, offset + 0x2f0, 0x00000001);
++ gr_def(ctx, offset + 0x300, 0x000000cf);
++ gr_def(ctx, offset + 0x308, 0x00000002);
++ gr_def(ctx, offset + 0x310, 0x00000001);
++ gr_def(ctx, offset + 0x318, 0x00000001);
++ gr_def(ctx, offset + 0x320, 0x000000cf);
++ gr_def(ctx, offset + 0x324, 0x000000cf);
++ gr_def(ctx, offset + 0x328, 0x00000001);
++
++ /* 6000? */
++ if (dev_priv->chipset == 0x50)
++ cp_ctx(ctx, 0x4063e0, 0x1);
++
++ /* 6800: M2MF */
++ if (dev_priv->chipset < 0x90) {
++ cp_ctx(ctx, 0x406814, 0x2b);
++ gr_def(ctx, 0x406818, 0x00000f80);
++ gr_def(ctx, 0x406860, 0x007f0080);
++ gr_def(ctx, 0x40689c, 0x007f0080);
++ } else {
++ cp_ctx(ctx, 0x406814, 0x4);
++ if (dev_priv->chipset == 0x98)
++ gr_def(ctx, 0x406818, 0x00000f80);
++ else
++ gr_def(ctx, 0x406818, 0x00001f80);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ gr_def(ctx, 0x40681c, 0x00000030);
++ cp_ctx(ctx, 0x406830, 0x3);
++ }
++
++ /* 7000: per-ROP group state */
++ for (i = 0; i < 8; i++) {
++ if (units & (1<<(i+16))) {
++ cp_ctx(ctx, 0x407000 + (i<<8), 3);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, 0x407000 + (i<<8), 0x1b74f820);
++ else if (dev_priv->chipset != 0xa5)
++ gr_def(ctx, 0x407000 + (i<<8), 0x3b74f821);
++ else
++ gr_def(ctx, 0x407000 + (i<<8), 0x7b74f821);
++ gr_def(ctx, 0x407004 + (i<<8), 0x89058001);
++
++ if (dev_priv->chipset == 0x50) {
++ cp_ctx(ctx, 0x407010 + (i<<8), 1);
++ } else if (dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, 0x407010 + (i<<8), 2);
++ gr_def(ctx, 0x407010 + (i<<8), 0x00001000);
++ gr_def(ctx, 0x407014 + (i<<8), 0x0000001f);
++ } else {
++ cp_ctx(ctx, 0x407010 + (i<<8), 3);
++ gr_def(ctx, 0x407010 + (i<<8), 0x00001000);
++ if (dev_priv->chipset != 0xa5)
++ gr_def(ctx, 0x407014 + (i<<8), 0x000000ff);
++ else
++ gr_def(ctx, 0x407014 + (i<<8), 0x000001ff);
++ }
++
++ cp_ctx(ctx, 0x407080 + (i<<8), 4);
++ if (dev_priv->chipset != 0xa5)
++ gr_def(ctx, 0x407080 + (i<<8), 0x027c10fa);
++ else
++ gr_def(ctx, 0x407080 + (i<<8), 0x827c10fa);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, 0x407084 + (i<<8), 0x000000c0);
++ else
++ gr_def(ctx, 0x407084 + (i<<8), 0x400000c0);
++ gr_def(ctx, 0x407088 + (i<<8), 0xb7892080);
++
++ if (dev_priv->chipset < 0xa0)
++ cp_ctx(ctx, 0x407094 + (i<<8), 1);
++ else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa)
++ cp_ctx(ctx, 0x407094 + (i<<8), 3);
++ else {
++ cp_ctx(ctx, 0x407094 + (i<<8), 4);
++ gr_def(ctx, 0x4070a0 + (i<<8), 1);
++ }
++ }
++ }
++
++ cp_ctx(ctx, 0x407c00, 0x3);
++ if (dev_priv->chipset < 0x90)
++ gr_def(ctx, 0x407c00, 0x00010040);
++ else if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, 0x407c00, 0x00390040);
++ else
++ gr_def(ctx, 0x407c00, 0x003d0040);
++ gr_def(ctx, 0x407c08, 0x00000022);
++ if (dev_priv->chipset >= 0xa0) {
++ cp_ctx(ctx, 0x407c10, 0x3);
++ cp_ctx(ctx, 0x407c20, 0x1);
++ cp_ctx(ctx, 0x407c2c, 0x1);
++ }
++
++ if (dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, 0x407d00, 0x9);
++ } else {
++ cp_ctx(ctx, 0x407d00, 0x15);
++ }
++ if (dev_priv->chipset == 0x98)
++ gr_def(ctx, 0x407d08, 0x00380040);
++ else {
++ if (dev_priv->chipset < 0x90)
++ gr_def(ctx, 0x407d08, 0x00010040);
++ else if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, 0x407d08, 0x00390040);
++ else
++ gr_def(ctx, 0x407d08, 0x003d0040);
++ gr_def(ctx, 0x407d0c, 0x00000022);
++ }
++
++ /* 8000+: per-TP state */
++ for (i = 0; i < 10; i++) {
++ if (units & (1<<i)) {
++ if (dev_priv->chipset < 0xa0)
++ base = 0x408000 + (i<<12);
++ else
++ base = 0x408000 + (i<<11);
++ if (dev_priv->chipset < 0xa0)
++ offset = base + 0xc00;
++ else
++ offset = base + 0x80;
++ cp_ctx(ctx, offset + 0x00, 1);
++ gr_def(ctx, offset + 0x00, 0x0000ff0a);
++ cp_ctx(ctx, offset + 0x08, 1);
++
++ /* per-MP state */
++ for (j = 0; j < (dev_priv->chipset < 0xa0 ? 2 : 4); j++) {
++ if (!(units & (1 << (j+24)))) continue;
++ if (dev_priv->chipset < 0xa0)
++ offset = base + 0x200 + (j<<7);
++ else
++ offset = base + 0x100 + (j<<7);
++ cp_ctx(ctx, offset, 0x20);
++ gr_def(ctx, offset + 0x00, 0x01800000);
++ gr_def(ctx, offset + 0x04, 0x00160000);
++ gr_def(ctx, offset + 0x08, 0x01800000);
++ gr_def(ctx, offset + 0x18, 0x0003ffff);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ gr_def(ctx, offset + 0x1c, 0x00080000);
++ break;
++ case 0x84:
++ gr_def(ctx, offset + 0x1c, 0x00880000);
++ break;
++ case 0x86:
++ gr_def(ctx, offset + 0x1c, 0x008c0000);
++ break;
++ case 0x92:
++ case 0x96:
++ case 0x98:
++ gr_def(ctx, offset + 0x1c, 0x118c0000);
++ break;
++ case 0x94:
++ gr_def(ctx, offset + 0x1c, 0x10880000);
++ break;
++ case 0xa0:
++ case 0xa5:
++ gr_def(ctx, offset + 0x1c, 0x310c0000);
++ break;
++ case 0xa3:
++ case 0xa8:
++ case 0xaa:
++ case 0xac:
++ gr_def(ctx, offset + 0x1c, 0x300c0000);
++ break;
++ }
++ gr_def(ctx, offset + 0x40, 0x00010401);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, offset + 0x48, 0x00000040);
++ else
++ gr_def(ctx, offset + 0x48, 0x00000078);
++ gr_def(ctx, offset + 0x50, 0x000000bf);
++ gr_def(ctx, offset + 0x58, 0x00001210);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, offset + 0x5c, 0x00000080);
++ else
++ gr_def(ctx, offset + 0x5c, 0x08000080);
++ if (dev_priv->chipset >= 0xa0)
++ gr_def(ctx, offset + 0x68, 0x0000003e);
++ }
++
++ if (dev_priv->chipset < 0xa0)
++ cp_ctx(ctx, base + 0x300, 0x4);
++ else
++ cp_ctx(ctx, base + 0x300, 0x5);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, base + 0x304, 0x00007070);
++ else if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, base + 0x304, 0x00027070);
++ else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa)
++ gr_def(ctx, base + 0x304, 0x01127070);
++ else
++ gr_def(ctx, base + 0x304, 0x05127070);
++
++ if (dev_priv->chipset < 0xa0)
++ cp_ctx(ctx, base + 0x318, 1);
++ else
++ cp_ctx(ctx, base + 0x320, 1);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, base + 0x318, 0x0003ffff);
++ else if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, base + 0x318, 0x03ffffff);
++ else
++ gr_def(ctx, base + 0x320, 0x07ffffff);
++
++ if (dev_priv->chipset < 0xa0)
++ cp_ctx(ctx, base + 0x324, 5);
++ else
++ cp_ctx(ctx, base + 0x328, 4);
++
++ if (dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, base + 0x340, 9);
++ offset = base + 0x340;
++ } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) {
++ cp_ctx(ctx, base + 0x33c, 0xb);
++ offset = base + 0x344;
++ } else {
++ cp_ctx(ctx, base + 0x33c, 0xd);
++ offset = base + 0x344;
++ }
++ gr_def(ctx, offset + 0x0, 0x00120407);
++ gr_def(ctx, offset + 0x4, 0x05091507);
++ if (dev_priv->chipset == 0x84)
++ gr_def(ctx, offset + 0x8, 0x05100202);
++ else
++ gr_def(ctx, offset + 0x8, 0x05010202);
++ gr_def(ctx, offset + 0xc, 0x00030201);
++ if (dev_priv->chipset == 0xa3)
++ cp_ctx(ctx, base + 0x36c, 1);
++
++ cp_ctx(ctx, base + 0x400, 2);
++ gr_def(ctx, base + 0x404, 0x00000040);
++ cp_ctx(ctx, base + 0x40c, 2);
++ gr_def(ctx, base + 0x40c, 0x0d0c0b0a);
++ gr_def(ctx, base + 0x410, 0x00141210);
++
++ if (dev_priv->chipset < 0xa0)
++ offset = base + 0x800;
++ else
++ offset = base + 0x500;
++ cp_ctx(ctx, offset, 6);
++ gr_def(ctx, offset + 0x0, 0x000001f0);
++ gr_def(ctx, offset + 0x4, 0x00000001);
++ gr_def(ctx, offset + 0x8, 0x00000003);
++ if (dev_priv->chipset == 0x50 || dev_priv->chipset >= 0xaa)
++ gr_def(ctx, offset + 0xc, 0x00008000);
++ gr_def(ctx, offset + 0x14, 0x00039e00);
++ cp_ctx(ctx, offset + 0x1c, 2);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, offset + 0x1c, 0x00000040);
++ else
++ gr_def(ctx, offset + 0x1c, 0x00000100);
++ gr_def(ctx, offset + 0x20, 0x00003800);
++
++ if (dev_priv->chipset >= 0xa0) {
++ cp_ctx(ctx, base + 0x54c, 2);
++ if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa)
++ gr_def(ctx, base + 0x54c, 0x003fe006);
++ else
++ gr_def(ctx, base + 0x54c, 0x003fe007);
++ gr_def(ctx, base + 0x550, 0x003fe000);
++ }
++
++ if (dev_priv->chipset < 0xa0)
++ offset = base + 0xa00;
++ else
++ offset = base + 0x680;
++ cp_ctx(ctx, offset, 1);
++ gr_def(ctx, offset, 0x00404040);
++
++ if (dev_priv->chipset < 0xa0)
++ offset = base + 0xe00;
++ else
++ offset = base + 0x700;
++ cp_ctx(ctx, offset, 2);
++ if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, offset, 0x0077f005);
++ else if (dev_priv->chipset == 0xa5)
++ gr_def(ctx, offset, 0x6cf7f007);
++ else if (dev_priv->chipset == 0xa8)
++ gr_def(ctx, offset, 0x6cfff007);
++ else if (dev_priv->chipset == 0xac)
++ gr_def(ctx, offset, 0x0cfff007);
++ else
++ gr_def(ctx, offset, 0x0cf7f007);
++ if (dev_priv->chipset == 0x50)
++ gr_def(ctx, offset + 0x4, 0x00007fff);
++ else if (dev_priv->chipset < 0xa0)
++ gr_def(ctx, offset + 0x4, 0x003f7fff);
++ else
++ gr_def(ctx, offset + 0x4, 0x02bf7fff);
++ cp_ctx(ctx, offset + 0x2c, 1);
++ if (dev_priv->chipset == 0x50) {
++ cp_ctx(ctx, offset + 0x50, 9);
++ gr_def(ctx, offset + 0x54, 0x000003ff);
++ gr_def(ctx, offset + 0x58, 0x00000003);
++ gr_def(ctx, offset + 0x5c, 0x00000003);
++ gr_def(ctx, offset + 0x60, 0x000001ff);
++ gr_def(ctx, offset + 0x64, 0x0000001f);
++ gr_def(ctx, offset + 0x68, 0x0000000f);
++ gr_def(ctx, offset + 0x6c, 0x0000000f);
++ } else if(dev_priv->chipset < 0xa0) {
++ cp_ctx(ctx, offset + 0x50, 1);
++ cp_ctx(ctx, offset + 0x70, 1);
++ } else {
++ cp_ctx(ctx, offset + 0x50, 1);
++ cp_ctx(ctx, offset + 0x60, 5);
++ }
++ }
++ }
++}
++
++/*
++ * xfer areas. These are a pain.
++ *
++ * There are 2 xfer areas: the first one is big and contains all sorts of
++ * stuff, the second is small and contains some per-TP context.
++ *
++ * Each area is split into 8 "strands". The areas, when saved to grctx,
++ * are made of 8-word blocks. Each block contains a single word from
++ * each strand. The strands are independent of each other, their
++ * addresses are unrelated to each other, and data in them is closely
++ * packed together. The strand layout varies a bit between cards: here
++ * and there, a single word is thrown out in the middle and the whole
++ * strand is offset by a bit from corresponding one on another chipset.
++ * For this reason, addresses of stuff in strands are almost useless.
++ * Knowing sequence of stuff and size of gaps between them is much more
++ * useful, and that's how we build the strands in our generator.
++ *
++ * NVA0 takes this mess to a whole new level by cutting the old strands
++ * into a few dozen pieces [known as genes], rearranging them randomly,
++ * and putting them back together to make new strands. Hopefully these
++ * genes correspond more or less directly to the same PGRAPH subunits
++ * as in 400040 register.
++ *
++ * The most common value in default context is 0, and when the genes
++ * are separated by 0's, gene bounduaries are quite speculative...
++ * some of them can be clearly deduced, others can be guessed, and yet
++ * others won't be resolved without figuring out the real meaning of
++ * given ctxval. For the same reason, ending point of each strand
++ * is unknown. Except for strand 0, which is the longest strand and
++ * its end corresponds to end of the whole xfer.
++ *
++ * An unsolved mystery is the seek instruction: it takes an argument
++ * in bits 8-18, and that argument is clearly the place in strands to
++ * seek to... but the offsets don't seem to correspond to offsets as
++ * seen in grctx. Perhaps there's another, real, not randomly-changing
++ * addressing in strands, and the xfer insn just happens to skip over
++ * the unused bits? NV10-NV30 PIPE comes to mind...
++ *
++ * As far as I know, there's no way to access the xfer areas directly
++ * without the help of ctxprog.
++ */
++
++static inline void
++xf_emit(struct nouveau_grctx *ctx, int num, uint32_t val) {
++ int i;
++ if (val && ctx->mode == NOUVEAU_GRCTX_VALS)
++ for (i = 0; i < num; i++)
++ nv_wo32(ctx->dev, ctx->data, ctx->ctxvals_pos + (i << 3), val);
++ ctx->ctxvals_pos += num << 3;
++}
++
++/* Gene declarations... */
++
++static void nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx);
++static void nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx);
++
++static void
++nv50_graph_construct_xfer1(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int i;
++ int offset;
++ int size = 0;
++ uint32_t units = nv_rd32 (ctx->dev, 0x1540);
++
++ offset = (ctx->ctxvals_pos+0x3f)&~0x3f;
++ ctx->ctxvals_base = offset;
++
++ if (dev_priv->chipset < 0xa0) {
++ /* Strand 0 */
++ ctx->ctxvals_pos = offset;
++ switch (dev_priv->chipset) {
++ case 0x50:
++ xf_emit(ctx, 0x99, 0);
++ break;
++ case 0x84:
++ case 0x86:
++ xf_emit(ctx, 0x384, 0);
++ break;
++ case 0x92:
++ case 0x94:
++ case 0x96:
++ case 0x98:
++ xf_emit(ctx, 0x380, 0);
++ break;
++ }
++ nv50_graph_construct_gene_m2mf (ctx);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ case 0x84:
++ case 0x86:
++ case 0x98:
++ xf_emit(ctx, 0x4c4, 0);
++ break;
++ case 0x92:
++ case 0x94:
++ case 0x96:
++ xf_emit(ctx, 0x984, 0);
++ break;
++ }
++ nv50_graph_construct_gene_unk5(ctx);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 0xa, 0);
++ else
++ xf_emit(ctx, 0xb, 0);
++ nv50_graph_construct_gene_unk4(ctx);
++ nv50_graph_construct_gene_unk3(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 1 */
++ ctx->ctxvals_pos = offset + 0x1;
++ nv50_graph_construct_gene_unk6(ctx);
++ nv50_graph_construct_gene_unk7(ctx);
++ nv50_graph_construct_gene_unk8(ctx);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ case 0x92:
++ xf_emit(ctx, 0xfb, 0);
++ break;
++ case 0x84:
++ xf_emit(ctx, 0xd3, 0);
++ break;
++ case 0x94:
++ case 0x96:
++ xf_emit(ctx, 0xab, 0);
++ break;
++ case 0x86:
++ case 0x98:
++ xf_emit(ctx, 0x6b, 0);
++ break;
++ }
++ xf_emit(ctx, 2, 0x4e3bfdf);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 0xb, 0);
++ xf_emit(ctx, 2, 0x4e3bfdf);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 2 */
++ ctx->ctxvals_pos = offset + 0x2;
++ switch (dev_priv->chipset) {
++ case 0x50:
++ case 0x92:
++ xf_emit(ctx, 0xa80, 0);
++ break;
++ case 0x84:
++ xf_emit(ctx, 0xa7e, 0);
++ break;
++ case 0x94:
++ case 0x96:
++ xf_emit(ctx, 0xa7c, 0);
++ break;
++ case 0x86:
++ case 0x98:
++ xf_emit(ctx, 0xa7a, 0);
++ break;
++ }
++ xf_emit(ctx, 1, 0x3fffff);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x1fff);
++ xf_emit(ctx, 0xe, 0);
++ nv50_graph_construct_gene_unk9(ctx);
++ nv50_graph_construct_gene_unk2(ctx);
++ nv50_graph_construct_gene_unk1(ctx);
++ nv50_graph_construct_gene_unk10(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 3: per-ROP group state */
++ ctx->ctxvals_pos = offset + 3;
++ for (i = 0; i < 6; i++)
++ if (units & (1 << (i + 16)))
++ nv50_graph_construct_gene_ropc(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strands 4-7: per-TP state */
++ for (i = 0; i < 4; i++) {
++ ctx->ctxvals_pos = offset + 4 + i;
++ if (units & (1 << (2 * i)))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << (2 * i + 1)))
++ nv50_graph_construct_xfer_tp(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++ }
++ } else {
++ /* Strand 0 */
++ ctx->ctxvals_pos = offset;
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x385, 0);
++ else
++ xf_emit(ctx, 0x384, 0);
++ nv50_graph_construct_gene_m2mf(ctx);
++ xf_emit(ctx, 0x950, 0);
++ nv50_graph_construct_gene_unk10(ctx);
++ xf_emit(ctx, 1, 0x0fac6881);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 3, 0);
++ }
++ nv50_graph_construct_gene_unk8(ctx);
++ if (dev_priv->chipset == 0xa0)
++ xf_emit(ctx, 0x189, 0);
++ else if (dev_priv->chipset == 0xa3)
++ xf_emit(ctx, 0xd5, 0);
++ else if (dev_priv->chipset == 0xa5)
++ xf_emit(ctx, 0x99, 0);
++ else if (dev_priv->chipset == 0xaa)
++ xf_emit(ctx, 0x65, 0);
++ else
++ xf_emit(ctx, 0x6d, 0);
++ nv50_graph_construct_gene_unk9(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 1 */
++ ctx->ctxvals_pos = offset + 1;
++ nv50_graph_construct_gene_unk1(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 2 */
++ ctx->ctxvals_pos = offset + 2;
++ if (dev_priv->chipset == 0xa0) {
++ nv50_graph_construct_gene_unk2(ctx);
++ }
++ xf_emit(ctx, 0x36, 0);
++ nv50_graph_construct_gene_unk5(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 3 */
++ ctx->ctxvals_pos = offset + 3;
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ nv50_graph_construct_gene_unk6(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 4 */
++ ctx->ctxvals_pos = offset + 4;
++ if (dev_priv->chipset == 0xa0)
++ xf_emit(ctx, 0xa80, 0);
++ else if (dev_priv->chipset == 0xa3)
++ xf_emit(ctx, 0xa7c, 0);
++ else
++ xf_emit(ctx, 0xa7a, 0);
++ xf_emit(ctx, 1, 0x3fffff);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x1fff);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 5 */
++ ctx->ctxvals_pos = offset + 5;
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 0xb, 0);
++ xf_emit(ctx, 2, 0x4e3bfdf);
++ xf_emit(ctx, 3, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 0x4e3bfdf);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 0);
++ for (i = 0; i < 8; i++)
++ if (units & (1<<(i+16)))
++ nv50_graph_construct_gene_ropc(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 6 */
++ ctx->ctxvals_pos = offset + 6;
++ nv50_graph_construct_gene_unk3(ctx);
++ xf_emit(ctx, 0xb, 0);
++ nv50_graph_construct_gene_unk4(ctx);
++ nv50_graph_construct_gene_unk7(ctx);
++ if (units & (1 << 0))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 1))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 2))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 3))
++ nv50_graph_construct_xfer_tp(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 7 */
++ ctx->ctxvals_pos = offset + 7;
++ if (dev_priv->chipset == 0xa0) {
++ if (units & (1 << 4))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 5))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 6))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 7))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 8))
++ nv50_graph_construct_xfer_tp(ctx);
++ if (units & (1 << 9))
++ nv50_graph_construct_xfer_tp(ctx);
++ } else {
++ nv50_graph_construct_gene_unk2(ctx);
++ }
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++ }
++
++ ctx->ctxvals_pos = offset + size * 8;
++ ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f;
++ cp_lsr (ctx, offset);
++ cp_out (ctx, CP_SET_XFER_POINTER);
++ cp_lsr (ctx, size);
++ cp_out (ctx, CP_SEEK_1);
++ cp_out (ctx, CP_XFER_1);
++ cp_wait(ctx, XFER, BUSY);
++}
++
++/*
++ * non-trivial demagiced parts of ctx init go here
++ */
++
++static void
++nv50_graph_construct_gene_m2mf(struct nouveau_grctx *ctx)
++{
++ /* m2mf state */
++ xf_emit (ctx, 1, 0); /* DMA_NOTIFY instance >> 4 */
++ xf_emit (ctx, 1, 0); /* DMA_BUFFER_IN instance >> 4 */
++ xf_emit (ctx, 1, 0); /* DMA_BUFFER_OUT instance >> 4 */
++ xf_emit (ctx, 1, 0); /* OFFSET_IN */
++ xf_emit (ctx, 1, 0); /* OFFSET_OUT */
++ xf_emit (ctx, 1, 0); /* PITCH_IN */
++ xf_emit (ctx, 1, 0); /* PITCH_OUT */
++ xf_emit (ctx, 1, 0); /* LINE_LENGTH */
++ xf_emit (ctx, 1, 0); /* LINE_COUNT */
++ xf_emit (ctx, 1, 0x21); /* FORMAT: bits 0-4 INPUT_INC, bits 5-9 OUTPUT_INC */
++ xf_emit (ctx, 1, 1); /* LINEAR_IN */
++ xf_emit (ctx, 1, 0x2); /* TILING_MODE_IN: bits 0-2 y tiling, bits 3-5 z tiling */
++ xf_emit (ctx, 1, 0x100); /* TILING_PITCH_IN */
++ xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_IN */
++ xf_emit (ctx, 1, 1); /* TILING_DEPTH_IN */
++ xf_emit (ctx, 1, 0); /* TILING_POSITION_IN_Z */
++ xf_emit (ctx, 1, 0); /* TILING_POSITION_IN */
++ xf_emit (ctx, 1, 1); /* LINEAR_OUT */
++ xf_emit (ctx, 1, 0x2); /* TILING_MODE_OUT: bits 0-2 y tiling, bits 3-5 z tiling */
++ xf_emit (ctx, 1, 0x100); /* TILING_PITCH_OUT */
++ xf_emit (ctx, 1, 0x100); /* TILING_HEIGHT_OUT */
++ xf_emit (ctx, 1, 1); /* TILING_DEPTH_OUT */
++ xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT_Z */
++ xf_emit (ctx, 1, 0); /* TILING_POSITION_OUT */
++ xf_emit (ctx, 1, 0); /* OFFSET_IN_HIGH */
++ xf_emit (ctx, 1, 0); /* OFFSET_OUT_HIGH */
++}
++
++static void
++nv50_graph_construct_gene_unk1(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* end of area 2 on pre-NVA0, area 1 on NVAx */
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0x3ff);
++ else
++ xf_emit(ctx, 1, 0x7ff);
++ switch (dev_priv->chipset) {
++ case 0x50:
++ case 0x86:
++ case 0x98:
++ case 0xaa:
++ case 0xac:
++ xf_emit(ctx, 0x542, 0);
++ break;
++ case 0x84:
++ case 0x92:
++ case 0x94:
++ case 0x96:
++ xf_emit(ctx, 0x942, 0);
++ break;
++ case 0xa0:
++ case 0xa3:
++ xf_emit(ctx, 0x2042, 0);
++ break;
++ case 0xa5:
++ case 0xa8:
++ xf_emit(ctx, 0x842, 0);
++ break;
++ }
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x27);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x26);
++ xf_emit(ctx, 3, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk10(struct nouveau_grctx *ctx)
++{
++ /* end of area 2 on pre-NVA0, area 1 on NVAx */
++ xf_emit(ctx, 0x10, 0x04000000);
++ xf_emit(ctx, 0x24, 0);
++ xf_emit(ctx, 2, 0x04e3bfdf);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x1fe21);
++}
++
++static void
++nv50_graph_construct_gene_unk2(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* middle of area 2 on pre-NVA0, beginning of area 2 on NVA0, area 7 on >NVA0 */
++ if (dev_priv->chipset != 0x50) {
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x804);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0x8100c12);
++ }
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x10);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 3, 0);
++ else
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x804);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x1a);
++ if (dev_priv->chipset != 0x50)
++ xf_emit(ctx, 1, 0x7f);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 6, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0x3ff);
++ else
++ xf_emit(ctx, 1, 0x7ff);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 0x38, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 0x38, 0);
++ xf_emit(ctx, 2, 0x88);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 0x16, 0);
++ xf_emit(ctx, 1, 0x26);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x3f800000);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 4, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x1a);
++ xf_emit(ctx, 1, 0x10);
++ if (dev_priv->chipset != 0x50)
++ xf_emit(ctx, 0x28, 0);
++ else
++ xf_emit(ctx, 0x25, 0);
++ xf_emit(ctx, 1, 0x52);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x26);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x1a);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x00ffff00);
++ xf_emit(ctx, 1, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk3(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* end of area 0 on pre-NVA0, beginning of area 6 on NVAx */
++ xf_emit(ctx, 1, 0x3f);
++ xf_emit(ctx, 0xa, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 0x04000000);
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 4);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 0x10, 0);
++ else
++ xf_emit(ctx, 0x11, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x1001);
++ xf_emit(ctx, 4, 0xffff);
++ xf_emit(ctx, 0x20, 0);
++ xf_emit(ctx, 0x10, 0x3f800000);
++ xf_emit(ctx, 1, 0x10);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0);
++ else
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 2, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk4(struct nouveau_grctx *ctx)
++{
++ /* middle of area 0 on pre-NVA0, middle of area 6 on NVAx */
++ xf_emit(ctx, 2, 0x04000000);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 1, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk5(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* middle of area 0 on pre-NVA0 [after m2mf], end of area 2 on NVAx */
++ xf_emit(ctx, 2, 4);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x1c4d, 0);
++ else
++ xf_emit(ctx, 0x1c4b, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0x8100c12);
++ if (dev_priv->chipset != 0x50)
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0x80c14);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 1, 0x27);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x3c1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x16, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 1, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk6(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* beginning of area 1 on pre-NVA0 [after m2mf], area 3 on NVAx */
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0xf);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 8, 0);
++ else
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x20);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x11, 0);
++ else if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 0xf, 0);
++ else
++ xf_emit(ctx, 0xe, 0);
++ xf_emit(ctx, 1, 0x1a);
++ xf_emit(ctx, 0xd, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 8);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0x3ff);
++ else
++ xf_emit(ctx, 1, 0x7ff);
++ if (dev_priv->chipset == 0xa8)
++ xf_emit(ctx, 1, 0x1e00);
++ xf_emit(ctx, 0xc, 0);
++ xf_emit(ctx, 1, 0xf);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 0x125, 0);
++ else if (dev_priv->chipset < 0xa0)
++ xf_emit(ctx, 0x126, 0);
++ else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa)
++ xf_emit(ctx, 0x124, 0);
++ else
++ xf_emit(ctx, 0x1f7, 0);
++ xf_emit(ctx, 1, 0xf);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 3, 0);
++ else
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0xa1, 0);
++ else
++ xf_emit(ctx, 0x5a, 0);
++ xf_emit(ctx, 1, 0xf);
++ if (dev_priv->chipset < 0xa0)
++ xf_emit(ctx, 0x834, 0);
++ else if (dev_priv->chipset == 0xa0)
++ xf_emit(ctx, 0x1873, 0);
++ else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x8ba, 0);
++ else
++ xf_emit(ctx, 0x833, 0);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 0xf, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk7(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 6 on NVAx */
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 2, 1);
++ else
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0x100);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 8);
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 3, 1);
++ xf_emit(ctx, 1, 0xcf);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 3, 1);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x15);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x4444480);
++ xf_emit(ctx, 0x37, 0);
++}
++
++static void
++nv50_graph_construct_gene_unk8(struct nouveau_grctx *ctx)
++{
++ /* middle of area 1 on pre-NVA0 [after m2mf], middle of area 0 on NVAx */
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x100);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x10001);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x10001);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x10001);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 2);
++}
++
++static void
++nv50_graph_construct_gene_unk9(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ /* middle of area 2 on pre-NVA0 [after m2mf], end of area 0 on NVAx */
++ xf_emit(ctx, 1, 0x3f800000);
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0x1a);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x12, 0);
++ xf_emit(ctx, 1, 0x00ffff00);
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 0xf, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 3);
++ else if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 0x04000000);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 5);
++ xf_emit(ctx, 1, 0x52);
++ if (dev_priv->chipset == 0x50) {
++ xf_emit(ctx, 0x13, 0);
++ } else {
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x11, 0);
++ else
++ xf_emit(ctx, 0x10, 0);
++ }
++ xf_emit(ctx, 0x10, 0x3f800000);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 0x26, 0);
++ xf_emit(ctx, 1, 0x8100c12);
++ xf_emit(ctx, 1, 5);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 4, 0xffff);
++ if (dev_priv->chipset != 0x50)
++ xf_emit(ctx, 1, 3);
++ if (dev_priv->chipset < 0xa0)
++ xf_emit(ctx, 0x1f, 0);
++ else if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0xc, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x00ffff00);
++ xf_emit(ctx, 1, 0x1a);
++ if (dev_priv->chipset != 0x50) {
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 3);
++ }
++ if (dev_priv->chipset < 0xa0)
++ xf_emit(ctx, 0x26, 0);
++ else
++ xf_emit(ctx, 0x3c, 0);
++ xf_emit(ctx, 1, 0x102);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 4, 4);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0x3ff);
++ else
++ xf_emit(ctx, 1, 0x7ff);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x102);
++ xf_emit(ctx, 9, 0);
++ xf_emit(ctx, 4, 4);
++ xf_emit(ctx, 0x2c, 0);
++}
++
++static void
++nv50_graph_construct_gene_ropc(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int magic2;
++ if (dev_priv->chipset == 0x50) {
++ magic2 = 0x00003e60;
++ } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) {
++ magic2 = 0x001ffe67;
++ } else {
++ magic2 = 0x00087e67;
++ }
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, magic2);
++ xf_emit(ctx, 4, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 7, 0);
++ if (dev_priv->chipset >= 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 0x15);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 4, 0);
++ if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x92 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa0) {
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0x400);
++ xf_emit(ctx, 1, 0x300);
++ xf_emit(ctx, 1, 0x1001);
++ if (dev_priv->chipset != 0xa0) {
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 0);
++ else
++ xf_emit(ctx, 1, 0x15);
++ }
++ xf_emit(ctx, 3, 0);
++ }
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x13, 0);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 0x10, 0);
++ xf_emit(ctx, 0x10, 0x3f800000);
++ xf_emit(ctx, 0x19, 0);
++ xf_emit(ctx, 1, 0x10);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x3f);
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset >= 0xa0) {
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x1001);
++ xf_emit(ctx, 0xb, 0);
++ } else {
++ xf_emit(ctx, 0xc, 0);
++ }
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x11);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 4, 0);
++ else
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 3, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, magic2);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 0x18, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x16, 0);
++ } else {
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 0x1b, 0);
++ else
++ xf_emit(ctx, 0x15, 0);
++ }
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 1);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 4, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 0x10, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 0x10, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 3, 0);
++ }
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x5b, 0);
++}
++
++static void
++nv50_graph_construct_xfer_tp_x1(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int magic3;
++ if (dev_priv->chipset == 0x50)
++ magic3 = 0x1000;
++ else if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8)
++ magic3 = 0x1e00;
++ else
++ magic3 = 0;
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 4);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0x24, 0);
++ else if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 0x14, 0);
++ else
++ xf_emit(ctx, 0x15, 0);
++ xf_emit(ctx, 2, 4);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 1, 0x03020100);
++ else
++ xf_emit(ctx, 1, 0x00608080);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 2, 4);
++ xf_emit(ctx, 1, 0x80);
++ if (magic3)
++ xf_emit(ctx, 1, magic3);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 0x24, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0x03020100);
++ xf_emit(ctx, 1, 3);
++ if (magic3)
++ xf_emit(ctx, 1, magic3);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 4);
++ if (dev_priv->chipset == 0x94 || dev_priv->chipset == 0x96)
++ xf_emit(ctx, 0x1024, 0);
++ else if (dev_priv->chipset < 0xa0)
++ xf_emit(ctx, 0xa24, 0);
++ else if (dev_priv->chipset == 0xa0 || dev_priv->chipset >= 0xaa)
++ xf_emit(ctx, 0x214, 0);
++ else
++ xf_emit(ctx, 0x414, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 2, 0);
++}
++
++static void
++nv50_graph_construct_xfer_tp_x2(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int magic1, magic2;
++ if (dev_priv->chipset == 0x50) {
++ magic1 = 0x3ff;
++ magic2 = 0x00003e60;
++ } else if (dev_priv->chipset <= 0xa0 || dev_priv->chipset >= 0xaa) {
++ magic1 = 0x7ff;
++ magic2 = 0x001ffe67;
++ } else {
++ magic1 = 0x7ff;
++ magic2 = 0x00087e67;
++ }
++ xf_emit(ctx, 3, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0xc, 0);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 0xb, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 4, 0xffff);
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 1, 0);
++ } else if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0xa, 0);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 0x18, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 1, 0);
++ }
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 3, 0xcf);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0xa, 0);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, magic2);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x11);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 2, 1);
++ else
++ xf_emit(ctx, 1, 1);
++ if(dev_priv->chipset == 0x50)
++ xf_emit(ctx, 1, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, magic1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x28, 0);
++ xf_emit(ctx, 8, 8);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 8, 0x400);
++ xf_emit(ctx, 8, 0x300);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x20);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 0x100);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x40);
++ xf_emit(ctx, 1, 0x100);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 4, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, magic2);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 9, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x400);
++ xf_emit(ctx, 1, 0x300);
++ xf_emit(ctx, 1, 0x1001);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 4, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 1, 0xf);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 0x15, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 3, 0);
++ } else
++ xf_emit(ctx, 0x17, 0);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 1, 0x0fac6881);
++ xf_emit(ctx, 1, magic2);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 3, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 2, 1);
++ else
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 2, 0);
++ else if (dev_priv->chipset != 0x50)
++ xf_emit(ctx, 1, 0);
++}
++
++static void
++nv50_graph_construct_xfer_tp_x3(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 2, 0);
++ else
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0x2a712488);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x4085c000);
++ xf_emit(ctx, 1, 0x40);
++ xf_emit(ctx, 1, 0x100);
++ xf_emit(ctx, 1, 0x10100);
++ xf_emit(ctx, 1, 0x02800000);
++}
++
++static void
++nv50_graph_construct_xfer_tp_x4(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ xf_emit(ctx, 2, 0x04e3bfdf);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x00ffff00);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 2, 1);
++ else
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 0x00ffff00);
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0x30201000);
++ xf_emit(ctx, 1, 0x70605040);
++ xf_emit(ctx, 1, 0xb8a89888);
++ xf_emit(ctx, 1, 0xf8e8d8c8);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x1a);
++}
++
++static void
++nv50_graph_construct_xfer_tp_x5(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 0xfac6881);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 2, 0);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0xb, 0);
++ else
++ xf_emit(ctx, 0xa, 0);
++ xf_emit(ctx, 8, 1);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0xfac6881);
++ xf_emit(ctx, 1, 0xf);
++ xf_emit(ctx, 7, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 1);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 6, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 6, 0);
++ } else {
++ xf_emit(ctx, 0xb, 0);
++ }
++}
++
++static void
++nv50_graph_construct_xfer_tp(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ if (dev_priv->chipset < 0xa0) {
++ nv50_graph_construct_xfer_tp_x1(ctx);
++ nv50_graph_construct_xfer_tp_x2(ctx);
++ nv50_graph_construct_xfer_tp_x3(ctx);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 0xf, 0);
++ else
++ xf_emit(ctx, 0x12, 0);
++ nv50_graph_construct_xfer_tp_x4(ctx);
++ } else {
++ nv50_graph_construct_xfer_tp_x3(ctx);
++ if (dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 0xc, 0);
++ else
++ xf_emit(ctx, 0xa, 0);
++ nv50_graph_construct_xfer_tp_x2(ctx);
++ nv50_graph_construct_xfer_tp_x5(ctx);
++ nv50_graph_construct_xfer_tp_x4(ctx);
++ nv50_graph_construct_xfer_tp_x1(ctx);
++ }
++}
++
++static void
++nv50_graph_construct_xfer_tp2(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int i, mpcnt;
++ if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa)
++ mpcnt = 1;
++ else if (dev_priv->chipset < 0xa0 || dev_priv->chipset >= 0xa8)
++ mpcnt = 2;
++ else
++ mpcnt = 3;
++ for (i = 0; i < mpcnt; i++) {
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x80);
++ xf_emit(ctx, 1, 0x80007004);
++ xf_emit(ctx, 1, 0x04000400);
++ if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 1, 0xc0);
++ xf_emit(ctx, 1, 0x1000);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset == 0x86 || dev_priv->chipset == 0x98 || dev_priv->chipset >= 0xa8) {
++ xf_emit(ctx, 1, 0xe00);
++ xf_emit(ctx, 1, 0x1e00);
++ }
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 2, 0x1000);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 2);
++ if (dev_priv->chipset >= 0xaa)
++ xf_emit(ctx, 0xb, 0);
++ else if (dev_priv->chipset >= 0xa0)
++ xf_emit(ctx, 0xc, 0);
++ else
++ xf_emit(ctx, 0xa, 0);
++ }
++ xf_emit(ctx, 1, 0x08100c12);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset >= 0xa0) {
++ xf_emit(ctx, 1, 0x1fe21);
++ }
++ xf_emit(ctx, 5, 0);
++ xf_emit(ctx, 4, 0xffff);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 2, 0x10001);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 0x1fe21);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 4, 0);
++ xf_emit(ctx, 1, 0x08100c12);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 8, 0);
++ xf_emit(ctx, 1, 0xfac6881);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa)
++ xf_emit(ctx, 1, 3);
++ xf_emit(ctx, 3, 0);
++ xf_emit(ctx, 1, 4);
++ xf_emit(ctx, 9, 0);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 2, 1);
++ xf_emit(ctx, 1, 2);
++ xf_emit(ctx, 3, 1);
++ xf_emit(ctx, 1, 0);
++ if (dev_priv->chipset > 0xa0 && dev_priv->chipset < 0xaa) {
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 0x10, 1);
++ xf_emit(ctx, 8, 2);
++ xf_emit(ctx, 0x18, 1);
++ xf_emit(ctx, 3, 0);
++ }
++ xf_emit(ctx, 1, 4);
++ if (dev_priv->chipset == 0x50)
++ xf_emit(ctx, 0x3a0, 0);
++ else if (dev_priv->chipset < 0x94)
++ xf_emit(ctx, 0x3a2, 0);
++ else if (dev_priv->chipset == 0x98 || dev_priv->chipset == 0xaa)
++ xf_emit(ctx, 0x39f, 0);
++ else
++ xf_emit(ctx, 0x3a3, 0);
++ xf_emit(ctx, 1, 0x11);
++ xf_emit(ctx, 1, 0);
++ xf_emit(ctx, 1, 1);
++ xf_emit(ctx, 0x2d, 0);
++}
++
++static void
++nv50_graph_construct_xfer2(struct nouveau_grctx *ctx)
++{
++ struct drm_nouveau_private *dev_priv = ctx->dev->dev_private;
++ int i;
++ uint32_t offset;
++ uint32_t units = nv_rd32 (ctx->dev, 0x1540);
++ int size = 0;
++
++ offset = (ctx->ctxvals_pos+0x3f)&~0x3f;
++
++ if (dev_priv->chipset < 0xa0) {
++ for (i = 0; i < 8; i++) {
++ ctx->ctxvals_pos = offset + i;
++ if (i == 0)
++ xf_emit(ctx, 1, 0x08100c12);
++ if (units & (1 << i))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++ }
++ } else {
++ /* Strand 0: TPs 0, 1 */
++ ctx->ctxvals_pos = offset;
++ xf_emit(ctx, 1, 0x08100c12);
++ if (units & (1 << 0))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 1))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 0: TPs 2, 3 */
++ ctx->ctxvals_pos = offset + 1;
++ if (units & (1 << 2))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 3))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 0: TPs 4, 5, 6 */
++ ctx->ctxvals_pos = offset + 2;
++ if (units & (1 << 4))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 5))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 6))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++
++ /* Strand 0: TPs 7, 8, 9 */
++ ctx->ctxvals_pos = offset + 3;
++ if (units & (1 << 7))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 8))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if (units & (1 << 9))
++ nv50_graph_construct_xfer_tp2(ctx);
++ if ((ctx->ctxvals_pos-offset)/8 > size)
++ size = (ctx->ctxvals_pos-offset)/8;
++ }
++ ctx->ctxvals_pos = offset + size * 8;
++ ctx->ctxvals_pos = (ctx->ctxvals_pos+0x3f)&~0x3f;
++ cp_lsr (ctx, offset);
++ cp_out (ctx, CP_SET_XFER_POINTER);
++ cp_lsr (ctx, size);
++ cp_out (ctx, CP_SEEK_2);
++ cp_out (ctx, CP_XFER_2);
++ cp_wait(ctx, XFER, BUSY);
++}
+diff --git a/drivers/gpu/drm/nouveau/nv50_instmem.c b/drivers/gpu/drm/nouveau/nv50_instmem.c
+index f0dc4e3..5f21df3 100644
+--- a/drivers/gpu/drm/nouveau/nv50_instmem.c
++++ b/drivers/gpu/drm/nouveau/nv50_instmem.c
+@@ -63,9 +63,10 @@ nv50_instmem_init(struct drm_device *dev)
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_channel *chan;
+ uint32_t c_offset, c_size, c_ramfc, c_vmpd, c_base, pt_size;
++ uint32_t save_nv001700;
++ uint64_t v;
+ struct nv50_instmem_priv *priv;
+ int ret, i;
+- uint32_t v, save_nv001700;
+
+ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+@@ -76,17 +77,12 @@ nv50_instmem_init(struct drm_device *dev)
+ for (i = 0x1700; i <= 0x1710; i += 4)
+ priv->save1700[(i-0x1700)/4] = nv_rd32(dev, i);
+
+- if (dev_priv->chipset == 0xaa || dev_priv->chipset == 0xac)
+- dev_priv->vram_sys_base = nv_rd32(dev, 0x100e10) << 12;
+- else
+- dev_priv->vram_sys_base = 0;
+-
+ /* Reserve the last MiB of VRAM, we should probably try to avoid
+ * setting up the below tables over the top of the VBIOS image at
+ * some point.
+ */
+ dev_priv->ramin_rsvd_vram = 1 << 20;
+- c_offset = nouveau_mem_fb_amount(dev) - dev_priv->ramin_rsvd_vram;
++ c_offset = dev_priv->vram_size - dev_priv->ramin_rsvd_vram;
+ c_size = 128 << 10;
+ c_vmpd = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x1400 : 0x200;
+ c_ramfc = ((dev_priv->chipset & 0xf0) == 0x50) ? 0x0 : 0x20;
+@@ -106,7 +102,7 @@ nv50_instmem_init(struct drm_device *dev)
+ dev_priv->vm_gart_size = NV50_VM_BLOCK;
+
+ dev_priv->vm_vram_base = dev_priv->vm_gart_base + dev_priv->vm_gart_size;
+- dev_priv->vm_vram_size = nouveau_mem_fb_amount(dev);
++ dev_priv->vm_vram_size = dev_priv->vram_size;
+ if (dev_priv->vm_vram_size > NV50_VM_MAX_VRAM)
+ dev_priv->vm_vram_size = NV50_VM_MAX_VRAM;
+ dev_priv->vm_vram_size = roundup(dev_priv->vm_vram_size, NV50_VM_BLOCK);
+@@ -189,8 +185,8 @@ nv50_instmem_init(struct drm_device *dev)
+
+ i = 0;
+ while (v < dev_priv->vram_sys_base + c_offset + c_size) {
+- BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, v);
+- BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, 0x00000000);
++ BAR0_WI32(priv->pramin_pt->gpuobj, i + 0, lower_32_bits(v));
++ BAR0_WI32(priv->pramin_pt->gpuobj, i + 4, upper_32_bits(v));
+ v += 0x1000;
+ i += 8;
+ }
+@@ -390,7 +386,7 @@ nv50_instmem_populate(struct drm_device *dev, struct nouveau_gpuobj *gpuobj,
+ if (gpuobj->im_backing)
+ return -EINVAL;
+
+- *sz = (*sz + (NV50_INSTMEM_PAGE_SIZE-1)) & ~(NV50_INSTMEM_PAGE_SIZE-1);
++ *sz = ALIGN(*sz, NV50_INSTMEM_PAGE_SIZE);
+ if (*sz == 0)
+ return -EINVAL;
+
+diff --git a/drivers/gpu/drm/nouveau/nv50_sor.c b/drivers/gpu/drm/nouveau/nv50_sor.c
+index c2fff54..4832bba 100644
+--- a/drivers/gpu/drm/nouveau/nv50_sor.c
++++ b/drivers/gpu/drm/nouveau/nv50_sor.c
+@@ -211,7 +211,7 @@ nv50_sor_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ mode_ctl = 0x0200;
+ break;
+ case OUTPUT_DP:
+- mode_ctl |= 0x00050000;
++ mode_ctl |= (nv_encoder->dp.mc_unknown << 16);
+ if (nv_encoder->dcb->sorconf.link & 1)
+ mode_ctl |= 0x00000800;
+ else
+@@ -272,32 +272,22 @@ static const struct drm_encoder_funcs nv50_sor_encoder_funcs = {
+ };
+
+ int
+-nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry)
++nv50_sor_create(struct drm_connector *connector, struct dcb_entry *entry)
+ {
+ struct nouveau_encoder *nv_encoder = NULL;
++ struct drm_device *dev = connector->dev;
+ struct drm_encoder *encoder;
+- bool dum;
+ int type;
+
+ NV_DEBUG_KMS(dev, "\n");
+
+ switch (entry->type) {
+ case OUTPUT_TMDS:
+- NV_INFO(dev, "Detected a TMDS output\n");
++ case OUTPUT_DP:
+ type = DRM_MODE_ENCODER_TMDS;
+ break;
+ case OUTPUT_LVDS:
+- NV_INFO(dev, "Detected a LVDS output\n");
+ type = DRM_MODE_ENCODER_LVDS;
+-
+- if (nouveau_bios_parse_lvds_table(dev, 0, &dum, &dum)) {
+- NV_ERROR(dev, "Failed parsing LVDS table\n");
+- return -EINVAL;
+- }
+- break;
+- case OUTPUT_DP:
+- NV_INFO(dev, "Detected a DP output\n");
+- type = DRM_MODE_ENCODER_TMDS;
+ break;
+ default:
+ return -EINVAL;
+@@ -319,5 +309,29 @@ nv50_sor_create(struct drm_device *dev, struct dcb_entry *entry)
+ encoder->possible_crtcs = entry->heads;
+ encoder->possible_clones = 0;
+
++ if (nv_encoder->dcb->type == OUTPUT_DP) {
++ int or = nv_encoder->or, link = !(entry->dpconf.sor.link & 1);
++ uint32_t tmp;
++
++ tmp = nv_rd32(dev, 0x61c700 + (or * 0x800));
++
++ switch ((tmp & 0x00000f00) >> 8) {
++ case 8:
++ case 9:
++ nv_encoder->dp.mc_unknown = (tmp & 0x000f0000) >> 16;
++ tmp = nv_rd32(dev, NV50_SOR_DP_CTRL(or, link));
++ nv_encoder->dp.unk0 = tmp & 0x000001fc;
++ tmp = nv_rd32(dev, NV50_SOR_DP_UNK128(or, link));
++ nv_encoder->dp.unk1 = tmp & 0x010f7f3f;
++ break;
++ default:
++ break;
++ }
++
++ if (!nv_encoder->dp.mc_unknown)
++ nv_encoder->dp.mc_unknown = 5;
++ }
++
++ drm_mode_connector_attach_encoder(connector, encoder);
+ return 0;
+ }
+--
+1.7.1
+
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/freedo.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/freedo.patch
new file mode 100644
index 000000000..83a7489ab
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/freedo.patch
@@ -0,0 +1,14673 @@
+By Alexandre Oliva, based on Ali Gündüz's
+http://www.aligunduz.org/gNewSense/librelogo-2.6.29-fshoppe1.patch
+
+Updated for 2.6.32 and modified to use this image:
+http://fsfla.org/selibre/linux-libre/100gnu+freedo.png
+
+Image converted using the following commands:
+convert -background black -flatten 100gnu+freedo.png 100gnu+freedo.ppm &&
+ppmquant -fs 223 < 100gnu+freedo.ppm |
+pnmtoplainpnm > drivers/video/logo/logo_libre_clut224.ppm
+
+Index: drivers/video/logo/Kconfig
+===================================================================
+--- linux-2.6.32/drivers/video/logo/Kconfig.orig 2010-01-06 23:07:45.000000000 +0000
++++ linux-2.6.32/drivers/video/logo/Kconfig 2010-01-09 11:30:39.000000000 +0000
+@@ -42,6 +42,10 @@
+ depends on MACH_DECSTATION || ALPHA
+ default y
+
++config LOGO_LIBRE_CLUT224
++ bool "224-color Linux-libre logo"
++ default y
++
+ config LOGO_MAC_CLUT224
+ bool "224-color Macintosh Linux logo"
+ depends on MAC
+Index: drivers/video/logo/logo.c
+===================================================================
+--- linux-2.6.32/drivers/video/logo/logo.c.orig 2010-01-06 23:07:45.000000000 +0000
++++ linux-2.6.32/drivers/video/logo/logo.c 2010-01-09 11:30:39.000000000 +0000
+@@ -75,6 +75,10 @@
+ /* DEC Linux logo on MIPS/MIPS64 or ALPHA */
+ logo = &logo_dec_clut224;
+ #endif
++#ifdef CONFIG_LOGO_LIBRE_CLUT224
++ /* Linux-libre logo */
++ logo = &logo_libre_clut224;
++#endif
+ #ifdef CONFIG_LOGO_MAC_CLUT224
+ /* Macintosh Linux logo on m68k */
+ if (MACH_IS_MAC)
+Index: drivers/video/logo/logo_libre_clut224.ppm
+===================================================================
+--- linux-2.6.32//dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.32/drivers/video/logo/logo_libre_clut224.ppm 2010-01-09 15:31:10.000000000 +0000
+@@ -0,0 +1,14603 @@
++P3
++360 200
++65535
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1028 1028 8455 8455 8455
++16762 16762 16762 18711 18711 18711 18711 18711 18711 18517 18517 18517 17965 17965 17965
++17553 17553 17553 17553 17553 17553 16762 16762 16762 16762 16762 16762 16136 16136 16136
++16762 16762 16762 16136 16136 16136 17553 17553 17553 16762 16762 16762 17553 17553 17553
++17553 17553 17553 17965 17965 17965 16762 16762 16762 11370 11370 11370 4480 4480 4480
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 385 385 334 4874 3558 1459 5943 4354 1886
++1264 929 361 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1264 929 361 5943 4354 1886
++4874 3558 1459 385 385 334 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 6810 6810 6810 2701 2701 2701
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 5911 5911 5911
++18995 18995 18995 19317 19131 18746 18995 18995 18995 17965 17965 17965 10459 10459 10459
++1799 1799 1799 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1413 1670 1799 6427 6427 6427 14506 14506 14506
++18711 18711 18711 18995 18995 18995 18517 18517 18517 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1799 1799 1799 9814 9814 9814 16762 16762 16762 18517 18517 18517 18336 18336 18336
++17965 17965 17965 17965 17965 17965 17965 17965 17965 17553 17553 17553 16762 16762 16762
++16762 16762 16762 17553 17553 17553 18336 18336 18336 15440 15440 15440 3857 3857 3857
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17750 12880 5633 36240 26320 11215 36240 26320 11215 36240 26320 11215
++36240 26320 11215 36240 26320 11215 15792 11440 4871 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 8095 5986 2531 27882 20284 8738
++43194 31354 13386 59002 43055 18866 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 60487 44116 19189 45225 33169 15226 28744 20827 9121 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 12071 8729 3764
++30933 22555 9803 46996 34589 15727 60487 44116 19189 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63236 45897 19634 59002 43055 18866 41427 30069 13197 25195 18262 7789
++4874 3558 1459 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 514 514 514
++21838 21794 21532 44589 44631 44888 43356 43080 42463 40984 40984 40984 38406 38021 37650
++42507 42507 42507 21292 21292 21292 26472 20262 11291 40410 29471 12985 50159 36373 15650
++54363 39457 16879 51340 37280 15909 37303 27193 11910 30042 21792 9253 21142 18577 13954
++38406 38021 37650 44589 44631 44888 46260 45809 45103 38978 38978 38978 26342 26738 26738
++1799 1799 1799 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15792 11440 4871
++36240 26320 11215 36240 26320 11215 36240 26320 11215 36240 26320 11215 36240 26320 11215
++22224 16071 6824 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 16762 16762 16762 22881 22881 22881 24991 24991 24991 15440 15440 15440
++514 514 514 128 128 128 3857 3857 3857 20778 20778 20542 26055 26184 25186
++30840 30197 30069 35838 35838 35838 39900 39413 38599 45746 46260 46746 50115 50774 49729
++52685 52685 52685 55126 54741 54484 55531 55531 55531 56026 55897 55897 56026 55897 55897
++52685 52685 52685 50115 50774 49729 47056 47056 47056 44589 44631 44888 40833 41475 42019
++38978 38978 38978 35838 35838 35838 33681 33681 33681 26342 26738 26738 7197 7197 7197
++0 0 0 128 128 128 514 514 514 14506 14506 14506 20263 20263 20263
++11370 11370 11370 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 4480 4480 4480 17965 17965 17965 17965 17965 17965 18336 18336 18336
++16762 16762 16762 7197 7197 7197 514 514 514 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 1028 1285 1542 3079 3079 3079 15440 15440 15440
++20778 20778 20542 16762 16762 16762 17553 17553 17553 8455 8455 8455 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 2402 1799 684
++37303 27193 11910 63736 46260 19789 63359 45859 19672 63486 46079 19711 63359 45859 19672
++63486 46079 19711 63236 45897 19634 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5943 4354 1886 37303 27193 11910 63236 45897 19634 63486 46079 19711
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 63112 45588 19556 63736 46260 19789 62986 45716 19556
++40410 29471 12985 5943 4354 1886 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 10498 7619 3259 45225 33169 15226 63736 46260 19789
++63736 46260 19789 63112 45588 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19455 63236 45897 19634 63486 46079 19711
++61861 44933 19292 30933 22555 9803 3038 2204 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1028 1028 35838 35838 35838
++44589 44631 44888 24991 24991 24991 40984 40984 40984 44589 44631 44888 42507 42507 42507
++46260 45809 45103 52942 51360 49402 54209 48830 40477 62486 45353 19401 63486 46079 19711
++63736 46260 19789 63486 46335 19711 63112 45588 19556 54760 46836 33773 52942 51360 49402
++49304 49177 49053 46260 45809 45103 42507 42507 42507 33681 33681 33681 38406 38021 37650
++40833 41475 42019 2701 2701 2701 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 3038 2204 899 57142 41714 18588
++63486 46079 19711 63359 45859 19672 63486 46079 19711 63486 46079 19711 62340 45076 19410
++9123 6640 2832 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4480 4480 4480 18995 18995 18995
++17965 17965 17965 3079 3079 3079 0 0 0 4480 4480 4480 24991 24991 24991
++38406 38021 37650 50115 50774 49729 60933 60933 60933 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535 63607 63607 63607
++55126 54741 54484 44589 44631 44888 26055 26184 25186 2701 2701 2701 0 0 0
++8455 8455 8455 20263 20263 20263 9814 9814 9814 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1285 1542 18517 18517 18517
++20263 20263 20263 13752 13752 13752 642 642 899 1799 1927 2184 22881 22881 22881
++35502 34869 34383 38978 38978 38978 44589 44631 44888 49304 49177 49053 55126 54741 54484
++57470 57470 57470 56283 56283 56283 55126 55126 55126 53256 53199 52942 52119 52119 51914
++50115 50774 49729 47056 47056 47056 40984 40984 40984 35838 35838 35838 28239 28239 28239
++20263 20263 20263 6810 6810 6810 0 0 0 8455 8455 8455 17553 17553 17553
++17553 17553 17553 17553 17553 17553 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 13872 10127 4336 55635 40828 18345
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 60487 44116 19189 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 61861 44933 19292 17750 12880 5633 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 28744 20827 9121 62986 45716 19556 63112 45588 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63736 46260 19789 57142 41714 18588 9123 6640 2832 128 128 128
++0 0 0 0 0 0 0 0 0 26342 26738 26738 47056 47056 47056
++18336 18336 18336 46260 45809 45103 20263 20263 20263 1772 1533 1155 30933 22555 9803
++64250 47031 20303 63486 46079 19455 63483 46207 20056 62859 46189 20912 63864 46774 20174
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63864 46774 20174 62859 46189 20912
++62859 46189 20912 57142 41714 18588 13905 12704 8095 31875 31875 31875 35838 35838 35838
++35502 34869 34383 30583 30843 31357 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 37303 27193 11910 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 30042 21792 9253
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 19317 19131 18746 14506 14506 14506 0 0 0
++2701 2701 2701 30840 30197 30069 49304 49177 49053 61309 61309 61309 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 57470 57470 57470 31875 31875 31875
++11370 11370 11370 0 0 0 9814 9814 9814 20263 20263 20263 3079 3079 3079
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 514 514 514 17553 17553 17553 18995 18995 18995 1028 1028 1028
++5911 5911 5911 26055 26184 25186 44589 44631 44888 58889 58889 58889 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 55126 55126 55126 42507 42507 42507 26055 26184 25186
++6810 6810 6810 128 128 128 10459 10459 10459 18995 18995 18995 13752 13752 13752
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 1264 929 361 34164 24785 10813 63236 45897 19634 63112 45588 19556
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 19371 14059 6014
++62486 45353 19401 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 62737 45569 19692 19371 14059 6014 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30933 22555 9803 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62486 45353 19401 59002 43055 18866 10498 7619 3259
++0 0 0 0 0 0 1772 1533 1155 45746 46260 46746 24991 24991 24991
++40984 40984 40984 20263 20263 20263 0 0 0 20895 15087 6460 63359 45859 19672
++61241 45992 22579 56411 51914 44332 59162 58263 57054 52119 52119 51914 50976 48701 42982
++57302 45835 26989 54760 46836 33773 52942 51360 49402 56026 55897 55897 56411 51914 44332
++59969 46214 26008 63112 45588 19556 51340 37280 15909 2402 1799 684 40833 41475 42019
++16762 16762 16762 53256 53199 52942 7197 7197 7197 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 15792 11440 4871 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 51340 37280 15909 385 385 334
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15440 15440 15440
++20263 20263 20263 8455 8455 8455 0 0 0 9814 9814 9814 38406 38021 37650
++57470 57470 57470 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63222 63222 63222 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 42507 42507 42507 35502 34869 34383
++44589 44631 44888 55531 55531 55531 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 33681 33681 33681 6427 6427 6427 257 257 257 17553 17553 17553
++16762 16762 16762 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12931 12931 12931 21292 21292 21292 3079 3079 3079 8455 8455 8455 31875 31875 31875
++58889 58889 58889 65278 65278 65278 65535 65535 65535 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535
++62708 62708 62708 47697 47615 47488 28239 28239 28239 11370 11370 11370 4480 4480 4480
++20263 20263 20263 17553 17553 17553 1799 1799 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10498 7619 3259 53070 38550 16467 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 62986 45716 19556 12071 8729 3764
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 23177 16932 7265
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 57142 41714 18588
++4874 3558 1459 0 0 0 16762 16762 16762 61680 61680 61680 12931 12931 12931
++42507 42507 42507 642 642 899 2402 1799 684 57142 41714 18588 61113 45548 20995
++56411 51914 44332 35838 35838 35838 11370 11370 11370 257 257 257 20263 20263 20263
++47056 47056 47056 40984 40984 40984 38406 38021 37650 10459 10459 10459 24991 24991 24991
++52942 51360 49402 62859 46189 20912 63864 46774 20174 27882 20284 8738 28239 28239 28239
++21292 21292 21292 55531 55531 55531 18995 18995 18995 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2402 1799 684 55635 40828 18345 63112 45588 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62486 45353 19401 10498 7619 3259 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 8455 8455 8455 21292 21292 21292 5911 5911 5911
++0 0 0 16762 16762 16762 42507 42507 42507 62065 62065 62065 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61309 61309 61309 40984 40984 40984 8455 8455 8455 17965 17965 17965 31875 31875 31875
++44589 44631 44888 55126 55126 55126 64507 64507 64507 64124 64124 64124 52119 52119 51914
++38406 38021 37650 20778 20778 20542 1028 1028 1028 128 128 128 0 0 0
++0 0 0 0 0 0 12931 12931 12931 30840 30197 30069 38978 38978 38978
++45746 46260 46746 53256 53199 52942 59538 59538 59538 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 28239 28239 28239 1799 1799 1799
++4480 4480 4480 21838 21794 21532 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3857 3857 3857 22359 22625 23010
++9814 9814 9814 4480 4480 4480 33681 33681 33681 60652 60652 60652 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 50115 50774 49729 60266 60266 60266
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62065 62065 62065 38406 38021 37650
++14506 14506 14506 1028 1285 1542 17553 17553 17553 20263 20263 20263 6427 6427 6427
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 128 128 128 30042 21792 9253
++62486 45353 19401 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 50159 36373 15650 62986 45716 19556
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634
++63236 45897 19634 53070 38550 16467 30933 22555 9803 25195 18262 7789 25195 18262 7789
++30933 22555 9803 48838 36002 16378 63736 46260 19789 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 51340 37280 15909
++385 385 334 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4874 3558 1459 59002 43055 18866
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63093 45874 19660 63112 45588 19556 46996 34589 15727 30933 22555 9803 23177 16932 7265
++25195 18262 7789 34164 24785 10813 54363 39457 16879 63736 46260 19789 63236 45897 19634
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++37303 27193 11910 0 0 0 16762 16762 16762 63607 63607 63607 11370 11370 11370
++40984 40984 40984 128 128 128 23177 16932 7265 63483 46207 20056 50629 49986 46941
++31875 31875 31875 0 0 0 0 0 0 0 0 0 385 385 334
++30840 30197 30069 60266 60266 60266 56283 56283 56283 26342 26738 26738 0 0 0
++17553 17553 17553 56411 51914 44332 62856 45897 20023 55635 40828 18345 24991 24991 24991
++24991 24991 24991 55531 55531 55531 21838 21794 21532 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 36240 26320 11215 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 30933 22555 9803 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++2701 2701 2701 21292 21292 21292 12931 12931 12931 0 0 0 8455 8455 8455
++38978 38978 38978 64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607 44589 44631 44888
++12931 12931 12931 0 0 0 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 12931 12931 12931 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1799 1799 1799 12931 12931 12931 26342 26738 26738
++50115 50774 49729 65535 65535 65535 65535 65535 65535 65278 65278 65278 52119 52119 51914
++20263 20263 20263 128 128 128 13752 13752 13752 20778 20778 20542 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 11370 11370 11370 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 16762 16762 16762 18995 18995 18995 257 257 257
++22881 22881 22881 55531 55531 55531 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 55531 55531 55531 47697 47615 47488
++35838 35838 35838 22881 22881 22881 3079 3079 3079 128 128 128 4480 4480 4480
++30840 30197 30069 44589 44631 44888 60266 60266 60266 65535 65535 65535 65535 65535 65535
++64764 64764 64764 55531 55531 55531 44589 44631 44888 33681 33681 33681 47056 47056 47056
++64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 44589 44631 44888 20263 20263 20263 0 0 0 13752 13752 13752
++14506 14506 14506 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8373 6077 2600 48838 36002 16378 63486 46079 19455
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 25195 18262 7789 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 57142 41714 18588
++15792 11440 4871 0 0 0 128 128 128 128 128 128 0 0 0
++0 0 0 0 0 0 13872 10127 4336 54363 39457 16879 63486 46079 19711
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++25195 18262 7789 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 37303 27193 11910 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++51340 37280 15909 9123 6640 2832 0 0 0 0 0 0 128 128 128
++128 128 128 0 0 0 0 0 0 20895 15087 6460 61451 44536 19168
++62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 12071 8729 3764 11370 11370 11370 60933 60933 60933 20263 20263 20263
++44589 44631 44888 11370 11370 11370 48838 36002 16378 50629 49986 46941 30840 30197 30069
++17553 17553 17553 28239 28239 28239 38978 38978 38978 44589 44631 44888 53256 53199 52942
++58889 58889 58889 56026 55897 55897 55126 55126 55126 56283 56283 56283 33681 33681 33681
++24991 24991 24991 28239 28239 28239 56411 51914 44332 62859 46189 20912 38406 38021 37650
++20778 20778 20542 58889 58889 58889 22881 22881 22881 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++13872 10127 4336 63093 45874 19660 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 53070 38550 16467 1264 929 361 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17553 17553 17553
++18995 18995 18995 514 514 514 1799 1799 1799 28239 28239 28239 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52119 52119 51914 42507 42507 42507 44589 44631 44888 47056 47056 47056
++49621 49621 49607 52119 52119 51914 47056 47056 47056 18711 18711 18711 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 26055 26184 25186 4480 4480 4480
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 15440 15440 15440 11370 11370 11370 0 0 0 257 257 257
++1028 1285 1542 42507 42507 42507 65021 65021 65021 65535 65535 65535 65278 65278 65278
++64764 64764 64764 44589 44631 44888 12931 12931 12931 257 257 257 14506 14506 14506
++20263 20263 20263 15440 15440 15440 2313 2313 2313 4480 4480 4480 14506 14506 14506
++18995 18995 18995 20778 20778 20542 11370 11370 11370 15440 15440 15440 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1413 1670 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++7197 7197 7197 22881 22881 22881 5911 5911 5911 16136 16136 16136 47697 47615 47488
++65278 65278 65278 65535 65535 65535 65535 65535 65535 62065 62065 62065 39900 39413 38599
++31875 31875 31875 21838 21794 21532 6810 6810 6810 0 0 0 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 4480 4480 4480 28239 28239 28239 31875 31875 31875
++14506 14506 14506 128 128 128 0 0 0 0 0 0 128 128 128
++24991 24991 24991 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 45746 46260 46746 8455 8455 8455
++6427 6427 6427 21292 21292 21292 1799 1799 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 36240 26320 11215 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++43194 31354 13386 63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 54363 39457 16879 63359 45859 19672 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19711 61451 44536 19168 10498 7619 3259
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 8095 5986 2531 60487 44116 19189
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++55635 40828 18345 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 4874 3558 1459 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 54363 39457 16879
++3038 2204 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 17750 12880 5633
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++63486 46079 19455 41427 30069 13197 2701 2701 2701 50115 50774 49729 31875 31875 31875
++22881 22881 22881 50115 50774 49729 46260 45809 45103 20263 20263 20263 44589 44631 44888
++65278 65278 65278 62708 62708 62708 39900 39413 38599 44589 44631 44888 65535 65535 65535
++51400 51400 51400 61309 61309 61309 55126 55126 55126 44589 44631 44888 55126 54741 54484
++65021 65021 65021 30583 30843 31357 24991 24991 24991 52942 51360 49402 35838 35838 35838
++13752 13752 13752 52685 52685 52685 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 1264 929 361
++54363 39457 16879 63359 45859 19672 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63093 45874 19660 12071 8729 3764 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3079 3079 3079 21838 21794 21532 4480 4480 4480
++0 0 0 17553 17553 17553 49304 49177 49053 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61680 61680 61680 14506 14506 14506 128 128 128 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8455 8455 8455 45746 46260 46746 65021 65021 65021 56283 56283 56283
++28239 28239 28239 0 0 0 0 0 0 0 0 0 18995 18995 18995
++46260 45809 45103 63222 63222 63222 63222 63222 63222 49304 49177 49053 31875 31875 31875
++8455 8455 8455 0 0 0 30583 30843 31357 62065 62065 62065 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 42507 42507 42507 12931 12931 12931
++0 0 0 3079 3079 3079 20263 20263 20263 14506 14506 14506 4480 4480 4480
++0 0 0 10459 10459 10459 8455 8455 8455 10459 10459 10459 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8455 8455 8455 30840 30197 30069 10459 10459 10459
++257 257 257 0 0 0 0 0 0 7197 7197 7197 26055 26184 25186
++17965 17965 17965 10459 10459 10459 43356 43080 42463 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 22359 22625 23010 128 128 128
++0 0 0 4480 4480 4480 2313 2313 2313 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3079 3079 3079 9814 9814 9814
++0 0 0 0 0 0 0 0 0 128 128 128 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 2313 2313 2313 35838 35838 35838 58889 58889 58889 59538 59538 59538
++57470 57470 57470 55126 54741 54484 51400 51400 51400 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283
++24991 24991 24991 642 642 899 28239 28239 28239 14506 14506 14506 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 36240 26320 11215 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 61861 44933 19292 25195 18262 7789
++128 128 128 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 13872 10127 4336 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 25195 18262 7789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 13872 10127 4336 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 27882 20284 8738 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 13872 10127 4336
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 61861 44933 19292 3038 2204 899 30840 30197 30069 48486 48538 48538
++8455 8455 8455 6427 6427 6427 7197 7197 7197 39900 39413 38599 65278 65278 65278
++65278 65278 65278 52685 52685 52685 57470 57470 57470 62708 62708 62708 57470 57470 57470
++57069 56684 56283 56283 56283 56283 65535 65535 65535 44589 44631 44888 55531 55531 55531
++65535 65535 65535 64124 64124 64124 13752 13752 13752 2701 2701 2701 5911 5911 5911
++44589 44631 44888 31875 31875 31875 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 34164 24785 10813
++63093 45874 19660 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++34164 24785 10813 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 8455 8455 8455 20263 20263 20263 128 128 128 2313 2313 2313
++35838 35838 35838 64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++38978 38978 38978 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 31875 31875 31875 33681 33681 33681 30583 30843 31357
++26342 26738 26738 26055 26184 25186 28239 28239 28239 33681 33681 33681 38978 38978 38978
++44589 44631 44888 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 48486 48538 48538 28239 28239 28239 47697 47615 47488 64124 64124 64124
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61680 61680 61680 45746 46260 46746 30840 30197 30069 22881 22881 22881 56283 56283 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222
++52685 52685 52685 39900 39413 38599 33681 33681 33681 38406 38021 37650 40984 40984 40984
++50115 50774 49729 33681 33681 33681 16136 16136 16136 3857 3857 3857 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 18995 18995 18995 8455 8455 8455
++17965 17965 17965 17965 17965 17965 24991 24991 24991 16762 16762 16762 4480 4480 4480
++38406 38021 37650 60266 60266 60266 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55531 55531 55531 16136 16136 16136 385 385 334 22359 22625 23010
++43356 43080 42463 59538 59538 59538 55126 54741 54484 30840 30197 30069 1028 1028 1028
++0 0 0 0 0 0 20263 20263 20263 53256 53199 52942 57069 56684 56283
++24991 24991 24991 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1799 1799 1799 514 514 514
++0 0 0 0 0 0 0 0 0 22881 22881 22881 64124 64124 64124
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64507 64507 64507 38978 38978 38978 1028 1028 1028 18995 18995 18995 16136 16136 16136
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 36240 26320 11215 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 51340 37280 15909 9123 6640 2832 0 0 0
++0 0 0 62486 45353 19401 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 36240 26320 11215 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 59002 43055 18866 2402 1799 684 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 2402 1799 684
++59002 43055 18866 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 37303 27193 11910 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 50159 36373 15650 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63112 45588 19556 48838 36002 16378 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10498 7619 3259 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63864 46774 20174 23177 16932 7265 3079 3079 3079 43356 43080 42463
++50115 50774 49729 30583 30843 31357 17965 17965 17965 63607 63607 63607 65535 65535 65535
++65535 65535 65535 60933 60933 60933 65535 65535 65535 47056 47056 47056 22881 22881 22881
++56283 56283 56283 63222 63222 63222 65278 65278 65278 42507 42507 42507 26342 26738 26738
++64507 64507 64507 65278 65278 65278 38978 38978 38978 30840 30197 30069 51400 51400 51400
++45746 46260 46746 4480 4480 4480 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12071 8729 3764 62737 45569 19692
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 54363 39457 16879
++1413 1028 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 14506 14506 14506 0 0 0 8455 8455 8455 49621 49621 49607
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55531 55531 55531
++3857 3857 3857 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 31875 31875 31875 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 60266 60266 60266 49304 49177 49053
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++43356 43080 42463 642 642 899 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 9814 9814 9814
++22881 22881 22881 3857 3857 3857 16762 16762 16762 33681 33681 33681 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52119 52119 51914 21292 21292 21292 35838 35838 35838 55126 54741 54484 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 52685 52685 52685
++28239 28239 28239 39900 39413 38599 63222 63222 63222 65535 65535 65535 65535 65535 65535
++63607 63607 63607 44589 44631 44888 35838 35838 35838 31875 31875 31875 24991 24991 24991
++20263 20263 20263 24991 24991 24991 28239 28239 28239 31875 31875 31875 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 47056 47056 47056
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 44589 44631 44888 3079 3079 3079 6810 6810 6810
++21292 21292 21292 514 514 514 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 36240 26320 11215 63736 46260 19789 62986 45716 19556
++63486 46079 19711 34164 24785 10813 1264 929 361 128 128 128 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 59002 43055 18866 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 37303 27193 11910 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++34164 24785 10813 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 59002 43055 18866 257 257 257 0 0 0 0 0 0
++0 0 0 8095 5986 2531 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 25195 18262 7789 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 50159 36373 15650 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63112 45588 19556 45225 33169 15226 128 128 128 7197 7197 7197
++35502 34869 34383 49621 49621 49607 46260 45809 45103 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52119 52119 51914 65535 65535 65535 61309 61309 61309 58889 58889 58889
++62065 62065 62065 65535 65535 65535 65535 65535 65535 58889 58889 58889 48486 48538 48538
++63607 63607 63607 65535 65535 65535 64124 64124 64124 43356 43080 42463 49644 44138 34157
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 51340 37280 15909 63486 46079 19711
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 13872 10127 4336
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20778 20778 20542
++8455 8455 8455 0 0 0 20263 20263 20263 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 26342 26738 26738
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++21292 21292 21292 61680 61680 61680 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056
++7197 7197 7197 7197 7197 7197 13752 13752 13752 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18711 18711 18711 3079 3079 3079
++44589 44631 44888 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889
++49621 49621 49607 63222 63222 63222 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65278 65278 65278 44589 44631 44888
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15440 15440 15440
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607 6427 6427 6427
++1799 1799 1799 21838 21794 21532 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 36240 26320 11215 63736 46260 19789 57142 41714 18588
++15792 11440 4871 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++19371 14059 6014 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 8373 6077 2600 0 0 0 0 0 0
++0 0 0 20895 15087 6460 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 8095 5986 2531 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++385 385 334 30933 22555 9803 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 59002 43055 18866 0 0 0 0 0 0
++642 642 899 37343 28956 15254 50629 49986 46941 65535 65535 65535 65535 65535 65535
++61680 61680 61680 42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 52119 52119 51914
++50976 48701 42982 52942 51360 49402 64124 64124 64124 54998 53713 52556 57302 45835 26989
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19711 36240 26320 11215 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 20778 20778 20542 3857 3857 3857
++257 257 257 33681 33681 33681 62065 62065 62065 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 50115 51271 50886 42507 42507 42507
++35838 35838 35838 31875 31875 31875 26342 26738 26738 16136 16136 16136 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 11370 11370 11370
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++56026 55897 55897 45746 46260 46746 40984 40984 40984 39900 39413 38599 38978 38978 38978
++35838 35838 35838 35838 35838 35838 38406 38021 37650 44589 44631 44888 51400 51400 51400
++58889 58889 58889 64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 56283 56283 56283 28239 28239 28239 1413 1670 1799
++4480 4480 4480 20263 20263 20263 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 22359 22625 23010
++5911 5911 5911 55531 55531 55531 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++33681 33681 33681 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 50115 51271 50886
++5911 5911 5911 3079 3079 3079 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 36240 26320 11215 43194 31354 13386 4874 3558 1459
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 5943 4354 1886 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3038 2204 899 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 20895 15087 6460 0 0 0 0 0 0
++0 0 0 30933 22555 9803 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 57142 41714 18588 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17750 12880 5633 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 5943 4354 1886 128 128 128
++0 0 0 33304 29072 24800 62708 62708 62708 65021 65021 65021 55531 55531 55531
++47697 47615 47488 62708 62708 62708 64507 64507 64507 65535 65535 65535 65535 65535 65535
++55126 54741 54484 49304 49177 49053 53256 53199 52942 57470 57470 57470 64124 64124 64124
++46384 44975 41762 54760 46836 33773 49644 44138 34157 56972 46962 30007 61241 45992 22579
++3038 2204 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 10498 7619 3259 62340 45076 19410 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 55635 40828 18345 2402 1799 684 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 16762 16762 16762 8455 8455 8455 128 128 128
++38406 38021 37650 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 55126 54741 54484 2313 2313 2313 0 0 0
++385 385 334 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 44589 44631 44888 52119 52119 51914
++53256 53199 52942 53256 53199 52942 53256 53199 52942 55126 54741 54484 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++60266 60266 60266 45746 46260 46746 38406 38021 37650 26342 26738 26738 10459 10459 10459
++257 257 257 128 128 128 128 128 128 128 128 128 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++642 642 899 8455 8455 8455 24991 24991 24991 31875 31875 31875 40984 40984 40984
++51400 51400 51400 59538 59538 59538 64124 64124 64124 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64507 64507 64507 59538 59538 59538 49621 49621 49607
++39900 39413 38599 28239 28239 28239 3857 3857 3857 0 0 0 13752 13752 13752
++18995 18995 18995 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 6810 6810 6810
++16762 16762 16762 15440 15440 15440 47056 47056 47056 63607 63607 63607 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507 58889 58889 58889
++53256 53199 52942 49304 49177 49053 44589 44631 44888 40984 40984 40984 35838 35838 35838
++35502 34869 34383 38978 38978 38978 44589 44631 44888 49621 49621 49607 59538 59538 59538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60933 60933 60933 20778 20778 20542 1028 1285 1542 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++2313 2313 2313 17553 17553 17553 28239 28239 28239 33681 33681 33681 38978 38978 38978
++48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 4480 4480 4480 4480 4480 4480 18336 18336 18336 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 8373 6077 2600 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30042 21792 9253 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 60487 44116 19189 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 57142 41714 18588 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 30933 22555 9803 0 0 0 0 0 0
++128 128 128 43194 31354 13386 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 45225 33169 15226 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 5943 4354 1886 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 17750 12880 5633 0 0 0
++3857 3857 3857 46384 44975 41762 54998 53713 52556 46384 44975 41762 49644 44138 34157
++52119 52119 51914 65535 65535 65535 65535 65535 65535 63222 63222 63222 65535 65535 65535
++47056 47056 47056 50115 51271 50886 47056 47056 47056 60933 60933 60933 60933 60933 60933
++65021 65021 65021 57069 56684 56283 58276 44060 22272 62856 45897 20023 63486 46079 19711
++2402 1799 684 0 0 0 0 0 0 0 0 0 0 0 0
++385 385 334 50159 36373 15650 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 15792 11440 4871 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12931 12931 12931 14506 14506 14506 0 0 0 31875 31875 31875
++65021 65021 65021 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64507 64507 64507 24991 24991 24991 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18336 18336 18336 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 63607 63607 63607 49621 49621 49607 30583 30843 31357
++4480 4480 4480 128 128 128 0 0 0 3079 3079 3079 20778 20778 20542
++24991 24991 24991 21292 21292 21292 18336 18336 18336 18517 18517 18517 18517 18517 18517
++18517 18517 18517 17553 17553 17553 16762 16762 16762 17553 17553 17553 18336 18336 18336
++17965 17965 17965 8455 8455 8455 0 0 0 0 0 0 128 128 128
++0 0 0 642 642 899 6810 6810 6810 13752 13752 13752 19317 19131 18746
++15440 15440 15440 11370 11370 11370 6427 6427 6427 1799 1799 1799 0 0 0
++128 128 128 12931 12931 12931 18336 18336 18336 18995 18995 18995 8455 8455 8455
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 28239 28239 28239 3857 3857 3857 17553 17553 17553 43356 43080 42463
++55126 54741 54484 56026 55897 55897 59538 59538 59538 62708 62708 62708 64764 64764 64764
++62065 62065 62065 58889 58889 58889 56283 56283 56283 52685 52685 52685 49621 49621 49607
++43356 43080 42463 35838 35838 35838 26342 26738 26738 12931 12931 12931 1028 1028 1028
++128 128 128 514 514 514 6427 6427 6427 14506 14506 14506 20263 20263 20263
++18995 18995 18995 10459 10459 10459 128 128 128 0 0 0 2313 2313 2313
++22881 22881 22881 38406 38021 37650 57470 57470 57470 65535 65535 65535 65535 65535 65535
++65535 65535 65535 62065 62065 62065 58889 58889 58889 58889 58889 58889 57470 57470 57470
++57470 57470 57470 55531 55531 55531 6427 6427 6427 0 0 0 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++2313 2313 2313 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 49304 49177 49053 3079 3079 3079 7197 7197 7197 16136 16136 16136
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 62486 45353 19401 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 53070 38550 16467 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 50159 36373 15650 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 43194 31354 13386 257 257 257 0 0 0
++0 0 0 54363 39457 16879 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 37303 27193 11910 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 62486 45353 19401 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 30042 21792 9253 0 0 0
++11370 11370 11370 31875 31875 31875 51153 41368 24286 48838 36002 16378 59969 46214 26008
++46384 44975 41762 65535 65535 65535 65535 65535 65535 62708 62708 62708 60933 60933 60933
++64124 64124 64124 64124 64124 64124 60266 60266 60266 61309 61309 61309 65535 65535 65535
++65535 65535 65535 50976 48701 42982 61241 45992 22579 64250 47031 20303 63112 45588 19556
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++27882 20284 8738 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 37303 27193 11910 128 128 128 0 0 0 0 0 0
++0 0 0 8373 6077 2600 19371 14059 6014 25195 18262 7789 23177 16932 7265
++17750 12880 5633 4874 3558 1459 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++8455 8455 8455 16762 16762 16762 0 0 0 26342 26738 26738 63222 63222 63222
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 47056 47056 47056 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 43356 43080 42463 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 55126 55126 38406 38021 37650 13752 13752 13752 0 0 0 0 0 0
++15440 15440 15440 26342 26738 26738 24991 24991 24991 15440 15440 15440 2701 2701 2701
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++385 385 334 10459 10459 10459 17553 17553 17553 17553 17553 17553 17553 17553 17553
++18517 18517 18517 18336 18336 18336 18336 18336 18336 17553 17553 17553 16136 16136 16136
++17965 17965 17965 17553 17553 17553 16762 16762 16762 16762 16762 16762 16762 16762 16762
++16762 16762 16762 6427 6427 6427 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 16762 16762 16762 20263 20263 20263 12931 12931 12931
++1799 1927 2184 257 257 257 1028 1028 1028 5911 5911 5911 8455 8455 8455
++5911 5911 5911 1028 1285 1542 0 0 0 0 0 0 128 128 128
++2701 2701 2701 14506 14506 14506 22359 22625 23010 22881 22881 22881 20778 20778 20542
++18711 18711 18711 17553 17553 17553 12931 12931 12931 4480 4480 4480 0 0 0
++257 257 257 8455 8455 8455 18711 18711 18711 20263 20263 20263 24991 24991 24991
++21838 21794 21532 1028 1285 1542 3079 3079 3079 31875 31875 31875 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 35502 34869 34383 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47697 47615 47488 2313 2313 2313 9814 9814 9814
++13752 13752 13752 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++45225 33169 15226 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 40410 29471 12985 62737 45569 19692 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 50159 36373 15650 0 0 0 0 0 0
++0 0 0 60487 44116 19189 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 30933 22555 9803 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 55635 40828 18345 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 36240 26320 11215 0 0 0
++128 128 128 28744 20827 9121 58279 45589 26504 48838 36002 16378 63486 46079 19455
++46384 44975 41762 65535 65535 65535 65535 65535 65535 65278 65278 65278 62065 62065 62065
++53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++48486 48538 48538 58276 44060 22272 63736 46260 19789 63486 46079 19455 60487 44116 19189
++0 0 0 0 0 0 0 0 0 128 128 128 8373 6077 2600
++61861 44933 19292 63486 46079 19711 63736 46260 19789 63736 46260 19789 62986 45716 19556
++57142 41714 18588 3038 2204 899 128 128 128 1413 1028 514 27882 20284 8738
++55635 40828 18345 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63112 45588 19556 48838 36002 16378 17750 12880 5633 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3079 3079 3079
++18711 18711 18711 128 128 128 21838 21794 21532 60933 60933 60933 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60652 60652 60652 12931 12931 12931 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9814 9814 9814 61680 61680 61680 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 56283 56283 56283 30840 30197 30069
++642 642 899 128 128 128 5911 5911 5911 21838 21794 21532 20263 20263 20263
++5911 5911 5911 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1028 1028 2313 2313 2313
++0 0 0 0 0 0 128 128 128 0 0 0 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 5911 5911 5911
++15440 15440 15440 16762 16762 16762 17553 17553 17553 18517 18517 18517 18517 18517 18517
++18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18336 18336 18336
++14506 14506 14506 3857 3857 3857 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++2313 2313 2313 20263 20263 20263 24991 24991 24991 8455 8455 8455 1028 1028 1028
++26342 26738 26738 56283 56283 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 514 514 514 50115 50774 49729 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 43356 43080 42463 1799 1927 2184
++11370 11370 11370 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++50159 36373 15650 63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 37303 27193 11910 875 620 271 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 53070 38550 16467 0 0 0 0 0 0
++0 0 0 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 25195 18262 7789 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 51340 37280 15909 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62737 45569 19692 37303 27193 11910 257 257 257
++0 0 0 22224 16071 6824 63864 46774 20174 51153 41368 24286 61113 45548 20995
++51153 41368 24286 46260 45809 45103 65535 65535 65535 65535 65535 65535 65535 65535 65535
++48486 48538 48538 58889 58889 58889 65535 65535 65535 64124 64124 64124 59538 59538 59538
++56026 55897 55897 49644 44138 34157 62486 45353 19401 64250 47031 20303 53070 38550 16467
++0 0 0 0 0 0 0 0 0 128 128 128 46996 34589 15727
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++17750 12880 5633 128 128 128 5943 4354 1886 53070 38550 16467 63736 46260 19789
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63112 45588 19556 63486 46079 19455 37303 27193 11910
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20778 20778 20542
++128 128 128 15440 15440 15440 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607
++35502 34869 34383 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 61309 61309 61309 38406 38021 37650 3857 3857 3857 0 0 0
++13752 13752 13752 18995 18995 18995 13752 13752 13752 0 0 0 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 11370 11370 11370 19317 19131 18746
++14506 14506 14506 7197 7197 7197 46260 45809 45103 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 22881 22881 22881 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 21292 21292 21292 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 35502 34869 34383
++128 128 128 20778 20778 20542 642 642 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++53070 38550 16467 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 37303 27193 11910 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 34164 24785 10813 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 55635 40828 18345 0 0 0 128 128 128
++1413 1028 514 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 23177 16932 7265 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 48838 36002 16378 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 41427 30069 13197 0 0 0
++0 0 0 10498 7619 3259 61113 45548 20995 51153 41368 24286 64250 47031 20303
++61451 44536 19168 49644 44138 34157 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65278 65278 65278 55126 54741 54484 49621 49621 49607 49621 49621 49607 52942 51360 49402
++43356 43080 42463 63486 46079 19711 63736 46260 19789 62486 45353 19401 40410 29471 12985
++0 0 0 0 0 0 128 128 128 25195 18262 7789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634 40410 29471 12985
++0 0 0 3855 2930 1607 54363 39457 16879 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 59002 43055 18866 46996 34589 15727 51340 37280 15909
++62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++36240 26320 11215 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10459 10459 10459 10459 10459 10459
++1028 1285 1542 51400 51400 51400 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63222 63222 63222 46260 45809 45103 17553 17553 17553
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2701 2701 2701 28239 28239 28239
++44589 44631 44888 61680 61680 61680 65278 65278 65278 65535 65535 65535 65535 65535 65535
++55126 55126 55126 17553 17553 17553 0 0 0 3857 3857 3857 21292 21292 21292
++7197 7197 7197 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++8455 8455 8455 21292 21292 21292 3857 3857 3857 24991 24991 24991 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47697 47615 47488 3857 3857 3857
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 38406 38021 37650 61309 61309 61309
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764
++18336 18336 18336 1799 1799 1799 19317 19131 18746 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++55635 40828 18345 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 34164 24785 10813 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 34164 24785 10813 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 59002 43055 18866 128 128 128 0 0 0
++4874 3558 1459 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 20895 15087 6460 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 45225 33169 15226 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 45225 33169 15226 0 0 0
++0 0 0 257 257 257 61861 44933 19292 51153 41368 24286 58276 44060 22272
++62856 45897 20023 51153 41368 24286 35502 34869 34383 59538 59538 59538 65535 65535 65535
++65535 65535 65535 64124 64124 64124 52685 52685 52685 43356 43080 42463 46260 45809 45103
++54760 46836 33773 63236 45897 19634 63864 46774 20174 63736 46260 19789 27882 20284 8738
++0 0 0 0 0 0 7209 5285 2184 61451 44536 19168 63486 46079 19711
++63736 46260 19789 63736 46260 19789 63236 45897 19634 59002 43055 18866 3855 2930 1607
++0 0 0 36240 26320 11215 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 37343 28956 15254 30583 30843 31357 36810 46686 56154 33153 41891 50372
++26055 26184 25186 51150 38050 17516 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63486 46079 19711 15792 11440 4871 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 385 385 334 20778 20778 20542 128 128 128
++35502 34869 34383 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 56026 55897 55897 17553 17553 17553 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 24991 24991 24991 43356 43080 42463 58889 58889 58889 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056
++6810 6810 6810 128 128 128 15440 15440 15440 17553 17553 17553 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 17553 17553 17553 11370 11370 11370 13752 13752 13752
++52119 52119 51914 65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889
++42507 42507 42507 20778 20778 20542 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 13752 13752 13752
++43356 43080 42463 63607 63607 63607 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52685 52685 52685 3857 3857 3857 12931 12931 12931 8455 8455 8455 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++59002 43055 18866 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 34164 24785 10813 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 30042 21792 9253 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 61861 44933 19292 0 0 0 0 0 0
++8095 5986 2531 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 19371 14059 6014 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 43194 31354 13386 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19455 46996 34589 15727 0 0 0
++0 0 0 257 257 257 41427 30069 13197 63486 46079 19455 49644 44138 34157
++63864 46774 20174 63736 46260 19789 51153 41368 24286 38406 38021 37650 44589 44631 44888
++64507 64507 64507 62708 62708 62708 51400 51400 51400 43356 43080 42463 62859 46189 20912
++63483 46207 20056 63736 46260 19789 63736 46260 19789 63486 46079 19711 8373 6077 2600
++0 0 0 128 128 128 45225 33169 15226 63093 45874 19660 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 17750 12880 5633 8095 5986 2531
++15792 11440 4871 43194 31354 13386 63736 46260 19789 63486 46079 19711 63864 46774 20174
++46996 34589 15727 33153 41891 50372 26085 33024 39578 40349 51271 61680 23901 28398 32639
++42533 53970 64764 30583 30843 31357 57142 41714 18588 61861 44933 19292 63736 46260 19789
++63112 45588 19556 48838 36002 16378 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18517 18517 18517 3079 3079 3079 12931 12931 12931
++60266 60266 60266 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 46260 45809 45103 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++20263 20263 20263 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888 514 514 514
++6427 6427 6427 21292 21292 21292 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 11370 11370 11370 16136 16136 16136
++3079 3079 3079 46260 45809 45103 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65278 65278 65278 65021 65021 65021 52685 52685 52685 22881 22881 22881 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 43356 43080 42463 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 0 0 0 20263 20263 20263 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++60487 44116 19189 63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 30933 22555 9803 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 28744 20827 9121 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62486 45353 19401 0 0 0 0 0 0
++9123 6640 2832 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 17750 12880 5633 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 43194 31354 13386 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 50159 36373 15650 0 0 0
++0 0 0 0 0 0 17750 12880 5633 63736 46260 19789 63486 46079 19455
++56972 46962 30007 63486 46079 19711 55635 40828 18345 26342 26738 26738 16136 16136 16136
++64507 64507 64507 65535 65535 65535 59538 59538 59538 52942 51360 49402 58276 44060 22272
++64250 47031 20303 63486 46079 19455 63093 45874 19660 48838 36002 16378 0 0 0
++0 0 0 23177 16932 7265 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 26472 20262 11291 26342 26738 26738 28239 28239 28239
++31142 24711 14520 30933 22555 9803 54363 39457 16879 63864 46774 20174 63486 46079 19711
++25709 25195 22046 43818 54098 63479 23007 25957 28667 40349 51271 61680 23901 28398 32639
++42919 54484 65535 42533 53970 64764 23116 21317 18761 30840 30197 30069 42654 31649 16191
++62859 46189 20912 63486 46079 19455 10498 7619 3259 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 4480 4480 4480 17553 17553 17553 514 514 514 48486 48538 48538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 38978 38978 38978 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 46260 45809 45103 642 642 899 15440 15440 15440
++15440 15440 15440 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8455 8455 8455
++20263 20263 20263 3857 3857 3857 51400 51400 51400 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 38978 38978 38978 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 16136 16136 16136 3079 3079 3079 16762 16762 16762
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++57142 41714 18588 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 34164 24785 10813 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 30933 22555 9803 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 60487 44116 19189 0 0 0 0 0 0
++5943 4354 1886 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 20895 15087 6460 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 45225 33169 15226 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19455 45225 33169 15226 0 0 0
++0 0 0 0 0 0 875 620 271 51340 37280 15909 63359 45859 19672
++62859 46189 20912 64250 47031 20303 61113 45548 20995 58276 44060 22272 33304 29072 24800
++28239 28239 28239 52119 52119 51914 17965 17965 17965 51153 41368 24286 63864 46774 20174
++63736 46260 19789 63736 46260 19789 63736 46260 19789 17750 12880 5633 0 0 0
++5943 4354 1886 60487 44116 19189 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63486 46079 19455 59002 43055 18866 24991 24991 24991 50115 51271 50886 49621 49621 49607
++25709 25195 22046 34164 24785 10813 36240 26320 11215 63736 46260 19789 60373 44510 19999
++30583 30843 31357 36810 46686 56154 25709 25195 22046 31142 24711 14520 30968 32639 33656
++42919 54484 65535 42919 54484 65535 24991 24991 24991 62708 62708 62708 20778 20778 20542
++51150 38050 17516 63736 46260 19789 30933 22555 9803 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21292 21292 21292 0 0 0 26342 26738 26738 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 31875 31875 31875 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47697 47615 47488 1413 1670 1799 15440 15440 15440 12931 12931 12931
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 17553 17553 17553 11370 11370 11370 57069 56684 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 42507 42507 42507 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 30840 30197 30069 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 52119 52119 51914 1799 1927 2184 14506 14506 14506
++5911 5911 5911 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++54363 39457 16879 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 36240 26320 11215 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 34164 24785 10813 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 57142 41714 18588 0 0 0 0 0 0
++3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 46996 34589 15727 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 43194 31354 13386 0 0 0
++0 0 0 0 0 0 0 0 0 12071 8729 3764 63486 46079 19711
++63486 46079 19455 63483 46207 20056 63736 46260 19789 56972 46962 30007 58276 44060 22272
++16762 16762 16762 23116 21317 18761 128 128 128 13905 12704 8095 49644 44138 34157
++63486 46079 19455 63736 46260 19789 40410 29471 12985 128 128 128 0 0 0
++43194 31354 13386 63359 45859 19672 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 22224 16071 6824 18995 18995 18995 58889 58889 58889 43356 43080 42463
++30840 30197 30069 34164 24785 10813 34164 24785 10813 64250 47031 20303 45225 33169 15226
++36810 46686 56154 25709 25195 22046 64250 47031 20303 63864 46774 20174 37343 28956 15254
++42533 53970 64764 42919 54484 65535 30968 32639 33656 60266 60266 60266 26085 33024 39578
++23901 28398 32639 57142 41714 18588 45225 33169 15226 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++4480 4480 4480 15440 15440 15440 6810 6810 6810 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 24991 24991 24991 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++56283 56283 56283 6810 6810 6810 16136 16136 16136 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 2313 2313 2313 8455 8455 8455 12931 12931 12931 15440 15440 15440
++11370 11370 11370 9814 9814 9814 6427 6427 6427 3079 3079 3079 642 642 899
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 14506 14506 14506 11370 11370 11370 20778 20778 20542 62065 62065 62065
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21292 21292 21292 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681 0 0 0
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++50159 36373 15650 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 37303 27193 11910 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 36240 26320 11215 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 54363 39457 16879 0 0 0 0 0 0
++128 128 128 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 25195 18262 7789 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 51340 37280 15909 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62486 45353 19401 40410 29471 12985 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 22224 16071 6824
++62986 45716 19556 63236 45897 19634 63486 46079 19711 63112 45588 19556 61241 45992 22579
++51153 41368 24286 23116 21317 18761 33304 29072 24800 23116 21317 18761 57302 45835 26989
++63486 46079 19455 48838 36002 16378 3038 2204 899 0 0 0 20895 15087 6460
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++43194 31354 13386 385 385 334 7197 7197 7197 56026 55897 55897 38978 38978 38978
++23116 21317 18761 46996 34589 15727 43194 31354 13386 64250 47031 20303 23116 21317 18761
++43818 54098 63479 33304 29072 24800 63486 46079 19455 59002 43055 18866 24991 24991 24991
++42919 54484 65535 43304 54355 65021 26085 33024 39578 65535 65535 65535 23901 28398 32639
++43818 54098 63479 25709 25195 22046 57142 41714 18588 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++19317 19131 18746 128 128 128 28239 28239 28239 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 10459 10459 10459 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40984 40984 40984 65278 65278 65278 65535 65535 65535 65535 65535 65535 63607 63607 63607
++22881 22881 22881 5911 5911 5911 18711 18711 18711 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 17553 17553 17553 16762 16762 16762 16762 16762 16762
++16762 16762 16762 14506 14506 14506 9814 9814 9814 4480 4480 4480 3079 3079 3079
++5911 5911 5911 8455 8455 8455 12931 12931 12931 16762 16762 16762 21292 21292 21292
++22881 22881 22881 20263 20263 20263 17553 17553 17553 2701 2701 2701 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 6427 6427 6427
++18995 18995 18995 18995 18995 18995 18711 18711 18711 18995 18995 18995 20263 20263 20263
++22881 22881 22881 24991 24991 24991 21838 21794 21532 18995 18995 18995 16762 16762 16762
++17965 17965 17965 18336 18336 18336 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 22359 22625 23010 3857 3857 3857 30583 30843 31357
++65021 65021 65021 65535 65535 65535 65535 65535 65535 51400 51400 51400 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 64124 64124 64124 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933 12931 12931 12931
++10459 10459 10459 8455 8455 8455 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++46996 34589 15727 63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 41427 30069 13197 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 41427 30069 13197 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 50159 36373 15650 0 0 0 0 0 0
++0 0 0 61451 44536 19168 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 54363 39457 16879 63864 46774 20174 63486 46079 19711
++63736 46260 19789 63736 46260 19789 63359 45859 19672 36240 26320 11215 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 54363 39457 16879 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 64250 47031 20303 62486 45353 19401 63736 46260 19789 62340 45076 19410
++34164 24785 10813 3038 2204 899 0 0 0 4874 3558 1459 59002 43055 18866
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63236 45897 19634 60487 44116 19189
++5943 4354 1886 128 128 128 128 128 128 9814 9814 9814 13752 13752 13752
++34164 24785 10813 40410 29471 12985 46996 34589 15727 25709 25195 22046 23901 28398 32639
++42919 54484 65535 26055 26184 25186 33304 29072 24800 30583 30843 31357 42533 53970 64764
++42533 53970 64764 42919 54484 65535 33153 41891 50372 50115 50774 49729 45746 46260 46746
++26085 33024 39578 40349 51271 61680 31142 24711 14520 3038 2204 899 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 1028 1028 1028
++18711 18711 18711 2701 2701 2701 55531 55531 55531 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++59538 59538 59538 1028 1028 1028 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1028 1285 1542
++48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535 39900 39413 38599
++0 0 0 24991 24991 24991 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2701 2701 2701 18336 18336 18336
++18517 18517 18517 9814 9814 9814 0 0 0 3079 3079 3079 15440 15440 15440
++22359 22625 23010 26342 26738 26738 30840 30197 30069 35838 35838 35838 38978 38978 38978
++38978 38978 38978 35838 35838 35838 33681 33681 33681 31875 31875 31875 28239 28239 28239
++18336 18336 18336 128 128 128 1799 1799 1799 16762 16762 16762 19317 19131 18746
++18711 18711 18711 2701 2701 2701 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 11370 11370 11370 20263 20263 20263 11370 11370 11370
++0 0 0 7197 7197 7197 22881 22881 22881 35838 35838 35838 38978 38978 38978
++38406 38021 37650 38406 38021 37650 35838 35838 35838 35502 34869 34383 26342 26738 26738
++15440 15440 15440 3079 3079 3079 11370 11370 11370 19317 19131 18746 18517 18517 18517
++3857 3857 3857 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 30840 30197 30069 385 385 334
++42507 42507 42507 65535 65535 65535 65535 65535 65535 55126 55126 55126 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019
++257 257 257 20263 20263 20263 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++41427 30069 13197 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 50159 36373 15650 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 45225 33169 15226 0 0 0 0 0 0
++0 0 0 57142 41714 18588 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 36240 26320 11215 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 30933 22555 9803 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 20895 15087 6460 37303 27193 11910 46996 34589 15727
++53070 38550 16467 51340 37280 15909 43194 31354 13386 28744 20827 9121 8095 5986 2531
++257 257 257 0 0 0 0 0 0 40410 29471 12985 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 23177 16932 7265
++0 0 0 0 0 0 0 0 0 128 128 128 22224 16071 6824
++21142 18577 13954 57142 41714 18588 26342 26738 26738 26085 33024 39578 40349 51271 61680
++42533 53970 64764 36810 46686 56154 26085 33024 39578 33667 36494 42587 36810 46686 56154
++42919 54484 65535 42919 54484 65535 33153 41891 50372 48486 48538 48538 38406 38021 37650
++24991 24991 24991 40349 51271 61680 33667 36494 42587 3855 2930 1607 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 16762 16762 16762
++2313 2313 2313 24991 24991 24991 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309
++28239 28239 28239 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 8455 8455 8455 49304 49177 49053
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283 4615 5268 6322
++18517 18517 18517 4480 4480 4480 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 6810 6810 6810 21292 21292 21292 19317 19131 18746 642 642 899
++14506 14506 14506 35838 35838 35838 50115 50774 49729 60266 60266 60266 65535 65535 65535
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64764 64764 64764 53256 53199 52942 38406 38021 37650 16762 16762 16762 514 514 514
++642 642 899 18995 18995 18995 20263 20263 20263 1028 1285 1542 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 20263 20263 20263 8455 8455 8455 6810 6810 6810 31875 31875 31875
++49621 49621 49607 63607 63607 63607 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 58889 58889 58889 38978 38978 38978 22881 22881 22881 6810 6810 6810
++15440 15440 15440 20778 20778 20542 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2313 2313 2313 26342 26738 26738
++7197 7197 7197 59538 59538 59538 65535 65535 65535 65278 65278 65278 43356 43080 42463
++1799 1927 2184 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 40984 40984 40984 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60266 60266 60266
++7197 7197 7197 20263 20263 20263 1413 1670 1799 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30933 22555 9803 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 59002 43055 18866 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 59002 43055 18866 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 34164 24785 10813 0 0 0 0 0 0
++0 0 0 45225 33169 15226 63112 45588 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 43194 31354 13386 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8095 5986 2531 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 20895 15087 6460 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 128 128 128 0 0 0
++0 0 0 0 0 0 19371 14059 6014 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 45225 33169 15226 875 620 271
++0 0 0 0 0 0 0 0 0 0 0 0 16136 16136 16136
++23901 28398 32639 31142 24711 14520 23116 21317 18761 21292 21292 21292 42533 53970 64764
++30968 32639 33656 45746 46260 46746 60933 60933 60933 60266 60266 60266 40833 41475 42019
++26085 33024 39578 43304 54355 65021 40349 51271 61680 40833 41475 42019 57470 57470 57470
++60266 60266 60266 23007 25957 28667 23901 28398 32639 9123 6640 2832 0 0 0
++
++0 0 0 0 0 0 0 0 0 257 257 257 19317 19131 18746
++514 514 514 50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 21292 21292 21292
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20263 20263 20263 56026 55897 55897 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681 2701 2701 2701
++16762 16762 16762 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17965 17965 17965 14506 14506 14506 2056 2313 2822 30840 30197 30069 48486 48538 48538
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 53256 53199 52942
++30583 30843 31357 4480 4480 4480 1772 1533 1155 20263 20263 20263 15440 15440 15440
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 642 642 899 18711 18711 18711
++11370 11370 11370 3079 3079 3079 33681 33681 33681 58889 58889 58889 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538
++35838 35838 35838 12931 12931 12931 15440 15440 15440 21292 21292 21292 3079 3079 3079
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15440 15440 15440
++6810 6810 6810 38406 38021 37650 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49304 49177 49053 6427 6427 6427 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 39900 39413 38599 65021 65021 65021
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++35838 35838 35838 1799 1927 2184 18711 18711 18711 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++20895 15087 6460 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 2402 1799 684 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3855 2930 1607 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 20895 15087 6460 0 0 0 0 0 0
++0 0 0 34164 24785 10813 63486 46079 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 53070 38550 16467 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17750 12880 5633 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 7209 5285 2184 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 57142 41714 18588 63236 45897 19634 63736 46260 19789
++63736 46260 19789 62986 45716 19556 61451 44536 19168 7209 5285 2184 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 21142 18577 13954
++26342 26738 26738 18517 18517 18517 34164 24785 10813 26085 33024 39578 33667 36494 42587
++55126 55126 55126 65278 65278 65278 65278 65278 65278 65535 65535 65535 65021 65021 65021
++48486 48538 48538 33153 41891 50372 42533 53970 64764 33667 35337 36808 55531 55531 55531
++65278 65278 65278 24991 24991 24991 42654 31649 16191 10498 7619 3259 0 0 0
++
++0 0 0 0 0 0 0 0 0 11370 11370 11370 7197 7197 7197
++20263 20263 20263 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 15440 15440 15440 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 24991 24991 24991 61680 61680 61680 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 55126 55126 3079 3079 3079 18995 18995 18995
++642 642 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5911 5911 5911 21292 21292 21292
++3857 3857 3857 16762 16762 16762 52119 52119 51914 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55126 54741 54484 22881 22881 22881 257 257 257 7197 7197 7197
++22881 22881 22881 2313 2313 2313 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 9814 9814 9814 20778 20778 20542 1413 1670 1799
++21838 21794 21532 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 62708 62708 62708 40833 41475 42019 9814 9814 9814 22881 22881 22881
++13752 13752 13752 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++22881 22881 22881 7197 7197 7197 59538 59538 59538 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 10459 10459 10459 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 38406 38021 37650
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 55126 55126 385 385 334 26342 26738 26738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++8373 6077 2600 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 17750 12880 5633 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++19371 14059 6014 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 9123 6640 2832 0 0 0 0 0 0
++0 0 0 22224 16071 6824 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 3855 2930 1607 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 34164 24785 10813 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 60487 44116 19189 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 25195 18262 7789 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 27882 20284 8738
++62986 45716 19556 36240 26320 11215 37343 28956 15254 36810 46686 56154 33667 35337 36808
++65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 30968 32639 33656 42533 53970 64764 26085 33024 39578 60933 60933 60933
++52685 52685 52685 53256 53199 52942 48838 36002 16378 8095 5986 2531 257 257 257
++
++0 0 0 0 0 0 128 128 128 17965 17965 17965 0 0 0
++46260 45809 45103 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 3079 3079 3079 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 26342 26738 26738 3857 3857 3857 16136 16136 16136
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 13752 13752 13752 15440 15440 15440 642 642 899
++33681 33681 33681 61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65278 65278 65278 44589 44631 44888 11370 11370 11370
++514 514 514 22881 22881 22881 10459 10459 10459 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18517 18517 18517 11370 11370 11370 128 128 128 35502 34869 34383
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 24991 24991 24991
++14506 14506 14506 21292 21292 21292 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 8455 8455 8455 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65021 65021 65021 12931 12931 12931 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 24991 24991 24991
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 17553 17553 17553 22881 22881 22881 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 60487 44116 19189 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++36240 26320 11215 63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19455 60487 44116 19189 128 128 128 0 0 0 0 0 0
++0 0 0 10498 7619 3259 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 19371 14059 6014 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 50159 36373 15650 63359 45859 19672 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63486 46079 19455 45225 33169 15226 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++15792 11440 4871 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19455 46996 34589 15727 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 23177 16932 7265
++63736 46260 19789 37303 27193 11910 31142 24711 14520 33153 41891 50372 48486 48538 48538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 38978 38978 38978 40349 51271 61680 26085 33024 39578 64507 64507 64507
++33681 33681 33681 65278 65278 65278 37343 28956 15254 4874 3558 1459 0 0 0
++
++0 0 0 0 0 0 0 0 0 18336 18336 18336 4480 4480 4480
++60652 60652 60652 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 21838 21794 21532 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55126 54741 54484 1799 1927 2184 20263 20263 20263 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 15440 15440 15440 9814 9814 9814 8455 8455 8455 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 57470 57470 57470 53256 53199 52942 47697 47615 47488
++43356 43080 42463 38978 38978 38978 40984 40984 40984 46260 45809 45103 49621 49621 49607
++55126 54741 54484 59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309
++33681 33681 33681 1028 1028 1028 14506 14506 14506 18995 18995 18995 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++20778 20778 20542 6810 6810 6810 4480 4480 4480 46260 45809 45103 65021 65021 65021
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 55126 54741 54484 50115 51271 50886
++47056 47056 47056 44589 44631 44888 49621 49621 49607 57470 57470 57470 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222
++38978 38978 38978 4480 4480 4480 21838 21794 21532 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18995 18995 18995 18517 18517 18517 64764 64764 64764 65535 65535 65535
++65535 65535 65535 56283 56283 56283 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 35838 35838 35838
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 8455 8455 8455 11370 11370 11370 385 385 334
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 40410 29471 12985 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 54363 39457 16879 875 620 271 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1264 929 361
++57142 41714 18588 63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 40410 29471 12985 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 54363 39457 16879 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 41427 30069 13197 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++8373 6077 2600 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 25195 18262 7789 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 2402 1799 684
++55635 40828 18345 63486 46079 19455 63736 46260 19789 63736 46260 19789 63486 46079 19711
++61861 44933 19292 9123 6640 2832 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20895 15087 6460
++63486 46079 19711 57142 41714 18588 21142 18577 13954 33153 41891 50372 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52119 52119 51914 33153 41891 50372 36810 46686 56154 44589 44631 44888
++39900 39413 38599 33304 29072 24800 42654 31649 16191 642 642 899 0 0 0
++
++0 0 0 0 0 0 3079 3079 3079 15440 15440 15440 24991 24991 24991
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 35838 35838 35838 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 52119 52119 51914 65535 65535 65535 65535 65535 65535
++65278 65278 65278 30840 30197 30069 4480 4480 4480 15440 15440 15440 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++15440 15440 15440 9814 9814 9814 8455 8455 8455 50115 50774 49729 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607 51400 51400 51400
++38406 38021 37650 18995 18995 18995 514 514 514 0 0 0 128 128 128
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 2313 2313 2313 24991 24991 24991 42507 42507 42507 56283 56283 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 47056 47056 47056 3079 3079 3079 4480 4480 4480 22881 22881 22881
++3857 3857 3857 0 0 0 0 0 0 2313 2313 2313 22881 22881 22881
++3857 3857 3857 1028 1028 1028 45746 46260 46746 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++55126 54741 54484 38406 38021 37650 15440 15440 15440 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7197 7197 7197
++30583 30843 31357 48486 48538 48538 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 44589 44631 44888 3857 3857 3857 22359 22625 23010 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17965 17965 17965 1028 1028 1028 52119 52119 51914 65535 65535 65535
++65278 65278 65278 46260 45809 45103 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 47056 47056 47056
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 51400 51400 51400 128 128 128 19317 19131 18746 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17750 12880 5633 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63864 46774 20174 19371 14059 6014 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 23177 16932 7265
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 15792 11440 4871 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63093 45874 19660 7209 5285 2184
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++36240 26320 11215 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62486 45353 19401 3855 2930 1607 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 36240 26320 11215
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++28744 20827 9121 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 10498 7619 3259
++63486 46079 19455 64250 47031 20303 37343 28956 15254 33667 36494 42587 57069 56684 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 48486 48538 48538 36810 46686 56154 42533 53970 64764 22359 22625 23010
++33304 29072 24800 62986 45716 19556 54363 39457 16879 0 0 0 0 0 0
++
++0 0 0 0 0 0 16136 16136 16136 2313 2313 2313 38406 38021 37650
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 40984 40984 40984 65278 65278 65278 65535 65535 65535
++56283 56283 56283 1413 1670 1799 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15440 15440 15440
++8455 8455 8455 8455 8455 8455 49304 49177 49053 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 59538 59538 59538 38978 38978 38978 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1413 1670 1799
++26055 26184 25186 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 50115 51271 50886 7197 7197 7197 128 128 128
++18995 18995 18995 11370 11370 11370 6810 6810 6810 24991 24991 24991 514 514 514
++128 128 128 0 0 0 128 128 128 11370 11370 11370 33681 33681 33681
++48486 48538 48538 64124 64124 64124 64507 64507 64507 44589 44631 44888 21838 21794 21532
++642 642 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 10459 10459 10459 38978 38978 38978 61309 61309 61309
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 42507 42507 42507 3079 3079 3079 22881 22881 22881
++514 514 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3079 3079 3079 15440 15440 15440 33681 33681 33681 65535 65535 65535
++65535 65535 65535 33681 33681 33681 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 642 642 899 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 62708 62708 62708 5911 5911 5911 18995 18995 18995 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 57142 41714 18588 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 54363 39457 16879 3038 2204 899
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3855 2930 1607 57142 41714 18588
++63112 45588 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++57142 41714 18588 875 620 271 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8095 5986 2531 63359 45859 19672 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 43194 31354 13386
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 12071 8729 3764
++62340 45076 19410 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 43194 31354 13386 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 13872 10127 4336 63736 46260 19789
++63486 46079 19711 63736 46260 19789 63736 46260 19789 62986 45716 19556 50159 36373 15650
++385 385 334 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1264 929 361
++62340 45076 19410 63736 46260 19789 48838 36002 16378 26085 33024 39578 55126 54741 54484
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 44589 44631 44888 36810 46686 56154 42919 54484 65535 26055 26184 25186
++42654 31649 16191 62340 45076 19410 41427 30069 13197 128 128 128 0 0 0
++
++0 0 0 0 0 0 20263 20263 20263 0 0 0 50115 51271 50886
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 1413 1670 1799
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 28239 28239 28239 65535 65535 65535 65535 65535 65535
++40984 40984 40984 0 0 0 18517 18517 18517 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 15440 15440 15440 9814 9814 9814
++7197 7197 7197 49304 49177 49053 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470
++38406 38021 37650 7197 7197 7197 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 4480 4480 4480 42507 42507 42507 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 55126 54741 54484 11370 11370 11370
++257 257 257 11370 11370 11370 18711 18711 18711 0 0 0 0 0 0
++10459 10459 10459 8455 8455 8455 0 0 0 0 0 0 0 0 0
++257 257 257 18995 18995 18995 49304 49177 49053 56026 55897 55897 21838 21794 21532
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 11370 11370 11370
++43356 43080 42463 62708 62708 62708 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40984 40984 40984 3079 3079 3079
++22881 22881 22881 514 514 514 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18517 18517 18517 20263 20263 20263 65535 65535 65535
++65535 65535 65535 22881 22881 22881 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 15440 15440 15440 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 20263 20263 20263 18995 18995 18995 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63359 45859 19672 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30042 21792 9253 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455 45225 33169 15226
++3038 2204 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 3038 2204 899 46996 34589 15727 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++28744 20827 9121 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 43194 31354 13386 63236 45897 19634
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63359 45859 19672
++34164 24785 10813 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 8373 6077 2600 55635 40828 18345
++62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 15792 11440 4871 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1772 1533 1155 54363 39457 16879 62986 45716 19556
++63736 46260 19789 63736 46260 19789 63486 46079 19711 62486 45353 19401 10498 7619 3259
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++50159 36373 15650 62340 45076 19410 59002 43055 18866 23901 28398 32639 38978 38978 38978
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 33667 35337 36808 42533 53970 64764 40349 51271 61680 31142 24711 14520
++63736 46260 19789 63486 46079 19711 27882 20284 8738 0 0 0 0 0 0
++
++0 0 0 0 0 0 24991 24991 24991 5911 5911 5911 61309 61309 61309
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 42507 42507 42507 65535 65535 65535 65535 65535 65535
++22881 22881 22881 14506 14506 14506 5911 5911 5911 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 15440 15440 15440 8455 8455 8455 7197 7197 7197
++49304 49177 49053 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 39900 39413 38599 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 24991 24991 24991 60266 60266 60266
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 57069 56684 56283
++15440 15440 15440 128 128 128 0 0 0 0 0 0 0 0 0
++1413 1670 1799 38978 38978 38978 50115 51271 50886 35838 35838 35838 11370 11370 11370
++0 0 0 128 128 128 0 0 0 26055 26184 25186 53256 53199 52942
++40984 40984 40984 3079 3079 3079 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 18995 18995 18995 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 38406 38021 37650
++2313 2313 2313 20778 20778 20542 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18995 18995 18995 4480 4480 4480 61680 61680 61680
++65535 65535 65535 39900 39413 38599 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 13752 13752 13752 60266 60266 60266
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 28239 28239 28239 17553 17553 17553 1028 1028 1028
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 28744 20827 9121 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 51340 37280 15909 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 28744 20827 9121 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 54363 39457 16879 63359 45859 19672
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++54363 39457 16879 27882 20284 8738 5943 4354 1886 385 385 334 128 128 128
++7209 5285 2184 27882 20284 8738 55635 40828 18345 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 53070 38550 16467
++1264 929 361 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 8095 5986 2531 62340 45076 19410
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 50159 36373 15650 22224 16071 6824 3855 2930 1607 128 128 128
++875 620 271 10498 7619 3259 34164 24785 10813 60487 44116 19189 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 34164 24785 10813 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 30042 21792 9253 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++25195 18262 7789 63864 46774 20174 43194 31354 13386 23116 21317 18761 30968 32639 33656
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61309 61309 61309 26085 33024 39578 36810 46686 56154 18336 18336 18336 53070 38550 16467
++63483 46207 20056 62486 45353 19401 4874 3558 1459 0 0 0 0 0 0
++
++0 0 0 0 0 0 22359 22625 23010 24991 24991 24991 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60652 60652 60652 20263 20263 20263 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 18995 18995 18995 62708 62708 62708 65535 65535 65535 56283 56283 56283
++1028 1285 1542 22881 22881 22881 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 13752 13752 13752 9814 9814 9814 6427 6427 6427 48486 48538 48538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55126 54741 54484 21292 21292 21292 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18995 18995 18995
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 55126 55126 8455 8455 8455 0 0 0 0 0 0 3079 3079 3079
++0 0 0 385 385 334 11370 11370 11370 47056 47056 47056 60266 60266 60266
++38978 38978 38978 5911 5911 5911 0 0 0 128 128 128 1028 1028 1028
++38978 38978 38978 53256 53199 52942 18517 18517 18517 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2701 2701 2701 39900 39413 38599 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++30840 30197 30069 5911 5911 5911 16762 16762 16762 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 13752 13752 13752 4480 4480 4480 53256 53199 52942
++65535 65535 65535 61309 61309 61309 12931 12931 12931 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 28239 28239 28239
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 33681 33681 33681 8455 8455 8455 10459 10459 10459
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 45225 33169 15226 63736 46260 19789 62986 45716 19556 62986 45716 19556
++62986 45716 19556 62986 45716 19556 62986 45716 19556 62986 45716 19556 62986 45716 19556
++62986 45716 19556 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 62486 45353 19401 62986 45716 19556 62986 45716 19556
++62986 45716 19556 62986 45716 19556 62986 45716 19556 62986 45716 19556 62986 45716 19556
++63486 46079 19711 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 19371 14059 6014 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63736 46260 19789 63736 46260 19789 62486 45353 19401 62486 45353 19401
++63736 46260 19789 63736 46260 19789 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 15792 11440 4871
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 30933 22555 9803
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62737 45569 19692 63736 46260 19789 63736 46260 19789 61861 44933 19292
++63486 46079 19711 63486 46079 19711 63486 46079 19455 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634 60487 44116 19189
++5943 4354 1886 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 12071 8729 3764 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63236 45897 19634 51340 37280 15909 1264 929 361 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++3855 2930 1607 43194 31354 13386 25195 18262 7789 61451 44536 19168 23116 21317 18761
++30583 30843 31357 53256 53199 52942 65535 65535 65535 65021 65021 65021 62065 62065 62065
++30583 30843 31357 26342 26738 26738 33304 29072 24800 62465 45547 19595 30042 21792 9253
++45225 33169 15226 41427 30069 13197 0 0 0 0 0 0 0 0 0
++
++0 0 0 3857 3857 3857 15440 15440 15440 31875 31875 31875 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 28239 28239 28239 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 51400 51400 51400 65535 65535 65535 65535 65535 65535 40984 40984 40984
++128 128 128 19317 19131 18746 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 11370 11370 11370 4480 4480 4480 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++42507 42507 42507 4480 4480 4480 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++16136 16136 16136 57069 56684 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 48486 48538 48538 55531 55531 55531 61680 61680 61680
++55126 54741 54484 38978 38978 38978 4480 4480 4480 128 128 128 35838 35838 35838
++65278 65278 65278 57470 57470 57470 33681 33681 33681 2313 2313 2313 0 0 0
++0 0 0 26342 26738 26738 57470 57470 57470 28239 28239 28239 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 20263 20263 20263
++56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 20778 20778 20542 10459 10459 10459 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2313 2313 2313 17965 17965 17965 44589 44631 44888
++65278 65278 65278 65535 65535 65535 44589 44631 44888 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++39900 39413 38599 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 18711 18711 18711
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 43194 31354 13386 63236 45897 19634 63486 46079 19711 63736 46260 19789
++63486 46079 19711 63736 46260 19789 63486 46079 19711 63736 46260 19789 63486 46079 19711
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++63736 46260 19789 63486 46079 19711 63736 46260 19789 63486 46079 19711 63736 46260 19789
++62986 45716 19556 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 30933 22555 9803
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 27882 20284 8738 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1264 929 361
++43194 31354 13386 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63236 45897 19634 61861 44933 19292 15792 11440 4871
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1264 929 361 53070 38550 16467 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62737 45569 19692 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 27882 20284 8738 37303 27193 11910 43194 31354 13386 59002 43055 18866
++53070 38550 16467 20895 15087 6460 23116 21317 18761 21142 18577 13954 23116 21317 18761
++25195 18262 7789 57142 41714 18588 61451 44536 19168 55635 40828 18345 28744 20827 9121
++55635 40828 18345 7209 5285 2184 0 0 0 0 0 0 0 0 0
++
++257 257 257 8455 8455 8455 9814 9814 9814 35838 35838 35838 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 35502 34869 34383 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++31875 31875 31875 65278 65278 65278 65535 65535 65535 65535 65535 65535 33681 33681 33681
++4480 4480 4480 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 9814 9814 9814
++14506 14506 14506 2313 2313 2313 45746 46260 46746 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 56283 56283 56283 24991 24991 24991
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12931 12931 12931 55126 55126 55126 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 55126 54741 54484 9814 9814 9814 0 0 0
++40984 40984 40984 65535 65535 65535 65535 65535 65535 55126 54741 54484 28239 28239 28239
++514 514 514 0 0 0 14506 14506 14506 53256 53199 52942 33681 33681 33681
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 60266 60266 60266 12931 12931 12931 14506 14506 14506 8455 8455 8455
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 514 514 514 22881 22881 22881 35838 35838 35838
++65535 65535 65535 65535 65535 65535 64124 64124 64124 21292 21292 21292 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1670 1799 48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 48486 48538 48538 0 0 0 18711 18711 18711
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 45225 33169 15226 62986 45716 19556 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62986 45716 19556 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++30933 22555 9803 63736 46260 19789 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 63736 46260 19789 28744 20827 9121 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1028 514 43194 31354 13386 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 61861 44933 19292 17750 12880 5633 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++30933 22555 9803 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++64250 47031 20303 30933 22555 9803 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 43194 31354 13386 43194 31354 13386 23177 16932 7265
++34164 24785 10813 61985 45298 20071 63736 46260 19789 64250 47031 20303 63736 46260 19789
++60373 44510 19999 30933 22555 9803 28744 20827 9121 37303 27193 11910 46996 34589 15727
++23177 16932 7265 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 14506 14506 14506 3857 3857 3857 40984 40984 40984 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++47056 47056 47056 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8455 8455 8455
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 28239 28239 28239
++14506 14506 14506 4480 4480 4480 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 6427 6427 6427 17553 17553 17553
++128 128 128 42507 42507 42507 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 52685 52685 52685 8455 8455 8455 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 9814 9814 9814 52685 52685 52685 65535 65535 65535
++56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400 4480 4480 4480
++3079 3079 3079 55531 55531 55531 65535 65535 65535 65535 65535 65535 65535 65535 65535
++44589 44631 44888 3079 3079 3079 128 128 128 8455 8455 8455 55126 55126 55126
++33681 33681 33681 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 51400 51400 51400 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 8455 8455 8455 18995 18995 18995
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 26055 26184 25186 30583 30843 31357
++65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607 642 642 899
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 56283 56283 56283 1799 1799 1799 18517 18517 18517
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 43194 31354 13386 63486 46079 19455 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 20895 15087 6460 57142 41714 18588 63486 46079 19455 63359 45859 19672
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634 63736 46260 19789
++54363 39457 16879 19371 14059 6014 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1413 1028 514 28744 20827 9121 60487 44116 19189 63486 46079 19455
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556
++63736 46260 19789 46996 34589 15727 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 10498 7619 3259
++62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556
++53070 38550 16467 2402 1799 684 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2402 1799 684 43194 31354 13386 57142 41714 18588
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 51340 37280 15909 62486 45353 19401 23177 16932 7265
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18336 18336 18336 0 0 0 44589 44631 44888 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60652 60652 60652 16762 16762 16762 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 33681 33681 33681
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 20263 20263 20263
++21292 21292 21292 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 20263 20263 20263 385 385 334
++35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 52685 52685 52685 7197 7197 7197 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7197 7197 7197 46260 45809 45103
++38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056
++257 257 257 31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 50115 50774 49729 9814 9814 9814 0 0 0 14506 14506 14506
++57470 57470 57470 22881 22881 22881 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888 1028 1285 1542
++21838 21794 21532 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 26342 26738 26738 28239 28239 28239
++65535 65535 65535 65535 65535 65535 65278 65278 65278 55126 54741 54484 1028 1028 1028
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5911 5911 5911 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61309 61309 61309 4480 4480 4480 18336 18336 18336
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 45225 33169 15226 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2402 1799 684 30042 21792 9253 53070 38550 16467
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 50159 36373 15650 27882 20284 8738
++1413 1028 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 36240 26320 11215
++55635 40828 18345 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++63736 46260 19789 63736 46260 19789 63486 46079 19711 63112 45588 19556 45225 33169 15226
++20895 15087 6460 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 875 620 271 51340 37280 15909
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63093 45874 19660
++13872 10127 4336 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20895 15087 6460
++50159 36373 15650 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19455 60487 44116 19189 40410 29471 12985 7209 5285 2184 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 5911 5911 5911
++57470 57470 57470 65535 65535 65535 65535 65535 65535 64764 64764 64764 8455 8455 8455
++21292 21292 21292 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1799 1799 1799 22881 22881 22881 0 0 0 30840 30197 30069
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++51400 51400 51400 6810 6810 6810 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++45746 46260 46746 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++21292 21292 21292 18711 18711 18711 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 4480 4480 4480 128 128 128
++21292 21292 21292 57069 56684 56283 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2701 2701 2701 50115 51271 50886
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681
++4480 4480 4480 17553 17553 17553 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 26342 26738 26738 24991 24991 24991
++65278 65278 65278 65535 65535 65535 65535 65535 65535 30583 30843 31357 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++43356 43080 42463 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 7197 7197 7197 17965 17965 17965
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 20895 15087 6460 27882 20284 8738 34164 24785 10813 34164 24785 10813
++25195 18262 7789 20895 15087 6460 5943 4354 1886 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 10498 7619 3259 23177 16932 7265 28744 20827 9121 34164 24785 10813
++30933 22555 9803 25195 18262 7789 17750 12880 5633 3038 2204 899 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 4874 3558 1459 13872 10127 4336 20895 15087 6460 17750 12880 5633
++12071 8729 3764 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 52685 52685 52685 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 44589 44631 44888 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++35838 35838 35838 65535 65535 65535 65535 65535 65535 62708 62708 62708 4480 4480 4480
++18995 18995 18995 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++642 642 899 22881 22881 22881 642 642 899 22881 22881 22881 62065 62065 62065
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400
++6427 6427 6427 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++42507 42507 42507 4480 4480 4480 62065 62065 62065 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019 0 0 0
++128 128 128 46260 45809 45103 30583 30843 31357 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 10459 10459 10459
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708
++18995 18995 18995 12931 12931 12931 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 28239 28239 28239 18995 18995 18995
++65535 65535 65535 65535 65535 65535 55126 55126 55126 1799 1799 1799 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 26342 26738 26738
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 10459 10459 10459 17553 17553 17553
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 55126 54741 54484 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 31875 31875 31875 385 385 334
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3079 3079 3079 55531 55531 55531 65535 65535 65535 63607 63607 63607 5911 5911 5911
++17553 17553 17553 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++22359 22625 23010 2313 2313 2313 16136 16136 16136 59538 59538 59538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 50115 51271 50886 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++46260 45809 45103 0 0 0 57069 56684 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124 21838 21794 21532
++128 128 128 33681 33681 33681 48486 48538 48538 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++21292 21292 21292 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++56283 56283 56283 7197 7197 7197 20263 20263 20263 2313 2313 2313 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 24991 24991 24991 21292 21292 21292
++65535 65535 65535 65535 65535 65535 31875 31875 31875 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 2701 2701 2701 56283 56283 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 12931 12931 12931 17553 17553 17553
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 5943 4354 1886
++59002 43055 18866 60373 44510 19999 59002 43055 18866 59002 43055 18866 8095 5986 2531
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64764 64764 64764 40833 41475 42019 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 31875 31875 31875 65535 65535 65535 64764 64764 64764 6810 6810 6810
++17553 17553 17553 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++4480 4480 4480 10459 10459 10459 56283 56283 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 55126 55126 8455 8455 8455 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++47697 47615 47488 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++44589 44631 44888 514 514 514 59538 59538 59538 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 44589 44631 44888
++0 0 0 20263 20263 20263 58889 58889 58889 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 33681 33681 33681 65021 65021 65021 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47056 47056 47056 1413 1670 1799 21838 21794 21532 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 22881 22881 22881 24991 24991 24991
++65535 65535 65535 59538 59538 59538 3857 3857 3857 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 22881 22881 22881
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 17553 17553 17553 16762 16762 16762
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++3855 2930 1607 40410 29471 12985 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 40410 29471 12985 12071 8729 3764
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++62859 46189 20912 48573 52299 53199 47031 52942 56540 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 47697 47615 47488 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 61309 61309 61309 30583 30843 31357 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 20778 20778 20542 64507 64507 64507 65535 65535 65535 8455 8455 8455
++16762 16762 16762 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17553 17553 17553 8455 8455 8455
++4480 4480 4480 52685 52685 52685 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 58889 58889 58889 14506 14506 14506 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++43356 43080 42463 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++43356 43080 42463 6427 6427 6427 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126
++0 0 0 1799 1799 1799 56283 56283 56283 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 43356 43080 42463 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35502 34869 34383 5911 5911 5911 16762 16762 16762
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 21292 21292 21292 26342 26738 26738
++65535 65535 65535 65535 65535 65535 28239 28239 28239 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++15440 15440 15440 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 20263 20263 20263 16136 16136 16136
++514 514 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 54209 48830 40477 50976 48701 42982 56411 51914 44332
++50976 48701 42982 56411 51914 44332 50976 48701 42982 56411 51914 44332 50976 48701 42982
++56411 51914 44332 50976 48701 42982 56411 51914 44332 50976 48701 42982 56411 51914 44332
++50976 48701 42982 56411 51914 44332 50976 48701 42982 62859 46189 20912 19371 14059 6014
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++63736 46260 19789 42919 54484 65535 42919 54484 65535 63236 45897 19634 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 44589 44631 44888 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55531 55531 55531 18336 18336 18336 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 50115 50774 49729 65535 65535 65535 65278 65278 65278 9814 9814 9814
++16762 16762 16762 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 13752 13752 13752 11370 11370 11370 1413 1670 1799
++48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61680 61680 61680 21838 21794 21532 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40984 40984 40984 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++48486 48538 48538 7197 7197 7197 62065 62065 62065 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126
++257 257 257 7197 7197 7197 57470 57470 57470 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3079 3079 3079 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 18995 18995 18995 14506 14506 14506
++8455 8455 8455 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2701 2701 2701 16762 16762 16762 30840 30197 30069
++65535 65535 65535 65535 65535 65535 53256 53199 52942 1413 1670 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21292 21292 21292 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 21838 21794 21532 12931 12931 12931
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63483 46207 20056 43304 54355 65021 42919 54484 65535 42533 53970 64764
++42919 54484 65535 42533 53970 64764 42919 54484 65535 42533 53970 64764 42919 54484 65535
++42533 53970 64764 42919 54484 65535 42533 53970 64764 42919 54484 65535 42533 53970 64764
++42919 54484 65535 42533 53970 64764 42919 54484 65535 58276 44060 22272 19371 14059 6014
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++63736 46260 19789 43304 54355 65021 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18517 18517 18517 0 0 0 40984 40984 40984 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++47697 47615 47488 4480 4480 4480 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535 15440 15440 15440
++15440 15440 15440 1413 1670 1799 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 10459 10459 10459 15440 15440 15440 385 385 334 43356 43080 42463
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++30840 30197 30069 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 24991 24991 24991 38406 38021 37650 65021 65021 65021 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 45746 46260 46746
++128 128 128 30840 30197 30069 44589 44631 44888 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12931 12931 12931 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126 6810 6810 6810
++21838 21794 21532 1413 1670 1799 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 10459 10459 10459 8455 8455 8455 38406 38021 37650
++65535 65535 65535 65535 65535 65535 65535 65535 65535 31875 31875 31875 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++18995 18995 18995 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 18995 18995 18995 15440 15440 15440
++1028 1285 1542 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 56972 46962 30007
++61985 45298 20071 61113 45548 20995 61113 45548 20995 61113 45548 20995 61113 45548 20995
++61113 45548 20995 61113 45548 20995 61113 45548 20995 61113 45548 20995 61113 45548 20995
++61113 45548 20995 61113 45548 20995 61113 45548 20995 63483 46207 20056 19371 14059 6014
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++63486 46079 19711 43304 54355 65021 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18336 18336 18336 128 128 128 38406 38021 37650 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 12931 12931 12931 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3079 3079 3079
++55531 55531 55531 65535 65535 65535 65535 65535 65535 65535 65535 65535 28239 28239 28239
++5911 5911 5911 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++7197 7197 7197 18995 18995 18995 385 385 334 35838 35838 35838 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 35838 35838 35838
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 1028 1028 1028 13752 13752 13752 7197 7197 7197
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60933 60933 60933 38978 38978 38978 39900 39413 38599 64507 64507 64507
++65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680 14506 14506 14506
++6810 6810 6810 55531 55531 55531 17553 17553 17553 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 26055 26184 25186
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 46260 45809 45103
++1413 1670 1799 22881 22881 22881 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 17553 17553 17553 642 642 899 47697 47615 47488
++65535 65535 65535 65535 65535 65535 65278 65278 65278 55126 54741 54484 1028 1285 1542
++0 0 0 0 0 0 0 0 0 128 128 128 24991 24991 24991
++60652 60652 60652 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 15440 15440 15440 16762 16762 16762
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42533 53970 64764 58279 45589 26504
++27882 20284 8738 12071 8729 3764 12071 8729 3764 12071 8729 3764 12071 8729 3764
++12071 8729 3764 12071 8729 3764 12071 8729 3764 12071 8729 3764 12071 8729 3764
++12071 8729 3764 12071 8729 3764 12071 8729 3764 12071 8729 3764 3038 2204 899
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++63736 46260 19789 43304 54355 65021 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 18336 18336 18336 0 0 0 35838 35838 35838 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 22881 22881 22881 514 514 514
++0 0 0 0 0 0 0 0 0 0 0 0 28239 28239 28239
++65021 65021 65021 65278 65278 65278 65535 65535 65535 65535 65535 65535 35838 35838 35838
++0 0 0 18995 18995 18995 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4480 4480 4480
++22881 22881 22881 128 128 128 30840 30197 30069 63607 63607 63607 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 43356 43080 42463 1028 1028 1028
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3857 3857 3857 31875 31875 31875
++42507 42507 42507 50115 51271 50886 58889 58889 58889 65278 65278 65278 35838 35838 35838
++21292 21292 21292 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019 51400 51400 51400
++65535 65535 65535 65535 65535 65535 65535 65535 65535 38406 38021 37650 4480 4480 4480
++51400 51400 51400 40984 40984 40984 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++39900 39413 38599 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++38406 38021 37650 5911 5911 5911 18336 18336 18336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18995 18995 18995 128 128 128 55531 55531 55531
++65535 65535 65535 65535 65535 65535 55126 55126 55126 21292 21292 21292 128 128 128
++0 0 0 0 0 0 0 0 0 30583 30843 31357 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 11370 11370 11370 16762 16762 16762
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4874 3558 1459 15792 11440 4871
++17750 12880 5633 8373 6077 2600 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++8095 5986 2531 17750 12880 5633 15792 11440 4871 10498 7619 3259 2402 1799 684
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 2402 1799 684
++10498 7619 3259 19371 14059 6014 13872 10127 4336 9123 6640 2832 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3855 2930 1607 13872 10127 4336 19371 14059 6014
++13872 10127 4336 8373 6077 2600 0 0 0 0 0 0 7209 5285 2184
++63486 46079 19711 43304 54355 65021 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 15792 11440 4871
++17750 12880 5633 17750 12880 5633 13872 10127 4336 2402 1799 684 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3038 2204 899
++12071 8729 3764 19371 14059 6014 13872 10127 4336 5943 4354 1886 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++4874 3558 1459 13872 10127 4336 17750 12880 5633 9123 6640 2832 875 620 271
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 16136 16136 16136 2701 2701 2701 31875 31875 31875 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708 35502 34869 34383
++0 0 0 0 0 0 0 0 0 128 128 128 128 128 128
++26055 26184 25186 56026 55897 55897 65535 65535 65535 65535 65535 65535 45746 46260 46746
++0 0 0 22881 22881 22881 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1799 1927 2184 26055 26184 25186
++0 0 0 22359 22625 23010 61309 61309 61309 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 49304 49177 49053 1799 1927 2184 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 8455 8455 8455 38406 38021 37650 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 49304 49177 49053
++1028 1028 1028 56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 62708 62708 62708 60933 60933 60933
++65535 65535 65535 65278 65278 65278 49304 49177 49053 5911 5911 5911 49304 49177 49053
++49304 49177 49053 9814 9814 9814 4480 4480 4480 1799 1799 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1670 1799 50115 50774 49729 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 28239 28239 28239 12931 12931 12931 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 19317 19131 18746 13752 13752 13752 64764 64764 64764
++65278 65278 65278 44589 44631 44888 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 44589 44631 44888 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64507 64507 64507 6810 6810 6810 17553 17553 17553
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 4874 3558 1459 62340 45076 19410 62737 45569 19692 61985 45298 20071
++61861 44933 19292 2402 1799 684 40410 29471 12985 62856 45897 20023 61241 45992 22579
++58276 44060 22272 59002 43055 18866 0 0 0 0 0 0 0 0 0
++0 0 0 1413 1028 514 23177 16932 7265 51150 38050 17516 61985 45298 20071
++62986 45716 19556 58279 45589 26504 58276 44060 22272 62859 46189 20912 62465 45547 19595
++42654 31649 16191 12071 8729 3764 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5943 4354 1886 34164 24785 10813 57142 41714 18588 63483 46207 20056
++61985 45298 20071 58279 45589 26504 61241 45992 22579 62856 45897 20023 59002 43055 18866
++34164 24785 10813 3855 2930 1607 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++8095 5986 2531 45225 33169 15226 62856 45897 20023 61113 45548 20995 57302 45835 26989
++61241 45992 22579 62856 45897 20023 55635 40828 18345 27882 20284 8738 7209 5285 2184
++63736 46260 19789 43304 54355 65021 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++1413 1028 514 28744 20827 9121 55635 40828 18345 62859 46189 20912 60373 44510 19999
++59969 46214 26008 58276 44060 22272 61113 45548 20995 62737 45569 19692 51150 38050 17516
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 36240 26320 11215 62486 45353 19401 62986 45716 19556
++62486 45353 19401 30042 21792 9253 5943 4354 1886 40410 29471 12985 62737 45569 19692
++62340 45076 19410 60487 44116 19189 61451 44536 19168 63486 46079 19455 46996 34589 15727
++12071 8729 3764 0 0 0 128 128 128 13872 10127 4336 48838 36002 16378
++63736 46260 19789 61861 44933 19292 60487 44116 19189 62737 45569 19692 62986 45716 19556
++37303 27193 11910 2402 1799 684 0 0 0 0 0 0 0 0 0
++
++0 0 0 8455 8455 8455 9814 9814 9814 28239 28239 28239 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124 33681 33681 33681
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 6427 6427 6427 43356 43080 42463 65535 65535 65535 60933 60933 60933
++6427 6427 6427 17553 17553 17553 4480 4480 4480 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 514 514 514 28239 28239 28239 514 514 514
++15440 15440 15440 58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 6427 6427 6427 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3857 3857 3857 16762 16762 16762 21838 21794 21532 12931 12931 12931
++4480 4480 4480 642 642 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 514 514 514 21838 21794 21532
++44589 44631 44888 61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680
++7197 7197 7197 40833 41475 42019 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63607 63607 63607 38978 38978 38978 8455 8455 8455 49304 49177 49053 65278 65278 65278
++65535 65535 65535 64764 64764 64764 62065 62065 62065 59538 59538 59538 57470 57470 57470
++55126 55126 55126 52685 52685 52685 22881 22881 22881 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9814 9814 9814 57470 57470 57470 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60933 60933 60933 18995 18995 18995 18995 18995 18995 5911 5911 5911
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5911 5911 5911 13752 13752 13752 38406 38021 37650 65278 65278 65278
++65535 65535 65535 18995 18995 18995 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1413 1670 1799 45746 46260 46746
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 3857 3857 3857 17553 17553 17553
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2402 1799 684 63486 46079 19711 48573 52299 53199 47031 52942 56540
++63486 46079 19455 45225 33169 15226 57302 45835 26989 45746 53327 59238 42919 54484 65535
++47031 52942 56540 59002 43055 18866 257 257 257 0 0 0 0 0 0
++7209 5285 2184 51150 38050 17516 61241 45992 22579 50629 49986 46941 47031 52942 56540
++43304 54355 65021 43304 54355 65021 42919 54484 65535 42919 54484 65535 47031 52942 56540
++54209 48830 40477 61985 45298 20071 30933 22555 9803 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 60373 44510 19999 56972 46962 30007 48573 52299 53199 45746 53327 59238
++42919 54484 65535 42533 53970 64764 42919 54484 65535 43304 54355 65021 48573 52299 53199
++56972 46962 30007 59002 43055 18866 15792 11440 4871 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15792 11440 4871
++61985 45298 20071 56278 47802 34950 45746 53327 59238 42919 54484 65535 42533 53970 64764
++42919 54484 65535 43818 54098 63479 50115 50774 49729 61241 45992 22579 46996 34589 15727
++63864 46774 20174 43304 54355 65021 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 9123 6640 2832
++57142 41714 18588 58279 45589 26504 50115 50774 49729 44846 53841 61423 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 45746 53327 59238 50976 48701 42982
++61241 45992 22579 45225 33169 15226 1413 1028 514 128 128 128 0 0 0
++0 0 0 0 0 0 34164 24785 10813 63236 45897 19634 63736 46260 19789
++62986 45716 19556 41427 30069 13197 55635 40828 18345 62340 45076 19410 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63112 45588 19556
++60487 44116 19189 10498 7619 3259 23177 16932 7265 62486 45353 19401 63236 45897 19634
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++61451 44536 19168 55635 40828 18345 2402 1799 684 0 0 0 0 0 0
++
++128 128 128 1028 1285 1542 17553 17553 17553 22881 22881 22881 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63607 63607 63607 31875 31875 31875 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 24991 24991 24991 65535 65535 65535 65535 65535 65535
++31875 31875 31875 0 0 0 26342 26738 26738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 28239 28239 28239 1799 1927 2184 9814 9814 9814
++55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++57470 57470 57470 12931 12931 12931 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 17965 17965 17965 35502 34869 34383 48486 48538 48538
++56026 55897 55897 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 57470 57470 57470 48486 48538 48538 40984 40984 40984 33681 33681 33681
++38406 38021 37650 44589 44631 44888 50115 51271 50886 57470 57470 57470 65021 65021 65021
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++31875 31875 31875 6427 6427 6427 52685 52685 52685 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538
++26055 26184 25186 16136 16136 16136 55126 54741 54484 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 0 0 0
++0 0 0 1799 1799 1799 22359 22625 23010 6810 6810 6810 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20778 20778 20542 61309 61309 61309 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 11370 11370 11370 22881 22881 22881
++1028 1285 1542 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 19317 19131 18746 1413 1670 1799 56283 56283 56283 65535 65535 65535
++65535 65535 65535 26342 26738 26738 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 1799 1799 1799
++47697 47615 47488 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 60266 60266 60266 385 385 334 18336 18336 18336
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 63736 46260 19789 44846 53841 61423 43818 54098 63479
++63483 46207 20056 61985 45298 20071 44846 53841 61423 47031 52942 56540 50629 49986 46941
++54209 48830 40477 59002 43055 18866 0 0 0 0 0 0 3038 2204 899
++55635 40828 18345 54760 46836 33773 43304 54355 65021 43818 54098 63479 54209 48830 40477
++59969 46214 26008 62986 45716 19556 61241 45992 22579 57302 45835 26989 50115 51271 50886
++42919 54484 65535 47031 52942 56540 61241 45992 22579 30042 21792 9253 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 15792 11440 4871
++62859 46189 20912 50629 49986 46941 42919 54484 65535 47031 52942 56540 54760 46836 33773
++61241 45992 22579 63486 46079 19455 59969 46214 26008 56972 46962 30007 45746 53327 59238
++42919 54484 65535 50629 49986 46941 60373 44510 19999 12071 8729 3764 0 0 0
++0 0 0 0 0 0 128 128 128 4874 3558 1459 60487 44116 19189
++50629 49986 46941 42919 54484 65535 43818 54098 63479 56278 47802 34950 58276 44060 22272
++63864 46774 20174 58276 44060 22272 56972 46962 30007 47031 52942 56540 61241 45992 22579
++63486 46079 19455 43304 54355 65021 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 257 257 257 5943 4354 1886 60373 44510 19999
++54209 48830 40477 43304 54355 65021 43818 54098 63479 54209 48830 40477 58279 45589 26504
++62856 45897 20023 61113 45548 20995 57302 45835 26989 50629 49986 46941 42919 54484 65535
++43818 54098 63479 57302 45835 26989 46996 34589 15727 0 0 0 0 0 0
++0 0 0 875 620 271 30933 22555 9803 62486 45353 19401 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62486 45353 19401 63736 46260 19789 61451 44536 19168
++61861 44933 19292 60487 44116 19189 62986 45716 19556 63736 46260 19789 63736 46260 19789
++62986 45716 19556 53070 38550 16467 62486 45353 19401 63736 46260 19789 63112 45588 19556
++60487 44116 19189 61861 44933 19292 60487 44116 19189 63736 46260 19789 63736 46260 19789
++63736 46260 19789 61451 44536 19168 27882 20284 8738 0 0 0 0 0 0
++
++0 0 0 0 0 0 18711 18711 18711 15440 15440 15440 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 30840 30197 30069 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30840 30197 30069 65021 65021 65021 65535 65535 65535
++57069 56684 56283 6810 6810 6810 9814 9814 9814 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 26342 26738 26738 3079 3079 3079 5911 5911 5911 51400 51400 51400
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889
++17553 17553 17553 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4480 4480 4480 28239 28239 28239
++40833 41475 42019 56026 55897 55897 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 11370 11370 11370 9814 9814 9814 55126 54741 54484 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 56283 56283 56283 15440 15440 15440
++22359 22625 23010 59538 59538 59538 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 128 128 128 0 0 0
++21292 21292 21292 55126 54741 54484 65535 65535 65535 61680 61680 61680 52685 52685 52685
++42507 42507 42507 30840 30197 30069 6427 6427 6427 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 26342 26738 26738 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942 6427 6427 6427
++22881 22881 22881 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++4480 4480 4480 20778 20778 20542 24991 24991 24991 65535 65535 65535 65535 65535 65535
++65535 65535 65535 31875 31875 31875 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3079 3079 3079 49304 49177 49053 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 56026 55897 55897 0 0 0 18517 18517 18517
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62737 45569 19692 45746 53327 59238 43304 54355 65021
++63736 46260 19789 56278 47802 34950 57302 45835 26989 61985 45298 20071 48838 36002 16378
++46996 34589 15727 48838 36002 16378 128 128 128 0 0 0 40410 29471 12985
++56972 46962 30007 43304 54355 65021 44846 53841 61423 61241 45992 22579 51150 38050 17516
++19371 14059 6014 8373 6077 2600 13872 10127 4336 27882 20284 8738 60373 44510 19999
++56278 47802 34950 42919 54484 65535 47031 52942 56540 61985 45298 20071 9123 6640 2832
++128 128 128 0 0 0 0 0 0 2402 1799 684 59002 43055 18866
++50629 49986 46941 43304 54355 65021 50115 51271 50886 62856 45897 20023 37303 27193 11910
++15792 11440 4871 8095 5986 2531 17750 12880 5633 37303 27193 11910 62859 46189 20912
++50115 50774 49729 42919 54484 65535 54209 48830 40477 53705 39676 18339 0 0 0
++128 128 128 0 0 0 0 0 0 37303 27193 11910 54760 46836 33773
++43304 54355 65021 44846 53841 61423 59969 46214 26008 46996 34589 15727 19371 14059 6014
++10498 7619 3259 19371 14059 6014 37303 27193 11910 61985 45298 20071 54209 48830 40477
++63864 46774 20174 43818 54098 63479 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 0 0 0 46996 34589 15727 56278 47802 34950
++42919 54484 65535 45746 53327 59238 59969 46214 26008 48838 36002 16378 20895 15087 6460
++9123 6640 2832 13872 10127 4336 25195 18262 7789 59002 43055 18866 54760 46836 33773
++43818 54098 63479 43818 54098 63479 61241 45992 22579 23177 16932 7265 128 128 128
++0 0 0 0 0 0 30933 22555 9803 62340 45076 19410 63486 46335 19711
++63736 46260 19789 62486 45353 19401 62340 45076 19410 55635 40828 18345 27882 20284 8738
++15792 11440 4871 23177 16932 7265 55635 40828 18345 61861 44933 19292 63736 46260 19789
++63736 46260 19789 63486 46079 19711 63236 45897 19634 61861 44933 19292 46996 34589 15727
++25195 18262 7789 15792 11440 4871 27882 20284 8738 61451 44536 19168 63486 46079 19711
++63736 46260 19789 63736 46260 19789 57142 41714 18588 128 128 128 0 0 0
++
++0 0 0 0 0 0 18995 18995 18995 3857 3857 3857 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 28239 28239 28239 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 35502 34869 34383 65535 65535 65535 65535 65535 65535
++65535 65535 65535 43356 43080 42463 0 0 0 22359 22625 23010 2701 2701 2701
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 385 385 334
++26342 26738 26738 2701 2701 2701 5911 5911 5911 50115 50774 49729 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 18995 18995 18995
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 6810 6810 6810 21838 21794 21532 26342 26738 26738
++30583 30843 31357 35838 35838 35838 48486 48538 48538 61680 61680 61680 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55531 55531 55531 16762 16762 16762 4480 4480 4480 38978 38978 38978
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 26055 26184 25186 17553 17553 17553
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 5911 5911 5911 7197 7197 7197
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 61680 61680 61680 47697 47615 47488 30840 30197 30069
++1028 1028 1028 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 33681 33681 33681
++65021 65021 65021 65535 65535 65535 65535 65535 65535 65278 65278 65278 48486 48538 48538
++8455 8455 8455 20778 20778 20542 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++28239 28239 28239 1413 1670 1799 51400 51400 51400 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 35838 35838 35838 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 48486 48538 48538 0 0 0 18711 18711 18711
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62737 45569 19692 45746 53327 59238 42919 54484 65535
++62859 46189 20912 61241 45992 22579 48838 36002 16378 2402 1799 684 128 128 128
++128 128 128 0 0 0 0 0 0 7209 5285 2184 61985 45298 20071
++45746 53327 59238 42919 54484 65535 56972 46962 30007 43194 31354 13386 0 0 0
++0 0 0 128 128 128 128 128 128 0 0 0 5943 4354 1886
++60373 44510 19999 50115 51271 50886 43304 54355 65021 54209 48830 40477 43194 31354 13386
++0 0 0 0 0 0 0 0 0 27882 20284 8738 58279 45589 26504
++42919 54484 65535 45746 53327 59238 61113 45548 20995 20895 15087 6460 128 128 128
++0 0 0 0 0 0 0 0 0 257 257 257 22224 16071 6824
++61113 45548 20995 43818 54098 63479 42533 53970 64764 61241 45992 22579 19371 14059 6014
++0 0 0 128 128 128 1772 1533 1155 62465 45547 19595 47031 52942 56540
++43304 54355 65021 54209 48830 40477 46996 34589 15727 875 620 271 0 0 0
++128 128 128 0 0 0 385 385 334 23177 16932 7265 61113 45548 20995
++43818 54098 63479 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 12071 8729 3764 62859 46189 20912 44846 53841 61423
++42919 54484 65535 56972 46962 30007 40410 29471 12985 875 620 271 0 0 0
++0 0 0 0 0 0 0 0 0 4874 3558 1459 57142 41714 18588
++50115 50774 49729 42919 54484 65535 50629 49986 46941 53705 39676 18339 0 0 0
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63486 46079 19711 63864 46774 20174 54363 39457 16879 4874 3558 1459 0 0 0
++128 128 128 0 0 0 9123 6640 2832 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 61861 44933 19292 40410 29471 12985 128 128 128
++0 0 0 128 128 128 0 0 0 23177 16932 7265 61451 44536 19168
++63736 46260 19789 63736 46260 19789 63736 46260 19789 3038 2204 899 0 0 0
++
++0 0 0 0 0 0 18711 18711 18711 128 128 128 56026 55897 55897
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49304 49177 49053 13752 13752 13752 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 38978 38978 38978 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64507 64507 64507 24991 24991 24991 128 128 128 22359 22625 23010
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 26342 26738 26738
++2313 2313 2313 5911 5911 5911 50115 50774 49729 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 59538 59538 59538 20263 20263 20263 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 11370 11370 11370 40984 40984 40984
++49304 49177 49053 57069 56684 56283 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60266 60266 60266 35838 35838 35838 5911 5911 5911
++14506 14506 14506 39900 39413 38599 56283 56283 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61680 61680 61680 2701 2701 2701 49621 49621 49607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 21838 21794 21532 12931 12931 12931
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52119 52119 51914 24991 24991 24991 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40984 40984 40984 65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535
++43356 43080 42463 5911 5911 5911 22881 22881 22881 1413 1670 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18995 18995 18995
++8455 8455 8455 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 40984 40984 40984 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 10459 10459 10459 33681 33681 33681 48486 48538 48538
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 18711 18711 18711
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++45746 53327 59238 62465 45547 19595 3855 2930 1607 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 30933 22555 9803 56972 46962 30007
++42919 54484 65535 48573 52299 53199 60373 44510 19999 3855 2930 1607 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++25195 18262 7789 59969 46214 26008 42533 53970 64764 47031 52942 56540 61451 44536 19168
++1772 1533 1155 0 0 0 0 0 0 55635 40828 18345 50115 50774 49729
++43304 54355 65021 54209 48830 40477 41427 30069 13197 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++48838 36002 16378 54209 48830 40477 42919 54484 65535 54209 48830 40477 43194 31354 13386
++257 257 257 0 0 0 19371 14059 6014 58276 44060 22272 42919 54484 65535
++43304 54355 65021 61113 45548 20995 17750 12880 5633 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 55635 40828 18345
++50115 50774 49729 43304 54355 65021 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 34164 24785 10813 56278 47802 34950 42919 54484 65535
++47031 52942 56540 61113 45548 20995 5943 4354 1886 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 27882 20284 8738
++58279 45589 26504 42919 54484 65535 43818 54098 63479 62859 46189 20912 10498 7619 3259
++257 257 257 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 61861 44933 19292 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 55635 40828 18345 63486 46079 19455
++63736 46260 19789 63736 46260 19789 62737 45569 19692 5943 4354 1886 128 128 128
++0 0 0 0 0 0 0 0 0 2402 1799 684 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62340 45076 19410 10498 7619 3259 0 0 0
++
++0 0 0 0 0 0 18711 18711 18711 0 0 0 49304 49177 49053
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 52685 52685 52685 38978 38978 38978 22881 22881 22881
++1799 1927 2184 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 56026 55897 55897 5911 5911 5911 5911 5911 5911
++22359 22625 23010 1028 1028 1028 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 26342 26738 26738 1799 1799 1799
++5911 5911 5911 50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60652 60652 60652 21838 21794 21532 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 12931 12931 12931 42507 42507 42507 61309 61309 61309 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 40984 40984 40984 26342 26738 26738 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535 58889 58889 58889
++38978 38978 38978 8455 8455 8455 1413 1670 1799 24991 24991 24991 43356 43080 42463
++60266 60266 60266 65535 65535 65535 62065 62065 62065 5911 5911 5911 46260 45809 45103
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 31875 31875 31875 5911 5911 5911
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64764 64764 64764 46260 45809 45103 3857 3857 3857 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++642 642 899 43356 43080 42463 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 45746 46260 46746 5911 5911 5911 22881 22881 22881 4480 4480 4480
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 16762 16762 16762 19317 19131 18746
++16762 16762 16762 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 46260 45809 45103 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 31875 31875 31875 1028 1028 1028 18995 18995 18995
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++60373 44510 19999 60373 44510 19999 59002 43055 18866 60373 44510 19999 59002 43055 18866
++60373 44510 19999 59002 43055 18866 60373 44510 19999 59002 43055 18866 60373 44510 19999
++59002 43055 18866 60373 44510 19999 59002 43055 18866 51150 38050 17516 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++54209 48830 40477 45225 33169 15226 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 51150 38050 17516 50629 49986 46941
++42919 54484 65535 50976 48701 42982 42654 31649 16191 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++5943 4354 1886 63486 46079 19711 44846 53841 61423 42919 54484 65535 61113 45548 20995
++13872 10127 4336 0 0 0 4874 3558 1459 63486 46079 19711 44846 53841 61423
++42533 53970 64764 58279 45589 26504 20895 15087 6460 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 875 620 271
++25195 18262 7789 56972 46962 30007 42919 54484 65535 48573 52299 53199 57142 41714 18588
++0 0 0 128 128 128 30933 22555 9803 56278 47802 34950 42919 54484 65535
++48573 52299 53199 60373 44510 19999 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 28744 20827 9121
++56972 46962 30007 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 128 128 128 51150 38050 17516 50115 50774 49729 42919 54484 65535
++54209 48830 40477 43194 31354 13386 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3855 2930 1607
++63483 46207 20056 45746 53327 59238 42919 54484 65535 57302 45835 26989 25195 18262 7789
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 62986 45716 19556 875 620 271 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63736 46260 19789 63736 46260 19789 51340 37280 15909 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 62340 45076 19410
++63736 46260 19789 63736 46260 19789 60487 44116 19189 17750 12880 5633 0 0 0
++
++0 0 0 0 0 0 18995 18995 18995 0 0 0 42507 42507 42507
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++48486 48538 48538 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 50115 50774 49729 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 48486 48538 48538 6427 6427 6427
++1772 1533 1155 22359 22625 23010 3857 3857 3857 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 15440 15440 15440 21292 21292 21292 257 257 257 5911 5911 5911
++50115 50774 49729 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++56026 55897 55897 17965 17965 17965 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 14506 14506 14506
++43356 43080 42463 62708 62708 62708 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 31875 31875 31875 0 0 0 26342 26738 26738 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60652 60652 60652 46260 45809 45103 30840 30197 30069 3857 3857 3857
++4480 4480 4480 35838 35838 35838 61309 61309 61309 38406 38021 37650 11370 11370 11370
++51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 50115 50774 49729 0 0 0
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 52119 52119 51914 12931 12931 12931
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1028 1028 1028 40833 41475 42019 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 48486 48538 48538 8455 8455 8455 15440 15440 15440
++19317 19131 18746 4615 5268 6322 0 0 0 0 0 0 0 0 0
++0 0 0 1028 1285 1542 21838 21794 21532 8455 8455 8455 11370 11370 11370
++52685 52685 52685 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++59538 59538 59538 40984 40984 40984 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 4480 4480 4480 55126 55126 55126 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 22881 22881 22881 12931 12931 12931 7197 7197 7197
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 47031 52942 56540
++48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199
++48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199
++48573 52299 53199 48573 52299 53199 50629 49986 46941 57142 41714 18588 128 128 128
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 42919 54484 65535
++54760 46836 33773 28744 20827 9121 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 60373 44510 19999 47031 52942 56540
++42919 54484 65535 54760 46836 33773 43194 31354 13386 25195 18262 7789 23177 16932 7265
++25195 18262 7789 23177 16932 7265 25195 18262 7789 23177 16932 7265 25195 18262 7789
++23177 16932 7265 61985 45298 20071 48573 52299 53199 42919 54484 65535 58279 45589 26504
++20895 15087 6460 0 0 0 17750 12880 5633 58276 44060 22272 42919 54484 65535
++43304 54355 65021 63093 45874 19660 30042 21792 9253 23177 16932 7265 25195 18262 7789
++23177 16932 7265 25195 18262 7789 23177 16932 7265 25195 18262 7789 23177 16932 7265
++34164 24785 10813 61985 45298 20071 42919 54484 65535 45746 53327 59238 63483 46207 20056
++385 385 334 0 0 0 43194 31354 13386 50976 48701 42982 43304 54355 65021
++50115 51271 50886 53705 39676 18339 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 19371 14059 6014
++58279 45589 26504 42533 53970 64764 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 60373 44510 19999 47031 52942 56540 42919 54484 65535
++56278 47802 34950 34164 24785 10813 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++60373 44510 19999 47031 52942 56540 42919 54484 65535 54209 48830 40477 36240 26320 11215
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 57142 41714 18588 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 63736 46260 19789 41427 30069 13197 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 11370 11370 11370 5911 5911 5911 28239 28239 28239
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470
++10459 10459 10459 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 55126 54741 54484
++13752 13752 13752 0 0 0 18711 18711 18711 18336 18336 18336 2701 2701 2701
++0 0 0 0 0 0 0 0 0 0 0 0 7197 7197 7197
++21838 21794 21532 6427 6427 6427 0 0 0 21838 21794 21532 52685 52685 52685
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607
++9814 9814 9814 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 7197 7197 7197 43356 43080 42463 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 38406 38021 37650 22359 22625 23010
++3079 3079 3079 0 0 0 0 0 0 30840 30197 30069 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 49304 49177 49053 49621 49621 49607 65021 65021 65021 65535 65535 65535
++65278 65278 65278 57470 57470 57470 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 60652 60652 60652
++45746 46260 46746 17965 17965 17965 16762 16762 16762 55126 55126 55126 42507 42507 42507
++3857 3857 3857 40833 41475 42019 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535 22881 22881 22881
++9814 9814 9814 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126
++8455 8455 8455 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 38978 38978 38978 64764 64764 64764
++65535 65535 65535 65535 65535 65535 65278 65278 65278 53256 53199 52942 18995 18995 18995
++128 128 128 17553 17553 17553 24991 24991 24991 18517 18517 18517 16136 16136 16136
++17553 17553 17553 20263 20263 20263 1799 1799 1799 30583 30843 31357 59538 59538 59538
++65535 65535 65535 65278 65278 65278 58889 58889 58889 38978 38978 38978 24991 24991 24991
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 20263 20263 20263 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 6810 6810 6810 20263 20263 20263 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 45746 53327 59238
++45746 53327 59238 45746 53327 59238 45746 53327 59238 45746 53327 59238 45746 53327 59238
++45746 53327 59238 45746 53327 59238 45746 53327 59238 45746 53327 59238 45746 53327 59238
++45746 53327 59238 47031 52942 56540 50115 50774 49729 57142 41714 18588 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++57302 45835 26989 23177 16932 7265 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1413 1028 514 63736 46260 19789 44846 53841 61423
++42919 54484 65535 56278 47802 34950 57302 45835 26989 57302 45835 26989 56972 46962 30007
++57302 45835 26989 56972 46962 30007 57302 45835 26989 56972 46962 30007 57302 45835 26989
++56972 46962 30007 57302 45835 26989 50115 51271 50886 42919 54484 65535 56972 46962 30007
++27882 20284 8738 0 0 0 23177 16932 7265 57302 45835 26989 42919 54484 65535
++45746 53327 59238 56972 46962 30007 57302 45835 26989 56972 46962 30007 57302 45835 26989
++56972 46962 30007 57302 45835 26989 56972 46962 30007 57302 45835 26989 56972 46962 30007
++57302 45835 26989 56972 46962 30007 44846 53841 61423 43818 54098 63479 63736 46260 19789
++5943 4354 1886 128 128 128 48838 36002 16378 50629 49986 46941 42919 54484 65535
++50629 49986 46941 46996 34589 15727 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 13872 10127 4336
++61113 45548 20995 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 2402 1799 684 63736 46260 19789 44846 53841 61423 42919 54484 65535
++56972 46962 30007 25195 18262 7789 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++53705 39676 18339 50115 51271 50886 43304 54355 65021 50976 48701 42982 41427 30069 13197
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62486 45353 19401 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 59002 43055 18866
++63736 46260 19789 63736 46260 19789 60487 44116 19189 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 17553 17553 17553 5911 5911 5911
++60652 60652 60652 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222 22881 22881 22881
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3079 3079 3079 22881 22881 22881 35838 35838 35838
++48486 48538 48538 60266 60266 60266 65535 65535 65535 65535 65535 65535 65278 65278 65278
++57470 57470 57470 22881 22881 22881 257 257 257 1799 1799 1799 20263 20263 20263
++24991 24991 24991 22359 22625 23010 18995 18995 18995 18995 18995 18995 12931 12931 12931
++0 0 0 8455 8455 8455 42507 42507 42507 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63607 63607 63607 42507 42507 42507 2313 2313 2313
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 24991 24991 24991 56283 56283 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 55126 54741 54484
++49621 49621 49607 50115 50774 49729 35838 35838 35838 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 40984 40984 40984 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 46260 45809 45103 257 257 257 20263 20263 20263 38406 38021 37650
++38406 38021 37650 10459 10459 10459 50115 51271 50886 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 38978 38978 38978 18336 18336 18336 60933 60933 60933
++47056 47056 47056 1799 1799 1799 52119 52119 51914 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607
++60266 60266 60266 57470 57470 57470 64124 64124 64124 65535 65535 65535 56283 56283 56283
++16136 16136 16136 10459 10459 10459 55126 54741 54484 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 1799 1927 2184 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 33681 33681 33681
++60266 60266 60266 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++49621 49621 49607 26342 26738 26738 1028 1028 1028 0 0 0 257 257 257
++1413 1670 1799 17553 17553 17553 44589 44631 44888 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 38406 38021 37650
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 0 0 0 18995 18995 18995 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 59969 46214 26008
++62465 45547 19595 62737 45569 19692 62737 45569 19692 62737 45569 19692 62737 45569 19692
++62737 45569 19692 62737 45569 19692 62737 45569 19692 62737 45569 19692 62737 45569 19692
++62737 45569 19692 61985 45298 20071 62856 45897 20023 53705 39676 18339 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++58279 45589 26504 17750 12880 5633 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 5943 4354 1886 63486 46079 19711 43818 54098 63479
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++42919 54484 65535 42533 53970 64764 42919 54484 65535 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 54209 48830 40477
++34164 24785 10813 128 128 128 25195 18262 7789 56972 46962 30007 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 42919 54484 65535
++42533 53970 64764 42919 54484 65535 42533 53970 64764 42919 54484 65535 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 61113 45548 20995
++13872 10127 4336 0 0 0 51150 38050 17516 50115 50774 49729 43304 54355 65021
++50976 48701 42982 43194 31354 13386 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8095 5986 2531
++63483 46207 20056 42919 54484 65535 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 5943 4354 1886 63736 46260 19789 43818 54098 63479 42919 54484 65535
++58279 45589 26504 20895 15087 6460 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++48838 36002 16378 50115 50774 49729 43304 54355 65021 50629 49986 46941 45225 33169 15226
++128 128 128 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 62486 45353 19401 30933 22555 9803 875 620 271 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 17965 17965 17965 0 0 0
++47697 47615 47488 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 38406 38021 37650 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 18336 18336 18336 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 46260 45809 45103 30583 30843 31357 7197 7197 7197
++0 0 0 0 0 0 385 385 334 9814 9814 9814 22881 22881 22881
++33681 33681 33681 58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 51400 51400 51400 21292 21292 21292 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4480 4480 4480
++40833 41475 42019 64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 45746 46260 46746 6810 6810 6810 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 61680 61680 61680 15440 15440 15440 0 0 0 0 0 0
++0 0 0 128 128 128 35502 34869 34383 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 22359 22625 23010 44589 44631 44888
++64124 64124 64124 9814 9814 9814 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 44589 44631 44888 12931 12931 12931
++2701 2701 2701 128 128 128 28239 28239 28239 64764 64764 64764 65278 65278 65278
++59538 59538 59538 22881 22881 22881 10459 10459 10459 56283 56283 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 42507 42507 42507 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++11370 11370 11370 45746 46260 46746 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 56283 56283 56283 53256 53199 52942 52685 52685 52685
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 30583 30843 31357 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2701 2701 2701 16762 16762 16762
++56283 56283 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 33681 33681 33681 0 0 0 20778 20778 20542 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42533 53970 64764 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++58276 44060 22272 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 4874 3558 1459 63736 46260 19789 43818 54098 63479
++43304 54355 65021 59969 46214 26008 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++40410 29471 12985 257 257 257 25195 18262 7789 56972 46962 30007 42919 54484 65535
++47031 52942 56540 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++17750 12880 5633 257 257 257 51150 38050 17516 50629 49986 46941 42533 53970 64764
++56411 51914 44332 42654 31649 16191 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 10498 7619 3259
++61113 45548 20995 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 5943 4354 1886 63736 46260 19789 43818 54098 63479 43304 54355 65021
++57302 45835 26989 22224 16071 6824 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++51150 38050 17516 50629 49986 46941 43304 54355 65021 50976 48701 42982 42654 31649 16191
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62340 45076 19410 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 60487 44116 19189 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 16762 16762 16762 1028 1285 1542
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47697 47615 47488 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1799 1799 1799 59538 59538 59538 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708
++50115 50774 49729 51400 51400 51400 58889 58889 58889 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 57069 56684 56283
++30583 30843 31357 1028 1028 1028 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 19317 19131 18746 55126 54741 54484
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47697 47615 47488 875 620 271 0 0 0 19317 19131 18746
++38978 38978 38978 28239 28239 28239 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 7197 7197 7197 62065 62065 62065 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61309 61309 61309 44589 44631 44888 14506 14506 14506
++128 128 128 0 0 0 13752 13752 13752 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 30840 30197 30069 44589 44631 44888
++58889 58889 58889 3857 3857 3857 51400 51400 51400 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 0 0 0
++0 0 0 0 0 0 1799 1799 1799 59538 59538 59538 65535 65535 65535
++65535 65535 65535 60652 60652 60652 13752 13752 13752 26342 26738 26738 64507 64507 64507
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64507 64507 64507 31875 31875 31875 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 128 128 128 26055 26184 25186 52119 52119 51914 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 35502 34869 34383 51400 51400 51400 58889 58889 58889 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 10459 10459 10459 12931 12931 12931 7197 7197 7197 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++59969 46214 26008 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 45746 53327 59238
++42919 54484 65535 57302 45835 26989 28744 20827 9121 8095 5986 2531 8095 5986 2531
++8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531
++8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531
++3855 2930 1607 0 0 0 22224 16071 6824 57302 45835 26989 42919 54484 65535
++44846 53841 61423 63736 46260 19789 10498 7619 3259 8095 5986 2531 8095 5986 2531
++8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531
++8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531 8095 5986 2531
++2402 1799 684 0 0 0 48838 36002 16378 50629 49986 46941 42919 54484 65535
++50629 49986 46941 48838 36002 16378 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 1264 929 361 63736 46260 19789 45746 53327 59238 42919 54484 65535
++56972 46962 30007 27882 20284 8738 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++55635 40828 18345 48573 52299 53199 42919 54484 65535 54209 48830 40477 40410 29471 12985
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 62486 45353 19401 30933 22555 9803 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 128 128 128 3079 3079 3079 17553 17553 17553
++11370 11370 11370 63607 63607 63607 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 55126 55126 55126 44589 44631 44888 38406 38021 37650
++30840 30197 30069 18995 18995 18995 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 50115 50774 49729 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61680 61680 61680 38978 38978 38978 5911 5911 5911
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 33681 33681 33681 62065 62065 62065 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++57470 57470 57470 7197 7197 7197 128 128 128 21838 21794 21532 63607 63607 63607
++65535 65535 65535 38406 38021 37650 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 35838 35838 35838 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 56026 55897 55897
++26342 26738 26738 26342 26738 26738 12931 12931 12931 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 55126 54741 54484 38978 38978 38978 26055 26184 25186 58889 58889 58889
++26055 26184 25186 20263 20263 20263 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 56026 55897 55897 2313 2313 2313 0 0 0 0 0 0
++0 0 0 0 0 0 30840 30197 30069 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65278 65278 65278 48486 48538 48538 875 620 271 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61680 61680 61680 20778 20778 20542 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 514 514 514 24991 24991 24991
++49621 49621 49607 65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60652 60652 60652 3857 3857 3857 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 20263 20263 20263 64124 64124 64124 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++46260 45809 45103 0 0 0 20263 20263 20263 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++58276 44060 22272 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 59002 43055 18866 47031 52942 56540
++42919 54484 65535 56278 47802 34950 30933 22555 9803 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 13872 10127 4336 61113 45548 20995 42919 54484 65535
++42919 54484 65535 62856 45897 20023 10498 7619 3259 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 42654 31649 16191 54209 48830 40477 42919 54484 65535
++50115 51271 50886 53705 39676 18339 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 22224 16071 6824
++57302 45835 26989 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 0 0 0 60373 44510 19999 47031 52942 56540 42919 54484 65535
++54209 48830 40477 36240 26320 11215 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++60373 44510 19999 47031 52942 56540 42919 54484 65535 56278 47802 34950 30933 22555 9803
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62340 45076 19410 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 60487 44116 19189 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 18995 18995 18995
++0 0 0 51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65278 65278 65278 40984 40984 40984 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64764 64764 64764 45746 46260 46746 14506 14506 14506 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 28239 28239 28239 63222 63222 63222 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507
++28239 28239 28239 0 0 0 2313 2313 2313 52685 52685 52685 65535 65535 65535
++65535 65535 65535 31875 31875 31875 128 128 128 0 0 0 0 0 0
++0 0 0 7197 7197 7197 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47056 47056 47056 35502 34869 34383 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52119 52119 51914 16136 16136 16136 514 514 514 20778 20778 20542 22359 22625 23010
++31875 31875 31875 58889 58889 58889 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 128 128 128 0 0 0 0 0 0
++0 0 0 31875 31875 31875 63607 63607 63607 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 30840 30197 30069 14506 14506 14506
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 56026 55897 55897 7197 7197 7197
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 38978 38978 38978 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 59538 59538 59538 30583 30843 31357 31875 31875 31875 38406 38021 37650
++42507 42507 42507 43356 43080 42463 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 45746 46260 46746 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++22881 22881 22881 1799 1927 2184 17965 17965 17965 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++59969 46214 26008 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 50629 49986 46941
++43304 54355 65021 50976 48701 42982 48838 36002 16378 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7209 5285 2184 2402 1799 684 0 0 0 0 0 0
++0 0 0 0 0 0 1772 1533 1155 62856 45897 20023 45746 53327 59238
++42919 54484 65535 58279 45589 26504 25195 18262 7789 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 54760 46836 33773 42919 54484 65535
++47031 52942 56540 61985 45298 20071 1772 1533 1155 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 40410 29471 12985
++56278 47802 34950 42919 54484 65535 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 48838 36002 16378 50629 49986 46941 43304 54355 65021
++50976 48701 42982 48838 36002 16378 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8095 5986 2531
++63483 46207 20056 43818 54098 63479 42919 54484 65535 58276 44060 22272 20895 15087 6460
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 62486 45353 19401 30933 22555 9803 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++128 128 128 33681 33681 33681 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 7197 7197 7197 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 30583 30843 31357 65535 65535 65535 65535 65535 65535
++62708 62708 62708 57470 57470 57470 53256 53199 52942 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283
++24991 24991 24991 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++20263 20263 20263 60933 60933 60933 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607
++0 0 0 128 128 128 35838 35838 35838 65535 65535 65535 65535 65535 65535
++65535 65535 65535 30583 30843 31357 0 0 0 0 0 0 0 0 0
++257 257 257 39900 39413 38599 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 22881 22881 22881 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64507 64507 64507 55126 54741 54484 57470 57470 57470 65278 65278 65278
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60266 60266 60266 7197 7197 7197 0 0 0 0 0 0 0 0 0
++9814 9814 9814 60266 60266 60266 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 48486 48538 48538 2701 2701 2701
++61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 45746 46260 46746
++514 514 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 42507 42507 42507 65535 65535 65535 65535 65535 65535
++63607 63607 63607 26055 26184 25186 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 16136 16136 16136 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400
++3857 3857 3857 17553 17553 17553 1799 1799 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++58276 44060 22272 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 27882 20284 8738 58279 45589 26504
++42919 54484 65535 44846 53841 61423 61985 45298 20071 9123 6640 2832 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1028 514 55635 40828 18345 61985 45298 20071 46996 34589 15727 27882 20284 8738
++4874 3558 1459 0 0 0 0 0 0 51150 38050 17516 50629 49986 46941
++42919 54484 65535 50629 49986 46941 53705 39676 18339 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++13872 10127 4336 63483 46207 20056 59002 43055 18866 40410 29471 12985 20895 15087 6460
++0 0 0 128 128 128 17750 12880 5633 61241 45992 22579 42919 54484 65535
++42919 54484 65535 61241 45992 22579 20895 15087 6460 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 3855 2930 1607 62465 45547 19595
++47031 52942 56540 42919 54484 65535 42919 54484 65535 63483 46207 20056 8373 6077 2600
++0 0 0 128 128 128 30042 21792 9253 56972 46962 30007 42919 54484 65535
++44846 53841 61423 61985 45298 20071 10498 7619 3259 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 37303 27193 11910
++54760 46836 33773 43304 54355 65021 45746 53327 59238 62859 46189 20912 4874 3558 1459
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62340 45076 19410 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 60487 44116 19189 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 4480 4480 4480
++16136 16136 16136 3857 3857 3857 57069 56684 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++33681 33681 33681 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8455 8455 8455 24991 24991 24991 13752 13752 13752
++3857 3857 3857 257 257 257 0 0 0 35838 35838 35838 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283 15440 15440 15440
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 13752 13752 13752
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 38978 38978 38978
++128 128 128 0 0 0 55126 54741 54484 65535 65535 65535 65535 65535 65535
++65535 65535 65535 30840 30197 30069 0 0 0 0 0 0 0 0 0
++22881 22881 22881 61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888 38978 38978 38978
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++48486 48538 48538 257 257 257 0 0 0 0 0 0 0 0 0
++40833 41475 42019 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 54741 54484 0 0 0
++56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++31875 31875 31875 385 385 334 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 514 514 514 44589 44631 44888 65535 65535 65535
++38406 38021 37650 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 43356 43080 42463 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 24991 24991 24991
++0 0 0 19317 19131 18746 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++59969 46214 26008 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3855 2930 1607 62856 45897 20023
++47031 52942 56540 43304 54355 65021 56278 47802 34950 53705 39676 18339 5943 4354 1886
++257 257 257 0 0 0 0 0 0 0 0 0 875 620 271
++40410 29471 12985 59969 46214 26008 47031 52942 56540 56278 47802 34950 60373 44510 19999
++4874 3558 1459 0 0 0 0 0 0 23177 16932 7265 61241 45992 22579
++43304 54355 65021 43818 54098 63479 61241 45992 22579 37303 27193 11910 514 514 514
++0 0 0 0 0 0 0 0 0 0 0 0 8095 5986 2531
++55635 40828 18345 54209 48830 40477 48573 52299 53199 59969 46214 26008 45225 33169 15226
++0 0 0 0 0 0 2402 1799 684 61985 45298 20071 47031 52942 56540
++43304 54355 65021 54209 48830 40477 53705 39676 18339 4874 3558 1459 0 0 0
++0 0 0 0 0 0 2402 1799 684 43194 31354 13386 57302 45835 26989
++50115 51271 50886 43304 54355 65021 42919 54484 65535 63093 45874 19660 9123 6640 2832
++0 0 0 0 0 0 5943 4354 1886 61985 45298 20071 47031 52942 56540
++42919 54484 65535 56278 47802 34950 46996 34589 15727 3855 2930 1607 0 0 0
++0 0 0 0 0 0 0 0 0 13872 10127 4336 61985 45298 20071
++47031 52942 56540 43304 54355 65021 54209 48830 40477 43194 31354 13386 514 514 514
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 62486 45353 19401 30933 22555 9803 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++21292 21292 21292 128 128 128 31875 31875 31875 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942
++1799 1799 1799 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 40833 41475 42019
++65535 65535 65535 65535 65535 65535 56283 56283 56283 14506 14506 14506 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5911 5911 5911 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60933 60933 60933 35838 35838 35838 1799 1799 1799
++0 0 0 9814 9814 9814 63222 63222 63222 65535 65535 65535 65535 65535 65535
++65278 65278 65278 28239 28239 28239 0 0 0 0 0 0 33681 33681 33681
++62708 62708 62708 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283 47697 47615 47488
++38978 38978 38978 30840 30197 30069 28239 28239 28239 28239 28239 28239 26342 26738 26738
++49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 63222 63222 63222 22881 22881 22881
++61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++40984 40984 40984 0 0 0 0 0 0 0 0 0 1028 1028 1028
++28239 28239 28239 31875 31875 31875 31875 31875 31875 47056 47056 47056 64124 64124 64124
++65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933 2313 2313 2313
++49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 9814 9814 9814 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1799 1799 1799 35838 35838 35838
++642 642 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 28239 28239 28239
++38406 38021 37650 38406 38021 37650 38406 38021 37650 43356 43080 42463 65021 65021 65021
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056 1799 1799 1799
++16762 16762 16762 3857 3857 3857 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63736 46260 19789 43304 54355 65021 42919 54484 65535 58279 45589 26504
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 62737 45569 19692 45746 53327 59238 42919 54484 65535
++58276 44060 22272 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 30933 22555 9803
++58279 45589 26504 43818 54098 63479 42919 54484 65535 56278 47802 34950 60373 44510 19999
++37303 27193 11910 25195 18262 7789 22224 16071 6824 30933 22555 9803 59002 43055 18866
++58279 45589 26504 45746 53327 59238 43818 54098 63479 58279 45589 26504 30933 22555 9803
++0 0 0 0 0 0 0 0 0 1772 1533 1155 51150 38050 17516
++54209 48830 40477 42919 54484 65535 45746 53327 59238 59969 46214 26008 51150 38050 17516
++34164 24785 10813 20895 15087 6460 25195 18262 7789 40410 29471 12985 61113 45548 20995
++56278 47802 34950 43304 54355 65021 47031 52942 56540 62856 45897 20023 9123 6640 2832
++0 0 0 0 0 0 257 257 257 37303 27193 11910 54760 46836 33773
++42919 54484 65535 43304 54355 65021 54760 46836 33773 57142 41714 18588 37303 27193 11910
++27882 20284 8738 36240 26320 11215 55635 40828 18345 56972 46962 30007 50976 48701 42982
++63486 46335 19711 44846 53841 61423 42919 54484 65535 62856 45897 20023 9123 6640 2832
++0 0 0 0 0 0 0 0 0 37303 27193 11910 57302 45835 26989
++43304 54355 65021 44846 53841 61423 56972 46962 30007 55635 40828 18345 28744 20827 9121
++19371 14059 6014 25195 18262 7789 36240 26320 11215 62859 46189 20912 50976 48701 42982
++43304 54355 65021 47031 52942 56540 61985 45298 20071 10498 7619 3259 0 0 0
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62340 45076 19410 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 60487 44116 19189 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5911 5911 5911 15440 15440 15440 3857 3857 3857 57069 56684 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021 24991 24991 24991
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1772 1533 1155
++47056 47056 47056 55531 55531 55531 13752 13752 13752 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 38978 38978 38978 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 28239 28239 28239 0 0 0 0 0 0
++21838 21794 21532 51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 14506 14506 14506 3079 3079 3079 43356 43080 42463 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64507 64507 64507 50115 50774 49729 28239 28239 28239 20263 20263 20263 31875 31875 31875
++38406 38021 37650 43356 43080 42463 43356 43080 42463 38406 38021 37650 31875 31875 31875
++3079 3079 3079 49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 42507 42507 42507
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++31875 31875 31875 257 257 257 0 0 0 0 0 0 13752 13752 13752
++49621 49621 49607 55531 55531 55531 57470 57470 57470 45746 46260 46746 47697 47615 47488
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708 4480 4480 4480
++49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 43356 43080 42463 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 14506 14506 14506
++61680 61680 61680 65278 65278 65278 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 21292 21292 21292 1028 1028 1028
++18995 18995 18995 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 63486 46079 19711 43304 54355 65021 42919 54484 65535 58276 44060 22272
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 62465 45547 19595 45746 53327 59238 43304 54355 65021
++59969 46214 26008 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1264 929 361
++48838 36002 16378 57302 45835 26989 45746 53327 59238 42919 54484 65535 50115 51271 50886
++54209 48830 40477 57302 45835 26989 57302 45835 26989 54760 46836 33773 50115 50774 49729
++43304 54355 65021 44846 53841 61423 57302 45835 26989 48838 36002 16378 1413 1028 514
++128 128 128 0 0 0 0 0 0 0 0 0 10498 7619 3259
++60373 44510 19999 54209 48830 40477 43304 54355 65021 44846 53841 61423 50629 49986 46941
++56278 47802 34950 57302 45835 26989 56972 46962 30007 56278 47802 34950 47031 52942 56540
++42919 54484 65535 48573 52299 53199 61113 45548 20995 27882 20284 8738 257 257 257
++0 0 0 0 0 0 0 0 0 5943 4354 1886 60487 44116 19189
++50976 48701 42982 42919 54484 65535 43304 54355 65021 50115 50774 49729 54209 48830 40477
++56972 46962 30007 54209 48830 40477 50629 49986 46941 47031 52942 56540 62859 46189 20912
++63483 46207 20056 45746 53327 59238 42919 54484 65535 61985 45298 20071 10498 7619 3259
++0 0 0 0 0 0 0 0 0 1413 1028 514 51150 38050 17516
++56972 46962 30007 44846 53841 61423 42919 54484 65535 50629 49986 46941 54760 46836 33773
++58279 45589 26504 57302 45835 26989 54209 48830 40477 47031 52942 56540 42919 54484 65535
++48573 52299 53199 61985 45298 20071 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 61861 44933 19292 63736 46260 19789
++63736 46260 19789 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63486 46079 19455
++63736 46260 19789 62486 45353 19401 30933 22555 9803 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21292 21292 21292 257 257 257 28239 28239 28239 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62065 62065 62065 49621 49621 49607
++50115 50774 49729 50115 51271 50886 51400 51400 51400 49621 49621 49607 3857 3857 3857
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++4480 4480 4480 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 14506 14506 14506 61680 61680 61680 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 385 385 334 1028 1028 1028 42507 42507 42507
++64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++45746 46260 46746 35838 35838 35838 55126 55126 55126 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607
++35838 35838 35838 38406 38021 37650 53256 53199 52942 64764 64764 64764 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++35502 34869 34383 24991 24991 24991 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309
++17553 17553 17553 52685 52685 52685 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++22881 22881 22881 0 0 0 0 0 0 257 257 257 35838 35838 35838
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 62065 62065 62065
++61680 61680 61680 65535 65535 65535 65535 65535 65535 62065 62065 62065 2701 2701 2701
++52685 52685 52685 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64124 64124 64124 21292 21292 21292 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 43356 43080 42463 1028 1028 1028 18995 18995 18995
++1799 1799 1799 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++5943 4354 1886 63864 46774 20174 50115 50774 49729 48573 52299 53199 61241 45992 22579
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 63093 45874 19660 50629 49986 46941 50115 51271 50886
++61113 45548 20995 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++1264 929 361 42654 31649 16191 62465 45547 19595 54209 48830 40477 48573 52299 53199
++44846 53841 61423 43304 54355 65021 43304 54355 65021 47031 52942 56540 48573 52299 53199
++56278 47802 34950 63483 46207 20056 42654 31649 16191 2402 1799 684 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10498 7619 3259 53705 39676 18339 61241 45992 22579 50629 49986 46941 47031 52942 56540
++43818 54098 63479 42919 54484 65535 44846 53841 61423 47031 52942 56540 50115 50774 49729
++57302 45835 26989 61985 45298 20071 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 12071 8729 3764
++60373 44510 19999 56972 46962 30007 48573 52299 53199 44846 53841 61423 43304 54355 65021
++43818 54098 63479 47031 52942 56540 54209 48830 40477 61985 45298 20071 28744 20827 9121
++61985 45298 20071 50629 49986 46941 50115 51271 50886 62859 46189 20912 12071 8729 3764
++0 0 0 0 0 0 128 128 128 0 0 0 3855 2930 1607
++45225 33169 15226 61113 45548 20995 54209 48830 40477 48573 52299 53199 44846 53841 61423
++42919 54484 65535 43818 54098 63479 45746 53327 59238 50115 50774 49729 56972 46962 30007
++61985 45298 20071 23177 16932 7265 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 62486 45353 19401 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 45225 33169 15226 63736 46260 19789
++63736 46260 19789 62486 45353 19401 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 59002 43055 18866
++63736 46260 19789 63736 46260 19789 61451 44536 19168 20895 15087 6460 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 6427 6427 6427 14506 14506 14506 3857 3857 3857 52685 52685 52685
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 28239 28239 28239 385 385 334
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 47056 47056 47056 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 38406 38021 37650 1028 1285 1542 43356 43080 42463 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222
++63222 63222 63222 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60933 60933 60933 53256 53199 52942 50115 51271 50886
++64124 64124 64124 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++53256 53199 52942 642 642 899 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++35502 34869 34383 10459 10459 10459 57470 57470 57470 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++21838 21794 21532 128 128 128 0 0 0 0 0 0 49621 49621 49607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 514 514 514
++55531 55531 55531 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 43356 43080 42463 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 18517 18517 18517 6427 6427 6427 257 257 257
++3857 3857 3857 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64124 64124 64124 18336 18336 18336 3079 3079 3079 18336 18336 18336
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5943 4354 1886 53070 38550 16467 53705 39676 18339 53705 39676 18339 53705 39676 18339
++15792 11440 4871 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 51150 38050 17516 53705 39676 18339 55635 40828 18345
++53705 39676 18339 13872 10127 4336 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 13872 10127 4336 40410 29471 12985 59002 43055 18866
++63483 46207 20056 63483 46207 20056 63486 46079 19455 61985 45298 20071 55635 40828 18345
++41427 30069 13197 10498 7619 3259 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 23177 16932 7265 46996 34589 15727 62856 45897 20023
++63486 46079 19711 63483 46207 20056 63486 46079 19711 60373 44510 19999 53705 39676 18339
++30933 22555 9803 3855 2930 1607 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3855 2930 1607 36240 26320 11215 57142 41714 18588 63483 46207 20056 63483 46207 20056
++63486 46079 19711 61985 45298 20071 42654 31649 16191 15792 11440 4871 0 0 0
++45225 33169 15226 53705 39676 18339 55635 40828 18345 53705 39676 18339 12071 8729 3764
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 15792 11440 4871 45225 33169 15226 60373 44510 19999 63483 46207 20056
++63483 46207 20056 63736 46260 19789 63486 46079 19711 53705 39676 18339 30933 22555 9803
++4874 3558 1459 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 25195 18262 7789 54363 39457 16879 54363 39457 16879
++54363 39457 16879 40410 29471 12985 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 36240 26320 11215 54363 39457 16879
++54363 39457 16879 54363 39457 16879 25195 18262 7789 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 46996 34589 15727
++54363 39457 16879 54363 39457 16879 54363 39457 16879 15792 11440 4871 257 257 257
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 21292 21292 21292 128 128 128 22881 22881 22881
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 47056 47056 47056 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 24991 24991 24991 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++53256 53199 52942 12931 12931 12931 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65021 65021 65021 60933 60933 60933 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 6427 6427 6427 35838 35838 35838 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++47056 47056 47056 0 0 0 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++24991 24991 24991 0 0 0 257 257 257 33681 33681 33681 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 43356 43080 42463 5911 5911 5911
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 1799 1927 2184 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 24991 24991 24991 65535 65535 65535 63607 63607 63607 57470 57470 57470
++52119 52119 51914 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 0 0 0 21292 21292 21292 514 514 514
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 257 257 257 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 257 257 257
++2402 1799 684 8095 5986 2531 5943 4354 1886 128 128 128 128 128 128
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 0 0 0
++4874 3558 1459 8373 6077 2600 3038 2204 899 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 257 257 257 3038 2204 899 8373 6077 2600
++4874 3558 1459 257 257 257 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 3038 2204 899
++8373 6077 2600 5943 4354 1886 875 620 271 0 0 0 257 257 257
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 128 128 128 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 128 128 128 0 0 0 128 128 128 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 16762 16762 16762 257 257 257
++38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 58889 58889 58889 9814 9814 9814 2701 2701 2701 11370 11370 11370
++21838 21794 21532 28239 28239 28239 11370 11370 11370 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1799 1927 2184 53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 52119 52119 51914
++30840 30197 30069 55126 54741 54484 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 14506 14506 14506 26055 26184 25186 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++59538 59538 59538 3079 3079 3079 30840 30197 30069 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++26055 26184 25186 128 128 128 26342 26738 26738 65278 65278 65278 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60266 60266 60266 12931 12931 12931 40833 41475 42019
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 24991 24991 24991 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1413 1670 1799 2701 2701 2701
++0 0 0 7197 7197 7197 62065 62065 62065 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55531 55531 55531 5911 5911 5911 11370 11370 11370 9814 9814 9814 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12931 12931 12931 8455 8455 8455
++6427 6427 6427 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 57470 57470 57470 55531 55531 55531 60266 60266 60266 65021 65021 65021
++65535 65535 65535 63607 63607 63607 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++35502 34869 34383 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64507 64507 64507 55126 54741 54484 48486 48538 48538
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 22359 22625 23010 10459 10459 10459 64764 64764 64764 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 26342 26738 26738 11370 11370 11370 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++28239 28239 28239 0 0 0 35838 35838 35838 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64507 64507 64507 30840 30197 30069 30840 30197 30069 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 16762 16762 16762 49621 49621 49607
++6810 6810 6810 0 0 0 52685 52685 52685 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507
++21838 21794 21532 1799 1927 2184 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++642 642 899 18995 18995 18995 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 128 128 128 0 0 0 0 0 0
++3857 3857 3857 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4480 4480 4480
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 60266 60266 60266 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 49621 49621 49607
++44589 44631 44888 45746 46260 46746 49304 49177 49053 49304 49177 49053 40833 41475 42019
++33681 33681 33681 8455 8455 8455 514 514 514 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55126 55126 55126 4480 4480 4480 55126 55126 55126 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++35502 34869 34383 0 0 0 38406 38021 37650 65021 65021 65021 62708 62708 62708
++47056 47056 47056 38406 38021 37650 26342 26738 26738 13752 13752 13752 12931 12931 12931
++17965 17965 17965 18995 18995 18995 10459 10459 10459 56283 56283 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889 1799 1927 2184
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 2313 2313 2313
++4480 4480 4480 257 257 257 0 0 0 30840 30197 30069 65535 65535 65535
++52685 52685 52685 11370 11370 11370 42507 42507 42507 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 43356 43080 42463
++257 257 257 21838 21794 21532 642 642 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1413 1670 1799
++20263 20263 20263 257 257 257 35838 35838 35838 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 42507 42507 42507 257 257 257 2313 2313 2313 44589 44631 44888
++33681 33681 33681 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 33681 33681 33681
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63607 63607 63607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 45746 46260 46746
++38978 38978 38978 33681 33681 33681 22359 22625 23010 3857 3857 3857 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 31875 31875 31875 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 44589 44631 44888 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++44589 44631 44888 0 0 0 33681 33681 33681 35502 34869 34383 9814 9814 9814
++0 0 0 0 0 0 128 128 128 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 5911 5911 5911 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 26342 26738 26738
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 21838 21794 21532
++40984 40984 40984 0 0 0 257 257 257 39900 39413 38599 65535 65535 65535
++65535 65535 65535 56026 55897 55897 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 54741 54484 6427 6427 6427
++12931 12931 12931 9814 9814 9814 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 12931 12931 12931 2701 2701 2701 52119 52119 51914 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 30840 30197 30069 10459 10459 10459 51400 51400 51400 65278 65278 65278
++43356 43080 42463 128 128 128 0 0 0 0 0 0 4480 4480 4480
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 514 514 514 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55126 55126 55126 35502 34869 34383 4480 4480 4480 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1413 1670 1799
++10459 10459 10459 22359 22625 23010 18517 18517 18517 8455 8455 8455 50115 50774 49729
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 42507 42507 42507 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++53256 53199 52942 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++45746 46260 46746 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++28239 28239 28239 0 0 0 0 0 0 0 0 0 35838 35838 35838
++60652 60652 60652 11370 11370 11370 0 0 0 49304 49177 49053 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 13752 13752 13752 2701 2701 2701
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18995 18995 18995 3079 3079 3079 10459 10459 10459 56283 56283 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64764 64764 64764 30583 30843 31357 57069 56684 56283 65535 65535 65535 65535 65535 65535
++53256 53199 52942 0 0 0 0 0 0 128 128 128 49304 49177 49053
++4480 4480 4480 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 24991 24991 24991 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 26342 26738 26738 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 33681 33681 33681
++64124 64124 64124 65535 65535 65535 65535 65535 65535 62065 62065 62065 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685 55126 55126 55126
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62708 62708 62708 5911 5911 5911 0 0 0 22881 22881 22881 48486 48538 48538
++57470 57470 57470 28239 28239 28239 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 0 0 0 0 0 0 128 128 128
++17965 17965 17965 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60266 60266 60266
++9814 9814 9814 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 22881 22881 22881 16762 16762 16762 0 0 0 0 0 0
++51400 51400 51400 21838 21794 21532 0 0 0 0 0 0 47697 47615 47488
++65278 65278 65278 44589 44631 44888 1028 1028 1028 58889 58889 58889 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 61680 61680 61680 21838 21794 21532 1028 1028 1028 22881 22881 22881
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 7598 8369 9034
++23901 28398 32639 26085 33024 39578 33153 41891 50372 36810 46686 56154 36810 46686 56154
++33153 41891 50372 23901 28398 32639 16576 19275 21848 6627 7270 8103 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 22359 22625 23010 875 620 271 14506 14506 14506
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 61680 61680 61680 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62708 62708 62708 7197 7197 7197 128 128 128 26342 26738 26738 65021 65021 65021
++24991 24991 24991 0 0 0 0 0 0 0 0 0 5911 5911 5911
++15440 15440 15440 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 47056 47056 47056 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933
++38406 38021 37650 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 26055 26184 25186 128 128 128 0 0 0 0 0 0
++17553 17553 17553 28239 28239 28239 35838 35838 35838 8455 8455 8455 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++40984 40984 40984 65021 65021 65021 65535 65535 65535 65535 65535 65535 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 38406 38021 37650 0 0 0 28239 28239 28239 64764 64764 64764
++50115 50774 49729 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 1413 1670 1799 53256 53199 52942 43356 43080 42463 1799 1927 2184
++1799 1799 1799 59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++44589 44631 44888 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9814 9814 9814 53256 53199 52942 1028 1028 1028 0 0 0
++49304 49177 49053 56026 55897 55897 7197 7197 7197 1028 1028 1028 57470 57470 57470
++65535 65535 65535 63222 63222 63222 31875 31875 31875 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 30840 30197 30069 0 0 0 22881 22881 22881 2313 2313 2313
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 12444 14392 17344 33153 41891 50372 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42533 53970 64764 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 26085 33024 39578
++7829 9894 11719 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1028 1028 1028 22359 22625 23010 257 257 257
++18336 18336 18336 58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 26342 26738 26738 3079 3079 3079 55126 55126 55126 65535 65535 65535
++38406 38021 37650 0 0 0 0 0 0 514 514 514 47056 47056 47056
++24991 24991 24991 0 0 0 0 0 0 13752 13752 13752 16762 16762 16762
++0 0 0 0 0 0 14506 14506 14506 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942
++38406 38021 37650 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 28239 28239 28239 0 0 0 5911 5911 5911 42507 42507 42507
++64507 64507 64507 65535 65535 65535 65535 65535 65535 10459 10459 10459 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++22881 22881 22881 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 62065 62065 62065
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 21838 21794 21532 0 0 0 47056 47056 47056
++38978 38978 38978 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 55126 54741 54484 65535 65535 65535 42507 42507 42507
++1799 1927 2184 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++64124 64124 64124 21838 21794 21532 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 57470 57470 57470 33681 33681 33681 0 0 0
++48486 48538 48538 65535 65535 65535 47056 47056 47056 18711 18711 18711 65535 65535 65535
++65535 65535 65535 65278 65278 65278 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++35838 35838 35838 128 128 128 24991 24991 24991 4480 4480 4480 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12444 14392 17344 36810 46686 56154 42919 54484 65535 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 33667 36494 42587 7829 9894 11719 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 2313 2313 2313 21838 21794 21532
++128 128 128 21292 21292 21292 60266 60266 60266 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 38406 38021 37650 38406 38021 37650 65535 65535 65535 65535 65535 65535
++50115 50774 49729 128 128 128 0 0 0 38406 38021 37650 65278 65278 65278
++24991 24991 24991 0 0 0 1028 1285 1542 52119 52119 51914 5911 5911 5911
++0 0 0 0 0 0 40984 40984 40984 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35502 34869 34383 0 0 0 47697 47615 47488 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 17553 17553 17553 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 65278 65278 65278 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57069 56684 56283 8455 8455 8455 10459 10459 10459
++35502 34869 34383 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 50115 51271 50886 65535 65535 65535 65535 65535 65535
++58889 58889 58889 62708 62708 62708 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 1413 1670 1799 0 0 0 0 0 0
++0 0 0 0 0 0 49304 49177 49053 60266 60266 60266 11370 11370 11370
++48486 48538 48538 65278 65278 65278 65535 65535 65535 53256 53199 52942 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309 28239 28239 28239
++385 385 334 21838 21794 21532 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20214 22616 25648
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 40349 51271 61680 16576 19275 21848 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 3857 3857 3857
++21838 21794 21532 0 0 0 24991 24991 24991 61309 61309 61309 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 61309 61309 61309 65535 65535 65535 65535 65535 65535
++61680 61680 61680 6427 6427 6427 24991 24991 24991 63607 63607 63607 65535 65535 65535
++22881 22881 22881 0 0 0 35838 35838 35838 52685 52685 52685 0 0 0
++257 257 257 4480 4480 4480 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 38406 38021 37650
++47056 47056 47056 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 58889 58889 58889 12931 12931 12931 16136 16136 16136 60266 60266 60266
++65535 65535 65535 65535 65535 65535 65278 65278 65278 38406 38021 37650 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30840 30197 30069 65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056 514 514 514
++1799 1927 2184 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 16762 16762 16762 63607 63607 63607 65535 65535 65535 65535 65535 65535
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35838 35838 35838 0 0 0 0 0 0
++0 0 0 0 0 0 40984 40984 40984 65535 65535 65535 47697 47615 47488
++47056 47056 47056 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 57470 57470 57470 18995 18995 18995 514 514 514
++19317 19131 18746 8455 8455 8455 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1799 1927 2184 26085 33024 39578 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 23901 28398 32639
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5911 5911 5911 22881 22881 22881 128 128 128 20263 20263 20263 55126 54741 54484
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 38406 38021 37650 59538 59538 59538 65535 65535 65535 65535 65535 65535
++21292 21292 21292 17965 17965 17965 61309 61309 61309 40833 41475 42019 128 128 128
++0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 26342 26738 26738
++51400 51400 51400 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 6427 6427 6427 26342 26738 26738
++60933 60933 60933 65535 65535 65535 65535 65535 65535 63222 63222 63222 26055 26184 25186
++128 128 128 0 0 0 0 0 0 0 0 0 17553 17553 17553
++55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 35502 34869 34383
++0 0 0 642 642 899 1028 1285 1542 0 0 0 0 0 0
++17553 17553 17553 49304 49177 49053 65535 65535 65535 64507 64507 64507 57470 57470 57470
++49621 49621 49607 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 17553 17553 17553 128 128 128
++0 0 0 0 0 0 28239 28239 28239 65535 65535 65535 65278 65278 65278
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 48486 48538 48538 9814 9814 9814 2313 2313 2313 21838 21794 21532
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1028 1028 1028 33153 41891 50372 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++26085 33024 39578 1413 1670 1799 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 7197 7197 7197 24991 24991 24991 0 0 0 4480 4480 4480
++43356 43080 42463 64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 65535 65535 65535 65535 65535 65535 65535 65535 65535
++22881 22881 22881 52685 52685 52685 65535 65535 65535 30583 30843 31357 0 0 0
++0 0 0 49304 49177 49053 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 60266 60266 60266 4480 4480 4480
++55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607 13752 13752 13752
++15440 15440 15440 52685 52685 52685 65535 65535 65535 65535 65535 65535 60652 60652 60652
++43356 43080 42463 35838 35838 35838 31875 31875 31875 47056 47056 47056 63607 63607 63607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400 52685 52685 52685
++65535 65535 65535 65021 65021 65021 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680
++18995 18995 18995 1028 1028 1028 51400 51400 51400 55126 54741 54484 52685 52685 52685
++64124 64124 64124 65535 65535 65535 49621 49621 49607 18995 18995 18995 3079 3079 3079
++48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942 3857 3857 3857
++0 0 0 0 0 0 9814 9814 9814 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942
++24991 24991 24991 1028 1028 1028 7197 7197 7197 20263 20263 20263 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 875 620 271
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 23901 28398 32639 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 12444 14392 17344 20214 22616 25648
++40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++23901 28398 32639 10999 12122 13073 26085 33024 39578 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 23901 28398 32639 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 4480 4480 4480 22881 22881 22881 4480 4480 4480
++128 128 128 28239 28239 28239 57470 57470 57470 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++50115 50774 49729 65535 65535 65535 65021 65021 65021 14506 14506 14506 0 0 0
++8455 8455 8455 62708 62708 62708 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 46260 45809 45103 1028 1028 1028
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309
++38406 38021 37650 5911 5911 5911 30840 30197 30069 47056 47056 47056 62065 62065 62065
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 48486 48538 48538 40984 40984 40984 65278 65278 65278
++65535 65535 65535 56283 56283 56283 61309 61309 61309 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 54741 54484 5911 5911 5911 21838 21794 21532 57470 57470 57470 50115 50774 49729
++43356 43080 42463 28239 28239 28239 0 0 0 128 128 128 44589 44631 44888
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019
++128 128 128 0 0 0 0 0 0 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 54741 54484 28239 28239 28239 3857 3857 3857
++3079 3079 3079 21292 21292 21292 13752 13752 13752 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1264 929 361
++3855 2930 1607 2402 1799 684 0 0 0 0 0 0 15792 11440 4871
++53070 38550 16467 25195 18262 7789 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7829 9894 11719 40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 4615 5268 6322 385 385 334 0 0 0
++23007 25957 28667 42533 53970 64764 42919 54484 65535 42919 54484 65535 26085 33024 39578
++1028 1285 1542 0 0 0 0 0 0 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 16576 19275 21848 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 128 128 128 18995 18995 18995
++12931 12931 12931 0 0 0 10459 10459 10459 44589 44631 44888 62708 62708 62708
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64507 64507 64507 65535 65535 65535 57069 56684 56283 514 514 514 0 0 0
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 30583 30843 31357 10459 10459 10459
++64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 56026 55897 55897 40984 40984 40984 26342 26738 26738 14506 14506 14506
++31875 31875 31875 35838 35838 35838 38406 38021 37650 40984 40984 40984 43356 43080 42463
++40984 40984 40984 28239 28239 28239 35838 35838 35838 61680 61680 61680 65535 65535 65535
++65278 65278 65278 46260 45809 45103 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 42507 42507 42507 128 128 128 642 642 899 128 128 128
++0 0 0 0 0 0 15440 15440 15440 21838 21794 21532 38406 38021 37650
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507
++31875 31875 31875 0 0 0 0 0 0 28239 28239 28239 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889
++42507 42507 42507 20778 20778 20542 1799 1799 1799 514 514 514 18517 18517 18517
++17965 17965 17965 385 385 334 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4874 3558 1459 13872 10127 4336
++37303 27193 11910 61451 44536 19168 34164 24785 10813 3855 2930 1607 0 0 0
++15792 11440 4871 61861 44933 19292 36240 26320 11215 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 642 642 899
++33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 26085 33024 39578 0 0 0 0 0 0 257 257 257
++20214 22616 25648 42919 54484 65535 42919 54484 65535 42919 54484 65535 12444 14392 17344
++0 0 0 0 0 0 0 0 0 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 40349 51271 61680 10999 12122 13073 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 21838 21794 21532 1028 1028 1028 0 0 0 11370 11370 11370
++35838 35838 35838 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 45746 46260 46746 128 128 128 0 0 0
++45746 46260 46746 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60933 60933 60933 7197 7197 7197 24991 24991 24991
++65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60266 60266 60266
++50115 50774 49729 46260 45809 45103 40984 40984 40984 35838 35838 35838 40833 41475 42019
++51400 51400 51400 58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64764 64764 64764 38406 38021 37650 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64124 64124 64124 22881 22881 22881 257 257 257 5911 5911 5911
++26055 26184 25186 38406 38021 37650 59538 59538 59538 44589 44631 44888 15440 15440 15440
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62708 62708 62708 24991 24991 24991 128 128 128 257 257 257 50115 51271 50886
++51400 51400 51400 42507 42507 42507 33681 33681 33681 22881 22881 22881 2701 2701 2701
++0 0 0 8455 8455 8455 19317 19131 18746 18995 18995 18995 2313 2313 2313
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 10498 7619 3259 46996 34589 15727 54363 39457 16879 5943 4354 1886
++0 0 0 22224 16071 6824 63736 46260 19789 30042 21792 9253 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 16576 19275 21848
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 20214 22616 25648 2827 3598 4240 42507 42507 42507 0 0 0
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42533 53970 64764 0 0 0
++24991 24991 24991 16762 16762 16762 2056 2313 2822 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 36810 46686 56154 2827 3598 4240
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1413 1670 1799 21292 21292 21292 16136 16136 16136 514 514 514
++128 128 128 3079 3079 3079 28239 28239 28239 50115 51271 50886 64507 64507 64507
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35838 35838 35838 0 0 0 4480 4480 4480
++60652 60652 60652 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47697 47615 47488 128 128 128 30583 30843 31357
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49304 49177 49053 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 55126 55126 4480 4480 4480 35838 35838 35838
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 1413 1670 1799
++51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 59538 59538 59538 16136 16136 16136 128 128 128 0 0 0
++0 0 0 0 0 0 257 257 257 8455 8455 8455 18995 18995 18995
++20263 20263 20263 10459 10459 10459 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++6810 6810 6810 17553 17553 17553 26342 26738 26738 38406 38021 37650 35838 35838 35838
++5911 5911 5911 0 0 0 875 620 271 46996 34589 15727 51340 37280 15909
++2402 1799 684 0 0 0 43194 31354 13386 62340 45076 19410 12071 8729 3764
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 33153 41891 50372
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 16576 19275 21848 5911 5911 5911 26342 26738 26738 0 0 0
++36810 46686 56154 42919 54484 65535 42919 54484 65535 40349 51271 61680 0 0 0
++28239 28239 28239 9814 9814 9814 12444 14392 17344 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 23901 28398 32639
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++1799 1799 1799 8455 8455 8455 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3857 3857 3857 18995 18995 18995
++20263 20263 20263 5911 5911 5911 0 0 0 128 128 128 15440 15440 15440
++31875 31875 31875 40984 40984 40984 49621 49621 49607 58889 58889 58889 65278 65278 65278
++65535 65535 65535 65535 65535 65535 22881 22881 22881 128 128 128 28239 28239 28239
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 31875 31875 31875 257 257 257 38406 38021 37650
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 48486 48538 48538
++24991 24991 24991 56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40984 40984 40984 1028 1028 1028
++50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535 21838 21794 21532
++35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 54741 54484 3079 3079 3079 2701 2701 2701
++22881 22881 22881 20263 20263 20263 17965 17965 17965 10459 10459 10459 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 16136 16136 16136 18711 18711 18711 30840 30197 30069 57470 57470 57470
++60652 60652 60652 55126 54741 54484 43356 43080 42463 33681 33681 33681 30840 30197 30069
++28239 28239 28239 11370 11370 11370 0 0 0 7209 5285 2184 60487 44116 19189
++36240 26320 11215 0 0 0 10498 7619 3259 63236 45897 19634 46996 34589 15727
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4615 5268 6322 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 12444 14392 17344 642 642 899 0 0 0 2827 3598 4240
++42533 53970 64764 42919 54484 65535 42919 54484 65535 40349 51271 61680 0 0 0
++0 0 0 0 0 0 23007 25957 28667 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680
++4615 5268 6322 0 0 0 0 0 0 0 0 0 20263 20263 20263
++60266 60266 60266 65535 65535 65535 55126 54741 54484 9814 9814 9814 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 13752 13752 13752 20263 20263 20263 14506 14506 14506 128 128 128
++0 0 0 0 0 0 128 128 128 1799 1927 2184 16136 16136 16136
++31875 31875 31875 40833 41475 42019 3857 3857 3857 0 0 0 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55531 55531 55531 3079 3079 3079 0 0 0 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64764 64764 64764 56026 55897 55897 47056 47056 47056
++63607 63607 63607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222 21292 21292 21292
++17553 17553 17553 62708 62708 62708 65535 65535 65535 65535 65535 65535 38406 38021 37650
++12931 12931 12931 60652 60652 60652 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 24991 24991 24991 3857 3857 3857
++14506 14506 14506 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30840 30197 30069 60652 60652 60652 60652 60652 60652 38978 38978 38978 26342 26738 26738
++30840 30197 30069 35838 35838 35838 45746 46260 46746 57470 57470 57470 60266 60266 60266
++60652 60652 60652 59538 59538 59538 9814 9814 9814 0 0 0 25195 18262 7789
++61861 44933 19292 7209 5285 2184 0 0 0 41427 30069 13197 63736 46260 19789
++22224 16071 6824 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 23007 25957 28667 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 33667 36494 42587 0 0 0 642 642 899 23901 28398 32639
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 12444 14392 17344
++0 0 0 4615 5268 6322 36810 46686 56154 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++26085 33024 39578 0 0 0 0 0 0 3079 3079 3079 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 2313 2313 2313
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 5911 5911 5911 18517 18517 18517
++18711 18711 18711 18995 18995 18995 17965 17965 17965 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 2313 2313 2313 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 31875 31875 31875 0 0 0 0 0 0 49621 49621 49607
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942
++3079 3079 3079 39900 39413 38599 65535 65535 65535 65535 65535 65535 52119 52119 51914
++0 0 0 11370 11370 11370 42507 42507 42507 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 38406 38021 37650 0 0 0
++17965 17965 17965 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++53256 53199 52942 60652 60652 60652 60652 60652 60652 60933 60933 60933 30840 30197 30069
++56026 55897 55897 60652 60652 60652 60652 60652 60652 57069 56684 56283 45746 46260 46746
++35502 34869 34383 28239 28239 28239 22359 22625 23010 385 385 334 0 0 0
++45225 33169 15226 36240 26320 11215 128 128 128 15792 11440 4871 63736 46260 19789
++51340 37280 15909 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 33153 41891 50372 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 36810 46686 56154 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++33153 41891 50372 40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 1799 1927 2184 128 128 128 33681 33681 33681 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1028 1028 1028 13752 13752 13752 18995 18995 18995
++26055 26184 25186 17553 17553 17553 128 128 128 24991 24991 24991 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++55126 54741 54484 1799 1799 1799 0 0 0 128 128 128 57069 56684 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++38978 38978 38978 3857 3857 3857 55126 55126 55126 65535 65535 65535 63607 63607 63607
++10459 10459 10459 2313 2313 2313 0 0 0 15440 15440 15440 46260 45809 45103
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 48486 48538 48538 0 0 0
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8455 8455 8455
++60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 55126 55126 55126
++24991 24991 24991 30840 30197 30069 28239 28239 28239 33681 33681 33681 43356 43080 42463
++53256 53199 52942 60652 60652 60652 60266 60266 60266 30840 30197 30069 128 128 128
++12071 8729 3764 57142 41714 18588 0 0 0 2402 1799 684 62340 45076 19410
++63486 46079 19711 10498 7619 3259 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2827 3598 4240 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 40349 51271 61680 33153 41891 50372 26085 33024 39578
++23901 28398 32639 23007 25957 28667 23901 28398 32639 33667 36494 42587 36810 46686 56154
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 642 642 899 128 128 128 57470 57470 57470 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 63222 63222 63222
++7197 7197 7197 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 18336 18336 18336 0 0 0 33681 33681 33681 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++30840 30197 30069 0 0 0 0 0 0 1799 1927 2184 59538 59538 59538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 12931 12931 12931 24991 24991 24991 64124 64124 64124 65535 65535 65535
++31875 31875 31875 24991 24991 24991 24991 24991 24991 9814 9814 9814 128 128 128
++26342 26738 26738 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57069 56684 56283 514 514 514
++20263 20263 20263 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 11370 11370 11370
++60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++30840 30197 30069 57470 57470 57470 60933 60933 60933 60266 60266 60266 60652 60652 60652
++60933 60933 60933 60266 60266 60266 52119 52119 51914 38978 38978 38978 2313 2313 2313
++0 0 0 54363 39457 16879 8095 5986 2531 0 0 0 48838 36002 16378
++63486 46079 19455 34164 24785 10813 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12444 14392 17344 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++26085 33024 39578 12444 14392 17344 514 514 514 0 0 0 0 0 0
++257 257 257 257 257 257 257 257 257 257 257 257 128 128 128
++7829 9894 11719 33667 36494 42587 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++33667 36494 42587 257 257 257 12931 12931 12931 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 40984 40984 40984
++21838 21794 21532 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18336 18336 18336 0 0 0 38406 38021 37650 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685
++642 642 899 0 0 0 257 257 257 0 0 0 56283 56283 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 40833 41475 42019 0 0 0 47056 47056 47056 65535 65535 65535
++47056 47056 47056 7197 7197 7197 11370 11370 11370 12931 12931 12931 20778 20778 20542
++1772 1533 1155 9814 9814 9814 48486 48538 48538 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607 10459 10459 10459
++2701 2701 2701 16762 16762 16762 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 11370 11370 11370
++60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++49621 49621 49607 38406 38021 37650 45746 46260 46746 35502 34869 34383 30840 30197 30069
++28239 28239 28239 30840 30197 30069 38406 38021 37650 49304 49177 49053 20263 20263 20263
++128 128 128 30933 22555 9803 23177 16932 7265 0 0 0 34164 24785 10813
++63736 46260 19789 54363 39457 16879 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 23007 25957 28667 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 42533 53970 64764 16576 19275 21848
++128 128 128 0 0 0 2402 1799 684 19371 14059 6014 27882 20284 8738
++34164 24785 10813 37303 27193 11910 30933 22555 9803 20895 15087 6460 8373 6077 2600
++0 0 0 0 0 0 7829 9894 11719 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++23901 28398 32639 0 0 0 28239 28239 28239 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 20778 20778 20542 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18517 18517 18517 0 0 0 38406 38021 37650 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222 22881 22881 22881
++257 257 257 26055 26184 25186 22881 22881 22881 0 0 0 52119 52119 51914
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60652 60652 60652 9814 9814 9814 16762 16762 16762 63222 63222 63222
++61680 61680 61680 5911 5911 5911 18995 18995 18995 128 128 128 385 385 334
++18995 18995 18995 10459 10459 10459 128 128 128 28239 28239 28239 57069 56684 56283
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 38978 38978 38978
++257 257 257 15440 15440 15440 17965 17965 17965 16136 16136 16136 18995 18995 18995
++3079 3079 3079 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 11370 11370 11370
++60266 60266 60266 60933 60933 60933 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 22359 22625 23010 43356 43080 42463 55531 55531 55531 60266 60266 60266
++60933 60933 60933 60652 60652 60652 60652 60652 60652 60652 60652 60652 38978 38978 38978
++0 0 0 15792 11440 4871 40410 29471 12985 0 0 0 17750 12880 5633
++63736 46260 19789 63359 45859 19672 3038 2204 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 26085 33024 39578 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 10999 12122 13073 642 642 899
++3855 2930 1607 43194 31354 13386 61861 44933 19292 63736 46260 19789 59002 43055 18866
++46996 34589 15727 51340 37280 15909 55635 40828 18345 63736 46260 19789 63736 46260 19789
++43194 31354 13386 12071 8729 3764 0 0 0 12444 14392 17344 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++20214 22616 25648 642 642 899 33681 33681 33681 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61309 61309 61309 128 128 128 1028 1028 1028
++20214 22616 25648 4615 5268 6322 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18711 18711 18711 0 0 0 38978 38978 38978 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 35838 35838 35838 257 257 257
++8455 8455 8455 57470 57470 57470 43356 43080 42463 0 0 0 48486 48538 48538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 38978 38978 38978 0 0 0 44589 44631 44888
++65021 65021 65021 24991 24991 24991 18995 18995 18995 0 0 0 0 0 0
++0 0 0 10459 10459 10459 18995 18995 18995 642 642 899 5911 5911 5911
++33681 33681 33681 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708
++19317 19131 18746 0 0 0 2313 2313 2313 1799 1927 2184 514 514 514
++22881 22881 22881 2701 2701 2701 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4480 4480 4480
++60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 30840 30197 30069 60652 60652 60652 60652 60652 60652 60652 60652 60652
++57069 56684 56283 44589 44631 44888 33681 33681 33681 30840 30197 30069 22881 22881 22881
++0 0 0 5943 4354 1886 54363 39457 16879 128 128 128 3038 2204 899
++63093 45874 19660 63486 46079 19711 15792 11440 4871 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1028 1028 1028 36810 46686 56154 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 23901 28398 32639 257 257 257 9123 6640 2832
++54363 39457 16879 63486 46079 19711 63736 46260 19789 63736 46260 19789 50159 36373 15650
++41427 30069 13197 37303 27193 11910 55635 40828 18345 63736 46260 19789 63486 46079 19711
++63736 46260 19789 60487 44116 19189 5943 4354 1886 0 0 0 33153 41891 50372
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++16576 19275 21848 0 0 0 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 48486 48538 48538 257 257 257 7829 9894 11719
++42919 54484 65535 40349 51271 61680 23901 28398 32639 2827 3598 4240 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 24991 24991 24991 0 0 0 38978 38978 38978 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47697 47615 47488 1028 1028 1028 385 385 334
++47697 47615 47488 65535 65535 65535 59538 59538 59538 4480 4480 4480 44589 44631 44888
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 59538 59538 59538 7197 7197 7197 14506 14506 14506
++61680 61680 61680 31875 31875 31875 16762 16762 16762 1799 1799 1799 0 0 0
++0 0 0 0 0 0 1413 1670 1799 20263 20263 20263 11370 11370 11370
++257 257 257 1799 1799 1799 21838 21794 21532 42507 42507 42507 59538 59538 59538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 38978 38978 38978 30583 30843 31357 28239 28239 28239 6810 6810 6810
++1799 1927 2184 17553 17553 17553 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++55531 55531 55531 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 40833 41475 42019 30583 30843 31357 30840 30197 30069 28239 28239 28239
++33681 33681 33681 44589 44631 44888 56283 56283 56283 60266 60266 60266 59538 59538 59538
++642 642 899 0 0 0 59002 43055 18866 5943 4354 1886 128 128 128
++53070 38550 16467 63736 46260 19789 25195 18262 7789 385 385 334 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2827 3598 4240 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 36810 46686 56154 1028 1285 1542 385 385 334 51340 37280 15909
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 37303 27193 11910 0 0 0 7829 9894 11719
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++12444 14392 17344 0 0 0 45746 46260 46746 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 38406 38021 37650 128 128 128 16576 19275 21848
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 16576 19275 21848
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5911 5911 5911 16136 16136 16136 0 0 0 40984 40984 40984 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 55531 55531 55531 8455 8455 8455 257 257 257 31875 31875 31875
++65535 65535 65535 65535 65535 65535 65535 65535 65535 30583 30843 31357 30840 30197 30069
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 38978 38978 38978 0 0 0
++42507 42507 42507 35838 35838 35838 10459 10459 10459 7197 7197 7197 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 8455 8455 8455
++21292 21292 21292 11370 11370 11370 128 128 128 0 0 0 3079 3079 3079
++26342 26738 26738 47056 47056 47056 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 60652 60652 60652 6427 6427 6427
++8455 8455 8455 10459 10459 10459 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++46260 45809 45103 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 52119 52119 51914 38406 38021 37650 60266 60266 60266 60933 60933 60933
++60652 60652 60652 60652 60652 60652 60266 60266 60266 50115 50774 49729 35838 35838 35838
++3079 3079 3079 0 0 0 55635 40828 18345 7209 5285 2184 128 128 128
++54363 39457 16879 63736 46260 19789 28744 20827 9121 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 16576 19275 21848 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 12444 14392 17344 0 0 0 28744 20827 9121 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 3038 2204 899 128 128 128
++40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++7829 9894 11719 0 0 0 52119 52119 51914 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 44589 44631 44888 257 257 257 12444 14392 17344
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680
++16576 19275 21848 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++28239 28239 28239 0 0 0 0 0 0 49621 49621 49607 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61680 61680 61680 20263 20263 20263 0 0 0 14506 14506 14506 60652 60652 60652
++65535 65535 65535 65535 65535 65535 65535 65535 65535 49304 49177 49053 3857 3857 3857
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 8455 8455 8455
++11370 11370 11370 40984 40984 40984 4480 4480 4480 13752 13752 13752 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9814 9814 9814 18995 18995 18995 20263 20263 20263 17553 17553 17553
++1799 1799 1799 0 0 0 12931 12931 12931 38978 38978 38978 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63607 63607 63607 31875 31875 31875 0 0 0
++20263 20263 20263 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++33681 33681 33681 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 59538 59538 59538 30583 30843 31357 57069 56684 56283 43356 43080 42463
++30583 30843 31357 28239 28239 28239 30840 30197 30069 38978 38978 38978 53256 53199 52942
++5911 5911 5911 0 0 0 54363 39457 16879 3038 2204 899 0 0 0
++57142 41714 18588 63736 46260 19789 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 642 642 899 3038 2204 899 60487 44116 19189 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 1413 1028 514 642 642 899
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++7829 9894 11719 0 0 0 50115 51271 50886 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 53256 53199 52942 128 128 128 6627 7270 8103
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 12444 14392 17344 1028 1285 1542 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 12931 12931 12931
++10459 10459 10459 0 0 0 13752 13752 13752 60652 60652 60652 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607
++30583 30843 31357 0 0 0 1799 1927 2184 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 64507 64507 64507 22881 22881 22881
++43356 43080 42463 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 64124 64124 64124
++53256 53199 52942 40984 40984 40984 30583 30843 31357 28239 28239 28239 30840 30197 30069
++30583 30843 31357 33681 33681 33681 44589 44631 44888 55126 55126 55126 64124 64124 64124
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 40984 40984 40984
++0 0 0 7197 7197 7197 0 0 0 18517 18517 18517 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1799 1927 2184
++17965 17965 17965 19317 19131 18746 11370 11370 11370 0 0 0 2701 2701 2701
++28239 28239 28239 47697 47615 47488 57470 57470 57470 58889 58889 58889 59538 59538 59538
++60266 60266 60266 61309 61309 61309 62708 62708 62708 63607 63607 63607 65278 65278 65278
++53256 53199 52942 40984 40984 40984 20263 20263 20263 128 128 128 11370 11370 11370
++11370 11370 11370 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++14506 14506 14506 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 60652 60652 60652 21838 21794 21532 30968 32639 33656 46260 45809 45103
++58889 58889 58889 60652 60652 60652 60266 60266 60266 60933 60933 60933 53256 53199 52942
++3079 3079 3079 0 0 0 55635 40828 18345 0 0 0 0 0 0
++61451 44536 19168 63486 46079 19711 25195 18262 7789 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++1028 1285 1542 42533 53970 64764 42919 54484 65535 42919 54484 65535 42533 53970 64764
++33153 41891 50372 257 257 257 15792 11440 4871 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 61451 44536 19168 0 0 0 4615 5268 6322
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++12444 14392 17344 257 257 257 39900 39413 38599 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 63222 63222 63222 257 257 257 257 257 257
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 12444 14392 17344 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7197 7197 7197 15440 15440 15440
++128 128 128 4480 4480 4480 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708 30840 30197 30069
++128 128 128 0 0 0 39900 39413 38599 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942
++26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 44589 44631 44888 16136 16136 16136
++257 257 257 0 0 0 0 0 0 257 257 257 1028 1028 1028
++1772 1533 1155 128 128 128 0 0 0 0 0 0 11370 11370 11370
++30840 30197 30069 52685 52685 52685 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933
++11370 11370 11370 128 128 128 0 0 0 18517 18517 18517 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 7197 7197 7197 18995 18995 18995 16136 16136 16136
++1028 1028 1028 0 0 0 0 0 0 0 0 0 1799 1799 1799
++3079 3079 3079 4480 4480 4480 6810 6810 6810 8455 8455 8455 8455 8455 8455
++1028 1028 1028 0 0 0 2313 2313 2313 20263 20263 20263 11370 11370 11370
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 56026 55897 55897 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 60652 60652 60652 30840 30197 30069 60652 60652 60652 60652 60652 60652
++55126 55126 55126 38978 38978 38978 30840 30197 30069 30840 30197 30069 35838 35838 35838
++3079 3079 3079 0 0 0 53070 38550 16467 0 0 0 875 620 271
++63736 46260 19789 63736 46260 19789 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12444 14392 17344 42919 54484 65535 42533 53970 64764 42919 54484 65535 42919 54484 65535
++23901 28398 32639 257 257 257 30933 22555 9803 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 36240 26320 11215 0 0 0 10999 12122 13073
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++23901 28398 32639 0 0 0 30840 30197 30069 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 7197 7197 7197 128 128 128
++33667 36494 42587 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 10999 12122 13073 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 21838 21794 21532 0 0 0
++514 514 514 44589 44631 44888 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61680 61680 61680 28239 28239 28239 0 0 0
++642 642 899 39900 39413 38599 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++38406 38021 37650 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52119 52119 51914 15440 15440 15440 0 0 0 0 0 0
++18336 18336 18336 40833 41475 42019 47697 47615 47488 53256 53199 52942 57470 57470 57470
++59538 59538 59538 55126 55126 55126 52119 52119 51914 39900 39413 38599 24991 24991 24991
++2701 2701 2701 3079 3079 3079 38978 38978 38978 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++51400 51400 51400 4480 4480 4480 128 128 128 20263 20263 20263 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1799 1799 1799
++17553 17553 17553 18517 18517 18517 18517 18517 18517 18711 18711 18711 18517 18517 18517
++18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517 18517
++18517 18517 18517 17553 17553 17553 15440 15440 15440 642 642 899 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 38406 38021 37650 60652 60652 60652 60652 60652 60652 60652 60652 60652
++60652 60652 60652 60933 60933 60933 24991 24991 24991 30840 30197 30069 28239 28239 28239
++35502 34869 34383 50115 51271 50886 60652 60652 60652 60266 60266 60266 44589 44631 44888
++0 0 0 3038 2204 899 59002 43055 18866 1264 929 361 5943 4354 1886
++63486 46079 19455 55635 40828 18345 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++16576 19275 21848 257 257 257 43194 31354 13386 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 57142 41714 18588 3038 2204 899 0 0 0 33153 41891 50372
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++26085 33024 39578 0 0 0 18517 18517 18517 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681 257 257 257
++6627 7270 8103 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 36810 46686 56154 4615 5268 6322
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 8455 8455 8455 257 257 257
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 61309 61309 61309 24991 24991 24991 0 0 0 1799 1799 1799
++44589 44631 44888 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60266 60266 60266 40833 41475 42019 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 3079 3079 3079 0 0 0 22881 22881 22881 48486 48538 48538
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 54741 54484 21838 21794 21532 128 128 128 18995 18995 18995 52119 52119 51914
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47697 47615 47488 1799 1799 1799 3079 3079 3079 21838 21794 21532
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++11370 11370 11370 18995 18995 18995 16762 16762 16762 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 60266 60266 60266 60652 60652 60652 60652 60652 60652
++60652 60652 60652 60652 60652 60652 28239 28239 28239 60266 60266 60266 60652 60652 60652
++60266 60266 60266 45746 46260 46746 30840 30197 30069 28239 28239 28239 26342 26738 26738
++128 128 128 13872 10127 4336 63486 46079 19455 46996 34589 15727 51340 37280 15909
++63736 46260 19789 34164 24785 10813 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 385 385 334
++40349 51271 61680 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++7829 9894 11719 257 257 257 53070 38550 16467 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++61861 44933 19292 17750 12880 5633 257 257 257 16576 19275 21848 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++33153 41891 50372 1028 1285 1542 7197 7197 7197 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222 7197 7197 7197
++128 128 128 26085 33024 39578 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 33153 41891 50372
++257 257 257 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18336 18336 18336 128 128 128 1028 1028 1028
++57069 56684 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 22359 22625 23010 128 128 128 3857 3857 3857 47697 47615 47488
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 55126 55126 55126 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538
++11370 11370 11370 128 128 128 28239 28239 28239 64124 64124 64124 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 63222 63222 63222 39900 39413 38599 3079 3079 3079 2056 2313 2822
++38406 38021 37650 61680 61680 61680 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 44589 44631 44888 1799 1799 1799 3079 3079 3079
++19317 19131 18746 18517 18517 18517 18517 18517 18517 17553 17553 17553 16762 16762 16762
++5911 5911 5911 0 0 0 2701 2701 2701 20263 20263 20263 13752 13752 13752
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 40833 41475 42019 60652 60652 60652 60652 60652 60652
++60933 60933 60933 60266 60266 60266 30840 30197 30069 42507 42507 42507 28239 28239 28239
++30840 30197 30069 43356 43080 42463 58889 58889 58889 47056 47056 47056 16136 16136 16136
++0 0 0 23177 16932 7265 63736 46260 19789 63486 46079 19455 63736 46260 19789
++46996 34589 15727 2402 1799 684 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 10999 12122 13073
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++12444 14392 17344 257 257 257 45225 33169 15226 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 59002 43055 18866
++13872 10127 4336 514 514 514 2827 3598 4240 40349 51271 61680 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 128 128 128 257 257 257 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 42507 42507 42507
++0 0 0 2827 3598 4240 40349 51271 61680 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++26085 33024 39578 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18336 18336 18336 0 0 0 22359 22625 23010
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 48486 48538 48538
++10459 10459 10459 128 128 128 7197 7197 7197 50115 50774 49729 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57069 56684 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 46260 45809 45103
++128 128 128 15440 15440 15440 59538 59538 59538 65535 65535 65535 57470 57470 57470
++46260 45809 45103 47697 47615 47488 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685 17553 17553 17553
++0 0 0 15440 15440 15440 49304 49177 49053 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 50115 50774 49729 16136 16136 16136
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 22359 22625 23010 8455 8455 8455 385 385 334 9814 9814 9814
++20778 20778 20542 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 11370 11370 11370 59538 59538 59538 60652 60652 60652
++60652 60652 60652 60266 60266 60266 21838 21794 21532 48486 48538 48538 60266 60266 60266
++56283 56283 56283 35502 34869 34383 10459 10459 10459 0 0 0 0 0 0
++385 385 334 45225 33169 15226 63736 46260 19789 63736 46260 19789 48838 36002 16378
++2402 1799 684 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 26085 33024 39578
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++20214 22616 25648 642 642 899 37303 27193 11910 64250 47031 20303 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 54363 39457 16879 10498 7619 3259
++0 0 0 6627 7270 8103 36810 46686 56154 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 7829 9894 11719 0 0 0 44589 44631 44888 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++13752 13752 13752 0 0 0 20214 22616 25648 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 16576 19275 21848 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 22881 22881 22881 0 0 0 40984 40984 40984
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 60266 60266 60266 31875 31875 31875 385 385 334
++257 257 257 10459 10459 10459 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64764 64764 64764 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681
++0 0 0 40984 40984 40984 60652 60652 60652 31875 31875 31875 3079 3079 3079
++128 128 128 0 0 0 642 642 899 24991 24991 24991 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 62708 62708 62708
++43356 43080 42463 11370 11370 11370 514 514 514 30583 30843 31357 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680
++42507 42507 42507 33681 33681 33681 30840 30197 30069 38978 38978 38978 52119 52119 51914
++64124 64124 64124 65535 65535 65535 62065 62065 62065 43356 43080 42463 1799 1927 2184
++5911 5911 5911 16762 16762 16762 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 21838 21794 21532 60266 60266 60266
++60652 60652 60652 49621 49621 49607 40984 40984 40984 45746 46260 46746 21838 21794 21532
++1799 1799 1799 0 0 0 0 0 0 2402 1799 684 27882 20284 8738
++53070 38550 16467 63736 46260 19789 63736 46260 19789 63486 46079 19455 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2056 2313 2822 40349 51271 61680
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++23901 28398 32639 0 0 0 30933 22555 9803 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 59002 43055 18866 27882 20284 8738 875 620 271 642 642 899
++7829 9894 11719 40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 23007 25957 28667 0 0 0 24991 24991 24991 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 128 128 128 1799 1927 2184 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 40349 51271 61680 6627 7270 8103 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 14506 14506 14506 0 0 0 52685 52685 52685
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 47056 47056 47056 13752 13752 13752 128 128 128 128 128 128
++0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 18336 18336 18336
++0 0 0 45746 46260 46746 30840 30197 30069 257 257 257 1799 1799 1799
++31875 31875 31875 49304 49177 49053 53256 53199 52942 47056 47056 47056 38406 38021 37650
++64124 64124 64124 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60933 60933 60933 40984 40984 40984 7197 7197 7197 8455 8455 8455
++45746 46260 46746 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 42507 42507 42507
++642 642 899 18995 18995 18995 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++42507 42507 42507 17553 17553 17553 8455 8455 8455 385 385 334 0 0 0
++128 128 128 0 0 0 0 0 0 13872 10127 4336 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 8095 5986 2531
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 20214 22616 25648 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++26085 33024 39578 642 642 899 22224 16071 6824 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 54363 39457 16879
++30933 22555 9803 4874 3558 1459 0 0 0 1413 1670 1799 23007 25957 28667
++40349 51271 61680 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 33153 41891 50372 642 642 899 3857 3857 3857 64507 64507 64507
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 20778 20778 20542 0 0 0 16576 19275 21848 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 28239 28239 28239 0 0 0 10459 10459 10459 63222 63222 63222
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507 47056 47056 47056
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309 2313 2313 2313
++0 0 0 33681 33681 33681 0 0 0 0 0 0 46260 45809 45103
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 65535 65535 65535 57069 56684 56283 24991 24991 24991
++1028 1028 1028 38978 38978 38978 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++16762 16762 16762 17965 17965 17965 642 642 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 875 620 271 59002 43055 18866
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 27882 20284 8738
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 33153 41891 50372 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++33153 41891 50372 0 0 0 3855 2930 1607 27882 20284 8738 45225 33169 15226
++41427 30069 13197 37303 27193 11910 30042 21792 9253 10498 7619 3259 0 0 0
++128 128 128 0 0 0 16576 19275 21848 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 6627 7270 8103 0 0 0 48486 48538 48538
++65535 65535 65535 65535 65535 65535 38406 38021 37650 14506 14506 14506 61309 61309 61309
++65535 65535 65535 56283 56283 56283 1028 1028 1028 0 0 0 33153 41891 50372
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 20214 22616 25648 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1799 1799 1799
++21838 21794 21532 3857 3857 3857 0 0 0 30840 30197 30069 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 59538 59538 59538 43356 43080 42463 20263 20263 20263 0 0 0
++0 0 0 1028 1285 1542 19317 19131 18746 24991 24991 24991 0 0 0
++0 0 0 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 8455 8455 8455
++257 257 257 0 0 0 0 0 0 4480 4480 4480 62065 62065 62065
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607
++40984 40984 40984 1799 1927 2184 30583 30843 31357 62065 62065 62065 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++26342 26738 26738 6810 6810 6810 11370 11370 11370 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 40410 29471 12985
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 45225 33169 15226
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7598 8369 9034 257 257 257 7829 9894 11719 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 12444 14392 17344 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 4615 5268 6322
++20214 22616 25648 33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 20214 22616 25648 642 642 899 26342 26738 26738
++65535 65535 65535 65535 65535 65535 22881 22881 22881 0 0 0 40833 41475 42019
++65535 65535 65535 65535 65535 65535 28239 28239 28239 257 257 257 10999 12122 13073
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 6627 7270 8103
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5911 5911 5911 20778 20778 20542
++514 514 514 0 0 0 5911 5911 5911 49621 49621 49607 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 64124 64124 64124 53256 53199 52942 44589 44631 44888
++28239 28239 28239 3857 3857 3857 128 128 128 0 0 0 385 385 334
++16136 16136 16136 18336 18336 18336 1413 1670 1799 17965 17965 17965 0 0 0
++128 128 128 38406 38021 37650 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 22881 22881 22881
++0 0 0 0 0 0 128 128 128 12931 12931 12931 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 58889 58889 58889
++52685 52685 52685 49621 49621 49607 51400 51400 51400 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 51400 51400 51400 14506 14506 14506 21838 21794 21532 58889 58889 58889
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++38978 38978 38978 128 128 128 17553 17553 17553 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 22224 16071 6824
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 62486 45353 19401
++3038 2204 899 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 1028 1285 1542 16576 19275 21848 33153 41891 50372
++7829 9894 11719 0 0 0 26085 33024 39578 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 36810 46686 56154 23901 28398 32639 16576 19275 21848
++16576 19275 21848 20214 22616 25648 23901 28398 32639 33153 41891 50372 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 0 0 0 6427 6427 6427
++65278 65278 65278 65535 65535 65535 38978 38978 38978 128 128 128 26055 26184 25186
++65535 65535 65535 65535 65535 65535 61309 61309 61309 3857 3857 3857 1028 1285 1542
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 33153 41891 50372
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 16136 16136 16136 257 257 257
++0 0 0 16762 16762 16762 55126 54741 54484 65021 65021 65021 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63607 63607 63607 51400 51400 51400
++40984 40984 40984 28239 28239 28239 10459 10459 10459 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 14506 14506 14506 18995 18995 18995
++3079 3079 3079 0 0 0 0 0 0 17553 17553 17553 0 0 0
++0 0 0 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 40833 41475 42019
++128 128 128 3857 3857 3857 2701 2701 2701 28239 28239 28239 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64507 64507 64507 35838 35838 35838 1799 1927 2184
++0 0 0 0 0 0 128 128 128 7197 7197 7197 28239 28239 28239
++46260 45809 45103 65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60933 60933 60933 38406 38021 37650 16762 16762 16762
++55126 54741 54484 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 128 128 128 17553 17553 17553 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3855 2930 1607
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++10999 12122 13073 26085 33024 39578 40349 51271 61680 42533 53970 64764 33153 41891 50372
++514 514 514 1799 1927 2184 40349 51271 61680 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 1413 1670 1799 0 0 0
++57470 57470 57470 65535 65535 65535 55126 55126 55126 0 0 0 9814 9814 9814
++65535 65535 65535 65535 65535 65535 65535 65535 65535 35838 35838 35838 128 128 128
++6627 7270 8103 42533 53970 64764 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++16576 19275 21848 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12931 12931 12931 11370 11370 11370 128 128 128 385 385 334
++33681 33681 33681 61309 61309 61309 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 53256 53199 52942 35502 34869 34383 11370 11370 11370 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 1799 1927 2184
++16136 16136 16136 18995 18995 18995 20263 20263 20263 4480 4480 4480 0 0 0
++0 0 0 0 0 0 0 0 0 14506 14506 14506 2701 2701 2701
++385 385 334 26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 59538 59538 59538
++5911 5911 5911 13752 13752 13752 57069 56684 56283 51400 51400 51400 65535 65535 65535
++65535 65535 65535 65535 65535 65535 50115 50774 49729 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 30840 30197 30069 59538 59538 59538 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 55126 54741 54484
++30583 30843 31357 31875 31875 31875 44589 44631 44888 57069 56684 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++51400 51400 51400 0 0 0 16762 16762 16762 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++48838 36002 16378 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19455
++40410 29471 12985 0 0 0 2827 3598 4240 23901 28398 32639 36810 46686 56154
++42919 54484 65535 42533 53970 64764 42919 54484 65535 42919 54484 65535 16576 19275 21848
++0 0 0 20214 22616 25648 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 36810 46686 56154 0 0 0 3857 3857 3857
++64764 64764 64764 65535 65535 65535 65535 65535 65535 9814 9814 9814 0 0 0
++45746 46260 46746 65535 65535 65535 65535 65535 65535 64124 64124 64124 9814 9814 9814
++0 0 0 23901 28398 32639 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++36810 46686 56154 642 642 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3857 3857 3857 18336 18336 18336 128 128 128 1028 1285 1542 42507 42507 42507
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680
++38406 38021 37650 2056 2313 2822 0 0 0 128 128 128 0 0 0
++0 0 0 10459 10459 10459 19317 19131 18746 20263 20263 20263 16762 16762 16762
++3857 3857 3857 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 3857 3857 3857 14506 14506 14506
++0 0 0 11370 11370 11370 65021 65021 65021 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++44589 44631 44888 10459 10459 10459 65021 65021 65021 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 45746 46260 46746 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 26055 26184 25186 11370 11370 11370
++0 0 0 0 0 0 18517 18517 18517 61309 61309 61309 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 56283 56283 56283 55126 55126 55126 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52119 52119 51914 0 0 0 16762 16762 16762 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++19371 14059 6014 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++57142 41714 18588 875 620 271 642 642 899 40349 51271 61680 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 1028 1285 1542
++257 257 257 33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 36810 46686 56154
++36810 46686 56154 42533 53970 64764 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 26085 33024 39578 0 0 0 20263 20263 20263
++65535 65535 65535 65535 65535 65535 65535 65535 65535 40984 40984 40984 257 257 257
++11370 11370 11370 64507 64507 64507 65535 65535 65535 65535 65535 65535 45746 46260 46746
++0 0 0 642 642 899 33153 41891 50372 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 20214 22616 25648 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17553 17553 17553 128 128 128 1772 1533 1155 40984 40984 40984 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 56026 55897 55897 18517 18517 18517
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 17965 17965 17965
++0 0 0 642 642 899 57470 57470 57470 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65021 65021 65021 58889 58889 58889 52119 52119 51914
++52685 52685 52685 57470 57470 57470 62708 62708 62708 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++64764 64764 64764 30583 30843 31357 55126 54741 54484 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 52119 52119 51914 1028 1028 1028 0 0 0
++0 0 0 0 0 0 5911 5911 5911 59538 59538 59538 62065 62065 62065
++35838 35838 35838 1028 1028 1028 257 257 257 31875 31875 31875 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49621 49621 49607 0 0 0 16762 16762 16762 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++2402 1799 684 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 13872 10127 4336 128 128 128 33667 36494 42587 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 23901 28398 32639 0 0 0
++12444 14392 17344 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 40349 51271 61680 33153 41891 50372 23007 25957 28667
++10999 12122 13073 2827 3598 4240 385 385 334 128 128 128 642 642 899
++0 0 0 385 385 334 4615 5268 6322 12444 14392 17344 20214 22616 25648
++33153 41891 50372 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 23007 25957 28667 128 128 128 31875 31875 31875
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021 11370 11370 11370
++128 128 128 33681 33681 33681 65535 65535 65535 65535 65535 65535 65278 65278 65278
++24991 24991 24991 642 642 899 7829 9894 11719 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 36810 46686 56154 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17553 17553 17553 128 128 128 28239 28239 28239 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 50115 51271 50886 9814 9814 9814 128 128 128
++0 0 0 14506 14506 14506 18711 18711 18711 24991 24991 24991 128 128 128
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18336 18336 18336
++0 0 0 0 0 0 49304 49177 49053 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 33681 33681 33681 2701 2701 2701 18995 18995 18995
++35502 34869 34383 47056 47056 47056 58889 58889 58889 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 55126 55126 55126 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 31875 31875 31875 257 257 257
++0 0 0 0 0 0 1799 1799 1799 57470 57470 57470 65278 65278 65278
++65535 65535 65535 48486 48538 48538 11370 11370 11370 0 0 0 44589 44631 44888
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++45746 46260 46746 128 128 128 20778 20778 20542 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 7598 8369 9034 26085 33024 39578 1028 1285 1542
++0 0 0 50159 36373 15650 63359 45859 19672 63736 46260 19789 63736 46260 19789
++63736 46260 19789 34164 24785 10813 0 0 0 16576 19275 21848 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42533 53970 64764 6627 7270 8103 0 0 0
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++36810 46686 56154 23007 25957 28667 1028 1285 1542 0 0 0 0 0 0
++642 642 899 0 0 0 0 0 0 1028 1028 1028 4480 4480 4480
++5911 5911 5911 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 4615 5268 6322 23901 28398 32639 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 20214 22616 25648 642 642 899 31875 31875 31875
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685
++1028 1028 1028 1413 1670 1799 55126 54741 54484 65535 65535 65535 65535 65535 65535
++61309 61309 61309 6427 6427 6427 0 0 0 23901 28398 32639 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 33667 36494 42587 642 642 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1799 1927 2184
++15440 15440 15440 0 0 0 55126 54741 54484 65535 65535 65535 65535 65535 65535
++61680 61680 61680 49621 49621 49607 38406 38021 37650 35838 35838 35838 49304 49177 49053
++49304 49177 49053 30840 30197 30069 3079 3079 3079 0 0 0 0 0 0
++18995 18995 18995 4480 4480 4480 0 0 0 17965 17965 17965 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18336 18336 18336
++0 0 0 0 0 0 42507 42507 42507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60933 60933 60933 2827 3598 4240 35502 34869 34383 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 63222 63222 63222 43356 43080 42463
++24991 24991 24991 30840 30197 30069 46260 45809 45103 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 11370 11370 11370 10459 10459 10459
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++38978 38978 38978 0 0 0 20263 20263 20263 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7598 8369 9034 36810 46686 56154 42919 54484 65535 12444 14392 17344
++0 0 0 20895 15087 6460 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 51340 37280 15909 257 257 257 2827 3598 4240 42919 54484 65535
++42919 54484 65535 42533 53970 64764 33667 36494 42587 0 0 0 4615 5268 6322
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 20214 22616 25648
++642 642 899 128 128 128 0 0 0 12931 12931 12931 28239 28239 28239
++43356 43080 42463 57470 57470 57470 63222 63222 63222 65535 65535 65535 65535 65535 65535
++65535 65535 65535 62708 62708 62708 53256 53199 52942 44589 44631 44888 30840 30197 30069
++7197 7197 7197 0 0 0 128 128 128 2056 2313 2822 26085 33024 39578
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 26085 33024 39578 0 0 0 17553 17553 17553
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++30583 30843 31357 0 0 0 28239 28239 28239 65535 65535 65535 65535 65535 65535
++65535 65535 65535 45746 46260 46746 257 257 257 128 128 128 36810 46686 56154
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 20214 22616 25648 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 16136 16136 16136
++1028 1028 1028 1028 1028 1028 60266 60266 60266 57069 56684 56283 33681 33681 33681
++4480 4480 4480 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18336 18336 18336
++5911 5911 5911 0 0 0 0 0 0 17965 17965 17965 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 38406 38021 37650 65021 65021 65021 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 60933 60933 60933 13752 13752 13752 52119 52119 51914 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47697 47615 47488 642 642 899
++46260 45809 45103 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++20263 20263 20263 0 0 0 18995 18995 18995 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 33153 41891 50372 42919 54484 65535 42919 54484 65535 20214 22616 25648
++642 642 899 257 257 257 4874 3558 1459 10498 7619 3259 41427 30069 13197
++63736 46260 19789 63736 46260 19789 7209 5285 2184 128 128 128 33153 41891 50372
++42919 54484 65535 42919 54484 65535 12444 14392 17344 385 385 334 23901 28398 32639
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 7598 8369 9034 128 128 128
++257 257 257 20778 20778 20542 50115 51271 50886 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 48486 48538 48538 18711 18711 18711 0 0 0 0 0 0
++10999 12122 13073 36810 46686 56154 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 40349 51271 61680 128 128 128 642 642 899
++56026 55897 55897 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 35838 35838 35838 55531 55531 55531 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 22881 22881 22881 257 257 257 7829 9894 11719
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 7829 9894 11719 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 4480 4480 4480 35838 35838 35838 4480 4480 4480 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17553 17553 17553 7197 7197 7197
++0 0 0 0 0 0 0 0 0 17965 17965 17965 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64764 64764 64764 59538 59538 59538 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 33681 33681 33681
++24991 24991 24991 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400
++385 385 334 2313 2313 2313 16762 16762 16762 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++10999 12122 13073 42919 54484 65535 42919 54484 65535 26085 33024 39578 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++22224 16071 6824 64250 47031 20303 25195 18262 7789 257 257 257 23007 25957 28667
++42533 53970 64764 26085 33024 39578 128 128 128 642 642 899 36810 46686 56154
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 26085 33024 39578 1028 1285 1542 0 0 0 11370 11370 11370
++53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 42507 42507 42507 5911 5911 5911
++0 0 0 4615 5268 6322 33153 41891 50372 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 16576 19275 21848 385 385 334
++28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61680 61680 61680 4480 4480 4480 0 0 0
++23901 28398 32639 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++36810 46686 56154 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 11370 11370 11370
++9814 9814 9814 0 0 0 128 128 128 0 0 0 13752 13752 13752
++20263 20263 20263 18517 18517 18517 17965 17965 17965 17553 17553 17553 16762 16762 16762
++18517 18517 18517 18517 18517 18517 20263 20263 20263 7197 7197 7197 257 257 257
++0 0 0 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 44589 44631 44888 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62708 62708 62708 53256 53199 52942 49304 49177 49053
++57470 57470 57470 65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60266 60266 60266
++13752 13752 13752 58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 10459 10459 10459
++0 0 0 19317 19131 18746 1413 1670 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++23901 28398 32639 42919 54484 65535 42919 54484 65535 33153 41891 50372 7829 9894 11719
++23007 25957 28667 36810 46686 56154 36810 46686 56154 26085 33024 39578 642 642 899
++514 514 514 46996 34589 15727 45225 33169 15226 0 0 0 1028 1285 1542
++642 642 899 385 385 334 128 128 128 10999 12122 13073 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++33667 36494 42587 1028 1285 1542 0 0 0 26342 26738 26738 63222 63222 63222
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933
++16762 16762 16762 0 0 0 2827 3598 4240 33153 41891 50372 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 33153 41891 50372 128 128 128
++3857 3857 3857 62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 18336 18336 18336 31875 31875 31875 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 45746 46260 46746 0 0 0
++642 642 899 33153 41891 50372 42919 54484 65535 42919 54484 65535 40349 51271 61680
++7829 9894 11719 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++18711 18711 18711 18711 18711 18711 17965 17965 17965 18995 18995 18995 5911 5911 5911
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 18336 18336 18336 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 49304 49177 49053 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 50115 50774 49729
++26342 26738 26738 24991 24991 24991 60266 60266 60266 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 51400 51400 51400
++61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++35838 35838 35838 53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60652 60652 60652 16136 16136 16136 0 0 0
++3079 3079 3079 17553 17553 17553 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 642 642 899
++20214 22616 25648 42919 54484 65535 42919 54484 65535 42533 53970 64764 42919 54484 65535
++42533 53970 64764 42533 53970 64764 42919 54484 65535 42533 53970 64764 23007 25957 28667
++0 0 0 19371 14059 6014 61861 44933 19292 3038 2204 899 128 128 128
++0 0 0 0 0 0 642 642 899 23901 28398 32639 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 33153 41891 50372
++1028 1285 1542 0 0 0 30840 30197 30069 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 17553 17553 17553 128 128 128 2827 3598 4240 36810 46686 56154
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 10999 12122 13073
++0 0 0 35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61309 61309 61309 0 0 0 6427 6427 6427 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 18711 18711 18711
++642 642 899 7829 9894 11719 42533 53970 64764 42919 54484 65535 16576 19275 21848
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 45746 46260 46746 65278 65278 65278 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65021 65021 65021 28239 28239 28239 21838 21794 21532 63222 63222 63222 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 43356 43080 42463 53256 53199 52942
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++50115 51271 50886 49304 49177 49053 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 22359 22625 23010 0 0 0 1028 1285 1542
++22881 22881 22881 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10999 12122 13073 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 26085 33024 39578
++1028 1285 1542 17750 12880 5633 63736 46260 19789 19371 14059 6014 0 0 0
++0 0 0 0 0 0 0 0 0 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 40349 51271 61680 2827 3598 4240
++128 128 128 26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 16762 16762 16762 0 0 0 7829 9894 11719
++42919 54484 65535 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 33667 36494 42587
++642 642 899 6427 6427 6427 64124 64124 64124 65535 65535 65535 65535 65535 65535
++65535 65535 65535 5911 5911 5911 0 0 0 62065 62065 62065 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 61309 61309 61309
++642 642 899 0 0 0 23901 28398 32639 26085 33024 39578 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18517 18517 18517
++0 0 0 0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 57470 57470 57470 9814 9814 9814 38978 38978 38978 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 35502 34869 34383 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++63222 63222 63222 50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61680 61680 61680 28239 28239 28239 0 0 0 1028 1028 1028 24991 24991 24991
++1028 1285 1542 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++642 642 899 23007 25957 28667 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42533 53970 64764 36810 46686 56154 10999 12122 13073
++0 0 0 25195 18262 7789 63236 45897 19634 40410 29471 12985 0 0 0
++0 0 0 0 0 0 7829 9894 11719 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 16576 19275 21848 0 0 0
++14506 14506 14506 64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 60266 60266 60266 5911 5911 5911 642 642 899
++23007 25957 28667 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++7598 8369 9034 0 0 0 40984 40984 40984 65535 65535 65535 65535 65535 65535
++65535 65535 65535 18711 18711 18711 0 0 0 56283 56283 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++22359 22625 23010 128 128 128 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17965 17965 17965
++514 514 514 0 0 0 10459 10459 10459 53256 53199 52942 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 46260 45809 45103 2056 2313 2822 55126 54741 54484
++65278 65278 65278 65535 65535 65535 42507 42507 42507 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 58889 58889 58889 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55531 55531 55531
++18995 18995 18995 0 0 0 2701 2701 2701 22881 22881 22881 1799 1799 1799
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 2056 2313 2822 12444 14392 17344 20214 22616 25648
++16576 19275 21848 7829 9894 11719 2056 2313 2822 0 0 0 0 0 0
++7209 5285 2184 54363 39457 16879 63864 46774 20174 57142 41714 18588 128 128 128
++0 0 0 0 0 0 23007 25957 28667 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 0 0 0 1799 1927 2184
++55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47697 47615 47488 128 128 128
++642 642 899 33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++26085 33024 39578 128 128 128 11370 11370 11370 65535 65535 65535 65535 65535 65535
++65535 65535 65535 57470 57470 57470 46260 45809 45103 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 54741 54484 0 0 0 128 128 128 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7197 7197 7197
++13752 13752 13752 0 0 0 0 0 0 1799 1799 1799 33681 33681 33681
++64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64764 64764 64764 28239 28239 28239 26342 26738 26738
++65021 65021 65021 65535 65535 65535 31875 31875 31875 61680 61680 61680 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 47056 47056 47056 7197 7197 7197
++128 128 128 4480 4480 4480 22359 22625 23010 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 642 642 899
++257 257 257 128 128 128 0 0 0 385 385 334 19371 14059 6014
++59002 43055 18866 63736 46260 19789 63736 46260 19789 63486 46079 19455 13872 10127 4336
++0 0 0 642 642 899 33153 41891 50372 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42533 53970 64764 12444 14392 17344 128 128 128 31875 31875 31875
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 26342 26738 26738
++257 257 257 12444 14392 17344 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 0 0 0 257 257 257 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++11370 11370 11370 21292 21292 21292 9814 9814 9814 0 0 0 0 0 0
++53256 53199 52942 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 53256 53199 52942 1799 1927 2184
++47697 47615 47488 60933 60933 60933 28239 28239 28239 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 56026 55897 55897 31875 31875 31875 1028 1028 1028 0 0 0
++9814 9814 9814 19317 19131 18746 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 59002 43055 18866
++63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789 30042 21792 9253
++0 0 0 642 642 899 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 36810 46686 56154 642 642 899 514 514 514 59538 59538 59538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538
++1799 1799 1799 128 128 128 33153 41891 50372 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 2827 3598 4240 128 128 128 56283 56283 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 33681 33681 33681 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 0 0 0 20263 20263 20263 0 0 0 0 0 0
++51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 30583 30843 31357
++16762 16762 16762 49621 49621 49607 35502 34869 34383 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 58889 58889 58889
++35838 35838 35838 3857 3857 3857 128 128 128 0 0 0 18336 18336 18336
++11370 11370 11370 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 40410 29471 12985
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 37303 27193 11910
++514 514 514 7829 9894 11719 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 23901 28398 32639 0 0 0 18995 18995 18995 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++28239 28239 28239 257 257 257 12444 14392 17344 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 7829 9894 11719 0 0 0 48486 48538 48538 65535 65535 65535
++65535 65535 65535 65535 65535 65535 55126 54741 54484 20263 20263 20263 55126 54741 54484
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 51400 51400 51400 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18995 18995 18995 0 0 0 0 0 0
++48486 48538 48538 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126
++2313 2313 2313 11370 11370 11370 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60266 60266 60266 38978 38978 38978 6427 6427 6427
++0 0 0 0 0 0 5911 5911 5911 21838 21794 21532 3079 3079 3079
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 22224 16071 6824
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 34164 24785 10813
++0 0 0 20214 22616 25648 42533 53970 64764 42919 54484 65535 42919 54484 65535
++42919 54484 65535 6627 7270 8103 128 128 128 43356 43080 42463 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++58889 58889 58889 1413 1670 1799 257 257 257 40349 51271 61680 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 16576 19275 21848 0 0 0 40984 40984 40984 65278 65278 65278
++65535 65535 65535 65535 65535 65535 31875 31875 31875 0 0 0 30840 30197 30069
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64124 64124 64124 2313 2313 2313 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18336 18336 18336 514 514 514 0 0 0
++45746 46260 46746 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++33681 33681 33681 257 257 257 51400 51400 51400 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64507 64507 64507
++51400 51400 51400 35838 35838 35838 9814 9814 9814 0 0 0 257 257 257
++3079 3079 3079 0 0 0 17965 17965 17965 4480 4480 4480 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 3855 2930 1607
++62737 45569 19692 63736 46260 19789 63736 46260 19789 63736 46260 19789 19371 14059 6014
++0 0 0 26085 33024 39578 42919 54484 65535 42919 54484 65535 42533 53970 64764
++33153 41891 50372 0 0 0 4480 4480 4480 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 16762 16762 16762 514 514 514 26085 33024 39578 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 20214 22616 25648 0 0 0 33681 33681 33681 65535 65535 65535
++65535 65535 65535 65278 65278 65278 33681 33681 33681 128 128 128 26342 26738 26738
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 16136 16136 16136 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 10459 10459 10459 8455 8455 8455 0 0 0
++40984 40984 40984 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++56026 55897 55897 3079 3079 3079 26055 26184 25186 65021 65021 65021 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 58889 58889 58889 53256 53199 52942 44589 44631 44888
++38406 38021 37650 42507 42507 42507 48486 48538 48538 53256 53199 52942 58889 58889 58889
++57069 56684 56283 9814 9814 9814 0 0 0 21292 21292 21292 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++46996 34589 15727 63736 46260 19789 63736 46260 19789 63736 46260 19789 7209 5285 2184
++128 128 128 33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535
++16576 19275 21848 514 514 514 26342 26738 26738 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35502 34869 34383 0 0 0 16576 19275 21848 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 23007 25957 28667 642 642 899 31875 31875 31875 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35502 34869 34383 128 128 128 24991 24991 24991
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 31875 31875 31875 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 16762 16762 16762 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 1028 1028 1028 17553 17553 17553 128 128 128
++35838 35838 35838 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35502 34869 34383 128 128 128 46260 45809 45103 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 48486 48538 48538 1028 1028 1028 6427 6427 6427 21292 21292 21292
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30042 21792 9253 63736 46260 19789 63736 46260 19789 62486 45353 19401 128 128 128
++0 0 0 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++4615 5268 6322 0 0 0 52685 52685 52685 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52119 52119 51914 257 257 257 4615 5268 6322 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 20214 22616 25648 0 0 0 38406 38021 37650 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 0 0 0 14506 14506 14506
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 47056 47056 47056 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 16762 16762 16762 128 128 128
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 0 0 0
++30840 30197 30069 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 57470 57470 57470 3857 3857 3857 10459 10459 10459 59538 59538 59538
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 38978 38978 38978 1413 1670 1799 2701 2701 2701
++22881 22881 22881 3857 3857 3857 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10498 7619 3259 63736 46260 19789 63736 46260 19789 55635 40828 18345 128 128 128
++2827 3598 4240 42533 53970 64764 42919 54484 65535 42919 54484 65535 40349 51271 61680
++0 0 0 1799 1799 1799 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65021 65021 65021 4480 4480 4480 0 0 0 36810 46686 56154
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 16576 19275 21848 0 0 0 42507 42507 42507 65278 65278 65278
++65535 65535 65535 65535 65535 65535 58889 58889 58889 257 257 257 0 0 0
++57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 49304 49177 49053 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17553 17553 17553 0 0 0
++0 0 0 18517 18517 18517 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 128 128 128
++9814 9814 9814 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35838 35838 35838 385 385 334 31875 31875 31875
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 51400 51400 51400 14506 14506 14506
++128 128 128 20263 20263 20263 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 55635 40828 18345 63486 46079 19455 50159 36373 15650 0 0 0
++7829 9894 11719 42919 54484 65535 42919 54484 65535 42919 54484 65535 33153 41891 50372
++128 128 128 10459 10459 10459 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 21838 21794 21532 642 642 899 23901 28398 32639
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 12444 14392 17344 0 0 0 47056 47056 47056 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 14506 14506 14506 0 0 0
++31875 31875 31875 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 43356 43080 42463 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17553 17553 17553 0 0 0
++0 0 0 18711 18711 18711 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 0 0 0
++0 0 0 6810 6810 6810 26055 26184 25186 31875 31875 31875 42507 42507 42507
++64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 7197 7197 7197 1028 1028 1028
++49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538
++21838 21794 21532 257 257 257 20778 20778 20542 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 36240 26320 11215 63736 46260 19789 43194 31354 13386 0 0 0
++12444 14392 17344 42919 54484 65535 42919 54484 65535 42919 54484 65535 33667 36494 42587
++128 128 128 20263 20263 20263 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 38978 38978 38978 128 128 128 12444 14392 17344
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 7829 9894 11719 257 257 257 49304 49177 49053 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 38978 38978 38978 0 0 0
++1799 1799 1799 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 35838 35838 35838 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17553 17553 17553 257 257 257
++0 0 0 18711 18711 18711 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++38406 38021 37650 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 44589 44631 44888 0 0 0
++16136 16136 16136 61680 61680 61680 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49304 49177 49053 0 0 0 14506 14506 14506 4480 4480 4480 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17750 12880 5633 57142 41714 18588 28744 20827 9121 642 642 899
++16576 19275 21848 42919 54484 65535 42919 54484 65535 42533 53970 64764 23901 28398 32639
++257 257 257 28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 57470 57470 57470 0 0 0 2056 2313 2822
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 16576 19275 21848 0 0 0 38978 38978 38978 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021 13752 13752 13752
++128 128 128 14506 14506 14506 64124 64124 64124 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 30840 30197 30069 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10459 10459 10459 6810 6810 6810
++0 0 0 17553 17553 17553 1028 1285 1542 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 3079 3079 3079 21838 21794 21532
++18517 18517 18517 18711 18711 18711 8455 8455 8455 0 0 0 0 0 0
++642 642 899 55126 54741 54484 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764 28239 28239 28239
++128 128 128 35502 34869 34383 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55531 55531 55531 0 0 0 8455 8455 8455 9814 9814 9814 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 0 0 0
++20214 22616 25648 42533 53970 64764 42919 54484 65535 42919 54484 65535 16576 19275 21848
++642 642 899 38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 3079 3079 3079 0 0 0
++40349 51271 61680 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 23901 28398 32639 128 128 128 24991 24991 24991 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 54741 54484
++2701 2701 2701 257 257 257 18711 18711 18711 56026 55897 55897 65535 65535 65535
++65535 65535 65535 65535 65535 65535 22881 22881 22881 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 3079 3079 3079 15440 15440 15440
++0 0 0 7197 7197 7197 11370 11370 11370 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 11370 11370 11370 21292 21292 21292 0 0 0
++0 0 0 44589 44631 44888 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 58889 58889 58889
++10459 10459 10459 0 0 0 40833 41475 42019 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++38978 38978 38978 0 0 0 16136 16136 16136 3079 3079 3079 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++16576 19275 21848 42919 54484 65535 42919 54484 65535 42919 54484 65535 10999 12122 13073
++0 0 0 47697 47615 47488 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 6810 6810 6810 0 0 0
++36810 46686 56154 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 33153 41891 50372 128 128 128 1799 1799 1799 57470 57470 57470
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++49304 49177 49053 2701 2701 2701 0 0 0 642 642 899 24991 24991 24991
++56026 55897 55897 65535 65535 65535 24991 24991 24991 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17965 17965 17965
++0 0 0 0 0 0 18711 18711 18711 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18711 18711 18711 0 0 0
++0 0 0 38406 38021 37650 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++48486 48538 48538 2313 2313 2313 1772 1533 1155 47056 47056 47056 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708 38978 38978 38978
++2701 2701 2701 0 0 0 20778 20778 20542 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12444 14392 17344 42919 54484 65535 42919 54484 65535 42919 54484 65535 4615 5268 6322
++0 0 0 56283 56283 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 9814 9814 9814 0 0 0
++33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 16576 19275 21848 128 128 128 22881 22881 22881
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 46260 45809 45103 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17553 17553 17553
++0 0 0 0 0 0 18517 18517 18517 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 10459 10459 10459 8455 8455 8455
++0 0 0 8455 8455 8455 40833 41475 42019 49621 49621 49607 57470 57470 57470
++64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 44589 44631 44888 385 385 334 4480 4480 4480 43356 43080 42463
++64124 64124 64124 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 62065 62065 62065
++57470 57470 57470 52685 52685 52685 48486 48538 48538 44589 44631 44888 46260 45809 45103
++47697 47615 47488 50115 50774 49729 51400 51400 51400 55126 54741 54484 56026 55897 55897
++50115 50774 49729 42507 42507 42507 33681 33681 33681 12931 12931 12931 0 0 0
++128 128 128 16136 16136 16136 8455 8455 8455 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12444 14392 17344 42919 54484 65535 42919 54484 65535 42919 54484 65535 2056 2313 2822
++257 257 257 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 13752 13752 13752 0 0 0
++33153 41891 50372 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 36810 46686 56154 1028 1285 1542 385 385 334
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 52685 52685 52685 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17553 17553 17553
++0 0 0 0 0 0 18336 18336 18336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1028 1028 20263 20263 20263
++0 0 0 0 0 0 128 128 128 0 0 0 642 642 899
++11370 11370 11370 55126 54741 54484 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 39900 39413 38599 642 642 899 0 0 0
++24991 24991 24991 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 60933 60933 60933
++50115 50774 49729 38978 38978 38978 28239 28239 28239 13752 13752 13752 4480 4480 4480
++514 514 514 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++18995 18995 18995 11370 11370 11370 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7829 9894 11719 42919 54484 65535 42919 54484 65535 42919 54484 65535 2827 3598 4240
++257 257 257 56283 56283 56283 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 16762 16762 16762 0 0 0
++33667 36494 42587 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 23901 28398 32639 257 257 257
++1028 1285 1542 49304 49177 49053 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 44589 44631 44888 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 6810 6810 6810
++11370 11370 11370 128 128 128 8455 8455 8455 9814 9814 9814 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 16136 16136 16136
++18995 18995 18995 15440 15440 15440 3079 3079 3079 0 0 0 0 0 0
++128 128 128 26055 26184 25186 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 46260 45809 45103 4480 4480 4480
++0 0 0 4615 5268 6322 30840 30197 30069 38978 38978 38978 49304 49177 49053
++58889 58889 58889 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++58889 58889 58889 48486 48538 48538 38406 38021 37650 24991 24991 24991 4480 4480 4480
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 13752 13752 13752 20778 20778 20542
++3857 3857 3857 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7829 9894 11719 42919 54484 65535 42919 54484 65535 42919 54484 65535 4615 5268 6322
++0 0 0 55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 20263 20263 20263 642 642 899
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 20214 22616 25648
++0 0 0 3857 3857 3857 55126 54741 54484 65535 65535 65535 65535 65535 65535
++65535 65535 65535 35838 35838 35838 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++18336 18336 18336 0 0 0 0 0 0 18336 18336 18336 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2313 2313 2313 16136 16136 16136 28239 28239 28239 385 385 334
++0 0 0 22881 22881 22881 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685
++24991 24991 24991 257 257 257 0 0 0 0 0 0 128 128 128
++1799 1799 1799 17553 17553 17553 31875 31875 31875 35838 35838 35838 35838 35838 35838
++38406 38021 37650 38406 38021 37650 33681 33681 33681 26055 26184 25186 13752 13752 13752
++2313 2313 2313 128 128 128 0 0 0 0 0 0 128 128 128
++1799 1927 2184 16762 16762 16762 28239 28239 28239 28239 28239 28239 26342 26738 26738
++26342 26738 26738 26342 26738 26738 26055 26184 25186 21292 21292 21292 10459 10459 10459
++2313 2313 2313 0 0 0 0 0 0 0 0 0 0 0 0
++2313 2313 2313 18336 18336 18336 19317 19131 18746 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++4615 5268 6322 42919 54484 65535 42919 54484 65535 42919 54484 65535 6627 7270 8103
++128 128 128 52685 52685 52685 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 22881 22881 22881 0 0 0
++26085 33024 39578 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++12444 14392 17344 257 257 257 7197 7197 7197 59538 59538 59538 65535 65535 65535
++65535 65535 65535 28239 28239 28239 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++18995 18995 18995 0 0 0 0 0 0 17965 17965 17965 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 18995 18995 18995 3079 3079 3079
++0 0 0 38978 38978 38978 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65278 65278 65278 51400 51400 51400 33681 33681 33681 13752 13752 13752 257 257 257
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 128 128 128 0 0 0
++4480 4480 4480 21292 21292 21292 31875 31875 31875 40833 41475 42019 50115 50774 49729
++58889 58889 58889 65278 65278 65278 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64764 64764 64764
++60266 60266 60266 55531 55531 55531 50115 51271 50886 38406 38021 37650 128 128 128
++22881 22881 22881 1028 1028 1028 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++2827 3598 4240 42919 54484 65535 42919 54484 65535 42919 54484 65535 7598 8369 9034
++128 128 128 50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 26342 26738 26738 257 257 257
++23901 28398 32639 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 4615 5268 6322 0 0 0 20778 20778 20542 65535 65535 65535
++65278 65278 65278 12931 12931 12931 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 4480 4480 4480 0 0 0 17965 17965 17965 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 17553 17553 17553 8455 8455 8455 0 0 0
++16762 16762 16762 61680 61680 61680 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65278 65278 65278 64507 64507 64507 55126 54741 54484
++44589 44631 44888 40984 40984 40984 38406 38021 37650 31875 31875 31875 30840 30197 30069
++24991 24991 24991 30840 30197 30069 38978 38978 38978 45746 46260 46746 55126 54741 54484
++62065 62065 62065 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 54741 54484 0 0 0
++18336 18336 18336 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 42919 54484 65535 42919 54484 65535 42919 54484 65535 7829 9894 11719
++257 257 257 48486 48538 48538 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 24991 24991 24991 0 0 0
++26085 33024 39578 42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 12444 14392 17344 642 642 899 0 0 0 44589 44631 44888
++55126 55126 55126 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 18995 18995 18995 0 0 0 9814 9814 9814 8455 8455 8455
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9814 9814 9814 10459 10459 10459 128 128 128 3079 3079 3079
++55126 54741 54484 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 61680 61680 61680 3857 3857 3857
++11370 11370 11370 4480 4480 4480 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 36810 46686 56154 42919 54484 65535 42919 54484 65535 10999 12122 13073
++0 0 0 47056 47056 47056 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 14506 14506 14506 642 642 899
++33667 36494 42587 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 10999 12122 13073 0 0 0 128 128 128 6427 6427 6427
++24991 24991 24991 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 20263 20263 20263 0 0 0 0 0 0 18995 18995 18995
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 6810 6810 6810 0 0 0 24991 24991 24991
++65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 18711 18711 18711
++3857 3857 3857 12931 12931 12931 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 33667 36494 42587 42919 54484 65535 42919 54484 65535 12444 14392 17344
++0 0 0 44589 44631 44888 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 5911 5911 5911 0 0 0
++36810 46686 56154 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 6627 7270 8103 128 128 128 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 10459 10459 10459 8455 8455 8455 0 0 0 17553 17553 17553
++1799 1927 2184 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 8455 8455 8455 9814 9814 9814 128 128 128 30583 30843 31357
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 24991 24991 24991
++3857 3857 3857 12931 12931 12931 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 23901 28398 32639 42919 54484 65535 42533 53970 64764 20214 22616 25648
++0 0 0 35502 34869 34383 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61309 61309 61309 0 0 0 642 642 899
++42533 53970 64764 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42533 53970 64764 642 642 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 19317 19131 18746 128 128 128 1028 1028 1028
++18711 18711 18711 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5911 5911 5911 12931 12931 12931 0 0 0 16762 16762 16762
++64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 11370 11370 11370
++9814 9814 9814 7197 7197 7197 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12444 14392 17344 42919 54484 65535 42919 54484 65535 26085 33024 39578
++0 0 0 22881 22881 22881 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 51400 51400 51400 0 0 0 7598 8369 9034
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++33153 41891 50372 1028 1028 1028 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 13752 13752 13752 5911 5911 5911 128 128 128
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 642 642 899 18517 18517 18517 0 0 0 128 128 128
++38978 38978 38978 65021 65021 65021 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 59538 59538 59538 1028 1028 1028
++15440 15440 15440 2313 2313 2313 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 4615 5268 6322 42919 54484 65535 42533 53970 64764 33153 41891 50372
++0 0 0 12931 12931 12931 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 40984 40984 40984 514 514 514 12444 14392 17344
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764
++23901 28398 32639 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 19317 19131 18746 128 128 128
++6810 6810 6810 13752 13752 13752 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18995 18995 18995 0 0 0 0 0 0
++128 128 128 31875 31875 31875 56283 56283 56283 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 52685 52685 52685 0 0 0
++18995 18995 18995 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 36810 46686 56154 42919 54484 65535 40349 51271 61680
++0 0 0 1799 1799 1799 64764 64764 64764 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 31875 31875 31875 0 0 0 20214 22616 25648
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++7829 9894 11719 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 16136 16136 16136 3857 3857 3857
++0 0 0 21292 21292 21292 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 22359 22625 23010 0 0 0
++0 0 0 0 0 0 2313 2313 2313 28239 28239 28239 38406 38021 37650
++47056 47056 47056 57470 57470 57470 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 42507 42507 42507 0 0 0
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 642 642 899 33667 36494 42587 42919 54484 65535 42533 53970 64764
++4615 5268 6322 0 0 0 56026 55897 55897 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 21838 21794 21532 0 0 0 26085 33024 39578
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 33153 41891 50372
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 19317 19131 18746
++128 128 128 15440 15440 15440 5911 5911 5911 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7197 7197 7197 18711 18711 18711
++18336 18336 18336 3857 3857 3857 128 128 128 0 0 0 128 128 128
++0 0 0 1028 1028 1028 17965 17965 17965 47697 47615 47488 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 60652 60652 60652 21838 21794 21532 257 257 257
++20263 20263 20263 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20214 22616 25648 42533 53970 64764 42919 54484 65535
++12444 14392 17344 0 0 0 44589 44631 44888 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64764 64764 64764 6427 6427 6427 0 0 0 33153 41891 50372
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 7829 9894 11719
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 17965 17965 17965
++1799 1927 2184 0 0 0 21838 21794 21532 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++514 514 514 13752 13752 13752 20778 20778 20542 18995 18995 18995 0 0 0
++0 0 0 0 0 0 0 0 0 642 642 899 38978 38978 38978
++64507 64507 64507 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63607 63607 63607 58889 58889 58889 55126 55126 55126 50115 51271 50886
++47056 47056 47056 42507 42507 42507 38406 38021 37650 33681 33681 33681 30840 30197 30069
++24991 24991 24991 16762 16762 16762 20263 20263 20263 26342 26738 26738 30583 30843 31357
++30840 30197 30069 28239 28239 28239 13752 13752 13752 0 0 0 16762 16762 16762
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 1413 1670 1799 40349 51271 61680 42919 54484 65535
++20214 22616 25648 0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47056 47056 47056 128 128 128 6627 7270 8103 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 26085 33024 39578 385 385 334
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1028 1028 1028
++20263 20263 20263 0 0 0 15440 15440 15440 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 18995 18995 18995 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40984 40984 40984 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124
++57470 57470 57470 49621 49621 49607 40833 41475 42019 33681 33681 33681 24991 24991 24991
++16136 16136 16136 7197 7197 7197 1799 1927 2184 0 0 0 128 128 128
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1028 1028 1028 13752 13752 13752 14506 14506 14506
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 23901 28398 32639 42533 53970 64764
++26085 33024 39578 642 642 899 18711 18711 18711 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 21838 21794 21532 128 128 128 23901 28398 32639 42533 53970 64764
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 33153 41891 50372 1413 1670 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10459 10459 10459 11370 11370 11370 128 128 128 20778 20778 20542 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18517 18517 18517 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1799 1799 1799 50115 51271 50886 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++56283 56283 56283 44589 44631 44888 33681 33681 33681 26055 26184 25186 9814 9814 9814
++514 514 514 0 0 0 128 128 128 0 0 0 128 128 128
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++7197 7197 7197 20778 20778 20542 19317 19131 18746 18517 18517 18517 18517 18517 18517
++18517 18517 18517 18336 18336 18336 16762 16762 16762 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 642 642 899 2056 2313 2822 40349 51271 61680
++36810 46686 56154 128 128 128 1799 1799 1799 62708 62708 62708 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++61309 61309 61309 2313 2313 2313 257 257 257 36810 46686 56154 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 36810 46686 56154 4480 4480 4480 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 19317 19131 18746 2313 2313 2313 4480 4480 4480 16136 16136 16136
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10459 10459 10459 20778 20778 20542
++12931 12931 12931 4480 4480 4480 1028 1028 1028 0 0 0 0 0 0
++0 0 0 22881 22881 22881 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 38406 38021 37650 16136 16136 16136
++642 642 899 0 0 0 257 257 257 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18711 18711 18711 20263 20263 20263
++11370 11370 11370 1028 1285 1542 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7209 5285 2184 10498 7619 3259 9123 6640 2832 10498 7619 3259
++9123 6640 2832 10498 7619 3259 8095 5986 2531 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 10999 12122 13073
++42919 54484 65535 7829 9894 11719 514 514 514 43356 43080 42463 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++38978 38978 38978 0 0 0 12444 14392 17344 42533 53970 64764 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 7829 9894 11719 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 642 642 899 21292 21292 21292 128 128 128 15440 15440 15440
++5911 5911 5911 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5911 5911 5911 13752 13752 13752 18336 18336 18336 20263 20263 20263 642 642 899
++0 0 0 0 0 0 57470 57470 57470 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++59538 59538 59538 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 63222 63222 63222 47056 47056 47056 38406 38021 37650 30583 30843 31357
++21838 21794 21532 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18336 18336 18336
++24991 24991 24991 16762 16762 16762 3079 3079 3079 0 0 0 0 0 0
++0 0 0 257 257 257 8455 8455 8455 11370 11370 11370 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3038 2204 899
++19371 14059 6014 27882 20284 8738 30933 22555 9803 34164 24785 10813 27882 20284 8738
++22224 16071 6824 15792 11440 4871 1413 1028 514 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 875 620 271 15792 11440 4871 15792 11440 4871 15792 11440 4871
++15792 11440 4871 3038 2204 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 9123 6640 2832 15792 11440 4871 15792 11440 4871 15792 11440 4871
++875 620 271 0 0 0 0 0 0 3038 2204 899 15792 11440 4871
++15792 11440 4871 15792 11440 4871 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12071 8729 3764 15792 11440 4871
++15792 11440 4871 15792 11440 4871 3038 2204 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++10498 7619 3259 62465 45547 19595 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 28744 20827 9121 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 642 642 899
++23901 28398 32639 23901 28398 32639 257 257 257 22881 22881 22881 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++14506 14506 14506 0 0 0 26085 33024 39578 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 42533 53970 64764 42533 53970 64764
++12444 14392 17344 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8455 8455 8455 13752 13752 13752 0 0 0
++20778 20778 20542 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4480 4480 4480 16136 16136 16136
++0 0 0 0 0 0 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 56026 55897 55897
++33681 33681 33681 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 65535 65535 65535
++65278 65278 65278 47697 47615 47488 14506 14506 14506 0 0 0 0 0 0
++0 0 0 1799 1927 2184 28239 28239 28239 49304 49177 49053 64507 64507 64507
++65535 65535 65535 65535 65535 65535 60652 60652 60652 49621 49621 49607 5911 5911 5911
++0 0 0 1028 1028 1028 18995 18995 18995 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 13872 10127 4336 48838 36002 16378 62486 45353 19401
++61451 44536 19168 60487 44116 19189 62486 45353 19401 63236 45897 19634 61451 44536 19168
++60487 44116 19189 61451 44536 19168 60487 44116 19189 37303 27193 11910 9123 6640 2832
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 61451 44536 19168 60487 44116 19189
++61861 44933 19292 40410 29471 12985 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 62486 45353 19401 60487 44116 19189 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 63486 46079 19711
++60487 44116 19189 61861 44933 19292 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 48838 36002 16378 61861 44933 19292
++60487 44116 19189 63112 45588 19556 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 875 620 271
++51340 37280 15909 63093 45874 19660 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46335 19711 50159 36373 15650 1264 929 361 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8095 5986 2531 30933 22555 9803 36240 26320 11215 0 0 0
++642 642 899 26085 33024 39578 0 0 0 3857 3857 3857 64124 64124 64124
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 56026 55897 55897
++0 0 0 2056 2313 2822 40349 51271 61680 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 42919 54484 65535 36810 46686 56154 7829 9894 11719
++385 385 334 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 17965 17965 17965 4480 4480 4480
++4480 4480 4480 16136 16136 16136 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 15440 15440 15440 7197 7197 7197
++0 0 0 9814 9814 9814 63222 63222 63222 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 15440 15440 15440
++24991 24991 24991 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 62065 62065 62065 47056 47056 47056 33681 33681 33681
++40984 40984 40984 57470 57470 57470 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 60652 60652 60652 1799 1799 1799
++0 0 0 18995 18995 18995 1028 1028 1028 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++2402 1799 684 43194 31354 13386 62340 45076 19410 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 61861 44933 19292 62340 45076 19410
++22224 16071 6824 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 61861 44933 19292 15792 11440 4871 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63736 46260 19789 63736 46260 19789 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 30042 21792 9253
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62486 45353 19401 10498 7619 3259 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 7209 5285 2184
++37303 27193 11910 62486 45353 19401 63864 46774 20174 63486 46079 19711 27882 20284 8738
++0 0 0 1028 1285 1542 4480 4480 4480 128 128 128 47697 47615 47488
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021 24991 24991 24991
++257 257 257 16576 19275 21848 42919 54484 65535 42919 54484 65535 42919 54484 65535
++42919 54484 65535 42919 54484 65535 26085 33024 39578 2056 2313 2822 257 257 257
++7209 5285 2184 40410 29471 12985 25195 18262 7789 1413 1028 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 22359 22625 23010
++0 0 0 15440 15440 15440 5911 5911 5911 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 4480 4480 4480 17553 17553 17553 0 0 0
++0 0 0 31875 31875 31875 65278 65278 65278 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64764 64764 64764 48486 48538 48538 16762 16762 16762 0 0 0
++24991 24991 24991 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 55126 55126 55126 128 128 128
++0 0 0 17965 17965 17965 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3038 2204 899
++53070 38550 16467 61451 44536 19168 63736 46260 19789 63736 46260 19789 63112 45588 19556
++61451 44536 19168 63486 46335 19711 61451 44536 19168 59002 43055 18866 63736 46260 19789
++63093 45874 19660 61861 44933 19292 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62486 45353 19401 25195 18262 7789 128 128 128 0 0 0 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 55635 40828 18345 1264 929 361 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10498 7619 3259 62486 45353 19401
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++30933 22555 9803 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3855 2930 1607 36240 26320 11215 61861 44933 19292
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 62486 45353 19401
++23177 16932 7265 0 0 0 257 257 257 0 0 0 26342 26738 26738
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 49621 49621 49607 0 0 0
++1413 1670 1799 36810 46686 56154 42919 54484 65535 42919 54484 65535 42919 54484 65535
++40349 51271 61680 16576 19275 21848 128 128 128 0 0 0 20895 15087 6460
++60487 44116 19189 64250 47031 20303 64250 47031 20303 57142 41714 18588 23177 16932 7265
++385 385 334 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 5911 5911 5911
++18336 18336 18336 128 128 128 21838 21794 21532 514 514 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1799 1799 1799 21838 21794 21532 0 0 0 0 0 0
++0 0 0 47056 47056 47056 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52685 52685 52685 22881 22881 22881 0 0 0 0 0 0 0 0 0
++28239 28239 28239 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 57470 57470 57470 128 128 128
++128 128 128 18995 18995 18995 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 43194 31354 13386
++61861 44933 19292 63736 46260 19789 63736 46260 19789 61451 44536 19168 55635 40828 18345
++19371 14059 6014 3038 2204 899 0 0 0 0 0 0 1264 929 361
++10498 7619 3259 34164 24785 10813 61451 44536 19168 62986 45716 19556 63736 46260 19789
++63736 46260 19789 62340 45076 19410 7209 5285 2184 0 0 0 0 0 0
++128 128 128 3038 2204 899 63736 46260 19789 63736 46260 19789 62486 45353 19401
++62465 45547 19595 63486 46079 19455 61861 44933 19292 30933 22555 9803 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63486 46079 19711 63864 46774 20174 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 51340 37280 15909 62986 45716 19556
++63736 46260 19789 63736 46260 19789 63486 46079 19711 63359 45859 19672 51340 37280 15909
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 15792 11440 4871 55635 40828 18345 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63359 45859 19672 27882 20284 8738 0 0 0 0 0 0 4480 4480 4480
++44589 44631 44888 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 11370 11370 11370 0 0 0
++23901 28398 32639 42919 54484 65535 42533 53970 64764 40349 51271 61680 23901 28398 32639
++4615 5268 6322 128 128 128 1413 1028 514 40410 29471 12985 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 63864 46774 20174
++53070 38550 16467 17750 12880 5633 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 16136 16136 16136 2313 2313 2313 22881 22881 22881 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21292 21292 21292 385 385 334 0 0 0 0 0 0
++10459 10459 10459 62065 62065 62065 65535 65535 65535 65535 65535 65535 49621 49621 49607
++2701 2701 2701 0 0 0 0 0 0 0 0 0 0 0 0
++30840 30197 30069 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 62708 62708 62708 10459 10459 10459
++128 128 128 22359 22625 23010 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 19371 14059 6014 61861 44933 19292
++63736 46260 19789 63736 46260 19789 62340 45076 19410 40410 29471 12985 2402 1799 684
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8373 6077 2600 57142 41714 18588 63486 46079 19455
++63736 46260 19789 62986 45716 19556 45225 33169 15226 128 128 128 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 61861 44933 19292
++63486 46335 19711 63736 46260 19789 63736 46260 19789 62737 45569 19692 9123 6640 2832
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30042 21792 9253 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556 12071 8729 3764
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5943 4354 1886 30933 22555 9803 53070 38550 16467 62486 45353 19401
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 30933 22555 9803 128 128 128 0 0 0
++0 0 0 21838 21794 21532 51400 51400 51400 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 24991 24991 24991 128 128 128 6627 7270 8103
++42533 53970 64764 36810 46686 56154 16576 19275 21848 2056 2313 2822 0 0 0
++0 0 0 12071 8729 3764 54363 39457 16879 63864 46774 20174 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 63864 46774 20174 43194 31354 13386 3038 2204 899 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 10459 10459 10459 15440 15440 15440 4480 4480 4480 20263 20263 20263
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++8455 8455 8455 11370 11370 11370 0 0 0 0 0 0 0 0 0
++38406 38021 37650 65535 65535 65535 65535 65535 65535 65278 65278 65278 28239 28239 28239
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++26342 26738 26738 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++64124 64124 64124 60266 60266 60266 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65278 65278 65278 46260 45809 45103
++257 257 257 7197 7197 7197 12931 12931 12931 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 50159 36373 15650 63486 46079 19711
++63736 46260 19789 63112 45588 19556 50159 36373 15650 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 15792 11440 4871 63236 45897 19634
++62986 45716 19556 50159 36373 15650 28744 20827 9121 1264 929 361 0 0 0
++128 128 128 3038 2204 899 63736 46260 19789 63736 46260 19789 63112 45588 19556
++59002 43055 18866 61451 44536 19168 63736 46260 19789 62486 45353 19401 50159 36373 15650
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63486 46079 19711 63864 46774 20174 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 10498 7619 3259 62486 45353 19401 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 63864 46774 20174 30933 22555 9803 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 128 128 128 0 0 0 0 0 0
++3038 2204 899 34164 24785 10813 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 50159 36373 15650 9123 6640 2832
++0 0 0 0 0 0 0 0 0 12931 12931 12931 31875 31875 31875
++47697 47615 47488 61309 61309 61309 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 35502 34869 34383 0 0 0 2056 2313 2822 20214 22616 25648
++12444 14392 17344 0 0 0 514 514 514 0 0 0 17750 12880 5633
++45225 33169 15226 63864 46774 20174 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 63864 46774 20174 40410 29471 12985 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 11370 11370 11370 13752 13752 13752 8455 8455 8455
++16136 16136 16136 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++18336 18336 18336 0 0 0 0 0 0 0 0 0 0 0 0
++51400 51400 51400 65535 65535 65535 65535 65535 65535 65535 65535 65535 22881 22881 22881
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++385 385 334 35502 34869 34383 49621 49621 49607 47697 47615 47488 38406 38021 37650
++31875 31875 31875 60933 60933 60933 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65021 65021 65021
++28239 28239 28239 257 257 257 19317 19131 18746 128 128 128 0 0 0
++0 0 0 0 0 0 5943 4354 1886 63359 45859 19672 63736 46260 19789
++63736 46260 19789 62737 45569 19692 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 13872 10127 4336
++3038 2204 899 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++37303 27193 11910 54363 39457 16879 63112 45588 19556 63736 46260 19789 61861 44933 19292
++23177 16932 7265 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++875 620 271 51340 37280 15909 62737 45569 19692 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 53070 38550 16467 1413 1028 514 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 19371 14059 6014 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++41427 30069 13197 8095 5986 2531 128 128 128 0 0 0 257 257 257
++0 0 0 257 257 257 10459 10459 10459 24991 24991 24991 39900 39413 38599
++55126 54741 54484 61309 61309 61309 64507 64507 64507 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 57470 57470 57470 47697 47615 47488 38406 38021 37650 28239 28239 28239
++17965 17965 17965 128 128 128 0 0 0 0 0 0 257 257 257
++128 128 128 1413 1028 514 25195 18262 7789 53070 38550 16467 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 40410 29471 12985 20895 15087 6460
++19371 14059 6014 13872 10127 4336 7209 5285 2184 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12931 12931 12931 12931 12931 12931
++11370 11370 11370 12931 12931 12931 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9814 9814 9814 9814 9814 9814 0 0 0 0 0 0 0 0 0
++42507 42507 42507 65535 65535 65535 65535 65535 65535 65535 65535 65535 17965 17965 17965
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 257 257 257
++49621 49621 49607 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++55126 54741 54484 1799 1927 2184 9814 9814 9814 10459 10459 10459 0 0 0
++0 0 0 0 0 0 22224 16071 6824 60487 44116 19189 63736 46260 19789
++63736 46260 19789 51340 37280 15909 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 63736 46260 19789 63736 46260 19789 63236 45897 19634
++40410 29471 12985 12071 8729 3764 62486 45353 19401 63736 46260 19789 63736 46260 19789
++61451 44536 19168 4874 3558 1459 0 0 0 0 0 0 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63486 46079 19711 63864 46774 20174 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30042 21792 9253 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 43194 31354 13386 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 59002 43055 18866 30042 21792 9253 12071 8729 3764
++2402 1799 684 0 0 0 128 128 128 128 128 128 128 128 128
++0 0 0 0 0 0 0 0 0 1799 1927 2184 4480 4480 4480
++8455 8455 8455 11370 11370 11370 14506 14506 14506 17553 17553 17553 11370 11370 11370
++2313 2313 2313 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 4874 3558 1459 23177 16932 7265
++37303 27193 11910 59002 43055 18866 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 63864 46774 20174 875 620 271 128 128 128
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 13752 13752 13752
++11370 11370 11370 15440 15440 15440 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 20263 20263 20263 514 514 514 0 0 0 0 0 0
++5911 5911 5911 55126 54741 54484 65278 65278 65278 65535 65535 65535 22881 22881 22881
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++64764 64764 64764 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 64124 64124 64124 64124 64124 64124 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 30840 30197 30069 0 0 0 18995 18995 18995 0 0 0
++0 0 0 0 0 0 34164 24785 10813 63359 45859 19672 63736 46260 19789
++63736 46260 19789 37303 27193 11910 385 385 334 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 36240 26320 11215 61861 44933 19292 63736 46260 19789
++61861 44933 19292 43194 31354 13386 0 0 0 0 0 0 0 0 0
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 10498 7619 3259
++62340 45076 19410 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46335 19711 34164 24785 10813 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 36240 26320 11215 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 13872 10127 4336 63483 46207 20056
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 20895 15087 6460 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 9814 9814 9814 18995 18995 18995 5911 5911 5911 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2313 2313 2313 18995 18995 18995 0 0 0 0 0 0
++0 0 0 9814 9814 9814 49621 49621 49607 65535 65535 65535 31875 31875 31875
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 38978 38978 38978
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 61309 61309 61309 56283 56283 56283 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 38978 38978 38978 0 0 0 18711 18711 18711 0 0 0
++0 0 0 0 0 0 41427 30069 13197 63736 46260 19789 63736 46260 19789
++61451 44536 19168 30042 21792 9253 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 128 128 128 2402 1799 684 59002 43055 18866 63736 46260 19789
++63736 46260 19789 61861 44933 19292 17750 12880 5633 0 0 0 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63486 46079 19711 63864 46774 20174 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 875 620 271 50159 36373 15650
++62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556
++54363 39457 16879 1413 1028 514 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++20895 15087 6460 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++37303 27193 11910 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 43194 31354 13386
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 64250 47031 20303 51340 37280 15909 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 15440 15440 15440 9814 9814 9814 21838 21794 21532 3857 3857 3857
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 15440 15440 15440 0 0 0
++0 0 0 0 0 0 2701 2701 2701 42507 42507 42507 40984 40984 40984
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 38978 38978 38978
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 58889 58889 58889 45746 46260 46746 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 40984 40984 40984 0 0 0 18995 18995 18995 0 0 0
++0 0 0 0 0 0 45225 33169 15226 63486 46079 19455 63736 46260 19789
++60487 44116 19189 22224 16071 6824 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 36240 26320 11215 53070 38550 16467
++53070 38550 16467 53070 38550 16467 53070 38550 16467 53070 38550 16467 53070 38550 16467
++53070 38550 16467 53070 38550 16467 51340 37280 15909 15792 11440 4871 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 19371 14059 6014 61861 44933 19292
++63736 46260 19789 63736 46260 19789 57142 41714 18588 2402 1799 684 0 0 0
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 30042 21792 9253 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++13872 10127 4336 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++10498 7619 3259 34164 24785 10813 34164 24785 10813 30042 21792 9253 17750 12880 5633
++7209 5285 2184 2402 1799 684 45225 33169 15226 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 36240 26320 11215
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 8095 5986 2531
++61985 45298 20071 64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 50159 36373 15650 34164 24785 10813 53070 38550 16467
++64250 47031 20303 64250 47031 20303 64250 47031 20303 64250 47031 20303 13872 10127 4336
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 12931 12931 12931 14506 14506 14506 24991 24991 24991
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 9814 9814 9814 18995 18995 18995
++0 0 0 0 0 0 0 0 0 0 0 0 15440 15440 15440
++0 0 0 0 0 0 2701 2701 2701 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 35838 35838 35838
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 51400 51400 51400 35838 35838 35838 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65278 65278 65278 33681 33681 33681 0 0 0 18517 18517 18517 0 0 0
++0 0 0 0 0 0 43194 31354 13386 63736 46260 19789 63736 46260 19789
++60487 44116 19189 27882 20284 8738 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 46996 34589 15727 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 61861 44933 19292 19371 14059 6014 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 0 0 0 0 0 0 0 0 0 45225 33169 15226
++62340 45076 19410 63736 46260 19789 61451 44536 19168 34164 24785 10813 0 0 0
++875 620 271 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 13872 10127 4336 61861 44933 19292
++63486 46079 19711 63864 46774 20174 51340 37280 15909 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63736 46260 19789
++63486 46079 19711 61861 44933 19292 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 10498 7619 3259 61861 44933 19292 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63093 45874 19660 36240 26320 11215
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++0 0 0 0 0 0 40410 29471 12985 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 64250 47031 20303 30933 22555 9803 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++19371 14059 6014 63483 46207 20056 64250 47031 20303 64250 47031 20303 64250 47031 20303
++64250 47031 20303 64250 47031 20303 12071 8729 3764 0 0 0 385 385 334
++15792 11440 4871 43194 31354 13386 59002 43055 18866 63864 46774 20174 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 8455 8455 8455 18995 18995 18995
++24991 24991 24991 2313 2313 2313 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3857 3857 3857
++21838 21794 21532 1799 1799 1799 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 11370 11370 11370 31875 31875 31875 514 514 514
++128 128 128 0 0 0 0 0 0 0 0 0 14506 14506 14506
++63607 63607 63607 65278 65278 65278 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 42507 42507 42507 30840 30197 30069 65021 65021 65021
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++52685 52685 52685 2313 2313 2313 1028 1028 1028 18517 18517 18517 0 0 0
++0 0 0 0 0 0 37303 27193 11910 63486 46079 19711 63736 46260 19789
++63359 45859 19672 37303 27193 11910 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 46996 34589 15727 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 60487 44116 19189 19371 14059 6014 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 0 0 0 5943 4354 1886
++61451 44536 19168 63736 46260 19789 63736 46260 19789 62465 45547 19595 12071 8729 3764
++0 0 0 37303 27193 11910 64250 47031 20303 63486 46079 19455 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63736 46260 19789 51340 37280 15909 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 50159 36373 15650 63486 46079 19711
++63736 46260 19789 61451 44536 19168 13872 10127 4336 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 385 385 334 50159 36373 15650 62986 45716 19556 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 55635 40828 18345 1413 1028 514
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 57142 41714 18588 63736 46260 19789 63736 46260 19789
++63736 46260 19789 54363 39457 16879 15792 11440 4871 875 620 271 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 22224 16071 6824 63864 46774 20174 64250 47031 20303 64250 47031 20303
++64250 47031 20303 63093 45874 19660 1413 1028 514 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 2402 1799 684 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3857 3857 3857
++22881 22881 22881 26342 26738 26738 1799 1927 2184 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1028 1028 1028 20263 20263 20263 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 22881 22881 22881 22881 22881 22881
++3079 3079 3079 0 0 0 0 0 0 0 0 0 0 0 0
++47056 47056 47056 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 64764 64764 64764 22881 22881 22881 35838 35838 35838 65535 65535 65535
++65535 65535 65535 61680 61680 61680 65535 65535 65535 65535 65535 65535 52119 52119 51914
++9814 9814 9814 0 0 0 17553 17553 17553 2701 2701 2701 0 0 0
++0 0 0 128 128 128 25195 18262 7789 61451 44536 19168 63736 46260 19789
++63236 45897 19634 50159 36373 15650 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 30933 22555 9803 46996 34589 15727
++46996 34589 15727 46996 34589 15727 46996 34589 15727 46996 34589 15727 54363 39457 16879
++61861 44933 19292 63736 46260 19789 60487 44116 19189 19371 14059 6014 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 0 0 0 0 0 0 0 0 0 875 620 271
++25195 18262 7789 61451 44536 19168 63736 46260 19789 63093 45874 19660 51340 37280 15909
++1264 929 361 37303 27193 11910 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 257 257 257 12071 8729 3764 62340 45076 19410
++63736 46260 19789 63486 46079 19711 54363 39457 16879 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 53070 38550 16467 63736 46260 19789
++63736 46260 19789 61451 44536 19168 12071 8729 3764 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 28744 20827 9121 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19455 15792 11440 4871 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 15792 11440 4871 63736 46260 19789 63736 46260 19789 61861 44933 19292
++34164 24785 10813 2402 1799 684 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 25195 18262 7789 64250 47031 20303 64250 47031 20303
++64250 47031 20303 53070 38550 16467 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++514 514 514 21838 21794 21532 30840 30197 30069 1413 1670 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 12931 12931 12931 18711 18711 18711 128 128 128
++0 0 0 0 0 0 0 0 0 9814 9814 9814 11370 11370 11370
++20778 20778 20542 6427 6427 6427 0 0 0 0 0 0 0 0 0
++11370 11370 11370 55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 47056 47056 47056 128 128 128 44589 44631 44888 65535 65535 65535
++57470 57470 57470 38406 38021 37650 65021 65021 65021 47697 47615 47488 7197 7197 7197
++128 128 128 7197 7197 7197 14506 14506 14506 0 0 0 0 0 0
++0 0 0 0 0 0 10498 7619 3259 62486 45353 19401 63736 46260 19789
++63736 46260 19789 62465 45547 19595 7209 5285 2184 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 25195 18262 7789
++61861 44933 19292 63486 46079 19711 61451 44536 19168 19371 14059 6014 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++875 620 271 51340 37280 15909 63359 45859 19672 63486 46079 19711 61861 44933 19292
++25195 18262 7789 37303 27193 11910 63864 46774 20174 63486 46079 19711 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 8095 5986 2531 63359 45859 19672
++63736 46260 19789 63736 46260 19789 61451 44536 19168 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 61861 44933 19292 63736 46260 19789
++63736 46260 19789 63486 46079 19711 7209 5285 2184 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++9123 6640 2832 62486 45353 19401 63486 46335 19711 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 36240 26320 11215 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 20895 15087 6460 61451 44536 19168 43194 31354 13386 12071 8729 3764
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 22224 16071 6824 57142 41714 18588
++63864 46774 20174 30933 22555 9803 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 17553 17553 17553 35838 35838 35838 1028 1285 1542
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 3079 3079 3079 21292 21292 21292
++6810 6810 6810 0 0 0 0 0 0 128 128 128 18995 18995 18995
++0 0 0 21292 21292 21292 0 0 0 0 0 0 0 0 0
++257 257 257 11370 11370 11370 55126 55126 55126 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++51400 51400 51400 7197 7197 7197 1028 1285 1542 55126 54741 54484 65535 65535 65535
++28239 28239 28239 24991 24991 24991 42507 42507 42507 3079 3079 3079 128 128 128
++11370 11370 11370 16762 16762 16762 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 57142 41714 18588 63736 46260 19789
++63736 46260 19789 61861 44933 19292 40410 29471 12985 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 27882 20284 8738
++61451 44536 19168 63736 46260 19789 60487 44116 19189 19371 14059 6014 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12071 8729 3764 62486 45353 19401 63736 46260 19789 63736 46260 19789
++61451 44536 19168 43194 31354 13386 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 1413 1028 514 63112 45588 19556
++63736 46260 19789 63736 46260 19789 63736 46260 19789 5943 4354 1886 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 8373 6077 2600 63486 46079 19711 63736 46260 19789
++63736 46260 19789 62737 45569 19692 1413 1028 514 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 385 385 334
++50159 36373 15650 62986 45716 19556 63736 46260 19789 63736 46260 19789 63736 46260 19789
++62486 45353 19401 57142 41714 18588 3038 2204 899 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3038 2204 899 23177 16932 7265 25195 18262 7789 23177 16932 7265
++15792 11440 4871 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 3038 2204 899 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1413 1028 514
++27882 20284 8738 3038 2204 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 385 385 334 23177 16932 7265 25195 18262 7789
++23177 16932 7265 17750 12880 5633 0 0 0 128 128 128 5943 4354 1886
++23177 16932 7265 25195 18262 7789 23177 16932 7265 13872 10127 4336 0 0 0
++128 128 128 10498 7619 3259 23177 16932 7265 25195 18262 7789 23177 16932 7265
++8095 5986 2531 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12931 12931 12931 35838 35838 35838
++1772 1533 1155 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++15440 15440 15440 11370 11370 11370 257 257 257 0 0 0 13752 13752 13752
++5911 5911 5911 8455 8455 8455 12931 12931 12931 0 0 0 0 0 0
++0 0 0 128 128 128 8455 8455 8455 46260 45809 45103 65278 65278 65278
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 48486 48538 48538
++5911 5911 5911 0 0 0 24991 24991 24991 61680 61680 61680 33681 33681 33681
++257 257 257 4480 4480 4480 642 642 899 1028 1285 1542 20263 20263 20263
++8455 8455 8455 257 257 257 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 27882 20284 8738 61861 44933 19292
++63736 46260 19789 63736 46260 19789 62486 45353 19401 17750 12880 5633 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 30933 22555 9803
++61861 44933 19292 63486 46079 19711 61451 44536 19168 19371 14059 6014 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 34164 24785 10813 61861 44933 19292 63486 46079 19711
++62340 45076 19410 62986 45716 19556 63112 45588 19556 63736 46260 19789 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 0 0 0 50159 36373 15650
++63736 46260 19789 63736 46260 19789 61451 44536 19168 36240 26320 11215 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 43194 31354 13386 62340 45076 19410 63486 46335 19711
++63736 46260 19789 46996 34589 15727 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 28744 20827 9121
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 15792 11440 4871 128 128 128 0 0 0 0 0 0
++9123 6640 2832 15792 11440 4871 15792 11440 4871 15792 11440 4871 5943 4354 1886
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63736 46260 19789 57302 45835 26989 59969 46214 26008
++45225 33169 15226 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 57302 45835 26989
++59969 46214 26008 51150 38050 17516 0 0 0 0 0 0 17750 12880 5633
++61985 45298 20071 57302 45835 26989 61241 45992 22579 34164 24785 10813 0 0 0
++0 0 0 28744 20827 9121 61241 45992 22579 57302 45835 26989 61113 45548 20995
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 6810 6810 6810
++28239 28239 28239 642 642 899 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 16762 16762 16762 4480 4480 4480 0 0 0 0 0 0
++18995 18995 18995 128 128 128 20778 20778 20542 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 30840 30197 30069
++55126 55126 55126 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65278 65278 65278 56283 56283 56283 28239 28239 28239 514 514 514
++0 0 0 0 0 0 42507 42507 42507 17553 17553 17553 0 0 0
++0 0 0 0 0 0 9814 9814 9814 20263 20263 20263 1028 1028 1028
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 2402 1799 684 57142 41714 18588
++63236 45897 19634 63736 46260 19789 63736 46260 19789 61861 44933 19292 34164 24785 10813
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 7209 5285 2184 37303 27193 11910 62737 45569 19692
++63736 46260 19789 63736 46260 19789 61451 44536 19168 19371 14059 6014 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2402 1799 684 57142 41714 18588 63736 46260 19789
++63736 46260 19789 62340 45076 19410 61861 44933 19292 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 0 0 0 25195 18262 7789
++61451 44536 19168 63736 46260 19789 63736 46260 19789 61861 44933 19292 23177 16932 7265
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1028 514 30933 22555 9803 62340 45076 19410 63736 46260 19789 63736 46260 19789
++61861 44933 19292 19371 14059 6014 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 9123 6640 2832 61861 44933 19292
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++37303 27193 11910 128 128 128 0 0 0 0 0 0 0 0 0
++40410 29471 12985 61241 45992 22579 58276 44060 22272 61985 45298 20071 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42919 54484 65535 58279 45589 26504
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1799 1799 1799 2313 2313 2313 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 18995 18995 18995 128 128 128 0 0 0
++17553 17553 17553 0 0 0 4480 4480 4480 17553 17553 17553 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1670 1799 30840 30197 30069 53256 53199 52942 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535
++60266 60266 60266 35838 35838 35838 3857 3857 3857 0 0 0 128 128 128
++0 0 0 0 0 0 3079 3079 3079 128 128 128 0 0 0
++0 0 0 17965 17965 17965 11370 11370 11370 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 12071 8729 3764
++61861 44933 19292 63486 46079 19711 63736 46260 19789 63736 46260 19789 61451 44536 19168
++55635 40828 18345 34164 24785 10813 25195 18262 7789 20895 15087 6460 27882 20284 8738
++34164 24785 10813 51340 37280 15909 63359 45859 19672 62340 45076 19410 63736 46260 19789
++63736 46260 19789 61861 44933 19292 57142 41714 18588 7209 5285 2184 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 17750 12880 5633 61861 44933 19292
++63736 46260 19789 63736 46260 19789 62986 45716 19556 63736 46260 19789 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 0 0 0 385 385 334
++54363 39457 16879 62737 45569 19692 63736 46260 19789 63736 46260 19789 61451 44536 19168
++51340 37280 15909 34164 24785 10813 23177 16932 7265 25195 18262 7789 36240 26320 11215
++57142 41714 18588 61861 44933 19292 63736 46260 19789 63736 46260 19789 61861 44933 19292
++48838 36002 16378 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 54363 39457 16879 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 59002 43055 18866
++3855 2930 1607 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63736 46260 19789 58279 45589 26504 61241 45992 22579
++45225 33169 15226 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++62856 45897 20023 58279 45589 26504 61113 45548 20995 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 58279 45589 26504
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 9814 9814 9814 0 0 0 0 0 0
++17553 17553 17553 0 0 0 0 0 0 12931 12931 12931 13752 13752 13752
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 31875 31875 31875 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 65535 65535 65535 64124 64124 64124 44589 44631 44888
++10459 10459 10459 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 128 128 128
++17553 17553 17553 3857 3857 3857 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++15792 11440 4871 60487 44116 19189 62737 45569 19692 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 60487 44116 19189 61451 44536 19168 60487 44116 19189
++62486 45353 19401 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46335 19711
++62340 45076 19410 46996 34589 15727 4874 3558 1459 0 0 0 0 0 0
++128 128 128 3038 2204 899 63486 46079 19711 63864 46774 20174 63112 45588 19556
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 43194 31354 13386
++61861 44933 19292 63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711
++4874 3558 1459 0 0 0 0 0 0 0 0 0 0 0 0
++8095 5986 2531 59002 43055 18866 62340 45076 19410 63736 46260 19789 63736 46260 19789
++63736 46260 19789 61861 44933 19292 60487 44116 19189 61451 44536 19168 63112 45588 19556
++63736 46260 19789 63736 46260 19789 63486 46335 19711 62340 45076 19410 54363 39457 16879
++3855 2930 1607 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 25195 18262 7789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 2402 1799 684 17750 12880 5633 17750 12880 5633 17750 12880 5633
++12071 8729 3764 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 0 0 0 4874 3558 1459
++17750 12880 5633 17750 12880 5633 17750 12880 5633 10498 7619 3259 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42533 53970 64764 58279 45589 26504
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 15440 15440 15440 0 0 0 0 0 0 0 0 0
++18995 18995 18995 128 128 128 0 0 0 0 0 0 11370 11370 11370
++14506 14506 14506 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 31875 31875 31875 65535 65535 65535 65535 65535 65535
++65535 65535 65535 65535 65535 65535 52685 52685 52685 21838 21794 21532 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++18995 18995 18995 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 45225 33169 15226 62340 45076 19410 62340 45076 19410
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62340 45076 19410 62340 45076 19410 54363 39457 16879
++19371 14059 6014 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3038 2204 899 63736 46260 19789 63736 46260 19789 63736 46260 19789
++40410 29471 12985 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4874 3558 1459
++61451 44536 19168 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++4874 3558 1459 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5943 4354 1886 40410 29471 12985 62486 45353 19401 62465 45547 19595
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63486 46079 19711 63736 46260 19789
++63736 46260 19789 62340 45076 19410 63112 45588 19556 41427 30069 13197 3038 2204 899
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 5943 4354 1886 59002 43055 18866 63486 46079 19455 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63486 46079 19711 37303 27193 11910 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 58279 45589 26504
++20895 15087 6460 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 11370 11370 11370 20263 20263 20263
++3857 3857 3857 0 0 0 0 0 0 128 128 128 14506 14506 14506
++5911 5911 5911 0 0 0 0 0 0 0 0 0 385 385 334
++11370 11370 11370 15440 15440 15440 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535
++65535 65535 65535 56026 55897 55897 9814 9814 9814 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 4480 4480 4480 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 385 385 334 12071 8729 3764 34164 24785 10813
++53070 38550 16467 61861 44933 19292 63736 46260 19789 63736 46260 19789 63112 45588 19556
++60487 44116 19189 53070 38550 16467 34164 24785 10813 13872 10127 4336 514 514 514
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 2402 1799 684 54363 39457 16879 54363 39457 16879 54363 39457 16879
++30933 22555 9803 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++23177 16932 7265 54363 39457 16879 54363 39457 16879 54363 39457 16879 53070 38550 16467
++3038 2204 899 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 257 257 257 9123 6640 2832 40410 29471 12985
++51340 37280 15909 60487 44116 19189 63486 46079 19711 63736 46260 19789 57142 41714 18588
++50159 36373 15650 34164 24785 10813 10498 7619 3259 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++385 385 334 43194 31354 13386 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 62986 45716 19556 57142 41714 18588 3038 2204 899 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 3855 2930 1607 25195 18262 7789 25195 18262 7789 25195 18262 7789
++17750 12880 5633 0 0 0 0 0 0 10498 7619 3259 25195 18262 7789
++25195 18262 7789 25195 18262 7789 5943 4354 1886 0 0 0 13872 10127 4336
++34164 24785 10813 41427 30069 13197 41427 30069 13197 30933 22555 9803 19371 14059 6014
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++12071 8729 3764 25195 18262 7789 25195 18262 7789 25195 18262 7789 9123 6640 2832
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++7209 5285 2184 25195 18262 7789 25195 18262 7789 25195 18262 7789 12071 8729 3764
++7209 5285 2184 25195 18262 7789 25195 18262 7789 25195 18262 7789 25195 18262 7789
++2402 1799 684 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20895 15087 6460 25195 18262 7789 25195 18262 7789
++25195 18262 7789 13872 10127 4336 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 0 0 0 7209 5285 2184
++25195 18262 7789 25195 18262 7789 25195 18262 7789 13872 10127 4336 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42533 53970 64764 58279 45589 26504
++20895 15087 6460 2402 1799 684 22224 16071 6824 37303 27193 11910 42654 31649 16191
++36240 26320 11215 23177 16932 7265 9123 6640 2832 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 13872 10127 4336 25195 18262 7789
++25195 18262 7789 25195 18262 7789 2402 1799 684 12071 8729 3764 34164 24785 10813
++42654 31649 16191 37303 27193 11910 4874 3558 1459 0 0 0 0 0 0
++0 0 0 0 0 0 8095 5986 2531 23177 16932 7265 34164 24785 10813
++42654 31649 16191 40410 29471 12985 34164 24785 10813 13872 10127 4336 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 16762 16762 16762 8455 8455 8455 128 128 128
++0 0 0 0 0 0 0 0 0 17553 17553 17553 11370 11370 11370
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++1413 1670 1799 21838 21794 21532 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 33681 33681 33681 65535 65535 65535 65535 65535 65535
++62065 62065 62065 18995 18995 18995 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 21838 21794 21532 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 1413 1028 514 4874 3558 1459 385 385 334
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 257 257 257
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 128 128 128 128 128 128 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3038 2204 899 1413 1028 514 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++22224 16071 6824 63864 46774 20174 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 17750 12880 5633 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63736 46260 19789 56972 46962 30007 59969 46214 26008
++45225 33169 15226 0 0 0 0 0 0 20895 15087 6460 61113 45548 20995
++56972 46962 30007 61113 45548 20995 23177 16932 7265 48838 36002 16378 61113 45548 20995
++56278 47802 34950 50976 48701 42982 56411 51914 44332 54760 46836 33773 61241 45992 22579
++48838 36002 16378 8095 5986 2531 0 0 0 0 0 0 0 0 0
++30042 21792 9253 61241 45992 22579 56972 46962 30007 61113 45548 20995 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 62856 45897 20023 56972 46962 30007 61241 45992 22579 30933 22555 9803
++875 620 271 46996 34589 15727 62859 46189 20912 56972 46962 30007 61241 45992 22579
++34164 24785 10813 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 13872 10127 4336 61985 45298 20071 56972 46962 30007 59969 46214 26008
++61451 44536 19168 8095 5986 2531 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++61985 45298 20071 56972 46962 30007 61241 45992 22579 34164 24785 10813 128 128 128
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 58279 45589 26504
++34164 24785 10813 59002 43055 18866 58279 45589 26504 54209 48830 40477 50629 49986 46941
++54209 48830 40477 57302 45835 26989 62856 45897 20023 28744 20827 9121 257 257 257
++0 0 0 0 0 0 0 0 0 34164 24785 10813 61241 45992 22579
++56972 46962 30007 63483 46207 20056 30933 22555 9803 61985 45298 20071 56278 47802 34950
++50629 49986 46941 62856 45897 20023 12071 8729 3764 0 0 0 0 0 0
++1413 1028 514 30933 22555 9803 61985 45298 20071 57302 45835 26989 56278 47802 34950
++50629 49986 46941 54209 48830 40477 56278 47802 34950 61113 45548 20995 53705 39676 18339
++15792 11440 4871 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 1799 1799 1799 17553 17553 17553 128 128 128 0 0 0
++12931 12931 12931 18995 18995 18995 20778 20778 20542 4480 4480 4480 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++21292 21292 21292 1028 1028 1028 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 30840 30197 30069 65535 65535 65535 65535 65535 65535
++50115 50774 49729 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8455 8455 8455 15440 15440 15440 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 5943 4354 1886
++60487 44116 19189 63236 45897 19634 63736 46260 19789 63736 46260 19789 63486 46079 19711
++63736 46260 19789 37303 27193 11910 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 62856 45897 20023 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 17750 12880 5633 58279 45589 26504
++42919 54484 65535 57302 45835 26989 61451 44536 19168 56972 46962 30007 50115 50774 49729
++54209 48830 40477 54209 48830 40477 50629 49986 46941 44846 53841 61423 43818 54098 63479
++56278 47802 34950 46996 34589 15727 0 0 0 0 0 0 0 0 0
++30042 21792 9253 54760 46836 33773 42533 53970 64764 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 58279 45589 26504 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 7209 5285 2184 60373 44510 19999 50115 51271 50886 47031 52942 56540
++62856 45897 20023 12071 8729 3764 0 0 0 0 0 0 128 128 128
++875 620 271 55635 40828 18345 50976 48701 42982 44846 53841 61423 61113 45548 20995
++23177 16932 7265 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 0 0 0 17750 12880 5633
++58276 44060 22272 42533 53970 64764 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42533 53970 64764 58279 45589 26504
++64250 47031 20303 50976 48701 42982 50115 50774 49729 54209 48830 40477 54209 48830 40477
++50115 50774 49729 43818 54098 63479 47031 52942 56540 61241 45992 22579 37303 27193 11910
++0 0 0 0 0 0 0 0 0 30933 22555 9803 54760 46836 33773
++42919 54484 65535 61113 45548 20995 63486 46079 19455 47031 52942 56540 44846 53841 61423
++47031 52942 56540 61113 45548 20995 12071 8729 3764 128 128 128 2402 1799 684
++55635 40828 18345 58279 45589 26504 47031 52942 56540 47031 52942 56540 54209 48830 40477
++56972 46962 30007 54209 48830 40477 50115 50774 49729 43304 54355 65021 50976 48701 42982
++61985 45298 20071 15792 11440 4871 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 11370 11370 11370 7197 7197 7197 0 0 0 22881 22881 22881
++6427 6427 6427 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 14506 14506 14506
++7197 7197 7197 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 12931 12931 12931 64764 64764 64764 65535 65535 65535
++40984 40984 40984 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 13752 13752 13752 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 43194 31354 13386
++63359 45859 19672 63486 46079 19711 63736 46260 19789 63736 46260 19789 63236 45897 19634
++57142 41714 18588 3855 2930 1607 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63736 46260 19789 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 17750 12880 5633 58276 44060 22272
++42919 54484 65535 56972 46962 30007 61241 45992 22579 56972 46962 30007 59002 43055 18866
++40410 29471 12985 34164 24785 10813 48838 36002 16378 61241 45992 22579 47031 52942 56540
++44846 53841 61423 62859 46189 20912 13872 10127 4336 0 0 0 0 0 0
++28744 20827 9121 54760 46836 33773 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 58276 44060 22272 42919 54484 65535 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 22224 16071 6824 61113 45548 20995 44846 53841 61423
++54209 48830 40477 53705 39676 18339 257 257 257 128 128 128 0 0 0
++30933 22555 9803 58279 45589 26504 43304 54355 65021 54760 46836 33773 45225 33169 15226
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 58279 45589 26504
++56972 46962 30007 59969 46214 26008 55635 40828 18345 40410 29471 12985 37303 27193 11910
++55635 40828 18345 58279 45589 26504 44846 53841 61423 45746 53327 59238 61985 45298 20071
++7209 5285 2184 128 128 128 0 0 0 30042 21792 9253 54760 46836 33773
++42919 54484 65535 61113 45548 20995 56972 46962 30007 58279 45589 26504 62856 45897 20023
++59002 43055 18866 62737 45569 19692 12071 8729 3764 0 0 0 36240 26320 11215
++56972 46962 30007 43304 54355 65021 54209 48830 40477 61985 45298 20071 40410 29471 12985
++27882 20284 8738 34164 24785 10813 55635 40828 18345 57302 45835 26989 44846 53841 61423
++50629 49986 46941 59002 43055 18866 642 642 899 128 128 128 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 7197 7197 7197 11370 11370 11370 5911 5911 5911 13752 13752 13752
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 1028 1028 1028 20778 20778 20542
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 257 257 257 51400 51400 51400 65021 65021 65021
++44589 44631 44888 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 11370 11370 11370 16136 16136 16136
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 22224 16071 6824 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++17750 12880 5633 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 50115 51271 50886 59969 46214 26008 45225 33169 15226 2402 1799 684
++128 128 128 0 0 0 128 128 128 40410 29471 12985 56278 47802 34950
++43304 54355 65021 54760 46836 33773 30042 21792 9253 0 0 0 0 0 0
++30042 21792 9253 54760 46836 33773 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 59969 46214 26008 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 0 0 0 42654 31649 16191 56972 46962 30007
++43818 54098 63479 58279 45589 26504 30042 21792 9253 0 0 0 9123 6640 2832
++61985 45298 20071 47031 52942 56540 50115 50774 49729 59002 43055 18866 4874 3558 1459
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42919 54484 65535 48573 52299 53199
++59969 46214 26008 40410 29471 12985 642 642 899 128 128 128 128 128 128
++1413 1028 514 45225 33169 15226 56278 47802 34950 43304 54355 65021 54760 46836 33773
++34164 24785 10813 0 0 0 0 0 0 28744 20827 9121 54760 46836 33773
++43304 54355 65021 59969 46214 26008 62856 45897 20023 45225 33169 15226 4874 3558 1459
++128 128 128 1264 929 361 1264 929 361 10498 7619 3259 61985 45298 20071
++47031 52942 56540 50115 51271 50886 60373 44510 19999 9123 6640 2832 0 0 0
++128 128 128 128 128 128 1772 1533 1155 45225 33169 15226 56278 47802 34950
++42919 54484 65535 58276 44060 22272 22224 16071 6824 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20263 20263 20263 3079 3079 3079 14506 14506 14506
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18995 18995 18995 1799 1799 1799
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 24991 24991 24991 65278 65278 65278
++57470 57470 57470 2313 2313 2313 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 6427 6427 6427
++21292 21292 21292 18336 18336 18336 11370 11370 11370 10459 10459 10459 18995 18995 18995
++22881 22881 22881 0 0 0 0 0 0 0 0 0 20778 20778 20542
++3857 3857 3857 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 5943 4354 1886 59002 43055 18866 63486 46079 19455
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634 40410 29471 12985
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 47031 52942 56540 61985 45298 20071 5943 4354 1886 128 128 128
++0 0 0 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 37303 27193 11910 0 0 0 0 0 0
++28744 20827 9121 54760 46836 33773 43304 54355 65021 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 58276 44060 22272 42919 54484 65535 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 0 0 0 3855 2930 1607 59002 43055 18866
++50629 49986 46941 48573 52299 53199 61113 45548 20995 8373 6077 2600 48838 36002 16378
++54209 48830 40477 45746 53327 59238 61985 45298 20071 17750 12880 5633 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 47031 52942 56540
++61985 45298 20071 3038 2204 899 128 128 128 0 0 0 0 0 0
++0 0 0 12071 8729 3764 61113 45548 20995 43304 54355 65021 48573 52299 53199
++59002 43055 18866 128 128 128 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 47031 52942 56540 60373 44510 19999 1413 1028 514 128 128 128
++0 0 0 0 0 0 0 0 0 40410 29471 12985 54209 48830 40477
++43304 54355 65021 57302 45835 26989 25195 18262 7789 875 620 271 0 0 0
++0 0 0 0 0 0 0 0 0 8095 5986 2531 62859 46189 20912
++44846 53841 61423 50629 49986 46941 51150 38050 17516 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 9814 9814 9814 12931 12931 12931 20778 20778 20542
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 18711 18711 18711 0 0 0
++0 0 0 0 0 0 18517 18517 18517 11370 11370 11370 0 0 0
++0 0 0 0 0 0 0 0 0 385 385 334 38406 38021 37650
++65021 65021 65021 28239 28239 28239 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 642 642 899 6427 6427 6427 8455 8455 8455 1028 1028 1028
++16762 16762 16762 0 0 0 642 642 899 21292 21292 21292 26342 26738 26738
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 43194 31354 13386 63359 45859 19672 63736 46260 19789
++63736 46260 19789 63736 46260 19789 62986 45716 19556 59002 43055 18866 3855 2930 1607
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 50629 49986 46941 48838 36002 16378 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10498 7619 3259 62859 46189 20912
++43304 54355 65021 50629 49986 46941 45225 33169 15226 0 0 0 0 0 0
++30042 21792 9253 54760 46836 33773 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 59969 46214 26008 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 0 0 0 0 0 0 17750 12880 5633
++61985 45298 20071 45746 53327 59238 54209 48830 40477 57142 41714 18588 61241 45992 22579
++43818 54098 63479 57302 45835 26989 37303 27193 11910 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 43304 54355 65021 50976 48701 42982
++41427 30069 13197 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 58276 44060 22272 48573 52299 53199 44846 53841 61423
++62856 45897 20023 875 620 271 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 54209 48830 40477 40410 29471 12985 128 128 128 0 0 0
++0 0 0 0 0 0 257 257 257 55635 40828 18345 50115 51271 50886
++43818 54098 63479 63483 46207 20056 7209 5285 2184 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 53705 39676 18339
++50115 51271 50886 45746 53327 59238 63483 46207 20056 875 620 271 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 13752 13752 13752 22359 22625 23010
++12931 12931 12931 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 11370 11370 11370 5911 5911 5911 0 0 0
++4480 4480 4480 21292 21292 21292 21292 21292 21292 1799 1799 1799 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++33681 33681 33681 53256 53199 52942 1799 1927 2184 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18336 18336 18336
++1028 1285 1542 7197 7197 7197 22881 22881 22881 16762 16762 16762 5911 5911 5911
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 22224 16071 6824 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 19371 14059 6014 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 37303 27193 11910 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 63483 46207 20056
++42919 54484 65535 50629 49986 46941 48838 36002 16378 128 128 128 0 0 0
++28744 20827 9121 54760 46836 33773 43304 54355 65021 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 58276 44060 22272 42919 54484 65535 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++37303 27193 11910 57302 45835 26989 44846 53841 61423 59969 46214 26008 48573 52299 53199
++50976 48701 42982 57142 41714 18588 1772 1533 1155 257 257 257 0 0 0
++0 0 0 0 0 0 34164 24785 10813 37303 27193 11910 40410 29471 12985
++37303 27193 11910 40410 29471 12985 37303 27193 11910 40410 29471 12985 37303 27193 11910
++25195 18262 7789 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 56278 47802 34950
++30933 22555 9803 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 53705 39676 18339 50115 51271 50886 43304 54355 65021
++63486 46079 19711 5943 4354 1886 128 128 128 27882 20284 8738 54760 46836 33773
++43304 54355 65021 54760 46836 33773 28744 20827 9121 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 62856 45897 20023 45746 53327 59238
++47031 52942 56540 63486 46079 19455 55635 40828 18345 57142 41714 18588 55635 40828 18345
++57142 41714 18588 55635 40828 18345 57142 41714 18588 55635 40828 18345 61113 45548 20995
++54209 48830 40477 42919 54484 65535 63483 46207 20056 7209 5285 2184 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 257 257 257 10459 10459 10459
++38406 38021 37650 1028 1285 1542 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 16136 16136 16136 385 385 334 0 0 0
++21838 21794 21532 0 0 0 17553 17553 17553 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 17553 17553 17553 15440 15440 15440 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 12931 12931 12931 24991 24991 24991
++19317 19131 18746 11370 11370 11370 4480 4480 4480 17965 17965 17965 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++5943 4354 1886 59002 43055 18866 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19455 41427 30069 13197 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 56278 47802 34950 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7209 5285 2184 63483 46207 20056
++43304 54355 65021 50629 49986 46941 46996 34589 15727 0 0 0 0 0 0
++30042 21792 9253 54760 46836 33773 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 59969 46214 26008 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++2402 1799 684 53705 39676 18339 54209 48830 40477 45746 53327 59238 47031 52942 56540
++61985 45298 20071 13872 10127 4336 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 60373 44510 19999 56278 47802 34950 54209 48830 40477
++54209 48830 40477 54209 48830 40477 54209 48830 40477 54209 48830 40477 56972 46962 30007
++42654 31649 16191 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42533 53970 64764 54760 46836 33773
++25195 18262 7789 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 48838 36002 16378 50629 49986 46941 42919 54484 65535
++61113 45548 20995 13872 10127 4336 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 57302 45835 26989 23177 16932 7265 0 0 0 0 0 0
++0 0 0 0 0 0 3038 2204 899 63736 46260 19789 43818 54098 63479
++44846 53841 61423 48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199
++48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199 48573 52299 53199
++47031 52942 56540 42919 54484 65535 61113 45548 20995 13872 10127 4336 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++7197 7197 7197 11370 11370 11370 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 10459 10459 10459 7197 7197 7197 642 642 899
++17965 17965 17965 0 0 0 9814 9814 9814 10459 10459 10459 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 24991 24991 24991 5911 5911 5911
++0 0 0 4480 4480 4480 20263 20263 20263 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++43194 31354 13386 63486 46079 19455 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63236 45897 19634 59002 43055 18866 4874 3558 1459 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 63483 46207 20056
++42919 54484 65535 50629 49986 46941 48838 36002 16378 128 128 128 0 0 0
++28744 20827 9121 54760 46836 33773 43304 54355 65021 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++17750 12880 5633 58276 44060 22272 42919 54484 65535 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++2402 1799 684 57142 41714 18588 50976 48701 42982 44846 53841 61423 45746 53327 59238
++61985 45298 20071 15792 11440 4871 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 59002 43055 18866 50115 50774 49729 47031 52942 56540
++47031 52942 56540 47031 52942 56540 47031 52942 56540 47031 52942 56540 54209 48830 40477
++43194 31354 13386 257 257 257 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 57302 45835 26989
++22224 16071 6824 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 46996 34589 15727 50629 49986 46941 43304 54355 65021
++61241 45992 22579 13872 10127 4336 0 0 0 27882 20284 8738 54760 46836 33773
++42533 53970 64764 57302 45835 26989 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 2402 1799 684 63736 46260 19789 43818 54098 63479
++48573 52299 53199 57302 45835 26989 57302 45835 26989 57302 45835 26989 57302 45835 26989
++57302 45835 26989 57302 45835 26989 57302 45835 26989 57302 45835 26989 57302 45835 26989
++57302 45835 26989 57302 45835 26989 61985 45298 20071 19371 14059 6014 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 19317 19131 18746 1799 1799 1799
++16762 16762 16762 0 0 0 0 0 0 17553 17553 17553 3857 3857 3857
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 0 0 0
++3857 3857 3857 21292 21292 21292 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 22224 16071 6824
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63486 46079 19711 22224 16071 6824 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 56278 47802 34950 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7209 5285 2184 63483 46207 20056
++43304 54355 65021 50629 49986 46941 46996 34589 15727 0 0 0 0 0 0
++30042 21792 9253 54760 46836 33773 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++19371 14059 6014 58279 45589 26504 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 57302 45835 26989 43818 54098 63479 59969 46214 26008 48573 52299 53199
++50629 49986 46941 57142 41714 18588 3038 2204 899 0 0 0 0 0 0
++0 0 0 0 0 0 53705 39676 18339 60373 44510 19999 59002 43055 18866
++60373 44510 19999 59002 43055 18866 60373 44510 19999 59002 43055 18866 60373 44510 19999
++37303 27193 11910 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 42533 53970 64764 54760 46836 33773
++27882 20284 8738 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 257 257 257 51150 38050 17516 50115 50774 49729 42919 54484 65535
++62856 45897 20023 8373 6077 2600 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 57302 45835 26989 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 60373 44510 19999 47031 52942 56540
++47031 52942 56540 60373 44510 19999 20895 15087 6460 19371 14059 6014 20895 15087 6460
++19371 14059 6014 20895 15087 6460 19371 14059 6014 20895 15087 6460 19371 14059 6014
++20895 15087 6460 19371 14059 6014 20895 15087 6460 5943 4354 1886 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 10459 10459 10459 9814 9814 9814
++18995 18995 18995 257 257 257 0 0 0 0 0 0 20778 20778 20542
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 3079 3079 3079
++22359 22625 23010 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 59002 43055 18866
++63236 45897 19634 63736 46260 19789 63736 46260 19789 63736 46260 19789 62986 45716 19556
++43194 31354 13386 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 63483 46207 20056
++42919 54484 65535 50629 49986 46941 48838 36002 16378 128 128 128 0 0 0
++28744 20827 9121 54760 46836 33773 43304 54355 65021 56972 46962 30007 22224 16071 6824
++385 385 334 0 0 0 0 0 0 0 0 0 0 0 0
++25195 18262 7789 56972 46962 30007 42919 54484 65535 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 0 0 0 0 0 0 17750 12880 5633
++61985 45298 20071 45746 53327 59238 54209 48830 40477 59002 43055 18866 59969 46214 26008
++43818 54098 63479 56972 46962 30007 42654 31649 16191 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 128 128 128 128 128 128 128 128 128 128 128 128
++128 128 128 128 128 128 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 54209 48830 40477
++34164 24785 10813 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 57142 41714 18588 48573 52299 53199 44846 53841 61423
++63483 46207 20056 1413 1028 514 128 128 128 27882 20284 8738 54760 46836 33773
++42533 53970 64764 57302 45835 26989 20895 15087 6460 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 51150 38050 17516 50115 51271 50886
++44846 53841 61423 63483 46207 20056 1264 929 361 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 20263 20263 20263
++18336 18336 18336 8455 8455 8455 0 0 0 128 128 128 3079 3079 3079
++17965 17965 17965 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 22359 22625 23010
++8455 8455 8455 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 9814 9814 9814 20778 20778 20542
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 43194 31354 13386 63359 45859 19672
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63236 45897 19634 60487 44116 19189
++5943 4354 1886 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 56278 47802 34950 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7209 5285 2184 63483 46207 20056
++43304 54355 65021 50629 49986 46941 46996 34589 15727 0 0 0 128 128 128
++23177 16932 7265 56972 46962 30007 42919 54484 65535 54760 46836 33773 27882 20284 8738
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 257 257 257 3855 2930 1607 60373 44510 19999
++50629 49986 46941 47031 52942 56540 62465 45547 19595 10498 7619 3259 51340 37280 15909
++54209 48830 40477 44846 53841 61423 61113 45548 20995 20895 15087 6460 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++128 128 128 28744 20827 9121 54760 46836 33773 43304 54355 65021 50629 49986 46941
++51150 38050 17516 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 4874 3558 1459 62737 45569 19692 44846 53841 61423 47031 52942 56540
++60373 44510 19999 0 0 0 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 57302 45835 26989 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 45225 33169 15226 50976 48701 42982
++42533 53970 64764 61241 45992 22579 20895 15087 6460 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 15792 11440 4871
++23177 16932 7265 4874 3558 1459 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++16136 16136 16136 30583 30843 31357 0 0 0 0 0 0 0 0 0
++9814 9814 9814 17965 17965 17965 128 128 128 0 0 0 0 0 0
++0 0 0 17553 17553 17553 4480 4480 4480 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 18995 18995 18995
++13752 13752 13752 20263 20263 20263 1413 1670 1799 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 17553 17553 17553 12931 12931 12931 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 20895 15087 6460 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789 23177 16932 7265
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 57302 45835 26989 22224 16071 6824
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 63483 46207 20056
++42919 54484 65535 50629 49986 46941 48838 36002 16378 128 128 128 0 0 0
++15792 11440 4871 58276 44060 22272 42919 54484 65535 54209 48830 40477 42654 31649 16191
++128 128 128 0 0 0 0 0 0 0 0 0 9123 6640 2832
++61985 45298 20071 47031 52942 56540 43304 54355 65021 56278 47802 34950 30933 22555 9803
++875 620 271 0 0 0 0 0 0 45225 33169 15226 56972 46962 30007
++43304 54355 65021 61241 45992 22579 28744 20827 9121 257 257 257 9123 6640 2832
++61985 45298 20071 47031 52942 56540 50115 51271 50886 60373 44510 19999 5943 4354 1886
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 28744 20827 9121 54760 46836 33773 42919 54484 65535 50115 50774 49729
++62856 45897 20023 12071 8729 3764 385 385 334 0 0 0 0 0 0
++0 0 0 28744 20827 9121 57302 45835 26989 42919 54484 65535 54209 48830 40477
++43194 31354 13386 128 128 128 0 0 0 27882 20284 8738 54760 46836 33773
++42533 53970 64764 57302 45835 26989 20895 15087 6460 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 20895 15087 6460 61241 45992 22579
++43818 54098 63479 50976 48701 42982 51150 38050 17516 2402 1799 684 0 0 0
++0 0 0 0 0 0 0 0 0 9123 6640 2832 60373 44510 19999
++58279 45589 26504 63093 45874 19660 48838 36002 16378 1264 929 361 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 13752 13752 13752 9814 9814 9814 0 0 0 0 0 0
++0 0 0 6810 6810 6810 21292 21292 21292 0 0 0 0 0 0
++0 0 0 10459 10459 10459 24991 24991 24991 15440 15440 15440 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 1799 1927 2184
++19317 19131 18746 1028 1028 1028 20778 20778 20542 15440 15440 15440 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++14506 14506 14506 28239 28239 28239 5911 5911 5911 0 0 0 0 0 0
++0 0 0 4480 4480 4480 4480 4480 4480 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 4874 3558 1459 59002 43055 18866 63236 45897 19634 63736 46260 19789
++63736 46260 19789 63736 46260 19789 63112 45588 19556 45225 33169 15226 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 50976 48701 42982 42919 54484 65535 57302 45835 26989 48838 36002 16378
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197
++41427 30069 13197 41427 30069 13197 41427 30069 13197 41427 30069 13197 37303 27193 11910
++0 0 0 8373 6077 2600 63483 46207 20056 43304 54355 65021 50629 49986 46941
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 58279 45589 26504
++42919 54484 65535 56278 47802 34950 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7209 5285 2184 63483 46207 20056
++43304 54355 65021 50629 49986 46941 46996 34589 15727 0 0 0 0 0 0
++8373 6077 2600 62859 46189 20912 44846 53841 61423 45746 53327 59238 62737 45569 19692
++27882 20284 8738 9123 6640 2832 10498 7619 3259 25195 18262 7789 60373 44510 19999
++59969 46214 26008 62859 46189 20912 42533 53970 64764 54209 48830 40477 30933 22555 9803
++0 0 0 0 0 0 23177 16932 7265 61113 45548 20995 44846 53841 61423
++54209 48830 40477 51150 38050 17516 875 620 271 0 0 0 257 257 257
++30042 21792 9253 59969 46214 26008 42533 53970 64764 56278 47802 34950 46996 34589 15727
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 1264 929 361 63483 46207 20056 44846 53841 61423
++50115 50774 49729 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++59969 46214 26008 43304 54355 65021 54209 48830 40477 34164 24785 10813 0 0 0
++0 0 0 30042 21792 9253 54760 46836 33773 42919 54484 65535 56972 46962 30007
++56972 46962 30007 60373 44510 19999 20895 15087 6460 5943 4354 1886 4874 3558 1459
++25195 18262 7789 61113 45548 20995 50115 51271 50886 43818 54098 63479 61985 45298 20071
++13872 10127 4336 0 0 0 0 0 0 27882 20284 8738 54760 46836 33773
++42919 54484 65535 57302 45835 26989 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 0 0 0 53705 39676 18339
++50976 48701 42982 43818 54098 63479 57302 45835 26989 51150 38050 17516 17750 12880 5633
++4874 3558 1459 4874 3558 1459 20895 15087 6460 55635 40828 18345 54209 48830 40477
++42919 54484 65535 56972 46962 30007 36240 26320 11215 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 3857 3857 3857 22881 22881 22881 1028 1285 1542
++0 0 0 0 0 0 21838 21794 21532 5911 5911 5911 21292 21292 21292
++10459 10459 10459 128 128 128 0 0 0 0 0 0 0 0 0
++10459 10459 10459 16762 16762 16762 0 0 0 4480 4480 4480 20263 20263 20263
++14506 14506 14506 257 257 257 0 0 0 0 0 0 0 0 0
++5911 5911 5911 11370 11370 11370 17965 17965 17965 18336 18336 18336 20263 20263 20263
++33681 33681 33681 33681 33681 33681 8455 8455 8455 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 43194 31354 13386 63236 45897 19634 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 60487 44116 19189 7209 5285 2184 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++40410 29471 12985 54209 48830 40477 42919 54484 65535 50629 49986 46941 56411 51914 44332
++50976 48701 42982 56411 51914 44332 50976 48701 42982 56411 51914 44332 50976 48701 42982
++56411 51914 44332 50976 48701 42982 56411 51914 44332 54209 48830 40477 60487 44116 19189
++128 128 128 8373 6077 2600 63483 46207 20056 42919 54484 65535 50976 48701 42982
++46996 34589 15727 0 0 0 0 0 0 15792 11440 4871 58276 44060 22272
++42919 54484 65535 54209 48830 40477 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 5943 4354 1886 63483 46207 20056
++42919 54484 65535 50629 49986 46941 48838 36002 16378 128 128 128 0 0 0
++0 0 0 45225 33169 15226 56278 47802 34950 42919 54484 65535 48573 52299 53199
++58279 45589 26504 61985 45298 20071 62859 46189 20912 57302 45835 26989 50976 48701 42982
++62859 46189 20912 62859 46189 20912 42919 54484 65535 54209 48830 40477 34164 24785 10813
++0 0 0 7209 5285 2184 60373 44510 19999 50115 51271 50886 47031 52942 56540
++62486 45353 19401 10498 7619 3259 0 0 0 0 0 0 0 0 0
++875 620 271 53705 39676 18339 54209 48830 40477 43818 54098 63479 61241 45992 22579
++27882 20284 8738 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 44846 53841 61423
++50115 50774 49729 51150 38050 17516 128 128 128 0 0 0 17750 12880 5633
++58276 44060 22272 42919 54484 65535 54209 48830 40477 34164 24785 10813 257 257 257
++0 0 0 30933 22555 9803 56278 47802 34950 42919 54484 65535 58276 44060 22272
++61241 45992 22579 50976 48701 42982 61241 45992 22579 62856 45897 20023 63736 46260 19789
++59969 46214 26008 50115 51271 50886 43304 54355 65021 54760 46836 33773 51150 38050 17516
++257 257 257 0 0 0 0 0 0 27882 20284 8738 54760 46836 33773
++42533 53970 64764 57302 45835 26989 20895 15087 6460 257 257 257 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 17750 12880 5633
++61985 45298 20071 50629 49986 46941 43818 54098 63479 54209 48830 40477 58276 44060 22272
++64250 47031 20303 63359 45859 19672 58276 44060 22272 50629 49986 46941 43818 54098 63479
++54209 48830 40477 57142 41714 18588 4874 3558 1459 128 128 128 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 1772 1533 1155 20263 20263 20263
++14506 14506 14506 0 0 0 5911 5911 5911 21838 21794 21532 2313 2313 2313
++8455 8455 8455 18995 18995 18995 20263 20263 20263 9814 9814 9814 257 257 257
++128 128 128 4480 4480 4480 20263 20263 20263 11370 11370 11370 0 0 0
++4480 4480 4480 18995 18995 18995 18995 18995 18995 18711 18711 18711 17965 17965 17965
++18336 18336 18336 18711 18711 18711 18711 18711 18711 18995 18995 18995 17553 17553 17553
++4480 4480 4480 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++20895 15087 6460 63486 46079 19711 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 63486 46079 19711 25195 18262 7789 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++41427 30069 13197 56278 47802 34950 48573 52299 53199 50115 51271 50886 50115 51271 50886
++50115 51271 50886 50115 51271 50886 50115 51271 50886 50115 51271 50886 50115 51271 50886
++50115 51271 50886 50115 51271 50886 50115 50774 49729 50629 49986 46941 60373 44510 19999
++0 0 0 8373 6077 2600 63486 46335 19711 50115 51271 50886 54209 48830 40477
++45225 33169 15226 0 0 0 385 385 334 15792 11440 4871 61241 45992 22579
++50115 51271 50886 56972 46962 30007 34164 24785 10813 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 7209 5285 2184 63486 46335 19711
++50115 51271 50886 54209 48830 40477 46996 34589 15727 0 0 0 0 0 0
++0 0 0 10498 7619 3259 60373 44510 19999 54760 46836 33773 48573 52299 53199
++45746 53327 59238 43304 54355 65021 47031 52942 56540 50976 48701 42982 61113 45548 20995
++40410 29471 12985 63486 46335 19711 50115 51271 50886 56278 47802 34950 36240 26320 11215
++0 0 0 48838 36002 16378 59969 46214 26008 50115 51271 50886 59969 46214 26008
++30933 22555 9803 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 12071 8729 3764 62856 45897 20023 50115 50774 49729 54209 48830 40477
++61985 45298 20071 10498 7619 3259 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 63736 46260 19789 50115 50774 49729
++54209 48830 40477 51150 38050 17516 0 0 0 257 257 257 15792 11440 4871
++61241 45992 22579 48573 52299 53199 56972 46962 30007 34164 24785 10813 0 0 0
++385 385 334 30933 22555 9803 56972 46962 30007 50115 51271 50886 61241 45992 22579
++48838 36002 16378 61241 45992 22579 50629 49986 46941 47031 52942 56540 44846 53841 61423
++47031 52942 56540 50115 50774 49729 57302 45835 26989 51150 38050 17516 4874 3558 1459
++0 0 0 0 0 0 0 0 0 27882 20284 8738 56972 46962 30007
++50115 51271 50886 59969 46214 26008 22224 16071 6824 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++13872 10127 4336 57142 41714 18588 56972 46962 30007 50629 49986 46941 47031 52942 56540
++44846 53841 61423 45746 53327 59238 47031 52942 56540 50629 49986 46941 58276 44060 22272
++55635 40828 18345 8373 6077 2600 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++3857 3857 3857 18517 18517 18517 16136 16136 16136 5911 5911 5911 22359 22625 23010
++22881 22881 22881 5911 5911 5911 0 0 0 9814 9814 9814 18711 18711 18711
++18995 18995 18995 19317 19131 18746 20263 20263 20263 28239 28239 28239 38978 38978 38978
++13752 13752 13752 128 128 128 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 4874 3558 1459
++57142 41714 18588 63736 46260 19789 63736 46260 19789 63736 46260 19789 63736 46260 19789
++63736 46260 19789 46996 34589 15727 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++30933 22555 9803 55635 40828 18345 53705 39676 18339 53705 39676 18339 53705 39676 18339
++53705 39676 18339 53705 39676 18339 53705 39676 18339 53705 39676 18339 53705 39676 18339
++53705 39676 18339 53705 39676 18339 53705 39676 18339 55635 40828 18345 46996 34589 15727
++385 385 334 5943 4354 1886 53705 39676 18339 53705 39676 18339 55635 40828 18345
++36240 26320 11215 128 128 128 0 0 0 13872 10127 4336 53705 39676 18339
++53705 39676 18339 53705 39676 18339 27882 20284 8738 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 4874 3558 1459 53705 39676 18339
++53705 39676 18339 55635 40828 18345 37303 27193 11910 257 257 257 0 0 0
++0 0 0 0 0 0 4874 3558 1459 40410 29471 12985 57142 41714 18588
++62859 46189 20912 63486 46079 19455 61113 45548 20995 48838 36002 16378 19371 14059 6014
++385 385 334 53070 38550 16467 53705 39676 18339 55635 40828 18345 30933 22555 9803
++19371 14059 6014 53070 38550 16467 53705 39676 18339 53705 39676 18339 45225 33169 15226
++875 620 271 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 30933 22555 9803 53705 39676 18339 55635 40828 18345
++53705 39676 18339 40410 29471 12985 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 875 620 271 53070 38550 16467 53705 39676 18339
++55635 40828 18345 40410 29471 12985 128 128 128 0 0 0 13872 10127 4336
++53705 39676 18339 53705 39676 18339 55635 40828 18345 27882 20284 8738 128 128 128
++0 0 0 28744 20827 9121 53705 39676 18339 53705 39676 18339 53705 39676 18339
++7209 5285 2184 22224 16071 6824 51150 38050 17516 61985 45298 20071 63736 46260 19789
++61113 45548 20995 51150 38050 17516 34164 24785 10813 642 642 899 0 0 0
++0 0 0 0 0 0 0 0 0 23177 16932 7265 53705 39676 18339
++53705 39676 18339 53705 39676 18339 17750 12880 5633 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 3038 2204 899 34164 24785 10813 48838 36002 16378 59002 43055 18866
++63736 46260 19789 63483 46207 20056 59002 43055 18866 51150 38050 17516 22224 16071 6824
++1028 1028 1028 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 2313 2313 2313 11370 11370 11370 12931 12931 12931
++14506 14506 14506 8455 8455 8455 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++128 128 128 128 128 128 257 257 257 257 257 257 257 257 257
++257 257 257 257 257 257 257 257 257 257 257 257 257 257 257
++257 257 257 257 257 257 257 257 257 128 128 128 128 128 128
++0 0 0 0 0 0 0 0 0 128 128 128 128 128 128
++128 128 128 0 0 0 0 0 0 0 0 0 0 0 0
++257 257 257 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 128 128 128
++1264 929 361 3855 2930 1607 0 0 0 0 0 0 128 128 128
++0 0 0 257 257 257 128 128 128 128 128 128 0 0 0
++0 0 0 128 128 128 257 257 257 257 257 257 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 128 128 128 128 128 128
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 128 128 128
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 128 128 128 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 257 257 257 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 128 128 128 3855 2930 1607
++875 620 271 128 128 128 0 0 0 128 128 128 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 128 128 128
++257 257 257 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 128 128 128 128 128 128 257 257 257
++3038 2204 899 1264 929 361 128 128 128 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++128 128 128 128 128 128 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++
+Index: drivers/video/logo/Makefile
+===================================================================
+--- linux-2.6.32/drivers/video/logo/Makefile.orig 2010-01-06 23:07:45.000000000 +0000
++++ linux-2.6.32/drivers/video/logo/Makefile 2010-01-09 11:30:40.000000000 +0000
+@@ -7,6 +7,7 @@
+ obj-$(CONFIG_LOGO_BLACKFIN_CLUT224) += logo_blackfin_clut224.o
+ obj-$(CONFIG_LOGO_BLACKFIN_VGA16) += logo_blackfin_vga16.o
+ obj-$(CONFIG_LOGO_DEC_CLUT224) += logo_dec_clut224.o
++obj-$(CONFIG_LOGO_LIBRE_CLUT224) += logo_libre_clut224.o
+ obj-$(CONFIG_LOGO_MAC_CLUT224) += logo_mac_clut224.o
+ obj-$(CONFIG_LOGO_PARISC_CLUT224) += logo_parisc_clut224.o
+ obj-$(CONFIG_LOGO_SGI_CLUT224) += logo_sgi_clut224.o
+Index: include/linux/linux_logo.h
+===================================================================
+--- linux-2.6.32/include/linux/linux_logo.h.orig 2010-01-06 23:07:45.000000000 +0000
++++ linux-2.6.32/include/linux/linux_logo.h 2010-01-09 11:30:40.000000000 +0000
+@@ -38,6 +38,7 @@
+ extern const struct linux_logo logo_blackfin_vga16;
+ extern const struct linux_logo logo_blackfin_clut224;
+ extern const struct linux_logo logo_dec_clut224;
++extern const struct linux_logo logo_libre_clut224;
+ extern const struct linux_logo logo_mac_clut224;
+ extern const struct linux_logo logo_parisc_clut224;
+ extern const struct linux_logo logo_sgi_clut224;
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch
new file mode 100644
index 000000000..c43906b15
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch
@@ -0,0 +1,50 @@
+* drivers/net/wireless/iwlwifi/iwl-1000.c: Adjust deblobbed context.
+
+Backport of the following upstream commit...
+
+commit 6c3872e1d52290dcd506473028867cacc6b7393d
+Author: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
+Date: Mon Feb 8 13:53:05 2010 -0800
+
+ iwlwifi: Adjusting PLCP error threshold for 1000 NIC
+
+ While testing the station with the NIC 1000 family, it is found that
+ the plcp error can easily exceed 50 value in 100mSecs. This creates
+ unneccessary radio reset/tuning. This patch raises the PLCP error
+ threshold of the NIC 1000 from 50 to 200 error count.
+
+ Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
+ Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig 2010-04-13 13:44:14.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c 2010-04-13 13:45:51.000000000 -0400
+@@ -174,7 +174,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+- .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl1000_bg_cfg = {
+@@ -201,7 +201,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .support_ct_kill_exit = true,
+- .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig 2010-04-13 13:44:14.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h 2010-04-13 13:45:06.000000000 -0400
+@@ -991,6 +991,7 @@ struct iwl_switch_rxon {
+ #define IWL_MAX_PLCP_ERR_THRESHOLD_MIN (0)
+ #define IWL_MAX_PLCP_ERR_THRESHOLD_DEF (50)
+ #define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF (100)
++#define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF (200)
+ #define IWL_MAX_PLCP_ERR_THRESHOLD_MAX (255)
+
+ enum iwl_reset {
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch
new file mode 100644
index 000000000..986e37b12
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch
@@ -0,0 +1,476 @@
+* drivers/net/wireless/iwlwifi/iwl-1000.c: Adjust deblobbed context.
+* drivers/net/wireless/iwlwifi/iwl-5000.c: Likewise.
+* drivers/net/wireless/iwlwifi/iwl-6000.c: Likewise.
+
+Backport of the following upstream commit...
+
+commit b74e31a9bc1013e69b85b139072485dc153453dd
+Author: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+Date: Mon Mar 1 17:23:50 2010 -0800
+
+ iwlwifi: Recover TX flow stall due to stuck queue
+
+ Monitors the internal TX queues periodically. When a queue is stuck
+ for some unknown conditions causing the throughput to drop and the
+ transfer is stop, the driver will force firmware reload and bring the
+ system back to normal operational state.
+
+ The iwlwifi devices behave differently in this regard so this feature is
+ made part of the ops infrastructure so we can have more control on how to
+ monitor and recover from tx queue stall case per device.
+
+ Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
+ Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
+ Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c 2010-04-13 14:34:23.000000000 -0400
+@@ -138,6 +138,7 @@ static struct iwl_lib_ops iwl1000_lib =
+ .temperature = iwl5000_temperature,
+ .set_ct_kill = iwl1000_set_ct_threshold,
+ },
++ .recover_from_tx_stall = iwl_bg_monitor_recover,
+ };
+
+ static struct iwl_ops iwl1000_ops = {
+@@ -175,6 +176,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl1000_bg_cfg = {
+@@ -202,6 +204,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .support_ct_kill_exit = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c 2010-04-13 14:33:49.000000000 -0400
+@@ -2483,6 +2483,13 @@ static void iwl3945_alive_start(struct i
+ /* After the ALIVE response, we can send commands to 3945 uCode */
+ set_bit(STATUS_ALIVE, &priv->status);
+
++ if (priv->cfg->ops->lib->recover_from_tx_stall) {
++ /* Enable timer to monitor the driver queues */
++ mod_timer(&priv->monitor_recover,
++ jiffies +
++ msecs_to_jiffies(priv->cfg->monitor_recover_period));
++ }
++
+ if (iwl_is_rfkill(priv))
+ return;
+
+@@ -3768,6 +3775,13 @@ static void iwl3945_setup_deferred_work(
+
+ iwl3945_hw_setup_deferred_work(priv);
+
++ if (priv->cfg->ops->lib->recover_from_tx_stall) {
++ init_timer(&priv->monitor_recover);
++ priv->monitor_recover.data = (unsigned long)priv;
++ priv->monitor_recover.function =
++ priv->cfg->ops->lib->recover_from_tx_stall;
++ }
++
+ tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+ iwl3945_irq_tasklet, (unsigned long)priv);
+ }
+@@ -3780,6 +3794,8 @@ static void iwl3945_cancel_deferred_work
+ cancel_delayed_work(&priv->scan_check);
+ cancel_delayed_work(&priv->alive_start);
+ cancel_work_sync(&priv->beacon_update);
++ if (priv->cfg->ops->lib->recover_from_tx_stall)
++ del_timer_sync(&priv->monitor_recover);
+ }
+
+ static struct attribute *iwl3945_sysfs_entries[] = {
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c 2010-04-13 14:33:49.000000000 -0400
+@@ -2829,6 +2829,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
+ .led_compensation = 64,
+ .broken_powersave = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ static struct iwl_cfg iwl3945_abg_cfg = {
+@@ -2847,6 +2848,7 @@ static struct iwl_cfg iwl3945_abg_cfg =
+ .led_compensation = 64,
+ .broken_powersave = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct pci_device_id iwl3945_hw_card_ids[] = {
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c 2010-04-13 14:33:49.000000000 -0400
+@@ -2248,6 +2248,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
+ .chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ /* Module firmware */
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c 2010-04-13 14:35:01.000000000 -0400
+@@ -1506,6 +1506,7 @@ struct iwl_lib_ops iwl5000_lib = {
+ .temperature = iwl5000_temperature,
+ .set_ct_kill = iwl5000_set_ct_threshold,
+ },
++ .recover_from_tx_stall = iwl_bg_monitor_recover,
+ };
+
+ static struct iwl_lib_ops iwl5150_lib = {
+@@ -1558,6 +1559,7 @@ static struct iwl_lib_ops iwl5150_lib =
+ .temperature = iwl5150_temperature,
+ .set_ct_kill = iwl5150_set_ct_threshold,
+ },
++ .recover_from_tx_stall = iwl_bg_monitor_recover,
+ };
+
+ static struct iwl_ops iwl5000_ops = {
+@@ -1607,6 +1609,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5100_bgn_cfg = {
+@@ -1632,6 +1635,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5100_abg_cfg = {
+@@ -1655,6 +1659,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5100_agn_cfg = {
+@@ -1681,6 +1686,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5350_agn_cfg = {
+@@ -1707,6 +1713,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5150_agn_cfg = {
+@@ -1733,6 +1740,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl5150_abg_cfg = {
+@@ -1756,6 +1764,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c 2010-04-13 14:36:12.000000000 -0400
+@@ -250,6 +250,7 @@ static struct iwl_lib_ops iwl6000_lib =
+ .temperature = iwl5000_temperature,
+ .set_ct_kill = iwl6000_set_ct_threshold,
+ },
++ .recover_from_tx_stall = iwl_bg_monitor_recover,
+ };
+
+ static struct iwl_ops iwl6000_ops = {
+@@ -308,6 +309,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl6000i_2abg_cfg = {
+@@ -338,6 +340,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl6000i_2bg_cfg = {
+@@ -368,6 +371,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl6050_2agn_cfg = {
+@@ -400,6 +404,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DYNAMIC,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl6050_2abg_cfg = {
+@@ -430,6 +435,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ struct iwl_cfg iwl6000_3agn_cfg = {
+@@ -462,6 +468,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
+ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
++ .monitor_recover_period = IWL_MONITORING_PERIOD,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-agn.c 2010-04-13 14:37:04.000000000 -0400
+@@ -1912,6 +1912,13 @@ static void iwl_alive_start(struct iwl_p
+ /* After the ALIVE response, we can send host commands to the uCode */
+ set_bit(STATUS_ALIVE, &priv->status);
+
++ if (priv->cfg->ops->lib->recover_from_tx_stall) {
++ /* Enable timer to monitor the driver queues */
++ mod_timer(&priv->monitor_recover,
++ jiffies +
++ msecs_to_jiffies(priv->cfg->monitor_recover_period));
++ }
++
+ if (iwl_is_rfkill(priv))
+ return;
+
+@@ -3126,6 +3133,13 @@ static void iwl_setup_deferred_work(stru
+ priv->statistics_periodic.data = (unsigned long)priv;
+ priv->statistics_periodic.function = iwl_bg_statistics_periodic;
+
++ if (priv->cfg->ops->lib->recover_from_tx_stall) {
++ init_timer(&priv->monitor_recover);
++ priv->monitor_recover.data = (unsigned long)priv;
++ priv->monitor_recover.function =
++ priv->cfg->ops->lib->recover_from_tx_stall;
++ }
++
+ if (!priv->cfg->use_isr_legacy)
+ tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+ iwl_irq_tasklet, (unsigned long)priv);
+@@ -3144,6 +3158,8 @@ static void iwl_cancel_deferred_work(str
+ cancel_delayed_work(&priv->alive_start);
+ cancel_work_sync(&priv->beacon_update);
+ del_timer_sync(&priv->statistics_periodic);
++ if (priv->cfg->ops->lib->recover_from_tx_stall)
++ del_timer_sync(&priv->monitor_recover);
+ }
+
+ static void iwl_init_hw_rates(struct iwl_priv *priv,
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.c 2010-04-13 14:33:49.000000000 -0400
+@@ -3263,6 +3263,99 @@ int iwl_force_reset(struct iwl_priv *pri
+ }
+ return 0;
+ }
++EXPORT_SYMBOL(iwl_force_reset);
++
++/**
++ * iwl_bg_monitor_recover - Timer callback to check for stuck queue and recover
++ *
++ * During normal condition (no queue is stuck), the timer is continually set to
++ * execute every monitor_recover_period milliseconds after the last timer
++ * expired. When the queue read_ptr is at the same place, the timer is
++ * shorten to 100mSecs. This is
++ * 1) to reduce the chance that the read_ptr may wrap around (not stuck)
++ * 2) to detect the stuck queues quicker before the station and AP can
++ * disassociate each other.
++ *
++ * This function monitors all the tx queues and recover from it if any
++ * of the queues are stuck.
++ * 1. It first check the cmd queue for stuck conditions. If it is stuck,
++ * it will recover by resetting the firmware and return.
++ * 2. Then, it checks for station association. If it associates it will check
++ * other queues. If any queue is stuck, it will recover by resetting
++ * the firmware.
++ * Note: It the number of times the queue read_ptr to be at the same place to
++ * be MAX_REPEAT+1 in order to consider to be stuck.
++ */
++/*
++ * The maximum number of times the read pointer of the tx queue at the
++ * same place without considering to be stuck.
++ */
++#define MAX_REPEAT (2)
++static int iwl_check_stuck_queue(struct iwl_priv *priv, int cnt)
++{
++ struct iwl_tx_queue *txq;
++ struct iwl_queue *q;
++
++ txq = &priv->txq[cnt];
++ q = &txq->q;
++ /* queue is empty, skip */
++ if (q->read_ptr != q->write_ptr) {
++ if (q->read_ptr == q->last_read_ptr) {
++ /* a queue has not been read from last time */
++ if (q->repeat_same_read_ptr > MAX_REPEAT) {
++ IWL_ERR(priv,
++ "queue %d stuck %d time. Fw reload.\n",
++ q->id, q->repeat_same_read_ptr);
++ q->repeat_same_read_ptr = 0;
++ iwl_force_reset(priv, IWL_FW_RESET);
++ } else {
++ q->repeat_same_read_ptr++;
++ IWL_DEBUG_RADIO(priv,
++ "queue %d, not read %d time\n",
++ q->id,
++ q->repeat_same_read_ptr);
++ mod_timer(&priv->monitor_recover, jiffies +
++ msecs_to_jiffies(IWL_ONE_HUNDRED_MSECS));
++ }
++ return 1;
++ } else {
++ q->last_read_ptr = q->read_ptr;
++ q->repeat_same_read_ptr = 0;
++ }
++ }
++ return 0;
++}
++
++void iwl_bg_monitor_recover(unsigned long data)
++{
++ struct iwl_priv *priv = (struct iwl_priv *)data;
++ int cnt;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status))
++ return;
++
++ /* monitor and check for stuck cmd queue */
++ if (iwl_check_stuck_queue(priv, IWL_CMD_QUEUE_NUM))
++ return;
++
++ /* monitor and check for other stuck queues */
++ if (iwl_is_associated(priv)) {
++ for (cnt = 0; cnt < priv->hw_params.max_txq_num; cnt++) {
++ /* skip as we already checked the command queue */
++ if (cnt == IWL_CMD_QUEUE_NUM)
++ continue;
++ if (iwl_check_stuck_queue(priv, cnt))
++ return;
++ }
++ }
++ /*
++ * Reschedule the timer to occur in
++ * priv->cfg->monitor_recover_period
++ */
++ mod_timer(&priv->monitor_recover,
++ jiffies + msecs_to_jiffies(priv->cfg->monitor_recover_period));
++}
++EXPORT_SYMBOL(iwl_bg_monitor_recover);
+
+ #ifdef CONFIG_PM
+
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h 2010-04-13 14:38:21.000000000 -0400
+@@ -187,6 +187,8 @@ struct iwl_lib_ops {
+
+ /* temperature */
+ struct iwl_temp_ops temp_ops;
++ /* recover from tx queue stall */
++ void (*recover_from_tx_stall)(unsigned long data);
+ };
+
+ struct iwl_led_ops {
+@@ -292,6 +294,8 @@ struct iwl_cfg {
+ u8 sm_ps_mode;
+ const bool support_wimax_coexist;
+ u8 plcp_delta_threshold;
++ /* timer period for monitor the driver queues */
++ u32 monitor_recover_period;
+ };
+
+ /***************************
+@@ -579,6 +583,9 @@ static inline u16 iwl_pcie_link_ctl(stru
+ pci_read_config_word(priv->pci_dev, pos + PCI_EXP_LNKCTL, &pci_lnk_ctl);
+ return pci_lnk_ctl;
+ }
++
++void iwl_bg_monitor_recover(unsigned long data);
++
+ #ifdef CONFIG_PM
+ int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state);
+ int iwl_pci_resume(struct pci_dev *pdev);
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h 2010-04-13 14:38:52.000000000 -0400
+@@ -183,6 +183,10 @@ struct iwl_queue {
+ int n_bd; /* number of BDs in this queue */
+ int write_ptr; /* 1-st empty entry (index) host_w*/
+ int read_ptr; /* last used entry (index) host_r*/
++ /* use for monitoring and recovering the stuck queue */
++ int last_read_ptr; /* storing the last read_ptr */
++ /* number of time read_ptr and last_read_ptr are the same */
++ u8 repeat_same_read_ptr;
+ dma_addr_t dma_addr; /* physical addr for BD's */
+ int n_window; /* safe queue window */
+ u32 id;
+@@ -997,6 +1001,11 @@ struct iwl_switch_rxon {
+ #define IWL_DELAY_NEXT_FORCE_RF_RESET (HZ*3)
+ #define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
+
++/* timer constants use to monitor and recover stuck tx queues in mSecs */
++#define IWL_MONITORING_PERIOD (1000)
++#define IWL_ONE_HUNDRED_MSECS (100)
++#define IWL_SIXTY_SECS (60000)
++
+ enum iwl_reset {
+ IWL_RF_RESET = 0,
+ IWL_FW_RESET,
+@@ -1295,6 +1304,7 @@ struct iwl_priv {
+ u32 disable_tx_power_cal;
+ struct work_struct run_time_calib_work;
+ struct timer_list statistics_periodic;
++ struct timer_list monitor_recover;
+ bool hw_ready;
+ /*For 3945*/
+ #define IWL_DEFAULT_TX_POWER 0x0F
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-tx.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-tx.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-tx.c.orig 2010-04-13 14:33:10.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-tx.c 2010-04-13 14:33:49.000000000 -0400
+@@ -288,6 +288,8 @@ static int iwl_queue_init(struct iwl_pri
+ q->high_mark = 2;
+
+ q->write_ptr = q->read_ptr = 0;
++ q->last_read_ptr = 0;
++ q->repeat_same_read_ptr = 0;
+
+ return 0;
+ }
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch
new file mode 100644
index 000000000..3da2dbbce
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch
@@ -0,0 +1,398 @@
+* drivers/net/wireless/iwlwifi/iwl-1000.c: Adjust deblobbed context.
+* drivers/net/wireless/iwlwifi/iwl-5000.c: Likewise.
+* drivers/net/wireless/iwlwifi/iwl-6000.c: Likewise.
+
+Backport of the following upstream commit...
+
+commit 3e4fb5faefb57824f2e42305b3d5907845af978c
+Author: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
+Date: Fri Jan 22 14:22:46 2010 -0800
+
+ iwlwifi: Tune radio to prevent unexpected behavior
+
+ We have seen the throughput dropped due to external noisy environment
+ and the radio is out of tune. There are lot of plcp errors indicating
+ this condition. Eventually the station can get de-authenticated by the
+ Access Point. By resetting and tuning the radio, the plcp errors are
+ reduced or eliminated and the throughput starts to rise.
+
+ To prevent unexpected behavior such as drop in throughput or deauthentication,
+ - The change provides the driver feature to monitor and tune the radio base on
+ the statistics notification from the uCode.
+ - It also allows the setting of the plcp error rate threshold via
+ the plcp_delta under debugfs interface.
+
+ Signed-off-by: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
+ Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
+ Signed-off-by: John W. Linville <linville@tuxdriver.com>
+
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-1000.c 2010-04-13 14:30:41.000000000 -0400
+@@ -174,6 +174,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl1000_bg_cfg = {
+@@ -200,6 +201,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .support_ct_kill_exit = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c 2010-04-13 14:30:41.000000000 -0400
+@@ -2828,6 +2828,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
+ .ht_greenfield_support = false,
+ .led_compensation = 64,
+ .broken_powersave = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ static struct iwl_cfg iwl3945_abg_cfg = {
+@@ -2845,6 +2846,7 @@ static struct iwl_cfg iwl3945_abg_cfg =
+ .ht_greenfield_support = false,
+ .led_compensation = 64,
+ .broken_powersave = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct pci_device_id iwl3945_hw_card_ids[] = {
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c 2010-04-13 14:30:41.000000000 -0400
+@@ -2247,6 +2247,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
+ .led_compensation = 61,
+ .chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ /* Module firmware */
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-5000.c 2010-04-13 14:30:41.000000000 -0400
+@@ -1606,6 +1606,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5100_bgn_cfg = {
+@@ -1630,6 +1631,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
+ .led_compensation = 51,
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5100_abg_cfg = {
+@@ -1652,6 +1654,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
+ .use_bsm = false,
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5100_agn_cfg = {
+@@ -1677,6 +1680,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5350_agn_cfg = {
+@@ -1702,6 +1706,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5150_agn_cfg = {
+@@ -1727,6 +1732,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
+ .use_rts_for_ht = true, /* use rts/cts protection */
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl5150_abg_cfg = {
+@@ -1749,6 +1755,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
+ .use_bsm = false,
+ .led_compensation = 51,
+ .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-6000.c 2010-04-13 14:32:09.000000000 -0400
+@@ -307,6 +307,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl6000i_2abg_cfg = {
+@@ -336,6 +337,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
+ .supports_idle = true,
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl6000i_2bg_cfg = {
+@@ -365,6 +367,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
+ .supports_idle = true,
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl6050_2agn_cfg = {
+@@ -396,6 +399,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DYNAMIC,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl6050_2abg_cfg = {
+@@ -425,6 +429,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
+ .supports_idle = true,
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ struct iwl_cfg iwl6000_3agn_cfg = {
+@@ -456,6 +461,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
+ .adv_thermal_throttle = true,
+ .support_ct_kill_exit = true,
+ .sm_ps_mode = WLAN_HT_CAP_SM_PS_DISABLED,
++ .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
+ };
+
+ /*(DEBLOBBED)*/
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-core.h 2010-04-13 14:30:41.000000000 -0400
+@@ -232,6 +232,8 @@ struct iwl_mod_params {
+ * @support_ct_kill_exit: support ct kill exit condition
+ * @sm_ps_mode: spatial multiplexing power save mode
+ * @support_wimax_coexist: support wimax/wifi co-exist
++ * @plcp_delta_threshold: plcp error rate threshold used to trigger
++ * radio tuning when there is a high receiving plcp error rate
+ *
+ * We enable the driver to be backward compatible wrt API version. The
+ * driver specifies which APIs it supports (with @ucode_api_max being the
+@@ -289,6 +291,7 @@ struct iwl_cfg {
+ bool support_ct_kill_exit;
+ u8 sm_ps_mode;
+ const bool support_wimax_coexist;
++ u8 plcp_delta_threshold;
+ };
+
+ /***************************
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debugfs.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debugfs.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debugfs.c 2010-04-13 14:30:41.000000000 -0400
+@@ -1866,6 +1866,47 @@ static ssize_t iwl_dbgfs_internal_scan_w
+ return count;
+ }
+
++static ssize_t iwl_dbgfs_plcp_delta_read(struct file *file,
++ char __user *user_buf,
++ size_t count, loff_t *ppos) {
++
++ struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
++ int pos = 0;
++ char buf[12];
++ const size_t bufsz = sizeof(buf);
++ ssize_t ret;
++
++ pos += scnprintf(buf + pos, bufsz - pos, "%u\n",
++ priv->cfg->plcp_delta_threshold);
++
++ ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
++ return ret;
++}
++
++static ssize_t iwl_dbgfs_plcp_delta_write(struct file *file,
++ const char __user *user_buf,
++ size_t count, loff_t *ppos) {
++
++ struct iwl_priv *priv = file->private_data;
++ char buf[8];
++ int buf_size;
++ int plcp;
++
++ memset(buf, 0, sizeof(buf));
++ buf_size = min(count, sizeof(buf) - 1);
++ if (copy_from_user(buf, user_buf, buf_size))
++ return -EFAULT;
++ if (sscanf(buf, "%d", &plcp) != 1)
++ return -EINVAL;
++ if ((plcp <= IWL_MAX_PLCP_ERR_THRESHOLD_MIN) ||
++ (plcp > IWL_MAX_PLCP_ERR_THRESHOLD_MAX))
++ priv->cfg->plcp_delta_threshold =
++ IWL_MAX_PLCP_ERR_THRESHOLD_DEF;
++ else
++ priv->cfg->plcp_delta_threshold = plcp;
++ return count;
++}
++
+ DEBUGFS_READ_FILE_OPS(rx_statistics);
+ DEBUGFS_READ_FILE_OPS(tx_statistics);
+ DEBUGFS_READ_WRITE_FILE_OPS(traffic_log);
+@@ -1881,6 +1922,7 @@ DEBUGFS_READ_FILE_OPS(power_save_status)
+ DEBUGFS_WRITE_FILE_OPS(clear_ucode_statistics);
+ DEBUGFS_WRITE_FILE_OPS(clear_traffic_statistics);
+ DEBUGFS_WRITE_FILE_OPS(internal_scan);
++DEBUGFS_READ_WRITE_FILE_OPS(plcp_delta);
+
+ /*
+ * Create the debugfs files and directories
+@@ -1932,6 +1974,7 @@ int iwl_dbgfs_register(struct iwl_priv *
+ DEBUGFS_ADD_FILE(clear_ucode_statistics, debug, S_IWUSR);
+ DEBUGFS_ADD_FILE(clear_traffic_statistics, debug, S_IWUSR);
+ DEBUGFS_ADD_FILE(internal_scan, debug, S_IWUSR);
++ DEBUGFS_ADD_FILE(plcp_delta, debug, S_IWUSR | S_IRUSR);
+ if ((priv->hw_rev & CSR_HW_REV_TYPE_MSK) != CSR_HW_REV_TYPE_3945) {
+ DEBUGFS_ADD_FILE(ucode_rx_stats, debug, S_IRUSR);
+ DEBUGFS_ADD_FILE(ucode_tx_stats, debug, S_IRUSR);
+@@ -1990,6 +2033,7 @@ void iwl_dbgfs_unregister(struct iwl_pri
+ DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.
+ file_clear_traffic_statistics);
+ DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.file_internal_scan);
++ DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.file_plcp_delta);
+ if ((priv->hw_rev & CSR_HW_REV_TYPE_MSK) != CSR_HW_REV_TYPE_3945) {
+ DEBUGFS_REMOVE(priv->dbgfs->dbgfs_debug_files.
+ file_ucode_rx_stats);
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debug.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debug.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debug.h.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-debug.h 2010-04-13 14:30:41.000000000 -0400
+@@ -110,6 +110,7 @@ struct iwl_debugfs {
+ struct dentry *file_clear_ucode_statistics;
+ struct dentry *file_clear_traffic_statistics;
+ struct dentry *file_internal_scan;
++ struct dentry *file_plcp_delta;
+ } dbgfs_debug_files;
+ u32 sram_offset;
+ u32 sram_len;
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-dev.h 2010-04-13 14:30:41.000000000 -0400
+@@ -984,6 +984,15 @@ struct iwl_switch_rxon {
+ __le16 channel;
+ };
+
++/*
++ * This is the threshold value of plcp error rate per 100mSecs. It is
++ * used to set and check for the validity of plcp_delta.
++ */
++#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN (0)
++#define IWL_MAX_PLCP_ERR_THRESHOLD_DEF (50)
++#define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF (100)
++#define IWL_MAX_PLCP_ERR_THRESHOLD_MAX (255)
++
+ struct iwl_priv {
+
+ /* ieee device used by generic ieee processing code */
+@@ -1012,6 +1021,9 @@ struct iwl_priv {
+ /* ucode beacon time */
+ u32 ucode_beacon_time;
+
++ /* storing the jiffies when the plcp error rate is received */
++ unsigned long plcp_jiffies;
++
+ /* we allocate array of iwl4965_channel_info for NIC's valid channels.
+ * Access via channel # using indirect index array */
+ struct iwl_channel_info *channel_info; /* channel info array */
+diff -up linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c.orig linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c
+--- linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c.orig 2010-04-13 14:30:36.000000000 -0400
++++ linux-2.6.33.noarch/drivers/net/wireless/iwlwifi/iwl-rx.c 2010-04-13 14:30:41.000000000 -0400
+@@ -593,11 +593,15 @@ static void iwl_accumulative_statistics(
+
+ #define REG_RECALIB_PERIOD (60)
+
++#define PLCP_MSG "plcp_err exceeded %u, %u, %u, %u, %u, %d, %u mSecs\n"
+ void iwl_rx_statistics(struct iwl_priv *priv,
+ struct iwl_rx_mem_buffer *rxb)
+ {
+ int change;
+ struct iwl_rx_packet *pkt = rxb_addr(rxb);
++ int combined_plcp_delta;
++ unsigned int plcp_msec;
++ unsigned long plcp_received_jiffies;
+
+ IWL_DEBUG_RX(priv, "Statistics notification received (%d vs %d).\n",
+ (int)sizeof(priv->statistics),
+@@ -612,6 +616,56 @@ void iwl_rx_statistics(struct iwl_priv *
+ #ifdef CONFIG_IWLWIFI_DEBUG
+ iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
+ #endif
++ /*
++ * check for plcp_err and trigger radio reset if it exceeds
++ * the plcp error threshold plcp_delta.
++ */
++ plcp_received_jiffies = jiffies;
++ plcp_msec = jiffies_to_msecs((long) plcp_received_jiffies -
++ (long) priv->plcp_jiffies);
++ priv->plcp_jiffies = plcp_received_jiffies;
++ /*
++ * check to make sure plcp_msec is not 0 to prevent division
++ * by zero.
++ */
++ if (plcp_msec) {
++ combined_plcp_delta =
++ (le32_to_cpu(pkt->u.stats.rx.ofdm.plcp_err) -
++ le32_to_cpu(priv->statistics.rx.ofdm.plcp_err)) +
++ (le32_to_cpu(pkt->u.stats.rx.ofdm_ht.plcp_err) -
++ le32_to_cpu(priv->statistics.rx.ofdm_ht.plcp_err));
++
++ if ((combined_plcp_delta > 0) &&
++ ((combined_plcp_delta * 100) / plcp_msec) >
++ priv->cfg->plcp_delta_threshold) {
++ /*
++ * if plcp_err exceed the threshold, the following
++ * data is printed in csv format:
++ * Text: plcp_err exceeded %d,
++ * Received ofdm.plcp_err,
++ * Current ofdm.plcp_err,
++ * Received ofdm_ht.plcp_err,
++ * Current ofdm_ht.plcp_err,
++ * combined_plcp_delta,
++ * plcp_msec
++ */
++ IWL_DEBUG_RADIO(priv, PLCP_MSG,
++ priv->cfg->plcp_delta_threshold,
++ le32_to_cpu(pkt->u.stats.rx.ofdm.plcp_err),
++ le32_to_cpu(priv->statistics.rx.ofdm.plcp_err),
++ le32_to_cpu(pkt->u.stats.rx.ofdm_ht.plcp_err),
++ le32_to_cpu(
++ priv->statistics.rx.ofdm_ht.plcp_err),
++ combined_plcp_delta, plcp_msec);
++
++ /*
++ * Reset the RF radio due to the high plcp
++ * error rate
++ */
++ iwl_force_rf_reset(priv);
++ }
++ }
++
+ memcpy(&priv->statistics, &pkt->u.stats, sizeof(priv->statistics));
+
+ set_bit(STATUS_STATISTICS, &priv->status);
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/kernel.spec b/freed-ora/current/F-13-2.6.33-branch/F-13/kernel.spec
new file mode 100644
index 000000000..0242e55ba
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/kernel.spec
@@ -0,0 +1,4660 @@
+# We have to override the new %%install behavior because, well... the kernel is special.
+%global __spec_install_pre %{___build_pre}
+
+Summary: The Linux kernel
+
+# For a stable, released kernel, released_kernel should be 1. For rawhide
+# and/or a kernel built from an rc or git snapshot, released_kernel should
+# be 0.
+%global released_kernel 1
+
+# Save original buildid for later if it's defined
+%if 0%{?buildid:1}
+%global orig_buildid %{buildid}
+%undefine buildid
+%endif
+
+###################################################################
+# Polite request for people who spin their own kernel rpms:
+# please modify the "buildid" define in a way that identifies
+# that the kernel isn't the stock distribution kernel, for example,
+# by setting the define to ".local" or ".bz123456". This will be
+# appended to the full kernel version.
+#
+# (Uncomment the '#' and both spaces below to set the buildid.)
+#
+# % define buildid .local
+###################################################################
+
+# buildid can also be specified on the rpmbuild command line
+# by adding --define="buildid .whatever". If both kinds of buildid
+# are specified they will be concatenated together.
+%if 0%{?orig_buildid:1}
+%if 0%{?buildid:1}
+%global srpm_buildid %{buildid}
+%define buildid %{srpm_buildid}%{orig_buildid}
+%else
+%define buildid %{orig_buildid}
+%endif
+%endif
+
+# fedora_build defines which build revision of this kernel version we're
+# building. Rather than incrementing forever, as with the prior versioning
+# setup, we set fedora_cvs_origin to the current cvs revision s/1.// of the
+# kernel spec when the kernel is rebased, so fedora_build automatically
+# works out to the offset from the rebase, so it doesn't get too ginormous.
+#
+# If you're building on a branch, the RCS revision will be something like
+# 1.1205.1.1. In this case we drop the initial 1, subtract fedora_cvs_origin
+# from the second number, and then append the rest of the RCS string as is.
+# Don't stare at the awk too long, you'll go blind.
+%define fedora_cvs_origin 1937
+%define fedora_cvs_revision() %2
+%global fedora_build %(echo %{fedora_cvs_origin}.%{fedora_cvs_revision $Revision: 1.2084 $} | awk -F . '{ OFS = "."; ORS = ""; print $3 - $1 ; i = 4 ; OFS = ""; while (i <= NF) { print ".", $i ; i++} }')
+
+# base_sublevel is the kernel version we're starting with and patching
+# on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
+# which yields a base_sublevel of 21.
+%define base_sublevel 33
+
+# librev starts empty, then 1, etc, as the linux-libre tarball
+# changes. This is only used to determine which tarball to use.
+#define librev
+
+# To be inserted between "patch" and "-2.6.".
+%define stablelibre -libre
+#define rcrevlibre -libre
+#define gitrevlibre -libre
+
+# libres (s for suffix) may be bumped for rebuilds in which patches
+# change but fedora_build doesn't. Make sure it starts with a dot.
+# It is appended after dist.
+#define libres .
+
+## If this is a released kernel ##
+%if 0%{?released_kernel}
+
+# Do we have a -stable update to apply?
+%define stable_update 6
+# Is it a -stable RC?
+%define stable_rc 0
+# Set rpm version accordingly
+%if 0%{?stable_update}
+%define stablerev .%{stable_update}
+%define stable_base %{stable_update}
+%if 0%{?stable_rc}
+# stable RCs are incremental patches, so we need the previous stable patch
+%define stable_base %(echo $((%{stable_update} - 1)))
+%endif
+%endif
+%define rpmversion 2.6.%{base_sublevel}%{?stablerev}
+
+## The not-released-kernel case ##
+%else
+# The next upstream release sublevel (base_sublevel+1)
+%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
+# The rc snapshot level
+%define rcrev 0
+# The git snapshot level
+%define gitrev 0
+# Set rpm version accordingly
+%define rpmversion 2.6.%{upstream_sublevel}
+%endif
+# Nb: The above rcrev and gitrev values automagically define Patch00 and Patch01 below.
+
+# What parts do we want to build? We must build at least one kernel.
+# These are the kernels that are built IF the architecture allows it.
+# All should default to 1 (enabled) and be flipped to 0 (disabled)
+# by later arch-specific checks.
+
+# The following build options are enabled by default.
+# Use either --without <opt> in your rpmbuild command or force values
+# to 0 in here to disable them.
+#
+# standard kernel
+%define with_up %{?_without_up: 0} %{?!_without_up: 1}
+# kernel-smp (only valid for ppc 32-bit)
+%define with_smp %{?_without_smp: 0} %{?!_without_smp: 1}
+# kernel-kdump
+%define with_kdump %{?_without_kdump: 0} %{?!_without_kdump: 1}
+# kernel-debug
+%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
+# kernel-doc
+%define with_doc %{?_without_doc: 0} %{?!_without_doc: 1}
+# kernel-headers
+%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1}
+# kernel-firmware
+%define with_firmware %{?_with_firmware: 1} %{?!_with_firmware: 0}
+# tools/perf
+%define with_perftool %{?_without_perftool: 0} %{?!_without_perftool: 1}
+# perf noarch subpkg
+%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1}
+# kernel-debuginfo
+%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
+# kernel-bootwrapper (for creating zImages from kernel + initrd)
+%define with_bootwrapper %{?_without_bootwrapper: 0} %{?!_without_bootwrapper: 1}
+# Want to build a the vsdo directories installed
+%define with_vdso_install %{?_without_vdso_install: 0} %{?!_without_vdso_install: 1}
+# Use dracut instead of mkinitrd for initrd image generation
+%define with_dracut %{?_without_dracut: 0} %{?!_without_dracut: 1}
+
+# Build the kernel-doc package, but don't fail the build if it botches.
+# Here "true" means "continue" and "false" means "fail the build".
+%if 0%{?released_kernel}
+%define doc_build_fail true
+%else
+%define doc_build_fail true
+%endif
+
+%define rawhide_skip_docs 0
+%if 0%{?rawhide_skip_docs}
+%define with_doc 0
+%endif
+
+# Additional options for user-friendly one-off kernel building:
+#
+# Only build the base kernel (--with baseonly):
+%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
+# Only build the smp kernel (--with smponly):
+%define with_smponly %{?_with_smponly: 1} %{?!_with_smponly: 0}
+# Only build the debug kernel (--with dbgonly):
+%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0}
+
+# should we do C=1 builds with sparse
+%define with_sparse %{?_with_sparse: 1} %{?!_with_sparse: 0}
+
+# Set debugbuildsenabled to 1 for production (build separate debug kernels)
+# and 0 for rawhide (all kernels are debug kernels).
+# See also 'make debug' and 'make release'.
+%define debugbuildsenabled 1
+
+# Want to build a vanilla kernel build without any non-upstream patches?
+# (well, almost none, we need nonintconfig for build purposes). Default to 0 (off).
+%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
+
+# pkg_release is what we'll fill in for the rpm Release: field
+%if 0%{?released_kernel}
+
+%if 0%{?stable_rc}
+%define stable_rctag .rc%{stable_rc}
+%endif
+%define pkg_release %{fedora_build}%{?stable_rctag}%{?buildid}%{?dist}%{?libres}
+
+%else
+
+# non-released_kernel
+%if 0%{?rcrev}
+%define rctag .rc%rcrev
+%else
+%define rctag .rc0
+%endif
+%if 0%{?gitrev}
+%define gittag .git%gitrev
+%else
+%define gittag .git0
+%endif
+%define pkg_release 0.%{fedora_build}%{?rctag}%{?gittag}%{?buildid}%{?dist}%{?libres}
+
+%endif
+
+# The kernel tarball/base version
+%define kversion 2.6.%{base_sublevel}
+
+%define make_target bzImage
+
+%define KVERREL %{version}-libre.%{release}.%{_target_cpu}
+%define hdrarch %_target_cpu
+%define asmarch %_target_cpu
+
+%if 0%{!?nopatches:1}
+%define nopatches 0
+%endif
+
+%if %{with_vanilla}
+%define nopatches 1
+%endif
+
+%if %{nopatches}
+%define with_bootwrapper 0
+%define variant -vanilla
+%else
+%define variant -libre
+%define variant_fedora -libre-fedora
+%endif
+
+%define using_upstream_branch 0
+%if 0%{?upstream_branch:1}
+%define stable_update 0
+%define using_upstream_branch 1
+%define variant -%{upstream_branch}%{?variant_fedora}
+%define pkg_release 0.%{fedora_build}%{upstream_branch_tag}%{?buildid}%{?dist}%{?libres}
+%endif
+
+%if !%{debugbuildsenabled}
+%define with_debug 0
+%endif
+
+%if !%{with_debuginfo}
+%define _enable_debug_packages 0
+%endif
+%define debuginfodir /usr/lib/debug
+
+# kernel-PAE is only built on i686.
+%ifarch i686
+%define with_pae 1
+%else
+%define with_pae 0
+%endif
+
+# if requested, only build base kernel
+%if %{with_baseonly}
+%define with_smp 0
+%define with_kdump 0
+%define with_debug 0
+%endif
+
+# if requested, only build smp kernel
+%if %{with_smponly}
+%define with_up 0
+%define with_kdump 0
+%define with_debug 0
+%endif
+
+# if requested, only build debug kernel
+%if %{with_dbgonly}
+%if %{debugbuildsenabled}
+%define with_up 0
+%endif
+%define with_smp 0
+%define with_pae 0
+%define with_xen 0
+%define with_kdump 0
+%define with_perftool 0
+%endif
+
+%define all_x86 i386 i686
+
+%if %{with_vdso_install}
+# These arches install vdso/ directories.
+%define vdso_arches %{all_x86} x86_64 ppc ppc64
+%endif
+
+# Overrides for generic default options
+
+# only ppc and alphav56 need separate smp kernels
+%ifnarch ppc alphaev56
+%define with_smp 0
+%endif
+
+%define with_kdump 0
+
+# don't do debug builds on anything but i686 and x86_64
+%ifnarch i686 x86_64
+%define with_debug 0
+%endif
+
+# only package docs noarch
+%ifnarch noarch
+%define with_doc 0
+%define with_perf 0
+%endif
+
+# don't build noarch kernels or headers (duh)
+%ifarch noarch
+%define with_up 0
+%define with_headers 0
+%define all_arch_configs kernel-%{version}-*.config
+%define with_firmware %{?_without_firmware: 0} %{?!_without_firmware: 1}
+%endif
+
+# bootwrapper is only on ppc
+%ifnarch ppc ppc64
+%define with_bootwrapper 0
+%endif
+
+# sparse blows up on ppc64 alpha and sparc64
+%ifarch ppc64 ppc alpha sparc64
+%define with_sparse 0
+%endif
+
+# Per-arch tweaks
+
+%ifarch %{all_x86}
+%define asmarch x86
+%define hdrarch i386
+%define all_arch_configs kernel-%{version}-i?86*.config
+%define image_install_path boot
+%define kernel_image arch/x86/boot/bzImage
+%endif
+
+%ifarch x86_64
+%define asmarch x86
+%define all_arch_configs kernel-%{version}-x86_64*.config
+%define image_install_path boot
+%define kernel_image arch/x86/boot/bzImage
+%endif
+
+%ifarch ppc64
+%define asmarch powerpc
+%define hdrarch powerpc
+%define all_arch_configs kernel-%{version}-ppc64*.config
+%define image_install_path boot
+%define make_target vmlinux
+%define kernel_image vmlinux
+%define kernel_image_elf 1
+%endif
+
+%ifarch s390x
+%define asmarch s390
+%define hdrarch s390
+%define all_arch_configs kernel-%{version}-s390x*.config
+%define image_install_path boot
+%define make_target image
+%define kernel_image arch/s390/boot/image
+%endif
+
+%ifarch sparc
+# We only build sparc headers since we dont support sparc32 hardware
+%endif
+
+%ifarch sparc64
+%define asmarch sparc
+%define all_arch_configs kernel-%{version}-sparc64*.config
+%define make_target image
+%define kernel_image arch/sparc/boot/image
+%define image_install_path boot
+%define with_perftool 0
+%endif
+
+%ifarch ppc
+%define asmarch powerpc
+%define hdrarch powerpc
+%define all_arch_configs kernel-%{version}-ppc{-,.}*config
+%define image_install_path boot
+%define make_target vmlinux
+%define kernel_image vmlinux
+%define kernel_image_elf 1
+%endif
+
+%ifarch ia64
+%define all_arch_configs kernel-%{version}-ia64*.config
+%define image_install_path boot/efi/EFI/redhat
+%define make_target compressed
+%define kernel_image vmlinux.gz
+%endif
+
+%ifarch alpha alphaev56
+%define all_arch_configs kernel-%{version}-alpha*.config
+%define image_install_path boot
+%define make_target vmlinux
+%define kernel_image vmlinux
+%endif
+
+%ifarch %{arm}
+%define all_arch_configs kernel-%{version}-arm*.config
+%define image_install_path boot
+%define hdrarch arm
+%define make_target vmlinux
+%define kernel_image vmlinux
+%endif
+
+%if %{nopatches}
+# XXX temporary until last vdso patches are upstream
+%define vdso_arches ppc ppc64
+%endif
+
+%if %{nopatches}%{using_upstream_branch}
+# Ignore unknown options in our config-* files.
+# Some options go with patches we're not applying.
+%define oldconfig_target loose_nonint_oldconfig
+%else
+%define oldconfig_target nonint_oldconfig
+%endif
+
+# To temporarily exclude an architecture from being built, add it to
+# %nobuildarches. Do _NOT_ use the ExclusiveArch: line, because if we
+# don't build kernel-headers then the new build system will no longer let
+# us use the previous build of that package -- it'll just be completely AWOL.
+# Which is a BadThing(tm).
+
+# We don't build a kernel on i386; we only do kernel-headers there,
+# and we no longer build for 31bit s390. Same for 32bit sparc and arm.
+%define nobuildarches i386 s390 sparc %{arm}
+
+%ifarch %nobuildarches
+%define with_up 0
+%define with_smp 0
+%define with_pae 0
+%define with_kdump 0
+%define with_debuginfo 0
+%define with_perftool 0
+%define _enable_debug_packages 0
+%endif
+
+%define with_pae_debug 0
+%if %{with_pae}
+%define with_pae_debug %{with_debug}
+%endif
+
+#
+# Three sets of minimum package version requirements in the form of Conflicts:
+# to versions below the minimum
+#
+
+#
+# First the general kernel 2.6 required versions as per
+# Documentation/Changes
+#
+%define kernel_dot_org_conflicts ppp < 2.4.3-3, isdn4k-utils < 3.2-32, nfs-utils < 1.0.7-12, e2fsprogs < 1.37-4, util-linux < 2.12, jfsutils < 1.1.7-2, reiserfs-utils < 3.6.19-2, xfsprogs < 2.6.13-4, procps < 3.2.5-6.3, oprofile < 0.9.1-2
+
+#
+# Then a series of requirements that are distribution specific, either
+# because we add patches for something, or the older versions have
+# problems with the newer kernel or lack certain things that make
+# integration in the distro harder than needed.
+#
+%define package_conflicts initscripts < 7.23, udev < 063-6, iptables < 1.3.2-1, ipw2200-firmware < 2.4, iwl4965-firmware < 228.57.2, selinux-policy-targeted < 1.25.3-14, squashfs-tools < 4.0, wireless-tools < 29-3
+
+#
+# The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
+#
+%define kernel_xen_conflicts glibc < 2.3.5-1, xen < 3.0.1
+
+%define kernel_PAE_obsoletes kernel-smp < 2.6.17, kernel-xen <= 2.6.27-0.2.rc0.git6.fc10
+%define kernel_PAE_provides kernel-xen = %{rpmversion}-%{pkg_release}
+
+%ifarch x86_64
+%define kernel_obsoletes kernel-xen <= 2.6.27-0.2.rc0.git6.fc10
+%define kernel_provides kernel-xen = %{rpmversion}-%{pkg_release}
+%endif
+
+# We moved the drm include files into kernel-headers, make sure there's
+# a recent enough libdrm-devel on the system that doesn't have those.
+%define kernel_headers_conflicts libdrm-devel < 2.4.0-0.15
+
+#
+# Packages that need to be installed before the kernel is, because the %post
+# scripts use them.
+#
+%define kernel_prereq fileutils, module-init-tools, initscripts >= 8.11.1-1, grubby >= 7.0.10-1
+%if %{with_dracut}
+%define initrd_prereq dracut >= 001-7
+%else
+%define initrd_prereq mkinitrd >= 6.0.61-1
+%endif
+
+#
+# This macro does requires, provides, conflicts, obsoletes for a kernel package.
+# %%kernel_reqprovconf <subpackage>
+# It uses any kernel_<subpackage>_conflicts and kernel_<subpackage>_obsoletes
+# macros defined above.
+#
+%define kernel_reqprovconf \
+Provides: kernel = %{rpmversion}-%{pkg_release}\
+Provides: kernel-libre = %{rpmversion}-%{pkg_release}\
+Provides: kernel-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:.%{1}}\
+Provides: kernel-libre-%{_target_cpu} = %{rpmversion}-%{pkg_release}%{?1:.%{1}}\
+Provides: kernel-drm = 4.3.0\
+Provides: kernel-drm-nouveau = 16\
+Provides: kernel-modeset = 1\
+Provides: kernel-uname-r = %{KVERREL}%{?1:.%{1}}\
+Provides: kernel-libre-uname-r = %{KVERREL}%{?1:.%{1}}\
+Requires(pre): %{kernel_prereq}\
+Requires(pre): %{initrd_prereq}\
+%if %{with_firmware}\
+Requires(pre): kernel-libre-firmware >= %{rpmversion}-%{pkg_release}\
+%endif\
+Requires(post): /sbin/new-kernel-pkg\
+Requires(preun): /sbin/new-kernel-pkg\
+Conflicts: %{kernel_dot_org_conflicts}\
+Conflicts: %{package_conflicts}\
+%{expand:%%{?kernel%{?1:_%{1}}_conflicts:Conflicts: %%{kernel%{?1:_%{1}}_conflicts}}}\
+%{expand:%%{?kernel%{?1:_%{1}}_obsoletes:Obsoletes: %%{kernel%{?1:_%{1}}_obsoletes}}}\
+%{expand:%%{?kernel%{?1:_%{1}}_provides:Provides: %%{kernel%{?1:_%{1}}_provides}}}\
+# We can't let RPM do the dependencies automatic because it'll then pick up\
+# a correct but undesirable perl dependency from the module headers which\
+# isn't required for the kernel proper to function\
+AutoReq: no\
+AutoProv: yes\
+%{nil}
+
+Name: kernel%{?variant}
+Group: System Environment/Kernel
+License: GPLv2
+URL: http://linux-libre.fsfla.org/
+Version: %{rpmversion}
+Release: %{pkg_release}
+# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
+# SET %%nobuildarches (ABOVE) INSTEAD
+ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ia64 sparc sparc64 s390 s390x alpha alphaev56 %{arm}
+ExclusiveOS: Linux
+
+%kernel_reqprovconf
+%ifarch x86_64 sparc64
+Obsoletes: kernel-smp
+%endif
+
+
+#
+# List the packages used during the kernel build
+#
+BuildRequires: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
+BuildRequires: bzip2, findutils, gzip, m4, perl, make >= 3.78, diffutils, gawk
+BuildRequires: gcc >= 3.4.2, binutils >= 2.12, redhat-rpm-config
+BuildRequires: net-tools
+BuildRequires: xmlto, asciidoc
+%if %{with_sparse}
+BuildRequires: sparse >= 0.4.1
+%endif
+%if %{with_perftool}
+BuildRequires: elfutils-libelf-devel zlib-devel binutils-devel libdwarf-devel
+%endif
+BuildConflicts: rhbuildsys(DiskFree) < 500Mb
+
+%define fancy_debuginfo 0
+%if %{with_debuginfo}
+%if 0%{?fedora} >= 8 || 0%{?rhel} >= 6
+%define fancy_debuginfo 1
+%endif
+%endif
+
+%if %{fancy_debuginfo}
+# Fancy new debuginfo generation introduced in Fedora 8.
+BuildRequires: rpm-build >= 4.4.2.1-4
+%define debuginfo_args --strict-build-id
+%endif
+
+Source0: http://linux-libre.fsfla.org/pub/linux-libre/freed-ora/src/linux-%{kversion}-libre%{?librev}.tar.bz2
+
+# For documentation purposes only.
+Source3: deblob-main
+Source4: deblob-%{kversion}
+Source5: deblob-check
+
+Source11: genkey
+Source14: find-provides
+Source15: merge.pl
+
+Source20: Makefile.config
+Source21: config-debug
+Source22: config-nodebug
+Source23: config-generic
+Source24: config-rhel-generic
+
+Source30: config-x86-generic
+Source31: config-i686-PAE
+
+Source40: config-x86_64-generic
+
+Source50: config-powerpc-generic
+Source51: config-powerpc32-generic
+Source52: config-powerpc32-smp
+Source53: config-powerpc64
+
+Source60: config-ia64-generic
+
+Source70: config-s390x
+
+Source90: config-sparc64-generic
+
+Source100: config-arm
+
+Source200: perf
+
+# Here should be only the patches up to the upstream canonical Linus tree.
+
+# For a stable release kernel
+%if 0%{?stable_update}
+%if 0%{?stable_base}
+%define stable_patch_00 patch%{?stablelibre}-2.6.%{base_sublevel}.%{stable_base}.bz2
+Patch00: %{stable_patch_00}
+%endif
+%if 0%{?stable_rc}
+%define stable_patch_01 patch%{?rcrevlibre}-2.6.%{base_sublevel}.%{stable_update}-rc%{stable_rc}.bz2
+Patch01: %{stable_patch_01}
+%endif
+
+# non-released_kernel case
+# These are automagically defined by the rcrev and gitrev values set up
+# near the top of this spec file.
+%else
+%if 0%{?rcrev}
+Patch00: patch%{?rcrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}.bz2
+%if 0%{?gitrev}
+Patch01: patch%{?gitrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.bz2
+%endif
+%else
+# pre-{base_sublevel+1}-rc1 case
+%if 0%{?gitrev}
+Patch00: patch%{?gitrevlibre}-2.6.%{base_sublevel}-git%{gitrev}.bz2
+%endif
+%endif
+%endif
+
+%if %{using_upstream_branch}
+### BRANCH PATCH ###
+%endif
+
+Patch02: git-linus.diff
+
+# we always need nonintconfig, even for -vanilla kernels
+Patch03: linux-2.6-build-nonintconfig.patch
+
+# we also need compile fixes for -vanilla
+Patch04: linux-2.6-compile-fixes.patch
+
+# build tweak for build ID magic, even for -vanilla
+Patch05: linux-2.6-makefile-after_link.patch
+
+Patch08: freedo.patch
+
+%if !%{nopatches}
+
+# revert upstream patches we get via other methods
+Patch09: linux-2.6-upstream-reverts.patch
+# Git trees.
+Patch10: git-cpufreq.patch
+Patch11: git-bluetooth.patch
+
+# Standalone patches
+Patch20: linux-2.6-hotfixes.patch
+
+Patch21: linux-2.6-tracehook.patch
+Patch22: linux-2.6-utrace.patch
+Patch23: linux-2.6-utrace-ptrace.patch
+
+Patch143: linux-2.6-g5-therm-shutdown.patch
+Patch144: linux-2.6-vio-modalias.patch
+
+Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
+
+Patch160: linux-2.6-execshield.patch
+
+Patch250: linux-2.6-debug-sizeof-structs.patch
+Patch260: linux-2.6-debug-nmi-timeout.patch
+Patch270: linux-2.6-debug-taint-vm.patch
+Patch300: linux-2.6-driver-level-usb-autosuspend.diff
+Patch303: linux-2.6-enable-btusb-autosuspend.patch
+Patch304: linux-2.6-usb-uvc-autosuspend.diff
+Patch305: linux-2.6-fix-btusb-autosuspend.patch
+Patch310: linux-2.6-usb-wwan-update.patch
+
+Patch340: linux-2.6-debug-vm-would-have-oomkilled.patch
+Patch360: linux-2.6-debug-always-inline-kzalloc.patch
+Patch380: linux-2.6-defaults-pci_no_msi.patch
+Patch381: linux-2.6-pciehp-update.patch
+Patch382: linux-2.6-defaults-pciehp.patch
+Patch383: linux-2.6-defaults-aspm.patch
+Patch390: linux-2.6-defaults-acpi-video.patch
+Patch391: linux-2.6-acpi-video-dos.patch
+Patch392: linux-2.6-acpi-video-export-edid.patch
+Patch450: linux-2.6-input-kill-stupid-messages.patch
+Patch451: linux-2.6-input-fix-toshiba-hotkeys.patch
+Patch452: linux-2.6.30-no-pcspkr-modalias.patch
+Patch453: thinkpad-acpi-add-x100e.patch
+Patch454: linux-2.6-input-hid-quirk-egalax.patch
+Patch455: linux-2.6-input-clickpad-support.patch
+Patch456: thinkpad-acpi-fix-backlight.patch
+Patch457: ntrig-backport.patch
+
+Patch460: linux-2.6-serial-460800.patch
+
+Patch470: die-floppy-die.patch
+
+Patch510: linux-2.6-silence-noise.patch
+Patch520: linux-2.6.30-hush-rom-warning.patch
+Patch530: linux-2.6-silence-fbcon-logo.patch
+Patch570: linux-2.6-selinux-mprotect-checks.patch
+Patch580: linux-2.6-sparc-selinux-mprotect-checks.patch
+Patch581: linux-2.6-selinux-avtab-size.patch
+
+Patch600: linux-2.6-acpi-sleep-live-sci-live.patch
+Patch601: linux-2.6-acpi-indirect_fan_control.patch
+
+Patch610: hda_intel-prealloc-4mb-dmabuffer.patch
+
+Patch670: linux-2.6-ata-quirk.patch
+
+Patch681: linux-2.6-mac80211-age-scan-results-on-resume.patch
+
+Patch800: linux-2.6-crash-driver.patch
+
+Patch1515: lirc-2.6.33.patch
+Patch1517: hdpvr-ir-enable.patch
+Patch1520: crystalhd-2.6.34-staging.patch
+
+# virt + ksm patches
+Patch1553: vhost_net-rollup.patch
+Patch1554: virt_console-rollup.patch
+Patch1555: virt_console-fix-race.patch
+Patch1556: virt_console-fix-fix-race.patch
+Patch1557: virt_console-rollup2.patch
+Patch1558: vhost_net-rollup2.patch
+# EC2 is running old xen hosts and wont upgrade so we have to work around it
+Patch1559: fix_xen_guest_on_old_EC2.patch
+
+
+
+# fbdev x86-64 primary fix
+Patch1700: linux-2.6-x86-64-fbdev-primary.patch
+
+Patch1800: drm-core-next.patch
+# fix modeline for 1024x768@85
+Patch1801: drm-1024x768-85.patch
+
+# radeon kms backport
+Patch1810: drm-radeon-evergreen.patch
+Patch1811: drm-radeon-firemv-pciid.patch
+Patch1812: drm-radeon-kms-fix-dual-link-dvi.patch
+Patch1813: drm-radeon-fix-rs600-tlb.patch
+Patch1814: drm-radeon-ss-fix.patch
+# nouveau fixes
+# - these not until 2.6.34
+Patch1815: drm-nouveau-abi16.patch
+Patch1816: drm-nouveau-updates.patch
+# requires code that hasn't been merged upstream yet
+Patch1817: drm-nouveau-acpi-edid-fallback.patch
+Patch1818: drm-nouveau-drm-fixed-header.patch
+
+# drm fixes
+Patch1819: drm-intel-big-hammer.patch
+# intel drm is all merged upstream
+Patch1824: drm-intel-next.patch
+# make sure the lvds comes back on lid open
+Patch1825: drm-intel-make-lvds-work.patch
+# disable iommu for gfx by default, just too broken
+Patch1827: linux-2.6-intel-iommu-igfx.patch
+# posted for upstream but not in an anholt tree yet
+Patch1828: drm-intel-gen5-dither.patch
+# thanks for the untested sdvo rework guys
+Patch1829: drm-intel-sdvo-fix.patch
+Patch1830: drm-intel-sdvo-fix-2.patch
+# from 2.6.33.5
+Patch1840: drm-i915-use-pipe_control-instruction-on-ironlake-and-sandy-bridge.patch
+Patch1841: drm-i915-fix-non-ironlake-965-class-crashes.patch
+Patch1842: drm-i915-fix-edp-panels.patch
+Patch1843: drm-i915-fix-hibernate-memory-corruption.patch
+
+Patch2100: linux-2.6-phylib-autoload.patch
+
+# linux1394 git patches
+Patch2200: linux-2.6-firewire-git-update.patch
+Patch2201: linux-2.6-firewire-git-pending.patch
+
+# Quiet boot fixes
+# silence the ACPI blacklist code
+Patch2802: linux-2.6-silence-acpi-blacklist.patch
+
+# Upstream V4L updates
+Patch2899: linux-2.6-v4l-dvb-fixes.patch
+Patch2900: linux-2.6-v4l-dvb-update.patch
+Patch2901: linux-2.6-v4l-dvb-experimental.patch
+
+# Rebase gspca to what will be in 2.6.34
+Patch2904: linux-2.6-v4l-dvb-rebase-gspca-to-latest.patch
+# Some cherry picked fixes from v4l-dvb-next
+Patch2905: linux-2.6-v4l-dvb-gspca-fixes.patch
+
+# kworld ub435-q/340u usb atsc tuner support (still lingering
+# in one of mkrufky's trees, pending push to v4l-dvb proper)
+Patch2906: linux-2.6-v4l-dvb-add-lgdt3304-support.patch
+Patch2907: linux-2.6-v4l-dvb-add-kworld-a340-support.patch
+
+# fs fixes
+Patch3000: linux-2.6-btrfs-update.patch
+Patch3002: btrfs-prohibit-a-operation-of-changing-acls-mask-when-noacl-mount-option-is-used.patch
+
+Patch3010: writeback-fix-wb-sync-none-writeback-from-umount.patch
+Patch3012: writeback-ensure-wb-sync-none-writeback-with-sb-pinned-is-sync.patch
+Patch3014: writeback-update-dirty-flags-in-two-steps.patch
+
+# NFSv4
+Patch3051: linux-2.6-nfs4-callback-hidden.patch
+
+Patch4000: linux-2.6-cpufreq-locking.patch
+
+# VIA Nano / VX8xx updates
+
+# patches headed upstream
+Patch12010: linux-2.6-dell-laptop-rfkill-fix.patch
+Patch12013: linux-2.6-rfkill-all.patch
+Patch12014: linux-2.6-x86-cfi_sections.patch
+
+Patch12015: add-appleir-driver.patch
+
+Patch12017: prevent-runtime-conntrack-changes.patch
+
+Patch12018: neuter_intel_microcode_load.patch
+
+Patch12019: linux-2.6-umh-refactor.patch
+
+# rhbz#533746
+Patch12021: ssb_check_for_sprom.patch
+
+# make p54pci usable on slower hardware
+Patch12103: linux-2.6-p54pci.patch
+
+Patch12200: acpi-ec-add-delay-before-write.patch
+
+# patches from Intel to address intermittent firmware failures with iwlagn
+Patch12404: iwlwifi_-add-function-to-reset_tune-radio-if-needed.patch
+Patch12405: iwlwifi_-Logic-to-control-how-frequent-radio-should-be-reset-if-needed.patch
+Patch12406: iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch
+Patch12407: iwlwifi_-multiple-force-reset-mode.patch
+Patch12409: iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch
+Patch12410: iwlwifi_-separated-time-check-for-different-type-of-force-reset.patch
+Patch12411: iwlwifi_-add-internal-short-scan-support-for-3945.patch
+Patch12412: iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch
+Patch12413: iwlwifi_-move-plcp-check-to-separated-function.patch
+Patch12414: iwlwifi_-Recover-TX-flow-failure.patch
+Patch12415: iwlwifi_-code-cleanup-for-connectivity-recovery.patch
+Patch12416: iwlwifi_-iwl_good_ack_health-only-apply-to-AGN-device.patch
+
+Patch12500: alsa-usbmixer-add-possibility-to-remap-dB-values.patch
+
+# fix possible corruption with ssd
+Patch12700: ext4-issue-discard-operation-before-releasing-blocks.patch
+
+Patch12820: ibmvscsi-fix-DMA-API-misuse.patch
+
+Patch12830: disable-i8042-check-on-apple-mac.patch
+
+Patch12850: crypto-aesni-kill-module_alias.patch
+
+# automatically mount debugfs when perf needs it
+Patch12851: perf-mount-debugfs-automatically.patch
+
+# iwlwifi: fix scan races
+Patch12910: iwlwifi-fix-scan-races.patch
+# iwlwifi: fix internal scan race
+Patch12911: iwlwifi-fix-internal-scan-race.patch
+# iwlwifi: recover_from_tx_stall
+Patch12912: iwlwifi-recover_from_tx_stall.patch
+
+Patch12913: iwlwifi-manage-QoS-by-mac-stack.patch
+Patch12914: mac80211-do-not-wipe-out-old-supported-rates.patch
+Patch12915: mac80211-explicitly-disable-enable-QoS.patch
+Patch12916: mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch
+
+# Disable rt20xx and rt35xx chipset support in rt2800pci and rt2800usb
+Patch13010: rt2x00-rt2800-Make-rt30xx-and-rt35xx-chipsets-configurable.patch
+
+# iwlwifi: cancel scan watchdog in iwl_bg_abort_scan
+Patch13020: iwlwifi-cancel-scan-watchdog-in-iwl_bg_abort_scan.patch
+
+Patch13030: sched-fix-over-scheduling-bug.patch
+Patch13040: ethtool-fix-buffer-overflow.patch
+Patch13050: x86-debug-clear-reserved-bits-of-dr6.patch
+Patch13060: x86-debug-send-sigtrap-for-user-icebp.patch
+
+%endif
+
+BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
+
+%description
+The kernel package contains the Linux kernel (vmlinuz), the core of any
+GNU/Linux operating system. The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.
+
+The kernel-libre package is the upstream kernel without the non-Free
+blobs it includes by default.
+
+%package doc
+Summary: Various documentation bits found in the kernel source
+Group: Documentation
+Provides: kernel-doc = %{rpmversion}-%{pkg_release}
+%description doc
+This package contains documentation files from the kernel
+source. Various bits of information about the Linux kernel and the
+device drivers shipped with it are documented in these files.
+
+You'll want to install this package if you need a reference to the
+options that can be passed to Linux kernel modules at load time.
+
+
+%package headers
+Summary: Header files for the Linux kernel for use by glibc
+Group: Development/System
+Obsoletes: glibc-kernheaders
+Provides: glibc-kernheaders = 3.0-46
+Provides: kernel-headers = %{rpmversion}-%{pkg_release}
+%description headers
+Kernel-headers includes the C header files that specify the interface
+between the Linux kernel and userspace libraries and programs. The
+header files define structures and constants that are needed for
+building most standard programs and are also needed for rebuilding the
+glibc package.
+
+%package firmware
+Summary: Firmware files used by the Linux kernel
+Group: Development/System
+License: GPLv2+
+Provides: kernel-firmware = %{rpmversion}-%{pkg_release}
+%description firmware
+Kernel-firmware includes firmware files required for some devices to
+operate.
+
+%package bootwrapper
+Summary: Boot wrapper files for generating combined kernel + initrd images
+Group: Development/System
+Requires: gzip
+%description bootwrapper
+Kernel-bootwrapper contains the wrapper code which makes bootable "zImage"
+files combining both kernel and initial ramdisk.
+
+%package debuginfo-common-%{_target_cpu}
+Summary: Kernel source files used by %{name}-debuginfo packages
+Group: Development/Debug
+%description debuginfo-common-%{_target_cpu}
+This package is required by %{name}-debuginfo subpackages.
+It provides the kernel source files common to all builds.
+
+%package -n perf-libre
+Provides: perf = %{rpmversion}-%{pkg_release}
+Summary: Performance monitoring for the Linux kernel
+Group: Development/System
+License: GPLv2
+Requires: libdwarf
+%description -n perf-libre
+This package provides the perf shell script, supporting documentation and
+required libraries for the perf tool shipped in each kernel image subpackage.
+
+#
+# This macro creates a kernel-<subpackage>-debuginfo package.
+# %%kernel_debuginfo_package <subpackage>
+#
+%define kernel_debuginfo_package() \
+%package %{?1:%{1}-}debuginfo\
+Summary: Debug information for package %{name}%{?1:-%{1}}\
+Group: Development/Debug\
+Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}\
+Provides: %{name}%{?1:-%{1}}-debuginfo-%{_target_cpu} = %{version}-%{release}\
+AutoReqProv: no\
+%description -n %{name}%{?1:-%{1}}-debuginfo\
+This package provides debug information for package %{name}%{?1:-%{1}}.\
+This is required to use SystemTap with %{name}%{?1:-%{1}}-%{KVERREL}.\
+%{expand:%%global debuginfo_args %{?debuginfo_args} -p '/.*/%%{KVERREL}%{?1:\.%{1}}/.*|/.*%%{KVERREL}%{?1:\.%{1}}(\.debug)?' -o debuginfo%{?1}.list}\
+%{nil}
+
+#
+# This macro creates a kernel-<subpackage>-devel package.
+# %%kernel_devel_package <subpackage> <pretty-name>
+#
+%define kernel_devel_package() \
+%package %{?1:%{1}-}devel\
+Summary: Development package for building kernel modules to match the %{?2:%{2} }kernel\
+Group: System Environment/Kernel\
+Provides: kernel%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\
+Provides: kernel-libre%{?1:-%{1}}-devel-%{_target_cpu} = %{version}-%{release}\
+Provides: kernel-devel-%{_target_cpu} = %{version}-%{release}%{?1:.%{1}}\
+Provides: kernel-libre-devel-%{_target_cpu} = %{version}-%{release}%{?1:.%{1}}\
+Provides: kernel-devel = %{version}-%{release}%{?1:.%{1}}\
+Provides: kernel-libre-devel = %{version}-%{release}%{?1:.%{1}}\
+Provides: kernel-devel-uname-r = %{KVERREL}%{?1:.%{1}}\
+Provides: kernel-libre-devel-uname-r = %{KVERREL}%{?1:.%{1}}\
+AutoReqProv: no\
+Requires(pre): /usr/bin/find\
+%description -n kernel%{?variant}%{?1:-%{1}}-devel\
+This package provides kernel headers and makefiles sufficient to build modules\
+against the %{?2:%{2} }kernel package.\
+%{nil}
+
+#
+# This macro creates a kernel-<subpackage> and its -devel and -debuginfo too.
+# %%define variant_summary The Linux kernel compiled for <configuration>
+# %%kernel_variant_package [-n <pretty-name>] <subpackage>
+#
+%define kernel_variant_package(n:) \
+%package %1\
+Summary: %{variant_summary}\
+Group: System Environment/Kernel\
+%kernel_reqprovconf\
+%{expand:%%kernel_devel_package %1 %{!?-n:%1}%{?-n:%{-n*}}}\
+%{expand:%%kernel_debuginfo_package %1}\
+%{nil}
+
+
+# First the auxiliary packages of the main kernel package.
+%kernel_devel_package
+%kernel_debuginfo_package
+
+
+# Now, each variant package.
+
+%define variant_summary The Linux kernel compiled for SMP machines
+%kernel_variant_package -n SMP smp
+%description smp
+This package includes a SMP version of the Linux kernel. It is
+required only on machines with two or more CPUs as well as machines with
+hyperthreading technology.
+
+The kernel-libre-smp package is the upstream kernel without the
+non-Free blobs it includes by default.
+
+Install the kernel-libre-smp package if your machine uses two or more
+CPUs.
+
+
+%define variant_summary The Linux kernel compiled for PAE capable machines
+%kernel_variant_package PAE
+%description PAE
+This package includes a version of the Linux kernel with support for up to
+64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
+The non-PAE kernel can only address up to 4GB of memory.
+Install the kernel-PAE package if your machine has more than 4GB of memory.
+
+The kernel-libre-PAE package is the upstream kernel without the
+non-Free blobs it includes by default.
+
+
+
+%define variant_summary The Linux kernel compiled with extra debugging enabled for PAE capable machines
+%kernel_variant_package PAEdebug
+Obsoletes: kernel-PAE-debug
+%description PAEdebug
+This package includes a version of the Linux kernel with support for up to
+64GB of high memory. It requires a CPU with Physical Address Extensions (PAE).
+The non-PAE kernel can only address up to 4GB of memory.
+Install the kernel-PAE package if your machine has more than 4GB of memory.
+
+This variant of the kernel has numerous debugging options enabled.
+It should only be installed when trying to gather additional information
+on kernel bugs, as some of these options impact performance noticably.
+
+The kernel-libre-PAEdebug package is the upstream kernel without the
+non-Free blobs it includes by default.
+
+
+%define variant_summary The Linux kernel compiled with extra debugging enabled
+%kernel_variant_package debug
+%description debug
+The kernel package contains the Linux kernel (vmlinuz), the core of any
+GNU/Linux operating system. The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.
+
+This variant of the kernel has numerous debugging options enabled.
+It should only be installed when trying to gather additional information
+on kernel bugs, as some of these options impact performance noticably.
+
+The kernel-libre-debug package is the upstream kernel without the
+non-Free blobs it includes by default.
+
+
+%define variant_summary A minimal Linux kernel compiled for crash dumps
+%kernel_variant_package kdump
+%description kdump
+This package includes a kdump version of the Linux kernel. It is
+required only on machines which will use the kexec-based kernel crash dump
+mechanism.
+
+The kernel-libre-kdump package is the upstream kernel without the
+non-Free blobs it includes by default.
+
+
+%prep
+# do a few sanity-checks for --with *only builds
+%if %{with_baseonly}
+%if !%{with_up}%{with_pae}
+echo "Cannot build --with baseonly, up build is disabled"
+exit 1
+%endif
+%endif
+
+%if %{with_smponly}
+%if !%{with_smp}
+echo "Cannot build --with smponly, smp build is disabled"
+exit 1
+%endif
+%endif
+
+# more sanity checking; do it quietly
+if [ "%{patches}" != "%%{patches}" ] ; then
+ for patch in %{patches} ; do
+ if [ ! -f $patch ] ; then
+ echo "ERROR: Patch ${patch##/*/} listed in specfile but is missing"
+ exit 1
+ fi
+ done
+fi 2>/dev/null
+
+patch_command='patch -p1 -F1 -s'
+ApplyPatch()
+{
+ local patch=$1
+ shift
+ if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
+ exit 1
+ fi
+%if !%{using_upstream_branch}
+ if ! egrep "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then
+ if [ "${patch:0:10}" != "patch-2.6." ] &&
+ [ "${patch:0:16}" != "patch-libre-2.6." ] ; then
+ echo "ERROR: Patch $patch not listed as a source patch in specfile"
+ exit 1
+ fi
+ fi 2>/dev/null
+ $RPM_SOURCE_DIR/deblob-check $RPM_SOURCE_DIR/$patch || exit 1
+%endif
+ case "$patch" in
+ *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
+ *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
+ *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;;
+ esac
+}
+
+# don't apply patch if it's empty
+ApplyOptionalPatch()
+{
+ local patch=$1
+ shift
+ if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
+ exit 1
+ fi
+ local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}')
+ if [ "$C" -gt 9 ]; then
+ ApplyPatch $patch ${1+"$@"}
+ fi
+}
+
+# we don't want a .config file when building firmware: it just confuses the build system
+%define build_firmware \
+ mv .config .config.firmware_save \
+ make INSTALL_FW_PATH=$RPM_BUILD_ROOT/lib/firmware firmware_install \
+ mv .config.firmware_save .config
+
+# First we unpack the kernel tarball.
+# If this isn't the first make prep, we use links to the existing clean tarball
+# which speeds things up quite a bit.
+
+# Update to latest upstream.
+%if 0%{?released_kernel}
+%define vanillaversion 2.6.%{base_sublevel}
+# non-released_kernel case
+%else
+%if 0%{?rcrev}
+%define vanillaversion 2.6.%{upstream_sublevel}-rc%{rcrev}
+%if 0%{?gitrev}
+%define vanillaversion 2.6.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}
+%endif
+%else
+# pre-{base_sublevel+1}-rc1 case
+%if 0%{?gitrev}
+%define vanillaversion 2.6.%{base_sublevel}-git%{gitrev}
+%else
+%define vanillaversion 2.6.%{base_sublevel}
+%endif
+%endif
+%endif
+
+# We can share hardlinked source trees by putting a list of
+# directory names of the CVS checkouts that we want to share
+# with in .shared-srctree. (Full pathnames are required.)
+[ -f .shared-srctree ] && sharedirs=$(cat .shared-srctree)
+
+if [ ! -d kernel-%{kversion}/vanilla-%{vanillaversion} ]; then
+
+ if [ -d kernel-%{kversion}/vanilla-%{kversion} ]; then
+
+ cd kernel-%{kversion}
+
+ # Any vanilla-* directories other than the base one are stale.
+ for dir in vanilla-*; do
+ [ "$dir" = vanilla-%{kversion} ] || rm -rf $dir &
+ done
+
+ else
+
+ # Ok, first time we do a make prep.
+ rm -f pax_global_header
+ for sharedir in $sharedirs ; do
+ if [[ ! -z $sharedir && -d $sharedir/kernel-%{kversion}/vanilla-%{kversion} ]] ; then
+ break
+ fi
+ done
+ if [[ ! -z $sharedir && -d $sharedir/kernel-%{kversion}/vanilla-%{kversion} ]] ; then
+%setup -q -n kernel-%{kversion} -c -T
+ cp -rl $sharedir/kernel-%{kversion}/vanilla-%{kversion} .
+ else
+%setup -q -n kernel-%{kversion} -c
+ mv linux-%{kversion} vanilla-%{kversion}
+ fi
+
+ fi
+
+perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION =/" vanilla-%{kversion}/Makefile
+
+%if "%{kversion}" != "%{vanillaversion}"
+
+ for sharedir in $sharedirs ; do
+ if [[ ! -z $sharedir && -d $sharedir/kernel-%{kversion}/vanilla-%{vanillaversion} ]] ; then
+ break
+ fi
+ done
+ if [[ ! -z $sharedir && -d $sharedir/kernel-%{kversion}/vanilla-%{vanillaversion} ]] ; then
+
+ cp -rl $sharedir/kernel-%{kversion}/vanilla-%{vanillaversion} .
+
+ else
+
+ cp -rl vanilla-%{kversion} vanilla-%{vanillaversion}
+ cd vanilla-%{vanillaversion}
+
+# Update vanilla to the latest upstream.
+# (non-released_kernel case only)
+%if 0%{?rcrev}
+ ApplyPatch patch%{?rcrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}.bz2
+%if 0%{?gitrev}
+ ApplyPatch patch%{?gitrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.bz2
+%endif
+%else
+# pre-{base_sublevel+1}-rc1 case
+%if 0%{?gitrev}
+ ApplyPatch patch%{?gitrevlibre}-2.6.%{base_sublevel}-git%{gitrev}.bz2
+%endif
+%endif
+
+ cd ..
+
+ fi
+
+%endif
+
+else
+ # We already have a vanilla dir.
+ cd kernel-%{kversion}
+fi
+
+if [ -d linux-%{kversion}.%{_target_cpu} ]; then
+ # Just in case we ctrl-c'd a prep already
+ rm -rf deleteme.%{_target_cpu}
+ # Move away the stale away, and delete in background.
+ mv linux-%{kversion}.%{_target_cpu} deleteme.%{_target_cpu}
+ rm -rf deleteme.%{_target_cpu} &
+fi
+
+cp -rl vanilla-%{vanillaversion} linux-%{kversion}.%{_target_cpu}
+
+cd linux-%{kversion}.%{_target_cpu}
+
+# released_kernel with possible stable updates
+%if 0%{?stable_base}
+ApplyPatch %{stable_patch_00}
+%endif
+%if 0%{?stable_rc}
+ApplyPatch %{stable_patch_01}
+%endif
+
+%if %{using_upstream_branch}
+### BRANCH APPLY ###
+%endif
+
+# Drop some necessary files from the source dir into the buildroot
+cp $RPM_SOURCE_DIR/config-* .
+cp %{SOURCE15} .
+
+# Dynamically generate kernel .config files from config-* files
+make -f %{SOURCE20} VERSION=%{version} configs
+
+#if a rhel kernel, apply the rhel config options
+%if 0%{?rhel}
+ for i in %{all_arch_configs}
+ do
+ mv $i $i.tmp
+ ./merge.pl config-rhel-generic $i.tmp > $i
+ rm $i.tmp
+ done
+%endif
+
+ApplyOptionalPatch git-linus.diff
+
+# This patch adds a "make nonint_oldconfig" which is non-interactive and
+# also gives a list of missing options at the end. Useful for automated
+# builds (as used in the buildsystem).
+ApplyPatch linux-2.6-build-nonintconfig.patch
+
+ApplyPatch linux-2.6-makefile-after_link.patch
+
+#
+# misc small stuff to make things compile
+#
+ApplyOptionalPatch linux-2.6-compile-fixes.patch
+
+# Freedo logo.
+ApplyPatch freedo.patch
+
+%if !%{nopatches}
+
+# revert patches from upstream that conflict or that we get via other means
+ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
+
+#ApplyPatch git-cpufreq.patch
+ApplyPatch git-bluetooth.patch
+
+ApplyPatch linux-2.6-hotfixes.patch
+
+# Roland's utrace ptrace replacement.
+ApplyPatch linux-2.6-tracehook.patch
+ApplyPatch linux-2.6-utrace.patch
+ApplyPatch linux-2.6-utrace-ptrace.patch
+
+# Architecture patches
+# x86(-64)
+ApplyPatch linux-2.6-dell-laptop-rfkill-fix.patch
+ApplyPatch linux-2.6-x86-cfi_sections.patch
+
+#
+# Intel IOMMU
+#
+
+#
+# PowerPC
+#
+### NOT (YET) UPSTREAM:
+# Alleviate G5 thermal shutdown problems
+ApplyPatch linux-2.6-g5-therm-shutdown.patch
+# Provide modalias in sysfs for vio devices
+ApplyPatch linux-2.6-vio-modalias.patch
+
+#
+# SPARC64
+#
+ApplyPatch linux-2.6.29-sparc-IOC_TYPECHECK.patch
+
+#
+# Exec shield
+#
+ApplyPatch linux-2.6-execshield.patch
+
+#
+# bugfixes to drivers and filesystems
+#
+
+# ext4
+
+# xfs
+
+# btrfs
+ApplyPatch linux-2.6-btrfs-update.patch
+
+ApplyPatch btrfs-prohibit-a-operation-of-changing-acls-mask-when-noacl-mount-option-is-used.patch
+
+
+# Sort out umount versus sync penalty: rhbz#588930
+#ApplyPatch writeback-fix-wb-sync-none-writeback-from-umount.patch
+# additional fixes for writeback (#593669)
+#ApplyPatch writeback-ensure-wb-sync-none-writeback-with-sb-pinned-is-sync.patch
+#ApplyPatch writeback-update-dirty-flags-in-two-steps.patch
+
+# eCryptfs
+
+# NFSv4
+ApplyPatch linux-2.6-nfs4-callback-hidden.patch
+
+# CPUFREQ
+ApplyPatch linux-2.6-cpufreq-locking.patch
+
+# USB
+ApplyPatch linux-2.6-driver-level-usb-autosuspend.diff
+ApplyPatch linux-2.6-enable-btusb-autosuspend.patch
+ApplyPatch linux-2.6-usb-uvc-autosuspend.diff
+#ApplyPatch linux-2.6-fix-btusb-autosuspend.patch
+ApplyPatch linux-2.6-usb-wwan-update.patch
+
+# WMI
+
+# ACPI
+ApplyPatch linux-2.6-defaults-acpi-video.patch
+ApplyPatch linux-2.6-acpi-video-dos.patch
+ApplyPatch linux-2.6-acpi-video-export-edid.patch
+
+ApplyPatch acpi-ec-add-delay-before-write.patch
+
+# Various low-impact patches to aid debugging.
+ApplyPatch linux-2.6-debug-sizeof-structs.patch
+ApplyPatch linux-2.6-debug-nmi-timeout.patch
+ApplyPatch linux-2.6-debug-taint-vm.patch
+ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
+ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
+
+#
+# PCI
+#
+# disable message signaled interrupts
+ApplyPatch linux-2.6-defaults-pci_no_msi.patch
+# update the pciehp driver
+#ApplyPatch linux-2.6-pciehp-update.patch
+# default to enabling passively listening for hotplug events
+#ApplyPatch linux-2.6-defaults-pciehp.patch
+# enable ASPM by default on hardware we expect to work
+ApplyPatch linux-2.6-defaults-aspm.patch
+
+#
+# SCSI Bits.
+#
+
+# ACPI
+ApplyPatch linux-2.6-acpi-sleep-live-sci-live.patch
+ApplyPatch linux-2.6-acpi-indirect_fan_control.patch
+
+# ALSA
+ApplyPatch hda_intel-prealloc-4mb-dmabuffer.patch
+
+# Networking
+
+# Misc fixes
+# The input layer spews crap no-one cares about.
+ApplyPatch linux-2.6-input-kill-stupid-messages.patch
+
+# stop floppy.ko from autoloading during udev...
+ApplyPatch die-floppy-die.patch
+
+# Get away from having to poll Toshibas
+#ApplyPatch linux-2.6-input-fix-toshiba-hotkeys.patch
+
+ApplyPatch linux-2.6.30-no-pcspkr-modalias.patch
+
+ApplyPatch linux-2.6-input-hid-quirk-egalax.patch
+ApplyPatch linux-2.6-input-clickpad-support.patch
+ApplyPatch thinkpad-acpi-add-x100e.patch
+ApplyPatch thinkpad-acpi-fix-backlight.patch
+ApplyPatch ntrig-backport.patch
+
+# Allow to use 480600 baud on 16C950 UARTs
+ApplyPatch linux-2.6-serial-460800.patch
+
+# Silence some useless messages that still get printed with 'quiet'
+ApplyPatch linux-2.6-silence-noise.patch
+ApplyPatch linux-2.6.30-hush-rom-warning.patch
+
+# Make fbcon not show the penguins with 'quiet'
+ApplyPatch linux-2.6-silence-fbcon-logo.patch
+
+# Fix the SELinux mprotect checks on executable mappings
+#ApplyPatch linux-2.6-selinux-mprotect-checks.patch
+# Fix SELinux for sparc
+#ApplyPatch linux-2.6-sparc-selinux-mprotect-checks.patch
+# Shirk size of memory allocation required to load policy. In 2.6.34
+ApplyPatch linux-2.6-selinux-avtab-size.patch
+
+# Changes to upstream defaults.
+
+
+# ia64 ata quirk
+ApplyPatch linux-2.6-ata-quirk.patch
+
+# back-port scan result aging patches
+#ApplyPatch linux-2.6-mac80211-age-scan-results-on-resume.patch
+
+# /dev/crash driver.
+ApplyPatch linux-2.6-crash-driver.patch
+
+# http://www.lirc.org/
+ApplyPatch lirc-2.6.33.patch
+# enable IR receiver on Hauppauge HD PVR (v4l-dvb merge pending)
+ApplyPatch hdpvr-ir-enable.patch
+# Broadcom Crystal HD video decoder
+ApplyPatch crystalhd-2.6.34-staging.patch
+
+# Assorted Virt Fixes
+ApplyPatch vhost_net-rollup.patch
+ApplyPatch virt_console-rollup.patch
+ApplyPatch virt_console-fix-race.patch
+ApplyPatch virt_console-fix-fix-race.patch
+ApplyPatch virt_console-rollup2.patch
+ApplyPatch vhost_net-rollup2.patch
+ApplyPatch fix_xen_guest_on_old_EC2.patch
+
+# fix x86-64 fbdev primary GPU selection
+ApplyPatch linux-2.6-x86-64-fbdev-primary.patch
+
+ApplyPatch drm-core-next.patch
+ApplyPatch drm-1024x768-85.patch
+
+# Nouveau DRM + drm fixes
+ApplyPatch drm-radeon-evergreen.patch
+ApplyPatch drm-radeon-firemv-pciid.patch
+ApplyPatch drm-radeon-kms-fix-dual-link-dvi.patch
+ApplyPatch drm-radeon-fix-rs600-tlb.patch
+ApplyPatch drm-radeon-ss-fix.patch
+ApplyPatch drm-nouveau-abi16.patch
+ApplyPatch drm-nouveau-updates.patch
+ApplyPatch drm-nouveau-acpi-edid-fallback.patch
+ApplyPatch drm-nouveau-drm-fixed-header.patch
+# pm broken on my thinkpad t60p - airlied
+ApplyPatch drm-intel-big-hammer.patch
+ApplyOptionalPatch drm-intel-next.patch
+ApplyPatch drm-intel-make-lvds-work.patch
+ApplyPatch linux-2.6-intel-iommu-igfx.patch
+ApplyPatch drm-intel-gen5-dither.patch
+ApplyPatch drm-intel-sdvo-fix.patch
+ApplyPatch drm-intel-sdvo-fix-2.patch
+# from 2.6.33.5
+ApplyPatch drm-i915-use-pipe_control-instruction-on-ironlake-and-sandy-bridge.patch
+ApplyPatch drm-i915-fix-non-ironlake-965-class-crashes.patch
+ApplyPatch drm-i915-fix-edp-panels.patch
+ApplyPatch drm-i915-fix-hibernate-memory-corruption.patch
+
+ApplyPatch linux-2.6-phylib-autoload.patch
+
+# linux1394 git patches
+#ApplyPatch linux-2.6-firewire-git-update.patch
+#ApplyOptionalPatch linux-2.6-firewire-git-pending.patch
+
+# silence the ACPI blacklist code
+ApplyPatch linux-2.6-silence-acpi-blacklist.patch
+
+# V4L/DVB updates/fixes/experimental drivers
+# Upstream trees, applied only if non-empty
+ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
+ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
+ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
+
+ApplyPatch linux-2.6-v4l-dvb-rebase-gspca-to-latest.patch
+ApplyPatch linux-2.6-v4l-dvb-gspca-fixes.patch
+
+ApplyPatch linux-2.6-v4l-dvb-add-lgdt3304-support.patch
+ApplyPatch linux-2.6-v4l-dvb-add-kworld-a340-support.patch
+
+# Patches headed upstream
+ApplyPatch linux-2.6-rfkill-all.patch
+
+# appleir remote controller
+ApplyPatch add-appleir-driver.patch
+
+ApplyPatch neuter_intel_microcode_load.patch
+
+# Refactor UserModeHelper code & satisfy abrt recursion check request
+ApplyPatch linux-2.6-umh-refactor.patch
+
+ApplyPatch alsa-usbmixer-add-possibility-to-remap-dB-values.patch
+
+# rhbz#533746
+ApplyPatch ssb_check_for_sprom.patch
+
+# make p54pci usable on slower hardware
+ApplyPatch linux-2.6-p54pci.patch
+
+# patches from Intel to address intermittent firmware failures with iwlagn
+ApplyPatch iwlwifi_-add-function-to-reset_tune-radio-if-needed.patch
+ApplyPatch iwlwifi_-Logic-to-control-how-frequent-radio-should-be-reset-if-needed.patch
+ApplyPatch iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch
+ApplyPatch iwlwifi_-multiple-force-reset-mode.patch
+ApplyPatch iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch
+ApplyPatch iwlwifi_-separated-time-check-for-different-type-of-force-reset.patch
+ApplyPatch iwlwifi_-add-internal-short-scan-support-for-3945.patch
+ApplyPatch iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch
+ApplyPatch iwlwifi_-move-plcp-check-to-separated-function.patch
+ApplyPatch iwlwifi_-Recover-TX-flow-failure.patch
+ApplyPatch iwlwifi_-code-cleanup-for-connectivity-recovery.patch
+ApplyPatch iwlwifi_-iwl_good_ack_health-only-apply-to-AGN-device.patch
+
+# fix possible corruption with ssd
+ApplyPatch ext4-issue-discard-operation-before-releasing-blocks.patch
+
+ApplyPatch ibmvscsi-fix-DMA-API-misuse.patch
+
+ApplyPatch disable-i8042-check-on-apple-mac.patch
+
+ApplyPatch crypto-aesni-kill-module_alias.patch
+
+# automagically mount debugfs for perf
+ApplyPatch perf-mount-debugfs-automatically.patch
+
+# iwlwifi: fix scan races
+ApplyPatch iwlwifi-fix-scan-races.patch
+# iwlwifi: fix internal scan race
+ApplyPatch iwlwifi-fix-internal-scan-race.patch
+# iwlwifi: recover_from_tx_stall
+ApplyPatch iwlwifi-recover_from_tx_stall.patch
+
+# mac80211/iwlwifi fix connections to some APs (rhbz#558002)
+ApplyPatch mac80211-explicitly-disable-enable-QoS.patch
+ApplyPatch iwlwifi-manage-QoS-by-mac-stack.patch
+ApplyPatch mac80211-do-not-wipe-out-old-supported-rates.patch
+ApplyPatch mac80211-fix-supported-rates-IE-if-AP-doesnt-give-us-its-rates.patch
+
+# Disable rt20xx and rt35xx chipset support in rt2800pci and rt2800usb
+ApplyPatch rt2x00-rt2800-Make-rt30xx-and-rt35xx-chipsets-configurable.patch
+
+# iwlwifi: cancel scan watchdog in iwl_bg_abort_scan
+ApplyPatch iwlwifi-cancel-scan-watchdog-in-iwl_bg_abort_scan.patch
+
+# fix performance problem with CGROUPS
+ApplyPatch sched-fix-over-scheduling-bug.patch
+
+# CVE-2010-2478
+ApplyPatch ethtool-fix-buffer-overflow.patch
+
+# BZ#609548
+ApplyPatch x86-debug-clear-reserved-bits-of-dr6.patch
+ApplyPatch x86-debug-send-sigtrap-for-user-icebp.patch
+
+# END OF PATCH APPLICATIONS
+
+%endif
+
+# Any further pre-build tree manipulations happen here.
+
+chmod +x scripts/checkpatch.pl
+
+# only deal with configs if we are going to build for the arch
+%ifnarch %nobuildarches
+
+mkdir configs
+
+# Remove configs not for the buildarch
+for cfg in kernel-%{version}-*.config; do
+ if [ `echo %{all_arch_configs} | grep -c $cfg` -eq 0 ]; then
+ rm -f $cfg
+ fi
+done
+
+%if !%{debugbuildsenabled}
+rm -f kernel-%{version}-*debug.config
+%endif
+
+# now run oldconfig over all the config files
+for i in *.config
+do
+ mv $i .config
+ Arch=`head -1 .config | cut -b 3-`
+ make ARCH=$Arch %{oldconfig_target} > /dev/null
+ echo "# $Arch" > configs/$i
+ cat .config >> configs/$i
+done
+# end of kernel config
+%endif
+
+# get rid of unwanted files resulting from patch fuzz
+find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
+
+cd ..
+
+###
+### build
+###
+%build
+
+%if %{with_sparse}
+%define sparse_mflags C=1
+%endif
+
+%if %{fancy_debuginfo}
+# This override tweaks the kernel makefiles so that we run debugedit on an
+# object before embedding it. When we later run find-debuginfo.sh, it will
+# run debugedit again. The edits it does change the build ID bits embedded
+# in the stripped object, but repeating debugedit is a no-op. We do it
+# beforehand to get the proper final build ID bits into the embedded image.
+# This affects the vDSO images in vmlinux, and the vmlinux image in bzImage.
+export AFTER_LINK=\
+'sh -xc "/usr/lib/rpm/debugedit -b $$RPM_BUILD_DIR -d /usr/src/debug \
+ -i $@ > $@.id"'
+%endif
+
+cp_vmlinux()
+{
+ eu-strip --remove-comment -o "$2" "$1"
+}
+
+BuildKernel() {
+ MakeTarget=$1
+ KernelImage=$2
+ Flavour=$3
+ InstallName=${4:-vmlinuz}
+
+ # Pick the right config file for the kernel we're building
+ Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config
+ DevelDir=/usr/src/kernels/%{KVERREL}${Flavour:+.${Flavour}}
+
+ # When the bootable image is just the ELF kernel, strip it.
+ # We already copy the unstripped file into the debuginfo package.
+ if [ "$KernelImage" = vmlinux ]; then
+ CopyKernel=cp_vmlinux
+ else
+ CopyKernel=cp
+ fi
+
+ KernelVer=%{version}-libre.%{release}.%{_target_cpu}${Flavour:+.${Flavour}}
+ echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}...
+
+ # make sure EXTRAVERSION says what we want it to say
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?stablerev}-libre.%{release}.%{_target_cpu}${Flavour:+.${Flavour}}/" Makefile
+
+ # if pre-rc1 devel kernel, must fix up SUBLEVEL for our versioning scheme
+ %if !0%{?rcrev}
+ %if 0%{?gitrev}
+ perl -p -i -e 's/^SUBLEVEL.*/SUBLEVEL = %{upstream_sublevel}/' Makefile
+ %endif
+ %endif
+
+ # and now to start the build process
+
+ make -s mrproper
+ cp configs/$Config .config
+
+ Arch=`head -1 .config | cut -b 3-`
+ echo USING ARCH=$Arch
+
+ make -s ARCH=$Arch %{oldconfig_target} > /dev/null
+ make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
+ make -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
+
+%if %{with_perftool}
+ pushd tools/perf
+# make sure the scripts are executable... won't be in tarball until 2.6.31 :/
+ chmod +x util/generate-cmdlist.sh util/PERF-VERSION-GEN
+ make -s V=1 NO_DEMANGLE=1 %{?_smp_mflags} perf
+ mkdir -p $RPM_BUILD_ROOT/usr/libexec/
+ install -m 755 perf $RPM_BUILD_ROOT/usr/libexec/perf.$KernelVer
+ popd
+%endif
+
+ # Start installing the results
+%if %{with_debuginfo}
+ mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/boot
+ mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/%{image_install_path}
+%endif
+ mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
+ install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
+ install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
+%if %{with_dracut}
+ # We estimate the size of the initramfs because rpm needs to take this size
+ # into consideration when performing disk space calculations. (See bz #530778)
+ dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initramfs-$KernelVer.img bs=1M count=20
+%else
+ dd if=/dev/zero of=$RPM_BUILD_ROOT/boot/initrd-$KernelVer.img bs=1M count=5
+%endif
+ if [ -f arch/$Arch/boot/zImage.stub ]; then
+ cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
+ fi
+ $CopyKernel $KernelImage \
+ $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
+ chmod 755 $RPM_BUILD_ROOT/%{image_install_path}/$InstallName-$KernelVer
+
+ mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
+ # Override $(mod-fw) because we don't want it to install any firmware
+ # We'll do that ourselves with 'make firmware_install'
+ make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
+
+%ifarch %{vdso_arches}
+ make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
+ if grep '^CONFIG_XEN=y$' .config >/dev/null; then
+ echo > ldconfig-kernel.conf "\
+# This directive teaches ldconfig to search in nosegneg subdirectories
+# and cache the DSOs there with extra bit 0 set in their hwcap match
+# fields. In Xen guest kernels, the vDSO tells the dynamic linker to
+# search in nosegneg subdirectories and to match this extra hwcap bit
+# in the ld.so.cache file.
+hwcap 0 nosegneg"
+ fi
+ if [ ! -s ldconfig-kernel.conf ]; then
+ echo > ldconfig-kernel.conf "\
+# Placeholder file, no vDSO hwcap entries used in this kernel."
+ fi
+ %{__install} -D -m 444 ldconfig-kernel.conf \
+ $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernel-$KernelVer.conf
+%endif
+
+ # And save the headers/makefiles etc for building modules against
+ #
+ # This all looks scary, but the end result is supposed to be:
+ # * all arch relevant include/ files
+ # * all Makefile/Kconfig files
+ # * all script/ files
+
+ rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
+ mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
+ # dirs for additional modules per module-init-tools, kbuild/modules.txt
+ mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
+ mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
+ mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/weak-updates
+ # first copy everything
+ cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ cp System.map $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ if [ -s Module.markers ]; then
+ cp Module.markers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ fi
+ # then drop all but the needed Makefiles/Kconfig files
+ rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
+ rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
+ rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+ cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+ if [ -d arch/$Arch/scripts ]; then
+ cp -a arch/$Arch/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
+ fi
+ if [ -f arch/$Arch/*lds ]; then
+ cp -a arch/$Arch/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
+ fi
+ rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
+ rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
+%ifarch ppc
+ cp -a --parents arch/powerpc/lib/crtsavres.[So] $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
+%endif
+ if [ -d arch/%{asmarch}/include ]; then
+ cp -a --parents arch/%{asmarch}/include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/
+ fi
+ cp -a include $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+
+ # Make sure the Makefile and version.h have a matching timestamp so that
+ # external modules can be built
+ touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
+ touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h
+ # Copy .config to include/config/auto.conf so "make prepare" is unnecessary.
+ cp $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/config/auto.conf
+
+ if test -s vmlinux.id; then
+ cp vmlinux.id $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/vmlinux.id
+ else
+ echo >&2 "*** WARNING *** no vmlinux build ID! ***"
+ fi
+
+ #
+ # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
+ #
+%if %{with_debuginfo}
+ mkdir -p $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
+ cp vmlinux $RPM_BUILD_ROOT%{debuginfodir}/lib/modules/$KernelVer
+%endif
+
+ find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
+
+ # mark modules executable so that strip-to-file can strip them
+ xargs --no-run-if-empty chmod u+x < modnames
+
+ # Generate a list of modules for block and networking.
+
+ fgrep /drivers/ modnames | xargs --no-run-if-empty nm -upA |
+ sed -n 's,^.*/\([^/]*\.ko\): *U \(.*\)$,\1 \2,p' > drivers.undef
+
+ collect_modules_list()
+ {
+ sed -r -n -e "s/^([^ ]+) \\.?($2)\$/\\1/p" drivers.undef |
+ LC_ALL=C sort -u > $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$1
+ }
+
+ collect_modules_list networking \
+ 'register_netdev|ieee80211_register_hw|usbnet_probe|phy_driver_register'
+ collect_modules_list block \
+ 'ata_scsi_ioctl|scsi_add_host|scsi_add_host_with_dma|blk_init_queue|register_mtd_blktrans|scsi_esp_register|scsi_register_device_handler'
+ collect_modules_list drm \
+ 'drm_open|drm_init'
+ collect_modules_list modesetting \
+ 'drm_crtc_init'
+
+ # detect missing or incorrect license tags
+ rm -f modinfo
+ while read i
+ do
+ echo -n "${i#$RPM_BUILD_ROOT/lib/modules/$KernelVer/} " >> modinfo
+ /sbin/modinfo -l $i >> modinfo
+ done < modnames
+
+ egrep -v \
+ 'GPL( v2)?$|Dual BSD/GPL$|Dual MPL/GPL$|GPL and additional rights$' \
+ modinfo && exit 1
+
+ rm -f modinfo modnames
+
+ # remove files that will be auto generated by depmod at rpm -i time
+ for i in alias alias.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap
+ do
+ rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$i
+ done
+
+ # Move the devel headers out of the root file system
+ mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
+ mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
+ ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
+}
+
+###
+# DO it...
+###
+
+# prepare directories
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/boot
+
+cd linux-%{kversion}.%{_target_cpu}
+
+%if %{with_debug}
+BuildKernel %make_target %kernel_image debug
+%endif
+
+%if %{with_pae_debug}
+BuildKernel %make_target %kernel_image PAEdebug
+%endif
+
+%if %{with_pae}
+BuildKernel %make_target %kernel_image PAE
+%endif
+
+%if %{with_up}
+BuildKernel %make_target %kernel_image
+%endif
+
+%if %{with_smp}
+BuildKernel %make_target %kernel_image smp
+%endif
+
+%if %{with_kdump}
+BuildKernel vmlinux vmlinux kdump vmlinux
+%endif
+
+%if %{with_doc}
+# Make the HTML and man pages.
+make %{?_smp_mflags} htmldocs mandocs || %{doc_build_fail}
+
+# sometimes non-world-readable files sneak into the kernel source tree
+chmod -R a=rX Documentation
+find Documentation -type d | xargs chmod u+w
+%endif
+
+%if %{with_perf}
+pushd tools/perf
+make %{?_smp_mflags} man || %{doc_build_fail}
+popd
+%endif
+
+###
+### Special hacks for debuginfo subpackages.
+###
+
+# This macro is used by %%install, so we must redefine it before that.
+%define debug_package %{nil}
+
+%if %{fancy_debuginfo}
+%define __debug_install_post \
+ /usr/lib/rpm/find-debuginfo.sh %{debuginfo_args} %{_builddir}/%{?buildsubdir}\
+%{nil}
+%endif
+
+%if %{with_debuginfo}
+%ifnarch noarch
+%global __debug_package 1
+%files -f debugfiles.list debuginfo-common-%{_target_cpu}
+%defattr(-,root,root)
+%endif
+%endif
+
+###
+### install
+###
+
+%install
+
+cd linux-%{kversion}.%{_target_cpu}
+
+%if %{with_doc}
+docdir=$RPM_BUILD_ROOT%{_datadir}/doc/kernel-doc-%{rpmversion}
+man9dir=$RPM_BUILD_ROOT%{_datadir}/man/man9
+
+# copy the source over
+mkdir -p $docdir
+tar -f - --exclude=man --exclude='.*' -c Documentation | tar xf - -C $docdir
+
+# Install man pages for the kernel API.
+mkdir -p $man9dir
+find Documentation/DocBook/man -name '*.9.gz' -print0 |
+xargs -0 --no-run-if-empty %{__install} -m 444 -t $man9dir $m
+ls $man9dir | grep -q '' || > $man9dir/BROKEN
+%endif # with_doc
+
+%if %{with_perf}
+# perf docs
+mandir=$RPM_BUILD_ROOT%{_datadir}/man
+man1dir=$mandir/man1
+pushd tools/perf/Documentation
+make install-man mandir=$mandir
+popd
+
+pushd $man1dir
+for d in *.1; do
+ gzip $d;
+done
+popd
+
+# perf shell wrapper and examples
+mkdir -p $RPM_BUILD_ROOT/usr/sbin/
+cp $RPM_SOURCE_DIR/perf $RPM_BUILD_ROOT/usr/sbin/perf
+chmod 0755 $RPM_BUILD_ROOT/usr/sbin/perf
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/doc/perf
+cp tools/perf/Documentation/examples.txt $RPM_BUILD_ROOT%{_datadir}/doc/perf
+%endif # with_perf
+
+%if %{with_headers}
+# Install kernel headers
+make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install
+
+# Do headers_check but don't die if it fails.
+make ARCH=%{hdrarch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_check \
+ > hdrwarnings.txt || :
+if grep -q exist hdrwarnings.txt; then
+ sed s:^$RPM_BUILD_ROOT/usr/include/:: hdrwarnings.txt
+ # Temporarily cause a build failure if header inconsistencies.
+ # exit 1
+fi
+
+find $RPM_BUILD_ROOT/usr/include \
+ \( -name .install -o -name .check -o \
+ -name ..install.cmd -o -name ..check.cmd \) | xargs rm -f
+
+# glibc provides scsi headers for itself, for now
+rm -rf $RPM_BUILD_ROOT/usr/include/scsi
+rm -f $RPM_BUILD_ROOT/usr/include/asm*/atomic.h
+rm -f $RPM_BUILD_ROOT/usr/include/asm*/io.h
+rm -f $RPM_BUILD_ROOT/usr/include/asm*/irq.h
+%endif
+
+%if %{with_firmware}
+%{build_firmware}
+%endif
+
+%if %{with_bootwrapper}
+make DESTDIR=$RPM_BUILD_ROOT bootwrapper_install WRAPPER_OBJDIR=%{_libdir}/kernel-wrapper WRAPPER_DTSDIR=%{_libdir}/kernel-wrapper/dts
+%endif
+
+
+###
+### clean
+###
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+###
+### scripts
+###
+
+#
+# This macro defines a %%post script for a kernel*-devel package.
+# %%kernel_devel_post [<subpackage>]
+#
+%define kernel_devel_post() \
+%{expand:%%post %{?1:%{1}-}devel}\
+if [ -f /etc/sysconfig/kernel ]\
+then\
+ . /etc/sysconfig/kernel || exit $?\
+fi\
+if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ]\
+then\
+ (cd /usr/src/kernels/%{KVERREL}%{?1:.%{1}} &&\
+ /usr/bin/find . -type f | while read f; do\
+ hardlink -c /usr/src/kernels/*.fc*.*/$f $f\
+ done)\
+fi\
+%{nil}
+
+# This macro defines a %%posttrans script for a kernel package.
+# %%kernel_variant_posttrans [<subpackage>]
+# More text can follow to go at the end of this variant's %%post.
+#
+%define kernel_variant_posttrans() \
+%{expand:%%posttrans %{?1}}\
+%{expand:\
+%if %{with_dracut}\
+/sbin/new-kernel-pkg --package kernel-libre%{?-v:-%{-v*}} --mkinitrd --dracut --depmod --update %{KVERREL}%{?-v:.%{-v*}} || exit $?\
+%else\
+/sbin/new-kernel-pkg --package kernel-libre%{?-v:-%{-v*}} --mkinitrd --depmod --update %{KVERREL}%{?-v:.%{-v*}} || exit $?\
+%endif}\
+/sbin/new-kernel-pkg --package kernel-libre%{?1:-%{1}} --rpmposttrans %{KVERREL}%{?1:.%{1}} || exit $?\
+%{nil}
+
+#
+# This macro defines a %%post script for a kernel package and its devel package.
+# %%kernel_variant_post [-v <subpackage>] [-r <replace>]
+# More text can follow to go at the end of this variant's %%post.
+#
+%define kernel_variant_post(v:r:) \
+%{expand:%%kernel_devel_post %{?-v*}}\
+%{expand:%%kernel_variant_posttrans %{?-v*}}\
+%{expand:%%post %{?-v*}}\
+%{-r:\
+if [ `uname -i` == "x86_64" -o `uname -i` == "i386" ] &&\
+ [ -f /etc/sysconfig/kernel ]; then\
+ /bin/sed -r -i -e 's/^DEFAULTKERNEL=%{-r*}$/DEFAULTKERNEL=kernel-libre%{?-v:-%{-v*}}/' /etc/sysconfig/kernel || exit $?\
+fi}\
+%{expand:\
+/sbin/new-kernel-pkg --package kernel-libre%{?-v:-%{-v*}} --install %{KVERREL}%{?-v:.%{-v*}} || exit $?\
+}\
+#if [ -x /sbin/weak-modules ]\
+#then\
+# /sbin/weak-modules --add-kernel %{KVERREL}%{?-v*} || exit $?\
+#fi\
+%{nil}
+
+#
+# This macro defines a %%preun script for a kernel package.
+# %%kernel_variant_preun <subpackage>
+#
+%define kernel_variant_preun() \
+%{expand:%%preun %{?1}}\
+/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}%{?1:.%{1}} || exit $?\
+#if [ -x /sbin/weak-modules ]\
+#then\
+# /sbin/weak-modules --remove-kernel %{KVERREL}%{?1} || exit $?\
+#fi\
+%{nil}
+
+%kernel_variant_preun
+%ifarch x86_64
+%kernel_variant_post -r (kernel-smp|kernel-xen)
+%else
+%kernel_variant_post -r kernel-smp
+%endif
+
+%kernel_variant_preun smp
+%kernel_variant_post -v smp
+
+%kernel_variant_preun PAE
+%kernel_variant_post -v PAE -r (kernel|kernel-smp|kernel-xen)
+
+%kernel_variant_preun debug
+%kernel_variant_post -v debug
+
+%kernel_variant_post -v PAEdebug -r (kernel|kernel-smp|kernel-xen)
+%kernel_variant_preun PAEdebug
+
+if [ -x /sbin/ldconfig ]
+then
+ /sbin/ldconfig -X || exit $?
+fi
+
+###
+### file lists
+###
+
+%if %{with_headers}
+%files headers
+%defattr(-,root,root)
+/usr/include/*
+%endif
+
+%if %{with_firmware}
+%files firmware
+%defattr(-,root,root)
+/lib/firmware/*
+%doc linux-%{kversion}.%{_target_cpu}/firmware/WHENCE
+%endif
+
+%if %{with_bootwrapper}
+%files bootwrapper
+%defattr(-,root,root)
+/usr/sbin/*
+%{_libdir}/kernel-wrapper
+%endif
+
+# only some architecture builds need kernel-doc
+%if %{with_doc}
+%files doc
+%defattr(-,root,root)
+%{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation/*
+%dir %{_datadir}/doc/kernel-doc-%{rpmversion}/Documentation
+%dir %{_datadir}/doc/kernel-doc-%{rpmversion}
+%{_datadir}/man/man9/*
+%endif
+
+%if %{with_perf}
+%files -n perf-libre
+%defattr(-,root,root)
+%{_datadir}/doc/perf
+/usr/sbin/perf
+%{_datadir}/man/man1/*
+%endif
+
+# This is %{image_install_path} on an arch where that includes ELF files,
+# or empty otherwise.
+%define elf_image_install_path %{?kernel_image_elf:%{image_install_path}}
+
+#
+# This macro defines the %%files sections for a kernel package
+# and its devel and debuginfo packages.
+# %%kernel_variant_files [-k vmlinux] <condition> <subpackage>
+#
+%define kernel_variant_files(k:) \
+%if %{1}\
+%{expand:%%files %{?2}}\
+%defattr(-,root,root)\
+/%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?2:.%{2}}\
+/boot/System.map-%{KVERREL}%{?2:.%{2}}\
+%if %{with_perftool}\
+/usr/libexec/perf.%{KVERREL}%{?2:.%{2}}\
+%endif\
+#/boot/symvers-%{KVERREL}%{?2:.%{2}}.gz\
+/boot/config-%{KVERREL}%{?2:.%{2}}\
+%dir /lib/modules/%{KVERREL}%{?2:.%{2}}\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/kernel\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/build\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/source\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/extra\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/updates\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/weak-updates\
+%ifarch %{vdso_arches}\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/vdso\
+/etc/ld.so.conf.d/kernel-%{KVERREL}%{?2:.%{2}}.conf\
+%endif\
+/lib/modules/%{KVERREL}%{?2:.%{2}}/modules.*\
+%if %{with_dracut}\
+%ghost /boot/initramfs-%{KVERREL}%{?2:.%{2}}.img\
+%else\
+%ghost /boot/initrd-%{KVERREL}%{?2:.%{2}}.img\
+%endif\
+%{expand:%%files %{?2:%{2}-}devel}\
+%defattr(-,root,root)\
+%verify(not mtime) /usr/src/kernels/%{KVERREL}%{?2:.%{2}}\
+/usr/src/kernels/%{KVERREL}%{?2:.%{2}}\
+%if %{with_debuginfo}\
+%ifnarch noarch\
+%if %{fancy_debuginfo}\
+%{expand:%%files -f debuginfo%{?2}.list %{?2:%{2}-}debuginfo}\
+%else\
+%{expand:%%files %{?2:%{2}-}debuginfo}\
+%endif\
+%defattr(-,root,root)\
+%if !%{fancy_debuginfo}\
+%if "%{elf_image_install_path}" != ""\
+%{debuginfodir}/%{elf_image_install_path}/*-%{KVERREL}%{?2:.%{2}}.debug\
+%endif\
+%{debuginfodir}/lib/modules/%{KVERREL}%{?2:.%{2}}\
+%{debuginfodir}/usr/src/kernels/%{KVERREL}%{?2:.%{2}}\
+%endif\
+%endif\
+%endif\
+%endif\
+%{nil}
+
+
+%kernel_variant_files %{with_up}
+%kernel_variant_files %{with_smp} smp
+%kernel_variant_files %{with_debug} debug
+%kernel_variant_files %{with_pae} PAE
+%kernel_variant_files %{with_pae_debug} PAEdebug
+%kernel_variant_files -k vmlinux %{with_kdump} kdump
+
+
+%changelog
+* Tue Jul 06 2010 Jarod Wilson <jarod@redhat.com> 2.6.33.6-147
+- Really make hdpvr i2c IR part register this time, so something can
+ actually be bound to it (like, say, lirc_zilog)
+
+* Tue Jul 6 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted patch-libre-2.6.33.6.
+
+* Tue Jul 06 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.6-146
+- x86-debug-send-sigtrap-for-user-icebp.patch,
+ x86-debug-clear-reserved-bits-of-dr6.patch (#609548)
+
+* Tue Jul 06 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.6-145
+- ethtool-fix-buffer-overflow.patch: ethtool buffer overflow (CVE-2010-2478)
+
+* Tue Jul 06 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.6-144
+- sched-fix-over-scheduling-bug.patch: fix scheduler bug with CGROUPS
+
+* Tue Jul 06 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.6-143
+- Linux 2.6.33.6
+
+* Fri Jul 02 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.6-142.rc1
+- nouveau: fix connector ordering issues (rhbz#602492)
+
+* Fri Jul 02 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.6-141.rc1
+- Linux 2.6.33.6-rc1
+- Drop patches merged upstream:
+ btrfs-should-add-permission-check-for-setfacl.patch (CVE-2010-2071)
+ iwlwifi-reset-card-during-probe.patch
+ iwlwifi-recalculate-average-tpt-if-not-current.patch
+ keys-find-keyring-by-name-can-gain-access-to-the-freed-keyring.patch
+ l2tp-fix-oops-in-pppol2tp_xmit.patch
+- Revert DRM patches we already have:
+ drm-edid-fix-1024x768-85hz.patch
+ drm-i915-fix-82854-pci-id-and-treat-it-like-other-85x.patch
+- Fix up usb-wwan-update.patch for upstream additions.
+
+* Fri Jul 02 2010 Dave Airlie <airlied@redhat.com> 2.6.33.5-140
+- attempt to fix hibernate on Intel GPUs (kernel.org #13811)
+
+* Wed Jun 30 2010 Kyle McMartin <kyle@redhat.com>
+- Disable MRST here too.
+
+* Mon Jun 28 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.5-138
+- ppc64: enable active memory sharing and DLPAR memory remove (#607175)
+
+* Mon Jun 28 2010 Dave Airlie <airlied@redhat.com> 2.6.33.5-137
+- i915: fix edp panels betterer.
+
+* Fri Jun 25 2010 Dave Airlie <airlied@redhat.com> 2.6.33.5-136
+- i915: fix edp on a number of notebooks (including whot's one)
+
+* Fri Jun 25 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.5-135
+- nouveau: backport important fixes from upstream
+- Fixes unPOSTed detection + support nv4x multi-card (rhbz#607190)
+- Various VBIOS parser fixes (potential culprit for many suspend bugs)
+- Fixes memory detection on some GF8 IGPs, and boards with 4GiB VRAM
+- Corrects various problems in the behaviour of GF8 dual-link TMDS
+
+* Wed Jun 23 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-134
+- l2tp: fix oops in pppol2tp_xmit (#607054)
+
+* Fri Jun 18 2010 Roland McGrath <roland@redhat.com> 2.6.33.5-133
+- make execshield respect PF_RANDOMIZE and ADDR_NO_RANDOMIZE (#220892)
+
+* Thu Jun 17 2010 Kyle McMartin <kyle@redhat.com>
+- make ghash-clmulni modular to get rid of early boot noise (rhbz#586954)
+ (not a /fix/ but it should at least quiet boot down a bit if you have
+ the cpu support)
+
+* Tue Jun 15 2010 John W. Linville <linville@redhat.com> 2.6.33.5-131
+- iwlwifi: cancel scan watchdog in iwl_bg_abort_scan (#590436)
+
+* Mon Jun 14 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-129
+- Add btrfs ACL fixes from CVE-2010-2071.
+
+* Mon Jun 14 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Re-enable kernel-libre-firmware.
+
+* Sun Jun 13 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-128
+- mac80211/iwlwifi fix connections to some APs (rhbz#558002)
+ patches from sgruszka@.
+
+* Fri Jun 11 2010 Justin M. Forbes <jforbes@redhat.com> 2.6.33.5-127
+- Disable xsave for so that kernel will boot on ancient EC2 hosts.
+
+* Fri Jun 11 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-126
+- ALSA: usbmixer - add possibility to remap dB values (rhbz#578131)
+
+* Fri Jun 11 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-124
+- Drop writeback patches, they appear to be able to cause oopses.
+
+* Wed Jun 09 2010 John W. Linville <linville@redhat.com>
+- Disable rt20xx and rt35xx chipset support in rt2800 drivers (#570869)
+
+* Wed Jun 09 2010 David Woodhouse <David.Woodhouse@intel.com>
+- Include PHY modules in modules.networking (#602155)
+
+* Wed Jun 09 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-121
+- doc_build_fail FAIL.
+
+* Wed Jun 09 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.5-120
+- backport ntrig hid driver from git head. (rhbz#584593)
+
+* Mon Jun 07 2010 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-acpi-indirect_fan_control.patch: fix some ACPI fans (rh#531916)
+
+* Mon Jun 07 2010 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: fix iommu errors on GeForce 8 and newer chipsets (rh#561267)
+
+* Thu Jun 03 2010 Kyle McMartin <kyle@redhat.com>
+- But keep it for kernel-headers...
+
+* Thu Jun 03 2010 Dave Jones <davej@redhat.com>
+- remove the 31bit s390 support again.
+
+* Tue Jun 01 2010 Jarod Wilson <jarod@redhat.com>
+- Wire up all s390{,x} bits to match RHEL6 kernel spec
+
+* Thu May 27 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted patch-libre-2.6.33.5.
+
+* Wed May 27 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.5-112
+- CVE-2010-1437: keyrings: find_keyring_by_name() can gain the freed keyring
+
+* Wed May 27 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.5-111
+- Linux 2.6.33.5
+- Drop patches merged in -stable:
+ iwlwifi_-check-for-aggregation-frame-and-queue.patch
+ iwlwifi_-clear-all-the-stop_queue-flag-after-load-firmware.patch
+ revert-ath9k_-fix-lockdep-warning-when-unloading-module.patch
+ btrfs-check-for-read-permission-on-src-file-in-clone-ioctl.patch
+- Revert drm patch already in F-13: drm-i915-disable-fbc-on-915gm-and-945gm.patch
+- Apply DRM patches from -stable on top of F-13 DRM updates:
+ drm-i915-use-pipe_control-instruction-on-ironlake-and-sandy-bridge.patch
+ drm-i915-fix-non-ironlake-965-class-crashes.patch
+
+* Thu May 27 2010 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau-updates.patch: add nv50 gpio fix (rh#582621)
+
+* Wed May 26 2010 Adam Jackson <ajax@redhat.com>
+- linux-2.6-cantiga-iommu-gfx.patch: Drop, redundant.
+- config-generic: Disable i830.ko, userspace will never load it.
+
+* Mon May 24 2010 John W. Linville <linville@redhat.com>
+- iwlwifi: recover_from_tx_stall (#589777)
+
+* Thu May 20 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.4-106
+- Remove "PatchNNNN" entries for dropped patches.
+- More writeback fixes from block-2.6 tree (#593669)
+
+* Thu May 20 2010 Kyle McMartin <kyle@redhat.com>
+- kill some dead patches.
+
+* Wed May 19 2010 John W. Linville <linville@redhat.com>
+- iwlwifi: fix scan races
+- iwlwifi: fix internal scan race
+
+* Wed May 19 2010 Dave Airlie <airlied@redhat.com>
+- disable vmwgfx at request of vmware
+
+* Wed May 19 2010 Roland McGrath <roland@redhat.com>
+- x86: put assembly CFI in .debug_frame
+
+* Tue May 18 2010 Kyle McMartin <kyle@redhat.com>
+- btrfs: check for read permission on src file in the clone ioctl
+ (rhbz#593226)
+
+* Mon May 17 2010 Matthew Garrett <mjg@redhat.com>
+- thinkpad-acpi-fix-backlight.patch: Fix backlight control on some recent
+ Thinkpads
+
+* Mon May 17 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.4-97
+- perf-mount-debugfs-automatically.patch (#570821)
+
+* Mon May 17 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.4-96
+- drm: fix edid modeline for 1024x768@85Hz (#582472)
+
+* Fri May 14 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre Fri May 21
+- Adjusted patch-libre-2.6.33.4.
+
+* Thu May 13 2010 Jarod Wilson <jarod@redhat.com> 2.6.33.4-95
+- Enable support for kworld ub435-q and 340u usb atsc tuners
+
+* Thu May 13 2010 Peter Hutterer <peter.hutterer@redhat.com>
+- linux-2.6-input-clickpad-support.patch: add support for ClickPad
+ touchpads (#590835)
+
+* Wed May 12 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.4-93
+- Linux 2.6.33.4
+- Drop patches merged upstream:
+ linux-2.6-pci-fixup-resume.patch
+ linux-2.6-tun-orphan_an_skb_on_tx.patch
+ libata-fix-accesses-at-LBA28-boundary.patch
+ linux-2.6-creds_are_invalid-race.patch
+ hugetlb-fix-infinite-loop-in-get-futex-key.patch
+ reiserfs-fix-permissions-on-reiserfs-priv.patch
+ ath9k-reorder-ieee80211_free_hw-behind-ath9k_uninit_.patch
+- Revert -stable DRM patches we already have:
+ drm-i915-add-initial-bits-for-vga-modesetting-bringup-on-sandybridge.patch
+ drm-i915-fix-tiling-limits-for-i915-class-hw-v2.patch
+- Fix up patches to apply on top of 2.6.33.4:
+ linux-2.6-p54pci.patch
+ vhost_net-rollup.patch
+
+* Wed May 12 2010 Roland McGrath <roland@redhat.com>
+- utrace update (#590954)
+
+* Mon May 10 2010 Kyle McMartin <kyle@redhat.com>
+- don't link binutils against perf. sigh. stupid gpl versions.
+
+* Mon May 10 2010 Eric Paris <eparis@redhat.com>
+- reduce size of selinux poliy memory allocation (rhbz#590363)
+
+* Mon May 10 2010 Kyle McMartin <kyle@redhat.com>
+- crypto-aesni-kill-module_alias.patch: kill MODULE_ALIAS to prevent
+ aesni-intel from autoloading.
+
+* Mon May 10 2010 Ben Skeggs <bskeggs@redhat.com>
+- add linux-2.6-input-hid-quirk-egalax.patch, missed from F-12, requested
+ by Peter Hutterer.
+
+* Sun May 09 2010 Kyle McMartin <kyle@redhat.com>
+- fs-explicitly-pass-in-whether-sb-is-pinned-or-not.patch (rhbz#588930)
+
+* Sat May 08 2010 Kyle McMartin <kyle@redhat.com>
+- Link perf against libbfd.a for name-demangling support. (rhbz#590289)
+
+* Thu May 06 2010 Adam Jackson <ajax@redhat.com> 2.6.33.3-85
+- drm-intel-next: Enable the display even harder (#587171)
+
+* Wed May 5 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.3-84
+- CONFIG_HWMON=y => CONFIG_THERMAL_HWMON. Kconfig is worse than rabies.
+
+* Wed May 5 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.3-83
+- disable-i8042-check-on-apple-mac.patch: fix build on ppc.
+
+* Tue May 4 2010 John W. Linville <linville@redhat.com> 2.6.33.3-82
+- iwlwifi: recalculate average tpt if not current (#588021)
+
+* Tue May 4 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.3-81
+- disable-i8042-check-on-apple-mac.patch: avoid long delay or hang booting
+ on Intel Apple Macs.
+
+* Tue May 4 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.3-80
+- ibmvscsi-fix-DMA-API-misuse.patch (#579454)
+
+* Mon May 3 2010 Kyle McMartin <kyle@redhat.com> 2.6.33.3-79
+- disable aesni. (#571577)
+
+* Fri Apr 30 2010 John W. Linville <linville@redhat.com> 2.6.33.3-78
+- ath9k: reorder ieee80211_free_hw behind ath9k_uninit_hw to avoid
+ oops (#586787)
+
+* Fri Apr 30 2010 Kyle McMartin <kyle@redhat.com>
+- add-appleir-driver.patch: update from hadess, split out some other patches.
+- git-bluetooth.patch: and put them in git-bluetooth, along with other fixes.
+
+* Thu Apr 29 2010 Adam Jackson <ajax@redhat.com>
+- drm-intel-sdvo-fix-2.patch: Require that the A/D bit of EDID match the
+ A/D-ness of the connector. (#584229)
+
+* Thu Apr 29 2010 Kyle McMartin <kyle@redhat.com>
+- add-appleir-usb-driver.patch: updates from hadess.
+
+* Thu Apr 29 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted patch-libre-2.6.33.3.
+
+* Thu Apr 29 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.3-73
+- nouveau: initial eDP support + DP suspend/resume fixes
+- nouveau: fix monitor detection on certain chipsets with DP support
+- nouveau: better CRTC PLL calculation on latest chipsets
+- nouveau: send hotplug events down to userspace
+
+* Wed Apr 28 2010 John W. Linville <linville@redhat.com> 2.6.33.3-72
+- Revert "ath9k: fix lockdep warning when unloading module"
+
+* Tue Apr 27 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.3-71
+- Linux 2.6.33.3
+- Drop patches merged upstream:
+ acpi-ec-allow-multibyte-access-to-ec.patch
+ acpi-ec-limit-burst-to-64-bit.patch
+ b43_-Allow-PIO-mode-to-be-selected-at-module-load.patch
+ b43_-fall-back-gracefully-to-PIO-mode-after-fatal-DMA-errors.patch
+ mac80211_-tear-down-all-agg-queues-when-restart_reconfig-hw.patch
+ iwlwifi_-clear-all-tx-queues-when-firmware-ready.patch
+ iwlwifi_-fix-scan-race.patch
+- Revert DRM patches we already have:
+ drm-radeon-kms-add-firemv-2400-pci-id.patch
+ drm-radeon-kms-fix-rs600-tlb-flush.patch
+ drm-edid-quirks-envision-en2028.patch
+ drm-return-enodev-if-the-inode-mapping-changes.patch
+ drm-remove-the-edid-blob-stored-in-the-edid-property-when-it-is-disconnected.patch
+ drm-edid-allow-certain-bogus-edids-to-hit-a-fixup-path-rather-than-fail.patch
+- Fix up drm-core-next to apply after 2.6.33.3
+
+* Tue Apr 27 2010 Justin M. Forbes <jforbes@redhat.com>
+- Orphan an skb on tx for tun/tap devices.
+
+* Tue Apr 27 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.2-68
+- Fix possible data corruption with ext4 mounted with -o discard
+
+* Mon Apr 26 2010 Chuck Ebbert <cebbert@redhat.com>
+- hugetlb-fix-infinite-loop-in-get-futex-key.patch (F12#552557)
+- reiserfs-fix-permissions-on-reiserfs-priv.patch (CVE-2010-1146)
+
+* Mon Apr 26 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.2-66
+- Turn off debugging and enable debug kernel builds.
+
+* Mon Apr 26 2010 Dave Jones <davej@redhat.com>
+- Revert PCI changes from 2.6.33.2.
+ Possibly causing networking problems with some drivers.
+
+* Mon Apr 26 2010 Adam Jackson <ajax@redhat.com>
+- drm-intel-sdvo-fix.patch: Fix DDC bus selection for SDVO (#584229)
+
+* Fri Apr 23 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted linux-2.6-p54pci.patch.
+
+* Thu Apr 22 2010 Hans de Goede <hdegoede@redhat.com>
+- Make p54pci wlan work on slower computers (#583623)
+
+* Thu Apr 22 2010 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-pci-fixup-resume.patch: Make sure we enable power resources on D0
+
+* Wed Apr 21 2010 Justin M. Forbes <jforbes@redhat.com>
+- vhost-net fixes from upstream
+
+* Wed Apr 21 2010 Roland McGrath <roland@redhat.com> 2.6.33.2-60
+- fix race crash from bogus cred.c debugging code (#583843)
+
+* Wed Apr 21 2010 Matthew Garrett <mjg@redhat.com>
+- thinkpad-acpi-add-x100e.patch: Add EC path for Thinkpad X100
+
+* Tue Apr 20 2010 Dave Airlie <airlied@redhat.com> 2.6.33.2-57
+- drm-radeon-ss-fix.patch: backport spread spectrum fix (#571874)
+
+* Mon Apr 19 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted iwlwifi_-Tune-radio-to-prevent-unexpected-behavior.patch.
+- Adjusted iwlwifi_-Recover-TX-flow-stall-due-to-stuck-queue.patch.
+- Adjusted iwlwifi_-Adjusting-PLCP-error-threshold-for-1000-NIC.patch.
+
+* Mon Apr 19 2010 Adam Jackson <ajax@redhat.com> 2.6.33.2-56
+- drm-intel-next.patch: 2.6.34 as of today, plus anholt's for-linus tree as
+ of today, plus most of drm-intel-next except for the AGP/GTT split and a
+ broken TV detect fix. Tested on 945GM, GM45, and gen5.
+- drm-intel-make-lvds-work.patch: Rebase to match.
+- drm-intel-acpi-populate-didl.patch: Drop, merged in -intel-next
+- drm-intel-gen5-dither.patch: Use better dither on gen5.
+
+* Mon Apr 19 2010 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-acpi-sleep-live-sci-live.patch: Try harder to switch to ACPI mode
+
+* Mon Apr 19 2010 Adam Jackson <ajax@redhat.com>
+- linux-2.6-intel-iommu-igfx.patch: Disable IOMMU for GFX by default, just too
+ broken. intel_iommu=igfx_on to turn it on. (Adel Gadllah)
+
+* Mon Apr 19 2010 Dave Airlie <airlied@redhat.com>
+- radeon: add rs600 + firemv pciid + dual-link fix
+
+* Fri Apr 16 2010 John W. Linville <linville@redhat.com>
+- Patches from Intel to address intermittent firmware failures with iwlagn
+
+* Fri Apr 16 2010 Adam Jackson <ajax@redhat.com>
+- drm-core-next.patch: Update EDID and other core bits to airlied's tree
+- drm-nouveau-abi16.patch: Rediff to match
+
+* Fri Apr 16 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.2-49
+- nouveau: fix dereference-after-free bug (rh#575224)
+- drm-nouveau-acpi-edid-fallback.patch: fix ppc build + potential crasher
+
+* Thu Apr 15 2010 Eric Paris <eparis@redhat.com>
+- enable CONFIG_INTEL_TXT on x86_64
+
+* Wed Apr 14 2010 David Woodhouse <David.Woodhouse@intel.com>
+- Fix autoloading of phy modules (#525966)
+
+* Wed Apr 14 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.2-46
+- libata-fix-accesses-at-LBA28-boundary.patch
+
+* Tue Apr 13 2010 Justin M. Forbes <jforbes@redhat.com>
+- virt_console: Fixes from upstream
+
+* Tue Apr 13 2010 Chuck Ebbert <cebbert@redhat.com>
+- Fix ACPI errors on boot caused by EC burst mode patch (#581535)
+- Re-enable ACPI EC delay patch (#579510)
+
+* Tue Apr 13 2010 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau-acpi-edid-fallback.patch: fix oops on cards without _DSM method
+
+* Mon Apr 12 2010 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-acpi-video-export-edid.patch:
+ drm-nouveau-acpi-edid-fallback.patch: Let nouveau get an EDID from ACPI
+
+* Fri Apr 09 2010 John W. Linville <linville@redhat.com> 2.6.33.2-41
+- b43: Allow PIO mode to be selected at module load
+- b43: fall back gracefully to PIO mode after fatal DMA errors
+
+* Fri Apr 09 2010 Chuck Ebbert <cebbert@redhat.com>
+- virt_console: fix a bug in the original race fix
+
+* Fri Apr 09 2010 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: fixes from upstream + NVA3 support
+
+* Thu Apr 08 2010 Dave Airlie <airlied@redhat.com>
+- Backport radeon r800 modesetting support
+
+* Wed Apr 07 2010 Chuck Ebbert <cebbert@redhat.com>
+- Disable async multicore RAID4/5/6 stripe processing (F12#575402)
+
+* Tue Apr 06 2010 Hans de Goede <hdegoede@redhat.com>
+- gspca-vc032x: Use YUYV output for OV7670 (#537332)
+
+* Mon Apr 5 2010 Alexandre Oliva <lxoliva@fsfla.org>
+- Adjusted patch-libre-2.6.33.2 for deblobbed sources.
+
+* Mon Apr 05 2010 Chuck Ebbert <cebbert@redhat.com>
+- Build eeepc-laptop driver for x86_64 (#565582)
+
+* Mon Apr 05 2010 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.33.2
+- Dropped patches merged upstream:
+ coredump-uid-pipe-check.patch
+ iwlwifi-use-dma_alloc_coherent.patch
+ r8169-offical-fix-for-CVE-2009-4537.patch
+- Dropped from drm-nouveau-updates.patch:
+ "drm/nouveau: report unknown connector state if lid closed"
+- New sparc64 config option:
+ CONFIG_FB_XVR1000=y
+- Reverted from upstream:
+ usb-qcserial-add-new-device-ids.patch: Already in wwan-update patch
+
+* Mon Apr 05 2010 Chuck Ebbert <cebbert@redhat.com>
+- Comment out acpi-ec-add-delay-before-write.patch: breaks
+ boot on some machines.
+
+* Mon Apr 05 2010 Jarod Wilson <jarod@redhat.com> 2.6.33.1-32
+- Fix oops in lirc_it87 driver (#579270)
+- Support more imon 0xffdc key combinations
+
+* Sat Apr 03 2010 Chuck Ebbert <cebbert@redhat.com>
+- Build all of the DVB frontend drivers instead of just the automatically
+ selected ones. (#578755)
+
+* Thu Apr 01 2010 Matthew Garrett <mjg@redhat.com>
+- drm-intel-acpi-populate-didl.patch: Fix brightness hotkeys on some machines
+- linux-2.6-usb-wwan-update.patch: Update wwan code and fix qcserial
+
+* Wed Mar 31 2010 Matthew Garrett <mjg@redhat.com>
+- drm-intel-make-lvds-work.patch: Make sure LVDS gets turned back on
+
+* Tue Mar 30 2010 Chuck Ebbert <cebbert@redhat.com>
+- Allow setting buildid on both command line and in the SRPM.
+
+* Tue Mar 30 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33.1-26
+- r8169-offical-fix-for-CVE-2009-4537.patch
+
+* Tue Mar 30 2010 Chuck Ebbert <cebbert@redhat.com>
+- ACPI EC fixes pending upstream:
+ acpi-ec-add-delay-before-write.patch
+ acpi-ec-allow-multibyte-access-to-ec.patch
+
+* Tue Mar 30 2010 Dave Jones <davej@redhat.com>
+- Fix broken locking in cpufreq.
+
+* Tue Mar 30 2010 John W. Linville <linville@redhat.com> 2.6.33.1-24
+- Avoid null pointer dereference introduced by 'ssb: check for sprom' (#577463)
+
+* Mon Mar 29 2010 John W. Linville <linville@redhat.com> 2.6.33.1-23
+- iwlwifi: reset card during probe (#557084)
+- iwlwifi: use dma_alloc_coherent (#574146)
+
+* Mon Mar 29 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33.1-22
+- nouveau: sync with nouveau upstream
+
+* Wed Mar 24 2010 Josef Bacik <josef@toxicpanda.com> 2.6.33.1-21
+- Update btrfs so it includes the default subvolume stuff, for the rollback
+ feature
+
+* Mon Mar 22 2010 Jarod Wilson <jarod@redhat.com>
+- A few more imon driver button additions
+- Fix minor init issue w/topseed 0x0008 mceusb transceivers
+
+* Sun Mar 21 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjusted patch-libre-2.6.33.1 for deblobbed sources.
+
+* Fri Mar 19 2010 John W. Linville <linville@redhat.com> 2.6.33.1-19
+- ssb: check for sprom (#533746)
+
+* Fri Mar 19 2010 Jarod Wilson <jarod@redhat.com> 2.6.33.1-18
+- Improve mouse button and pad handling on 0xffdc imon devices
+- Add xmit support to topseed 0x0008 lirc_mceusb transceiver
+
+* Fri Mar 19 2010 David Woodhouse <David.Woodhouse@intel.com>
+- Apply fix for #538163 again (Cantiga shadow GTT chipset b0rkage).
+
+* Fri Mar 19 2010 Hans de Goede <hdegoede@redhat.com>
+- Cherry pick various webcam driver fixes
+ (#571188, #572302, #572373)
+
+* Thu Mar 18 2010 Neil Horman <nhorman@redhat.com>
+- Disable TIPC protocol in config
+
+* Wed Mar 17 2010 Jarod Wilson <jarod@redhat.com>
+- lirc driver update:
+ * fix lirc_i2c on cx2341x hauppauge cards (#573675)
+ * fix null ptr deref in lirc_imon (#545599)
+ * fix lirc_zilog on cx2341x hauppauge cards
+ * adds a few new lirc_mceusb device ids
+- imon input layer driver update, adds better support for 0xffdc
+ devices and handles failed key lookups better
+
+* Tue Mar 16 2010 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.33.1
+
+* Tue Mar 16 2010 Chuck Ebbert <cebbert@redhat.com>
+- Add examples.txt to perf docs, require libdwarf with perf package.
+ (#568309, #569506)
+
+* Mon Mar 15 2010 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.33.1-rc1
+- Drop merged patch:
+ x86-pci-prevent-mmconfig-memory-corruption.patch
+- Revert V4l patch we already have:
+ v4l-dvb-13991-gspca_mr973010a-fix-cif-type-1-cameras-not-streaming-on-uhci-controllers.patch
+
+* Mon Mar 15 2010 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: pull in more fixes from upstream
+
+* Sat Mar 06 2010 Kyle McMartin <kyle@redhat.com>
+- Add libdwarf dep if %with_perftool.
+
+* Fri Mar 05 2010 Kyle McMartin <kyle@redhat.com>
+- Fix race between hvc_close and hvc_remove. (rhbz#568621)
+
+* Thu Mar 04 2010 Kyle McMartin <kyle@redhat.com>
+- Enable CGROUP_DEBUG.
+
+* Mon Mar 01 2010 Dave Jones <davej@redhat.com>
+- Don't own /usr/src/kernels any more, it's now owned by filesystem. (#569438)
+
+* Sat Feb 27 2010 Chuck Ebbert <cebbert@redhat.com>
+- Add patch from the 2.6.33 stable queue to fix memory corruption
+ in the PCI MMCONFIG code.
+
+* Thu Feb 25 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Adjust drm-nouveau-updates.patch
+
+* Thu Feb 25 2010 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: rebase to nouveau/linux-2.6 git
+
+* Wed Feb 24 2010 Chuck Ebbert <cebbert@redhat.com>
+- Drop/clear obsolete V4L patches, use ApplyOptionalPatch
+- Fix two typos in config-generic probably caused by vi users
+
+* Wed Feb 24 2010 Dave Jones <davej@redhat.com>
+- Remove unnecessary redefinition of KEY_RFKILL from linux-2.6-rfkill-all.patch
+
+* Wed Feb 24 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Make that 2.6.33-libre.
+
+* Wed Feb 24 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-1
+- Linux 2.6.33
+
+* Wed Feb 24 2010 Dave Jones <davej@redhat.com> 2.6.33-0.53.rc8.git9
+- 2.6.33-rc8-git9
+- dropped: drm-nouveau-old-vgaload.patch - merged upstream.
+- dropped: drm-nouveau-gf8-igp.patch - merged upstream.
+
+* Tue Feb 23 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33-0.52.rc8.git6
+- nouveau: bring to latest upstream, reorganise patches to be more sensible
+
+* Mon Feb 22 2010 Kyle McMartin <kyle@redhat.com>
+- coredump-uid-pipe-check.patch: commit it to a useful branch.
+
+* Mon Feb 22 2010 Dave Jones <davej@redhat.com> 2.6.33-0.50.rc8.git6
+- 2.6.33-rc8-git6
+
+* Sun Feb 21 2010 Hans de Goede <hdegoede@redhat.com>
+- Rebase gspca usb webcam driver + sub drivers to latest upstream, this
+ adds support for the following webcam bridge chipsets: benq, cpia1, sn9c2028;
+ and support for new devices and many bugfixes in other gspca-subdrivers
+
+* Fri Feb 19 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.48.rc8.git4
+- 2.6.33-rc8-git4
+
+* Wed Feb 17 2010 Ben Skeggs <bskeggs@redhat.com> 2.6.33-0.47.rc8.git1
+- nouveau: update to new kernel interface
+- drm_nouveau_ucode.patch: drop, in linux-firmware now
+
+* Tue Feb 16 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.46.rc8.git1
+- 2.6.33-rc8-git1
+- virt_console-rollup.patch: fixes from linux-next from Amit.
+
+* Mon Feb 15 2010 Neil Horman <nhorman@redhat.com>
+- Refactor usermodehelper code and change recursion check for abrt
+ with linux-2.6-umh-refactor.patch from -mm
+ fixes bz 557386
+
+* Sat Feb 13 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Deblobbed patch-libre-2.6.33-rc8.
+
+* Fri Feb 12 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33-0.44.rc8
+- 2.6.33-rc8
+
+* Fri Feb 12 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33-0.43.rc7.git6
+- 2.6.33-rc7-git6
+
+* Thu Feb 11 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33-0.42.rc7.git5
+- 2.6.33-rc7-git5
+- Drop merged patches:
+ fix-conntrack-bug-with-namespaces.patch
+ commit ad60a9154887bb6162e427b0969fefd2f34e94a6 from git-bluetooth.patch
+
+* Mon Feb 08 2010 Josh Boyer <jwboyer@gmail.com>
+- Drop ppc ps3_storage and imac-transparent bridge patches
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.40.rc7.git0
+- Add libdwarf-devel to build deps so perf gets linked to it.
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com>
+- virt_console-rollup.patch, for feature F13/VirtioSerial, patches
+ are all targetted at 2.6.34 (and in linux-next.)
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com>
+- git-bluetooth.patch: selection of backports from next for hadess.
+ (rhbz#562245)
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.36.rc7.git0
+- Linux 2.6.33-rc7 (oops, jumped the gun on -git6 I guess. :)
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com>
+- 2.6.33-rc6-git6
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com>
+- Hack around delay loading microcode.ko, on intel, we don't split out
+ the firmware into cpuid specific versions (in fact, I don't know who does...)
+ so just patch out the request_firmware calls in microcode_intel.c, and
+ microcode_ctl.init will do the right thing. (fixes rhbz#560031)
+ (side note: I'll fix microcode_ctl to do one better at some point.)
+
+* Sat Feb 06 2010 Kyle McMartin <kyle@redhat.com>
+- Don't want linux-firmware if %with_firmware, yet. (Think F-11/F-12 2.6.33)
+
+* Fri Feb 05 2010 Peter Jones <pjones@redhat.com>
+- Move initrd creation to %%posttrans
+ Resolves: rhbz#557922
+
+* Fri Feb 05 2010 Kyle McMartin <kyle@redhat.com>
+- If %with_firmware, continue with kernel-firmware, otherwise prereq on the
+ separate linux-firmware pkg. Thanks to dzickus for noticing.
+
+* Thu Feb 04 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.29.rc6.git4
+- 2.6.33-rc6-git4
+
+* Wed Feb 03 2010 Kyle McMartin <kyle@redhat.com>
+- prevent-runtime-conntrack-changes.patch: fix another conntrack issue
+ identified by jcm.
+
+* Wed Feb 03 2010 Kyle McMartin <kyle@redhat.com>
+- fix-conntrack-bug-with-namespaces.patch: Patch for issue identified
+ by jcm. (Ref: http://lkml.org/lkml/2010/2/3/112)
+
+* Mon Feb 02 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33-0.26.rc6.git1
+- 2.6.33-rc6-git1
+
+* Mon Feb 2 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre Thu Feb 4
+- Use 100% gnu+freedo boot splash logo, with black background.
+- Deblobbed patch-libre-2.6.33-rc6.
+- Adjust lirc-2.6.33.patch.
+- Deblobbed drm_nouveau_ucode.patch.
+
+* Fri Jan 29 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.33-0.25.rc6.git0
+- 2.6.33-rc6
+
+* Wed Jan 27 2010 Roland McGrath <roland@redhat.com> 2.6.33-0.24.rc5.git1
+- Fix include/ copying for kernel-devel.
+
+* Mon Jan 25 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.23.rc5.git1
+- 2.6.33-rc5-git1
+- arm: MTD_PISMO is not set
+
+* Mon Jan 25 2010 Dave Jones <davej@redhat.com>
+- Disable CONFIG_X86_CPU_DEBUG
+
+* Mon Jan 25 2010 Josh Boyer <jwboyer@gmail.com>
+- Turn off CONFIG_USB_FHCI_HCD. It doesn't build
+
+* Fri Jan 22 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.20.rc5.git0
+- 2.6.33-rc5
+
+* Thu Jan 21 2010 Jarod Wilson <jarod@redhat.com>
+- Merge crystalhd powerpc build fix from airlied
+
+* Wed Jan 20 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.18.rc4.git7
+- 2.6.32-rc4-git7
+- dvb mantis drivers as modules
+
+* Wed Jan 20 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.17.rc4.git6
+- add appleir usb driver
+
+* Mon Jan 18 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.16.rc4.git6
+- 2.6.33-rc4-git6
+- execshield: rebase for mm_types.h reject
+
+* Mon Jan 18 2010 Kyle McMartin <kyle@redhat.com>
+- vhost_net-rollup.patch: https://fedoraproject.org/wiki/Features/VHostNet
+ from davem/net-next-2.6.git
+
+* Sat Jan 16 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.14.rc4.git3
+- DEBUG_STRICT_USER_COPY_CHECKS off for now, tickles issue in lirc_it87.c
+
+* Sat Jan 16 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.13.rc4.git3
+- 2.6.33-rc4-git3
+
+* Thu Jan 14 2010 Steve Dickson <steved@redhat.com>
+- Enabled the NFS4.1 (CONFIG_NFS_V4_1) kernel config
+
+* Wed Jan 13 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.11.rc4
+- Linux 2.6.33-rc4
+
+* Wed Jan 13 2010 Kyle McMartin <kyle@redhat.com> 2.6.33-0.10.rc3.git5
+- 2.6.33-rc3-git5
+
+* Wed Jan 13 2010 Dave Airlie <airlied@redhat.com>
+- Add fbdev fix for multi-card primary console on x86-64
+- clean up all the drm- patches
+
+* Tue Jan 12 2010 Jarod Wilson <jarod@redhat.com>
+- Update lirc patch for 2.6.33 kfifo changes
+- Add Broadcom Crystal HD video decoder driver from staging
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com>
+- include/asm is gone, kludge it for now.
+
+* Mon Jan 11 2010 Dave Jones <davej@redhat.com>
+- Rebase exec-shield.
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com>
+- drop e1000 patch.
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com>
+- lirc broken due to kfifo mess.
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com>
+- drm-intel-big-hammer: fix IS_I855 macro.
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.33-rc3
+- utrace: rebased from roland's people page.
+- via-hwmon-temp-sensor.patch: upstream.
+- linux-2.6-defaults-alsa-hda-beep-off.patch: new config option supercedes.
+- readd nouveau ctxprogs as firmware/ like it should be.
+- linux-2.6-pci-cacheline-sizing.patch: upstream.
+- linux-2.6-intel-agp-clear-gtt.patch: upstream.
+- linux-2.6-nfsd4-proots.patch: upstream?
+- rebased the rest.
+
+* Mon Jan 11 2010 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Use gnu+freedo boot splash logo.
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com> 2.6.32.3-21
+- Linux 2.6.32.3
+- drm-intel-no-tv-hotplug.patch: re-add lost patch from F-12
+ 2.6.31 (#522611, #544671)
+
+* Mon Jan 11 2010 Kyle McMartin <kyle@redhat.com> 2.6.32.2-20
+- Re-enable ATM_HE (#545289)
+
+* Fri Jan 08 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.2-19
+- Add another symbol to look for when generating modules.block
+
+* Thu Jan 07 2010 David Woodhouse <David.Woodhouse@intel.com> 2.6.32.2-18
+- Drop kernel-firmware package now that it's packaged separately.
+
+* Mon Jan 04 2010 Dave Jones <davej@redhat.com>
+- Drop some of the vm/spinlock taint patches. dump_stack() already does same.
+
+* Thu Dec 24 2009 Kyle McMartin <kyle@redhat.com> 2.6.32.2-15
+- Add patch from dri-devel to fix vblanks on r600.
+ [http://marc.info/?l=dri-devel&m=126137027403059&w=2]
+
+* Fri Dec 18 2009 Kyle McMartin <kyle@redhat.com> 2.6.32.2-14
+- Linux 2.6.32.2
+- dropped upstream patches.
+
+* Fri Dec 18 2009 Roland McGrath <roland@redhat.com> - 2.6.32.1-13
+- minor utrace update
+
+* Thu Dec 17 2009 Matthew Garrett <mjg@redhat.com> 2.6.32.1-12
+- linux-2.6-driver-level-usb-autosuspend.diff: fix so it works properly...
+- linux-2.6-fix-btusb-autosuspend.patch: avoid bluetooth connection drops
+- linux-2.6-enable-btusb-autosuspend.patch: and default it to on
+- linux-2.6-autoload-wmi.patch: autoload WMI drivers
+
+* Thu Dec 17 2009 Jarod Wilson <jarod@redhat.com> 2.6.32.1-11
+- Split off onboard decode imon devices into pure input driver,
+ leaving lirc_imon for the ancient imon devices only
+- Fix NULL ptr deref in lirc_serial (#543886)
+- Assorted lirc_mceusb fixups suggested by Mauro
+- Dropped compat ioctls from lirc_dev, main ioctls should now be
+ compatible between 32-bit and 64-bit (also at Mauro's suggestion)
+
+* Wed Dec 16 2009 Roland McGrath <roland@redhat.com> 2.6.32.1-10
+- utrace update, now testing the utrace-based ptrace!
+
+* Tue Dec 15 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Added freedo.patch, with 100% Free Software Freedo logo.
+
+* Mon Dec 14 2009 Kyle McMartin <kyle@redhat.com> 2.6.32.1-9
+- 2.6.32.1
+- ext4 patches and more...
+
+* Wed Dec 09 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-8
+- Add a patch off lkml from krh to fix perf when DEBUG_PERF_USE_VMALLOC
+ (rhbz#542791)
+- Re-enable CONFIG_DEBUG_PERF_USE_VMALLOC on debug kernels.
+
+* Wed Dec 09 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-7
+- ext4-fix-insufficient-checks-in-EXT4_IOC_MOVE_EXT.patch: CVE-2009-4131
+ fix insufficient permission checking which could result in arbitrary
+ data corruption by a local unprivileged user.
+
+* Tue Dec 08 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.32-6
+- Copy fix for #540580 from F-12.
+
+* Tue Dec 08 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-5
+- new rpm changes:
+ - %{PACKAGE_VERSION} -> %{version}
+ - %{PACKAGE_RELEASE} -> %{release}
+
+* Tue Dec 08 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-4
+- Disable CONFIG_DEBUG_PERF_USE_VMALLOC for now, causes issues
+ on x86_64. (rhbz#542791)
+
+* Mon Dec 7 2009 Justin M. Forbes <jforbes@redhat.com> 2.6.32-3
+- Allow userspace to adjust kvmclock offset (#530389)
+
+* Mon Dec 7 2009 Steve Dickson <steved@redhat.com> 2.6.32-2
+- Updated the NFS4 pseudo root code to the latest release.
+
+* Thu Dec 03 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre Tue Dec 08
+- Deblobbed 2.6.32
+- Rename subpackage perf to perf-libre; add provides.
+
+* Thu Dec 03 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-1
+- Linux 2.6.32
+
+* Wed Dec 02 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.65.rc8.git5
+- 2.6.32-rc8-git5
+- nuke 9p cachefiles fix, upstream.
+- SLOW_WORK_PROC was renamed to SLOW_WORK_DEBUG, debugfs instead of procfs.
+
+* Wed Dec 02 2009 John W. Linville <linville@redhat.com> 2.6.32-0.64.rc8.git2
+- ath9k: add fixes suggested by upstream maintainer
+
+* Wed Dec 02 2009 David Woodhouse <David.Woodhouse@intel.com> 2.6.32-0.63.rc8.git2
+- forward port IOMMU fixes from F-12 for HP BIOS brokenness
+- Fix oops with intel_iommu=igfx_off
+- agp/intel: Clear full GTT at startup
+
+* Wed Dec 02 2009 Dave Airlie <airlied@redhat.com> 2.6.32-0.62.rc8.git2
+- forward port radeon fixes from F-12 + add radeon display port support
+
+* Mon Nov 30 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.61.rc8.git2
+- fix-9p-fscache.patch: fix build.
+
+* Mon Nov 30 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.60.rc8.git2
+- 2.6.32-rc8-git2 daily snapshot
+- nuke include/generated nuke-age since the patch was reverted upstream
+- config changes:
+ - generic:
+ +CONFIG_FSCACHE_OBJECT_LIST=y
+ +CONFIG_SLOW_WORK_PROC=y
+
+* Mon Nov 30 2009 Kyle McMartin <kyle@redhat.com>
+- drm-i915-fix-sync-to-vbl-when-vga-is-off.patch: add, (rhbz#541670)
+
+* Sun Nov 29 2009 Kyle McMartin <kyle@redhat.com>
+- linux-2.6-sysrq-c.patch: drop, was made consistent upstream.
+
+* Sat Nov 28 2009 Jarod Wilson <jarod@redhat.com> 2.6.32-0.55.rc8.git1
+- add device name to lirc_zilog, fixes issues w/multiple target devices
+- add lirc_imon pure input mode support for onboard decode devices
+
+* Fri Nov 27 2009 Dave Airlie <airlied@redhat.com> 2.6.32-0.54.rc8.git1
+- attempt to put nouveau back - same patch as F-12 should work
+
+* Mon Nov 23 2009 Roland McGrath <roland@redhat.com>
+- Install vmlinux.id file in kernel-devel rpm.
+
+* Fri Nov 20 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.32-0.52.rc8.git1
+- 2.6.32-rc8-git1
+- Enable CONFIG_MEMORY_HOTPLUG (and HOTREMOVE) on x86_64
+
+* Thu Nov 19 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.51.rc7.git2
+- Oops, re-enable debug builds for rawhide... didn't mean to commit that.
+
+* Thu Nov 19 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.50.rc7.git2
+- Disable FUNCTION_TRACER and DYNAMIC_FTRACE in non-debug builds for
+ Fedora 13. Some pondering required to see if it's actually worth doing
+ though. Anecdotal evidence worth half as much as benchmarks.
+ STACK_TRACER selects FUNCTION_TRACER, so it has to go off too, sadly,
+ since it hooks every mcount to log the stack depth for the task.
+
+* Thu Nov 19 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.49.rc7.git2
+- 2.6.32-rc7-git2
+
+* Mon Nov 16 2009 Dave Airlie <airlied@redhat.com> 2.6.32-0.48.rc7.git1
+- backout gpg change now that koji is fixed
+
+* Sun Nov 15 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.32-0.47.rc7.git1
+- Buildrequire gpg
+
+* Sun Nov 15 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix oops in VIA Padlock driver.
+
+* Sun Nov 15 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.32-rc7-git1
+
+* Fri Nov 13 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.32-rc7
+
+* Thu Nov 05 2009 Jarod Wilson <jarod@redhat.com>
+- Add --with dbgonly rpmbuild option to build only debug kernels
+
+* Wed Nov 04 2009 Kyle McMartin <kyle@redhat.com>
+- Make JBD2_DEBUG a toggleable config option.
+
+* Wed Nov 04 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.39.rc6.git0
+- 2.6.32-rc6, fix for NULL ptr deref in cfg80211.
+
+* Mon Nov 02 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.39.rc5.git6
+- 2.6.32-rc5-git6 (with sandeen's reversion of "ext4: Remove journal_checksum
+ mount option and enable it by default")
+
+* Mon Nov 02 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.32-rc5-git5
+
+* Tue Oct 27 2009 John W. Linville <linville@redhat.com>
+- Disable build of prism54 module
+
+* Tue Oct 27 2009 Dave Airlie <airlied@redhat.com>
+- Get dd command line args correct.
+
+* Mon Oct 26 2009 Dave Jones <davej@redhat.com>
+- Make a 20MB initramfs file so rpm gets its diskspace calculations right. (#530778)
+
+* Sat Oct 23 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.32-rc5-git3
+- Drop merged patch:
+ linux-2.6-virtio_blk-revert-QUEUE_FLAG_VIRT-addition.patch
+
+* Sat Oct 17 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.32-0.33.rc5.git1
+- 2.6.32-rc5-git1
+
+* Fri Oct 16 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.32-rc5
+- New config option: CONFIG_VMXNET3=m
+
+* Wed Oct 14 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.32-rc4-git4
+
+* Wed Oct 14 2009 Steve Dickson <steved@redhat.com>
+- Updated the NFS v4 pseudo root patch so it will apply
+- Fixed hang during NFS installs (bz 528537)
+
+* Wed Oct 14 2009 Peter Jones <pjones@redhat.com>
+- Add scsi_register_device_handler to modules.block's symbol list so
+ we'll have scsi device handlers in installer images.
+
+* Tue Oct 13 2009 Kyle McMartin <kyle@redhat.com>
+- Always build perf docs, regardless of whether we build kernel-doc.
+ Seems rather unfair to not ship the manpages half the time.
+ Also, drop BuildRequires %if when not with_doc, the rules about %if
+ there are f*!&^ing complicated.
+
+* Tue Oct 13 2009 Kyle McMartin <kyle@redhat.com>
+- Build perf manpages properly.
+
+* Tue Oct 13 2009 Dave Airlie <airlied@redhat.com>
+- cleanup some of drm vga arb bits that are upstream
+
+* Mon Oct 12 2009 Jarod Wilson <jarod@redhat.com>
+- Merge lirc compile fixes into lirc patch
+- Refresh lirc patch with additional irq handling fixage
+- Fix IR transmit on port 1 of 1st-gen mceusb transceiver
+- Support another mouse button variant on imon devices
+
+* Mon Oct 12 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.32-0.24.rc4.git0
+- Last-minute USB fix from upstream.
+
+* Sun Oct 11 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix lirc build after header changes.
+- Fix bug in lirc interrupt processing.
+
+* Sun Oct 11 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix up multiple definition of debug options
+ (EXT4_DEBUG, DEBUG_FORCE_WEAK_PER_CPU)
+
+* Sun Oct 11 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.32-rc4
+- New config options:
+ CONFIG_BE2ISCSI=m
+ CONFIG_SCSI_BFA_FC=m
+ CONFIG_USB_MUSB_HDRC is not set
+
+* Sun Oct 11 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.32-rc3-git3
+
+* Thu Oct 08 2009 Ben Skeggs <bskeggs@redhat.com>
+- ppc: compile nvidiafb as a module only, nvidiafb+nouveau = bang! (rh#491308)
+
+* Wed Oct 07 2009 Dave Jones <davej@redhat.com>
+- Enable FUNCTION_GRAPH_TRACER on x86-64.
+
+* Wed Oct 07 2009 Dave Jones <davej@redhat.com>
+- Disable CONFIG_IRQSOFF_TRACER on srostedt's recommendation.
+ (Adds unwanted overhead when not in use).
+
+* Sun Oct 04 2009 Kyle McMartin <kyle@redhat.com> 2.6.32-0.17.rc3.git0
+- 2.6.32-rc3 (bah, rebase script didn't catch it.)
+
+* Sun Oct 04 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.32-rc1-git7
+- [x86,x86_64] ACPI_PROCESSOR_AGGREGATOR=m
+
+* Mon Sep 28 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.32-rc1
+- rebased crash-driver patchset, ia64_ksyms.c conflicts. move x86 crash.h
+ file to the right place.
+- full changelog forthcoming & to fedora-kernel-list.
+
+* Mon Sep 28 2009 Kyle McMartin <kyle@redhat.com>
+- sick of rejects.
+
+* Mon Sep 28 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix up some items missing in make debug vs. make release,
+ rearrange so the options are in the same order.
+- Add new debug options:
+ CONFIG_EXT4_DEBUG
+ CONFIG_DEBUG_FORCE_WEAK_PER_CPU
+
+* Sun Sep 27 2009 Kyle McMartin <kyle@redhat.com>
+- Must now make mrproper after each config pass, due to Kbuild
+ stashing away the $ARCH variable.
+
+* Sun Sep 27 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.31-git18
+- rebased:
+ - hdpvr-ir-enable.patch
+ - linux-2.6-build-nonintconfig.patch
+ - linux-2.6-debug-sizeof-structs.patch
+ - linux-2.6-debug-vm-would-have-oomkilled.patch
+ - linux-2.6-execshield.patch
+ - linux-2.6-makefile-after_link.patch
+ - linux-2.6-serial-460800.patch
+ - linux-2.6-utrace.patch
+ - via-hwmon-temp-sensor.patch
+- merged:
+ - linux-2.6-tracehook.patch
+ - linux-2.6-die-closed-source-bios-muppets-die.patch
+ - linux-2.6-intel-iommu-updates.patch
+ - linux-2.6-ksm.patch
+ - linux-2.6-ksm-updates.patch
+ - linux-2.6-ksm-fix-munlock.patch
+ - linux-2.6-vga-arb.patch
+ - v4l-dvb-fix-cx25840-firmware-loading.patch
+ - linux-2.6-rtc-show-hctosys.patch
+
+* Fri Sep 18 2009 Dave Jones <davej@redhat.com>
+- %ghost the dracut initramfs file.
+
+* Thu Sep 17 2009 Hans de Goede <hdegoede@redhat.com>
+- Now that we have %%post generation of dracut images we do not need to
+ Require dracut-kernel anymore
+
+* Thu Sep 17 2009 Chuck Ebbert <cebbert@redhat.com>
+- Disable drm-nouveau too -- it won't build without other
+ drm updates.
+
+* Wed Sep 16 2009 Roland McGrath <roland@redhat.com>
+- Remove workaround for gcc bug #521991, now fixed.
+
+* Tue Sep 15 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.31-git4
+- rebased:
+ - linux-2.6-execshield.patch: split paravirt_types.h
+ - linux-2.6-buildnonintconfig.patch
+- disabled:
+ - ksm, drm.
+- merged:
+ - linux-2.6-kvm-pvmmu-do-not-batch-pte-updates-from-interrupt-context.patch
+ - linux-2.6-kvm-vmx-check-cpl-before-emulating-debug-register-access.patch
+ - linux-2.6-use-__pa_symbol-to-calculate-address-of-C-symbol.patch
+ - linux-2.6-xen-stack-protector-fix.patch
+ - linux-2.6-bluetooth-autosuspend.diff
+ - hid-ignore-all-recent-imon-devices.patch
+- config changes:
+ - arm:
+ - CONFIG_HIGHPTE off, seems safer this way.
+ - generic:
+ - RDS_RDMA/RDS_TCP=m
+ - SCSI_PMCRAID=m
+ - WLAN=y, CFG80211_DEFAULT_PS=y, NL80211_TESTMODE off.
+ - WL12XX=m
+ - B43_PHY_LP=y
+ - BT_MRVL=m
+ - new MISDN stuff modular.
+ - sparc:
+ - enable PERF_COUNTERS & EVENT_PROFILE
+ - ppc:
+ - XILINX_EMACSLITE=m
+
+* Mon Sep 14 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-git2
+- Drop merged patches:
+ sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch
+ linux-2.6-nfs4-ver4opt.patch
+ linux-2.6-alsa-improve-hda-powerdown.patch
+ alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch
+ linux-2.6-ahci-export-capabilities.patch
+- New s390 config option:
+ CONFIG_SCLP_ASYNC=m
+- New generic config options:
+ CONFIG_ATA_VERBOSE_ERROR=y
+ CONFIG_PATA_RDC=m
+ CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+ CONFIG_SND_HDA_PATCH_LOADER=y
+ CONFIG_SND_HDA_CODEC_CIRRUS=y
+ CONFIG_OPROFILE_EVENT_MULTIPLEX=y
+ CONFIG_CRYPTO_VMAC=m
+ CONFIG_CRYPTO_GHASH=m
+- New debug option:
+ CONFIG_DEBUG_CREDENTIALS=y in debug kernels
+
+* Mon Sep 14 2009 Steve Dickson <steved@redhat.com>
+- Added support for -o v4 mount parsing
+
+* Fri Sep 11 2009 Dave Jones <davej@redhat.com>
+- Apply NX/RO to modules
+
+* Fri Sep 11 2009 Dave Jones <davej@redhat.com>
+- Mark kernel data section as NX
+
+* Fri Sep 11 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: bring in Matthew Garret's initial switchable graphics support
+
+* Fri Sep 11 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: fixed use of strap-based panel mode when required (rh#522649)
+- nouveau: temporarily block accel on NVAC chipsets (rh#522361, rh#522575)
+
+* Thu Sep 10 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-ahci-export-capabilities.patch: Backport from upstream
+- linux-2.6-rtc-show-hctosys.patch: Export the hctosys state of an rtc
+- linux-2.6-rfkill-all.patch: Support for keys that toggle all rfkill state
+
+* Thu Sep 10 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: add some scaler-only modes for LVDS, GEM/TTM fixes
+
+* Wed Sep 09 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre Mon Sep 21
+- Deblobbed 2.6.31.
+- Updated deblobbing of linux-2.6-v4l-dvb-fixes.patch, drm-next.patch and
+drm-nouveau.patch.
+- Deblobed v4l-dvb-fix-cx25840-firmware-loading.patch and lirc-2.6.31.patch.
+
+* Wed Sep 09 2009 Dennis Gilmore <dennis@ausil.us> 2.6.31-2
+- touch the dracut initrd file when using %%{with_dracut}
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-1
+- Linux 2.6.31
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert@redhat.com>
+- Enable VXpocket and PDaudioCF PCMCIA sound drivers.
+
+* Wed Sep 09 2009 Hans de Goede <hdegoede@redhat.com>
+- Move to %%post generation of dracut initrd, because of GPL issues surrounding
+ shipping a prebuild initrd
+- Require grubby >= 7.0.4-1, for %%post generation
+
+* Wed Sep 9 2009 Steve Dickson <steved@redhat.com>
+- Updated the NFS4 pseudo root code to the latest release.
+
+* Wed Sep 09 2009 Justin M. Forbes <jforbes@redhat.com>
+- Revert virtio_blk to rotational mode. (#509383)
+
+* Wed Sep 09 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.219.rc9.git
+- uggh lost nouveau bits in page flip
+
+* Wed Sep 09 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.218.rc9.git2
+- fix r600 oops with page flip patch (#520766)
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: fix display resume on pre-G8x chips
+
+* Wed Sep 09 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: add getparam to know using tile_flags is ok for scanout
+
+* Wed Sep 09 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc9-git2
+
+* Wed Sep 9 2009 Roland McGrath <roland@redhat.com> 2.6.31-0.214.rc9.git1
+- compile with -fno-var-tracking-assignments, work around gcc bug #521991
+
+* Wed Sep 09 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.213.rc9.git1
+- fix two bugs in r600 kms, fencing + mobile lvds
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.212.rc9.git1
+- drm-nouveau.patch: fix ppc build
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.211.rc9.git1
+- drm-nouveau.patch: more misc fixes
+
+* Tue Sep 08 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.210.rc9.git1
+- drm-page-flip.patch: rebase again
+
+* Tue Sep 08 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.209.rc9.git1
+- drm-next.patch: fix r600 signal interruption return value
+
+* Tue Sep 08 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.208.rc9.git1
+- drm-nouveau.patch: latest upstream + rebase onto drm-next
+
+* Tue Sep 08 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.207.rc9.git1
+- drm-vga-arb.patch: update to avoid lockdep + add r600 support
+
+* Tue Sep 08 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.206.rc9.git1
+- drm: rebase to drm-next - r600 accel + kms should start working now
+
+* Mon Sep 07 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.205.rc9.git1
+- 2.6.31-rc9-git1
+- Temporarily hack the drm-next patch so it still applies; the result
+ should still be safe to build.
+
+* Sat Sep 05 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.204.rc9
+- 2.6.31-rc9
+
+* Fri Sep 04 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.203.rc8.git2
+- Fix kernel build errors when building firmware by removing the
+ .config file before that step and restoring it afterward.
+
+* Thu Sep 03 2009 Adam Jackson <ajax@redhat.com>
+- drm-ddc-caching-bug.patch: Empty the connector's mode list when it's
+ disconnected.
+
+* Thu Sep 03 2009 Jarod Wilson <jarod@redhat.com>
+- Update hdpvr and lirc_zilog drivers for 2.6.31 i2c
+
+* Thu Sep 03 2009 Justin M.Forbes <jforbes@redhat.com>
+- Fix xen guest with stack protector. (#508120)
+- Small kvm fixes.
+
+* Wed Sep 02 2009 Adam Jackson <ajax@redhat.com> 2.6.31-0.199.rc8.git2
+- drm-intel-pm.patch: Disable by default, too flickery on too many machines.
+ Enable with i915.powersave=1.
+
+* Wed Sep 02 2009 Dave Jones <davej@redhat.com>
+- Add missing scriptlet dependancy. (#520788)
+
+* Tue Sep 01 2009 Adam Jackson <ajax@redhat.com>
+- Make DRM less chatty about EDID failures. No one cares.
+
+* Tue Sep 01 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc8-git2
+- Blank out drm-intel-next: entire contents are now upstream.
+
+* Tue Sep 01 2009 Dave Jones <davej@redhat.com>
+- Make firmware buildarch noarch. (Suggested by drago01 on irc)
+
+* Tue Sep 01 2009 Jarod Wilson <jarod@redhat.com>
+- Fix up lirc_zilog to enable functional IR transmit and receive
+ on the Hauppauge HD PVR
+- Fix audio on PVR-500 when used in same system as HVR-1800 (#480728)
+
+* Sun Aug 30 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc8-git1
+- Drop linux-2.6-inotify-accounting.patch, merged upstream.
+
+* Sun Aug 30 2009 Jarod Wilson <jarod@redhat.com>
+- fix lirc_imon oops on older devices w/o tx ctrl ep (#520008)
+
+* Fri Aug 28 2009 Eric Paris <eparis@redhat.com> 2.6.31-0.190.rc8
+- fix inotify length accounting and send inotify events
+
+* Fri Aug 28 2009 David Woodhouse <David.Woodhouse@intel.com>
+- Enable Solos DSL driver
+
+* Fri Aug 28 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc8
+
+* Thu Aug 27 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.185.rc7.git6
+- 2.6.31-rc7-git6
+- Drop patch merged upstream:
+ xen-fb-probe-fix.patch
+
+* Thu Aug 27 2009 Adam Jackson <ajax@redhat.com>
+- drm-rv710-ucode-fix.patch: Treat successful microcode load on RV710 as,
+ you know, success. (#519718)
+
+* Thu Aug 27 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc7-git5
+- Drop patch linux-2.6-ima-leak.patch, now merged upstream.
+
+* Wed Aug 26 2009 Jarod Wilson <jarod@redhat.com>
+- Fix up hdpvr ir enable patch for use w/modular i2c (David Engel)
+
+* Wed Aug 26 2009 Eric Paris <eparis@redhat.com>
+- fix iint_cache leak in IMA code
+ drop the ima=0 patch
+
+* Wed Aug 26 2009 Justin M. Forbes <jforbes@redhat.com>
+- Fix munlock with KSM (#516909)
+- Re-enable KSM
+
+* Wed Aug 26 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc7-git4
+- Drop patches merged upstream:
+ xen-x86-fix-stackprotect.patch
+ xen-x86-no-stackprotect.patch
+
+* Wed Aug 26 2009 Adam Jackson <ajax@redhat.com>
+- drm-intel-next.patch: Update, various output setup fixes.
+
+* Wed Aug 26 2009 David Woodhouse <David.Woodhouse@intel.com>
+- Make WiMAX modular (#512070)
+
+* Tue Aug 25 2009 Kyle McMartin <kyle@redhat.com>
+- allow-disabling-ima.diff: debugging patch... adds ima=0 kernel
+ param to disable initialization of IMA.
+
+* Tue Aug 25 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.174.rc7.git2
+- drm-nouveau.patch: upstream update, pre-nv50 tv-out + misc fixes
+
+* Tue Aug 25 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.173.rc7.git2
+- Fix Xen boot (#508120)
+
+* Tue Aug 25 2009 Dave Airlie <airlied@redhat.com>
+- pull in drm-next tree + rebase around it
+
+* Mon Aug 24 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc7-git2
+
+* Mon Aug 24 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc7-git1
+
+* Sat Aug 22 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc7
+
+* Thu Aug 20 2009 Mark McLoughlin <markmc@redhat.com>
+- Disable LZMA for xen (#515831)
+
+* Thu Aug 20 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc6-git5
+- Fix up drm-r600-kms.patch
+- Drop fix-perf-make-man-failure.patch
+
+* Wed Aug 19 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc6-git5
+- Revert linux-2.6-debug-vm-would-have-oomkilled.patch to v1.2
+ because upstream changes to oom-kill.c were all reverted.
+
+* Tue Aug 18 2009 Kyle McMartin <kyle@redhat.com>
+- Fix up perf so that it builds docs now that they are fixed.
+- with_docs disables perf docs too. be warned. (logic is that the
+ build deps are (mostly) the same, so if you don't want one, odds are...)
+
+* Tue Aug 18 2009 Dave Jones <davej@redhat.com>
+- 2.6.31-rc6-git3
+
+* Mon Aug 17 2009 Dave Jones <davej@redhat.com> 2.6.31-0.161.rc6.git2
+- 2.6.31-rc6-git2
+
+* Mon Aug 17 2009 Chuck Ebbert <cebbert@redhat.com>
+- Stop generating the (unused) ppc64-kdump.config file.
+
+* Mon Aug 17 2009 Jarod Wilson <jarod@redhat.com>
+- Add new lirc driver for built-in ENE0100 device on some laptops
+
+* Sun Aug 16 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.158.rc6
+- Improve the perf script so it prints something helpful if the
+ perf binary doesn't exist.
+
+* Sat Aug 15 2009 Dave Jones <davej@redhat.com> 2.6.31-0.157.rc6
+- Disable KSM patches on a hunch. Chasing the "encrypted VGs don't work" bug.
+
+* Fri Aug 14 2009 Dave Jones <davej@redhat.com> 2.6.31-0.155.rc6
+- 2.6.31-rc6
+
+* Wed Aug 12 2009 Kyle McMartin <kyle@redhat.com>
+- fix perf.
+- move perf to perf.$ver instead of perf-$ver...
+
+* Wed Aug 12 2009 Dennis Gilmore <dennis@ausil.us>
+- Obsolete kernel-smp on sparc64
+- Require grubby >= 7.0.2-1 since thats what introduces the dracut options we use
+
+* Wed Aug 12 2009 Kristian Høgsberg <krh@redhat.com>
+- Fix drm-page-flip.patch to not break radeon kms and to not reset
+ crtc offset into fb on flip.
+
+* Wed Aug 12 2009 Adam Jackson <ajax@redhat.com>
+- Update drm-intel-next patch
+
+* Tue Aug 11 2009 Dennis Gilmore <dennis@ausil.us> - 2.6.31-0.149.rc5.git3
+- disable building the -smp kernel on sparc64
+- disable building kernel-perf on sparc64 syscalls not supported
+
+* Tue Aug 11 2009 Eric Paris <eparis@redhat.com>
+- Enable config IMA
+
+* Tue Aug 11 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: various cleanups and fixes + more sanity checking in dma paths
+
+* Mon Aug 10 2009 Jarod Wilson <jarod@redhat.com>
+- Add new device ID to lirc_mceusb (#512483)
+- Fix some lockdep false positives
+- Add support for setting and enabling iMON clock via sysfs
+- Add tunable pad threshold support to lirc_imon
+- Add new pseudo-IR protocl to lirc_imon for universals w/o a pad
+- Fix mouse device support on older iMON devices
+
+* Mon Aug 10 2009 David Woodhouse <David.Woodhouse@intel.com> 2.6.31-0.145.rc5.git3
+- Merge latest Intel IOMMU fixes and BIOS workarounds, re-enable by default.
+
+* Sun Aug 09 2009 Kyle McMartin <kyle@redhat.com>
+- btusb autosuspend: fix build on !CONFIG_PM by stubbing out
+ suspend/resume methods.
+
+* Sat Aug 08 2009 Dennis Gilmore <dennis@ausil.us> 2.6.31-0.141.rc5.git3
+- disable kgdb on sparc64 uni-processor kernel
+- set max cpus to 256 on sparc64
+- enable AT keyboard on sparc64
+
+* Fri Aug 07 2009 Justin M. Forbes <jforbes@redhat.com>
+- Apply KSM updates from upstream
+
+* Fri Aug 07 2009 Hans de Goede <hdegoede@redhat.com>
+- When building a dracut generic initrd tell new-kernel-pkg to use that
+ instead of running mkinitrd
+
+* Fri Aug 07 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.139.rc5.git3
+- drm-r600-kms.patch - update r600 KMS
+- drm-radeon-fixes.patch - patches for queue to Linus
+
+* Thu Aug 06 2009 Justin M. Forbes <jforbes@redhat.com> 2.6.31-0.138.rc5.git3
+- Fix kvm virtio_blk errors (#514901)
+
+* Thu Aug 06 2009 Adam Jackson <ajax@redhat.com>
+- Hush DRM vblank warnings, they're constant (and harmless) under DRI2.
+
+* Thu Aug 06 2009 Dave Airlie <airlied@redhat.com> 2.6.31.0.134.rc5.git3
+- fixup vga arb warning at startup and handover between gpus
+
+* Thu Aug 06 2009 Kyle McMartin <kyle@redhat.com> 2.6.31.0.133.rc5.git3
+- die-floppy-die.patch: it's the 21st century, let's not rely on
+ steam powered technology.
+
+* Wed Aug 05 2009 Dave Airlie <airlied@redhat.com> 2.6.31.0.132.rc5.git3
+- revert-ftrace-powerpc-snafu.patch - fix ppc build
+
+* Wed Aug 05 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: respect nomodeset
+
+* Wed Aug 05 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix /usr/sbin/perf script. (#515494)
+
+* Wed Aug 05 2009 Dave Jones <davej@redhat.com>
+- Fix shift in pci cacheline size printk.
+
+* Wed Aug 05 2009 Dave Airlie <airlied@redhat.com> 2.6.31.0.128.rc5.git3
+- 2.6.31-rc5-git3
+- drop cpufreq + set memory fixes
+
+* Wed Aug 05 2009 Dave Airlie <airlied@redhat.com>
+- Add Jeromes initial r600 kms work.
+- rebase arb patch
+
+* Tue Aug 04 2009 Kyle McMartin <kyle@redhat.com>
+- alsa-tell-user-that-stream-to-be-rewound-is-suspended.patch: apply patch
+ destined for 2.6.32, requested by Lennart.
+
+* Tue Aug 04 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: more code share between nv50/<nv50 kms, bug fixes
+
+* Tue Aug 04 2009 Dave Airlie <airlied@redhat.com>
+- update VGA arb patches again
+
+* Mon Aug 03 2009 Adam Jackson <ajax@redhat.com>
+- Update intel drm from anholt's tree
+- Rebase drm-intel-pm.patch to match
+- Drop gen3 fb hack, merged
+- Drop previous watermark setup change
+
+* Mon Aug 03 2009 Dave Jones <davej@redhat.com> 2.6.31-0.122.rc5.git2
+- 2.6.31-rc5-git2
+
+* Mon Aug 03 2009 Adam Jackson <ajax@redhat.com>
+- (Attempt to) fix watermark setup on Intel 9xx parts.
+
+* Mon Aug 03 2009 Jarod Wilson <jarod@redhat.com>
+- make usbhid driver ignore all recent SoundGraph iMON devices, so the
+ lirc_imon driver can grab them instead
+
+* Mon Aug 03 2009 Dave Airlie <airlied@redhat.com>
+- update VGA arb patches
+
+* Sat Aug 01 2009 David Woodhouse <David.Woodhouse@intel.com> 2.6.31-0.118.rc5
+- Fix boot failures on ppc32 (#514010, #505071)
+
+* Fri Jul 31 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.117.rc5
+- Linux 2.6.31-rc5
+
+* Fri Jul 31 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-dell-laptop-rfkill-fix.patch: Fix up Dell rfkill
+
+* Fri Jul 31 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: build against 2.6.31-rc4-git6, fix script parsing on some G8x chips
+
+* Thu Jul 30 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.31-rc4-git6
+ New config item: CONFIG_BATTERY_DS2782 is not set
+- Add last-minute set_memory_wc() fix from LKML.
+
+* Thu Jul 30 2009 Matthew Garrett <mjg@redhat.com>
+- drm-intel-pm.patch: Don't reclock external outputs. Increase the reduced
+ clock slightly to avoid upsetting some hardware. Disable renderclock
+ adjustment for the moment - it's breaking on some hardware.
+
+* Thu Jul 30 2009 Ben Skeggs <bskeggs@redhat.com>
+- nouveau: another DCB 1.5 entry, G80 corruption fixes, small <G80 KMS fix
+
+* Thu Jul 30 2009 Dave Airlie <airlied@redhat.com>
+- fix VGA ARB + kms
+
+* Wed Jul 29 2009 Dave Jones <davej@redhat.com>
+- Add support for dracut. (Harald Hoyer)
+
+* Wed Jul 29 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: nv50/nva0 tiled scanout fixes, nv40 kms fixes
+
+* Wed Jul 29 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.31-rc4-git3
+- Drop linux-2.6-ecryptfs-overflow-fixes.patch, merged upstream now.
+
+* Wed Jul 29 2009 Dave Airlie <airlied@redhat.com>
+- update VGA arb patches
+
+* Tue Jul 28 2009 Adam Jackson <ajax@redhat.com>
+- Remove the pcspkr modalias. If you're still living in 1994, load it
+ by hand.
+
+* Tue Jul 28 2009 Eric Sandeen <sandeen@redhat.com> 2.6.31-0.102.rc4.git2
+- Fix eCryptfs overflow issues (CVE-2009-2406, CVE-2009-2407)
+
+* Tue Jul 28 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.101.rc4.git2
+- 2.6.31-rc4-git2
+- rebase linux-2.6-fix-usb-serial-autosuspend.diff
+- config changes:
+ - USB_GSPCA_SN9C20X=m (_EVDEV=y)
+
+* Tue Jul 28 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: cleanup userspace API, various bugfixes.
+ Looks worse than it is, register macros got cleaned up, which
+ touches pretty much everywhere..
+
+* Mon Jul 27 2009 Adam Jackson <ajax@redhat.com>
+- Warn quieter about not finding PCI bus parents for ROM BARs, they're
+ not usually needed and there's nothing you can do about it anyway.
+
+* Mon Jul 27 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-alsa-improve-hda-powerdown.patch - attempt to reduce audio glitches
+ caused by HDA powerdown
+- disable CONFIG_DEBUG_KOBJECT again for now, since it produces huge dmesg spew
+
+* Mon Jul 27 2009 Dave Airlie <airlied@redhat.com>
+- update vga arb code
+
+* Mon Jul 27 2009 Matthew Garrett <mjg@redhat.com>
+- drm-intel-pm.patch - Add runtime PM for Intel graphics
+
+* Fri Jul 24 2009 Kristian Høgsberg <krh@redhat.com>
+- Add drm-page-flip.patch to support vsynced page flipping on intel
+ chipsets.
+- Really add patch.
+- Fix patch to not break nouveau.
+
+* Fri Jul 24 2009 Chuck Ebbert <cebbert@redhat.com>
+- Enable CONFIG_DEBUG_KOBJECT in debug kernels. (#513606)
+
+* Thu Jul 23 2009 Kyle McMartin <kyle@redhat.com>
+- perf BuildRequires binutils-devel now.
+
+* Thu Jul 23 2009 Justin M. Forbes <jforbes@redhat.com>
+- Add KSM support
+
+* Thu Jul 23 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.87.rc4
+- Linux 2.6.31-rc4
+- config changes:
+ - USB_CDC_PHONET=m [all]
+ - EVENT_PROFILE=y [i386, x86_64, powerpc, s390]
+
+* Wed Jul 22 2009 Tom "spot" Callaway <tcallawa@redhat.com>
+- We have to override the new %%install behavior because, well... the kernel is special.
+
+* Wed Jul 22 2009 Dave Jones <davej@redhat.com>
+- 2.6.31-rc3-git5
+
+* Wed Jul 22 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.82.rc3.git4
+- Enable KMS for nouveau
+
+* Wed Jul 22 2009 Ben Skeggs <bskeggs@redhat.com>
+- Update nouveau from upstream (initial suspend/resume + misc bugfixes)
+
+* Mon Jul 20 2009 Adam Jackson <ajax@redhat.com>
+- Disable VGA arbiter patches for a moment
+
+* Mon Jul 20 2009 Adam Jackson <ajax@redhat.com>
+- Revive 4k framebuffers for intel gen3
+
+* Mon Jul 20 2009 Dave Jones <davej@redhat.com> 2.6.31-0.78.rc3.git4
+- Enable CONFIG_RTC_HCTOSYS (#489494)
+
+* Mon Jul 20 2009 Dave Jones <davej@redhat.com> 2.6.31-0.77.rc3.git4
+- Don't build 586 kernels any more.
+
+* Sun Jul 19 2009 Dave Jones <davej@redhat.com> 2.6.31-0.75.rc3.git4
+- build a 'full' package on i686 (Bill Nottingham)
+
+* Sun Jul 19 2009 Dave Jones <davej@redhat.com> 2.6.31-0.74.rc3.git4
+- 2.6.31-rc3-git4
+
+* Sat Jul 18 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-driver-level-usb-autosuspend.diff - allow drivers to enable autopm
+- linux-2.6-fix-usb-serial-autosuspend.diff - fix generic usb-serial autopm
+- linux-2.6-qcserial-autosuspend.diff - enable autopm by default on qcserial
+- linux-2.6-bluetooth-autosuspend.diff - enable autopm by default on btusb
+- linux-2.6-usb-uvc-autosuspend.diff - enable autopm by default on uvc
+
+* Thu Jul 16 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc3-git3
+
+* Thu Jul 16 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-defaults-aspm.patch - default ASPM to on for PCIe >= 1.1 hardware
+
+* Thu Jul 16 2009 Dave Airlie <airlied@redhat.com> 2.6.31-0.69.rc3
+- linux-2.6-vga-arb.patch - add VGA arbiter.
+- drm-vga-arb.patch - add VGA arbiter support to drm
+
+* Tue Jul 14 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.68-rc3
+- 2.6.31-rc3
+- config changes:
+ - RTL8192SU is not set, (staging)
+
+* Mon Jul 13 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.67.rc2.git9
+- 2.6.31-rc2-git9
+- config changes:
+ - BLK_DEV_OSD=m
+
+* Mon Jul 13 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: update from upstream
+
+* Fri Jul 10 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc2-git6
+- Drop dmadebug-spinlock patch -- merged upstream.
+
+* Fri Jul 10 2009 Dave Jones <davej@redhat.com> 2.6.31-0.64.rc2.git5
+- Don't jump through hoops that ppc powerbooks have to on sensible systems
+ in cpufreq_suspend.
+
+* Fri Jul 10 2009 Dave Jones <davej@redhat.com>
+- 2.6.31-rc2-git5
+
+* Thu Jul 09 2009 Dave Jones <davej@redhat.com> 2.6.31-0.62.rc2.git4
+- Use correct spinlock initialization in dma-debug
+
+* Thu Jul 09 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.61.rc2.git4
+- 2.6.31-rc2-git4
+
+* Thu Jul 09 2009 Jarod Wilson <jarod@redhat.com>
+- Enable IR receiver on the Hauppauge HD PVR
+- Trim the changelog, axing everything before 2.6.29 (see cvs
+ if you still really want to see that far back)
+
+* Wed Jul 08 2009 Dave Jones <davej@redhat.com>
+- Enable a bunch of debugging options that were missed somehow.
+
+* Wed Jul 08 2009 Kyle McMartin <kyle@redhat.com>
+- Bump NR_CPUS on x86_64 to 512.
+
+* Wed Jul 08 2009 Adam Jackson <ajax@redhat.com>
+- drm-no-gem-on-i8xx.patch: Drop, intel 2D driver requires GEM now. This
+ should be entertaining.
+
+* Wed Jul 08 2009 Kyle McMartin <kyle@redhat.com>
+- First cut of /usr/sbin/perf wrapper script and 'perf'
+ subpackage.
+
+* Wed Jul 08 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.54.rc2.git2
+- Rebase and re-apply all the Fedora-specific linux-2.6-debug-*
+ patches.
+- Cull a bunch of upstreamed patches from the spec.
+
+* Wed Jul 08 2009 Steve Dickson <steved@redhat.com>
+- Added NFSD v4 dynamic pseudo root patch which allows
+ NFS v3 exports to be mounted by v4 clients.
+
+* Tue Jul 07 2009 Jarod Wilson <jarod@redhat.com>
+- See if we can't make lirc_streamzap behave better... (#508952)
+
+* Tue Jul 07 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.47.rc2.git2
+- 2.6.31-rc2-git2
+
+* Tue Jul 07 2009 Jarod Wilson <jarod@redhat.com>
+- Make lirc_i2c actually work with 2.6.31 i2c
+
+* Mon Jul 06 2009 Chuck Ebbert <cebbert@redhat.com>
+- Use LZMA for kernel compression on X86.
+
+* Mon Jul 06 2009 Jarod Wilson <jarod@redhat.com>
+- Hack up lirc_i2c and lirc_zilog to compile with 2.6.31 i2c
+ changes. The drivers might not actually be functional now, but
+ at least they compile again. Will fix later, if need be...
+
+* Sat Jul 04 2009 Dave Jones <davej@redhat.com> 2.6.31-0.42.rc2
+- 2.6.31-rc2
+
+* Sat Jul 04 2009 Chuck Ebbert <cebbert@redhat.com>
+- 2.6.31-rc1-git11
+
+* Fri Jul 03 2009 Hans de Goede <hdegoede@redhat.com>
+- Disable v4l1 ov511 and quickcam_messenger drivers (obsoleted by
+ v4l2 gspca subdrivers)
+
+* Thu Jul 02 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.39.rc1.git9
+- 2.6.31-rc1-git9
+- linux-2.6-dm-fix-exstore-search.patch: similar patch merged upstream.
+
+* Tue Jun 30 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.38.rc1.git7
+- 2.6.31-rc1-git7
+
+* Tue Jun 30 2009 Dave Jones <davej@redhat.com> 2.6.31-0.37.rc1.git5
+- Disable kmemleak. Way too noisy, and not finding any real bugs.
+
+* Tue Jun 30 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: match upstream
+
+* Mon Jun 29 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.35.rc1.git5
+- 2.6.31-rc1-git5
+- CONFIG_LEDS_LP3944=m
+
+* Mon Jun 29 2009 Chuck Ebbert <cebbert@redhat.com>
+- Try to fix the dm overlay bug for real (#505121)
+
+* Sat Jun 27 2009 Ben Skeggs <bskeggs@redhat.com> 2.6.31-0.33.rc1.git2
+- drm-nouveau.patch: fix conflicts from 2.6.31-rc1-git2
+
+* Fri Jun 26 2009 Dave Jones <davej@redhat.com> 2.6.31-0.31.rc1.git2
+- Further improvements to kmemleak
+
+* Fri Jun 26 2009 Dave Jones <davej@redhat.com> 2.6.31-0.30.rc1.git2
+- 2.6.31-rc1-git2
+
+* Fri Jun 26 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: latest upstream + reenable
+
+* Thu Jun 25 2009 Dave Jones <davej@redhat.com> 2.6.31-0.29.rc1
+- Make kmemleak scan process stacks by default.
+ Should reduce false positives (which does also increase false negatives,
+ but that's at least less noisy)
+
+* Wed Jun 24 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.28.rc1
+- 2.6.31-rc1
+- linux-2.6-utrace.patch: rebase on kernel/Makefile changes
+- config changes:
+ - generic:
+ - CONFIG_DM_LOG_USERSPACE=m
+ - CONFIG_DM_MULTIPATH_QL=m
+ - CONFIG_DM_MULTIPATH_ST=m
+ - CONFIG_BATTERY_MAX17040=m
+ - CONFIG_I2C_DESIGNWARE is off (depends on clk.h)
+
+* Wed Jun 24 2009 Kyle McMartin <kyle@redhat.com>
+- Move perf to /usr/libexec/perf-$KernelVer.
+
+* Wed Jun 24 2009 Kyle McMartin <kyle@redhat.com>
+- config changes:
+ - generic:
+ - CONFIG_SCSI_DEBUG=m (was off, requested by davidz)
+
+* Wed Jun 24 2009 Dave Jones <davej@redhat.com> 2.6.31-0.22.rc0.git22
+- 2.6.30-git22
+
+* Tue Jun 23 2009 Dave Jones <davej@redhat.com> 2.6.31-0.22.rc0.git20
+- 2.6.30-git20
+
+* Mon Jun 22 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.24.rc0.git18
+- Enable tools/perf, installed as /bin/perf-$KernelVer. Docs and a /bin/perf
+ wrapper come next if this builds ok.
+
+* Mon Jun 22 2009 Kyle McMartin <kyle@redhat.com>
+- sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch: pull in
+ two fixes from Mike Galbraith from tip.git
+
+* Sun Jun 21 2009 Dave Jones <davej@redhat.com> 2.6.31-0.21.rc0.git18
+- Add patch to possibly fix the pktlen problem on via-velocity.
+
+* Sun Jun 21 2009 Dave Jones <davej@redhat.com> 2.6.31-0.20.rc0.git18
+- 2.6.30-git18
+ VIA crypto & mmc patches now upstream.
+
+* Sun Jun 21 2009 Dave Jones <davej@redhat.com>
+- Determine cacheline sizes in a generic manner.
+
+* Sun Jun 21 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.31-0.18.rc0.git17
+- 2.6.30-git17
+- Config changes:
+ - powerpc32-generic
+ CONFIG_PERF_COUNTERS=y
+ - generic
+ CONFIG_KEYBOARD_LM8323 is not set
+ CONFIG_MOUSE_SYNAPTICS_I2C=m
+ CONFIG_TOUCHSCREEN_EETI=m
+ CONFIG_TOUCHSCREEN_W90X900=m
+- Dropped agp-set_memory_ucwb.patch, all fixed upstream now.
+
+* Sat Jun 20 2009 Kyle McMartin <kyle@redhat.com> 2.6.31.0.17.rc0.git15
+- config changes:
+ - ppc generic:
+ - CONFIG_PPC_DISABLE_WERROR=y (switched... chrp fails otherwise, stack
+ frame size.)
+
+* Sat Jun 20 2009 Kyle McMartin <kyle@redhat.com> 2.6.31.0.16.rc0.git15
+- 2.6.30-git15
+- config changes:
+ - generic:
+ - CONFIG_LBDAF=y
+ - staging:
+ - CONFIG_USB_SERIAL_QUATECH2 is not set
+ - CONFIG_VT6655 is not set
+ - CONFIG_USB_CPC is not set
+ - CONFIG_RDC_17F3101X is not set
+ - CONFIG_FB_UDL is not set
+ - ppc32:
+ - CONFIG_KMETER1=y
+ - ppc generic:
+ - CONFIG_PPC_DISABLE_WERROR is not set
+- lirc disabled due to i2c detach_client removal.
+
+* Sat Jun 20 2009 Kyle McMartin <kyle@redhat.com>
+- sched-introduce-SCHED_RESET_ON_FORK-scheduling-policy-flag.patch: add,
+ queued in tip/sched/core (ca94c442535a44d508c99a77e54f21a59f4fc462)
+
+* Fri Jun 19 2009 Kyle McMartin <kyle@redhat.com> 2.6.31.0.15.rc0.git14
+- Fix up ptrace, hopefully. Builds on x86_64 at least.
+
+* Fri Jun 19 2009 Chuck Ebbert <cebbert@redhat.com>
+- linux-2.6-tip.git-203abd67b75f7714ce98ab0cdbd6cfd7ad79dec4.patch
+ Fixes oops on boot with qemu (#507007)
+
+* Fri Jun 19 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.13.rc0.git14
+- 2.6.30-git14
+
+* Fri Jun 19 2009 Chuck Ebbert <cebbert@redhat.com>
+- Fix up the via-sdmmc and via-hwmon-temp-sensor patches.
+- Drop VIA Padlock patches merged upstream:
+ via-rng-enable-64bit.patch
+ via-padlock-10-enable-64bit.patch
+ via-padlock-20-add-x86-dependency.patch
+
+* Thu Jun 18 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Add -libre provides for kernel and devel packages.
+
+* Thu Jun 18 2009 Kyle McMartin <kyle@redhat.com> 2.6.31-0.11.rc0.git13
+- 2.6.30-git13
+- config changes:
+ - arm:
+ - CONFIG_UACCESS_WITH_MEMCPY is not set
+ - i686-PAE:
+ - CONFIG_XEN_DEV_EVTCHN=m
+ - CONFIG_XEN_SYS_HYPERVISOR=y
+ - ia64:
+ - CONFIG_RCU_FANOUT=64
+ - nodebug:
+ - CONFIG_DEBUG_KMEMLEAK is not set
+ - CONFIG_DEBUG_KMEMLEAK_TEST=m
+ - powerpc:
+ - CONFIG_CAN_SJA1000_OF_PLATFORM=m
+ - CONFIG_PPC_EMULATED_STATS=y
+ - CONFIG_SWIOTLB=y
+ - CONFIG_RDS is not set (broken on ppc32)
+ - powerpc32:
+ - CONFIG_RCU_FANOUT=32
+ - powerpc64:
+ - CONFIG_RCU_FANOUT=64
+ - CONFIG_PERF_COUNTERS=y
+ - s390x:
+ - CONFIG_RCU_FANOUT=64
+ - CONFIG_SECCOMP=y
+ - CONFIG_PM=y
+ - CONFIG_HIBERNATION=y
+ - CONFIG_PM_STD_PARTITION="/dev/jokes"
+ - sparc64:
+ - CONFIG_RCU_FANOUT=64
+ - x86:
+ - CONFIG_RCU_FANOUT=32
+ - CONFIG_IOMMU_STRESS is not set
+ - CONFIG_PERF_COUNTERS=y
+ - CONFIG_X86_OLD_MCE is not set
+ - CONFIG_X86_MCE_INTEL=y
+ - CONFIG_X86_MCE_AMD=y
+ - CONFIG_X86_ANCIENT_MCE is not set
+ - CONFIG_X86_MCE_INJECT is not set
+ - x86_64:
+ - CONFIG_EDAC_AMD64=m
+ - CONFIG_EDAC_AMD64_ERROR_INJECTION is not set
+ - CONFIG_XEN_DEV_EVTCHN=m
+ - CONFIG_XEN_SYS_HYPERVISOR=y
+ - CONFIG_RCU_FANOUT=64
+ - CONFIG_IOMMU_STRESS is not set
+ - CONFIG_PERF_COUNTERS=y
+ - CONFIG_X86_MCE_INJECT is not set
+ - generic:
+ - CONFIG_RCU_FANOUT=32
+ - CONFIG_MMC_SDHCI_PLTFM=m
+ - CONFIG_MMC_CB710=m
+ - CONFIG_CB710_CORE=m
+ - CONFIG_CB710_DEBUG is not set
+ - CONFIG_SCSI_MVSAS_DEBUG is not set
+ - CONFIG_SCSI_BNX2_ISCSI=m
+ - CONFIG_NETFILTER_XT_MATCH_OSF=m
+ - CONFIG_RFKILL_INPUT=y (used to be =m, which was invalid)
+ - CONFIG_DE2104X_DSL=0
+ - CONFIG_KS8842 is not set
+ - CONFIG_CFG80211_DEBUGFS=y
+ - CONFIG_MAC80211_DEFAULT_PS=y
+ - CONFIG_IWM=m
+ - CONFIG_IWM_DEBUG is not set
+ - CONFIG_RT2800USB=m
+ - CONFIG_CAN_DEV=m
+ - CONFIG_CAN_CALC_BITTIMING=y
+ - CONFIG_CAN_SJA1000=m
+ - CONFIG_CAN_SJA1000_PLATFORM=m
+ - CONFIG_CAN_EMS_PCI=m
+ - CONFIG_CAN_KVASER_PCI=m
+ - CONFIG_EEPROM_MAX6875=m
+ - CONFIG_SENSORS_TMP401=m
+ - CONFIG_MEDIA_SUPPORT=m
+ - CONFIG_SND_CTXFI=m
+ - CONFIG_SND_LX6464ES=m
+ - CONFIG_SND_HDA_CODEC_CA0110=y
+ - CONFIG_USB_XHCI_HCD=m
+ - CONFIG_USB_XHCI_HCD_DEBUGGING is not set
+ - CONFIG_DRAGONRISE_FF=y (used to be =m)
+ - CONFIG_GREENASIA_FF=y (used to be =m)
+ - CONFIG_SMARTJOYPLUS_FF=y (used to be =m)
+ - CONFIG_USB_NET_INT51X1=m
+ - CONFIG_CUSE=m
+ - CONFIG_FUNCTION_PROFILER=y
+ - CONFIG_RING_BUFFER_BENCHMARK=m
+ - CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+ - CONFIG_REGULATOR_MAX1586=m
+ - CONFIG_REGULATOR_LP3971=m
+ - CONFIG_RCU_FANOUT_EXACT is not set
+ - CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+ - CONFIG_FSNOTIFY=y
+ - CONFIG_IEEE802154=m
+ - CONFIG_IEEE802154_DRIVERS=m
+ - CONFIG_IEEE802154_FAKEHARD=m
+ - CONFIG_CNIC=m
+
+* Wed Jun 17 2009 Jarod Wilson <jarod@redhat.com>
+- New lirc_imon hotness, update 2:
+ * support dual-interface devices with a single lirc device
+ * directional pad functions as an input device mouse
+ * touchscreen devices finally properly supported
+ * support for using MCE/RC-6 protocol remotes
+ * fix oops in RF remote association code (F10 bug #475496)
+ * fix re-enabling case/panel buttons and/or knobs
+- Add some misc additional lirc_mceusb2 transceiver IDs
+- Add missing unregister_chrdev_region() call to lirc_dev exit
+- Add it8720 support to lirc_it87
+
+* Tue Jun 16 2009 Chuck Ebbert <cebbert@redhat.com>
+- Update via-sdmmc driver
+
+* Mon Jun 15 2009 Jarod Wilson <jarod@redhat.com>
+- Update lirc patches w/new imon hotness
+
+* Fri Jun 12 2009 Chuck Ebbert <cebbert@redhat.com>
+- Update VIA temp sensor and mmc drivers.
+
+* Fri Jun 12 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Deblobbed 2.6.30.
+
+* Fri Jun 12 2009 John W. Linville <linville@redhat.com> 2.6.30-6
+- neigh: fix state transition INCOMPLETE->FAILED via Netlink request
+- enable CONFIG_ARPD (used by OpenNHRP)
+
+* Wed Jun 10 2009 Chuck Ebbert <cebbert@redhat.com>
+- VIA Nano updates:
+ Enable Padlock AES encryption and random number generator on x86-64
+ Add via-sdmmc and via-cputemp drivers
+
+* Wed Jun 10 2009 Kyle McMartin <kyle@redhat.com> 2.6.30-1
+- Linux 2.6.30 rebase.
+
+* Tue Jun 09 2009 John W. Linville <linville@tuxdriver.com>
+- Clean-up some wireless bits in config-generic
+
+* Tue Jun 09 2009 Chuck Ebbert <cebbert@redhat.com>
+- Add support for ACPI P-states on VIA processors.
+- Disable the e_powersaver driver.
+
+* Tue Jun 09 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.30-rc8-git6
+
+* Fri Jun 05 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.30-rc8-git1
+
+* Wed Jun 03 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc8
+
+* Tue Jun 2 2009 Roland McGrath <roland@redhat.com>
+- utrace update (fixes stap PR10185)
+
+* Tue Jun 02 2009 Dave Jones <davej@redhat.com>
+- For reasons unknown, RT2X00 driver was being built-in.
+ Make it modular.
+
+* Tue Jun 02 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc7-git5
+
+* Sat May 30 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc7-git4
+
+* Thu May 28 2009 Dave Jones <davej@redhat.com
+- 2.6.30-rc7-git3
+
+* Wed May 27 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc7-git2
+
+* Tue May 26 2009 Dave Jones <davej@redhat.com>
+- Various cpufreq patches from git.
+
+* Tue May 26 2009 Dave Jones <davej@redhat.com
+- 2.6.30-rc7-git1
+
+* Tue May 26 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc7-git1
+
+* Mon May 25 2009 Kyle McMartin <kyle@redhat.com>
+- rds-only-on-64-bit-or-x86.patch: drop patch, issue is fixed upstream.
+
+* Sat May 23 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc7
+
+* Thu May 21 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc6-git6
+
+* Wed May 20 2009 Chuck Ebbert <cebbert@redhat.com>
+- Enable Divas (formerly Eicon) ISDN drivers on x86_64. (#480837)
+
+* Wed May 20 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc6-git5
+
+* Mon May 18 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc6-git3
+
+* Sun May 17 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc6-git2
+
+* Sat May 16 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc6
+
+* Mon May 11 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc5-git1
+
+* Fri May 08 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc5
+
+* Fri May 08 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc4-git4
+
+* Wed May 06 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc4-git3
+- linux-2.6-cdrom-door-status.patch: merged upstream.
+- linux-2.6-iwl3945-remove-useless-exports.patch: merged upstream.
+- linux-2.6-utrace.patch: rebase against changes to fs/proc/array.c
+- USB_NET_CDC_EEM=m
+
+* Fri May 01 2009 Eric Sandeen <sandeen@redhat.com>
+- Fix ext4 corruption on partial write into prealloc block
+
+* Thu Apr 30 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.30-rc4
+
+* Wed Apr 29 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc3-git6
+
+* Tue Apr 28 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc3-git4
+
+* Tue Apr 28 2009 Chuck Ebbert <cebbert@redhat.com>
+- Make the kernel-vanilla package buildable again.
+- Allow building with older versions of RPM.
+
+* Tue Apr 28 2009 Neil Horman <nhorman@redhat.com>
+- Backport missing snmp stats (bz 492391)
+
+* Tue Apr 28 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.30-0.72.rc3.git3
+- Drop unused exports from the iwl3945 driver.
+
+* Tue Apr 28 2009 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.30-rc3-git3
+
+* Mon Apr 27 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc3-git2
+
+* Sun Apr 26 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.30-0.68.rc3.git1
+- Linux 2.6.30-rc3-git1
+
+* Wed Apr 22 2009 Dave Jones <davej@redhat.com> 2.6.30-0.67.rc3
+- Disable SYSFS_DEPRECATED on ia64
+
+* Wed Apr 22 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.30-rc3
+- PROC_VMCORE=y: Exports the dump image of crashed
+ kernel in ELF format
+
+* Wed Apr 22 2009 Neil Horman <nhorman@redhat.com>
+- Enable RELOCATABLE and CRASH_DUMP for powerpc64
+- With this we can remove the -kdump build variant
+- for the ppc64 arch
+
+* Tue Apr 21 2009 Chuck Ebbert <cebbert@redhat.com>
+- Don't include the modules.*.bin files in the RPM package.
+
+* Tue Apr 21 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc2-git7
+
+* Mon Apr 20 2009 Dave Jones <davej@redhat.com>
+- Various s390x config tweaks. (#496596, #496601, #496605, #496607)
+
+* Mon Apr 20 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc2-git6
+
+* Sat Apr 18 2009 Chuck Ebbert <cebbert@redhat.com>
+- Set CONFIG_UEVENT_HELPER_PATH to the empty string (#496296)
+
+* Fri Apr 17 2009 Dave Jones <davej@redhat.com>
+- 2.6.30-rc2-git3
+
+* Thu Apr 16 2009 Kyle McMartin <kyle@redhat.com> 2.6.30-0.58.rc2.git1
+- 2.6.30-rc2-git1
+
+* Wed Apr 15 2009 Kyle McMartin <kyle@redhat.com> 2.6.30-0.57.rc2
+- 2.6.30-rc2
+
+* Tue Apr 14 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.30-rc1-git7
+- CONFIG_TOUCHSCREEN_AD7879_I2C=m
+- CONFIG_STRIP_ASM_SYMS=y, off for -debug
+
+* Mon Apr 13 2009 Kyle McMartin <kyle@redhat.com>
+- ppc-fix-parport_pc.patch: add from linuxppc-dev@
+
+* Mon Apr 13 2009 Kyle McMartin <kyle@redhat.com>
+- execshield: fix build (load_user_cs_desc is 32-bit only in tlb.c)
+
+* Sun Apr 12 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.30-rc1-git5
+- revert-fix-modules_install-via-nfs.patch: reverted upstream
+
+* Thu Apr 09 2009 Kyle McMartin <kyle@redhat.com>
+- actually drop utrace-ftrace from srpm.
+
+* Thu Apr 09 2009 Kyle McMartin <kyle@redhat.com>
+- 2.6.30-rc1-git2
+- CONFIG_IGBVF=m
+- CONFIG_NETFILTER_XT_TARGET_LED=m
+
+* Thu Apr 09 2009 Dave Jones <davej@redhat.com>
+- Bring back the /dev/crash driver. (#492803)
+
+* Wed Apr 08 2009 Dave Jones <davej@redhat.com>
+- disable MMIOTRACE in non-debug builds (#494584)
+
+* Wed Apr 08 2009 Kyle McMartin <kyle@redhat.com> 2.6.30-0.44.rc1
+- 2.6.30-rc1
+- linux-2.6-hwmon-atk0110.patch: drop
+- CONFIG_DETECT_HUNG_TASK=y
+- # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+
+* Tue Apr 7 2009 Roland McGrath <roland@redhat.com>
+- utrace update, drop unfinished utrace-ftrace
+
+* Tue Apr 07 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.29-git15
+- EXT3_DEFAULTS_TO_ORDERED on for now.
+- X86_X2APIC enabled.
+- LEDS_LP5521, LEDS_BD2802 off... look not generally relevant.
+- LIBFCOE on.
+
+* Tue Apr 07 2009 Dave Jones <davej@redhat.com>
+- Enable CONFIG_CIFS_STATS (#494545)
+
+* Mon Apr 06 2009 Kyle McMartin <kyle@redhat.com>
+- linux-2.6-execshield.patch: rebase for 2.6.30
+
+* Mon Apr 06 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.29-git13
+- drop patches merged upstream:
+ - fix-ppc-debug_kmap_atomic.patch
+ - fix-staging-at76.patch
+ - linux-2.6-acpi-video-didl-intel-outputs.patch
+ - linux-2.6-acpi-strict-resources.patch
+ - linux-2.6-sony-laptop-rfkill.patch
+ - linux-2.6-btrfs-fix-umount-hang.patch
+ - linux-2.6-fiemap-header-install.patch
+ - linux-2.6-debug-dma-api.patch
+ - dma-api-debug-fixes.patch
+ - linux-2.6-ext4-flush-on-close.patch
+ - linux-2.6-relatime-by-default.patch
+ - linux-2.6-pci-sysfs-remove-id.patch
+ - linux-2.6-scsi-cpqarray-set-master.patch
+ - alsa-rewrite-hw_ptr-updaters.patch
+ - alsa-pcm-always-reset-invalid-position.patch
+ - alsa-pcm-fix-delta-calc-at-overlap.patch
+ - alsa-pcm-safer-boundary-checks.patch
+ - linux-2.6-input-hid-extra-gamepad.patch
+ - linux-2.6-ipw2x00-age-scan-results-on-resume.patch
+ - linux-2.6-dropwatch-protocol.patch
+ - linux-2.6-net-fix-gro-bug.patch
+ - linux-2.6-net-fix-another-gro-bug.patch
+ - linux-2.6-net-xfrm-fix-spin-unlock.patch
+ - linux-2.6.29-pat-change-is_linear_pfn_mapping-to-not-use-vm_pgoff.patch
+ - linux-2.6.29-pat-pci-change-prot-for-inherit.patch
+
+* Thu Apr 02 2009 Josef Bacik <josef@toxicpanda.com>
+- linux-2.6-btrfs-fix-umount-hang.patch: fix umount hang on btrfs
+
+* Thu Apr 02 2009 Kyle McMartin <kyle@redhat.com>
+- fix-ppc-debug_kmap_atomic.patch: fix build failures on ppc.
+
+* Thu Apr 02 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.29-git9
+
+* Tue Mar 31 2009 Kyle McMartin <kyle@redhat.com>
+- rds-only-on-64-bit-or-x86.patch: add
+- at76-netdev_ops.patch: add
+
+* Tue Mar 31 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.29-git8
+- linux-2.6-net-fix-another-gro-bug.patch: upstream.
+
+* Tue Mar 31 2009 Eric Sandeen <sandeen@redhat.com>
+- add fiemap.h to kernel-headers
+- build ext4 (and jbd2 and crc16) into the kernel
+
+* Tue Mar 31 2009 Kyle McMartin <kyle@redhat.com>
+- Linux 2.6.29-git7
+- fix-staging-at76.patch: pull patch from linux-wireless to fix...
+
+* Mon Mar 30 2009 Kyle McMartin <kyle@redhat.com> 2.6.30-0.28.rc0.git6
+- Linux 2.6.29-git6
+- Bunch of stuff disabled, most merged, some needs rebasing.
+
+* Mon Mar 30 2009 Chuck Ebbert <cebbert@redhat.com>
+- Make the .shared-srctree file a list so more than two checkouts
+ can share source files.
+
+* Mon Mar 30 2009 Chuck Ebbert <cebbert@redhat.com>
+- Separate PAT fixes that are headed for -stable from our out-of-tree ones.
+
+* Mon Mar 30 2009 Dave Jones <davej@redhat.com>
+- Make io schedulers selectable at boot time again. (#492817)
+
+* Mon Mar 30 2009 Dave Jones <davej@redhat.com>
+- Add a strict-devmem=0 boot argument (#492803)
+
+* Mon Mar 30 2009 Adam Jackson <ajax@redhat.com>
+- linux-2.6.29-pat-fixes.patch: Fix PAT/GTT interaction
+
+* Mon Mar 30 2009 Mauro Carvalho Chehab <mchehab@redhat.com>
+- some fixes of troubles caused by v4l2 subdev conversion
+
+* Mon Mar 30 2009 Mark McLoughlin <markmc@redhat.com> 2.6.29-21
+- Fix guest->remote network stall with virtio/GSO (#490266)
+
+* Mon Mar 30 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch
+ - rewrite nouveau PCI(E) GART functions, should fix rh#492492
+ - kms: kernel option to allow dual-link dvi
+ - modinfo descriptions for module parameters
+
+* Sun Mar 29 2009 Mauro Carvalho Chehab <mchehab@redhat.com>
+- more v4l/dvb updates: v4l subdev conversion and some driver improvements
+
+* Sun Mar 29 2009 Chuck Ebbert <cebbert@redhat.com>
+- More fixes for ALSA hardware pointer updating.
+
+* Sat Mar 28 2009 Mauro Carvalho Chehab <mchehab@redhat.com>
+- linux-2.6-revert-dvb-net-kabi-change.patch: attempt to fix dvb net breakage
+- update v4l fixes patch to reflect what's ready for 2.6.30
+- update v4l devel patch to reflect what will be kept on linux-next for a while
+
+* Fri Mar 27 2009 Alexandre Oliva <lxoliva@fsfla.org> -libre.16 Mon Mar 30
+- Deblobbed 2.6.29.
+- Deblobbed drm-nouveau.patch.
+- Deblobbed drm-next.patch.
+- Deblobbed drm-modesetting-radeon.patch.
+- Deblobbed linux-2.6-at76.patch.
+- Deblobbed linux-2.6.27-lirc.patch.
+- Deblobbed linux-2.6.29-lirc.patch.
+- Deblobbed linux-2.6-v4l-dvb-experimental.patch
+- Deblobbed linux-2.6-v4l-dvb-fixes.patch
+- Updated URL, thanks to Tomek Chrzczonowicz.
+
+* Fri Mar 27 2009 Chuck Ebbert <cebbert@redhat.com> 2.6.29-16
+- Fix 2.6.29 networking lockups.
+- Fix locking in net/xfrm/xfrm_state.c (#489764)
+
+* Fri Mar 27 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: do nothing for dac_{prepare,commit}, it's useless
+ and breaks some things in strange ways.
+
+* Fri Mar 27 2009 Ben Skeggs <bskeggs@redhat.com>
+- nv50: clear 0x1900/8 on init, possible fix for rh#492240
+- forcibly disable GEM also if KMS requested where not supported
+- inform the user if we disable KMS because of it not being supported
+
+* Thu Mar 26 2009 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-relatime-by-default.patch: Backport relatime code from 2.6.30
+
+* Thu Mar 26 2009 Dave Jones <davej@redhat.com>
+- Check for modesetting enabled before forcing mode on 915. (#490336)
+
+* Thu Mar 26 2009 Dave Jones <davej@redhat.com>
+- Set kernel-PAE as default in grub. (#487578)
+
+* Thu Mar 26 2009 Dave Jones <davej@redhat.com>
+- Enable CONFIG_MOUSE_PS2_ELANTECH (#492163)
+
+* Thu Mar 26 2009 Kyle McMartin <kyle@redhat.com>
+- linux-2.6-v4l-pvrusb2-fixes.patch: fix build for uncle steve.
+
+* Thu Mar 26 2009 Mauro Carvalho Chehab <mchehab@redhat.com>
+- Move all 2.6.30 stuff into linux-2.6-v4l-dvb-fixes.patch, in
+ preparation for upstream pull;
+- Added two new drivers: gspca sq905c and DVB Intel ce6230
+- Updated to the latest v4l-dvb drivers.
+
+* Wed Mar 25 2009 Mauro Carvalho Chehab <mchehab@redhat.com>
+- remove duplicated Cinergy T2 entry at config-generic
+
+* Wed Mar 25 2009 Neil Horman <nhorman@redhat.com>
+- Add dropmonitor/dropwatch protocol from 2.6.30
+
+* Wed Mar 25 2009 Kyle McMartin <kyle@redhat.com>
+- alsa-rewrite-hw_ptr-updaters.patch: snd_pcm_update_hw_ptr() tries to
+ detect the unexpected hwptr jumps more strictly to avoid the position
+ mess-up, which often results in the bad quality I/O with pulseaudio.
+
+* Wed Mar 25 2009 Ben Skeggs <bskeggs@redhat.com>
+- drm-nouveau.patch: idle channels better before destroying them
+
+* Tue Mar 24 2009 Kyle McMartin <kyle@redhat.com>
+- Disable DMAR by default until suspend & resume is fixed.
+
+* Tue Mar 24 2009 Josef Bacik <josef@toxicpanda.com>
+- fsync replay fixes for btrfs
+
+* Mon Mar 23 2009 Dave Jones <davej@redhat.com>
+- 2.6.29
+
+###
+# The following Emacs magic makes C-c C-e use UTC dates.
+# Local Variables:
+# rpm-change-log-uses-utc: t
+# End:
+###
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6-p54pci.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6-p54pci.patch
new file mode 100644
index 000000000..0b7cace26
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6-p54pci.patch
@@ -0,0 +1,515 @@
+* drivers/net/wireless/p54/p54pci.c: Adjusted for deblobbed sources.
+
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Sun, 17 Jan 2010 22:19:25 +0000 (+0100)
+Subject: p54pci: move tx cleanup into tasklet
+X-Git-Tag: master-2010-01-19~9
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-next-2.6.git;a=commitdiff_plain;h=d713804c6032b95cd3035014e16fadebb9655c6f
+
+p54pci: move tx cleanup into tasklet
+
+This patch moves the tx cleanup routines out of the critical
+interrupt context and into the (previously known as rx) tasklet.
+
+The main goal of this operation is to remove the extensive
+usage of spin_lock_irqsaves in the generic p54common library.
+
+The next step would be to modify p54usb to do the
+rx processing inside a tasklet (just like usbnet).
+
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
+index 4bf4c21..48cae48 100644
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -234,25 +234,26 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index,
+ p54p_refill_rx_ring(dev, ring_index, ring, ring_limit, rx_buf);
+ }
+
+-/* caller must hold priv->lock */
+ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+ int ring_index, struct p54p_desc *ring, u32 ring_limit,
+- void **tx_buf)
++ struct sk_buff **tx_buf)
+ {
++ unsigned long flags;
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+ struct p54p_desc *desc;
++ struct sk_buff *skb;
+ u32 idx, i;
+
+ i = (*index) % ring_limit;
+ (*index) = idx = le32_to_cpu(ring_control->device_idx[ring_index]);
+ idx %= ring_limit;
+
++ spin_lock_irqsave(&priv->lock, flags);
+ while (i != idx) {
+ desc = &ring[i];
+- if (tx_buf[i])
+- if (FREE_AFTER_TX((struct sk_buff *) tx_buf[i]))
+- p54_free_skb(dev, tx_buf[i]);
++
++ skb = tx_buf[i];
+ tx_buf[i] = NULL;
+
+ pci_unmap_single(priv->pdev, le32_to_cpu(desc->host_addr),
+@@ -263,17 +264,32 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+ desc->len = 0;
+ desc->flags = 0;
+
++ if (skb && FREE_AFTER_TX(skb)) {
++ spin_unlock_irqrestore(&priv->lock, flags);
++ p54_free_skb(dev, skb);
++ spin_lock_irqsave(&priv->lock, flags);
++ }
++
+ i++;
+ i %= ring_limit;
+ }
++ spin_unlock_irqrestore(&priv->lock, flags);
+ }
+
+-static void p54p_rx_tasklet(unsigned long dev_id)
++static void p54p_tasklet(unsigned long dev_id)
+ {
+ struct ieee80211_hw *dev = (struct ieee80211_hw *)dev_id;
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+
++ p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
++ ARRAY_SIZE(ring_control->tx_mgmt),
++ priv->tx_buf_mgmt);
++
++ p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
++ ARRAY_SIZE(ring_control->tx_data),
++ priv->tx_buf_data);
++
+ p54p_check_rx_ring(dev, &priv->rx_idx_mgmt, 2, ring_control->rx_mgmt,
+ ARRAY_SIZE(ring_control->rx_mgmt), priv->rx_buf_mgmt);
+
+@@ -288,38 +304,24 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
+ {
+ struct ieee80211_hw *dev = dev_id;
+ struct p54p_priv *priv = dev->priv;
+- struct p54p_ring_control *ring_control = priv->ring_control;
+ __le32 reg;
+
+ spin_lock(&priv->lock);
+ reg = P54P_READ(int_ident);
+ if (unlikely(reg == cpu_to_le32(0xFFFFFFFF))) {
+- spin_unlock(&priv->lock);
+- return IRQ_HANDLED;
++ goto out;
+ }
+-
+ P54P_WRITE(int_ack, reg);
+
+ reg &= P54P_READ(int_enable);
+
+- if (reg & cpu_to_le32(ISL38XX_INT_IDENT_UPDATE)) {
+- p54p_check_tx_ring(dev, &priv->tx_idx_mgmt,
+- 3, ring_control->tx_mgmt,
+- ARRAY_SIZE(ring_control->tx_mgmt),
+- priv->tx_buf_mgmt);
+-
+- p54p_check_tx_ring(dev, &priv->tx_idx_data,
+- 1, ring_control->tx_data,
+- ARRAY_SIZE(ring_control->tx_data),
+- priv->tx_buf_data);
+-
+- tasklet_schedule(&priv->rx_tasklet);
+-
+- } else if (reg & cpu_to_le32(ISL38XX_INT_IDENT_INIT))
++ if (reg & cpu_to_le32(ISL38XX_INT_IDENT_UPDATE))
++ tasklet_schedule(&priv->tasklet);
++ else if (reg & cpu_to_le32(ISL38XX_INT_IDENT_INIT))
+ complete(&priv->boot_comp);
+
++out:
+ spin_unlock(&priv->lock);
+-
+ return reg ? IRQ_HANDLED : IRQ_NONE;
+ }
+
+@@ -368,7 +370,7 @@ static void p54p_stop(struct ieee80211_hw *dev)
+ unsigned int i;
+ struct p54p_desc *desc;
+
+- tasklet_kill(&priv->rx_tasklet);
++ tasklet_kill(&priv->tasklet);
+
+ P54P_WRITE(int_enable, cpu_to_le32(0));
+ P54P_READ(int_enable);
+@@ -559,7 +561,7 @@ static int __devinit p54p_probe(struct pci_dev *pdev,
+ priv->common.tx = p54p_tx;
+
+ spin_lock_init(&priv->lock);
+- tasklet_init(&priv->rx_tasklet, p54p_rx_tasklet, (unsigned long)dev);
++ tasklet_init(&priv->tasklet, p54p_tasklet, (unsigned long)dev);
+
+ err = reject_firmware(&priv->firmware, "/*(DEBLOBBED)*/pci",
+ &priv->pdev->dev);
+diff --git a/drivers/net/wireless/p54/p54pci.h b/drivers/net/wireless/p54/p54pci.h
+index fbb6839..2feead6 100644
+--- a/drivers/net/wireless/p54/p54pci.h
++++ b/drivers/net/wireless/p54/p54pci.h
+@@ -92,7 +92,7 @@ struct p54p_priv {
+ struct p54_common common;
+ struct pci_dev *pdev;
+ struct p54p_csr __iomem *map;
+- struct tasklet_struct rx_tasklet;
++ struct tasklet_struct tasklet;
+ const struct firmware *firmware;
+ spinlock_t lock;
+ struct p54p_ring_control *ring_control;
+@@ -101,8 +101,8 @@ struct p54p_priv {
+ u32 rx_idx_mgmt, tx_idx_mgmt;
+ struct sk_buff *rx_buf_data[8];
+ struct sk_buff *rx_buf_mgmt[4];
+- void *tx_buf_data[32];
+- void *tx_buf_mgmt[4];
++ struct sk_buff *tx_buf_data[32];
++ struct sk_buff *tx_buf_mgmt[4];
+ struct completion boot_comp;
+ };
+
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Fri, 22 Jan 2010 07:01:11 +0000 (+0100)
+Subject: p54pci: revise tx locking
+X-Git-Tag: master-2010-01-22~1
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-next-2.6.git;a=commitdiff_plain;h=b92f7d30830a319148df2943b7565989494e5ad1
+
+p54pci: revise tx locking
+
+This patch continues the effort which began with:
+"[PATCH] p54pci: move tx cleanup into tasklet".
+
+Thanks to these changes, p54pci's interrupt & tx
+cleanup routines can be made lock-less.
+
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
+index 48cae48..bda29c0 100644
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -238,7 +238,6 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+ int ring_index, struct p54p_desc *ring, u32 ring_limit,
+ struct sk_buff **tx_buf)
+ {
+- unsigned long flags;
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+ struct p54p_desc *desc;
+@@ -249,7 +248,6 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+ (*index) = idx = le32_to_cpu(ring_control->device_idx[ring_index]);
+ idx %= ring_limit;
+
+- spin_lock_irqsave(&priv->lock, flags);
+ while (i != idx) {
+ desc = &ring[i];
+
+@@ -264,16 +262,12 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+ desc->len = 0;
+ desc->flags = 0;
+
+- if (skb && FREE_AFTER_TX(skb)) {
+- spin_unlock_irqrestore(&priv->lock, flags);
++ if (skb && FREE_AFTER_TX(skb))
+ p54_free_skb(dev, skb);
+- spin_lock_irqsave(&priv->lock, flags);
+- }
+
+ i++;
+ i %= ring_limit;
+ }
+- spin_unlock_irqrestore(&priv->lock, flags);
+ }
+
+ static void p54p_tasklet(unsigned long dev_id)
+@@ -306,7 +300,6 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
+ struct p54p_priv *priv = dev->priv;
+ __le32 reg;
+
+- spin_lock(&priv->lock);
+ reg = P54P_READ(int_ident);
+ if (unlikely(reg == cpu_to_le32(0xFFFFFFFF))) {
+ goto out;
+@@ -321,15 +314,14 @@ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
+ complete(&priv->boot_comp);
+
+ out:
+- spin_unlock(&priv->lock);
+ return reg ? IRQ_HANDLED : IRQ_NONE;
+ }
+
+ static void p54p_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
+ {
++ unsigned long flags;
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+- unsigned long flags;
+ struct p54p_desc *desc;
+ dma_addr_t mapping;
+ u32 device_idx, idx, i;
+@@ -370,14 +362,14 @@ static void p54p_stop(struct ieee80211_hw *dev)
+ unsigned int i;
+ struct p54p_desc *desc;
+
+- tasklet_kill(&priv->tasklet);
+-
+ P54P_WRITE(int_enable, cpu_to_le32(0));
+ P54P_READ(int_enable);
+ udelay(10);
+
+ free_irq(priv->pdev->irq, dev);
+
++ tasklet_kill(&priv->tasklet);
++
+ P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_RESET));
+
+ for (i = 0; i < ARRAY_SIZE(priv->rx_buf_data); i++) {
+From: Quintin Pitts <geek4linux@gmail.com>
+Date: Fri, 9 Apr 2010 19:37:38 +0000 (+0200)
+Subject: p54pci: prevent stuck rx-ring on slow system
+X-Git-Tag: master-2010-04-12~9
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-next-2.6.git;a=commitdiff_plain;h=5988f385b4cffa9ca72c5be0188e5f4c9ef46d82
+
+p54pci: prevent stuck rx-ring on slow system
+
+This patch fixes an old problem, which - under certain
+circumstances - could cause the device to become
+unresponsive.
+
+most of p54pci's rx-ring management is implemented in just
+two distinct standalone functions. p54p_check_rx_ring takes
+care of processing incoming data, while p54p_refill_rx_ring
+tries to replenish all depleted communication buffers.
+
+This has always worked fine on my fast machine, but
+now I know there is a hidden race...
+
+The most likely candidate here is ring_control->device_idx.
+Quintin Pitts had already analyzed the culprit and posted
+a patch back in Oct 2009. But sadly, no one's picked up on this.
+( https://patchwork.kernel.org/patch/53079/ [2 & 3] ).
+This patch does the same way, except that it also prioritize
+rx data processing, simply because tx routines *can* wait.
+
+Reported-by: Sean Young <sean@mess.org>
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=11386
+Reported-by: Quintin Pitts <geek4linux@gmail.com>
+Signed-off-by: Quintin Pitts <geek4linux@gmail.com>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
+index ed4bdff..aa29663 100644
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -131,7 +131,7 @@ static int p54p_upload_firmware(struct ieee80211_hw *dev)
+
+ static void p54p_refill_rx_ring(struct ieee80211_hw *dev,
+ int ring_index, struct p54p_desc *ring, u32 ring_limit,
+- struct sk_buff **rx_buf)
++ struct sk_buff **rx_buf, u32 index)
+ {
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+@@ -139,7 +139,7 @@ static void p54p_refill_rx_ring(struct ieee80211_hw *dev,
+
+ idx = le32_to_cpu(ring_control->host_idx[ring_index]);
+ limit = idx;
+- limit -= le32_to_cpu(ring_control->device_idx[ring_index]);
++ limit -= le32_to_cpu(index);
+ limit = ring_limit - limit;
+
+ i = idx % ring_limit;
+@@ -231,7 +231,7 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index,
+ i %= ring_limit;
+ }
+
+- p54p_refill_rx_ring(dev, ring_index, ring, ring_limit, rx_buf);
++ p54p_refill_rx_ring(dev, ring_index, ring, ring_limit, rx_buf, *index);
+ }
+
+ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
+@@ -276,14 +276,6 @@ static void p54p_tasklet(unsigned long dev_id)
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+
+- p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
+- ARRAY_SIZE(ring_control->tx_mgmt),
+- priv->tx_buf_mgmt);
+-
+- p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
+- ARRAY_SIZE(ring_control->tx_data),
+- priv->tx_buf_data);
+-
+ p54p_check_rx_ring(dev, &priv->rx_idx_mgmt, 2, ring_control->rx_mgmt,
+ ARRAY_SIZE(ring_control->rx_mgmt), priv->rx_buf_mgmt);
+
+@@ -292,6 +284,14 @@ static void p54p_tasklet(unsigned long dev_id)
+
+ wmb();
+ P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_UPDATE));
++
++ p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
++ ARRAY_SIZE(ring_control->tx_mgmt),
++ priv->tx_buf_mgmt);
++
++ p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
++ ARRAY_SIZE(ring_control->tx_data),
++ priv->tx_buf_data);
+ }
+
+ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
+@@ -444,10 +444,10 @@ static int p54p_open(struct ieee80211_hw *dev)
+ priv->rx_idx_mgmt = priv->tx_idx_mgmt = 0;
+
+ p54p_refill_rx_ring(dev, 0, priv->ring_control->rx_data,
+- ARRAY_SIZE(priv->ring_control->rx_data), priv->rx_buf_data);
++ ARRAY_SIZE(priv->ring_control->rx_data), priv->rx_buf_data, 0);
+
+ p54p_refill_rx_ring(dev, 2, priv->ring_control->rx_mgmt,
+- ARRAY_SIZE(priv->ring_control->rx_mgmt), priv->rx_buf_mgmt);
++ ARRAY_SIZE(priv->ring_control->rx_mgmt), priv->rx_buf_mgmt, 0);
+
+ P54P_WRITE(ring_control_base, cpu_to_le32(priv->ring_control_dma));
+ P54P_READ(ring_control_base);
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Thu, 15 Apr 2010 12:17:07 +0000 (+0200)
+Subject: p54pci: fix serious sparse warning
+X-Git-Tag: master-2010-04-16~117
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-next-2.6.git;a=commitdiff_plain;h=103823db62ffca028c7a214c80266519d2ea7d8d
+
+p54pci: fix serious sparse warning
+
+This patch fixes a bug which was just recently introduced by
+("p54pci: prevent stuck rx-ring on slow system").
+
+make M=drivers/net/wireless/p54 C=2 CF=-D__CHECK_ENDIAN__
+ CHECK drivers/net/wireless/p54/p54pci.c
+drivers/net/wireless/p54/p54pci.c:143:11: warning: cast to restricted __le32
+ CC [M] drivers/net/wireless/p54/p54pci.o
+
+Reported-by: Johannes Berg <johannes@sipsolutions.net>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
+index aa29663..0a516c8 100644
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -139,7 +139,7 @@ static void p54p_refill_rx_ring(struct ieee80211_hw *dev,
+
+ idx = le32_to_cpu(ring_control->host_idx[ring_index]);
+ limit = idx;
+- limit -= le32_to_cpu(index);
++ limit -= index;
+ limit = ring_limit - limit;
+
+ i = idx % ring_limit;
+Subject:
+[PATCH 2/2] p54pci: fix regression from prevent stuck rx-ring on slow system
+From:
+Christian Lamparter <chunkeey@googlemail.com>
+Date:
+Thu, 22 Apr 2010 19:52:43 +0200
+To:
+linux-wireless@vger.kernel.org
+CC:
+linville@tuxdriver.com, hdegoede@redhat.com
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+This patch fixes a recently introduced use-after-free regression
+from "p54pci: prevent stuck rx-ring on slow system".
+
+Hans de Goede reported a use-after-free regression:
+> >BUG: unable to handle kernel paging request at 6b6b6b6b
+> >IP: [<e122284a>] p54p_check_tx_ring+0x84/0xb1 [p54pci]
+> >*pde = 00000000
+> >Oops: 0000 [#1] SMP
+> >EIP: 0060:[<e122284a>] EFLAGS: 00010286 CPU: 0
+> >EIP is at p54p_check_tx_ring+0x84/0xb1 [p54pci]
+> >EAX: 6b6b6b6b EBX: df10b170 ECX: 00000003 EDX: 00000001
+> >ESI: dc471500 EDI: d8acaeb0 EBP: c098be9c ESP: c098be84
+> > DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
+> >Process swapper (pid: 0, ti=c098a000 task=c09ccfe0 task.ti=c098a000)
+> >Call Trace:
+> > [<e1222b02>] ? p54p_tasklet+0xaa/0xb5 [p54pci]
+> > [<c0440568>] ? tasklet_action+0x78/0xcb
+> > [<c0440ed3>] ? __do_softirq+0xbc/0x173
+
+Quote from comment #17:
+"The problem is the innocent looking moving of the tx processing to
+ after the rx processing in the tasklet. Quoting from the changelog:
+ This patch does it the same way, except that it also prioritize
+ rx data processing, simply because tx routines *can* wait.
+
+ This is causing an issue with us referencing already freed memory,
+ because some skb's we transmit, we immediately receive back, such
+ as those for reading the eeprom (*) and getting stats.
+
+ What can happen because of the moving of the tx processing to after
+ the rx processing is that when the tasklet first runs after doing a
+ special skb tx (such as eeprom) we've already received the answer
+ to it.
+
+ Then the rx processing ends up calling p54_find_and_unlink_skb to
+ find the matching tx skb for the just received special rx skb and
+ frees the tx skb.
+
+ Then after the processing of the rx skb answer, and thus freeing
+ the tx skb, we go process the completed tx ring entires, and then
+ dereference the free-ed skb, to see if it should free free-ed by
+ p54p_check_tx_ring()."
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=583623
+Bug-Identified-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+---
+diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c
+index ca42ccb..07c4528 100644
+--- a/drivers/net/wireless/p54/p54pci.c
++++ b/drivers/net/wireless/p54/p54pci.c
+@@ -277,6 +277,14 @@ static void p54p_tasklet(unsigned long dev_id)
+ struct p54p_priv *priv = dev->priv;
+ struct p54p_ring_control *ring_control = priv->ring_control;
+
++ p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
++ ARRAY_SIZE(ring_control->tx_mgmt),
++ priv->tx_buf_mgmt);
++
++ p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
++ ARRAY_SIZE(ring_control->tx_data),
++ priv->tx_buf_data);
++
+ p54p_check_rx_ring(dev, &priv->rx_idx_mgmt, 2, ring_control->rx_mgmt,
+ ARRAY_SIZE(ring_control->rx_mgmt), priv->rx_buf_mgmt);
+
+@@ -285,14 +293,6 @@ static void p54p_tasklet(unsigned long dev_id)
+
+ wmb();
+ P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_UPDATE));
+-
+- p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
+- ARRAY_SIZE(ring_control->tx_mgmt),
+- priv->tx_buf_mgmt);
+-
+- p54p_check_tx_ring(dev, &priv->tx_idx_data, 1, ring_control->tx_data,
+- ARRAY_SIZE(ring_control->tx_data),
+- priv->tx_buf_data);
+ }
+
+ static irqreturn_t p54p_interrupt(int irq, void *dev_id)
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.tar.bz2.sign b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.tar.bz2.sign
new file mode 100644
index 000000000..ac9c0459f
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.tar.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.10 (GNU/Linux)
+
+iEYEABECAAYFAkuFnGEACgkQvLfPh359R6dTTQCfTxB05smXGDILnZwUWbr8uwwN
+BYYAnj/pL5k11SPT9C/zQ2C4SqPUPmee
+=R8wD
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2 b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2
new file mode 100644
index 000000000..95287922d
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2
Binary files differ
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2.sign b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2.sign
new file mode 100644
index 000000000..1887885f3
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/linux-2.6.33-libre.xdelta.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.10 (GNU/Linux)
+
+iEYEABECAAYFAkuFnIwACgkQvLfPh359R6cA1wCeO82N3V0cQo+vv5dJVkK9t50t
+o+cAoKReFkH+9/DBYWKwinAPrKlZJ1dK
+=tLwL
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/lirc-2.6.33.patch b/freed-ora/current/F-13-2.6.33-branch/F-13/lirc-2.6.33.patch
new file mode 100644
index 000000000..48fc55765
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/lirc-2.6.33.patch
@@ -0,0 +1,17438 @@
+Deblobbed
+
+* drivers/input/lirc/lirc_zilog.c: Deblobbed.
+
+lirc drivers, 2010.04.05
+
+Generated against linus/master from the linux-2.6-lirc.git tree at
+http://git.kernel.org/?p=linux/kernel/git/jarod/linux-2.6-lirc.git;a=summary
+
+Also includes a pure input imon driver, which used to be part of lirc_imon...
+
+Signed-off-by: Jarod Wilson <jarod@redhat.com>
+
+---
+ MAINTAINERS | 9 +
+ drivers/input/Kconfig | 2 +
+ drivers/input/Makefile | 2 +
+ drivers/input/lirc/Kconfig | 116 ++
+ drivers/input/lirc/Makefile | 21 +
+ drivers/input/lirc/lirc_bt829.c | 383 +++++
+ drivers/input/lirc/lirc_dev.c | 850 +++++++++++
+ drivers/input/lirc/lirc_dev.h | 228 +++
+ drivers/input/lirc/lirc_ene0100.c | 646 +++++++++
+ drivers/input/lirc/lirc_ene0100.h | 169 +++
+ drivers/input/lirc/lirc_i2c.c | 536 +++++++
+ drivers/input/lirc/lirc_igorplugusb.c | 555 ++++++++
+ drivers/input/lirc/lirc_imon.c | 1053 ++++++++++++++
+ drivers/input/lirc/lirc_it87.c | 1021 +++++++++++++
+ drivers/input/lirc/lirc_it87.h | 116 ++
+ drivers/input/lirc/lirc_ite8709.c | 540 +++++++
+ drivers/input/lirc/lirc_mceusb.c | 1385 ++++++++++++++++++
+ drivers/input/lirc/lirc_parallel.c | 709 +++++++++
+ drivers/input/lirc/lirc_parallel.h | 26 +
+ drivers/input/lirc/lirc_sasem.c | 931 ++++++++++++
+ drivers/input/lirc/lirc_serial.c | 1317 +++++++++++++++++
+ drivers/input/lirc/lirc_sir.c | 1283 +++++++++++++++++
+ drivers/input/lirc/lirc_streamzap.c | 821 +++++++++++
+ drivers/input/lirc/lirc_ttusbir.c | 397 ++++++
+ drivers/input/lirc/lirc_zilog.c | 1388 ++++++++++++++++++
+ drivers/input/misc/Kconfig | 12 +
+ drivers/input/misc/Makefile | 1 +
+ drivers/input/misc/imon.c | 2523 +++++++++++++++++++++++++++++++++
+ include/linux/lirc.h | 159 +++
+ 29 files changed, 17199 insertions(+), 0 deletions(-)
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 47cc449..ae38439 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -3427,6 +3427,15 @@ F: arch/powerpc/platforms/pasemi/
+ F: drivers/*/*pasemi*
+ F: drivers/*/*/*pasemi*
+
++LINUX INFRARED REMOTE CONTROL DRIVERS (LIRC)
++P: Jarod Wilson
++M: jarod@redhat.com
++P: Christoph Bartelmus
++M: lirc@bartelmus.de
++W: http://www.lirc.org/
++L: lirc-list@lists.sourceforge.net
++S: Maintained
++
+ LINUX SECURITY MODULE (LSM) FRAMEWORK
+ M: Chris Wright <chrisw@sous-sol.org>
+ L: linux-security-module@vger.kernel.org
+diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
+index 07c2cd4..ebc8743 100644
+--- a/drivers/input/Kconfig
++++ b/drivers/input/Kconfig
+@@ -183,6 +183,8 @@ source "drivers/input/tablet/Kconfig"
+
+ source "drivers/input/touchscreen/Kconfig"
+
++source "drivers/input/lirc/Kconfig"
++
+ source "drivers/input/misc/Kconfig"
+
+ endif
+diff --git a/drivers/input/Makefile b/drivers/input/Makefile
+index 7ad212d..cb119e7 100644
+--- a/drivers/input/Makefile
++++ b/drivers/input/Makefile
+@@ -26,3 +26,5 @@ obj-$(CONFIG_INPUT_MISC) += misc/
+ obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o
+
+ obj-$(CONFIG_XEN_KBDDEV_FRONTEND) += xen-kbdfront.o
++
++obj-$(CONFIG_INPUT_LIRC) += lirc/
+diff --git a/drivers/input/lirc/Kconfig b/drivers/input/lirc/Kconfig
+new file mode 100644
+index 0000000..86fc063
+--- /dev/null
++++ b/drivers/input/lirc/Kconfig
+@@ -0,0 +1,116 @@
++#
++# LIRC driver(s) configuration
++#
++menuconfig INPUT_LIRC
++ tristate "Linux Infrared Remote Control IR receiver/transmitter drivers"
++ help
++ Say Y here, and all supported Linux Infrared Remote Control IR and
++ RF receiver and transmitter drivers will be displayed. When paired
++ with a remote control and the lirc daemon, the receiver drivers
++ allow control of your Linux system via remote control.
++
++if INPUT_LIRC
++
++config LIRC_BT829
++ tristate "BT829 based hardware"
++ depends on INPUT_LIRC
++ help
++ Driver for the IR interface on BT829-based hardware
++
++config LIRC_ENE0100
++ tristate "ENE KB3924/ENE0100 CIR Port Reciever"
++ depends on INPUT_LIRC
++ help
++ This is a driver for CIR port handled by ENE KB3924 embedded
++ controller found on some notebooks.
++ It appears on PNP list as ENE0100.
++
++config LIRC_I2C
++ tristate "I2C Based IR Receivers"
++ depends on INPUT_LIRC
++ help
++ Driver for I2C-based IR receivers, such as those commonly
++ found onboard Hauppauge PVR-150/250/350 video capture cards
++
++config LIRC_IGORPLUGUSB
++ tristate "Igor Cesko's USB IR Receiver"
++ depends on INPUT_LIRC && USB
++ help
++ Driver for Igor Cesko's USB IR Receiver
++
++config LIRC_IMON
++ tristate "Legacy SoundGraph iMON Receiver and Display"
++ depends on INPUT_LIRC
++ help
++ Driver for the original SoundGraph iMON IR Receiver and Display
++
++ Current generation iMON devices use the input layer imon driver.
++
++config LIRC_IT87
++ tristate "ITE IT87XX CIR Port Receiver"
++ depends on INPUT_LIRC
++ help
++ Driver for the ITE IT87xx IR Receiver
++
++config LIRC_ITE8709
++ tristate "ITE8709 CIR Port Receiver"
++ depends on INPUT_LIRC && PNP
++ help
++ Driver for the ITE8709 IR Receiver
++
++config LIRC_MCEUSB
++ tristate "Windows Media Center Ed. USB IR Transceiver"
++ depends on INPUT_LIRC && USB
++ help
++ Driver for Windows Media Center Ed. USB IR Transceivers
++
++config LIRC_PARALLEL
++ tristate "Homebrew Parallel Port Receiver"
++ depends on INPUT_LIRC && !SMP
++ help
++ Driver for Homebrew Parallel Port Receivers
++
++config LIRC_SASEM
++ tristate "Sasem USB IR Remote"
++ depends on INPUT_LIRC
++ help
++ Driver for the Sasem OnAir Remocon-V or Dign HV5 HTPC IR/VFD Module
++
++config LIRC_SERIAL
++ tristate "Homebrew Serial Port Receiver"
++ depends on INPUT_LIRC
++ help
++ Driver for Homebrew Serial Port Receivers
++
++config LIRC_SERIAL_TRANSMITTER
++ bool "Serial Port Transmitter"
++ default y
++ depends on LIRC_SERIAL
++ help
++ Serial Port Transmitter support
++
++config LIRC_SIR
++ tristate "Built-in SIR IrDA port"
++ depends on INPUT_LIRC
++ help
++ Driver for the SIR IrDA port
++
++config LIRC_STREAMZAP
++ tristate "Streamzap PC Receiver"
++ depends on INPUT_LIRC
++ help
++ Driver for the Streamzap PC Receiver
++
++config LIRC_TTUSBIR
++ tristate "Technotrend USB IR Receiver"
++ depends on INPUT_LIRC && USB
++ help
++ Driver for the Technotrend USB IR Receiver
++
++config LIRC_ZILOG
++ tristate "Zilog/Hauppauge IR Transmitter"
++ depends on INPUT_LIRC
++ help
++ Driver for the Zilog/Hauppauge IR Transmitter, found on
++ PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
++endif
+diff --git a/drivers/input/lirc/Makefile b/drivers/input/lirc/Makefile
+new file mode 100644
+index 0000000..9122e87
+--- /dev/null
++++ b/drivers/input/lirc/Makefile
+@@ -0,0 +1,21 @@
++# Makefile for the lirc drivers.
++#
++
++# Each configuration option enables a list of files.
++
++obj-$(CONFIG_INPUT_LIRC) += lirc_dev.o
++obj-$(CONFIG_LIRC_BT829) += lirc_bt829.o
++obj-$(CONFIG_LIRC_ENE0100) += lirc_ene0100.o
++obj-$(CONFIG_LIRC_I2C) += lirc_i2c.o
++obj-$(CONFIG_LIRC_IGORPLUGUSB) += lirc_igorplugusb.o
++obj-$(CONFIG_LIRC_IMON) += lirc_imon.o
++obj-$(CONFIG_LIRC_IT87) += lirc_it87.o
++obj-$(CONFIG_LIRC_ITE8709) += lirc_ite8709.o
++obj-$(CONFIG_LIRC_MCEUSB) += lirc_mceusb.o
++obj-$(CONFIG_LIRC_PARALLEL) += lirc_parallel.o
++obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o
++obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o
++obj-$(CONFIG_LIRC_SIR) += lirc_sir.o
++obj-$(CONFIG_LIRC_STREAMZAP) += lirc_streamzap.o
++obj-$(CONFIG_LIRC_TTUSBIR) += lirc_ttusbir.o
++obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o
+diff --git a/drivers/input/lirc/lirc_bt829.c b/drivers/input/lirc/lirc_bt829.c
+new file mode 100644
+index 0000000..0485884
+--- /dev/null
++++ b/drivers/input/lirc/lirc_bt829.c
+@@ -0,0 +1,383 @@
++/*
++ * Remote control driver for the TV-card based on bt829
++ *
++ * by Leonid Froenchenko <lfroen@galileo.co.il>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/threads.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/pci.h>
++#include <linux/delay.h>
++
++#include "lirc_dev.h"
++
++static int poll_main(void);
++static int atir_init_start(void);
++
++static void write_index(unsigned char index, unsigned int value);
++static unsigned int read_index(unsigned char index);
++
++static void do_i2c_start(void);
++static void do_i2c_stop(void);
++
++static void seems_wr_byte(unsigned char al);
++static unsigned char seems_rd_byte(void);
++
++static unsigned int read_index(unsigned char al);
++static void write_index(unsigned char ah, unsigned int edx);
++
++static void cycle_delay(int cycle);
++
++static void do_set_bits(unsigned char bl);
++static unsigned char do_get_bits(void);
++
++#define DATA_PCI_OFF 0x7FFC00
++#define WAIT_CYCLE 20
++
++#define DRIVER_NAME "lirc_bt829"
++
++static int debug;
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG DRIVER_NAME ": "fmt, ## args); \
++ } while (0)
++
++static int atir_minor;
++static unsigned long pci_addr_phys;
++static unsigned char *pci_addr_lin;
++
++static struct lirc_driver atir_driver;
++
++static struct pci_dev *do_pci_probe(void)
++{
++ struct pci_dev *my_dev;
++ my_dev = pci_get_device(PCI_VENDOR_ID_ATI,
++ PCI_DEVICE_ID_ATI_264VT, NULL);
++ if (my_dev) {
++ printk(KERN_ERR DRIVER_NAME ": Using device: %s\n",
++ pci_name(my_dev));
++ pci_addr_phys = 0;
++ if (my_dev->resource[0].flags & IORESOURCE_MEM) {
++ pci_addr_phys = my_dev->resource[0].start;
++ printk(KERN_INFO DRIVER_NAME ": memory at 0x%08X \n",
++ (unsigned int)pci_addr_phys);
++ }
++ if (pci_addr_phys == 0) {
++ printk(KERN_ERR DRIVER_NAME ": no memory resource ?\n");
++ return NULL;
++ }
++ } else {
++ printk(KERN_ERR DRIVER_NAME ": pci_probe failed\n");
++ return NULL;
++ }
++ return my_dev;
++}
++
++static int atir_add_to_buf(void *data, struct lirc_buffer *buf)
++{
++ unsigned char key;
++ int status;
++ status = poll_main();
++ key = (status >> 8) & 0xFF;
++ if (status & 0xFF) {
++ dprintk("reading key %02X\n", key);
++ lirc_buffer_write(buf, &key);
++ return 0;
++ }
++ return -ENODATA;
++}
++
++static int atir_set_use_inc(void *data)
++{
++ dprintk("driver is opened\n");
++ return 0;
++}
++
++static void atir_set_use_dec(void *data)
++{
++ dprintk("driver is closed\n");
++}
++
++int init_module(void)
++{
++ struct pci_dev *pdev;
++
++ pdev = do_pci_probe();
++ if (pdev == NULL)
++ return 1;
++
++ if (!atir_init_start())
++ return 1;
++
++ strcpy(atir_driver.name, "ATIR");
++ atir_driver.minor = -1;
++ atir_driver.code_length = 8;
++ atir_driver.sample_rate = 10;
++ atir_driver.data = 0;
++ atir_driver.add_to_buf = atir_add_to_buf;
++ atir_driver.set_use_inc = atir_set_use_inc;
++ atir_driver.set_use_dec = atir_set_use_dec;
++ atir_driver.dev = &pdev->dev;
++ atir_driver.owner = THIS_MODULE;
++
++ atir_minor = lirc_register_driver(&atir_driver);
++ if (atir_minor < 0) {
++ printk(KERN_ERR DRIVER_NAME ": failed to register driver!\n");
++ return atir_minor;
++ }
++ dprintk("driver is registered on minor %d\n", atir_minor);
++
++ return 0;
++}
++
++
++void cleanup_module(void)
++{
++ lirc_unregister_driver(atir_minor);
++}
++
++
++static int atir_init_start(void)
++{
++ pci_addr_lin = ioremap(pci_addr_phys + DATA_PCI_OFF, 0x400);
++ if (pci_addr_lin == 0) {
++ printk(KERN_INFO DRIVER_NAME ": pci mem must be mapped\n");
++ return 0;
++ }
++ return 1;
++}
++
++static void cycle_delay(int cycle)
++{
++ udelay(WAIT_CYCLE*cycle);
++}
++
++
++static int poll_main()
++{
++ unsigned char status_high, status_low;
++
++ do_i2c_start();
++
++ seems_wr_byte(0xAA);
++ seems_wr_byte(0x01);
++
++ do_i2c_start();
++
++ seems_wr_byte(0xAB);
++
++ status_low = seems_rd_byte();
++ status_high = seems_rd_byte();
++
++ do_i2c_stop();
++
++ return (status_high << 8) | status_low;
++}
++
++static void do_i2c_start(void)
++{
++ do_set_bits(3);
++ cycle_delay(4);
++
++ do_set_bits(1);
++ cycle_delay(7);
++
++ do_set_bits(0);
++ cycle_delay(2);
++}
++
++static void do_i2c_stop(void)
++{
++ unsigned char bits;
++ bits = do_get_bits() & 0xFD;
++ do_set_bits(bits);
++ cycle_delay(1);
++
++ bits |= 1;
++ do_set_bits(bits);
++ cycle_delay(2);
++
++ bits |= 2;
++ do_set_bits(bits);
++ bits = 3;
++ do_set_bits(bits);
++ cycle_delay(2);
++}
++
++static void seems_wr_byte(unsigned char value)
++{
++ int i;
++ unsigned char reg;
++
++ reg = do_get_bits();
++ for (i = 0; i < 8; i++) {
++ if (value & 0x80)
++ reg |= 0x02;
++ else
++ reg &= 0xFD;
++
++ do_set_bits(reg);
++ cycle_delay(1);
++
++ reg |= 1;
++ do_set_bits(reg);
++ cycle_delay(1);
++
++ reg &= 0xFE;
++ do_set_bits(reg);
++ cycle_delay(1);
++ value <<= 1;
++ }
++ cycle_delay(2);
++
++ reg |= 2;
++ do_set_bits(reg);
++
++ reg |= 1;
++ do_set_bits(reg);
++
++ cycle_delay(1);
++ do_get_bits();
++
++ reg &= 0xFE;
++ do_set_bits(reg);
++ cycle_delay(3);
++}
++
++static unsigned char seems_rd_byte(void)
++{
++ int i;
++ int rd_byte;
++ unsigned char bits_2, bits_1;
++
++ bits_1 = do_get_bits() | 2;
++ do_set_bits(bits_1);
++
++ rd_byte = 0;
++ for (i = 0; i < 8; i++) {
++ bits_1 &= 0xFE;
++ do_set_bits(bits_1);
++ cycle_delay(2);
++
++ bits_1 |= 1;
++ do_set_bits(bits_1);
++ cycle_delay(1);
++
++ bits_2 = do_get_bits();
++ if (bits_2 & 2)
++ rd_byte |= 1;
++
++ rd_byte <<= 1;
++ }
++
++ bits_1 = 0;
++ if (bits_2 == 0)
++ bits_1 |= 2;
++
++ do_set_bits(bits_1);
++ cycle_delay(2);
++
++ bits_1 |= 1;
++ do_set_bits(bits_1);
++ cycle_delay(3);
++
++ bits_1 &= 0xFE;
++ do_set_bits(bits_1);
++ cycle_delay(2);
++
++ rd_byte >>= 1;
++ rd_byte &= 0xFF;
++ return rd_byte;
++}
++
++static void do_set_bits(unsigned char new_bits)
++{
++ int reg_val;
++ reg_val = read_index(0x34);
++ if (new_bits & 2) {
++ reg_val &= 0xFFFFFFDF;
++ reg_val |= 1;
++ } else {
++ reg_val &= 0xFFFFFFFE;
++ reg_val |= 0x20;
++ }
++ reg_val |= 0x10;
++ write_index(0x34, reg_val);
++
++ reg_val = read_index(0x31);
++ if (new_bits & 1)
++ reg_val |= 0x1000000;
++ else
++ reg_val &= 0xFEFFFFFF;
++
++ reg_val |= 0x8000000;
++ write_index(0x31, reg_val);
++}
++
++static unsigned char do_get_bits(void)
++{
++ unsigned char bits;
++ int reg_val;
++
++ reg_val = read_index(0x34);
++ reg_val |= 0x10;
++ reg_val &= 0xFFFFFFDF;
++ write_index(0x34, reg_val);
++
++ reg_val = read_index(0x34);
++ bits = 0;
++ if (reg_val & 8)
++ bits |= 2;
++ else
++ bits &= 0xFD;
++
++ reg_val = read_index(0x31);
++ if (reg_val & 0x1000000)
++ bits |= 1;
++ else
++ bits &= 0xFE;
++
++ return bits;
++}
++
++static unsigned int read_index(unsigned char index)
++{
++ unsigned char *addr;
++ unsigned int value;
++ /* addr = pci_addr_lin + DATA_PCI_OFF + ((index & 0xFF) << 2); */
++ addr = pci_addr_lin + ((index & 0xFF) << 2);
++ value = readl(addr);
++ return value;
++}
++
++static void write_index(unsigned char index, unsigned int reg_val)
++{
++ unsigned char *addr;
++ addr = pci_addr_lin + ((index & 0xFF) << 2);
++ writel(reg_val, addr);
++}
++
++MODULE_AUTHOR("Froenchenko Leonid");
++MODULE_DESCRIPTION("IR remote driver for bt829 based TV cards");
++MODULE_LICENSE("GPL");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Debug enabled or not");
+diff --git a/drivers/input/lirc/lirc_dev.c b/drivers/input/lirc/lirc_dev.c
+new file mode 100644
+index 0000000..cd5d75a
+--- /dev/null
++++ b/drivers/input/lirc/lirc_dev.c
+@@ -0,0 +1,850 @@
++/*
++ * LIRC base driver
++ *
++ * by Artur Lipowski <alipowski@interia.pl>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/ioctl.h>
++#include <linux/fs.h>
++#include <linux/poll.h>
++#include <linux/completion.h>
++#include <linux/errno.h>
++#include <linux/mutex.h>
++#include <linux/wait.h>
++#include <linux/unistd.h>
++#include <linux/kthread.h>
++#include <linux/bitops.h>
++#include <linux/device.h>
++#include <linux/cdev.h>
++#include <linux/smp_lock.h>
++#ifdef CONFIG_COMPAT
++#include <linux/compat.h>
++#endif
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++static int debug;
++
++#define IRCTL_DEV_NAME "BaseRemoteCtl"
++#define NOPLUG -1
++#define LOGHEAD "lirc_dev (%s[%d]): "
++
++static dev_t lirc_base_dev;
++
++struct irctl {
++ struct lirc_driver d;
++ int attached;
++ int open;
++
++ struct mutex irctl_lock;
++ struct lirc_buffer *buf;
++ unsigned int chunk_size;
++
++ struct task_struct *task;
++ long jiffies_to_wait;
++
++ struct cdev cdev;
++};
++
++static DEFINE_MUTEX(lirc_dev_lock);
++
++static struct irctl *irctls[MAX_IRCTL_DEVICES];
++
++/* Only used for sysfs but defined to void otherwise */
++static struct class *lirc_class;
++
++/* helper function
++ * initializes the irctl structure
++ */
++static void init_irctl(struct irctl *ir)
++{
++ dev_dbg(ir->d.dev, LOGHEAD "initializing irctl\n",
++ ir->d.name, ir->d.minor);
++ mutex_init(&ir->irctl_lock);
++ ir->d.minor = NOPLUG;
++}
++
++static void cleanup(struct irctl *ir)
++{
++ dev_dbg(ir->d.dev, LOGHEAD "cleaning up\n", ir->d.name, ir->d.minor);
++
++ device_destroy(lirc_class, MKDEV(MAJOR(lirc_base_dev), ir->d.minor));
++
++ if (ir->buf != ir->d.rbuf) {
++ lirc_buffer_free(ir->buf);
++ kfree(ir->buf);
++ }
++ ir->buf = NULL;
++}
++
++/* helper function
++ * reads key codes from driver and puts them into buffer
++ * returns 0 on success
++ */
++static int add_to_buf(struct irctl *ir)
++{
++ if (ir->d.add_to_buf) {
++ int res = -ENODATA;
++ int got_data = 0;
++
++ /*
++ * service the device as long as it is returning
++ * data and we have space
++ */
++get_data:
++ res = ir->d.add_to_buf(ir->d.data, ir->buf);
++ if (res == 0) {
++ got_data++;
++ goto get_data;
++ }
++
++ if (res == -ENODEV)
++ kthread_stop(ir->task);
++
++ return got_data ? 0 : res;
++ }
++
++ return 0;
++}
++
++/* main function of the polling thread
++ */
++static int lirc_thread(void *irctl)
++{
++ struct irctl *ir = irctl;
++
++ dev_dbg(ir->d.dev, LOGHEAD "poll thread started\n",
++ ir->d.name, ir->d.minor);
++
++ do {
++ if (ir->open) {
++ if (ir->jiffies_to_wait) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(ir->jiffies_to_wait);
++ }
++ if (kthread_should_stop())
++ break;
++ if (!add_to_buf(ir))
++ wake_up_interruptible(&ir->buf->wait_poll);
++ } else {
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule();
++ }
++ } while (!kthread_should_stop());
++
++ dev_dbg(ir->d.dev, LOGHEAD "poll thread ended\n",
++ ir->d.name, ir->d.minor);
++
++ return 0;
++}
++
++
++static struct file_operations fops = {
++ .owner = THIS_MODULE,
++ .read = lirc_dev_fop_read,
++ .write = lirc_dev_fop_write,
++ .poll = lirc_dev_fop_poll,
++ .ioctl = lirc_dev_fop_ioctl,
++#ifdef CONFIG_COMPAT
++ .compat_ioctl = lirc_dev_fop_compat_ioctl,
++#endif
++ .open = lirc_dev_fop_open,
++ .release = lirc_dev_fop_close,
++};
++
++static int lirc_cdev_add(struct irctl *ir)
++{
++ int retval;
++ struct lirc_driver *d = &ir->d;
++
++ if (d->fops) {
++ cdev_init(&ir->cdev, d->fops);
++ ir->cdev.owner = d->owner;
++ } else {
++ cdev_init(&ir->cdev, &fops);
++ ir->cdev.owner = THIS_MODULE;
++ }
++ kobject_set_name(&ir->cdev.kobj, "lirc%d", d->minor);
++
++ retval = cdev_add(&ir->cdev, MKDEV(MAJOR(lirc_base_dev), d->minor), 1);
++ if (retval)
++ kobject_put(&ir->cdev.kobj);
++
++ return retval;
++}
++
++int lirc_register_driver(struct lirc_driver *d)
++{
++ struct irctl *ir;
++ int minor;
++ int bytes_in_key;
++ unsigned int chunk_size;
++ unsigned int buffer_size;
++ int err;
++
++ if (!d) {
++ printk(KERN_ERR "lirc_dev: lirc_register_driver: "
++ "driver pointer must be not NULL!\n");
++ err = -EBADRQC;
++ goto out;
++ }
++
++ if (MAX_IRCTL_DEVICES <= d->minor) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "\"minor\" must be between 0 and %d (%d)!\n",
++ MAX_IRCTL_DEVICES-1, d->minor);
++ err = -EBADRQC;
++ goto out;
++ }
++
++ if (1 > d->code_length || (BUFLEN * 8) < d->code_length) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "code length in bits for minor (%d) "
++ "must be less than %d!\n",
++ d->minor, BUFLEN * 8);
++ err = -EBADRQC;
++ goto out;
++ }
++
++ dev_dbg(d->dev, "lirc_dev: lirc_register_driver: sample_rate: %d\n",
++ d->sample_rate);
++ if (d->sample_rate) {
++ if (2 > d->sample_rate || HZ < d->sample_rate) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "sample_rate must be between 2 and %d!\n", HZ);
++ err = -EBADRQC;
++ goto out;
++ }
++ if (!d->add_to_buf) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "add_to_buf cannot be NULL when "
++ "sample_rate is set\n");
++ err = -EBADRQC;
++ goto out;
++ }
++ } else if (!(d->fops && d->fops->read) && !d->rbuf) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "fops->read and rbuf cannot all be NULL!\n");
++ err = -EBADRQC;
++ goto out;
++ } else if (!d->rbuf) {
++ if (!(d->fops && d->fops->read && d->fops->poll &&
++ d->fops->ioctl)) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "neither read, poll nor ioctl can be NULL!\n");
++ err = -EBADRQC;
++ goto out;
++ }
++ }
++
++ mutex_lock(&lirc_dev_lock);
++
++ minor = d->minor;
++
++ if (minor < 0) {
++ /* find first free slot for driver */
++ for (minor = 0; minor < MAX_IRCTL_DEVICES; minor++)
++ if (!irctls[minor])
++ break;
++ if (MAX_IRCTL_DEVICES == minor) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "no free slots for drivers!\n");
++ err = -ENOMEM;
++ goto out_lock;
++ }
++ } else if (irctls[minor]) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "minor (%d) just registered!\n", minor);
++ err = -EBUSY;
++ goto out_lock;
++ }
++
++ ir = kzalloc(sizeof(struct irctl), GFP_KERNEL);
++ if (!ir) {
++ err = -ENOMEM;
++ goto out_lock;
++ }
++ init_irctl(ir);
++ irctls[minor] = ir;
++ d->minor = minor;
++
++ if (d->sample_rate) {
++ ir->jiffies_to_wait = HZ / d->sample_rate;
++ } else {
++ /* it means - wait for external event in task queue */
++ ir->jiffies_to_wait = 0;
++ }
++
++ /* some safety check 8-) */
++ d->name[sizeof(d->name)-1] = '\0';
++
++ bytes_in_key = BITS_TO_LONGS(d->code_length) +
++ (d->code_length % 8 ? 1 : 0);
++ buffer_size = d->buffer_size ? d->buffer_size : BUFLEN / bytes_in_key;
++ chunk_size = d->chunk_size ? d->chunk_size : bytes_in_key;
++
++ if (d->rbuf) {
++ ir->buf = d->rbuf;
++ } else {
++ ir->buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!ir->buf) {
++ err = -ENOMEM;
++ goto out_lock;
++ }
++ err = lirc_buffer_init(ir->buf, chunk_size, buffer_size);
++ if (err) {
++ kfree(ir->buf);
++ goto out_lock;
++ }
++ }
++ ir->chunk_size = ir->buf->chunk_size;
++
++ if (d->features == 0)
++ d->features = LIRC_CAN_REC_LIRCCODE;
++
++ ir->d = *d;
++ ir->d.minor = minor;
++
++ device_create(lirc_class, ir->d.dev,
++ MKDEV(MAJOR(lirc_base_dev), ir->d.minor), NULL,
++ "lirc%u", ir->d.minor);
++
++ if (d->sample_rate) {
++ /* try to fire up polling thread */
++ ir->task = kthread_run(lirc_thread, (void *)ir, "lirc_dev");
++ if (IS_ERR(ir->task)) {
++ dev_err(d->dev, "lirc_dev: lirc_register_driver: "
++ "cannot run poll thread for minor = %d\n",
++ d->minor);
++ err = -ECHILD;
++ goto out_sysfs;
++ }
++ }
++
++ err = lirc_cdev_add(ir);
++ if (err)
++ goto out_sysfs;
++
++ ir->attached = 1;
++ mutex_unlock(&lirc_dev_lock);
++
++ dev_info(ir->d.dev, "lirc_dev: driver %s registered at minor = %d\n",
++ ir->d.name, ir->d.minor);
++ return minor;
++
++out_sysfs:
++ device_destroy(lirc_class, MKDEV(MAJOR(lirc_base_dev), ir->d.minor));
++out_lock:
++ mutex_unlock(&lirc_dev_lock);
++out:
++ return err;
++}
++EXPORT_SYMBOL(lirc_register_driver);
++
++int lirc_unregister_driver(int minor)
++{
++ struct irctl *ir;
++
++ if (minor < 0 || minor >= MAX_IRCTL_DEVICES) {
++ printk(KERN_ERR "lirc_dev: lirc_unregister_driver: "
++ "\"minor (%d)\" must be between 0 and %d!\n",
++ minor, MAX_IRCTL_DEVICES-1);
++ return -EBADRQC;
++ }
++
++ ir = irctls[minor];
++
++ mutex_lock(&lirc_dev_lock);
++
++ if (ir->d.minor != minor) {
++ printk(KERN_ERR "lirc_dev: lirc_unregister_driver: "
++ "minor (%d) device not registered!", minor);
++ mutex_unlock(&lirc_dev_lock);
++ return -ENOENT;
++ }
++
++ /* end up polling thread */
++ if (ir->task)
++ kthread_stop(ir->task);
++
++ dev_dbg(ir->d.dev, "lirc_dev: driver %s unregistered from minor = %d\n",
++ ir->d.name, ir->d.minor);
++
++ ir->attached = 0;
++ if (ir->open) {
++ dev_dbg(ir->d.dev, LOGHEAD "releasing opened driver\n",
++ ir->d.name, ir->d.minor);
++ wake_up_interruptible(&ir->buf->wait_poll);
++ mutex_lock(&ir->irctl_lock);
++ ir->d.set_use_dec(ir->d.data);
++ module_put(ir->d.owner);
++ mutex_unlock(&ir->irctl_lock);
++ cdev_del(&ir->cdev);
++ } else {
++ cleanup(ir);
++ cdev_del(&ir->cdev);
++ kfree(ir);
++ irctls[minor] = NULL;
++ }
++
++ mutex_unlock(&lirc_dev_lock);
++
++ return 0;
++}
++EXPORT_SYMBOL(lirc_unregister_driver);
++
++int lirc_dev_fop_open(struct inode *inode, struct file *file)
++{
++ struct irctl *ir;
++ int retval = 0;
++
++ if (iminor(inode) >= MAX_IRCTL_DEVICES) {
++ printk(KERN_WARNING "lirc_dev [%d]: open result = -ENODEV\n",
++ iminor(inode));
++ return -ENODEV;
++ }
++
++ if (mutex_lock_interruptible(&lirc_dev_lock))
++ return -ERESTARTSYS;
++
++ ir = irctls[iminor(inode)];
++ if (!ir) {
++ retval = -ENODEV;
++ goto error;
++ }
++
++ dev_dbg(ir->d.dev, LOGHEAD "open called\n", ir->d.name, ir->d.minor);
++
++ if (ir->d.minor == NOPLUG) {
++ retval = -ENODEV;
++ goto error;
++ }
++
++ if (ir->open) {
++ retval = -EBUSY;
++ goto error;
++ }
++
++ if (try_module_get(ir->d.owner)) {
++ ++ir->open;
++ retval = ir->d.set_use_inc(ir->d.data);
++
++ if (retval) {
++ module_put(ir->d.owner);
++ --ir->open;
++ } else {
++ lirc_buffer_clear(ir->buf);
++ }
++ if (ir->task)
++ wake_up_process(ir->task);
++ }
++
++error:
++ if (ir)
++ dev_dbg(ir->d.dev, LOGHEAD "open result = %d\n",
++ ir->d.name, ir->d.minor, retval);
++
++ mutex_unlock(&lirc_dev_lock);
++
++ return retval;
++}
++EXPORT_SYMBOL(lirc_dev_fop_open);
++
++int lirc_dev_fop_close(struct inode *inode, struct file *file)
++{
++ struct irctl *ir = irctls[iminor(inode)];
++
++ dev_dbg(ir->d.dev, LOGHEAD "close called\n", ir->d.name, ir->d.minor);
++
++ WARN_ON(mutex_lock_killable(&lirc_dev_lock));
++
++ --ir->open;
++ if (ir->attached) {
++ ir->d.set_use_dec(ir->d.data);
++ module_put(ir->d.owner);
++ } else {
++ cleanup(ir);
++ irctls[ir->d.minor] = NULL;
++ kfree(ir);
++ }
++
++ mutex_unlock(&lirc_dev_lock);
++
++ return 0;
++}
++EXPORT_SYMBOL(lirc_dev_fop_close);
++
++unsigned int lirc_dev_fop_poll(struct file *file, poll_table *wait)
++{
++ struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)];
++ unsigned int ret;
++
++ dev_dbg(ir->d.dev, LOGHEAD "poll called\n", ir->d.name, ir->d.minor);
++
++ if (!ir->attached) {
++ mutex_unlock(&ir->irctl_lock);
++ return POLLERR;
++ }
++
++ poll_wait(file, &ir->buf->wait_poll, wait);
++
++ if (ir->buf)
++ if (lirc_buffer_empty(ir->buf))
++ ret = 0;
++ else
++ ret = POLLIN | POLLRDNORM;
++ else
++ ret = POLLERR;
++
++ dev_dbg(ir->d.dev, LOGHEAD "poll result = %d\n",
++ ir->d.name, ir->d.minor, ret);
++
++ return ret;
++}
++EXPORT_SYMBOL(lirc_dev_fop_poll);
++
++int lirc_dev_fop_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ unsigned long mode;
++ int result = 0;
++ struct irctl *ir = irctls[iminor(inode)];
++
++ dev_dbg(ir->d.dev, LOGHEAD "ioctl called (0x%x)\n",
++ ir->d.name, ir->d.minor, cmd);
++
++ if (ir->d.minor == NOPLUG || !ir->attached) {
++ dev_dbg(ir->d.dev, LOGHEAD "ioctl result = -ENODEV\n",
++ ir->d.name, ir->d.minor);
++ return -ENODEV;
++ }
++
++ switch (cmd) {
++ case LIRC_GET_FEATURES:
++ result = put_user(ir->d.features, (unsigned long *)arg);
++ break;
++ case LIRC_GET_REC_MODE:
++ if (!(ir->d.features & LIRC_CAN_REC_MASK))
++ return -ENOSYS;
++
++ result = put_user(LIRC_REC2MODE
++ (ir->d.features & LIRC_CAN_REC_MASK),
++ (unsigned long *)arg);
++ break;
++ case LIRC_SET_REC_MODE:
++ if (!(ir->d.features & LIRC_CAN_REC_MASK))
++ return -ENOSYS;
++
++ result = get_user(mode, (unsigned long *)arg);
++ if (!result && !(LIRC_MODE2REC(mode) & ir->d.features))
++ result = -EINVAL;
++ /*
++ * FIXME: We should actually set the mode somehow but
++ * for now, lirc_serial doesn't support mode changing either
++ */
++ break;
++ case LIRC_GET_LENGTH:
++ result = put_user(ir->d.code_length, (unsigned long *)arg);
++ break;
++ case LIRC_GET_MIN_TIMEOUT:
++ if (!(ir->d.features & LIRC_CAN_SET_REC_TIMEOUT) ||
++ ir->d.min_timeout == 0)
++ return -ENOSYS;
++
++ result = put_user(ir->d.min_timeout, (int *) arg);
++ break;
++ case LIRC_GET_MAX_TIMEOUT:
++ if (!(ir->d.features & LIRC_CAN_SET_REC_TIMEOUT) ||
++ ir->d.max_timeout == 0)
++ return -ENOSYS;
++
++ result = put_user(ir->d.max_timeout, (int *) arg);
++ break;
++ default:
++ result = -EINVAL;
++ }
++
++ dev_dbg(ir->d.dev, LOGHEAD "ioctl result = %d\n",
++ ir->d.name, ir->d.minor, result);
++
++ return result;
++}
++EXPORT_SYMBOL(lirc_dev_fop_ioctl);
++
++#ifdef CONFIG_COMPAT
++#define LIRC_GET_FEATURES_COMPAT32 _IOR('i', 0x00000000, __u32)
++
++#define LIRC_GET_SEND_MODE_COMPAT32 _IOR('i', 0x00000001, __u32)
++#define LIRC_GET_REC_MODE_COMPAT32 _IOR('i', 0x00000002, __u32)
++
++#define LIRC_GET_LENGTH_COMPAT32 _IOR('i', 0x0000000f, __u32)
++
++#define LIRC_SET_SEND_MODE_COMPAT32 _IOW('i', 0x00000011, __u32)
++#define LIRC_SET_REC_MODE_COMPAT32 _IOW('i', 0x00000012, __u32)
++
++long lirc_dev_fop_compat_ioctl(struct file *file,
++ unsigned int cmd32,
++ unsigned long arg)
++{
++ mm_segment_t old_fs;
++ int ret;
++ unsigned long val;
++ unsigned int cmd;
++
++ switch (cmd32) {
++ case LIRC_GET_FEATURES_COMPAT32:
++ case LIRC_GET_SEND_MODE_COMPAT32:
++ case LIRC_GET_REC_MODE_COMPAT32:
++ case LIRC_GET_LENGTH_COMPAT32:
++ case LIRC_SET_SEND_MODE_COMPAT32:
++ case LIRC_SET_REC_MODE_COMPAT32:
++ /*
++ * These commands expect (unsigned long *) arg
++ * but the 32-bit app supplied (__u32 *).
++ * Conversion is required.
++ */
++ if (get_user(val, (__u32 *)compat_ptr(arg)))
++ return -EFAULT;
++ lock_kernel();
++ /*
++ * tell lirc_dev_fop_ioctl that it's safe to use the pointer
++ * to val which is in kernel address space and not in
++ * user address space.
++ */
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++
++ cmd = _IOC(_IOC_DIR(cmd32), _IOC_TYPE(cmd32), _IOC_NR(cmd32),
++ (_IOC_TYPECHECK(unsigned long)));
++ ret = lirc_dev_fop_ioctl(file->f_path.dentry->d_inode, file,
++ cmd, (unsigned long)(&val));
++
++ set_fs(old_fs);
++ unlock_kernel();
++ switch (cmd) {
++ case LIRC_GET_FEATURES:
++ case LIRC_GET_SEND_MODE:
++ case LIRC_GET_REC_MODE:
++ case LIRC_GET_LENGTH:
++ if (!ret && put_user(val, (__u32 *)compat_ptr(arg)))
++ return -EFAULT;
++ break;
++ }
++ return ret;
++
++ case LIRC_GET_SEND_CARRIER:
++ case LIRC_GET_REC_CARRIER:
++ case LIRC_GET_SEND_DUTY_CYCLE:
++ case LIRC_GET_REC_DUTY_CYCLE:
++ case LIRC_GET_REC_RESOLUTION:
++ case LIRC_SET_SEND_CARRIER:
++ case LIRC_SET_REC_CARRIER:
++ case LIRC_SET_SEND_DUTY_CYCLE:
++ case LIRC_SET_REC_DUTY_CYCLE:
++ case LIRC_SET_TRANSMITTER_MASK:
++ case LIRC_SET_REC_DUTY_CYCLE_RANGE:
++ case LIRC_SET_REC_CARRIER_RANGE:
++ /*
++ * These commands expect (unsigned int *)arg
++ * so no problems here. Just handle the locking.
++ */
++ lock_kernel();
++ cmd = cmd32;
++ ret = lirc_dev_fop_ioctl(file->f_path.dentry->d_inode,
++ file, cmd, arg);
++ unlock_kernel();
++ return ret;
++ default:
++ /* unknown */
++ printk(KERN_ERR "lirc_dev: %s(%s:%d): Unknown cmd %08x\n",
++ __func__, current->comm, current->pid, cmd32);
++ return -ENOIOCTLCMD;
++ }
++}
++EXPORT_SYMBOL(lirc_dev_fop_compat_ioctl);
++#endif
++
++
++ssize_t lirc_dev_fop_read(struct file *file,
++ char *buffer,
++ size_t length,
++ loff_t *ppos)
++{
++ struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)];
++ unsigned char buf[ir->chunk_size];
++ int ret = 0, written = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ dev_dbg(ir->d.dev, LOGHEAD "read called\n", ir->d.name, ir->d.minor);
++
++ if (mutex_lock_interruptible(&ir->irctl_lock))
++ return -ERESTARTSYS;
++ if (!ir->attached) {
++ mutex_unlock(&ir->irctl_lock);
++ return -ENODEV;
++ }
++
++ if (length % ir->chunk_size) {
++ dev_dbg(ir->d.dev, LOGHEAD "read result = -EINVAL\n",
++ ir->d.name, ir->d.minor);
++ mutex_unlock(&ir->irctl_lock);
++ return -EINVAL;
++ }
++
++ /*
++ * we add ourselves to the task queue before buffer check
++ * to avoid losing scan code (in case when queue is awaken somewhere
++ * between while condition checking and scheduling)
++ */
++ add_wait_queue(&ir->buf->wait_poll, &wait);
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ /*
++ * while we didn't provide 'length' bytes, device is opened in blocking
++ * mode and 'copy_to_user' is happy, wait for data.
++ */
++ while (written < length && ret == 0) {
++ if (lirc_buffer_empty(ir->buf)) {
++ /* According to the read(2) man page, 'written' can be
++ * returned as less than 'length', instead of blocking
++ * again, returning -EWOULDBLOCK, or returning
++ * -ERESTARTSYS */
++ if (written)
++ break;
++ if (file->f_flags & O_NONBLOCK) {
++ ret = -EWOULDBLOCK;
++ break;
++ }
++ if (signal_pending(current)) {
++ ret = -ERESTARTSYS;
++ break;
++ }
++
++ mutex_unlock(&ir->irctl_lock);
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (mutex_lock_interruptible(&ir->irctl_lock)) {
++ ret = -ERESTARTSYS;
++ break;
++ }
++
++ if (!ir->attached) {
++ ret = -ENODEV;
++ break;
++ }
++ } else {
++ lirc_buffer_read(ir->buf, buf);
++ ret = copy_to_user((void *)buffer+written, buf,
++ ir->buf->chunk_size);
++ written += ir->buf->chunk_size;
++ }
++ }
++
++ remove_wait_queue(&ir->buf->wait_poll, &wait);
++ set_current_state(TASK_RUNNING);
++ mutex_unlock(&ir->irctl_lock);
++
++ dev_dbg(ir->d.dev, LOGHEAD "read result = %s (%d)\n",
++ ir->d.name, ir->d.minor, ret ? "-EFAULT" : "OK", ret);
++
++ return ret ? ret : written;
++}
++EXPORT_SYMBOL(lirc_dev_fop_read);
++
++void *lirc_get_pdata(struct file *file)
++{
++ void *data = NULL;
++
++ if (file && file->f_dentry && file->f_dentry->d_inode &&
++ file->f_dentry->d_inode->i_rdev) {
++ struct irctl *ir;
++ ir = irctls[iminor(file->f_dentry->d_inode)];
++ data = ir->d.data;
++ }
++
++ return data;
++}
++EXPORT_SYMBOL(lirc_get_pdata);
++
++
++ssize_t lirc_dev_fop_write(struct file *file, const char *buffer,
++ size_t length, loff_t *ppos)
++{
++ struct irctl *ir = irctls[iminor(file->f_dentry->d_inode)];
++
++ dev_dbg(ir->d.dev, LOGHEAD "write called\n", ir->d.name, ir->d.minor);
++
++ if (!ir->attached)
++ return -ENODEV;
++
++ return -EINVAL;
++}
++EXPORT_SYMBOL(lirc_dev_fop_write);
++
++
++static int __init lirc_dev_init(void)
++{
++ int retval;
++
++ lirc_class = class_create(THIS_MODULE, "lirc");
++ if (IS_ERR(lirc_class)) {
++ retval = PTR_ERR(lirc_class);
++ printk(KERN_ERR "lirc_dev: class_create failed\n");
++ goto error;
++ }
++
++ retval = alloc_chrdev_region(&lirc_base_dev, 0, MAX_IRCTL_DEVICES,
++ IRCTL_DEV_NAME);
++ if (retval) {
++ class_destroy(lirc_class);
++ printk(KERN_ERR "lirc_dev: alloc_chrdev_region failed\n");
++ goto error;
++ }
++
++
++ printk(KERN_INFO "lirc_dev: IR Remote Control driver registered, "
++ "major %d \n", MAJOR(lirc_base_dev));
++
++error:
++ return retval;
++}
++
++
++
++static void __exit lirc_dev_exit(void)
++{
++ class_destroy(lirc_class);
++ unregister_chrdev_region(lirc_base_dev, MAX_IRCTL_DEVICES);
++ printk(KERN_INFO "lirc_dev: module unloaded\n");
++}
++
++module_init(lirc_dev_init);
++module_exit(lirc_dev_exit);
++
++MODULE_DESCRIPTION("LIRC base driver module");
++MODULE_AUTHOR("Artur Lipowski");
++MODULE_LICENSE("GPL");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
+diff --git a/drivers/input/lirc/lirc_dev.h b/drivers/input/lirc/lirc_dev.h
+new file mode 100644
+index 0000000..56020e8
+--- /dev/null
++++ b/drivers/input/lirc/lirc_dev.h
+@@ -0,0 +1,228 @@
++/*
++ * LIRC base driver
++ *
++ * by Artur Lipowski <alipowski@interia.pl>
++ * This code is licensed under GNU GPL
++ *
++ */
++
++#ifndef _LINUX_LIRC_DEV_H
++#define _LINUX_LIRC_DEV_H
++
++#define MAX_IRCTL_DEVICES 4
++#define BUFLEN 16
++
++#define mod(n, div) ((n) % (div))
++
++#include <linux/slab.h>
++#include <linux/fs.h>
++#include <linux/ioctl.h>
++#include <linux/poll.h>
++#include <linux/kfifo.h>
++#include <linux/lirc.h>
++
++struct lirc_buffer {
++ wait_queue_head_t wait_poll;
++ spinlock_t fifo_lock;
++ unsigned int chunk_size;
++ unsigned int size; /* in chunks */
++ /* Using chunks instead of bytes pretends to simplify boundary checking
++ * And should allow for some performance fine tunning later */
++ struct kfifo fifo;
++ u8 fifo_initialized;
++};
++
++static inline void lirc_buffer_clear(struct lirc_buffer *buf)
++{
++ unsigned long flags;
++
++ if (buf->fifo_initialized) {
++ spin_lock_irqsave(&buf->fifo_lock, flags);
++ kfifo_reset(&buf->fifo);
++ spin_unlock_irqrestore(&buf->fifo_lock, flags);
++ } else
++ WARN(1, "calling %s on an uninitialized lirc_buffer\n",
++ __func__);
++}
++
++static inline int lirc_buffer_init(struct lirc_buffer *buf,
++ unsigned int chunk_size,
++ unsigned int size)
++{
++ int ret;
++
++ init_waitqueue_head(&buf->wait_poll);
++ spin_lock_init(&buf->fifo_lock);
++ buf->chunk_size = chunk_size;
++ buf->size = size;
++ ret = kfifo_alloc(&buf->fifo, size * chunk_size, GFP_KERNEL);
++ if (ret == 0)
++ buf->fifo_initialized = 1;
++
++ return ret;
++}
++
++static inline void lirc_buffer_free(struct lirc_buffer *buf)
++{
++ if (buf->fifo_initialized) {
++ kfifo_free(&buf->fifo);
++ buf->fifo_initialized = 0;
++ } else
++ WARN(1, "calling %s on an uninitialized lirc_buffer\n",
++ __func__);
++}
++
++static inline int lirc_buffer_len(struct lirc_buffer *buf)
++{
++ int len;
++ unsigned long flags;
++
++ spin_lock_irqsave(&buf->fifo_lock, flags);
++ len = kfifo_len(&buf->fifo);
++ spin_unlock_irqrestore(&buf->fifo_lock, flags);
++
++ return len;
++}
++
++static inline int lirc_buffer_full(struct lirc_buffer *buf)
++{
++ return lirc_buffer_len(buf) == buf->size * buf->chunk_size;
++}
++
++static inline int lirc_buffer_empty(struct lirc_buffer *buf)
++{
++ return !lirc_buffer_len(buf);
++}
++
++static inline int lirc_buffer_available(struct lirc_buffer *buf)
++{
++ return buf->size - (lirc_buffer_len(buf) / buf->chunk_size);
++}
++
++static inline unsigned int lirc_buffer_read(struct lirc_buffer *buf,
++ unsigned char *dest)
++{
++ unsigned int ret = 0;
++
++ if (lirc_buffer_len(buf) >= buf->chunk_size)
++ ret = kfifo_out_locked(&buf->fifo, dest, buf->chunk_size,
++ &buf->fifo_lock);
++ return ret;
++
++}
++
++static inline unsigned int lirc_buffer_write(struct lirc_buffer *buf,
++ unsigned char *orig)
++{
++ unsigned int ret;
++
++ ret = kfifo_in_locked(&buf->fifo, orig, buf->chunk_size,
++ &buf->fifo_lock);
++
++ return ret;
++}
++
++struct lirc_driver {
++ char name[40];
++ int minor;
++ unsigned long code_length;
++ unsigned int buffer_size; /* in chunks holding one code each */
++ int sample_rate;
++ unsigned long features;
++
++ unsigned int chunk_size;
++
++ void *data;
++ int min_timeout;
++ int max_timeout;
++ int (*add_to_buf) (void *data, struct lirc_buffer *buf);
++ struct lirc_buffer *rbuf;
++ int (*set_use_inc) (void *data);
++ void (*set_use_dec) (void *data);
++ struct file_operations *fops;
++ struct device *dev;
++ struct module *owner;
++};
++
++/* name:
++ * this string will be used for logs
++ *
++ * minor:
++ * indicates minor device (/dev/lirc) number for registered driver
++ * if caller fills it with negative value, then the first free minor
++ * number will be used (if available)
++ *
++ * code_length:
++ * length of the remote control key code expressed in bits
++ *
++ * sample_rate:
++ *
++ * data:
++ * it may point to any driver data and this pointer will be passed to
++ * all callback functions
++ *
++ * add_to_buf:
++ * add_to_buf will be called after specified period of the time or
++ * triggered by the external event, this behavior depends on value of
++ * the sample_rate this function will be called in user context. This
++ * routine should return 0 if data was added to the buffer and
++ * -ENODATA if none was available. This should add some number of bits
++ * evenly divisible by code_length to the buffer
++ *
++ * rbuf:
++ * if not NULL, it will be used as a read buffer, you will have to
++ * write to the buffer by other means, like irq's (see also
++ * lirc_serial.c).
++ *
++ * set_use_inc:
++ * set_use_inc will be called after device is opened
++ *
++ * set_use_dec:
++ * set_use_dec will be called after device is closed
++ *
++ * fops:
++ * file_operations for drivers which don't fit the current driver model.
++ *
++ * Some ioctl's can be directly handled by lirc_dev if the driver's
++ * ioctl function is NULL or if it returns -ENOIOCTLCMD (see also
++ * lirc_serial.c).
++ *
++ * owner:
++ * the module owning this struct
++ *
++ */
++
++
++/* following functions can be called ONLY from user context
++ *
++ * returns negative value on error or minor number
++ * of the registered device if success
++ * contents of the structure pointed by p is copied
++ */
++extern int lirc_register_driver(struct lirc_driver *d);
++
++/* returns negative value on error or 0 if success
++*/
++extern int lirc_unregister_driver(int minor);
++
++/* Returns the private data stored in the lirc_driver
++ * associated with the given device file pointer.
++ */
++void *lirc_get_pdata(struct file *file);
++
++/* default file operations
++ * used by drivers if they override only some operations
++ */
++int lirc_dev_fop_open(struct inode *inode, struct file *file);
++int lirc_dev_fop_close(struct inode *inode, struct file *file);
++unsigned int lirc_dev_fop_poll(struct file *file, poll_table *wait);
++int lirc_dev_fop_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg);
++ssize_t lirc_dev_fop_read(struct file *file, char *buffer, size_t length,
++ loff_t *ppos);
++ssize_t lirc_dev_fop_write(struct file *file, const char *buffer, size_t length,
++ loff_t *ppos);
++long lirc_dev_fop_compat_ioctl(struct file *file, unsigned int cmd32,
++ unsigned long arg);
++
++#endif
+diff --git a/drivers/input/lirc/lirc_ene0100.c b/drivers/input/lirc/lirc_ene0100.c
+new file mode 100644
+index 0000000..a152c52
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ene0100.c
+@@ -0,0 +1,646 @@
++/*
++ * driver for ENE KB3926 B/C/D CIR (also known as ENE0100)
++ *
++ * Copyright (C) 2009 Maxim Levitsky <maximlevitsky@gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/pnp.h>
++#include <linux/io.h>
++#include <linux/interrupt.h>
++#include <linux/sched.h>
++#include "lirc_ene0100.h"
++
++static int sample_period = 75;
++static int enable_idle = 1;
++static int enable_learning;
++
++static void ene_set_idle(struct ene_device *dev, int idle);
++static void ene_set_inputs(struct ene_device *dev, int enable);
++
++/* read a hardware register */
++static u8 ene_hw_read_reg(struct ene_device *dev, u16 reg)
++{
++ outb(reg >> 8, dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO);
++ return inb(dev->hw_io + ENE_IO);
++}
++
++/* write a hardware register */
++static void ene_hw_write_reg(struct ene_device *dev, u16 reg, u8 value)
++{
++ outb(reg >> 8, dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO);
++ outb(value, dev->hw_io + ENE_IO);
++}
++
++/* change specific bits in hardware register */
++static void ene_hw_write_reg_mask(struct ene_device *dev,
++ u16 reg, u8 value, u8 mask)
++{
++ u8 regvalue;
++
++ outb(reg >> 8, dev->hw_io + ENE_ADDR_HI);
++ outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO);
++
++ regvalue = inb(dev->hw_io + ENE_IO) & ~mask;
++ regvalue |= (value & mask);
++ outb(regvalue, dev->hw_io + ENE_IO);
++}
++
++/* read irq status and ack it */
++static int ene_hw_irq_status(struct ene_device *dev, int *buffer_pointer)
++{
++ u8 irq_status;
++ u8 fw_flags1, fw_flags2;
++
++ fw_flags2 = ene_hw_read_reg(dev, ENE_FW2);
++
++ if (buffer_pointer)
++ *buffer_pointer = 4 * (fw_flags2 & ENE_FW2_BUF_HIGH);
++
++ if (dev->hw_revision < ENE_HW_C) {
++ irq_status = ene_hw_read_reg(dev, ENEB_IRQ_STATUS);
++
++ if (!(irq_status & ENEB_IRQ_STATUS_IR))
++ return 0;
++ ene_hw_write_reg(dev, ENEB_IRQ_STATUS,
++ irq_status & ~ENEB_IRQ_STATUS_IR);
++
++ /* rev B support only recieving */
++ return ENE_IRQ_RX;
++ }
++
++ irq_status = ene_hw_read_reg(dev, ENEC_IRQ);
++
++ if (!(irq_status & ENEC_IRQ_STATUS))
++ return 0;
++
++ /* original driver does that twice - a workaround ? */
++ ene_hw_write_reg(dev, ENEC_IRQ, irq_status & ~ENEC_IRQ_STATUS);
++ ene_hw_write_reg(dev, ENEC_IRQ, irq_status & ~ENEC_IRQ_STATUS);
++
++ /* clear unknown flag in F8F9 */
++ if (fw_flags2 & ENE_FW2_IRQ_CLR)
++ ene_hw_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_IRQ_CLR);
++
++ /* check if this is a TX interrupt */
++ fw_flags1 = ene_hw_read_reg(dev, ENE_FW1);
++
++ if (fw_flags1 & ENE_FW1_TXIRQ) {
++ ene_hw_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ);
++ return ENE_IRQ_TX;
++ } else
++ return ENE_IRQ_RX;
++}
++
++static int ene_hw_detect(struct ene_device *dev)
++{
++ u8 chip_major, chip_minor;
++ u8 hw_revision, old_ver;
++ u8 tmp;
++ u8 fw_capabilities;
++
++ tmp = ene_hw_read_reg(dev, ENE_HW_UNK);
++ ene_hw_write_reg(dev, ENE_HW_UNK, tmp & ~ENE_HW_UNK_CLR);
++
++ chip_major = ene_hw_read_reg(dev, ENE_HW_VER_MAJOR);
++ chip_minor = ene_hw_read_reg(dev, ENE_HW_VER_MINOR);
++
++ ene_hw_write_reg(dev, ENE_HW_UNK, tmp);
++ hw_revision = ene_hw_read_reg(dev, ENE_HW_VERSION);
++ old_ver = ene_hw_read_reg(dev, ENE_HW_VER_OLD);
++
++ if (hw_revision == 0xFF) {
++
++ ene_printk(KERN_WARNING, "device seems to be disabled\n");
++ ene_printk(KERN_WARNING,
++ "send a mail to lirc-list@lists.sourceforge.net\n");
++ ene_printk(KERN_WARNING, "please attach output of acpidump\n");
++
++ return -ENODEV;
++ }
++
++ if (chip_major == 0x33) {
++ ene_printk(KERN_WARNING, "chips 0x33xx aren't supported yet\n");
++ return -ENODEV;
++ }
++
++ if (chip_major == 0x39 && chip_minor == 0x26 && hw_revision == 0xC0) {
++ dev->hw_revision = ENE_HW_C;
++ ene_printk(KERN_WARNING,
++ "KB3926C detected, driver support is not complete!\n");
++
++ } else if (old_ver == 0x24 && hw_revision == 0xC0) {
++ dev->hw_revision = ENE_HW_B;
++ ene_printk(KERN_NOTICE, "KB3926B detected\n");
++ } else {
++ dev->hw_revision = ENE_HW_D;
++ ene_printk(KERN_WARNING,
++ "unknown ENE chip detected, assuming KB3926D\n");
++ ene_printk(KERN_WARNING, "driver support incomplete");
++
++ }
++
++ ene_printk(KERN_DEBUG, "chip is 0x%02x%02x - 0x%02x, 0x%02x\n",
++ chip_major, chip_minor, old_ver, hw_revision);
++
++
++ /* detect features hardware supports */
++
++ if (dev->hw_revision < ENE_HW_C)
++ return 0;
++
++ fw_capabilities = ene_hw_read_reg(dev, ENE_FW2);
++
++ dev->hw_gpio40_learning = fw_capabilities & ENE_FW2_GP40_AS_LEARN;
++ dev->hw_learning_and_tx_capable = fw_capabilities & ENE_FW2_LEARNING;
++
++ dev->hw_fan_as_normal_input = dev->hw_learning_and_tx_capable &&
++ fw_capabilities & ENE_FW2_FAN_AS_NRML_IN;
++
++ ene_printk(KERN_NOTICE, "hardware features:\n");
++ ene_printk(KERN_NOTICE,
++ "learning and tx %s, gpio40_learn %s, fan_in %s\n",
++ dev->hw_learning_and_tx_capable ? "on" : "off",
++ dev->hw_gpio40_learning ? "on" : "off",
++ dev->hw_fan_as_normal_input ? "on" : "off");
++
++ if (!dev->hw_learning_and_tx_capable && enable_learning)
++ enable_learning = 0;
++
++ if (dev->hw_learning_and_tx_capable) {
++ ene_printk(KERN_WARNING,
++ "Device supports transmitting, but the driver doesn't\n");
++ ene_printk(KERN_WARNING,
++ "due to lack of hardware to test against.\n");
++ ene_printk(KERN_WARNING,
++ "Send a mail to: lirc-list@lists.sourceforge.net\n");
++ }
++ return 0;
++}
++
++/* hardware initialization */
++static int ene_hw_init(void *data)
++{
++ u8 reg_value;
++ struct ene_device *dev = (struct ene_device *)data;
++ dev->in_use = 1;
++
++ if (dev->hw_revision < ENE_HW_C) {
++ ene_hw_write_reg(dev, ENEB_IRQ, dev->irq << 1);
++ ene_hw_write_reg(dev, ENEB_IRQ_UNK1, 0x01);
++ } else {
++ reg_value = ene_hw_read_reg(dev, ENEC_IRQ) & 0xF0;
++ reg_value |= ENEC_IRQ_UNK_EN;
++ reg_value &= ~ENEC_IRQ_STATUS;
++ reg_value |= (dev->irq & ENEC_IRQ_MASK);
++ ene_hw_write_reg(dev, ENEC_IRQ, reg_value);
++ ene_hw_write_reg(dev, ENE_TX_UNK1, 0x63);
++ }
++
++ ene_hw_write_reg(dev, ENE_CIR_CONF2, 0x00);
++ ene_set_inputs(dev, enable_learning);
++
++ /* set sampling period */
++ ene_hw_write_reg(dev, ENE_CIR_SAMPLE_PERIOD, sample_period);
++
++ /* ack any pending irqs - just in case */
++ ene_hw_irq_status(dev, NULL);
++
++ /* enter idle mode */
++ ene_set_idle(dev, 1);
++
++ /* enable firmware bits */
++ ene_hw_write_reg_mask(dev, ENE_FW1,
++ ENE_FW1_ENABLE | ENE_FW1_IRQ,
++ ENE_FW1_ENABLE | ENE_FW1_IRQ);
++ /* clear stats */
++ dev->sample = 0;
++ return 0;
++}
++
++/* this enables gpio40 signal, used if connected to wide band input*/
++static void ene_enable_gpio40(struct ene_device *dev, int enable)
++{
++ ene_hw_write_reg_mask(dev, ENE_CIR_CONF1, enable ?
++ 0 : ENE_CIR_CONF2_GPIO40DIS,
++ ENE_CIR_CONF2_GPIO40DIS);
++}
++
++/* this enables the classic sampler */
++static void ene_enable_normal_recieve(struct ene_device *dev, int enable)
++{
++ ene_hw_write_reg(dev, ENE_CIR_CONF1, enable ? ENE_CIR_CONF1_ADC_ON : 0);
++}
++
++/* this enables recieve via fan input */
++static void ene_enable_fan_recieve(struct ene_device *dev, int enable)
++{
++ if (!enable)
++ ene_hw_write_reg(dev, ENE_FAN_AS_IN1, 0);
++ else {
++ ene_hw_write_reg(dev, ENE_FAN_AS_IN1, ENE_FAN_AS_IN1_EN);
++ ene_hw_write_reg(dev, ENE_FAN_AS_IN2, ENE_FAN_AS_IN2_EN);
++ }
++ dev->fan_input_inuse = enable;
++}
++
++/* determine which input to use*/
++static void ene_set_inputs(struct ene_device *dev, int learning_enable)
++{
++ ene_enable_normal_recieve(dev, 1);
++
++ /* old hardware doesn't support learning mode for sure */
++ if (dev->hw_revision <= ENE_HW_B)
++ return;
++
++ /* reciever not learning capable, still set gpio40 correctly */
++ if (!dev->hw_learning_and_tx_capable) {
++ ene_enable_gpio40(dev, !dev->hw_gpio40_learning);
++ return;
++ }
++
++ /* enable learning mode */
++ if (learning_enable) {
++ ene_enable_gpio40(dev, dev->hw_gpio40_learning);
++
++ /* fan input is not used for learning */
++ if (dev->hw_fan_as_normal_input)
++ ene_enable_fan_recieve(dev, 0);
++
++ /* disable learning mode */
++ } else {
++ if (dev->hw_fan_as_normal_input) {
++ ene_enable_fan_recieve(dev, 1);
++ ene_enable_normal_recieve(dev, 0);
++ } else
++ ene_enable_gpio40(dev, !dev->hw_gpio40_learning);
++ }
++
++ /* set few additional settings for this mode */
++ ene_hw_write_reg_mask(dev, ENE_CIR_CONF1, learning_enable ?
++ ENE_CIR_CONF1_LEARN1 : 0, ENE_CIR_CONF1_LEARN1);
++
++ ene_hw_write_reg_mask(dev, ENE_CIR_CONF2, learning_enable ?
++ ENE_CIR_CONF2_LEARN2 : 0, ENE_CIR_CONF2_LEARN2);
++}
++
++/* deinitialization */
++static void ene_hw_deinit(void *data)
++{
++ struct ene_device *dev = (struct ene_device *)data;
++
++ /* disable samplers */
++ ene_enable_normal_recieve(dev, 0);
++
++ if (dev->hw_fan_as_normal_input)
++ ene_enable_fan_recieve(dev, 0);
++
++ /* disable hardware IRQ and firmware flag */
++ ene_hw_write_reg_mask(dev, ENE_FW1, 0, ENE_FW1_ENABLE | ENE_FW1_IRQ);
++
++ ene_set_idle(dev, 1);
++ dev->in_use = 0;
++}
++
++/* sends current sample to userspace */
++static void send_sample(struct ene_device *dev)
++{
++ int value = abs(dev->sample) & PULSE_MASK;
++
++ if (dev->sample > 0)
++ value |= PULSE_BIT;
++
++ if (!lirc_buffer_full(dev->lirc_driver->rbuf)) {
++ lirc_buffer_write(dev->lirc_driver->rbuf, (void *)&value);
++ wake_up(&dev->lirc_driver->rbuf->wait_poll);
++ }
++ dev->sample = 0;
++}
++
++/* this updates current sample */
++static void update_sample(struct ene_device *dev, int sample)
++{
++ if (!dev->sample)
++ dev->sample = sample;
++ else if (same_sign(dev->sample, sample))
++ dev->sample += sample;
++ else {
++ send_sample(dev);
++ dev->sample = sample;
++ }
++}
++
++/* enable or disable idle mode */
++static void ene_set_idle(struct ene_device *dev, int idle)
++{
++ struct timeval now;
++ int disable = idle && enable_idle && (dev->hw_revision < ENE_HW_C);
++
++ ene_hw_write_reg_mask(dev, ENE_CIR_SAMPLE_PERIOD,
++ disable ? 0 : ENE_CIR_SAMPLE_OVERFLOW,
++ ENE_CIR_SAMPLE_OVERFLOW);
++ dev->idle = idle;
++
++ /* remember when we have entered the idle mode */
++ if (idle) {
++ do_gettimeofday(&dev->gap_start);
++ return;
++ }
++
++ /* send the gap between keypresses now */
++ do_gettimeofday(&now);
++
++ if (now.tv_sec - dev->gap_start.tv_sec > 16)
++ dev->sample = space(PULSE_MASK);
++ else
++ dev->sample = dev->sample +
++ space(1000000ull * (now.tv_sec - dev->gap_start.tv_sec))
++ + space(now.tv_usec - dev->gap_start.tv_usec);
++
++ if (abs(dev->sample) > PULSE_MASK)
++ dev->sample = space(PULSE_MASK);
++ send_sample(dev);
++}
++
++/* interrupt handler */
++static irqreturn_t ene_hw_irq(int irq, void *data)
++{
++ u16 hw_value;
++ int i, hw_sample;
++ int space;
++ int buffer_pointer;
++ int irq_status;
++
++ struct ene_device *dev = (struct ene_device *)data;
++ irq_status = ene_hw_irq_status(dev, &buffer_pointer);
++
++ if (!irq_status)
++ return IRQ_NONE;
++
++ /* TODO: only RX for now */
++ if (irq_status == ENE_IRQ_TX)
++ return IRQ_HANDLED;
++
++ for (i = 0; i < ENE_SAMPLES_SIZE; i++) {
++
++ hw_value = ene_hw_read_reg(dev,
++ ENE_SAMPLE_BUFFER + buffer_pointer + i);
++
++ if (dev->fan_input_inuse) {
++ /* read high part of the sample */
++ hw_value |= ene_hw_read_reg(dev,
++ ENE_SAMPLE_BUFFER_FAN + buffer_pointer + i) << 8;
++
++ /* test for _space_ bit */
++ space = !(hw_value & ENE_FAN_SMPL_PULS_MSK);
++
++ /* clear space bit, and other unused bits */
++ hw_value &= ENE_FAN_VALUE_MASK;
++ hw_sample = hw_value * ENE_SAMPLE_PERIOD_FAN;
++
++ } else {
++ space = hw_value & ENE_SAMPLE_SPC_MASK;
++ hw_value &= ENE_SAMPLE_VALUE_MASK;
++ hw_sample = hw_value * sample_period;
++ }
++
++ /* no more data */
++ if (!(hw_value))
++ break;
++
++ if (space)
++ hw_sample *= -1;
++
++ /* overflow sample recieved, handle it */
++
++ if (!dev->fan_input_inuse && hw_value == ENE_SAMPLE_OVERFLOW) {
++
++ if (dev->idle)
++ continue;
++
++ if (dev->sample > 0 || abs(dev->sample) <= ENE_MAXGAP)
++ update_sample(dev, hw_sample);
++ else
++ ene_set_idle(dev, 1);
++
++ continue;
++ }
++
++ /* normal first sample recieved */
++ if (!dev->fan_input_inuse && dev->idle) {
++ ene_set_idle(dev, 0);
++
++ /* discard first recieved value, its random
++ since its the time signal was off before
++ first pulse if idle mode is enabled, HW
++ does that for us */
++
++ if (!enable_idle)
++ continue;
++ }
++ update_sample(dev, hw_sample);
++ send_sample(dev);
++ }
++ return IRQ_HANDLED;
++}
++
++static int ene_probe(struct pnp_dev *pnp_dev,
++ const struct pnp_device_id *dev_id)
++{
++ struct ene_device *dev;
++ struct lirc_driver *lirc_driver;
++ int error = -ENOMEM;
++
++ dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
++
++ if (!dev)
++ goto err1;
++
++ dev->pnp_dev = pnp_dev;
++ pnp_set_drvdata(pnp_dev, dev);
++
++
++ /* prepare lirc interface */
++ error = -ENOMEM;
++ lirc_driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++
++ if (!lirc_driver)
++ goto err2;
++
++ dev->lirc_driver = lirc_driver;
++
++ strcpy(lirc_driver->name, ENE_DRIVER_NAME);
++ lirc_driver->minor = -1;
++ lirc_driver->code_length = sizeof(int) * 8;
++ lirc_driver->features = LIRC_CAN_REC_MODE2;
++ lirc_driver->data = dev;
++ lirc_driver->set_use_inc = ene_hw_init;
++ lirc_driver->set_use_dec = ene_hw_deinit;
++ lirc_driver->dev = &pnp_dev->dev;
++ lirc_driver->owner = THIS_MODULE;
++
++ lirc_driver->rbuf = kzalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++
++ if (!lirc_driver->rbuf)
++ goto err3;
++
++ if (lirc_buffer_init(lirc_driver->rbuf, sizeof(int), sizeof(int) * 256))
++ goto err4;
++
++ error = -ENODEV;
++ if (lirc_register_driver(lirc_driver))
++ goto err5;
++
++ /* validate resources */
++ if (!pnp_port_valid(pnp_dev, 0) ||
++ pnp_port_len(pnp_dev, 0) < ENE_MAX_IO)
++ goto err6;
++
++ if (!pnp_irq_valid(pnp_dev, 0))
++ goto err6;
++
++ dev->hw_io = pnp_port_start(pnp_dev, 0);
++ dev->irq = pnp_irq(pnp_dev, 0);
++
++ /* claim the resources */
++ error = -EBUSY;
++ if (!request_region(dev->hw_io, ENE_MAX_IO, ENE_DRIVER_NAME))
++ goto err6;
++
++ if (request_irq(dev->irq, ene_hw_irq,
++ IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev))
++ goto err7;
++
++ /* detect hardware version and features */
++ error = ene_hw_detect(dev);
++ if (error)
++ goto err8;
++
++ ene_printk(KERN_NOTICE, "driver has been succesfully loaded\n");
++ return 0;
++
++err8:
++ free_irq(dev->irq, dev);
++err7:
++ release_region(dev->hw_io, ENE_MAX_IO);
++err6:
++ lirc_unregister_driver(lirc_driver->minor);
++err5:
++ lirc_buffer_free(lirc_driver->rbuf);
++err4:
++ kfree(lirc_driver->rbuf);
++err3:
++ kfree(lirc_driver);
++err2:
++ kfree(dev);
++err1:
++ return error;
++}
++
++static void ene_remove(struct pnp_dev *pnp_dev)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ ene_hw_deinit(dev);
++ free_irq(dev->irq, dev);
++ release_region(dev->hw_io, ENE_MAX_IO);
++ lirc_unregister_driver(dev->lirc_driver->minor);
++ lirc_buffer_free(dev->lirc_driver->rbuf);
++ kfree(dev->lirc_driver);
++ kfree(dev);
++}
++
++#ifdef CONFIG_PM
++
++/* TODO: make 'wake on IR' configurable and add .shutdown */
++/* currently impossible due to lack of kernel support */
++
++static int ene_suspend(struct pnp_dev *pnp_dev, pm_message_t state)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ ene_hw_write_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, ENE_FW1_WAKE);
++ return 0;
++}
++
++static int ene_resume(struct pnp_dev *pnp_dev)
++{
++ struct ene_device *dev = pnp_get_drvdata(pnp_dev);
++ if (dev->in_use)
++ ene_hw_init(dev);
++
++ ene_hw_write_reg_mask(dev, ENE_FW1, 0, ENE_FW1_WAKE);
++ return 0;
++}
++
++#endif
++
++static const struct pnp_device_id ene_ids[] = {
++ {.id = "ENE0100",},
++ {},
++};
++
++static struct pnp_driver ene_driver = {
++ .name = ENE_DRIVER_NAME,
++ .id_table = ene_ids,
++ .flags = PNP_DRIVER_RES_DO_NOT_CHANGE,
++
++ .probe = ene_probe,
++ .remove = __devexit_p(ene_remove),
++
++#ifdef CONFIG_PM
++ .suspend = ene_suspend,
++ .resume = ene_resume,
++#endif
++};
++
++static int __init ene_init(void)
++{
++ if (sample_period < 5) {
++ ene_printk(KERN_ERR, "sample period must be at\n");
++ ene_printk(KERN_ERR, "least 5 us, (at least 30 recommended)\n");
++ return -EINVAL;
++ }
++ return pnp_register_driver(&ene_driver);
++}
++
++static void ene_exit(void)
++{
++ pnp_unregister_driver(&ene_driver);
++}
++
++module_param(sample_period, int, S_IRUGO);
++MODULE_PARM_DESC(sample_period, "Hardware sample period (75 us default)");
++
++module_param(enable_idle, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(enable_idle,
++ "Enables turning off signal sampling after long inactivity time; "
++ "if disabled might help detecting input signal (default: enabled)");
++
++module_param(enable_learning, bool, S_IRUGO);
++MODULE_PARM_DESC(enable_learning, "Use wide band (learning) reciever");
++
++MODULE_DEVICE_TABLE(pnp, ene_ids);
++MODULE_DESCRIPTION
++ ("LIRC driver for KB3926B/KB3926C/KB3926D (aka ENE0100) CIR port");
++MODULE_AUTHOR("Maxim Levitsky");
++MODULE_LICENSE("GPL");
++
++module_init(ene_init);
++module_exit(ene_exit);
+diff --git a/drivers/input/lirc/lirc_ene0100.h b/drivers/input/lirc/lirc_ene0100.h
+new file mode 100644
+index 0000000..953e7e4
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ene0100.h
+@@ -0,0 +1,169 @@
++/*
++ * driver for ENE KB3926 B/C/D CIR (also known as ENE0100)
++ *
++ * Copyright (C) 2009 Maxim Levitsky <maximlevitsky@gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++/* hardware address */
++#define ENE_STATUS 0 /* hardware status - unused */
++#define ENE_ADDR_HI 1 /* hi byte of register address */
++#define ENE_ADDR_LO 2 /* low byte of register address */
++#define ENE_IO 3 /* read/write window */
++#define ENE_MAX_IO 4
++
++/* 8 bytes of samples, divided in 2 halfs*/
++#define ENE_SAMPLE_BUFFER 0xF8F0 /* regular sample buffer */
++#define ENE_SAMPLE_SPC_MASK (1 << 7) /* sample is space */
++#define ENE_SAMPLE_VALUE_MASK 0x7F
++#define ENE_SAMPLE_OVERFLOW 0x7F
++#define ENE_SAMPLES_SIZE 4
++
++/* fan input sample buffer */
++#define ENE_SAMPLE_BUFFER_FAN 0xF8FB /* this buffer holds high byte of */
++ /* each sample of normal buffer */
++
++#define ENE_FAN_SMPL_PULS_MSK 0x8000 /* this bit of combined sample */
++ /* if set, says that sample is pulse */
++#define ENE_FAN_VALUE_MASK 0x0FFF /* mask for valid bits of the value */
++
++/* first firmware register */
++#define ENE_FW1 0xF8F8
++#define ENE_FW1_ENABLE (1 << 0) /* enable fw processing */
++#define ENE_FW1_TXIRQ (1 << 1) /* TX interrupt pending */
++#define ENE_FW1_WAKE (1 << 6) /* enable wake from S3 */
++#define ENE_FW1_IRQ (1 << 7) /* enable interrupt */
++
++/* second firmware register */
++#define ENE_FW2 0xF8F9
++#define ENE_FW2_BUF_HIGH (1 << 0) /* which half of the buffer to read */
++#define ENE_FW2_IRQ_CLR (1 << 2) /* clear this on IRQ */
++#define ENE_FW2_GP40_AS_LEARN (1 << 4) /* normal input is used as */
++ /* learning input */
++#define ENE_FW2_FAN_AS_NRML_IN (1 << 6) /* fan is used as normal input */
++#define ENE_FW2_LEARNING (1 << 7) /* hardware supports learning and TX */
++
++/* fan as input settings - only if learning capable */
++#define ENE_FAN_AS_IN1 0xFE30 /* fan init reg 1 */
++#define ENE_FAN_AS_IN1_EN 0xCD
++#define ENE_FAN_AS_IN2 0xFE31 /* fan init reg 2 */
++#define ENE_FAN_AS_IN2_EN 0x03
++#define ENE_SAMPLE_PERIOD_FAN 61 /* fan input has fixed sample period */
++
++/* IRQ registers block (for revision B) */
++#define ENEB_IRQ 0xFD09 /* IRQ number */
++#define ENEB_IRQ_UNK1 0xFD17 /* unknown setting = 1 */
++#define ENEB_IRQ_STATUS 0xFD80 /* irq status */
++#define ENEB_IRQ_STATUS_IR (1 << 5) /* IR irq */
++
++/* IRQ registers block (for revision C,D) */
++#define ENEC_IRQ 0xFE9B /* new irq settings register */
++#define ENEC_IRQ_MASK 0x0F /* irq number mask */
++#define ENEC_IRQ_UNK_EN (1 << 4) /* always enabled */
++#define ENEC_IRQ_STATUS (1 << 5) /* irq status and ACK */
++
++/* CIR block settings */
++#define ENE_CIR_CONF1 0xFEC0
++#define ENE_CIR_CONF1_ADC_ON 0x7 /* reciever on gpio40 enabled */
++#define ENE_CIR_CONF1_LEARN1 (1 << 3) /* enabled on learning mode */
++#define ENE_CIR_CONF1_TX_ON 0x30 /* enabled on transmit */
++#define ENE_CIR_CONF1_TX_CARR (1 << 7) /* send TX carrier or not */
++
++#define ENE_CIR_CONF2 0xFEC1 /* unknown setting = 0 */
++#define ENE_CIR_CONF2_LEARN2 (1 << 4) /* set on enable learning */
++#define ENE_CIR_CONF2_GPIO40DIS (1 << 5) /* disable normal input via gpio40 */
++
++#define ENE_CIR_SAMPLE_PERIOD 0xFEC8 /* sample period in us */
++#define ENE_CIR_SAMPLE_OVERFLOW (1 << 7) /* interrupt on overflows if set */
++
++
++/* transmitter - not implemented yet */
++/* KB3926C and higher */
++/* transmission is very similiar to recieving, a byte is written to */
++/* ENE_TX_INPUT, in same manner as it is read from sample buffer */
++/* sample period is fixed*/
++
++
++/* transmitter ports */
++#define ENE_TX_PORT1 0xFC01 /* this enables one or both */
++#define ENE_TX_PORT1_EN (1 << 5) /* TX ports */
++#define ENE_TX_PORT2 0xFC08
++#define ENE_TX_PORT2_EN (1 << 1)
++
++#define ENE_TX_INPUT 0xFEC9 /* next byte to transmit */
++#define ENE_TX_SPC_MASK (1 << 7) /* Transmitted sample is space */
++#define ENE_TX_UNK1 0xFECB /* set to 0x63 */
++#define ENE_TX_SMPL_PERIOD 50 /* transmit sample period */
++
++
++#define ENE_TX_CARRIER 0xFECE /* TX carrier * 2 (khz) */
++#define ENE_TX_CARRIER_UNKBIT 0x80 /* This bit set on transmit */
++#define ENE_TX_CARRIER_LOW 0xFECF /* TX carrier / 2 */
++
++/* Hardware versions */
++#define ENE_HW_VERSION 0xFF00 /* hardware revision */
++#define ENE_HW_UNK 0xFF1D
++#define ENE_HW_UNK_CLR (1 << 2)
++#define ENE_HW_VER_MAJOR 0xFF1E /* chip version */
++#define ENE_HW_VER_MINOR 0xFF1F
++#define ENE_HW_VER_OLD 0xFD00
++
++#define same_sign(a, b) ((((a) > 0) && (b) > 0) || ((a) < 0 && (b) < 0))
++
++#define ENE_DRIVER_NAME "enecir"
++#define ENE_MAXGAP 250000 /* this is amount of time we wait
++ before turning the sampler, chosen
++ arbitry */
++
++#define space(len) (-(len)) /* add a space */
++
++/* software defines */
++#define ENE_IRQ_RX 1
++#define ENE_IRQ_TX 2
++
++#define ENE_HW_B 1 /* 3926B */
++#define ENE_HW_C 2 /* 3926C */
++#define ENE_HW_D 3 /* 3926D */
++
++#define ene_printk(level, text, ...) \
++ printk(level ENE_DRIVER_NAME ": " text, ## __VA_ARGS__)
++
++struct ene_device {
++ struct pnp_dev *pnp_dev;
++ struct lirc_driver *lirc_driver;
++
++ /* hw settings */
++ unsigned long hw_io;
++ int irq;
++
++ int hw_revision; /* hardware revision */
++ int hw_learning_and_tx_capable; /* learning capable */
++ int hw_gpio40_learning; /* gpio40 is learning */
++ int hw_fan_as_normal_input; /* fan input is used as regular input */
++
++ /* device data */
++ int idle;
++ int fan_input_inuse;
++
++ int sample;
++ int in_use;
++
++ struct timeval gap_start;
++};
+diff --git a/drivers/input/lirc/lirc_i2c.c b/drivers/input/lirc/lirc_i2c.c
+new file mode 100644
+index 0000000..f3f8c2e
+--- /dev/null
++++ b/drivers/input/lirc/lirc_i2c.c
+@@ -0,0 +1,536 @@
++/*
++ * lirc_i2c.c
++ *
++ * i2c IR driver for the onboard IR port on many TV tuner cards, including:
++ * -Flavors of the Hauppauge PVR-150/250/350
++ * -Hauppauge HVR-1300
++ * -PixelView (BT878P+W/FM)
++ * -KNC ONE TV Station/Anubis Typhoon TView Tuner
++ * -Asus TV-Box and Creative/VisionTek BreakOut-Box
++ * -Leadtek Winfast PVR2000
++ *
++ * Copyright (c) 2000 Gerd Knorr <kraxel@goldbach.in-berlin.de>
++ * modified for PixelView (BT878P+W/FM) by
++ * Michal Kochanowicz <mkochano@pld.org.pl>
++ * Christoph Bartelmus <lirc@bartelmus.de>
++ * modified for KNC ONE TV Station/Anubis Typhoon TView Tuner by
++ * Ulrich Mueller <ulrich.mueller42@web.de>
++ * modified for Asus TV-Box and Creative/VisionTek BreakOut-Box by
++ * Stefan Jahn <stefan@lkcc.org>
++ * modified for inclusion into kernel sources by
++ * Jerome Brock <jbrock@users.sourceforge.net>
++ * modified for Leadtek Winfast PVR2000 by
++ * Thomas Reitmayr (treitmayr@yahoo.com)
++ * modified for Hauppauge HVR-1300 by
++ * Jan Frey (jfrey@gmx.de)
++ *
++ * parts are cut&pasted from the old lirc_haup.c driver
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++
++#include <linux/version.h>
++#include <linux/module.h>
++#include <linux/kmod.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/string.h>
++#include <linux/timer.h>
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/i2c-algo-bit.h>
++
++#include "lirc_dev.h"
++
++struct IR {
++ struct lirc_driver l;
++ struct i2c_client c;
++ int nextkey;
++ unsigned char b[3];
++ unsigned char bits;
++ unsigned char flag;
++};
++
++#define DEVICE_NAME "lirc_i2c"
++
++/* module parameters */
++static int debug; /* debug output */
++static int minor = -1; /* minor number */
++
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG DEVICE_NAME ": " fmt, \
++ ## args); \
++ } while (0)
++
++static int reverse(int data, int bits)
++{
++ int i;
++ int c;
++
++ for (c = 0, i = 0; i < bits; i++)
++ c |= ((data & (1<<i)) ? 1 : 0) << (bits-1-i);
++
++ return c;
++}
++
++static int add_to_buf_adap(void *data, struct lirc_buffer *buf)
++{
++ struct IR *ir = data;
++ unsigned char keybuf[4];
++
++ keybuf[0] = 0x00;
++ i2c_master_send(&ir->c, keybuf, 1);
++ /* poll IR chip */
++ if (i2c_master_recv(&ir->c, keybuf, sizeof(keybuf)) != sizeof(keybuf)) {
++ dprintk("read error\n");
++ return -EIO;
++ }
++
++ dprintk("key (0x%02x%02x%02x%02x)\n",
++ keybuf[0], keybuf[1], keybuf[2], keybuf[3]);
++
++ /* key pressed ? */
++ if (keybuf[2] == 0xff)
++ return -ENODATA;
++
++ /* remove repeat bit */
++ keybuf[2] &= 0x7f;
++ keybuf[3] |= 0x80;
++
++ lirc_buffer_write(buf, keybuf);
++ return 0;
++}
++
++static int add_to_buf_pcf8574(void *data, struct lirc_buffer *buf)
++{
++ struct IR *ir = data;
++ int rc;
++ unsigned char all, mask;
++ unsigned char key;
++
++ /* compute all valid bits (key code + pressed/release flag) */
++ all = ir->bits | ir->flag;
++
++ /* save IR writable mask bits */
++ mask = i2c_smbus_read_byte(&ir->c) & ~all;
++
++ /* send bit mask */
++ rc = i2c_smbus_write_byte(&ir->c, (0xff & all) | mask);
++
++ /* receive scan code */
++ rc = i2c_smbus_read_byte(&ir->c);
++
++ if (rc == -1) {
++ dprintk("%s read error\n", ir->c.name);
++ return -EIO;
++ }
++
++ /* drop duplicate polls */
++ if (ir->b[0] == (rc & all))
++ return -ENODATA;
++
++ ir->b[0] = rc & all;
++
++ dprintk("%s key 0x%02X %s\n", ir->c.name, rc & ir->bits,
++ (rc & ir->flag) ? "released" : "pressed");
++
++ /* ignore released buttons */
++ if (rc & ir->flag)
++ return -ENODATA;
++
++ /* set valid key code */
++ key = rc & ir->bits;
++ lirc_buffer_write(buf, &key);
++ return 0;
++}
++
++/* common for Hauppauge IR receivers */
++static int add_to_buf_haup_common(void *data, struct lirc_buffer *buf,
++ unsigned char *keybuf, int size, int offset)
++{
++ struct IR *ir = data;
++ __u16 code;
++ unsigned char codes[2];
++ int ret;
++
++ /* poll IR chip */
++ ret = i2c_master_recv(&ir->c, keybuf, size);
++ if (ret == size) {
++ ir->b[0] = keybuf[offset];
++ ir->b[1] = keybuf[offset+1];
++ ir->b[2] = keybuf[offset+2];
++ if (ir->b[0] != 0x00 && ir->b[1] != 0x00)
++ dprintk("key (0x%02x/0x%02x)\n", ir->b[0], ir->b[1]);
++ } else {
++ dprintk("read error (ret=%d)\n", ret);
++ /* keep last successful read buffer */
++ }
++
++ /* key pressed ? */
++ if ((ir->b[0] & 0x80) == 0)
++ return -ENODATA;
++
++ /* look what we have */
++ code = (((__u16)ir->b[0]&0x7f)<<6) | (ir->b[1]>>2);
++
++ codes[0] = (code >> 8) & 0xff;
++ codes[1] = code & 0xff;
++
++ /* return it */
++ dprintk("sending code 0x%02x%02x to lirc\n", codes[0], codes[1]);
++ lirc_buffer_write(buf, codes);
++ return 0;
++}
++
++/* specific for the Hauppauge PVR150 IR receiver */
++static int add_to_buf_haup_pvr150(void *data, struct lirc_buffer *buf)
++{
++ unsigned char keybuf[6];
++ /* fetch 6 bytes, first relevant is at offset 3 */
++ return add_to_buf_haup_common(data, buf, keybuf, 6, 3);
++}
++
++/* used for all Hauppauge IR receivers but the PVR150 */
++static int add_to_buf_haup(void *data, struct lirc_buffer *buf)
++{
++ unsigned char keybuf[3];
++ /* fetch 3 bytes, first relevant is at offset 0 */
++ return add_to_buf_haup_common(data, buf, keybuf, 3, 0);
++}
++
++
++static int add_to_buf_pvr2000(void *data, struct lirc_buffer *buf)
++{
++ struct IR *ir = data;
++ unsigned char key;
++ s32 flags;
++ s32 code;
++
++ /* poll IR chip */
++ flags = i2c_smbus_read_byte_data(&ir->c, 0x10);
++ if (-1 == flags) {
++ dprintk("read error\n");
++ return -ENODATA;
++ }
++ /* key pressed ? */
++ if (0 == (flags & 0x80))
++ return -ENODATA;
++
++ /* read actual key code */
++ code = i2c_smbus_read_byte_data(&ir->c, 0x00);
++ if (-1 == code) {
++ dprintk("read error\n");
++ return -ENODATA;
++ }
++
++ key = code & 0xFF;
++
++ dprintk("IR Key/Flags: (0x%02x/0x%02x)\n", key, flags & 0xFF);
++
++ /* return it */
++ lirc_buffer_write(buf, &key);
++ return 0;
++}
++
++static int add_to_buf_pixelview(void *data, struct lirc_buffer *buf)
++{
++ struct IR *ir = data;
++ unsigned char key;
++
++ /* poll IR chip */
++ if (1 != i2c_master_recv(&ir->c, &key, 1)) {
++ dprintk("read error\n");
++ return -1;
++ }
++ dprintk("key %02x\n", key);
++
++ /* return it */
++ lirc_buffer_write(buf, &key);
++ return 0;
++}
++
++static int add_to_buf_pv951(void *data, struct lirc_buffer *buf)
++{
++ struct IR *ir = data;
++ unsigned char key;
++ unsigned char codes[4];
++
++ /* poll IR chip */
++ if (1 != i2c_master_recv(&ir->c, &key, 1)) {
++ dprintk("read error\n");
++ return -ENODATA;
++ }
++ /* ignore 0xaa */
++ if (key == 0xaa)
++ return -ENODATA;
++ dprintk("key %02x\n", key);
++
++ codes[0] = 0x61;
++ codes[1] = 0xD6;
++ codes[2] = reverse(key, 8);
++ codes[3] = (~codes[2])&0xff;
++
++ lirc_buffer_write(buf, codes);
++ return 0;
++}
++
++static int add_to_buf_knc1(void *data, struct lirc_buffer *buf)
++{
++ static unsigned char last_key = 0xFF;
++ struct IR *ir = data;
++ unsigned char key;
++
++ /* poll IR chip */
++ if (1 != i2c_master_recv(&ir->c, &key, 1)) {
++ dprintk("read error\n");
++ return -ENODATA;
++ }
++
++ /*
++ * it seems that 0xFE indicates that a button is still held
++ * down, while 0xFF indicates that no button is held
++ * down. 0xFE sequences are sometimes interrupted by 0xFF
++ */
++
++ dprintk("key %02x\n", key);
++
++ if (key == 0xFF)
++ return -ENODATA;
++
++ if (key == 0xFE)
++ key = last_key;
++
++ last_key = key;
++ lirc_buffer_write(buf, &key);
++
++ return 0;
++}
++
++static int set_use_inc(void *data)
++{
++ struct IR *ir = data;
++
++ dprintk("%s called\n", __func__);
++
++ /* lock bttv in memory while /dev/lirc is in use */
++ i2c_use_client(&ir->c);
++
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++ struct IR *ir = data;
++
++ dprintk("%s called\n", __func__);
++
++ i2c_release_client(&ir->c);
++}
++
++static struct lirc_driver lirc_template = {
++ .name = "lirc_i2c",
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .dev = NULL,
++ .owner = THIS_MODULE,
++};
++
++static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id);
++static int ir_remove(struct i2c_client *client);
++static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg);
++
++static const struct i2c_device_id ir_receiver_id[] = {
++ /* Generic entry for any IR receiver */
++ { "ir_video", 0 },
++ /* IR device specific entries could be added here */
++ { }
++};
++
++static struct i2c_driver driver = {
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = "i2c ir driver",
++ },
++ .probe = ir_probe,
++ .remove = ir_remove,
++ .id_table = ir_receiver_id,
++ .command = ir_command,
++};
++
++static void pcf_probe(struct i2c_client *client, struct IR *ir)
++{
++ int ret1, ret2, ret3, ret4;
++
++ ret1 = i2c_smbus_write_byte(client, 0xff);
++ ret2 = i2c_smbus_read_byte(client);
++ ret3 = i2c_smbus_write_byte(client, 0x00);
++ ret4 = i2c_smbus_read_byte(client);
++
++ /* in the Asus TV-Box: bit 1-0 */
++ if (((ret2 & 0x03) == 0x03) && ((ret4 & 0x03) == 0x00)) {
++ ir->bits = (unsigned char) ~0x07;
++ ir->flag = 0x04;
++ /* in the Creative/VisionTek BreakOut-Box: bit 7-6 */
++ } else if (((ret2 & 0xc0) == 0xc0) && ((ret4 & 0xc0) == 0x00)) {
++ ir->bits = (unsigned char) ~0xe0;
++ ir->flag = 0x20;
++ }
++
++ return;
++}
++
++static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
++{
++ struct IR *ir;
++ struct i2c_adapter *adap = client->adapter;
++ unsigned short addr = client->addr;
++ int retval;
++
++ ir = kzalloc(sizeof(struct IR), GFP_KERNEL);
++ if (!ir)
++ return -ENOMEM;
++ memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver));
++ memcpy(&ir->c, client, sizeof(struct i2c_client));
++
++ i2c_set_clientdata(client, ir);
++ ir->l.data = ir;
++ ir->l.minor = minor;
++ ir->l.sample_rate = 10;
++ ir->l.dev = &ir->c.dev;
++ ir->nextkey = -1;
++
++ switch (addr) {
++ case 0x64:
++ strlcpy(ir->c.name, "Pixelview IR", I2C_NAME_SIZE);
++ ir->l.code_length = 8;
++ ir->l.add_to_buf = add_to_buf_pixelview;
++ break;
++ case 0x4b:
++ strlcpy(ir->c.name, "PV951 IR", I2C_NAME_SIZE);
++ ir->l.code_length = 32;
++ ir->l.add_to_buf = add_to_buf_pv951;
++ break;
++ case 0x71:
++ if (adap->id == I2C_HW_B_CX2388x)
++ strlcpy(ir->c.name, "Hauppauge HVR1300", I2C_NAME_SIZE);
++ else /* bt8xx or cx2341x */
++ /*
++ * The PVR150 IR receiver uses the same protocol as
++ * other Hauppauge cards, but the data flow is
++ * different, so we need to deal with it by its own.
++ */
++ strlcpy(ir->c.name, "Hauppauge PVR150", I2C_NAME_SIZE);
++ ir->l.code_length = 13;
++ ir->l.add_to_buf = add_to_buf_haup_pvr150;
++ break;
++ case 0x6b:
++ strlcpy(ir->c.name, "Adaptec IR", I2C_NAME_SIZE);
++ ir->l.code_length = 32;
++ ir->l.add_to_buf = add_to_buf_adap;
++ break;
++ case 0x18:
++ case 0x1a:
++ if (adap->id == I2C_HW_B_CX2388x) {
++ strlcpy(ir->c.name, "Leadtek IR", I2C_NAME_SIZE);
++ ir->l.code_length = 8;
++ ir->l.add_to_buf = add_to_buf_pvr2000;
++ } else { /* bt8xx or cx2341x */
++ strlcpy(ir->c.name, "Hauppauge IR", I2C_NAME_SIZE);
++ ir->l.code_length = 13;
++ ir->l.add_to_buf = add_to_buf_haup;
++ }
++ break;
++ case 0x30:
++ strlcpy(ir->c.name, "KNC ONE IR", I2C_NAME_SIZE);
++ ir->l.code_length = 8;
++ ir->l.add_to_buf = add_to_buf_knc1;
++ break;
++ case 0x21:
++ case 0x23:
++ pcf_probe(client, ir);
++ strlcpy(ir->c.name, "TV-Box IR", I2C_NAME_SIZE);
++ ir->l.code_length = 8;
++ ir->l.add_to_buf = add_to_buf_pcf8574;
++ break;
++ default:
++ /* shouldn't happen */
++ printk("lirc_i2c: Huh? unknown i2c address (0x%02x)?\n", addr);
++ kfree(ir);
++ return -EINVAL;
++ }
++ printk(KERN_INFO "lirc_i2c: chip 0x%x found @ 0x%02x (%s)\n",
++ adap->id, addr, ir->c.name);
++
++ retval = lirc_register_driver(&ir->l);
++
++ if (retval < 0) {
++ printk(KERN_ERR "lirc_i2c: failed to register driver!\n");
++ kfree(ir);
++ return retval;
++ }
++
++ ir->l.minor = retval;
++
++ return 0;
++}
++
++static int ir_remove(struct i2c_client *client)
++{
++ struct IR *ir = i2c_get_clientdata(client);
++
++ /* unregister device */
++ lirc_unregister_driver(ir->l.minor);
++
++ /* free memory */
++ kfree(ir);
++ return 0;
++}
++
++static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg)
++{
++ /* nothing */
++ return 0;
++}
++
++static int __init lirc_i2c_init(void)
++{
++ i2c_add_driver(&driver);
++ return 0;
++}
++
++static void __exit lirc_i2c_exit(void)
++{
++ i2c_del_driver(&driver);
++}
++
++MODULE_DESCRIPTION("Infrared receiver driver for Hauppauge and "
++ "Pixelview cards (i2c stack)");
++MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, "
++ "Ulrich Mueller, Stefan Jahn, Jerome Brock");
++MODULE_LICENSE("GPL");
++
++module_param(minor, int, S_IRUGO);
++MODULE_PARM_DESC(minor, "Preferred minor device number");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
++
++module_init(lirc_i2c_init);
++module_exit(lirc_i2c_exit);
+diff --git a/drivers/input/lirc/lirc_igorplugusb.c b/drivers/input/lirc/lirc_igorplugusb.c
+new file mode 100644
+index 0000000..d1c02c2
+--- /dev/null
++++ b/drivers/input/lirc/lirc_igorplugusb.c
+@@ -0,0 +1,555 @@
++/*
++ * lirc_igorplugusb - USB remote support for LIRC
++ *
++ * Supports the standard homebrew IgorPlugUSB receiver with Igor's firmware.
++ * See http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20(AVR)_eng.htm
++ *
++ * The device can only record bursts of up to 36 pulses/spaces.
++ * Works fine with RC5. Longer commands lead to device buffer overrun.
++ * (Maybe a better firmware or a microcontroller with more ram can help?)
++ *
++ * Version 0.1 [beta status]
++ *
++ * Copyright (C) 2004 Jan M. Hochstein
++ * <hochstein@algo.informatik.tu-darmstadt.de>
++ *
++ * This driver was derived from:
++ * Paul Miller <pmiller9@users.sourceforge.net>
++ * "lirc_atiusb" module
++ * Vladimir Dergachev <volodya@minspring.com>'s 2002
++ * "USB ATI Remote support" (input device)
++ * Adrian Dewhurst <sailor-lk@sailorfrag.net>'s 2002
++ * "USB StreamZap remote driver" (LIRC)
++ * Artur Lipowski <alipowski@kki.net.pl>'s 2002
++ * "lirc_dev" and "lirc_gpio" LIRC modules
++ */
++
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/kmod.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/usb.h>
++#include <linux/time.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++
++/* module identification */
++#define DRIVER_VERSION "0.1"
++#define DRIVER_AUTHOR \
++ "Jan M. Hochstein <hochstein@algo.informatik.tu-darmstadt.de>"
++#define DRIVER_DESC "USB remote driver for LIRC"
++#define DRIVER_NAME "lirc_igorplugusb"
++
++/* debugging support */
++#ifdef CONFIG_USB_DEBUG
++static int debug = 1;
++#else
++static int debug;
++#endif
++
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG fmt, ## args); \
++ } while (0)
++
++/* One mode2 pulse/space has 4 bytes. */
++#define CODE_LENGTH sizeof(int)
++
++/* Igor's firmware cannot record bursts longer than 36. */
++#define DEVICE_BUFLEN 36
++
++/*
++ * Header at the beginning of the device's buffer:
++ * unsigned char data_length
++ * unsigned char data_start (!=0 means ring-buffer overrun)
++ * unsigned char counter (incremented by each burst)
++ */
++#define DEVICE_HEADERLEN 3
++
++/* This is for the gap */
++#define ADDITIONAL_LIRC_BYTES 2
++
++/* times to poll per second */
++#define SAMPLE_RATE 100
++static int sample_rate = SAMPLE_RATE;
++
++
++/**** Igor's USB Request Codes */
++
++#define SET_INFRABUFFER_EMPTY 1
++/**
++ * Params: none
++ * Answer: empty
++ */
++
++#define GET_INFRACODE 2
++/**
++ * Params:
++ * wValue: offset to begin reading infra buffer
++ *
++ * Answer: infra data
++ */
++
++#define SET_DATAPORT_DIRECTION 3
++/**
++ * Params:
++ * wValue: (byte) 1 bit for each data port pin (0=in, 1=out)
++ *
++ * Answer: empty
++ */
++
++#define GET_DATAPORT_DIRECTION 4
++/**
++ * Params: none
++ *
++ * Answer: (byte) 1 bit for each data port pin (0=in, 1=out)
++ */
++
++#define SET_OUT_DATAPORT 5
++/**
++ * Params:
++ * wValue: byte to write to output data port
++ *
++ * Answer: empty
++ */
++
++#define GET_OUT_DATAPORT 6
++/**
++ * Params: none
++ *
++ * Answer: least significant 3 bits read from output data port
++ */
++
++#define GET_IN_DATAPORT 7
++/**
++ * Params: none
++ *
++ * Answer: least significant 3 bits read from input data port
++ */
++
++#define READ_EEPROM 8
++/**
++ * Params:
++ * wValue: offset to begin reading EEPROM
++ *
++ * Answer: EEPROM bytes
++ */
++
++#define WRITE_EEPROM 9
++/**
++ * Params:
++ * wValue: offset to EEPROM byte
++ * wIndex: byte to write
++ *
++ * Answer: empty
++ */
++
++#define SEND_RS232 10
++/**
++ * Params:
++ * wValue: byte to send
++ *
++ * Answer: empty
++ */
++
++#define RECV_RS232 11
++/**
++ * Params: none
++ *
++ * Answer: byte received
++ */
++
++#define SET_RS232_BAUD 12
++/**
++ * Params:
++ * wValue: byte to write to UART bit rate register (UBRR)
++ *
++ * Answer: empty
++ */
++
++#define GET_RS232_BAUD 13
++/**
++ * Params: none
++ *
++ * Answer: byte read from UART bit rate register (UBRR)
++ */
++
++
++/* data structure for each usb remote */
++struct igorplug {
++
++ /* usb */
++ struct usb_device *usbdev;
++ struct urb *urb_in;
++ int devnum;
++
++ unsigned char *buf_in;
++ unsigned int len_in;
++ int in_space;
++ struct timeval last_time;
++
++ dma_addr_t dma_in;
++
++ /* lirc */
++ struct lirc_driver *d;
++
++ /* handle sending (init strings) */
++ int send_flags;
++ wait_queue_head_t wait_out;
++};
++
++static int unregister_from_lirc(struct igorplug *ir)
++{
++ struct lirc_driver *d = ir->d;
++ int devnum;
++
++ if (!ir->d)
++ return -EINVAL;
++
++ devnum = ir->devnum;
++ dprintk(DRIVER_NAME "[%d]: unregister from lirc called\n", devnum);
++
++ lirc_unregister_driver(d->minor);
++
++ printk(DRIVER_NAME "[%d]: usb remote disconnected\n", devnum);
++
++ kfree(d);
++ ir->d = NULL;
++ kfree(ir);
++ return 0;
++}
++
++static int set_use_inc(void *data)
++{
++ struct igorplug *ir = data;
++
++ if (!ir) {
++ printk(DRIVER_NAME "[?]: set_use_inc called with no context\n");
++ return -EIO;
++ }
++ dprintk(DRIVER_NAME "[%d]: set use inc\n", ir->devnum);
++
++ if (!ir->usbdev)
++ return -ENODEV;
++
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++ struct igorplug *ir = data;
++
++ if (!ir) {
++ printk(DRIVER_NAME "[?]: set_use_dec called with no context\n");
++ return;
++ }
++ dprintk(DRIVER_NAME "[%d]: set use dec\n", ir->devnum);
++}
++
++
++/**
++ * Called in user context.
++ * return 0 if data was added to the buffer and
++ * -ENODATA if none was available. This should add some number of bits
++ * evenly divisible by code_length to the buffer
++ */
++static int usb_remote_poll(void *data, struct lirc_buffer *buf)
++{
++ int ret;
++ struct igorplug *ir = (struct igorplug *)data;
++
++ if (!ir->usbdev) /* Has the device been removed? */
++ return -ENODEV;
++
++ memset(ir->buf_in, 0, ir->len_in);
++
++ ret = usb_control_msg(
++ ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
++ GET_INFRACODE, USB_TYPE_VENDOR|USB_DIR_IN,
++ 0/* offset */, /*unused*/0,
++ ir->buf_in, ir->len_in,
++ /*timeout*/HZ * USB_CTRL_GET_TIMEOUT);
++ if (ret > 0) {
++ int i = DEVICE_HEADERLEN;
++ int code, timediff;
++ struct timeval now;
++
++ if (ret <= 1) /* ACK packet has 1 byte --> ignore */
++ return -ENODATA;
++
++ dprintk(DRIVER_NAME ": Got %d bytes. Header: %02x %02x %02x\n",
++ ret, ir->buf_in[0], ir->buf_in[1], ir->buf_in[2]);
++
++ if (ir->buf_in[2] != 0) {
++ printk(DRIVER_NAME "[%d]: Device buffer overrun.\n",
++ ir->devnum);
++ /* start at earliest byte */
++ i = DEVICE_HEADERLEN + ir->buf_in[2];
++ /* where are we now? space, gap or pulse? */
++ }
++
++ do_gettimeofday(&now);
++ timediff = now.tv_sec - ir->last_time.tv_sec;
++ if (timediff + 1 > PULSE_MASK / 1000000)
++ timediff = PULSE_MASK;
++ else {
++ timediff *= 1000000;
++ timediff += now.tv_usec - ir->last_time.tv_usec;
++ }
++ ir->last_time.tv_sec = now.tv_sec;
++ ir->last_time.tv_usec = now.tv_usec;
++
++ /* create leading gap */
++ code = timediff;
++ lirc_buffer_write(buf, (unsigned char *)&code);
++ ir->in_space = 1; /* next comes a pulse */
++
++ /* MODE2: pulse/space (PULSE_BIT) in 1us units */
++
++ while (i < ret) {
++ /* 1 Igor-tick = 85.333333 us */
++ code = (unsigned int)ir->buf_in[i] * 85
++ + (unsigned int)ir->buf_in[i] / 3;
++ if (ir->in_space)
++ code |= PULSE_BIT;
++ lirc_buffer_write(buf, (unsigned char *)&code);
++ /* 1 chunk = CODE_LENGTH bytes */
++ ir->in_space ^= 1;
++ ++i;
++ }
++
++ ret = usb_control_msg(
++ ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
++ SET_INFRABUFFER_EMPTY, USB_TYPE_VENDOR|USB_DIR_IN,
++ /*unused*/0, /*unused*/0,
++ /*dummy*/ir->buf_in, /*dummy*/ir->len_in,
++ /*timeout*/HZ * USB_CTRL_GET_TIMEOUT);
++ if (ret < 0)
++ printk(DRIVER_NAME "[%d]: SET_INFRABUFFER_EMPTY: "
++ "error %d\n", ir->devnum, ret);
++ return 0;
++ } else if (ret < 0)
++ printk(DRIVER_NAME "[%d]: GET_INFRACODE: error %d\n",
++ ir->devnum, ret);
++
++ return -ENODATA;
++}
++
++
++
++static int usb_remote_probe(struct usb_interface *intf,
++ const struct usb_device_id *id)
++{
++ struct usb_device *dev = NULL;
++ struct usb_host_interface *idesc = NULL;
++ struct usb_host_endpoint *ep_ctl2;
++ struct igorplug *ir = NULL;
++ struct lirc_driver *driver = NULL;
++ int devnum, pipe, maxp;
++ int minor = 0;
++ char buf[63], name[128] = "";
++ int mem_failure = 0;
++ int ret;
++
++ dprintk(DRIVER_NAME ": usb probe called.\n");
++
++ dev = interface_to_usbdev(intf);
++
++ idesc = intf->cur_altsetting;
++
++ if (idesc->desc.bNumEndpoints != 1)
++ return -ENODEV;
++ ep_ctl2 = idesc->endpoint;
++ if (((ep_ctl2->desc.bEndpointAddress & USB_ENDPOINT_DIR_MASK)
++ != USB_DIR_IN)
++ || (ep_ctl2->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ != USB_ENDPOINT_XFER_CONTROL)
++ return -ENODEV;
++ pipe = usb_rcvctrlpipe(dev, ep_ctl2->desc.bEndpointAddress);
++ devnum = dev->devnum;
++ maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
++
++ dprintk(DRIVER_NAME "[%d]: bytes_in_key=%lu maxp=%d\n",
++ devnum, CODE_LENGTH, maxp);
++
++
++ mem_failure = 0;
++ ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL);
++ if (!ir) {
++ mem_failure = 1;
++ goto mem_failure_switch;
++ }
++ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++ if (!driver) {
++ mem_failure = 2;
++ goto mem_failure_switch;
++ }
++
++ ir->buf_in = usb_buffer_alloc(dev,
++ DEVICE_BUFLEN+DEVICE_HEADERLEN,
++ GFP_ATOMIC, &ir->dma_in);
++ if (!ir->buf_in) {
++ mem_failure = 3;
++ goto mem_failure_switch;
++ }
++
++ strcpy(driver->name, DRIVER_NAME " ");
++ driver->minor = -1;
++ driver->code_length = CODE_LENGTH * 8; /* in bits */
++ driver->features = LIRC_CAN_REC_MODE2;
++ driver->data = ir;
++ driver->chunk_size = CODE_LENGTH;
++ driver->buffer_size = DEVICE_BUFLEN + ADDITIONAL_LIRC_BYTES;
++ driver->set_use_inc = &set_use_inc;
++ driver->set_use_dec = &set_use_dec;
++ driver->sample_rate = sample_rate; /* per second */
++ driver->add_to_buf = &usb_remote_poll;
++ driver->dev = &intf->dev;
++ driver->owner = THIS_MODULE;
++
++ init_waitqueue_head(&ir->wait_out);
++
++ minor = lirc_register_driver(driver);
++ if (minor < 0)
++ mem_failure = 9;
++
++mem_failure_switch:
++
++ switch (mem_failure) {
++ case 9:
++ usb_buffer_free(dev, DEVICE_BUFLEN+DEVICE_HEADERLEN,
++ ir->buf_in, ir->dma_in);
++ case 3:
++ kfree(driver);
++ case 2:
++ kfree(ir);
++ case 1:
++ printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n",
++ devnum, mem_failure);
++ return -ENOMEM;
++ }
++
++ driver->minor = minor;
++ ir->d = driver;
++ ir->devnum = devnum;
++ ir->usbdev = dev;
++ ir->len_in = DEVICE_BUFLEN+DEVICE_HEADERLEN;
++ ir->in_space = 1; /* First mode2 event is a space. */
++ do_gettimeofday(&ir->last_time);
++
++ if (dev->descriptor.iManufacturer
++ && usb_string(dev, dev->descriptor.iManufacturer,
++ buf, sizeof(buf)) > 0)
++ strlcpy(name, buf, sizeof(name));
++ if (dev->descriptor.iProduct
++ && usb_string(dev, dev->descriptor.iProduct, buf, sizeof(buf)) > 0)
++ snprintf(name + strlen(name), sizeof(name) - strlen(name),
++ " %s", buf);
++ printk(DRIVER_NAME "[%d]: %s on usb%d:%d\n", devnum, name,
++ dev->bus->busnum, devnum);
++
++ /* clear device buffer */
++ ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
++ SET_INFRABUFFER_EMPTY, USB_TYPE_VENDOR|USB_DIR_IN,
++ /*unused*/0, /*unused*/0,
++ /*dummy*/ir->buf_in, /*dummy*/ir->len_in,
++ /*timeout*/HZ * USB_CTRL_GET_TIMEOUT);
++ if (ret < 0)
++ printk(DRIVER_NAME "[%d]: SET_INFRABUFFER_EMPTY: error %d\n",
++ devnum, ret);
++
++ usb_set_intfdata(intf, ir);
++ return 0;
++}
++
++
++static void usb_remote_disconnect(struct usb_interface *intf)
++{
++ struct usb_device *dev = interface_to_usbdev(intf);
++ struct igorplug *ir = usb_get_intfdata(intf);
++ usb_set_intfdata(intf, NULL);
++
++ if (!ir || !ir->d)
++ return;
++
++ ir->usbdev = NULL;
++ wake_up_all(&ir->wait_out);
++
++ usb_buffer_free(dev, ir->len_in, ir->buf_in, ir->dma_in);
++
++ unregister_from_lirc(ir);
++}
++
++static struct usb_device_id usb_remote_id_table[] = {
++ /* Igor Plug USB (Atmel's Manufact. ID) */
++ { USB_DEVICE(0x03eb, 0x0002) },
++
++ /* Terminating entry */
++ { }
++};
++
++static struct usb_driver usb_remote_driver = {
++ .name = DRIVER_NAME,
++ .probe = usb_remote_probe,
++ .disconnect = usb_remote_disconnect,
++ .id_table = usb_remote_id_table
++};
++
++static int __init usb_remote_init(void)
++{
++ int i;
++
++ printk(KERN_INFO "\n"
++ DRIVER_NAME ": " DRIVER_DESC " v" DRIVER_VERSION "\n");
++ printk(DRIVER_NAME ": " DRIVER_AUTHOR "\n");
++ dprintk(DRIVER_NAME ": debug mode enabled\n");
++
++ i = usb_register(&usb_remote_driver);
++ if (i < 0) {
++ printk(DRIVER_NAME ": usb register failed, result = %d\n", i);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++static void __exit usb_remote_exit(void)
++{
++ usb_deregister(&usb_remote_driver);
++}
++
++module_init(usb_remote_init);
++module_exit(usb_remote_exit);
++
++#include <linux/vermagic.h>
++MODULE_INFO(vermagic, VERMAGIC_STRING);
++
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_LICENSE("GPL");
++MODULE_DEVICE_TABLE(usb, usb_remote_id_table);
++
++module_param(sample_rate, int, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(sample_rate, "Sampling rate in Hz (default: 100)");
++
+diff --git a/drivers/input/lirc/lirc_imon.c b/drivers/input/lirc/lirc_imon.c
+new file mode 100644
+index 0000000..af5eec8
+--- /dev/null
++++ b/drivers/input/lirc/lirc_imon.c
+@@ -0,0 +1,1053 @@
++/*
++ * lirc_imon.c: LIRC/VFD/LCD driver for SoundGraph iMON IR/VFD/LCD
++ * including the iMON PAD model
++ *
++ * Copyright(C) 2004 Venky Raju(dev@venky.ws)
++ * Copyright(C) 2009 Jarod Wilson <jarod@wilsonet.com>
++ *
++ * lirc_imon is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <linux/usb.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++
++#define MOD_AUTHOR "Venky Raju <dev@venky.ws>"
++#define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display"
++#define MOD_NAME "lirc_imon"
++#define MOD_VERSION "0.8"
++
++#define DISPLAY_MINOR_BASE 144
++#define DEVICE_NAME "lcd%d"
++
++#define BUF_CHUNK_SIZE 4
++#define BUF_SIZE 128
++
++#define BIT_DURATION 250 /* each bit received is 250us */
++
++/*** P R O T O T Y P E S ***/
++
++/* USB Callback prototypes */
++static int imon_probe(struct usb_interface *interface,
++ const struct usb_device_id *id);
++static void imon_disconnect(struct usb_interface *interface);
++static void usb_rx_callback(struct urb *urb);
++static void usb_tx_callback(struct urb *urb);
++
++/* suspend/resume support */
++static int imon_resume(struct usb_interface *intf);
++static int imon_suspend(struct usb_interface *intf, pm_message_t message);
++
++/* Display file_operations function prototypes */
++static int display_open(struct inode *inode, struct file *file);
++static int display_close(struct inode *inode, struct file *file);
++
++/* VFD write operation */
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos);
++
++/* LIRC driver function prototypes */
++static int ir_open(void *data);
++static void ir_close(void *data);
++
++/* Driver init/exit prototypes */
++static int __init imon_init(void);
++static void __exit imon_exit(void);
++
++/*** G L O B A L S ***/
++
++struct imon_context {
++ struct usb_device *usbdev;
++ /* Newer devices have two interfaces */
++ int display; /* not all controllers do */
++ int display_isopen; /* display port has been opened */
++ int ir_isopen; /* IR port open */
++ int dev_present; /* USB device presence */
++ struct mutex ctx_lock; /* to lock this object */
++ wait_queue_head_t remove_ok; /* For unexpected USB disconnects */
++
++ int vfd_proto_6p; /* some VFD require a 6th packet */
++
++ struct lirc_driver *driver;
++ struct usb_endpoint_descriptor *rx_endpoint;
++ struct usb_endpoint_descriptor *tx_endpoint;
++ struct urb *rx_urb;
++ struct urb *tx_urb;
++ unsigned char usb_rx_buf[8];
++ unsigned char usb_tx_buf[8];
++
++ struct rx_data {
++ int count; /* length of 0 or 1 sequence */
++ int prev_bit; /* logic level of sequence */
++ int initial_space; /* initial space flag */
++ } rx;
++
++ struct tx_t {
++ unsigned char data_buf[35]; /* user data buffer */
++ struct completion finished; /* wait for write to finish */
++ atomic_t busy; /* write in progress */
++ int status; /* status of tx completion */
++ } tx;
++};
++
++static struct file_operations display_fops = {
++ .owner = THIS_MODULE,
++ .open = &display_open,
++ .write = &vfd_write,
++ .release = &display_close
++};
++
++/*
++ * USB Device ID for iMON USB Control Boards
++ *
++ * The Windows drivers contain 6 different inf files, more or less one for
++ * each new device until the 0x0034-0x0046 devices, which all use the same
++ * driver. Some of the devices in the 34-46 range haven't been definitively
++ * identified yet. Early devices have either a TriGem Computer, Inc. or a
++ * Samsung vendor ID (0x0aa8 and 0x04e8 respectively), while all later
++ * devices use the SoundGraph vendor ID (0x15c2).
++ */
++static struct usb_device_id imon_usb_id_table[] = {
++ /* TriGem iMON (IR only) -- TG_iMON.inf */
++ { USB_DEVICE(0x0aa8, 0x8001) },
++
++ /* SoundGraph iMON (IR only) -- sg_imon.inf */
++ { USB_DEVICE(0x04e8, 0xff30) },
++
++ /* SoundGraph iMON VFD (IR & VFD) -- iMON_VFD.inf */
++ { USB_DEVICE(0x0aa8, 0xffda) },
++
++ /* SoundGraph iMON SS (IR & VFD) -- iMON_SS.inf */
++ { USB_DEVICE(0x15c2, 0xffda) },
++
++ {}
++};
++
++/* Some iMON VFD models requires a 6th packet for VFD writes */
++static struct usb_device_id vfd_proto_6p_list[] = {
++ { USB_DEVICE(0x15c2, 0xffda) },
++ {}
++};
++
++/* Some iMON devices have no lcd/vfd, don't set one up */
++static struct usb_device_id ir_only_list[] = {
++ { USB_DEVICE(0x0aa8, 0x8001) },
++ { USB_DEVICE(0x04e8, 0xff30) },
++ {}
++};
++
++/* USB Device data */
++static struct usb_driver imon_driver = {
++ .name = MOD_NAME,
++ .probe = imon_probe,
++ .disconnect = imon_disconnect,
++ .suspend = imon_suspend,
++ .resume = imon_resume,
++ .id_table = imon_usb_id_table,
++};
++
++static struct usb_class_driver imon_class = {
++ .name = DEVICE_NAME,
++ .fops = &display_fops,
++ .minor_base = DISPLAY_MINOR_BASE,
++};
++
++/* to prevent races between open() and disconnect(), probing, etc */
++static DEFINE_MUTEX(driver_lock);
++
++static int debug;
++
++/*** M O D U L E C O D E ***/
++
++MODULE_AUTHOR(MOD_AUTHOR);
++MODULE_DESCRIPTION(MOD_DESC);
++MODULE_VERSION(MOD_VERSION);
++MODULE_LICENSE("GPL");
++MODULE_DEVICE_TABLE(usb, imon_usb_id_table);
++module_param(debug, int, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes(default: no)");
++
++static void free_imon_context(struct imon_context *context)
++{
++ struct device *dev = context->driver->dev;
++ usb_free_urb(context->tx_urb);
++ usb_free_urb(context->rx_urb);
++ lirc_buffer_free(context->driver->rbuf);
++ kfree(context->driver->rbuf);
++ kfree(context->driver);
++ kfree(context);
++
++ dev_dbg(dev, "%s: iMON context freed\n", __func__);
++}
++
++static void deregister_from_lirc(struct imon_context *context)
++{
++ int retval;
++ int minor = context->driver->minor;
++
++ retval = lirc_unregister_driver(minor);
++ if (retval)
++ err("%s: unable to deregister from lirc(%d)",
++ __func__, retval);
++ else
++ printk(KERN_INFO MOD_NAME ": Deregistered iMON driver "
++ "(minor:%d)\n", minor);
++
++}
++
++/**
++ * Called when the Display device (e.g. /dev/lcd0)
++ * is opened by the application.
++ */
++static int display_open(struct inode *inode, struct file *file)
++{
++ struct usb_interface *interface;
++ struct imon_context *context = NULL;
++ int subminor;
++ int retval = 0;
++
++ /* prevent races with disconnect */
++ mutex_lock(&driver_lock);
++
++ subminor = iminor(inode);
++ interface = usb_find_interface(&imon_driver, subminor);
++ if (!interface) {
++ err("%s: could not find interface for minor %d",
++ __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++ context = usb_get_intfdata(interface);
++
++ if (!context) {
++ err("%s: no context found for minor %d",
++ __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (!context->display) {
++ err("%s: display not supported by device", __func__);
++ retval = -ENODEV;
++ } else if (context->display_isopen) {
++ err("%s: display port is already open", __func__);
++ retval = -EBUSY;
++ } else {
++ context->display_isopen = 1;
++ file->private_data = context;
++ dev_info(context->driver->dev, "display port opened\n");
++ }
++
++ mutex_unlock(&context->ctx_lock);
++
++exit:
++ mutex_unlock(&driver_lock);
++ return retval;
++}
++
++/**
++ * Called when the display device (e.g. /dev/lcd0)
++ * is closed by the application.
++ */
++static int display_close(struct inode *inode, struct file *file)
++{
++ struct imon_context *context = NULL;
++ int retval = 0;
++
++ context = (struct imon_context *)file->private_data;
++
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (!context->display) {
++ err("%s: display not supported by device", __func__);
++ retval = -ENODEV;
++ } else if (!context->display_isopen) {
++ err("%s: display is not open", __func__);
++ retval = -EIO;
++ } else {
++ context->display_isopen = 0;
++ dev_info(context->driver->dev, "display port closed\n");
++ if (!context->dev_present && !context->ir_isopen) {
++ /*
++ * Device disconnected before close and IR port is not
++ * open. If IR port is open, context will be deleted by
++ * ir_close.
++ */
++ mutex_unlock(&context->ctx_lock);
++ free_imon_context(context);
++ return retval;
++ }
++ }
++
++ mutex_unlock(&context->ctx_lock);
++ return retval;
++}
++
++/**
++ * Sends a packet to the device -- this function must be called
++ * with context->ctx_lock held.
++ */
++static int send_packet(struct imon_context *context)
++{
++ unsigned int pipe;
++ int interval = 0;
++ int retval = 0;
++ struct usb_ctrlrequest *control_req = NULL;
++
++ /* Check if we need to use control or interrupt urb */
++ pipe = usb_sndintpipe(context->usbdev,
++ context->tx_endpoint->bEndpointAddress);
++ interval = context->tx_endpoint->bInterval;
++
++ usb_fill_int_urb(context->tx_urb, context->usbdev, pipe,
++ context->usb_tx_buf,
++ sizeof(context->usb_tx_buf),
++ usb_tx_callback, context, interval);
++
++ context->tx_urb->actual_length = 0;
++
++ init_completion(&context->tx.finished);
++ atomic_set(&(context->tx.busy), 1);
++
++ retval = usb_submit_urb(context->tx_urb, GFP_KERNEL);
++ if (retval) {
++ atomic_set(&(context->tx.busy), 0);
++ err("%s: error submitting urb(%d)", __func__, retval);
++ } else {
++ /* Wait for transmission to complete (or abort) */
++ mutex_unlock(&context->ctx_lock);
++ retval = wait_for_completion_interruptible(
++ &context->tx.finished);
++ if (retval)
++ err("%s: task interrupted", __func__);
++ mutex_lock(&context->ctx_lock);
++
++ retval = context->tx.status;
++ if (retval)
++ err("%s: packet tx failed (%d)", __func__, retval);
++ }
++
++ kfree(control_req);
++
++ return retval;
++}
++
++/**
++ * Writes data to the VFD. The iMON VFD is 2x16 characters
++ * and requires data in 5 consecutive USB interrupt packets,
++ * each packet but the last carrying 7 bytes.
++ *
++ * I don't know if the VFD board supports features such as
++ * scrolling, clearing rows, blanking, etc. so at
++ * the caller must provide a full screen of data. If fewer
++ * than 32 bytes are provided spaces will be appended to
++ * generate a full screen.
++ */
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos)
++{
++ int i;
++ int offset;
++ int seq;
++ int retval = 0;
++ struct imon_context *context;
++ const unsigned char vfd_packet6[] = {
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF };
++
++ context = (struct imon_context *)file->private_data;
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (!context->dev_present) {
++ err("%s: no iMON device present", __func__);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ if (n_bytes <= 0 || n_bytes > 32) {
++ err("%s: invalid payload size", __func__);
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ if (copy_from_user(context->tx.data_buf, buf, n_bytes)) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ /* Pad with spaces */
++ for (i = n_bytes; i < 32; ++i)
++ context->tx.data_buf[i] = ' ';
++
++ for (i = 32; i < 35; ++i)
++ context->tx.data_buf[i] = 0xFF;
++
++ offset = 0;
++ seq = 0;
++
++ do {
++ memcpy(context->usb_tx_buf, context->tx.data_buf + offset, 7);
++ context->usb_tx_buf[7] = (unsigned char) seq;
++
++ retval = send_packet(context);
++ if (retval) {
++ err("%s: send packet failed for packet #%d",
++ __func__, seq/2);
++ goto exit;
++ } else {
++ seq += 2;
++ offset += 7;
++ }
++
++ } while (offset < 35);
++
++ if (context->vfd_proto_6p) {
++ /* Send packet #6 */
++ memcpy(context->usb_tx_buf, &vfd_packet6, sizeof(vfd_packet6));
++ context->usb_tx_buf[7] = (unsigned char) seq;
++ retval = send_packet(context);
++ if (retval)
++ err("%s: send packet failed for packet #%d",
++ __func__, seq/2);
++ }
++
++exit:
++ mutex_unlock(&context->ctx_lock);
++
++ return (!retval) ? n_bytes : retval;
++}
++
++/**
++ * Callback function for USB core API: transmit data
++ */
++static void usb_tx_callback(struct urb *urb)
++{
++ struct imon_context *context;
++
++ if (!urb)
++ return;
++ context = (struct imon_context *)urb->context;
++ if (!context)
++ return;
++
++ context->tx.status = urb->status;
++
++ /* notify waiters that write has finished */
++ atomic_set(&context->tx.busy, 0);
++ complete(&context->tx.finished);
++
++ return;
++}
++
++/**
++ * Called by lirc_dev when the application opens /dev/lirc
++ */
++static int ir_open(void *data)
++{
++ int retval = 0;
++ struct imon_context *context;
++
++ /* prevent races with disconnect */
++ mutex_lock(&driver_lock);
++
++ context = (struct imon_context *)data;
++
++ /* initial IR protocol decode variables */
++ context->rx.count = 0;
++ context->rx.initial_space = 1;
++ context->rx.prev_bit = 0;
++
++ context->ir_isopen = 1;
++ dev_info(context->driver->dev, "IR port opened\n");
++
++ mutex_unlock(&driver_lock);
++ return retval;
++}
++
++/**
++ * Called by lirc_dev when the application closes /dev/lirc
++ */
++static void ir_close(void *data)
++{
++ struct imon_context *context;
++
++ context = (struct imon_context *)data;
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ context->ir_isopen = 0;
++ dev_info(context->driver->dev, "IR port closed\n");
++
++ if (!context->dev_present) {
++ /*
++ * Device disconnected while IR port was still open. Driver
++ * was not deregistered at disconnect time, so do it now.
++ */
++ deregister_from_lirc(context);
++
++ if (!context->display_isopen) {
++ mutex_unlock(&context->ctx_lock);
++ free_imon_context(context);
++ return;
++ }
++ /*
++ * If display port is open, context will be deleted by
++ * display_close
++ */
++ }
++
++ mutex_unlock(&context->ctx_lock);
++ return;
++}
++
++/**
++ * Convert bit count to time duration (in us) and submit
++ * the value to lirc_dev.
++ */
++static void submit_data(struct imon_context *context)
++{
++ unsigned char buf[4];
++ int value = context->rx.count;
++ int i;
++
++ dev_dbg(context->driver->dev, "submitting data to LIRC\n");
++
++ value *= BIT_DURATION;
++ value &= PULSE_MASK;
++ if (context->rx.prev_bit)
++ value |= PULSE_BIT;
++
++ for (i = 0; i < 4; ++i)
++ buf[i] = value>>(i*8);
++
++ lirc_buffer_write(context->driver->rbuf, buf);
++ wake_up(&context->driver->rbuf->wait_poll);
++ return;
++}
++
++static inline int tv2int(const struct timeval *a, const struct timeval *b)
++{
++ int usecs = 0;
++ int sec = 0;
++
++ if (b->tv_usec > a->tv_usec) {
++ usecs = 1000000;
++ sec--;
++ }
++
++ usecs += a->tv_usec - b->tv_usec;
++
++ sec += a->tv_sec - b->tv_sec;
++ sec *= 1000;
++ usecs /= 1000;
++ sec += usecs;
++
++ if (sec < 0)
++ sec = 1000;
++
++ return sec;
++}
++
++/**
++ * Process the incoming packet
++ */
++static void imon_incoming_packet(struct imon_context *context,
++ struct urb *urb, int intf)
++{
++ int len = urb->actual_length;
++ unsigned char *buf = urb->transfer_buffer;
++ struct device *dev = context->driver->dev;
++ int octet, bit;
++ unsigned char mask;
++ int i, chunk_num;
++
++ /*
++ * just bail out if no listening IR client
++ */
++ if (!context->ir_isopen)
++ return;
++
++ if (len != 8) {
++ dev_warn(dev, "imon %s: invalid incoming packet "
++ "size (len = %d, intf%d)\n", __func__, len, intf);
++ return;
++ }
++
++ if (debug) {
++ printk(KERN_INFO "raw packet: ");
++ for (i = 0; i < len; ++i)
++ printk("%02x ", buf[i]);
++ printk("\n");
++ }
++
++ /*
++ * Translate received data to pulse and space lengths.
++ * Received data is active low, i.e. pulses are 0 and
++ * spaces are 1.
++ *
++ * My original algorithm was essentially similar to
++ * Changwoo Ryu's with the exception that he switched
++ * the incoming bits to active high and also fed an
++ * initial space to LIRC at the start of a new sequence
++ * if the previous bit was a pulse.
++ *
++ * I've decided to adopt his algorithm.
++ */
++
++ if (buf[7] == 1 && context->rx.initial_space) {
++ /* LIRC requires a leading space */
++ context->rx.prev_bit = 0;
++ context->rx.count = 4;
++ submit_data(context);
++ context->rx.count = 0;
++ }
++
++ for (octet = 0; octet < 5; ++octet) {
++ mask = 0x80;
++ for (bit = 0; bit < 8; ++bit) {
++ int curr_bit = !(buf[octet] & mask);
++ if (curr_bit != context->rx.prev_bit) {
++ if (context->rx.count) {
++ submit_data(context);
++ context->rx.count = 0;
++ }
++ context->rx.prev_bit = curr_bit;
++ }
++ ++context->rx.count;
++ mask >>= 1;
++ }
++ }
++
++ if (chunk_num == 10) {
++ if (context->rx.count) {
++ submit_data(context);
++ context->rx.count = 0;
++ }
++ context->rx.initial_space = context->rx.prev_bit;
++ }
++}
++
++/**
++ * Callback function for USB core API: receive data
++ */
++static void usb_rx_callback(struct urb *urb)
++{
++ struct imon_context *context;
++ unsigned char *buf;
++ int len;
++ int intfnum = 0;
++
++ if (!urb)
++ return;
++
++ context = (struct imon_context *)urb->context;
++ if (!context)
++ return;
++
++ buf = urb->transfer_buffer;
++ len = urb->actual_length;
++
++ switch (urb->status) {
++ case -ENOENT: /* usbcore unlink successful! */
++ return;
++
++ case 0:
++ imon_incoming_packet(context, urb, intfnum);
++ break;
++
++ default:
++ dev_warn(context->driver->dev, "imon %s: status(%d): ignored\n",
++ __func__, urb->status);
++ break;
++ }
++
++ usb_submit_urb(context->rx_urb, GFP_ATOMIC);
++
++ return;
++}
++
++/**
++ * Callback function for USB core API: Probe
++ */
++static int imon_probe(struct usb_interface *interface,
++ const struct usb_device_id *id)
++{
++ struct usb_device *usbdev = NULL;
++ struct usb_host_interface *iface_desc = NULL;
++ struct usb_endpoint_descriptor *rx_endpoint = NULL;
++ struct usb_endpoint_descriptor *tx_endpoint = NULL;
++ struct urb *rx_urb = NULL;
++ struct urb *tx_urb = NULL;
++ struct lirc_driver *driver = NULL;
++ struct lirc_buffer *rbuf = NULL;
++ struct device *dev = &interface->dev;
++ int ifnum;
++ int lirc_minor = 0;
++ int num_endpts;
++ int retval = 0;
++ int display_ep_found = 0;
++ int ir_ep_found = 0;
++ int alloc_status = 0;
++ int vfd_proto_6p = 0;
++ int code_length;
++ struct imon_context *context = NULL;
++ int i;
++ u16 vendor, product;
++
++ context = kzalloc(sizeof(struct imon_context), GFP_KERNEL);
++ if (!context) {
++ err("%s: kzalloc failed for context", __func__);
++ alloc_status = 1;
++ goto alloc_status_switch;
++ }
++
++ /*
++ * Try to auto-detect the type of display if the user hasn't set
++ * it by hand via the display_type modparam. Default is VFD.
++ */
++ if (usb_match_id(interface, ir_only_list))
++ context->display = 0;
++ else
++ context->display = 1;
++
++ code_length = BUF_CHUNK_SIZE * 8;
++
++ usbdev = usb_get_dev(interface_to_usbdev(interface));
++ iface_desc = interface->cur_altsetting;
++ num_endpts = iface_desc->desc.bNumEndpoints;
++ ifnum = iface_desc->desc.bInterfaceNumber;
++ vendor = le16_to_cpu(usbdev->descriptor.idVendor);
++ product = le16_to_cpu(usbdev->descriptor.idProduct);
++
++ dev_dbg(dev, "%s: found iMON device (%04x:%04x, intf%d)\n",
++ __func__, vendor, product, ifnum);
++
++ /* prevent races probing devices w/multiple interfaces */
++ mutex_lock(&driver_lock);
++
++ /*
++ * Scan the endpoint list and set:
++ * first input endpoint = IR endpoint
++ * first output endpoint = display endpoint
++ */
++ for (i = 0; i < num_endpts && !(ir_ep_found && display_ep_found); ++i) {
++ struct usb_endpoint_descriptor *ep;
++ int ep_dir;
++ int ep_type;
++ ep = &iface_desc->endpoint[i].desc;
++ ep_dir = ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK;
++ ep_type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++
++ if (!ir_ep_found &&
++ ep_dir == USB_DIR_IN &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++
++ rx_endpoint = ep;
++ ir_ep_found = 1;
++ dev_dbg(dev, "%s: found IR endpoint\n", __func__);
++
++ } else if (!display_ep_found && ep_dir == USB_DIR_OUT &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++ tx_endpoint = ep;
++ display_ep_found = 1;
++ dev_dbg(dev, "%s: found display endpoint\n", __func__);
++ }
++ }
++
++ /*
++ * Some iMON receivers have no display. Unfortunately, it seems
++ * that SoundGraph recycles device IDs between devices both with
++ * and without... :\
++ */
++ if (context->display == 0) {
++ display_ep_found = 0;
++ dev_dbg(dev, "%s: device has no display\n", __func__);
++ }
++
++ /* Input endpoint is mandatory */
++ if (!ir_ep_found) {
++ err("%s: no valid input (IR) endpoint found.", __func__);
++ retval = -ENODEV;
++ alloc_status = 2;
++ goto alloc_status_switch;
++ }
++
++ /* Determine if display requires 6 packets */
++ if (display_ep_found) {
++ if (usb_match_id(interface, vfd_proto_6p_list))
++ vfd_proto_6p = 1;
++
++ dev_dbg(dev, "%s: vfd_proto_6p: %d\n",
++ __func__, vfd_proto_6p);
++ }
++
++ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++ if (!driver) {
++ err("%s: kzalloc failed for lirc_driver", __func__);
++ alloc_status = 2;
++ goto alloc_status_switch;
++ }
++ rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!rbuf) {
++ err("%s: kmalloc failed for lirc_buffer", __func__);
++ alloc_status = 3;
++ goto alloc_status_switch;
++ }
++ if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) {
++ err("%s: lirc_buffer_init failed", __func__);
++ alloc_status = 4;
++ goto alloc_status_switch;
++ }
++ rx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!rx_urb) {
++ err("%s: usb_alloc_urb failed for IR urb", __func__);
++ alloc_status = 5;
++ goto alloc_status_switch;
++ }
++ tx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!tx_urb) {
++ err("%s: usb_alloc_urb failed for display urb",
++ __func__);
++ alloc_status = 6;
++ goto alloc_status_switch;
++ }
++
++ mutex_init(&context->ctx_lock);
++ context->vfd_proto_6p = vfd_proto_6p;
++
++ strcpy(driver->name, MOD_NAME);
++ driver->minor = -1;
++ driver->code_length = sizeof(int) * 8;
++ driver->sample_rate = 0;
++ driver->features = LIRC_CAN_REC_MODE2;
++ driver->data = context;
++ driver->rbuf = rbuf;
++ driver->set_use_inc = ir_open;
++ driver->set_use_dec = ir_close;
++ driver->dev = &interface->dev;
++ driver->owner = THIS_MODULE;
++
++ mutex_lock(&context->ctx_lock);
++
++ context->driver = driver;
++ /* start out in keyboard mode */
++
++ lirc_minor = lirc_register_driver(driver);
++ if (lirc_minor < 0) {
++ err("%s: lirc_register_driver failed", __func__);
++ alloc_status = 7;
++ goto alloc_status_switch;
++ } else
++ dev_info(dev, "Registered iMON driver "
++ "(lirc minor: %d)\n", lirc_minor);
++
++ /* Needed while unregistering! */
++ driver->minor = lirc_minor;
++
++ context->usbdev = usbdev;
++ context->dev_present = 1;
++ context->rx_endpoint = rx_endpoint;
++ context->rx_urb = rx_urb;
++
++ /*
++ * tx is used to send characters to lcd/vfd, associate RF
++ * remotes, set IR protocol, and maybe more...
++ */
++ context->tx_endpoint = tx_endpoint;
++ context->tx_urb = tx_urb;
++
++ if (display_ep_found)
++ context->display = 1;
++
++ usb_fill_int_urb(context->rx_urb, context->usbdev,
++ usb_rcvintpipe(context->usbdev,
++ context->rx_endpoint->bEndpointAddress),
++ context->usb_rx_buf, sizeof(context->usb_rx_buf),
++ usb_rx_callback, context,
++ context->rx_endpoint->bInterval);
++
++ retval = usb_submit_urb(context->rx_urb, GFP_KERNEL);
++
++ if (retval) {
++ err("%s: usb_submit_urb failed for intf0 (%d)",
++ __func__, retval);
++ mutex_unlock(&context->ctx_lock);
++ goto exit;
++ }
++
++ usb_set_intfdata(interface, context);
++
++ if (context->display && ifnum == 0) {
++ dev_dbg(dev, "%s: Registering iMON display with sysfs\n",
++ __func__);
++
++ if (usb_register_dev(interface, &imon_class)) {
++ /* Not a fatal error, so ignore */
++ dev_info(dev, "%s: could not get a minor number for "
++ "display\n", __func__);
++ }
++ }
++
++ dev_info(dev, "iMON device (%04x:%04x, intf%d) on "
++ "usb<%d:%d> initialized\n", vendor, product, ifnum,
++ usbdev->bus->busnum, usbdev->devnum);
++
++alloc_status_switch:
++ mutex_unlock(&context->ctx_lock);
++
++ switch (alloc_status) {
++ case 7:
++ usb_free_urb(tx_urb);
++ case 6:
++ usb_free_urb(rx_urb);
++ case 5:
++ if (rbuf)
++ lirc_buffer_free(rbuf);
++ case 4:
++ kfree(rbuf);
++ case 3:
++ kfree(driver);
++ case 2:
++ kfree(context);
++ context = NULL;
++ case 1:
++ if (retval != -ENODEV)
++ retval = -ENOMEM;
++ break;
++ case 0:
++ retval = 0;
++ }
++
++exit:
++ mutex_unlock(&driver_lock);
++
++ return retval;
++}
++
++/**
++ * Callback function for USB core API: disconnect
++ */
++static void imon_disconnect(struct usb_interface *interface)
++{
++ struct imon_context *context;
++ int ifnum;
++
++ /* prevent races with ir_open()/display_open() */
++ mutex_lock(&driver_lock);
++
++ context = usb_get_intfdata(interface);
++ ifnum = interface->cur_altsetting->desc.bInterfaceNumber;
++
++ mutex_lock(&context->ctx_lock);
++
++ usb_set_intfdata(interface, NULL);
++
++ /* Abort ongoing write */
++ if (atomic_read(&context->tx.busy)) {
++ usb_kill_urb(context->tx_urb);
++ complete_all(&context->tx.finished);
++ }
++
++ context->dev_present = 0;
++ usb_kill_urb(context->rx_urb);
++ if (context->display)
++ usb_deregister_dev(interface, &imon_class);
++
++ if (!context->ir_isopen && !context->dev_present) {
++ deregister_from_lirc(context);
++ mutex_unlock(&context->ctx_lock);
++ if (!context->display_isopen)
++ free_imon_context(context);
++ } else
++ mutex_unlock(&context->ctx_lock);
++
++ mutex_unlock(&driver_lock);
++
++ printk(KERN_INFO "%s: iMON device (intf%d) disconnected\n",
++ __func__, ifnum);
++}
++
++static int imon_suspend(struct usb_interface *intf, pm_message_t message)
++{
++ struct imon_context *context = usb_get_intfdata(intf);
++
++ usb_kill_urb(context->rx_urb);
++
++ return 0;
++}
++
++static int imon_resume(struct usb_interface *intf)
++{
++ int rc = 0;
++ struct imon_context *context = usb_get_intfdata(intf);
++
++ usb_fill_int_urb(context->rx_urb, context->usbdev,
++ usb_rcvintpipe(context->usbdev,
++ context->rx_endpoint->bEndpointAddress),
++ context->usb_rx_buf, sizeof(context->usb_rx_buf),
++ usb_rx_callback, context,
++ context->rx_endpoint->bInterval);
++
++ rc = usb_submit_urb(context->rx_urb, GFP_ATOMIC);
++
++ return rc;
++}
++
++static int __init imon_init(void)
++{
++ int rc;
++
++ printk(KERN_INFO MOD_NAME ": " MOD_DESC ", v" MOD_VERSION "\n");
++
++ rc = usb_register(&imon_driver);
++ if (rc) {
++ err("%s: usb register failed(%d)", __func__, rc);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++static void __exit imon_exit(void)
++{
++ usb_deregister(&imon_driver);
++ printk(KERN_INFO MOD_NAME ": module removed. Goodbye!\n");
++}
++
++module_init(imon_init);
++module_exit(imon_exit);
+diff --git a/drivers/input/lirc/lirc_it87.c b/drivers/input/lirc/lirc_it87.c
+new file mode 100644
+index 0000000..a899d00
+--- /dev/null
++++ b/drivers/input/lirc/lirc_it87.c
+@@ -0,0 +1,1021 @@
++/*
++ * LIRC driver for ITE IT8712/IT8705 CIR port
++ *
++ * Copyright (C) 2001 Hans-Gunter Lutke Uphues <hg_lu@web.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ *
++ * ITE IT8705 and IT8712(not tested) and IT8720 CIR-port support for lirc based
++ * via cut and paste from lirc_sir.c (C) 2000 Milan Pikula
++ *
++ * Attention: Sendmode only tested with debugging logs
++ *
++ * 2001/02/27 Christoph Bartelmus <lirc@bartelmus.de> :
++ * reimplemented read function
++ * 2005/06/05 Andrew Calkin implemented support for Asus Digimatrix,
++ * based on work of the following member of the Outertrack Digimatrix
++ * Forum: Art103 <r_tay@hotmail.com>
++ * 2009/12/24 James Edwards <jimbo-lirc@edwardsclan.net> implemeted support
++ * for ITE8704/ITE8718, on my machine, the DSDT reports 8704, but the
++ * chip identifies as 18.
++ */
++
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/signal.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/kernel.h>
++#include <linux/time.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/wait.h>
++#include <linux/mm.h>
++#include <linux/delay.h>
++#include <linux/poll.h>
++#include <asm/system.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++#include <linux/fcntl.h>
++
++#include <linux/timer.h>
++#include <linux/pnp.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#include "lirc_it87.h"
++
++#ifdef LIRC_IT87_DIGIMATRIX
++static int digimatrix = 1;
++static int it87_freq = 36; /* kHz */
++static int irq = 9;
++#else
++static int digimatrix;
++static int it87_freq = 38; /* kHz */
++static int irq = IT87_CIR_DEFAULT_IRQ;
++#endif
++
++static unsigned long it87_bits_in_byte_out;
++static unsigned long it87_send_counter;
++static unsigned char it87_RXEN_mask = IT87_CIR_RCR_RXEN;
++
++#define RBUF_LEN 1024
++#define WBUF_LEN 1024
++
++#define LIRC_DRIVER_NAME "lirc_it87"
++
++/* timeout for sequences in jiffies (=5/100s) */
++/* must be longer than TIME_CONST */
++#define IT87_TIMEOUT (HZ*5/100)
++
++/* module parameters */
++static int debug;
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \
++ fmt, ## args); \
++ } while (0)
++
++static int io = IT87_CIR_DEFAULT_IOBASE;
++/* receiver demodulator default: off */
++static int it87_enable_demodulator;
++
++static int timer_enabled;
++static DEFINE_SPINLOCK(timer_lock);
++static struct timer_list timerlist;
++/* time of last signal change detected */
++static struct timeval last_tv = {0, 0};
++/* time of last UART data ready interrupt */
++static struct timeval last_intr_tv = {0, 0};
++static int last_value;
++
++static DECLARE_WAIT_QUEUE_HEAD(lirc_read_queue);
++
++static DEFINE_SPINLOCK(hardware_lock);
++static DEFINE_SPINLOCK(dev_lock);
++
++static int rx_buf[RBUF_LEN];
++unsigned int rx_tail, rx_head;
++static int tx_buf[WBUF_LEN];
++
++static struct pnp_driver it87_pnp_driver;
++
++/* SECTION: Prototypes */
++
++/* Communication with user-space */
++static int lirc_open(struct inode *inode, struct file *file);
++static int lirc_close(struct inode *inode, struct file *file);
++static unsigned int lirc_poll(struct file *file, poll_table *wait);
++static ssize_t lirc_read(struct file *file, char *buf,
++ size_t count, loff_t *ppos);
++static ssize_t lirc_write(struct file *file, const char *buf,
++ size_t n, loff_t *pos);
++static int lirc_ioctl(struct inode *node, struct file *filep,
++ unsigned int cmd, unsigned long arg);
++static void add_read_queue(int flag, unsigned long val);
++static int init_chrdev(void);
++static void drop_chrdev(void);
++/* Hardware */
++static irqreturn_t it87_interrupt(int irq, void *dev_id);
++static void send_space(unsigned long len);
++static void send_pulse(unsigned long len);
++static void init_send(void);
++static void terminate_send(unsigned long len);
++static int init_hardware(void);
++static void drop_hardware(void);
++/* Initialisation */
++static int init_port(void);
++static void drop_port(void);
++
++
++/* SECTION: Communication with user-space */
++
++static int lirc_open(struct inode *inode, struct file *file)
++{
++ spin_lock(&dev_lock);
++ if (module_refcount(THIS_MODULE)) {
++ spin_unlock(&dev_lock);
++ return -EBUSY;
++ }
++ spin_unlock(&dev_lock);
++ return 0;
++}
++
++
++static int lirc_close(struct inode *inode, struct file *file)
++{
++ return 0;
++}
++
++
++static unsigned int lirc_poll(struct file *file, poll_table *wait)
++{
++ poll_wait(file, &lirc_read_queue, wait);
++ if (rx_head != rx_tail)
++ return POLLIN | POLLRDNORM;
++ return 0;
++}
++
++
++static ssize_t lirc_read(struct file *file, char *buf,
++ size_t count, loff_t *ppos)
++{
++ int n = 0;
++ int retval = 0;
++
++ while (n < count) {
++ if (file->f_flags & O_NONBLOCK && rx_head == rx_tail) {
++ retval = -EAGAIN;
++ break;
++ }
++ retval = wait_event_interruptible(lirc_read_queue,
++ rx_head != rx_tail);
++ if (retval)
++ break;
++
++ if (copy_to_user((void *) buf + n, (void *) (rx_buf + rx_head),
++ sizeof(int))) {
++ retval = -EFAULT;
++ break;
++ }
++ rx_head = (rx_head + 1) & (RBUF_LEN - 1);
++ n += sizeof(int);
++ }
++ if (n)
++ return n;
++ return retval;
++}
++
++
++static ssize_t lirc_write(struct file *file, const char *buf,
++ size_t n, loff_t *pos)
++{
++ int i = 0;
++
++ if (n % sizeof(int) || (n / sizeof(int)) > WBUF_LEN)
++ return -EINVAL;
++ if (copy_from_user(tx_buf, buf, n))
++ return -EFAULT;
++ n /= sizeof(int);
++ init_send();
++ while (1) {
++ if (i >= n)
++ break;
++ if (tx_buf[i])
++ send_pulse(tx_buf[i]);
++ i++;
++ if (i >= n)
++ break;
++ if (tx_buf[i])
++ send_space(tx_buf[i]);
++ i++;
++ }
++ terminate_send(tx_buf[i - 1]);
++ return n;
++}
++
++
++static int lirc_ioctl(struct inode *node, struct file *filep,
++ unsigned int cmd, unsigned long arg)
++{
++ int retval = 0;
++ unsigned long value = 0;
++ unsigned int ivalue;
++ unsigned long hw_flags;
++
++ if (cmd == LIRC_GET_FEATURES)
++ value = LIRC_CAN_SEND_PULSE |
++ LIRC_CAN_SET_SEND_CARRIER |
++ LIRC_CAN_REC_MODE2;
++ else if (cmd == LIRC_GET_SEND_MODE)
++ value = LIRC_MODE_PULSE;
++ else if (cmd == LIRC_GET_REC_MODE)
++ value = LIRC_MODE_MODE2;
++
++ switch (cmd) {
++ case LIRC_GET_FEATURES:
++ case LIRC_GET_SEND_MODE:
++ case LIRC_GET_REC_MODE:
++ retval = put_user(value, (unsigned long *) arg);
++ break;
++
++ case LIRC_SET_SEND_MODE:
++ case LIRC_SET_REC_MODE:
++ retval = get_user(value, (unsigned long *) arg);
++ break;
++
++ case LIRC_SET_SEND_CARRIER:
++ retval = get_user(ivalue, (unsigned int *) arg);
++ if (retval)
++ return retval;
++ ivalue /= 1000;
++ if (ivalue > IT87_CIR_FREQ_MAX ||
++ ivalue < IT87_CIR_FREQ_MIN)
++ return -EINVAL;
++
++ it87_freq = ivalue;
++
++ spin_lock_irqsave(&hardware_lock, hw_flags);
++ outb(((inb(io + IT87_CIR_TCR2) & IT87_CIR_TCR2_TXMPW) |
++ (it87_freq - IT87_CIR_FREQ_MIN) << 3),
++ io + IT87_CIR_TCR2);
++ spin_unlock_irqrestore(&hardware_lock, hw_flags);
++ dprintk("demodulation frequency: %d kHz\n", it87_freq);
++
++ break;
++
++ default:
++ retval = -EINVAL;
++ }
++
++ if (retval)
++ return retval;
++
++ if (cmd == LIRC_SET_REC_MODE) {
++ if (value != LIRC_MODE_MODE2)
++ retval = -ENOSYS;
++ } else if (cmd == LIRC_SET_SEND_MODE) {
++ if (value != LIRC_MODE_PULSE)
++ retval = -ENOSYS;
++ }
++ return retval;
++}
++
++static void add_read_queue(int flag, unsigned long val)
++{
++ unsigned int new_rx_tail;
++ int newval;
++
++ dprintk("add flag %d with val %lu\n", flag, val);
++
++ newval = val & PULSE_MASK;
++
++ /*
++ * statistically, pulses are ~TIME_CONST/2 too long. we could
++ * maybe make this more exact, but this is good enough
++ */
++ if (flag) {
++ /* pulse */
++ if (newval > TIME_CONST / 2)
++ newval -= TIME_CONST / 2;
++ else /* should not ever happen */
++ newval = 1;
++ newval |= PULSE_BIT;
++ } else
++ newval += TIME_CONST / 2;
++ new_rx_tail = (rx_tail + 1) & (RBUF_LEN - 1);
++ if (new_rx_tail == rx_head) {
++ dprintk("Buffer overrun.\n");
++ return;
++ }
++ rx_buf[rx_tail] = newval;
++ rx_tail = new_rx_tail;
++ wake_up_interruptible(&lirc_read_queue);
++}
++
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .read = lirc_read,
++ .write = lirc_write,
++ .poll = lirc_poll,
++ .ioctl = lirc_ioctl,
++ .open = lirc_open,
++ .release = lirc_close,
++};
++
++static int set_use_inc(void *data)
++{
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++}
++
++static struct lirc_driver driver = {
++ .name = LIRC_DRIVER_NAME,
++ .minor = -1,
++ .code_length = 1,
++ .sample_rate = 0,
++ .data = NULL,
++ .add_to_buf = NULL,
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .fops = &lirc_fops,
++ .dev = NULL,
++ .owner = THIS_MODULE,
++};
++
++
++#ifdef MODULE
++static int init_chrdev(void)
++{
++ driver.minor = lirc_register_driver(&driver);
++
++ if (driver.minor < 0) {
++ printk(KERN_ERR LIRC_DRIVER_NAME ": init_chrdev() failed.\n");
++ return -EIO;
++ }
++ return 0;
++}
++
++
++static void drop_chrdev(void)
++{
++ lirc_unregister_driver(driver.minor);
++}
++#endif
++
++
++/* SECTION: Hardware */
++static long delta(struct timeval *tv1, struct timeval *tv2)
++{
++ unsigned long deltv;
++
++ deltv = tv2->tv_sec - tv1->tv_sec;
++ if (deltv > 15)
++ deltv = 0xFFFFFF;
++ else
++ deltv = deltv*1000000 + tv2->tv_usec - tv1->tv_usec;
++ return deltv;
++}
++
++static void it87_timeout(unsigned long data)
++{
++ unsigned long flags;
++
++ /* avoid interference with interrupt */
++ spin_lock_irqsave(&timer_lock, flags);
++
++ if (digimatrix) {
++ /* We have timed out. Disable the RX mechanism. */
++
++ outb((inb(io + IT87_CIR_RCR) & ~IT87_CIR_RCR_RXEN) |
++ IT87_CIR_RCR_RXACT, io + IT87_CIR_RCR);
++ if (it87_RXEN_mask)
++ outb(inb(io + IT87_CIR_RCR) | IT87_CIR_RCR_RXEN,
++ io + IT87_CIR_RCR);
++ dprintk(" TIMEOUT\n");
++ timer_enabled = 0;
++
++ /* fifo clear */
++ outb(inb(io + IT87_CIR_TCR1) | IT87_CIR_TCR1_FIFOCLR,
++ io+IT87_CIR_TCR1);
++
++ } else {
++ /*
++ * if last received signal was a pulse, but receiving stopped
++ * within the 9 bit frame, we need to finish this pulse and
++ * simulate a signal change to from pulse to space. Otherwise
++ * upper layers will receive two sequences next time.
++ */
++
++ if (last_value) {
++ unsigned long pulse_end;
++
++ /* determine 'virtual' pulse end: */
++ pulse_end = delta(&last_tv, &last_intr_tv);
++ dprintk("timeout add %d for %lu usec\n",
++ last_value, pulse_end);
++ add_read_queue(last_value, pulse_end);
++ last_value = 0;
++ last_tv = last_intr_tv;
++ }
++ }
++ spin_unlock_irqrestore(&timer_lock, flags);
++}
++
++static irqreturn_t it87_interrupt(int irq, void *dev_id)
++{
++ unsigned char data;
++ struct timeval curr_tv;
++ static unsigned long deltv;
++ unsigned long deltintrtv;
++ unsigned long flags, hw_flags;
++ int iir, lsr;
++ int fifo = 0;
++ static char lastbit;
++ char bit;
++
++ /* Bit duration in microseconds */
++ const unsigned long bit_duration = 1000000ul /
++ (115200 / IT87_CIR_BAUDRATE_DIVISOR);
++
++
++ iir = inb(io + IT87_CIR_IIR);
++
++ switch (iir & IT87_CIR_IIR_IID) {
++ case 0x4:
++ case 0x6:
++ lsr = inb(io + IT87_CIR_RSR) & (IT87_CIR_RSR_RXFTO |
++ IT87_CIR_RSR_RXFBC);
++ fifo = lsr & IT87_CIR_RSR_RXFBC;
++ dprintk("iir: 0x%x fifo: 0x%x\n", iir, lsr);
++
++ /* avoid interference with timer */
++ spin_lock_irqsave(&timer_lock, flags);
++ spin_lock_irqsave(&hardware_lock, hw_flags);
++ if (digimatrix) {
++ static unsigned long acc_pulse;
++ static unsigned long acc_space;
++
++ do {
++ data = inb(io + IT87_CIR_DR);
++ data = ~data;
++ fifo--;
++ if (data != 0x00) {
++ if (timer_enabled)
++ del_timer(&timerlist);
++ /*
++ * start timer for end of
++ * sequence detection
++ */
++ timerlist.expires = jiffies +
++ IT87_TIMEOUT;
++ add_timer(&timerlist);
++ timer_enabled = 1;
++ }
++ /* Loop through */
++ for (bit = 0; bit < 8; ++bit) {
++ if ((data >> bit) & 1) {
++ ++acc_pulse;
++ if (lastbit == 0) {
++ add_read_queue(0,
++ acc_space *
++ bit_duration);
++ acc_space = 0;
++ }
++ } else {
++ ++acc_space;
++ if (lastbit == 1) {
++ add_read_queue(1,
++ acc_pulse *
++ bit_duration);
++ acc_pulse = 0;
++ }
++ }
++ lastbit = (data >> bit) & 1;
++ }
++
++ } while (fifo != 0);
++ } else { /* Normal Operation */
++ do {
++ del_timer(&timerlist);
++ data = inb(io + IT87_CIR_DR);
++
++ dprintk("data=%02x\n", data);
++ do_gettimeofday(&curr_tv);
++ deltv = delta(&last_tv, &curr_tv);
++ deltintrtv = delta(&last_intr_tv, &curr_tv);
++
++ dprintk("t %lu , d %d\n",
++ deltintrtv, (int)data);
++
++ /*
++ * if nothing came in last 2 cycles,
++ * it was gap
++ */
++ if (deltintrtv > TIME_CONST * 2) {
++ if (last_value) {
++ dprintk("GAP\n");
++
++ /* simulate signal change */
++ add_read_queue(last_value,
++ deltv -
++ deltintrtv);
++ last_value = 0;
++ last_tv.tv_sec =
++ last_intr_tv.tv_sec;
++ last_tv.tv_usec =
++ last_intr_tv.tv_usec;
++ deltv = deltintrtv;
++ }
++ }
++ data = 1;
++ if (data ^ last_value) {
++ /*
++ * deltintrtv > 2*TIME_CONST,
++ * remember ? the other case is
++ * timeout
++ */
++ add_read_queue(last_value,
++ deltv-TIME_CONST);
++ last_value = data;
++ last_tv = curr_tv;
++ if (last_tv.tv_usec >= TIME_CONST)
++ last_tv.tv_usec -= TIME_CONST;
++ else {
++ last_tv.tv_sec--;
++ last_tv.tv_usec += 1000000 -
++ TIME_CONST;
++ }
++ }
++ last_intr_tv = curr_tv;
++ if (data) {
++ /*
++ * start timer for end of
++ * sequence detection
++ */
++ timerlist.expires =
++ jiffies + IT87_TIMEOUT;
++ add_timer(&timerlist);
++ }
++ outb((inb(io + IT87_CIR_RCR) &
++ ~IT87_CIR_RCR_RXEN) |
++ IT87_CIR_RCR_RXACT,
++ io + IT87_CIR_RCR);
++ if (it87_RXEN_mask)
++ outb(inb(io + IT87_CIR_RCR) |
++ IT87_CIR_RCR_RXEN,
++ io + IT87_CIR_RCR);
++ fifo--;
++ } while (fifo != 0);
++ }
++ spin_unlock_irqrestore(&hardware_lock, hw_flags);
++ spin_unlock_irqrestore(&timer_lock, flags);
++
++ return IRQ_RETVAL(IRQ_HANDLED);
++
++ default:
++ /* not our irq */
++ dprintk("unknown IRQ (shouldn't happen) !!\n");
++ return IRQ_RETVAL(IRQ_NONE);
++ }
++}
++
++
++static void send_it87(unsigned long len, unsigned long stime,
++ unsigned char send_byte, unsigned int count_bits)
++{
++ long count = len / stime;
++ long time_left = 0;
++ static unsigned char byte_out;
++ unsigned long hw_flags;
++
++ dprintk("%s: len=%ld, sb=%d\n", __func__, len, send_byte);
++
++ time_left = (long)len - (long)count * (long)stime;
++ count += ((2 * time_left) / stime);
++ while (count) {
++ long i = 0;
++ for (i = 0; i < count_bits; i++) {
++ byte_out = (byte_out << 1) | (send_byte & 1);
++ it87_bits_in_byte_out++;
++ }
++ if (it87_bits_in_byte_out == 8) {
++ dprintk("out=0x%x, tsr_txfbc: 0x%x\n",
++ byte_out,
++ inb(io + IT87_CIR_TSR) &
++ IT87_CIR_TSR_TXFBC);
++
++ while ((inb(io + IT87_CIR_TSR) &
++ IT87_CIR_TSR_TXFBC) >= IT87_CIR_FIFO_SIZE)
++ ;
++
++ spin_lock_irqsave(&hardware_lock, hw_flags);
++ outb(byte_out, io + IT87_CIR_DR);
++ spin_unlock_irqrestore(&hardware_lock, hw_flags);
++
++ it87_bits_in_byte_out = 0;
++ it87_send_counter++;
++ byte_out = 0;
++ }
++ count--;
++ }
++}
++
++
++/*TODO: maybe exchange space and pulse because it8705 only modulates 0-bits */
++
++static void send_space(unsigned long len)
++{
++ send_it87(len, TIME_CONST, IT87_CIR_SPACE, IT87_CIR_BAUDRATE_DIVISOR);
++}
++
++static void send_pulse(unsigned long len)
++{
++ send_it87(len, TIME_CONST, IT87_CIR_PULSE, IT87_CIR_BAUDRATE_DIVISOR);
++}
++
++
++static void init_send()
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&hardware_lock, flags);
++ /* RXEN=0: receiver disable */
++ it87_RXEN_mask = 0;
++ outb(inb(io + IT87_CIR_RCR) & ~IT87_CIR_RCR_RXEN,
++ io + IT87_CIR_RCR);
++ spin_unlock_irqrestore(&hardware_lock, flags);
++ it87_bits_in_byte_out = 0;
++ it87_send_counter = 0;
++}
++
++
++static void terminate_send(unsigned long len)
++{
++ unsigned long flags;
++ unsigned long last = 0;
++
++ last = it87_send_counter;
++ /* make sure all necessary data has been sent */
++ while (last == it87_send_counter)
++ send_space(len);
++ /* wait until all data sent */
++ while ((inb(io + IT87_CIR_TSR) & IT87_CIR_TSR_TXFBC) != 0)
++ ;
++ /* then re-enable receiver */
++ spin_lock_irqsave(&hardware_lock, flags);
++ it87_RXEN_mask = IT87_CIR_RCR_RXEN;
++ outb(inb(io + IT87_CIR_RCR) | IT87_CIR_RCR_RXEN,
++ io + IT87_CIR_RCR);
++ spin_unlock_irqrestore(&hardware_lock, flags);
++}
++
++
++static int init_hardware(void)
++{
++ unsigned long flags;
++ unsigned char it87_rcr = 0;
++
++ spin_lock_irqsave(&hardware_lock, flags);
++ /* init cir-port */
++ /* enable r/w-access to Baudrate-Register */
++ outb(IT87_CIR_IER_BR, io + IT87_CIR_IER);
++ outb(IT87_CIR_BAUDRATE_DIVISOR % 0x100, io+IT87_CIR_BDLR);
++ outb(IT87_CIR_BAUDRATE_DIVISOR / 0x100, io+IT87_CIR_BDHR);
++ /* Baudrate Register off, define IRQs: Input only */
++ if (digimatrix) {
++ outb(IT87_CIR_IER_IEC | IT87_CIR_IER_RFOIE, io + IT87_CIR_IER);
++ /* RX: HCFS=0, RXDCR = 001b (33,75..38,25 kHz), RXEN=1 */
++ } else {
++ outb(IT87_CIR_IER_IEC | IT87_CIR_IER_RDAIE, io + IT87_CIR_IER);
++ /* RX: HCFS=0, RXDCR = 001b (35,6..40,3 kHz), RXEN=1 */
++ }
++ it87_rcr = (IT87_CIR_RCR_RXEN & it87_RXEN_mask) | 0x1;
++ if (it87_enable_demodulator)
++ it87_rcr |= IT87_CIR_RCR_RXEND;
++ outb(it87_rcr, io + IT87_CIR_RCR);
++ if (digimatrix) {
++ /* Set FIFO depth to 1 byte, and disable TX */
++ outb(inb(io + IT87_CIR_TCR1) | 0x00,
++ io + IT87_CIR_TCR1);
++
++ /*
++ * TX: it87_freq (36kHz), 'reserved' sensitivity
++ * setting (0x00)
++ */
++ outb(((it87_freq - IT87_CIR_FREQ_MIN) << 3) | 0x00,
++ io + IT87_CIR_TCR2);
++ } else {
++ /* TX: 38kHz, 13,3us (pulse-width) */
++ outb(((it87_freq - IT87_CIR_FREQ_MIN) << 3) | 0x06,
++ io + IT87_CIR_TCR2);
++ }
++ spin_unlock_irqrestore(&hardware_lock, flags);
++ return 0;
++}
++
++
++static void drop_hardware(void)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&hardware_lock, flags);
++ disable_irq(irq);
++ /* receiver disable */
++ it87_RXEN_mask = 0;
++ outb(0x1, io + IT87_CIR_RCR);
++ /* turn off irqs */
++ outb(0, io + IT87_CIR_IER);
++ /* fifo clear */
++ outb(IT87_CIR_TCR1_FIFOCLR, io+IT87_CIR_TCR1);
++ /* reset */
++ outb(IT87_CIR_IER_RESET, io+IT87_CIR_IER);
++ enable_irq(irq);
++ spin_unlock_irqrestore(&hardware_lock, flags);
++}
++
++
++static unsigned char it87_read(unsigned char port)
++{
++ outb(port, IT87_ADRPORT);
++ return inb(IT87_DATAPORT);
++}
++
++
++static void it87_write(unsigned char port, unsigned char data)
++{
++ outb(port, IT87_ADRPORT);
++ outb(data, IT87_DATAPORT);
++}
++
++
++/* SECTION: Initialisation */
++
++static int init_port(void)
++{
++ unsigned long hw_flags;
++ int retval = 0;
++
++ unsigned char init_bytes[4] = IT87_INIT;
++ unsigned char it87_chipid = 0;
++ unsigned char ldn = 0;
++ unsigned int it87_io = 0;
++ unsigned int it87_irq = 0;
++
++ /* Enter MB PnP Mode */
++ outb(init_bytes[0], IT87_ADRPORT);
++ outb(init_bytes[1], IT87_ADRPORT);
++ outb(init_bytes[2], IT87_ADRPORT);
++ outb(init_bytes[3], IT87_ADRPORT);
++
++ /* 8712 or 8705 ? */
++ it87_chipid = it87_read(IT87_CHIP_ID1);
++ if (it87_chipid != 0x87) {
++ retval = -ENXIO;
++ return retval;
++ }
++ it87_chipid = it87_read(IT87_CHIP_ID2);
++ if ((it87_chipid != 0x05) &&
++ (it87_chipid != 0x12) &&
++ (it87_chipid != 0x18) &&
++ (it87_chipid != 0x20)) {
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": no IT8704/05/12/18/20 found (claimed IT87%02x), "
++ "exiting..\n", it87_chipid);
++ retval = -ENXIO;
++ return retval;
++ }
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": found IT87%02x.\n",
++ it87_chipid);
++
++ /* get I/O-Port and IRQ */
++ if (it87_chipid == 0x12 || it87_chipid == 0x18)
++ ldn = IT8712_CIR_LDN;
++ else
++ ldn = IT8705_CIR_LDN;
++ it87_write(IT87_LDN, ldn);
++
++ it87_io = it87_read(IT87_CIR_BASE_MSB) * 256 +
++ it87_read(IT87_CIR_BASE_LSB);
++ if (it87_io == 0) {
++ if (io == 0)
++ io = IT87_CIR_DEFAULT_IOBASE;
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": set default io 0x%x\n",
++ io);
++ it87_write(IT87_CIR_BASE_MSB, io / 0x100);
++ it87_write(IT87_CIR_BASE_LSB, io % 0x100);
++ } else
++ io = it87_io;
++
++ it87_irq = it87_read(IT87_CIR_IRQ);
++ if (digimatrix || it87_irq == 0) {
++ if (irq == 0)
++ irq = IT87_CIR_DEFAULT_IRQ;
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": set default irq 0x%x\n",
++ irq);
++ it87_write(IT87_CIR_IRQ, irq);
++ } else
++ irq = it87_irq;
++
++ spin_lock_irqsave(&hardware_lock, hw_flags);
++ /* reset */
++ outb(IT87_CIR_IER_RESET, io+IT87_CIR_IER);
++ /* fifo clear */
++ outb(IT87_CIR_TCR1_FIFOCLR |
++ /* IT87_CIR_TCR1_ILE | */
++ IT87_CIR_TCR1_TXRLE |
++ IT87_CIR_TCR1_TXENDF, io+IT87_CIR_TCR1);
++ spin_unlock_irqrestore(&hardware_lock, hw_flags);
++
++ /* get I/O port access and IRQ line */
++ if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) {
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": i/o port 0x%.4x already in use.\n", io);
++ /* Leaving MB PnP Mode */
++ it87_write(IT87_CFGCTRL, 0x2);
++ return -EBUSY;
++ }
++
++ /* activate CIR-Device */
++ it87_write(IT87_CIR_ACT, 0x1);
++
++ /* Leaving MB PnP Mode */
++ it87_write(IT87_CFGCTRL, 0x2);
++
++ retval = request_irq(irq, it87_interrupt, 0 /*IRQF_DISABLED*/,
++ LIRC_DRIVER_NAME, NULL);
++ if (retval < 0) {
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": IRQ %d already in use.\n",
++ irq);
++ release_region(io, 8);
++ return retval;
++ }
++
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": I/O port 0x%.4x, IRQ %d.\n", io, irq);
++
++ init_timer(&timerlist);
++ timerlist.function = it87_timeout;
++ timerlist.data = 0xabadcafe;
++
++ return 0;
++}
++
++
++static void drop_port(void)
++{
++#if 0
++ unsigned char init_bytes[4] = IT87_INIT;
++
++ /* Enter MB PnP Mode */
++ outb(init_bytes[0], IT87_ADRPORT);
++ outb(init_bytes[1], IT87_ADRPORT);
++ outb(init_bytes[2], IT87_ADRPORT);
++ outb(init_bytes[3], IT87_ADRPORT);
++
++ /* deactivate CIR-Device */
++ it87_write(IT87_CIR_ACT, 0x0);
++
++ /* Leaving MB PnP Mode */
++ it87_write(IT87_CFGCTRL, 0x2);
++#endif
++
++ del_timer_sync(&timerlist);
++ free_irq(irq, NULL);
++ release_region(io, 8);
++}
++
++
++static int init_lirc_it87(void)
++{
++ int retval;
++
++ init_waitqueue_head(&lirc_read_queue);
++ retval = init_port();
++ if (retval < 0)
++ return retval;
++ init_hardware();
++ printk(KERN_INFO LIRC_DRIVER_NAME ": Installed.\n");
++ return 0;
++}
++
++static int it87_probe(struct pnp_dev *pnp_dev,
++ const struct pnp_device_id *dev_id)
++{
++ int retval;
++
++ driver.dev = &pnp_dev->dev;
++
++ retval = init_chrdev();
++ if (retval < 0)
++ return retval;
++
++ retval = init_lirc_it87();
++ if (retval)
++ goto init_lirc_it87_failed;
++
++ return 0;
++
++init_lirc_it87_failed:
++ drop_chrdev();
++
++ return retval;
++}
++
++static int __init lirc_it87_init(void)
++{
++ return pnp_register_driver(&it87_pnp_driver);
++}
++
++
++static void __exit lirc_it87_exit(void)
++{
++ drop_hardware();
++ drop_chrdev();
++ drop_port();
++ pnp_unregister_driver(&it87_pnp_driver);
++ printk(KERN_INFO LIRC_DRIVER_NAME ": Uninstalled.\n");
++}
++
++/* SECTION: PNP for ITE8704/18 */
++
++static const struct pnp_device_id pnp_dev_table[] = {
++ {"ITE8704", 0},
++ {}
++};
++
++MODULE_DEVICE_TABLE(pnp, pnp_dev_table);
++
++static struct pnp_driver it87_pnp_driver = {
++ .name = LIRC_DRIVER_NAME,
++ .id_table = pnp_dev_table,
++ .probe = it87_probe,
++};
++
++module_init(lirc_it87_init);
++module_exit(lirc_it87_exit);
++
++MODULE_DESCRIPTION("LIRC driver for ITE IT8704/05/12/18/20 CIR port");
++MODULE_AUTHOR("Hans-Gunter Lutke Uphues");
++MODULE_LICENSE("GPL");
++
++module_param(io, int, S_IRUGO);
++MODULE_PARM_DESC(io, "I/O base address (default: 0x310)");
++
++module_param(irq, int, S_IRUGO);
++#ifdef LIRC_IT87_DIGIMATRIX
++MODULE_PARM_DESC(irq, "Interrupt (1,3-12) (default: 9)");
++#else
++MODULE_PARM_DESC(irq, "Interrupt (1,3-12) (default: 7)");
++#endif
++
++module_param(it87_enable_demodulator, bool, S_IRUGO);
++MODULE_PARM_DESC(it87_enable_demodulator,
++ "Receiver demodulator enable/disable (1/0), default: 0");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
++
++module_param(digimatrix, bool, S_IRUGO | S_IWUSR);
++#ifdef LIRC_IT87_DIGIMATRIX
++MODULE_PARM_DESC(digimatrix,
++ "Asus Digimatrix it87 compat. enable/disable (1/0), default: 1");
++#else
++MODULE_PARM_DESC(digimatrix,
++ "Asus Digimatrix it87 compat. enable/disable (1/0), default: 0");
++#endif
++
++
++module_param(it87_freq, int, S_IRUGO);
++#ifdef LIRC_IT87_DIGIMATRIX
++MODULE_PARM_DESC(it87_freq,
++ "Carrier demodulator frequency (kHz), (default: 36)");
++#else
++MODULE_PARM_DESC(it87_freq,
++ "Carrier demodulator frequency (kHz), (default: 38)");
++#endif
+diff --git a/drivers/input/lirc/lirc_it87.h b/drivers/input/lirc/lirc_it87.h
+new file mode 100644
+index 0000000..cf021c8
+--- /dev/null
++++ b/drivers/input/lirc/lirc_it87.h
+@@ -0,0 +1,116 @@
++/* lirc_it87.h */
++/* SECTION: Definitions */
++
++/********************************* ITE IT87xx ************************/
++
++/* based on the following documentation from ITE:
++ a) IT8712F Preliminary CIR Programming Guide V0.1
++ b) IT8705F Simple LPC I/O Preliminary Specification V0.3
++ c) IT8712F EC-LPC I/O Preliminary Specification V0.5
++*/
++
++/* IT8712/05 Ports: */
++#define IT87_ADRPORT 0x2e
++#define IT87_DATAPORT 0x2f
++#define IT87_INIT {0x87, 0x01, 0x55, 0x55}
++
++/* alternate Ports: */
++/*
++#define IT87_ADRPORT 0x4e
++#define IT87_DATAPORT 0x4f
++#define IT87_INIT {0x87, 0x01, 0x55, 0xaa}
++ */
++
++/* IT8712/05 Registers */
++#define IT87_CFGCTRL 0x2
++#define IT87_LDN 0x7
++#define IT87_CHIP_ID1 0x20
++#define IT87_CHIP_ID2 0x21
++#define IT87_CFG_VERSION 0x22
++#define IT87_SWSUSPEND 0x23
++
++#define IT8712_CIR_LDN 0xa
++#define IT8705_CIR_LDN 0x7
++
++/* CIR Configuration Registers: */
++#define IT87_CIR_ACT 0x30
++#define IT87_CIR_BASE_MSB 0x60
++#define IT87_CIR_BASE_LSB 0x61
++#define IT87_CIR_IRQ 0x70
++#define IT87_CIR_CONFIG 0xf0
++
++/* List of IT87_CIR registers: offset to BaseAddr */
++#define IT87_CIR_DR 0
++#define IT87_CIR_IER 1
++#define IT87_CIR_RCR 2
++#define IT87_CIR_TCR1 3
++#define IT87_CIR_TCR2 4
++#define IT87_CIR_TSR 5
++#define IT87_CIR_RSR 6
++#define IT87_CIR_BDLR 5
++#define IT87_CIR_BDHR 6
++#define IT87_CIR_IIR 7
++
++/* Bit Definition */
++/* IER: */
++#define IT87_CIR_IER_TM_EN 0x80
++#define IT87_CIR_IER_RESEVED 0x40
++#define IT87_CIR_IER_RESET 0x20
++#define IT87_CIR_IER_BR 0x10
++#define IT87_CIR_IER_IEC 0x8
++#define IT87_CIR_IER_RFOIE 0x4
++#define IT87_CIR_IER_RDAIE 0x2
++#define IT87_CIR_IER_TLDLIE 0x1
++
++/* RCR: */
++#define IT87_CIR_RCR_RDWOS 0x80
++#define IT87_CIR_RCR_HCFS 0x40
++#define IT87_CIR_RCR_RXEN 0x20
++#define IT87_CIR_RCR_RXEND 0x10
++#define IT87_CIR_RCR_RXACT 0x8
++#define IT87_CIR_RCR_RXDCR 0x7
++
++/* TCR1: */
++#define IT87_CIR_TCR1_FIFOCLR 0x80
++#define IT87_CIR_TCR1_ILE 0x40
++#define IT87_CIR_TCR1_FIFOTL 0x30
++#define IT87_CIR_TCR1_TXRLE 0x8
++#define IT87_CIR_TCR1_TXENDF 0x4
++#define IT87_CIR_TCR1_TXMPM 0x3
++
++/* TCR2: */
++#define IT87_CIR_TCR2_CFQ 0xf8
++#define IT87_CIR_TCR2_TXMPW 0x7
++
++/* TSR: */
++#define IT87_CIR_TSR_RESERVED 0xc0
++#define IT87_CIR_TSR_TXFBC 0x3f
++
++/* RSR: */
++#define IT87_CIR_RSR_RXFTO 0x80
++#define IT87_CIR_RSR_RESERVED 0x40
++#define IT87_CIR_RSR_RXFBC 0x3f
++
++/* IIR: */
++#define IT87_CIR_IIR_RESERVED 0xf8
++#define IT87_CIR_IIR_IID 0x6
++#define IT87_CIR_IIR_IIP 0x1
++
++/* TM: */
++#define IT87_CIR_TM_IL_SEL 0x80
++#define IT87_CIR_TM_RESERVED 0x40
++#define IT87_CIR_TM_TM_REG 0x3f
++
++#define IT87_CIR_FIFO_SIZE 32
++
++/* Baudratedivisor for IT87: power of 2: only 1,2,4 or 8) */
++#define IT87_CIR_BAUDRATE_DIVISOR 0x1
++#define IT87_CIR_DEFAULT_IOBASE 0x310
++#define IT87_CIR_DEFAULT_IRQ 0x7
++#define IT87_CIR_SPACE 0x00
++#define IT87_CIR_PULSE 0xff
++#define IT87_CIR_FREQ_MIN 27
++#define IT87_CIR_FREQ_MAX 58
++#define TIME_CONST (IT87_CIR_BAUDRATE_DIVISOR * 8000000ul / 115200ul)
++
++/********************************* ITE IT87xx ************************/
+diff --git a/drivers/input/lirc/lirc_ite8709.c b/drivers/input/lirc/lirc_ite8709.c
+new file mode 100644
+index 0000000..4c3d3ad
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ite8709.c
+@@ -0,0 +1,540 @@
++/*
++ * LIRC driver for ITE8709 CIR port
++ *
++ * Copyright (C) 2008 Grégory Lardière <spmf2004-lirc@yahoo.fr>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
++ * USA
++ */
++
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/pnp.h>
++#include <linux/io.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#define LIRC_DRIVER_NAME "lirc_ite8709"
++
++#define BUF_CHUNK_SIZE sizeof(int)
++#define BUF_SIZE (128*BUF_CHUNK_SIZE)
++
++/*
++ * The ITE8709 device seems to be the combination of IT8512 superIO chip and
++ * a specific firmware running on the IT8512's embedded micro-controller.
++ * In addition of the embedded micro-controller, the IT8512 chip contains a
++ * CIR module and several other modules. A few modules are directly accessible
++ * by the host CPU, but most of them are only accessible by the
++ * micro-controller. The CIR module is only accessible by the micro-controller.
++ * The battery-backed SRAM module is accessible by the host CPU and the
++ * micro-controller. So one of the MC's firmware role is to act as a bridge
++ * between the host CPU and the CIR module. The firmware implements a kind of
++ * communication protocol using the SRAM module as a shared memory. The IT8512
++ * specification is publicly available on ITE's web site, but the communication
++ * protocol is not, so it was reverse-engineered.
++ */
++
++/* ITE8709 Registers addresses and values (reverse-engineered) */
++#define ITE8709_MODE 0x1a
++#define ITE8709_REG_ADR 0x1b
++#define ITE8709_REG_VAL 0x1c
++#define ITE8709_IIR 0x1e /* Interrupt identification register */
++#define ITE8709_RFSR 0x1f /* Receiver FIFO status register */
++#define ITE8709_FIFO_START 0x20
++
++#define ITE8709_MODE_READY 0X00
++#define ITE8709_MODE_WRITE 0X01
++#define ITE8709_MODE_READ 0X02
++#define ITE8709_IIR_RDAI 0x02 /* Receiver data available interrupt */
++#define ITE8709_IIR_RFOI 0x04 /* Receiver FIFO overrun interrupt */
++#define ITE8709_RFSR_MASK 0x3f /* FIFO byte count mask */
++
++/*
++ * IT8512 CIR-module registers addresses and values
++ * (from IT8512 E/F specification v0.4.1)
++ */
++#define IT8512_REG_MSTCR 0x01 /* Master control register */
++#define IT8512_REG_IER 0x02 /* Interrupt enable register */
++#define IT8512_REG_CFR 0x04 /* Carrier frequency register */
++#define IT8512_REG_RCR 0x05 /* Receive control register */
++#define IT8512_REG_BDLR 0x08 /* Baud rate divisor low byte register */
++#define IT8512_REG_BDHR 0x09 /* Baud rate divisor high byte register */
++
++#define IT8512_MSTCR_RESET 0x01 /* Reset registers to default value */
++#define IT8512_MSTCR_FIFOCLR 0x02 /* Clear FIFO */
++#define IT8512_MSTCR_FIFOTL_7 0x04 /* FIFO threshold level : 7 */
++#define IT8512_MSTCR_FIFOTL_25 0x0c /* FIFO threshold level : 25 */
++#define IT8512_IER_RDAIE 0x02 /* Enable data interrupt request */
++#define IT8512_IER_RFOIE 0x04 /* Enable FIFO overrun interrupt req */
++#define IT8512_IER_IEC 0x80 /* Enable interrupt request */
++#define IT8512_CFR_CF_36KHZ 0x09 /* Carrier freq : low speed, 36kHz */
++#define IT8512_RCR_RXDCR_1 0x01 /* Demodulation carrier range : 1 */
++#define IT8512_RCR_RXACT 0x08 /* Receiver active */
++#define IT8512_RCR_RXEN 0x80 /* Receiver enable */
++#define IT8512_BDR_6 6 /* Baud rate divisor : 6 */
++
++/* Actual values used by this driver */
++#define CFG_FIFOTL IT8512_MSTCR_FIFOTL_25
++#define CFG_CR_FREQ IT8512_CFR_CF_36KHZ
++#define CFG_DCR IT8512_RCR_RXDCR_1
++#define CFG_BDR IT8512_BDR_6
++#define CFG_TIMEOUT 100000 /* Rearm interrupt when a space is > 100 ms */
++
++static int debug;
++
++struct ite8709_device {
++ int use_count;
++ int io;
++ int irq;
++ spinlock_t hardware_lock;
++ unsigned long long acc_pulse;
++ unsigned long long acc_space;
++ char lastbit;
++ struct timeval last_tv;
++ struct lirc_driver driver;
++ struct tasklet_struct tasklet;
++ char force_rearm;
++ char rearmed;
++ char device_busy;
++};
++
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \
++ fmt, ## args); \
++ } while (0)
++
++
++static unsigned char ite8709_read(struct ite8709_device *dev,
++ unsigned char port)
++{
++ outb(port, dev->io);
++ return inb(dev->io+1);
++}
++
++static void ite8709_write(struct ite8709_device *dev, unsigned char port,
++ unsigned char data)
++{
++ outb(port, dev->io);
++ outb(data, dev->io+1);
++}
++
++static void ite8709_wait_device(struct ite8709_device *dev)
++{
++ int i = 0;
++ /*
++ * loop until device tells it's ready to continue
++ * iterations count is usually ~750 but can sometimes achieve 13000
++ */
++ for (i = 0; i < 15000; i++) {
++ udelay(2);
++ if (ite8709_read(dev, ITE8709_MODE) == ITE8709_MODE_READY)
++ break;
++ }
++}
++
++static void ite8709_write_register(struct ite8709_device *dev,
++ unsigned char reg_adr, unsigned char reg_value)
++{
++ ite8709_wait_device(dev);
++
++ ite8709_write(dev, ITE8709_REG_VAL, reg_value);
++ ite8709_write(dev, ITE8709_REG_ADR, reg_adr);
++ ite8709_write(dev, ITE8709_MODE, ITE8709_MODE_WRITE);
++}
++
++static void ite8709_init_hardware(struct ite8709_device *dev)
++{
++ spin_lock_irq(&dev->hardware_lock);
++ dev->device_busy = 1;
++ spin_unlock_irq(&dev->hardware_lock);
++
++ ite8709_write_register(dev, IT8512_REG_BDHR, (CFG_BDR >> 8) & 0xff);
++ ite8709_write_register(dev, IT8512_REG_BDLR, CFG_BDR & 0xff);
++ ite8709_write_register(dev, IT8512_REG_CFR, CFG_CR_FREQ);
++ ite8709_write_register(dev, IT8512_REG_IER,
++ IT8512_IER_IEC | IT8512_IER_RFOIE | IT8512_IER_RDAIE);
++ ite8709_write_register(dev, IT8512_REG_RCR, CFG_DCR);
++ ite8709_write_register(dev, IT8512_REG_MSTCR,
++ CFG_FIFOTL | IT8512_MSTCR_FIFOCLR);
++ ite8709_write_register(dev, IT8512_REG_RCR,
++ IT8512_RCR_RXEN | IT8512_RCR_RXACT | CFG_DCR);
++
++ spin_lock_irq(&dev->hardware_lock);
++ dev->device_busy = 0;
++ spin_unlock_irq(&dev->hardware_lock);
++
++ tasklet_enable(&dev->tasklet);
++}
++
++static void ite8709_drop_hardware(struct ite8709_device *dev)
++{
++ tasklet_disable(&dev->tasklet);
++
++ spin_lock_irq(&dev->hardware_lock);
++ dev->device_busy = 1;
++ spin_unlock_irq(&dev->hardware_lock);
++
++ ite8709_write_register(dev, IT8512_REG_RCR, 0);
++ ite8709_write_register(dev, IT8512_REG_MSTCR,
++ IT8512_MSTCR_RESET | IT8512_MSTCR_FIFOCLR);
++
++ spin_lock_irq(&dev->hardware_lock);
++ dev->device_busy = 0;
++ spin_unlock_irq(&dev->hardware_lock);
++}
++
++static int ite8709_set_use_inc(void *data)
++{
++ struct ite8709_device *dev;
++ dev = data;
++ if (dev->use_count == 0)
++ ite8709_init_hardware(dev);
++ dev->use_count++;
++ return 0;
++}
++
++static void ite8709_set_use_dec(void *data)
++{
++ struct ite8709_device *dev;
++ dev = data;
++ dev->use_count--;
++ if (dev->use_count == 0)
++ ite8709_drop_hardware(dev);
++}
++
++static void ite8709_add_read_queue(struct ite8709_device *dev, int flag,
++ unsigned long long val)
++{
++ int value;
++
++ dprintk("add a %llu usec %s\n", val, flag ? "pulse" : "space");
++
++ value = (val > PULSE_MASK) ? PULSE_MASK : val;
++ if (flag)
++ value |= PULSE_BIT;
++
++ if (!lirc_buffer_full(dev->driver.rbuf)) {
++ lirc_buffer_write(dev->driver.rbuf, (void *) &value);
++ wake_up(&dev->driver.rbuf->wait_poll);
++ }
++}
++
++static irqreturn_t ite8709_interrupt(int irq, void *dev_id)
++{
++ unsigned char data;
++ int iir, rfsr, i;
++ int fifo = 0;
++ char bit;
++ struct timeval curr_tv;
++
++ /* Bit duration in microseconds */
++ const unsigned long bit_duration = 1000000ul / (115200 / CFG_BDR);
++
++ struct ite8709_device *dev;
++ dev = dev_id;
++
++ /*
++ * If device is busy, we simply discard data because we are in one of
++ * these two cases : shutting down or rearming the device, so this
++ * doesn't really matter and this avoids waiting too long in IRQ ctx
++ */
++ spin_lock(&dev->hardware_lock);
++ if (dev->device_busy) {
++ spin_unlock(&dev->hardware_lock);
++ return IRQ_RETVAL(IRQ_HANDLED);
++ }
++
++ iir = ite8709_read(dev, ITE8709_IIR);
++
++ switch (iir) {
++ case ITE8709_IIR_RFOI:
++ dprintk("fifo overrun, scheduling forced rearm just in case\n");
++ dev->force_rearm = 1;
++ tasklet_schedule(&dev->tasklet);
++ spin_unlock(&dev->hardware_lock);
++ return IRQ_RETVAL(IRQ_HANDLED);
++
++ case ITE8709_IIR_RDAI:
++ rfsr = ite8709_read(dev, ITE8709_RFSR);
++ fifo = rfsr & ITE8709_RFSR_MASK;
++ if (fifo > 32)
++ fifo = 32;
++ dprintk("iir: 0x%x rfsr: 0x%x fifo: %d\n", iir, rfsr, fifo);
++
++ if (dev->rearmed) {
++ do_gettimeofday(&curr_tv);
++ dev->acc_space += 1000000ull
++ * (curr_tv.tv_sec - dev->last_tv.tv_sec)
++ + (curr_tv.tv_usec - dev->last_tv.tv_usec);
++ dev->rearmed = 0;
++ }
++ for (i = 0; i < fifo; i++) {
++ data = ite8709_read(dev, i+ITE8709_FIFO_START);
++ data = ~data;
++ /* Loop through */
++ for (bit = 0; bit < 8; ++bit) {
++ if ((data >> bit) & 1) {
++ dev->acc_pulse += bit_duration;
++ if (dev->lastbit == 0) {
++ ite8709_add_read_queue(dev, 0,
++ dev->acc_space);
++ dev->acc_space = 0;
++ }
++ } else {
++ dev->acc_space += bit_duration;
++ if (dev->lastbit == 1) {
++ ite8709_add_read_queue(dev, 1,
++ dev->acc_pulse);
++ dev->acc_pulse = 0;
++ }
++ }
++ dev->lastbit = (data >> bit) & 1;
++ }
++ }
++ ite8709_write(dev, ITE8709_RFSR, 0);
++
++ if (dev->acc_space > CFG_TIMEOUT) {
++ dprintk("scheduling rearm IRQ\n");
++ do_gettimeofday(&dev->last_tv);
++ dev->force_rearm = 0;
++ tasklet_schedule(&dev->tasklet);
++ }
++
++ spin_unlock(&dev->hardware_lock);
++ return IRQ_RETVAL(IRQ_HANDLED);
++
++ default:
++ /* not our irq */
++ dprintk("unknown IRQ (shouldn't happen) !!\n");
++ spin_unlock(&dev->hardware_lock);
++ return IRQ_RETVAL(IRQ_NONE);
++ }
++}
++
++static void ite8709_rearm_irq(unsigned long data)
++{
++ struct ite8709_device *dev;
++ unsigned long flags;
++ dev = (struct ite8709_device *) data;
++
++ spin_lock_irqsave(&dev->hardware_lock, flags);
++ dev->device_busy = 1;
++ spin_unlock_irqrestore(&dev->hardware_lock, flags);
++
++ if (dev->force_rearm || dev->acc_space > CFG_TIMEOUT) {
++ dprintk("rearming IRQ\n");
++ ite8709_write_register(dev, IT8512_REG_RCR,
++ IT8512_RCR_RXACT | CFG_DCR);
++ ite8709_write_register(dev, IT8512_REG_MSTCR,
++ CFG_FIFOTL | IT8512_MSTCR_FIFOCLR);
++ ite8709_write_register(dev, IT8512_REG_RCR,
++ IT8512_RCR_RXEN | IT8512_RCR_RXACT | CFG_DCR);
++ if (!dev->force_rearm)
++ dev->rearmed = 1;
++ dev->force_rearm = 0;
++ }
++
++ spin_lock_irqsave(&dev->hardware_lock, flags);
++ dev->device_busy = 0;
++ spin_unlock_irqrestore(&dev->hardware_lock, flags);
++}
++
++static int ite8709_cleanup(struct ite8709_device *dev, int stage, int errno,
++ char *msg)
++{
++ if (msg != NULL)
++ printk(KERN_ERR LIRC_DRIVER_NAME ": %s\n", msg);
++
++ switch (stage) {
++ case 6:
++ if (dev->use_count > 0)
++ ite8709_drop_hardware(dev);
++ case 5:
++ free_irq(dev->irq, dev);
++ case 4:
++ release_region(dev->io, 2);
++ case 3:
++ lirc_unregister_driver(dev->driver.minor);
++ case 2:
++ lirc_buffer_free(dev->driver.rbuf);
++ kfree(dev->driver.rbuf);
++ case 1:
++ kfree(dev);
++ case 0:
++ ;
++ }
++
++ return errno;
++}
++
++static int __devinit ite8709_pnp_probe(struct pnp_dev *dev,
++ const struct pnp_device_id *dev_id)
++{
++ struct lirc_driver *driver;
++ struct ite8709_device *ite8709_dev;
++ int ret;
++
++ /* Check resources validity */
++ if (!pnp_irq_valid(dev, 0))
++ return ite8709_cleanup(NULL, 0, -ENODEV, "invalid IRQ");
++ if (!pnp_port_valid(dev, 2))
++ return ite8709_cleanup(NULL, 0, -ENODEV, "invalid IO port");
++
++ /* Allocate memory for device struct */
++ ite8709_dev = kzalloc(sizeof(struct ite8709_device), GFP_KERNEL);
++ if (ite8709_dev == NULL)
++ return ite8709_cleanup(NULL, 0, -ENOMEM, "kzalloc failed");
++ pnp_set_drvdata(dev, ite8709_dev);
++
++ /* Initialize device struct */
++ ite8709_dev->use_count = 0;
++ ite8709_dev->irq = pnp_irq(dev, 0);
++ ite8709_dev->io = pnp_port_start(dev, 2);
++ ite8709_dev->hardware_lock =
++ __SPIN_LOCK_UNLOCKED(ite8709_dev->hardware_lock);
++ ite8709_dev->acc_pulse = 0;
++ ite8709_dev->acc_space = 0;
++ ite8709_dev->lastbit = 0;
++ do_gettimeofday(&ite8709_dev->last_tv);
++ tasklet_init(&ite8709_dev->tasklet, ite8709_rearm_irq,
++ (long) ite8709_dev);
++ ite8709_dev->force_rearm = 0;
++ ite8709_dev->rearmed = 0;
++ ite8709_dev->device_busy = 0;
++
++ /* Initialize driver struct */
++ driver = &ite8709_dev->driver;
++ strcpy(driver->name, LIRC_DRIVER_NAME);
++ driver->minor = -1;
++ driver->code_length = sizeof(int) * 8;
++ driver->sample_rate = 0;
++ driver->features = LIRC_CAN_REC_MODE2;
++ driver->data = ite8709_dev;
++ driver->add_to_buf = NULL;
++ driver->set_use_inc = ite8709_set_use_inc;
++ driver->set_use_dec = ite8709_set_use_dec;
++ driver->dev = &dev->dev;
++ driver->owner = THIS_MODULE;
++
++ /* Initialize LIRC buffer */
++ driver->rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!driver->rbuf)
++ return ite8709_cleanup(ite8709_dev, 1, -ENOMEM,
++ "can't allocate lirc_buffer");
++ if (lirc_buffer_init(driver->rbuf, BUF_CHUNK_SIZE, BUF_SIZE))
++ return ite8709_cleanup(ite8709_dev, 1, -ENOMEM,
++ "lirc_buffer_init() failed");
++
++ /* Register LIRC driver */
++ ret = lirc_register_driver(driver);
++ if (ret < 0)
++ return ite8709_cleanup(ite8709_dev, 2, ret,
++ "lirc_register_driver() failed");
++
++ /* Reserve I/O port access */
++ if (!request_region(ite8709_dev->io, 2, LIRC_DRIVER_NAME))
++ return ite8709_cleanup(ite8709_dev, 3, -EBUSY,
++ "i/o port already in use");
++
++ /* Reserve IRQ line */
++ ret = request_irq(ite8709_dev->irq, ite8709_interrupt, 0,
++ LIRC_DRIVER_NAME, ite8709_dev);
++ if (ret < 0)
++ return ite8709_cleanup(ite8709_dev, 4, ret,
++ "IRQ already in use");
++
++ /* Initialize hardware */
++ ite8709_drop_hardware(ite8709_dev); /* Shutdown hw until first use */
++
++ printk(KERN_INFO LIRC_DRIVER_NAME ": device found : irq=%d io=0x%x\n",
++ ite8709_dev->irq, ite8709_dev->io);
++
++ return 0;
++}
++
++static void __devexit ite8709_pnp_remove(struct pnp_dev *dev)
++{
++ struct ite8709_device *ite8709_dev;
++ ite8709_dev = pnp_get_drvdata(dev);
++
++ ite8709_cleanup(ite8709_dev, 6, 0, NULL);
++
++ printk(KERN_INFO LIRC_DRIVER_NAME ": device removed\n");
++}
++
++#ifdef CONFIG_PM
++static int ite8709_pnp_suspend(struct pnp_dev *dev, pm_message_t state)
++{
++ struct ite8709_device *ite8709_dev;
++ ite8709_dev = pnp_get_drvdata(dev);
++
++ if (ite8709_dev->use_count > 0)
++ ite8709_drop_hardware(ite8709_dev);
++
++ return 0;
++}
++
++static int ite8709_pnp_resume(struct pnp_dev *dev)
++{
++ struct ite8709_device *ite8709_dev;
++ ite8709_dev = pnp_get_drvdata(dev);
++
++ if (ite8709_dev->use_count > 0)
++ ite8709_init_hardware(ite8709_dev);
++
++ return 0;
++}
++#else
++#define ite8709_pnp_suspend NULL
++#define ite8709_pnp_resume NULL
++#endif
++
++static const struct pnp_device_id pnp_dev_table[] = {
++ {"ITE8709", 0},
++ {}
++};
++
++MODULE_DEVICE_TABLE(pnp, pnp_dev_table);
++
++static struct pnp_driver ite8709_pnp_driver = {
++ .name = LIRC_DRIVER_NAME,
++ .probe = ite8709_pnp_probe,
++ .remove = __devexit_p(ite8709_pnp_remove),
++ .suspend = ite8709_pnp_suspend,
++ .resume = ite8709_pnp_resume,
++ .id_table = pnp_dev_table,
++};
++
++int init_module(void)
++{
++ return pnp_register_driver(&ite8709_pnp_driver);
++}
++
++void cleanup_module(void)
++{
++ pnp_unregister_driver(&ite8709_pnp_driver);
++}
++
++MODULE_DESCRIPTION("LIRC driver for ITE8709 CIR port");
++MODULE_AUTHOR("Grégory Lardière");
++MODULE_LICENSE("GPL");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
+diff --git a/drivers/input/lirc/lirc_mceusb.c b/drivers/input/lirc/lirc_mceusb.c
+new file mode 100644
+index 0000000..c0869d8
+--- /dev/null
++++ b/drivers/input/lirc/lirc_mceusb.c
+@@ -0,0 +1,1385 @@
++/*
++ * LIRC driver for Windows Media Center Edition USB Infrared Transceivers
++ *
++ * (C) by Martin A. Blatter <martin_a_blatter@yahoo.com>
++ *
++ * Transmitter support and reception code cleanup.
++ * (C) by Daniel Melander <lirc@rajidae.se>
++ *
++ * Original lirc_mceusb driver for 1st-gen device:
++ * Copyright (c) 2003-2004 Dan Conti <dconti@acm.wwu.edu>
++ *
++ * Original lirc_mceusb driver deprecated in favor of this driver, which
++ * supports the 1st-gen device now too. Transmit and receive support for
++ * the 1st-gen device added June-September 2009,
++ * by Jarod Wilson <jarod@wilsonet.com> and Patrick Calhoun <phineas@ou.edu>
++ *
++ * Derived from ATI USB driver by Paul Miller and the original
++ * MCE USB driver by Dan Conti (and now including chunks of the latter
++ * relevant to the 1st-gen device initialization)
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/kmod.h>
++#include <linux/smp_lock.h>
++#include <linux/completion.h>
++#include <linux/uaccess.h>
++#include <linux/usb.h>
++#include <linux/wait.h>
++#include <linux/time.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#define DRIVER_VERSION "1.90"
++#define DRIVER_AUTHOR "Daniel Melander <lirc@rajidae.se>, " \
++ "Martin Blatter <martin_a_blatter@yahoo.com>, " \
++ "Dan Conti <dconti@acm.wwu.edu>"
++#define DRIVER_DESC "Windows Media Center Edition USB IR Transceiver " \
++ "driver for LIRC"
++#define DRIVER_NAME "lirc_mceusb"
++
++#define USB_BUFLEN 32 /* USB reception buffer length */
++#define LIRCBUF_SIZE 256 /* LIRC work buffer length */
++
++/* MCE constants */
++#define MCE_CMDBUF_SIZE 384 /* MCE Command buffer length */
++#define MCE_TIME_UNIT 50 /* Approx 50us resolution */
++#define MCE_CODE_LENGTH 5 /* Normal length of packet (with header) */
++#define MCE_PACKET_SIZE 4 /* Normal length of packet (without header) */
++#define MCE_PACKET_HEADER 0x84 /* Actual header format is 0x80 + num_bytes */
++#define MCE_CONTROL_HEADER 0x9F /* MCE status header */
++#define MCE_TX_HEADER_LENGTH 3 /* # of bytes in the initializing tx header */
++#define MCE_MAX_CHANNELS 2 /* Two transmitters, hardware dependent? */
++#define MCE_DEFAULT_TX_MASK 0x03 /* Val opts: TX1=0x01, TX2=0x02, ALL=0x03 */
++#define MCE_PULSE_BIT 0x80 /* Pulse bit, MSB set == PULSE else SPACE */
++#define MCE_PULSE_MASK 0x7F /* Pulse mask */
++#define MCE_MAX_PULSE_LENGTH 0x7F /* Longest transmittable pulse symbol */
++#define MCE_PACKET_LENGTH_MASK 0x7F /* Pulse mask */
++
++
++/* module parameters */
++#ifdef CONFIG_USB_DEBUG
++static int debug = 1;
++#else
++static int debug;
++#endif
++
++/* general constants */
++#define SEND_FLAG_IN_PROGRESS 1
++#define SEND_FLAG_COMPLETE 2
++#define RECV_FLAG_IN_PROGRESS 3
++#define RECV_FLAG_COMPLETE 4
++
++#define MCEUSB_INBOUND 1
++#define MCEUSB_OUTBOUND 2
++
++#define VENDOR_PHILIPS 0x0471
++#define VENDOR_SMK 0x0609
++#define VENDOR_TATUNG 0x1460
++#define VENDOR_GATEWAY 0x107b
++#define VENDOR_SHUTTLE 0x1308
++#define VENDOR_SHUTTLE2 0x051c
++#define VENDOR_MITSUMI 0x03ee
++#define VENDOR_TOPSEED 0x1784
++#define VENDOR_RICAVISION 0x179d
++#define VENDOR_ITRON 0x195d
++#define VENDOR_FIC 0x1509
++#define VENDOR_LG 0x043e
++#define VENDOR_MICROSOFT 0x045e
++#define VENDOR_FORMOSA 0x147a
++#define VENDOR_FINTEK 0x1934
++#define VENDOR_PINNACLE 0x2304
++#define VENDOR_ECS 0x1019
++#define VENDOR_WISTRON 0x0fb8
++#define VENDOR_COMPRO 0x185b
++#define VENDOR_NORTHSTAR 0x04eb
++#define VENDOR_REALTEK 0x0bda
++#define VENDOR_TIVO 0x105a
++
++static struct usb_device_id mceusb_dev_table[] = {
++ /* Original Microsoft MCE IR Transceiver (often HP-branded) */
++ { USB_DEVICE(VENDOR_MICROSOFT, 0x006d) },
++ /* Philips Infrared Transceiver - Sahara branded */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x0608) },
++ /* Philips Infrared Transceiver - HP branded */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x060c) },
++ /* Philips SRM5100 */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x060d) },
++ /* Philips Infrared Transceiver - Omaura */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x060f) },
++ /* Philips Infrared Transceiver - Spinel plus */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x0613) },
++ /* Philips eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_PHILIPS, 0x0815) },
++ /* Realtek MCE IR Receiver */
++ { USB_DEVICE(VENDOR_REALTEK, 0x0161) },
++ /* SMK/Toshiba G83C0004D410 */
++ { USB_DEVICE(VENDOR_SMK, 0x031d) },
++ /* SMK eHome Infrared Transceiver (Sony VAIO) */
++ { USB_DEVICE(VENDOR_SMK, 0x0322) },
++ /* bundled with Hauppauge PVR-150 */
++ { USB_DEVICE(VENDOR_SMK, 0x0334) },
++ /* SMK eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_SMK, 0x0338) },
++ /* Tatung eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TATUNG, 0x9150) },
++ /* Shuttle eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_SHUTTLE, 0xc001) },
++ /* Shuttle eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_SHUTTLE2, 0xc001) },
++ /* Gateway eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_GATEWAY, 0x3009) },
++ /* Mitsumi */
++ { USB_DEVICE(VENDOR_MITSUMI, 0x2501) },
++ /* Topseed eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0001) },
++ /* Topseed HP eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0006) },
++ /* Topseed eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0007) },
++ /* Topseed eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0008) },
++ /* Topseed eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x000a) },
++ /* Topseed eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0011) },
++ /* Ricavision internal Infrared Transceiver */
++ { USB_DEVICE(VENDOR_RICAVISION, 0x0010) },
++ /* Itron ione Libra Q-11 */
++ { USB_DEVICE(VENDOR_ITRON, 0x7002) },
++ /* FIC eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_FIC, 0x9242) },
++ /* LG eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_LG, 0x9803) },
++ /* Microsoft MCE Infrared Transceiver */
++ { USB_DEVICE(VENDOR_MICROSOFT, 0x00a0) },
++ /* Formosa eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe015) },
++ /* Formosa21 / eHome Infrared Receiver */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe016) },
++ /* Formosa aim / Trust MCE Infrared Receiver */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe017) },
++ /* Formosa Industrial Computing / Beanbag Emulation Device */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe018) },
++ /* Formosa21 / eHome Infrared Receiver */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe03a) },
++ /* Formosa Industrial Computing AIM IR605/A */
++ { USB_DEVICE(VENDOR_FORMOSA, 0xe03c) },
++ /* Fintek eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_FINTEK, 0x0602) },
++ /* Fintek eHome Infrared Transceiver (in the AOpen MP45) */
++ { USB_DEVICE(VENDOR_FINTEK, 0x0702) },
++ /* Pinnacle Remote Kit */
++ { USB_DEVICE(VENDOR_PINNACLE, 0x0225) },
++ /* Elitegroup Computer Systems IR */
++ { USB_DEVICE(VENDOR_ECS, 0x0f38) },
++ /* Wistron Corp. eHome Infrared Receiver */
++ { USB_DEVICE(VENDOR_WISTRON, 0x0002) },
++ /* Compro K100 */
++ { USB_DEVICE(VENDOR_COMPRO, 0x3020) },
++ /* Compro K100 v2 */
++ { USB_DEVICE(VENDOR_COMPRO, 0x3082) },
++ /* Northstar Systems, Inc. eHome Infrared Transceiver */
++ { USB_DEVICE(VENDOR_NORTHSTAR, 0xe004) },
++ /* TiVo PC IR Receiver */
++ { USB_DEVICE(VENDOR_TIVO, 0x2000) },
++ /* Terminating entry */
++ { }
++};
++
++static struct usb_device_id gen3_list[] = {
++ { USB_DEVICE(VENDOR_PINNACLE, 0x0225) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0008) },
++ {}
++};
++
++static struct usb_device_id pinnacle_list[] = {
++ { USB_DEVICE(VENDOR_PINNACLE, 0x0225) },
++ {}
++};
++
++static struct usb_device_id microsoft_gen1_list[] = {
++ { USB_DEVICE(VENDOR_MICROSOFT, 0x006d) },
++ {}
++};
++
++static struct usb_device_id transmitter_mask_list[] = {
++ { USB_DEVICE(VENDOR_MICROSOFT, 0x006d) },
++ { USB_DEVICE(VENDOR_PHILIPS, 0x060c) },
++ { USB_DEVICE(VENDOR_SMK, 0x031d) },
++ { USB_DEVICE(VENDOR_SMK, 0x0322) },
++ { USB_DEVICE(VENDOR_SMK, 0x0334) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0001) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0006) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0007) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0008) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x000a) },
++ { USB_DEVICE(VENDOR_TOPSEED, 0x0011) },
++ { USB_DEVICE(VENDOR_PINNACLE, 0x0225) },
++ {}
++};
++
++/* data structure for each usb transceiver */
++struct mceusb_dev {
++
++ /* usb */
++ struct usb_device *usbdev;
++ struct urb *urb_in;
++ int devnum;
++ struct usb_endpoint_descriptor *usb_ep_in;
++ struct usb_endpoint_descriptor *usb_ep_out;
++
++ /* buffers and dma */
++ unsigned char *buf_in;
++ unsigned int len_in;
++ dma_addr_t dma_in;
++ dma_addr_t dma_out;
++ unsigned int overflow_len;
++
++ /* lirc */
++ struct lirc_driver *d;
++ int lircdata;
++ unsigned char is_pulse;
++ struct {
++ u32 connected:1;
++ u32 gen3:1;
++ u32 transmitter_mask_inverted:1;
++ u32 microsoft_gen1:1;
++ u32 reserved:28;
++ } flags;
++
++ unsigned char transmitter_mask;
++ unsigned int carrier_freq;
++
++ /* handle sending (init strings) */
++ int send_flags;
++ wait_queue_head_t wait_out;
++
++ struct mutex dev_lock;
++};
++
++/*
++ * MCE Device Command Strings
++ * Device command responses vary from device to device...
++ * - DEVICE_RESET resets the hardware to its default state
++ * - GET_REVISION fetches the hardware/software revision, common
++ * replies are ff 0b 45 ff 1b 08 and ff 0b 50 ff 1b 42
++ * - GET_CARRIER_FREQ gets the carrier mode and frequency of the
++ * device, with replies in the form of 9f 06 MM FF, where MM is 0-3,
++ * meaning clk of 10000000, 2500000, 625000 or 156250, and FF is
++ * ((clk / frequency) - 1)
++ * - GET_RX_TIMEOUT fetches the receiver timeout in units of 50us,
++ * response in the form of 9f 0c msb lsb
++ * - GET_TX_BITMASK fetches the transmitter bitmask, replies in
++ * the form of 9f 08 bm, where bm is the bitmask
++ * - GET_RX_SENSOR fetches the RX sensor setting -- long-range
++ * general use one or short-range learning one, in the form of
++ * 9f 14 ss, where ss is either 01 for long-range or 02 for short
++ * - SET_CARRIER_FREQ sets a new carrier mode and frequency
++ * - SET_TX_BITMASK sets the transmitter bitmask
++ * - SET_RX_TIMEOUT sets the receiver timeout
++ * - SET_RX_SENSOR sets which receiver sensor to use
++ */
++static char DEVICE_RESET[] = {0x00, 0xff, 0xaa};
++static char GET_REVISION[] = {0xff, 0x0b};
++static char GET_UNKNOWN[] = {0xff, 0x18};
++static char GET_CARRIER_FREQ[] = {0x9f, 0x07};
++static char GET_RX_TIMEOUT[] = {0x9f, 0x0d};
++static char GET_TX_BITMASK[] = {0x9f, 0x13};
++static char GET_RX_SENSOR[] = {0x9f, 0x15};
++/* sub in desired values in lower byte or bytes for full command */
++//static char SET_CARRIER_FREQ[] = {0x9f, 0x06, 0x00, 0x00};
++//static char SET_TX_BITMASK[] = {0x9f, 0x08, 0x00};
++//static char SET_RX_TIMEOUT[] = {0x9f, 0x0c, 0x00, 0x00};
++//static char SET_RX_SENSOR[] = {0x9f, 0x14, 0x00};
++
++static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf,
++ int len, bool out)
++{
++ char codes[USB_BUFLEN * 3 + 1];
++ char inout[9];
++ int i;
++ u8 cmd, subcmd, data1, data2;
++ struct device *dev = ir->d->dev;
++
++ if (len <= 0)
++ return;
++
++ if (ir->flags.microsoft_gen1 && len <= 2)
++ return;
++
++ for (i = 0; i < len && i < USB_BUFLEN; i++)
++ snprintf(codes + i * 3, 4, "%02x ", buf[i] & 0xFF);
++
++ dev_info(dev, "%sbound data: %s (length=%d)\n",
++ (out ? "out" : " in"), codes, len);
++
++ if (out)
++ strcpy(inout, "Request\0");
++ else
++ strcpy(inout, "Got\0");
++
++ cmd = buf[0] & 0xff;
++ subcmd = buf[1] & 0xff;
++ data1 = buf[2] & 0xff;
++ data2 = buf[3] & 0xff;
++
++ switch (cmd) {
++ case 0x00:
++ if (subcmd == 0xff && data1 == 0xaa)
++ dev_info(dev, "Device reset requested\n");
++ else
++ dev_info(dev, "Unknown command 0x%02x 0x%02x\n",
++ cmd, subcmd);
++ break;
++ case 0xff:
++ switch (subcmd) {
++ case 0x0b:
++ if (len == 2)
++ dev_info(dev, "Get hw/sw rev?\n");
++ else
++ dev_info(dev, "hw/sw rev 0x%02x 0x%02x "
++ "0x%02x 0x%02x\n", data1, data2,
++ buf[4], buf[5]);
++ break;
++ case 0xaa:
++ dev_info(dev, "Device reset requested\n");
++ break;
++ case 0xfe:
++ dev_info(dev, "Previous command not supported\n");
++ break;
++ case 0x18:
++ case 0x1b:
++ default:
++ dev_info(dev, "Unknown command 0x%02x 0x%02x\n",
++ cmd, subcmd);
++ break;
++ }
++ break;
++ case 0x9f:
++ switch (subcmd) {
++ case 0x03:
++ dev_info(dev, "Ping\n");
++ break;
++ case 0x04:
++ dev_info(dev, "Resp to 9f 05 of 0x%02x 0x%02x\n",
++ data1, data2);
++ break;
++ case 0x06:
++ dev_info(dev, "%s carrier mode and freq of 0x%02x 0x%02x\n",
++ inout, data1, data2);
++ break;
++ case 0x07:
++ dev_info(dev, "Get carrier mode and freq\n");
++ break;
++ case 0x08:
++ dev_info(dev, "%s transmit blaster mask of 0x%02x\n",
++ inout, data1);
++ break;
++ case 0x0c:
++ /* value is in units of 50us, so x*50/100 or x/2 ms */
++ dev_info(dev, "%s receive timeout of %d ms\n",
++ inout, ((data1 << 8) | data2) / 2);
++ break;
++ case 0x0d:
++ dev_info(dev, "Get receive timeout\n");
++ break;
++ case 0x13:
++ dev_info(dev, "Get transmit blaster mask\n");
++ break;
++ case 0x14:
++ dev_info(dev, "%s %s-range receive sensor in use\n",
++ inout, data1 == 0x02 ? "short" : "long");
++ break;
++ case 0x15:
++ if (len == 2)
++ dev_info(dev, "Get receive sensor\n");
++ else
++ dev_info(dev, "Received pulse count is %d\n",
++ ((data1 << 8) | data2));
++ break;
++ case 0xfe:
++ dev_info(dev, "Error! Hardware is likely wedged...\n");
++ break;
++ case 0x05:
++ case 0x09:
++ case 0x0f:
++ default:
++ dev_info(dev, "Unknown command 0x%02x 0x%02x\n",
++ cmd, subcmd);
++ break;
++ }
++ break;
++ default:
++ break;
++ }
++}
++
++static void usb_async_callback(struct urb *urb, struct pt_regs *regs)
++{
++ struct mceusb_dev *ir;
++ int len;
++
++ if (!urb)
++ return;
++
++ ir = urb->context;
++ if (ir) {
++ len = urb->actual_length;
++
++ dev_dbg(ir->d->dev, "callback called (status=%d len=%d)\n",
++ urb->status, len);
++
++ if (debug)
++ mceusb_dev_printdata(ir, urb->transfer_buffer, len, true);
++ }
++
++}
++
++/* request incoming or send outgoing usb packet - used to initialize remote */
++static void mce_request_packet(struct mceusb_dev *ir,
++ struct usb_endpoint_descriptor *ep,
++ unsigned char *data, int size, int urb_type)
++{
++ int res;
++ struct urb *async_urb;
++ unsigned char *async_buf;
++
++ if (urb_type == MCEUSB_OUTBOUND) {
++ async_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (unlikely(!async_urb)) {
++ dev_err(ir->d->dev, "Error, couldn't allocate urb!\n");
++ return;
++ }
++
++ async_buf = kzalloc(size, GFP_KERNEL);
++ if (!async_buf) {
++ dev_err(ir->d->dev, "Error, couldn't allocate buf!\n");
++ usb_free_urb(async_urb);
++ return;
++ }
++
++ /* outbound data */
++ usb_fill_int_urb(async_urb, ir->usbdev,
++ usb_sndintpipe(ir->usbdev, ep->bEndpointAddress),
++ async_buf, size, (usb_complete_t) usb_async_callback,
++ ir, ep->bInterval);
++ memcpy(async_buf, data, size);
++
++ } else if (urb_type == MCEUSB_INBOUND) {
++ /* standard request */
++ async_urb = ir->urb_in;
++ ir->send_flags = RECV_FLAG_IN_PROGRESS;
++
++ } else {
++ dev_err(ir->d->dev, "Error! Unknown urb type %d\n", urb_type);
++ return;
++ }
++
++ dev_dbg(ir->d->dev, "receive request called (size=%#x)\n", size);
++
++ async_urb->transfer_buffer_length = size;
++ async_urb->dev = ir->usbdev;
++
++ res = usb_submit_urb(async_urb, GFP_ATOMIC);
++ if (res) {
++ dev_dbg(ir->d->dev, "receive request FAILED! (res=%d)\n", res);
++ return;
++ }
++ dev_dbg(ir->d->dev, "receive request complete (res=%d)\n", res);
++}
++
++static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size)
++{
++ mce_request_packet(ir, ir->usb_ep_out, data, size, MCEUSB_OUTBOUND);
++}
++
++static void mce_sync_in(struct mceusb_dev *ir, unsigned char *data, int size)
++{
++ mce_request_packet(ir, ir->usb_ep_in, data, size, MCEUSB_INBOUND);
++}
++
++static int unregister_from_lirc(struct mceusb_dev *ir)
++{
++ struct lirc_driver *d = ir->d;
++ int devnum;
++ int rtn;
++
++ devnum = ir->devnum;
++ dev_dbg(ir->d->dev, "unregister from lirc called\n");
++
++ rtn = lirc_unregister_driver(d->minor);
++ if (rtn > 0) {
++ dev_info(ir->d->dev, "error in lirc_unregister minor: %d\n"
++ "Trying again...\n", d->minor);
++ if (rtn == -EBUSY) {
++ dev_info(ir->d->dev, "device is opened, will "
++ "unregister on close\n");
++ return -EAGAIN;
++ }
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++ rtn = lirc_unregister_driver(d->minor);
++ if (rtn > 0)
++ dev_info(ir->d->dev, "lirc_unregister failed\n");
++ }
++
++ if (rtn) {
++ dev_info(ir->d->dev, "didn't free resources\n");
++ return -EAGAIN;
++ }
++
++ dev_info(ir->d->dev, "usb remote disconnected\n");
++
++ lirc_buffer_free(d->rbuf);
++ kfree(d->rbuf);
++ kfree(d);
++ kfree(ir);
++ return 0;
++}
++
++static int mceusb_ir_open(void *data)
++{
++ struct mceusb_dev *ir = data;
++
++ if (!ir) {
++ printk(KERN_WARNING DRIVER_NAME
++ "[?]: %s called with no context\n", __func__);
++ return -EIO;
++ }
++
++ dev_dbg(ir->d->dev, "mceusb IR device opened\n");
++
++ if (!ir->flags.connected) {
++ if (!ir->usbdev)
++ return -ENOENT;
++ ir->flags.connected = 1;
++ }
++
++ return 0;
++}
++
++static void mceusb_ir_close(void *data)
++{
++ struct mceusb_dev *ir = data;
++
++ if (!ir) {
++ printk(KERN_WARNING DRIVER_NAME
++ "[?]: %s called with no context\n", __func__);
++ return;
++ }
++
++ dev_dbg(ir->d->dev, "mceusb IR device closed\n");
++
++ if (ir->flags.connected) {
++ mutex_lock(&ir->dev_lock);
++ ir->flags.connected = 0;
++ mutex_unlock(&ir->dev_lock);
++ }
++}
++
++static void send_packet_to_lirc(struct mceusb_dev *ir)
++{
++ if (ir->lircdata) {
++ lirc_buffer_write(ir->d->rbuf,
++ (unsigned char *) &ir->lircdata);
++ wake_up(&ir->d->rbuf->wait_poll);
++ ir->lircdata = 0;
++ }
++}
++
++static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len)
++{
++ int i, j;
++ int packet_len = 0;
++ int start_index = 0;
++
++ /* skip meaningless 0xb1 0x60 header bytes on orig receiver */
++ if (ir->flags.microsoft_gen1)
++ start_index = 2;
++
++ /* this should only trigger w/the 1st-gen mce receiver */
++ for (i = start_index; i < (start_index + ir->overflow_len) &&
++ i < buf_len; i++) {
++ /* rising/falling flank */
++ if (ir->is_pulse != (ir->buf_in[i] & MCE_PULSE_BIT)) {
++ send_packet_to_lirc(ir);
++ ir->is_pulse = ir->buf_in[i] & MCE_PULSE_BIT;
++ }
++
++ /* accumulate mce pulse/space values */
++ ir->lircdata += (ir->buf_in[i] & MCE_PULSE_MASK) *
++ MCE_TIME_UNIT;
++ ir->lircdata |= (ir->is_pulse ? PULSE_BIT : 0);
++ }
++ start_index += ir->overflow_len;
++ ir->overflow_len = 0;
++
++ for (i = start_index; i < buf_len; i++) {
++ /* decode mce packets of the form (84),AA,BB,CC,DD */
++
++ /* data headers */
++ if (ir->buf_in[i] >= 0x80 && ir->buf_in[i] <= 0x9e) {
++ /* decode packet data */
++ packet_len = ir->buf_in[i] & MCE_PACKET_LENGTH_MASK;
++ ir->overflow_len = i + 1 + packet_len - buf_len;
++ for (j = 1; j <= packet_len && (i + j < buf_len); j++) {
++ /* rising/falling flank */
++ if (ir->is_pulse !=
++ (ir->buf_in[i + j] & MCE_PULSE_BIT)) {
++ send_packet_to_lirc(ir);
++ ir->is_pulse =
++ ir->buf_in[i + j] &
++ MCE_PULSE_BIT;
++ }
++
++ /* accumulate mce pulse/space values */
++ ir->lircdata +=
++ (ir->buf_in[i + j] & MCE_PULSE_MASK) *
++ MCE_TIME_UNIT;
++ ir->lircdata |= (ir->is_pulse ? PULSE_BIT : 0);
++ }
++
++ i += packet_len;
++
++ /* status header (0x9F) */
++ } else if (ir->buf_in[i] == MCE_CONTROL_HEADER) {
++ /*
++ * A transmission containing one or more consecutive ir
++ * commands always ends with a GAP of 100ms followed by
++ * the sequence 0x9F 0x01 0x01 0x9F 0x15 0x00 0x00 0x80
++ */
++
++#if 0
++ Uncomment this if the last 100ms "infinity"-space should be transmitted
++ to lirc directly instead of at the beginning of the next transmission.
++ Changes pulse/space order.
++
++ if (++i < buf_len && ir->buf_in[i] == 0x01)
++ send_packet_to_lirc(ir);
++
++#endif
++
++ /* end decode loop */
++ dev_dbg(ir->d->dev, "[%d] %s: found control header\n",
++ ir->devnum, __func__);
++ ir->overflow_len = 0;
++ break;
++ } else {
++ dev_dbg(ir->d->dev, "[%d] %s: stray packet?\n",
++ ir->devnum, __func__);
++ ir->overflow_len = 0;
++ }
++ }
++
++ return;
++}
++
++static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs)
++{
++ struct mceusb_dev *ir;
++ int buf_len;
++
++ if (!urb)
++ return;
++
++ ir = urb->context;
++ if (!ir) {
++ usb_unlink_urb(urb);
++ return;
++ }
++
++ buf_len = urb->actual_length;
++
++ if (debug)
++ mceusb_dev_printdata(ir, urb->transfer_buffer, buf_len, false);
++
++ if (ir->send_flags == RECV_FLAG_IN_PROGRESS) {
++ ir->send_flags = SEND_FLAG_COMPLETE;
++ dev_dbg(ir->d->dev, "setup answer received %d bytes\n",
++ buf_len);
++ }
++
++ switch (urb->status) {
++ /* success */
++ case 0:
++ mceusb_process_ir_data(ir, buf_len);
++ break;
++
++ case -ECONNRESET:
++ case -ENOENT:
++ case -ESHUTDOWN:
++ usb_unlink_urb(urb);
++ return;
++
++ case -EPIPE:
++ default:
++ break;
++ }
++
++ usb_submit_urb(urb, GFP_ATOMIC);
++}
++
++
++static ssize_t mceusb_transmit_ir(struct file *file, const char *buf,
++ size_t n, loff_t *ppos)
++{
++ int i, count = 0, cmdcount = 0;
++ struct mceusb_dev *ir = NULL;
++ int wbuf[LIRCBUF_SIZE]; /* Workbuffer with values from lirc */
++ unsigned char cmdbuf[MCE_CMDBUF_SIZE]; /* MCE command buffer */
++ unsigned long signal_duration = 0; /* Singnal length in us */
++ struct timeval start_time, end_time;
++
++ do_gettimeofday(&start_time);
++
++ /* Retrieve lirc_driver data for the device */
++ ir = lirc_get_pdata(file);
++ if (!ir || !ir->usb_ep_out)
++ return -EFAULT;
++
++ if (n % sizeof(int))
++ return -EINVAL;
++ count = n / sizeof(int);
++
++ /* Check if command is within limits */
++ if (count > LIRCBUF_SIZE || count%2 == 0)
++ return -EINVAL;
++ if (copy_from_user(wbuf, buf, n))
++ return -EFAULT;
++
++ /* MCE tx init header */
++ cmdbuf[cmdcount++] = MCE_CONTROL_HEADER;
++ cmdbuf[cmdcount++] = 0x08;
++ cmdbuf[cmdcount++] = ir->transmitter_mask;
++
++ /* Generate mce packet data */
++ for (i = 0; (i < count) && (cmdcount < MCE_CMDBUF_SIZE); i++) {
++ signal_duration += wbuf[i];
++ wbuf[i] = wbuf[i] / MCE_TIME_UNIT;
++
++ do { /* loop to support long pulses/spaces > 127*50us=6.35ms */
++
++ /* Insert mce packet header every 4th entry */
++ if ((cmdcount < MCE_CMDBUF_SIZE) &&
++ (cmdcount - MCE_TX_HEADER_LENGTH) %
++ MCE_CODE_LENGTH == 0)
++ cmdbuf[cmdcount++] = MCE_PACKET_HEADER;
++
++ /* Insert mce packet data */
++ if (cmdcount < MCE_CMDBUF_SIZE)
++ cmdbuf[cmdcount++] =
++ (wbuf[i] < MCE_PULSE_BIT ?
++ wbuf[i] : MCE_MAX_PULSE_LENGTH) |
++ (i & 1 ? 0x00 : MCE_PULSE_BIT);
++ else
++ return -EINVAL;
++ } while ((wbuf[i] > MCE_MAX_PULSE_LENGTH) &&
++ (wbuf[i] -= MCE_MAX_PULSE_LENGTH));
++ }
++
++ /* Fix packet length in last header */
++ cmdbuf[cmdcount - (cmdcount - MCE_TX_HEADER_LENGTH) % MCE_CODE_LENGTH] =
++ 0x80 + (cmdcount - MCE_TX_HEADER_LENGTH) % MCE_CODE_LENGTH - 1;
++
++ /* Check if we have room for the empty packet at the end */
++ if (cmdcount >= MCE_CMDBUF_SIZE)
++ return -EINVAL;
++
++ /* All mce commands end with an empty packet (0x80) */
++ cmdbuf[cmdcount++] = 0x80;
++
++ /* Transmit the command to the mce device */
++ mce_async_out(ir, cmdbuf, cmdcount);
++
++ /*
++ * The lircd gap calculation expects the write function to
++ * wait the time it takes for the ircommand to be sent before
++ * it returns.
++ */
++ do_gettimeofday(&end_time);
++ signal_duration -= (end_time.tv_usec - start_time.tv_usec) +
++ (end_time.tv_sec - start_time.tv_sec) * 1000000;
++
++ /* delay with the closest number of ticks */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(usecs_to_jiffies(signal_duration));
++
++ return n;
++}
++
++static void set_transmitter_mask(struct mceusb_dev *ir, unsigned int mask)
++{
++ if (ir->flags.transmitter_mask_inverted)
++ ir->transmitter_mask = (mask != 0x03 ? mask ^ 0x03 : mask) << 1;
++ else
++ ir->transmitter_mask = mask;
++}
++
++
++/* Sets the send carrier frequency */
++static int set_send_carrier(struct mceusb_dev *ir, int carrier)
++{
++ int clk = 10000000;
++ int prescaler = 0, divisor = 0;
++ unsigned char cmdbuf[] = { 0x9F, 0x06, 0x01, 0x80 };
++
++ /* Carrier is changed */
++ if (ir->carrier_freq != carrier) {
++
++ if (carrier <= 0) {
++ ir->carrier_freq = carrier;
++ dev_dbg(ir->d->dev, "SET_CARRIER disabling carrier "
++ "modulation\n");
++ mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
++ return carrier;
++ }
++
++ for (prescaler = 0; prescaler < 4; ++prescaler) {
++ divisor = (clk >> (2 * prescaler)) / carrier;
++ if (divisor <= 0xFF) {
++ ir->carrier_freq = carrier;
++ cmdbuf[2] = prescaler;
++ cmdbuf[3] = divisor;
++ dev_dbg(ir->d->dev, "SET_CARRIER requesting "
++ "%d Hz\n", carrier);
++
++ /* Transmit new carrier to mce device */
++ mce_async_out(ir, cmdbuf, sizeof(cmdbuf));
++ return carrier;
++ }
++ }
++
++ return -EINVAL;
++
++ }
++
++ return carrier;
++}
++
++
++static int mceusb_lirc_ioctl(struct inode *node, struct file *filep,
++ unsigned int cmd, unsigned long arg)
++{
++ int result;
++ unsigned int ivalue;
++ unsigned long lvalue;
++ struct mceusb_dev *ir = NULL;
++
++ /* Retrieve lirc_driver data for the device */
++ ir = lirc_get_pdata(filep);
++ if (!ir || !ir->usb_ep_out)
++ return -EFAULT;
++
++
++ switch (cmd) {
++ case LIRC_SET_TRANSMITTER_MASK:
++
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++ switch (ivalue) {
++ case 0x01: /* Transmitter 1 => 0x04 */
++ case 0x02: /* Transmitter 2 => 0x02 */
++ case 0x03: /* Transmitter 1 & 2 => 0x06 */
++ set_transmitter_mask(ir, ivalue);
++ break;
++
++ default: /* Unsupported transmitter mask */
++ return MCE_MAX_CHANNELS;
++ }
++
++ dev_dbg(ir->d->dev, ": SET_TRANSMITTERS mask=%d\n", ivalue);
++ break;
++
++ case LIRC_GET_SEND_MODE:
++
++ result = put_user(LIRC_SEND2MODE(LIRC_CAN_SEND_PULSE &
++ LIRC_CAN_SEND_MASK),
++ (unsigned long *) arg);
++
++ if (result)
++ return result;
++ break;
++
++ case LIRC_SET_SEND_MODE:
++
++ result = get_user(lvalue, (unsigned long *) arg);
++
++ if (result)
++ return result;
++ if (lvalue != (LIRC_MODE_PULSE&LIRC_CAN_SEND_MASK))
++ return -EINVAL;
++ break;
++
++ case LIRC_SET_SEND_CARRIER:
++
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++
++ set_send_carrier(ir, ivalue);
++ break;
++
++ default:
++ return lirc_dev_fop_ioctl(node, filep, cmd, arg);
++ }
++
++ return 0;
++}
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .write = mceusb_transmit_ir,
++ .ioctl = mceusb_lirc_ioctl,
++ .read = lirc_dev_fop_read,
++ .poll = lirc_dev_fop_poll,
++ .open = lirc_dev_fop_open,
++ .release = lirc_dev_fop_close,
++};
++
++static int mceusb_gen1_init(struct mceusb_dev *ir)
++{
++ int i, ret;
++ char junk[64], data[8];
++ int partial = 0;
++
++ /*
++ * Clear off the first few messages. These look like calibration
++ * or test data, I can't really tell. This also flushes in case
++ * we have random ir data queued up.
++ */
++ for (i = 0; i < 40; i++)
++ usb_bulk_msg(ir->usbdev,
++ usb_rcvbulkpipe(ir->usbdev,
++ ir->usb_ep_in->bEndpointAddress),
++ junk, 64, &partial, HZ * 10);
++
++ ir->is_pulse = 1;
++
++ memset(data, 0, 8);
++
++ /* Get Status */
++ ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
++ USB_REQ_GET_STATUS, USB_DIR_IN,
++ 0, 0, data, 2, HZ * 3);
++
++ /* ret = usb_get_status( ir->usbdev, 0, 0, data ); */
++ dev_dbg(ir->d->dev, "%s - ret = %d status = 0x%x 0x%x\n", __func__,
++ ret, data[0], data[1]);
++
++ /*
++ * This is a strange one. They issue a set address to the device
++ * on the receive control pipe and expect a certain value pair back
++ */
++ memset(data, 0, 8);
++
++ ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
++ USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0,
++ data, 2, HZ * 3);
++ dev_dbg(ir->d->dev, "%s - ret = %d, devnum = %d\n",
++ __func__, ret, ir->usbdev->devnum);
++ dev_dbg(ir->d->dev, "%s - data[0] = %d, data[1] = %d\n",
++ __func__, data[0], data[1]);
++
++ /* set feature: bit rate 38400 bps */
++ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
++ USB_REQ_SET_FEATURE, USB_TYPE_VENDOR,
++ 0xc04e, 0x0000, NULL, 0, HZ * 3);
++
++ dev_dbg(ir->d->dev, "%s - ret = %d\n", __func__, ret);
++
++ /* bRequest 4: set char length to 8 bits */
++ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
++ 4, USB_TYPE_VENDOR,
++ 0x0808, 0x0000, NULL, 0, HZ * 3);
++ dev_dbg(ir->d->dev, "%s - retB = %d\n", __func__, ret);
++
++ /* bRequest 2: set handshaking to use DTR/DSR */
++ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
++ 2, USB_TYPE_VENDOR,
++ 0x0000, 0x0100, NULL, 0, HZ * 3);
++ dev_dbg(ir->d->dev, "%s - retC = %d\n", __func__, ret);
++
++ return ret;
++
++};
++
++static int mceusb_dev_probe(struct usb_interface *intf,
++ const struct usb_device_id *id)
++{
++ struct usb_device *dev = interface_to_usbdev(intf);
++ struct usb_host_interface *idesc;
++ struct usb_endpoint_descriptor *ep = NULL;
++ struct usb_endpoint_descriptor *ep_in = NULL;
++ struct usb_endpoint_descriptor *ep_out = NULL;
++ struct usb_host_config *config;
++ struct mceusb_dev *ir = NULL;
++ struct lirc_driver *driver = NULL;
++ struct lirc_buffer *rbuf = NULL;
++ int devnum, pipe, maxp;
++ int minor = 0;
++ int i;
++ char buf[63], name[128] = "";
++ int mem_failure = 0;
++ bool is_gen3;
++ bool is_microsoft_gen1;
++ bool is_pinnacle;
++
++ dev_dbg(&intf->dev, ": %s called\n", __func__);
++
++ usb_reset_device(dev);
++
++ config = dev->actconfig;
++
++ idesc = intf->cur_altsetting;
++
++ is_gen3 = usb_match_id(intf, gen3_list) ? 1 : 0;
++
++ is_microsoft_gen1 = usb_match_id(intf, microsoft_gen1_list) ? 1 : 0;
++
++ is_pinnacle = usb_match_id(intf, pinnacle_list) ? 1 : 0;
++
++ /* step through the endpoints to find first bulk in and out endpoint */
++ for (i = 0; i < idesc->desc.bNumEndpoints; ++i) {
++ ep = &idesc->endpoint[i].desc;
++
++ if ((ep_in == NULL)
++ && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
++ == USB_DIR_IN)
++ && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_BULK)
++ || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_INT))) {
++
++ dev_dbg(&intf->dev, ": acceptable inbound endpoint "
++ "found\n");
++ ep_in = ep;
++ ep_in->bmAttributes = USB_ENDPOINT_XFER_INT;
++ if (!is_pinnacle)
++ /*
++ * Ideally, we'd use what the device offers up,
++ * but that leads to non-functioning first and
++ * second-gen devices, and many devices have an
++ * invalid bInterval of 0. Pinnacle devices
++ * don't work witha bInterval of 1 though.
++ */
++ ep_in->bInterval = 1;
++ }
++
++ if ((ep_out == NULL)
++ && ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
++ == USB_DIR_OUT)
++ && (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_BULK)
++ || ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_INT))) {
++
++ dev_dbg(&intf->dev, ": acceptable outbound endpoint "
++ "found\n");
++ ep_out = ep;
++ ep_out->bmAttributes = USB_ENDPOINT_XFER_INT;
++ if (!is_pinnacle)
++ /*
++ * Ideally, we'd use what the device offers up,
++ * but that leads to non-functioning first and
++ * second-gen devices, and many devices have an
++ * invalid bInterval of 0. Pinnacle devices
++ * don't work witha bInterval of 1 though.
++ */
++ ep_out->bInterval = 1;
++ }
++ }
++ if (ep_in == NULL) {
++ dev_dbg(&intf->dev, ": inbound and/or endpoint not found\n");
++ return -ENODEV;
++ }
++
++ devnum = dev->devnum;
++ pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
++ maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
++
++ mem_failure = 0;
++ ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL);
++ if (!ir)
++ goto mem_alloc_fail;
++
++ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++ if (!driver)
++ goto mem_alloc_fail;
++
++ rbuf = kzalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!rbuf)
++ goto mem_alloc_fail;
++
++ if (lirc_buffer_init(rbuf, sizeof(int), LIRCBUF_SIZE))
++ goto mem_alloc_fail;
++
++ ir->buf_in = usb_buffer_alloc(dev, maxp, GFP_ATOMIC, &ir->dma_in);
++ if (!ir->buf_in)
++ goto buf_in_alloc_fail;
++
++ ir->urb_in = usb_alloc_urb(0, GFP_KERNEL);
++ if (!ir->urb_in)
++ goto urb_in_alloc_fail;
++
++ strcpy(driver->name, DRIVER_NAME);
++ driver->minor = -1;
++ driver->features = LIRC_CAN_SEND_PULSE |
++ LIRC_CAN_SET_TRANSMITTER_MASK |
++ LIRC_CAN_REC_MODE2 |
++ LIRC_CAN_SET_SEND_CARRIER;
++ driver->data = ir;
++ driver->rbuf = rbuf;
++ driver->set_use_inc = &mceusb_ir_open;
++ driver->set_use_dec = &mceusb_ir_close;
++ driver->code_length = sizeof(int) * 8;
++ driver->fops = &lirc_fops;
++ driver->dev = &intf->dev;
++ driver->owner = THIS_MODULE;
++
++ mutex_init(&ir->dev_lock);
++ init_waitqueue_head(&ir->wait_out);
++
++ minor = lirc_register_driver(driver);
++ if (minor < 0)
++ goto lirc_register_fail;
++
++ driver->minor = minor;
++ ir->d = driver;
++ ir->devnum = devnum;
++ ir->usbdev = dev;
++ ir->len_in = maxp;
++ ir->overflow_len = 0;
++ ir->flags.connected = 0;
++ ir->flags.gen3 = is_gen3;
++ ir->flags.microsoft_gen1 = is_microsoft_gen1;
++ ir->flags.transmitter_mask_inverted =
++ usb_match_id(intf, transmitter_mask_list) ? 0 : 1;
++
++ ir->lircdata = PULSE_MASK;
++ ir->is_pulse = 0;
++
++ /* ir->flags.transmitter_mask_inverted must be set */
++ set_transmitter_mask(ir, MCE_DEFAULT_TX_MASK);
++ /* Saving usb interface data for use by the transmitter routine */
++ ir->usb_ep_in = ep_in;
++ ir->usb_ep_out = ep_out;
++
++ if (dev->descriptor.iManufacturer
++ && usb_string(dev, dev->descriptor.iManufacturer,
++ buf, sizeof(buf)) > 0)
++ strlcpy(name, buf, sizeof(name));
++ if (dev->descriptor.iProduct
++ && usb_string(dev, dev->descriptor.iProduct,
++ buf, sizeof(buf)) > 0)
++ snprintf(name + strlen(name), sizeof(name) - strlen(name),
++ " %s", buf);
++
++ /* inbound data */
++ usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in,
++ maxp, (usb_complete_t) mceusb_dev_recv, ir, ep_in->bInterval);
++ ir->urb_in->transfer_dma = ir->dma_in;
++ ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
++
++ if (is_pinnacle) {
++ int usbret;
++
++ /*
++ * I have no idea why but this reset seems to be crucial to
++ * getting the device to do outbound IO correctly - without
++ * this the device seems to hang, ignoring all input - although
++ * IR signals are correctly sent from the device, no input is
++ * interpreted by the device and the host never does the
++ * completion routine
++ */
++ usbret = usb_reset_configuration(dev);
++ dev_info(ir->d->dev, "usb reset config ret %x\n", usbret);
++ }
++
++ /* initialize device */
++ if (ir->flags.gen3) {
++ mce_sync_in(ir, NULL, maxp);
++
++ /* device reset */
++ mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* get the carrier and frequency */
++ mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* get the transmitter bitmask */
++ mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* get receiver timeout value */
++ mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* get receiver sensor setting */
++ mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR));
++ mce_sync_in(ir, NULL, maxp);
++
++ } else if (ir->flags.microsoft_gen1) {
++ /* original ms mce device requires some additional setup */
++ mceusb_gen1_init(ir);
++
++ } else {
++ mce_sync_in(ir, NULL, maxp);
++ mce_sync_in(ir, NULL, maxp);
++
++ /* device reset */
++ mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* get hw/sw revision? */
++ mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION));
++ mce_sync_in(ir, NULL, maxp);
++
++ /* unknown what this actually returns... */
++ mce_async_out(ir, GET_UNKNOWN, sizeof(GET_UNKNOWN));
++ mce_sync_in(ir, NULL, maxp);
++ }
++
++ /*
++ * if we don't issue the correct number of receives (mce_sync_in())
++ * for each outbound, then the first few ir pulses will be interpreted
++ * by the usb_async_callback routine - we should ensure we have the
++ * right amount OR less - as the mceusb_dev_recv routine will handle
++ * the control packets OK - they start with 0x9f - but the async
++ * callback doesn't handle ir pulse packets
++ */
++ mce_sync_in(ir, NULL, maxp);
++
++ usb_set_intfdata(intf, ir);
++
++ dev_info(ir->d->dev, "Registered %s on usb%d:%d\n", name,
++ dev->bus->busnum, devnum);
++
++ return 0;
++
++ /* Error-handling path */
++lirc_register_fail:
++ usb_free_urb(ir->urb_in);
++urb_in_alloc_fail:
++ usb_buffer_free(dev, maxp, ir->buf_in, ir->dma_in);
++buf_in_alloc_fail:
++ lirc_buffer_free(rbuf);
++mem_alloc_fail:
++ kfree(rbuf);
++ kfree(driver);
++ kfree(ir);
++ dev_info(&intf->dev, "out of memory (code=%d)\n", mem_failure);
++
++ return -ENOMEM;
++}
++
++
++static void mceusb_dev_disconnect(struct usb_interface *intf)
++{
++ struct usb_device *dev = interface_to_usbdev(intf);
++ struct mceusb_dev *ir = usb_get_intfdata(intf);
++
++ usb_set_intfdata(intf, NULL);
++
++ if (!ir || !ir->d)
++ return;
++
++ ir->usbdev = NULL;
++ wake_up_all(&ir->wait_out);
++
++ mutex_lock(&ir->dev_lock);
++ usb_kill_urb(ir->urb_in);
++ usb_free_urb(ir->urb_in);
++ usb_buffer_free(dev, ir->len_in, ir->buf_in, ir->dma_in);
++ mutex_unlock(&ir->dev_lock);
++
++ unregister_from_lirc(ir);
++}
++
++static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message)
++{
++ struct mceusb_dev *ir = usb_get_intfdata(intf);
++ dev_info(ir->d->dev, "suspend\n");
++ usb_kill_urb(ir->urb_in);
++ return 0;
++}
++
++static int mceusb_dev_resume(struct usb_interface *intf)
++{
++ struct mceusb_dev *ir = usb_get_intfdata(intf);
++ dev_info(ir->d->dev, "resume\n");
++ if (usb_submit_urb(ir->urb_in, GFP_ATOMIC))
++ return -EIO;
++ return 0;
++}
++
++static struct usb_driver mceusb_dev_driver = {
++ .name = DRIVER_NAME,
++ .probe = mceusb_dev_probe,
++ .disconnect = mceusb_dev_disconnect,
++ .suspend = mceusb_dev_suspend,
++ .resume = mceusb_dev_resume,
++ .reset_resume = mceusb_dev_resume,
++ .id_table = mceusb_dev_table
++};
++
++static int __init mceusb_dev_init(void)
++{
++ int i;
++
++ printk(KERN_INFO DRIVER_NAME ": " DRIVER_DESC " " DRIVER_VERSION "\n");
++ printk(KERN_INFO DRIVER_NAME ": " DRIVER_AUTHOR "\n");
++ if (debug)
++ printk(KERN_DEBUG DRIVER_NAME ": debug mode enabled\n");
++
++ i = usb_register(&mceusb_dev_driver);
++ if (i < 0) {
++ printk(KERN_ERR DRIVER_NAME
++ ": usb register failed, result = %d\n", i);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++static void __exit mceusb_dev_exit(void)
++{
++ usb_deregister(&mceusb_dev_driver);
++}
++
++module_init(mceusb_dev_init);
++module_exit(mceusb_dev_exit);
++
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_LICENSE("GPL");
++MODULE_DEVICE_TABLE(usb, mceusb_dev_table);
++/* this was originally lirc_mceusb2, lirc_mceusb and lirc_mceusb2 merged now */
++MODULE_ALIAS("lirc_mceusb2");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Debug enabled or not");
+diff --git a/drivers/input/lirc/lirc_parallel.c b/drivers/input/lirc/lirc_parallel.c
+new file mode 100644
+index 0000000..bb57b3e
+--- /dev/null
++++ b/drivers/input/lirc/lirc_parallel.c
+@@ -0,0 +1,709 @@
++/*
++ * lirc_parallel.c
++ *
++ * lirc_parallel - device driver for infra-red signal receiving and
++ * transmitting unit built by the author
++ *
++ * Copyright (C) 1998 Christoph Bartelmus <lirc@bartelmus.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++/*** Includes ***/
++
++#ifdef CONFIG_SMP
++#error "--- Sorry, this driver is not SMP safe. ---"
++#endif
++
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/signal.h>
++#include <linux/fs.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/time.h>
++#include <linux/mm.h>
++#include <linux/delay.h>
++
++#include <linux/io.h>
++#include <linux/signal.h>
++#include <linux/irq.h>
++#include <linux/uaccess.h>
++#include <asm/div64.h>
++
++#include <linux/poll.h>
++#include <linux/parport.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#include "lirc_parallel.h"
++
++#define LIRC_DRIVER_NAME "lirc_parallel"
++
++#ifndef LIRC_IRQ
++#define LIRC_IRQ 7
++#endif
++#ifndef LIRC_PORT
++#define LIRC_PORT 0x378
++#endif
++#ifndef LIRC_TIMER
++#define LIRC_TIMER 65536
++#endif
++
++/*** Global Variables ***/
++
++static int debug;
++static int check_pselecd;
++
++unsigned int irq = LIRC_IRQ;
++unsigned int io = LIRC_PORT;
++#ifdef LIRC_TIMER
++unsigned int timer;
++unsigned int default_timer = LIRC_TIMER;
++#endif
++
++#define WBUF_SIZE (256)
++#define RBUF_SIZE (256) /* this must be a power of 2 larger than 1 */
++
++static int wbuf[WBUF_SIZE];
++static int rbuf[RBUF_SIZE];
++
++DECLARE_WAIT_QUEUE_HEAD(lirc_wait);
++
++unsigned int rptr;
++unsigned int wptr;
++unsigned int lost_irqs;
++int is_open;
++
++struct parport *pport;
++struct pardevice *ppdevice;
++int is_claimed;
++
++unsigned int tx_mask = 1;
++
++/*** Internal Functions ***/
++
++static unsigned int in(int offset)
++{
++ switch (offset) {
++ case LIRC_LP_BASE:
++ return parport_read_data(pport);
++ case LIRC_LP_STATUS:
++ return parport_read_status(pport);
++ case LIRC_LP_CONTROL:
++ return parport_read_control(pport);
++ }
++ return 0; /* make compiler happy */
++}
++
++static void out(int offset, int value)
++{
++ switch (offset) {
++ case LIRC_LP_BASE:
++ parport_write_data(pport, value);
++ break;
++ case LIRC_LP_CONTROL:
++ parport_write_control(pport, value);
++ break;
++ case LIRC_LP_STATUS:
++ printk(KERN_INFO "%s: attempt to write to status register\n",
++ LIRC_DRIVER_NAME);
++ break;
++ }
++}
++
++static unsigned int lirc_get_timer(void)
++{
++ return in(LIRC_PORT_TIMER) & LIRC_PORT_TIMER_BIT;
++}
++
++static unsigned int lirc_get_signal(void)
++{
++ return in(LIRC_PORT_SIGNAL) & LIRC_PORT_SIGNAL_BIT;
++}
++
++static void lirc_on(void)
++{
++ out(LIRC_PORT_DATA, tx_mask);
++}
++
++static void lirc_off(void)
++{
++ out(LIRC_PORT_DATA, 0);
++}
++
++static unsigned int init_lirc_timer(void)
++{
++ struct timeval tv, now;
++ unsigned int level, newlevel, timeelapsed, newtimer;
++ int count = 0;
++
++ do_gettimeofday(&tv);
++ tv.tv_sec++; /* wait max. 1 sec. */
++ level = lirc_get_timer();
++ do {
++ newlevel = lirc_get_timer();
++ if (level == 0 && newlevel != 0)
++ count++;
++ level = newlevel;
++ do_gettimeofday(&now);
++ } while (count < 1000 && (now.tv_sec < tv.tv_sec
++ || (now.tv_sec == tv.tv_sec
++ && now.tv_usec < tv.tv_usec)));
++
++ timeelapsed = ((now.tv_sec + 1 - tv.tv_sec)*1000000
++ + (now.tv_usec - tv.tv_usec));
++ if (count >= 1000 && timeelapsed > 0) {
++ if (default_timer == 0) {
++ /* autodetect timer */
++ newtimer = (1000000*count)/timeelapsed;
++ printk(KERN_INFO "%s: %u Hz timer detected\n",
++ LIRC_DRIVER_NAME, newtimer);
++ return newtimer;
++ } else {
++ newtimer = (1000000*count)/timeelapsed;
++ if (abs(newtimer - default_timer) > default_timer/10) {
++ /* bad timer */
++ printk(KERN_NOTICE "%s: bad timer: %u Hz\n",
++ LIRC_DRIVER_NAME, newtimer);
++ printk(KERN_NOTICE "%s: using default timer: "
++ "%u Hz\n",
++ LIRC_DRIVER_NAME, default_timer);
++ return default_timer;
++ } else {
++ printk(KERN_INFO "%s: %u Hz timer detected\n",
++ LIRC_DRIVER_NAME, newtimer);
++ return newtimer; /* use detected value */
++ }
++ }
++ } else {
++ printk(KERN_NOTICE "%s: no timer detected\n", LIRC_DRIVER_NAME);
++ return 0;
++ }
++}
++
++static int lirc_claim(void)
++{
++ if (parport_claim(ppdevice) != 0) {
++ printk(KERN_WARNING "%s: could not claim port\n",
++ LIRC_DRIVER_NAME);
++ printk(KERN_WARNING "%s: waiting for port becoming available"
++ "\n", LIRC_DRIVER_NAME);
++ if (parport_claim_or_block(ppdevice) < 0) {
++ printk(KERN_NOTICE "%s: could not claim port, giving"
++ " up\n", LIRC_DRIVER_NAME);
++ return 0;
++ }
++ }
++ out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP);
++ is_claimed = 1;
++ return 1;
++}
++
++/*** interrupt handler ***/
++
++static void rbuf_write(int signal)
++{
++ unsigned int nwptr;
++
++ nwptr = (wptr + 1) & (RBUF_SIZE - 1);
++ if (nwptr == rptr) {
++ /* no new signals will be accepted */
++ lost_irqs++;
++ printk(KERN_NOTICE "%s: buffer overrun\n", LIRC_DRIVER_NAME);
++ return;
++ }
++ rbuf[wptr] = signal;
++ wptr = nwptr;
++}
++
++static void irq_handler(void *blah)
++{
++ struct timeval tv;
++ static struct timeval lasttv;
++ static int init;
++ long signal;
++ int data;
++ unsigned int level, newlevel;
++ unsigned int timeout;
++
++ if (!module_refcount(THIS_MODULE))
++ return;
++
++ if (!is_claimed)
++ return;
++
++#if 0
++ /* disable interrupt */
++ disable_irq(irq);
++ out(LIRC_PORT_IRQ, in(LIRC_PORT_IRQ) & (~LP_PINTEN));
++#endif
++ if (check_pselecd && (in(1) & LP_PSELECD))
++ return;
++
++#ifdef LIRC_TIMER
++ if (init) {
++ do_gettimeofday(&tv);
++
++ signal = tv.tv_sec - lasttv.tv_sec;
++ if (signal > 15)
++ /* really long time */
++ data = PULSE_MASK;
++ else
++ data = (int) (signal*1000000 +
++ tv.tv_usec - lasttv.tv_usec +
++ LIRC_SFH506_DELAY);
++
++ rbuf_write(data); /* space */
++ } else {
++ if (timer == 0) {
++ /*
++ * wake up; we'll lose this signal, but it will be
++ * garbage if the device is turned on anyway
++ */
++ timer = init_lirc_timer();
++ /* enable_irq(irq); */
++ return;
++ }
++ init = 1;
++ }
++
++ timeout = timer/10; /* timeout after 1/10 sec. */
++ signal = 1;
++ level = lirc_get_timer();
++ do {
++ newlevel = lirc_get_timer();
++ if (level == 0 && newlevel != 0)
++ signal++;
++ level = newlevel;
++
++ /* giving up */
++ if (signal > timeout
++ || (check_pselecd && (in(1) & LP_PSELECD))) {
++ signal = 0;
++ printk(KERN_NOTICE "%s: timeout\n", LIRC_DRIVER_NAME);
++ break;
++ }
++ } while (lirc_get_signal());
++
++ if (signal != 0) {
++ /* ajust value to usecs */
++ unsigned long long helper;
++
++ helper = ((unsigned long long) signal)*1000000;
++ do_div(helper, timer);
++ signal = (long) helper;
++
++ if (signal > LIRC_SFH506_DELAY)
++ data = signal - LIRC_SFH506_DELAY;
++ else
++ data = 1;
++ rbuf_write(PULSE_BIT|data); /* pulse */
++ }
++ do_gettimeofday(&lasttv);
++#else
++ /* add your code here */
++#endif
++
++ wake_up_interruptible(&lirc_wait);
++
++ /* enable interrupt */
++ /*
++ enable_irq(irq);
++ out(LIRC_PORT_IRQ, in(LIRC_PORT_IRQ)|LP_PINTEN);
++ */
++}
++
++/*** file operations ***/
++
++static loff_t lirc_lseek(struct file *filep, loff_t offset, int orig)
++{
++ return -ESPIPE;
++}
++
++static ssize_t lirc_read(struct file *filep, char *buf, size_t n, loff_t *ppos)
++{
++ int result = 0;
++ int count = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ if (n % sizeof(int))
++ return -EINVAL;
++
++ add_wait_queue(&lirc_wait, &wait);
++ set_current_state(TASK_INTERRUPTIBLE);
++ while (count < n) {
++ if (rptr != wptr) {
++ if (copy_to_user(buf+count, (char *) &rbuf[rptr],
++ sizeof(int))) {
++ result = -EFAULT;
++ break;
++ }
++ rptr = (rptr + 1) & (RBUF_SIZE - 1);
++ count += sizeof(int);
++ } else {
++ if (filep->f_flags & O_NONBLOCK) {
++ result = -EAGAIN;
++ break;
++ }
++ if (signal_pending(current)) {
++ result = -ERESTARTSYS;
++ break;
++ }
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ }
++ }
++ remove_wait_queue(&lirc_wait, &wait);
++ set_current_state(TASK_RUNNING);
++ return count ? count : result;
++}
++
++static ssize_t lirc_write(struct file *filep, const char *buf, size_t n,
++ loff_t *ppos)
++{
++ int count;
++ unsigned int i;
++ unsigned int level, newlevel;
++ unsigned long flags;
++ int counttimer;
++
++ if (!is_claimed)
++ return -EBUSY;
++
++ if (n % sizeof(int))
++ return -EINVAL;
++
++ count = n / sizeof(int);
++
++ if (count > WBUF_SIZE || count % 2 == 0)
++ return -EINVAL;
++
++ if (copy_from_user(wbuf, buf, n))
++ return -EFAULT;
++
++#ifdef LIRC_TIMER
++ if (timer == 0) {
++ /* try again if device is ready */
++ timer = init_lirc_timer();
++ if (timer == 0)
++ return -EIO;
++ }
++
++ /* adjust values from usecs */
++ for (i = 0; i < count; i++) {
++ unsigned long long helper;
++
++ helper = ((unsigned long long) wbuf[i])*timer;
++ do_div(helper, 1000000);
++ wbuf[i] = (int) helper;
++ }
++
++ local_irq_save(flags);
++ i = 0;
++ while (i < count) {
++ level = lirc_get_timer();
++ counttimer = 0;
++ lirc_on();
++ do {
++ newlevel = lirc_get_timer();
++ if (level == 0 && newlevel != 0)
++ counttimer++;
++ level = newlevel;
++ if (check_pselecd && (in(1) & LP_PSELECD)) {
++ lirc_off();
++ local_irq_restore(flags);
++ return -EIO;
++ }
++ } while (counttimer < wbuf[i]);
++ i++;
++
++ lirc_off();
++ if (i == count)
++ break;
++ counttimer = 0;
++ do {
++ newlevel = lirc_get_timer();
++ if (level == 0 && newlevel != 0)
++ counttimer++;
++ level = newlevel;
++ if (check_pselecd && (in(1) & LP_PSELECD)) {
++ local_irq_restore(flags);
++ return -EIO;
++ }
++ } while (counttimer < wbuf[i]);
++ i++;
++ }
++ local_irq_restore(flags);
++#else
++ /* place code that handles write without external timer here */
++#endif
++ return n;
++}
++
++static unsigned int lirc_poll(struct file *file, poll_table *wait)
++{
++ poll_wait(file, &lirc_wait, wait);
++ if (rptr != wptr)
++ return POLLIN | POLLRDNORM;
++ return 0;
++}
++
++static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd,
++ unsigned long arg)
++{
++ int result;
++ unsigned long features = LIRC_CAN_SET_TRANSMITTER_MASK |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2;
++ unsigned long mode;
++ unsigned int ivalue;
++
++ switch (cmd) {
++ case LIRC_GET_FEATURES:
++ result = put_user(features, (unsigned long *) arg);
++ if (result)
++ return result;
++ break;
++ case LIRC_GET_SEND_MODE:
++ result = put_user(LIRC_MODE_PULSE, (unsigned long *) arg);
++ if (result)
++ return result;
++ break;
++ case LIRC_GET_REC_MODE:
++ result = put_user(LIRC_MODE_MODE2, (unsigned long *) arg);
++ if (result)
++ return result;
++ break;
++ case LIRC_SET_SEND_MODE:
++ result = get_user(mode, (unsigned long *) arg);
++ if (result)
++ return result;
++ if (mode != LIRC_MODE_PULSE)
++ return -EINVAL;
++ break;
++ case LIRC_SET_REC_MODE:
++ result = get_user(mode, (unsigned long *) arg);
++ if (result)
++ return result;
++ if (mode != LIRC_MODE_MODE2)
++ return -ENOSYS;
++ break;
++ case LIRC_SET_TRANSMITTER_MASK:
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++ if ((ivalue & LIRC_PARALLEL_TRANSMITTER_MASK) != ivalue)
++ return LIRC_PARALLEL_MAX_TRANSMITTERS;
++ tx_mask = ivalue;
++ break;
++ default:
++ return -ENOIOCTLCMD;
++ }
++ return 0;
++}
++
++static int lirc_open(struct inode *node, struct file *filep)
++{
++ if (module_refcount(THIS_MODULE) || !lirc_claim())
++ return -EBUSY;
++
++ parport_enable_irq(pport);
++
++ /* init read ptr */
++ rptr = 0;
++ wptr = 0;
++ lost_irqs = 0;
++
++ is_open = 1;
++ return 0;
++}
++
++static int lirc_close(struct inode *node, struct file *filep)
++{
++ if (is_claimed) {
++ is_claimed = 0;
++ parport_release(ppdevice);
++ }
++ is_open = 0;
++ return 0;
++}
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .llseek = lirc_lseek,
++ .read = lirc_read,
++ .write = lirc_write,
++ .poll = lirc_poll,
++ .ioctl = lirc_ioctl,
++ .open = lirc_open,
++ .release = lirc_close
++};
++
++static int set_use_inc(void *data)
++{
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++}
++
++static struct lirc_driver driver = {
++ .name = LIRC_DRIVER_NAME,
++ .minor = -1,
++ .code_length = 1,
++ .sample_rate = 0,
++ .data = NULL,
++ .add_to_buf = NULL,
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .fops = &lirc_fops,
++ .dev = NULL,
++ .owner = THIS_MODULE,
++};
++
++static int pf(void *handle);
++static void kf(void *handle);
++
++static struct timer_list poll_timer;
++static void poll_state(unsigned long ignored);
++
++static void poll_state(unsigned long ignored)
++{
++ printk(KERN_NOTICE "%s: time\n",
++ LIRC_DRIVER_NAME);
++ del_timer(&poll_timer);
++ if (is_claimed)
++ return;
++ kf(NULL);
++ if (!is_claimed) {
++ printk(KERN_NOTICE "%s: could not claim port, giving up\n",
++ LIRC_DRIVER_NAME);
++ init_timer(&poll_timer);
++ poll_timer.expires = jiffies + HZ;
++ poll_timer.data = (unsigned long)current;
++ poll_timer.function = poll_state;
++ add_timer(&poll_timer);
++ }
++}
++
++static int pf(void *handle)
++{
++ parport_disable_irq(pport);
++ is_claimed = 0;
++ return 0;
++}
++
++static void kf(void *handle)
++{
++ if (!is_open)
++ return;
++ if (!lirc_claim())
++ return;
++ parport_enable_irq(pport);
++ lirc_off();
++ /* this is a bit annoying when you actually print...*/
++ /*
++ printk(KERN_INFO "%s: reclaimed port\n", LIRC_DRIVER_NAME);
++ */
++}
++
++/*** module initialization and cleanup ***/
++
++static int __init lirc_parallel_init(void)
++{
++ pport = parport_find_base(io);
++ if (pport == NULL) {
++ printk(KERN_NOTICE "%s: no port at %x found\n",
++ LIRC_DRIVER_NAME, io);
++ return -ENXIO;
++ }
++ ppdevice = parport_register_device(pport, LIRC_DRIVER_NAME,
++ pf, kf, irq_handler, 0, NULL);
++ parport_put_port(pport);
++ if (ppdevice == NULL) {
++ printk(KERN_NOTICE "%s: parport_register_device() failed\n",
++ LIRC_DRIVER_NAME);
++ return -ENXIO;
++ }
++ if (parport_claim(ppdevice) != 0)
++ goto skip_init;
++ is_claimed = 1;
++ out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP);
++
++#ifdef LIRC_TIMER
++ if (debug)
++ out(LIRC_PORT_DATA, tx_mask);
++
++ timer = init_lirc_timer();
++
++#if 0 /* continue even if device is offline */
++ if (timer == 0) {
++ is_claimed = 0;
++ parport_release(pport);
++ parport_unregister_device(ppdevice);
++ return -EIO;
++ }
++
++#endif
++ if (debug)
++ out(LIRC_PORT_DATA, 0);
++#endif
++
++ is_claimed = 0;
++ parport_release(ppdevice);
++ skip_init:
++ driver.minor = lirc_register_driver(&driver);
++ if (driver.minor < 0) {
++ printk(KERN_NOTICE "%s: register_chrdev() failed\n",
++ LIRC_DRIVER_NAME);
++ parport_unregister_device(ppdevice);
++ return -EIO;
++ }
++ printk(KERN_INFO "%s: installed using port 0x%04x irq %d\n",
++ LIRC_DRIVER_NAME, io, irq);
++ return 0;
++}
++
++static void __exit lirc_parallel_exit(void)
++{
++ parport_unregister_device(ppdevice);
++ lirc_unregister_driver(driver.minor);
++}
++
++module_init(lirc_parallel_init);
++module_exit(lirc_parallel_exit);
++
++MODULE_DESCRIPTION("Infrared receiver driver for parallel ports.");
++MODULE_AUTHOR("Christoph Bartelmus");
++MODULE_LICENSE("GPL");
++
++module_param(io, int, S_IRUGO);
++MODULE_PARM_DESC(io, "I/O address base (0x3bc, 0x378 or 0x278)");
++
++module_param(irq, int, S_IRUGO);
++MODULE_PARM_DESC(irq, "Interrupt (7 or 5)");
++
++module_param(tx_mask, int, S_IRUGO);
++MODULE_PARM_DESC(tx_maxk, "Transmitter mask (default: 0x01)");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
++
++module_param(check_pselecd, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Check for printer (default: 0)");
+diff --git a/drivers/input/lirc/lirc_parallel.h b/drivers/input/lirc/lirc_parallel.h
+new file mode 100644
+index 0000000..4bed6af
+--- /dev/null
++++ b/drivers/input/lirc/lirc_parallel.h
+@@ -0,0 +1,26 @@
++/* lirc_parallel.h */
++
++#ifndef _LIRC_PARALLEL_H
++#define _LIRC_PARALLEL_H
++
++#include <linux/lp.h>
++
++#define LIRC_PORT_LEN 3
++
++#define LIRC_LP_BASE 0
++#define LIRC_LP_STATUS 1
++#define LIRC_LP_CONTROL 2
++
++#define LIRC_PORT_DATA LIRC_LP_BASE /* base */
++#define LIRC_PORT_TIMER LIRC_LP_STATUS /* status port */
++#define LIRC_PORT_TIMER_BIT LP_PBUSY /* busy signal */
++#define LIRC_PORT_SIGNAL LIRC_LP_STATUS /* status port */
++#define LIRC_PORT_SIGNAL_BIT LP_PACK /* ack signal */
++#define LIRC_PORT_IRQ LIRC_LP_CONTROL /* control port */
++
++#define LIRC_SFH506_DELAY 0 /* delay t_phl in usecs */
++
++#define LIRC_PARALLEL_MAX_TRANSMITTERS 8
++#define LIRC_PARALLEL_TRANSMITTER_MASK ((1<<LIRC_PARALLEL_MAX_TRANSMITTERS) - 1)
++
++#endif
+diff --git a/drivers/input/lirc/lirc_sasem.c b/drivers/input/lirc/lirc_sasem.c
+new file mode 100644
+index 0000000..4015684
+--- /dev/null
++++ b/drivers/input/lirc/lirc_sasem.c
+@@ -0,0 +1,931 @@
++/*
++ * lirc_sasem.c - USB remote support for LIRC
++ * Version 0.5
++ *
++ * Copyright (C) 2004-2005 Oliver Stabel <oliver.stabel@gmx.de>
++ * Tim Davies <tim@opensystems.net.au>
++ *
++ * This driver was derived from:
++ * Venky Raju <dev@venky.ws>
++ * "lirc_imon - "LIRC/VFD driver for Ahanix/Soundgraph IMON IR/VFD"
++ * Paul Miller <pmiller9@users.sourceforge.net>'s 2003-2004
++ * "lirc_atiusb - USB remote support for LIRC"
++ * Culver Consulting Services <henry@culcon.com>'s 2003
++ * "Sasem OnAir VFD/IR USB driver"
++ *
++ *
++ * NOTE - The LCDproc iMon driver should work with this module. More info at
++ * http://www.frogstorm.info/sasem
++ */
++
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <linux/usb.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++
++#define MOD_AUTHOR "Oliver Stabel <oliver.stabel@gmx.de>, " \
++ "Tim Davies <tim@opensystems.net.au>"
++#define MOD_DESC "USB Driver for Sasem Remote Controller V1.1"
++#define MOD_NAME "lirc_sasem"
++#define MOD_VERSION "0.5"
++
++#define VFD_MINOR_BASE 144 /* Same as LCD */
++#define DEVICE_NAME "lcd%d"
++
++#define BUF_CHUNK_SIZE 8
++#define BUF_SIZE 128
++
++#define IOCTL_LCD_CONTRAST 1
++
++/*** P R O T O T Y P E S ***/
++
++/* USB Callback prototypes */
++static int sasem_probe(struct usb_interface *interface,
++ const struct usb_device_id *id);
++static void sasem_disconnect(struct usb_interface *interface);
++static void usb_rx_callback(struct urb *urb);
++static void usb_tx_callback(struct urb *urb);
++
++/* VFD file_operations function prototypes */
++static int vfd_open(struct inode *inode, struct file *file);
++static int vfd_ioctl(struct inode *inode, struct file *file,
++ unsigned cmd, unsigned long arg);
++static int vfd_close(struct inode *inode, struct file *file);
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos);
++
++/* LIRC driver function prototypes */
++static int ir_open(void *data);
++static void ir_close(void *data);
++
++/* Driver init/exit prototypes */
++static int __init sasem_init(void);
++static void __exit sasem_exit(void);
++
++/*** G L O B A L S ***/
++
++struct sasem_context {
++
++ struct usb_device *dev;
++ int vfd_isopen; /* VFD port has been opened */
++ unsigned int vfd_contrast; /* VFD contrast */
++ int ir_isopen; /* IR port has been opened */
++ int dev_present; /* USB device presence */
++ struct mutex ctx_lock; /* to lock this object */
++ wait_queue_head_t remove_ok; /* For unexpected USB disconnects */
++
++ struct lirc_driver *driver;
++ struct usb_endpoint_descriptor *rx_endpoint;
++ struct usb_endpoint_descriptor *tx_endpoint;
++ struct urb *rx_urb;
++ struct urb *tx_urb;
++ unsigned char usb_rx_buf[8];
++ unsigned char usb_tx_buf[8];
++
++ struct tx_t {
++ unsigned char data_buf[32]; /* user data buffer */
++ struct completion finished; /* wait for write to finish */
++ atomic_t busy; /* write in progress */
++ int status; /* status of tx completion */
++ } tx;
++
++ /* for dealing with repeat codes (wish there was a toggle bit!) */
++ struct timeval presstime;
++ char lastcode[8];
++ int codesaved;
++};
++
++/* VFD file operations */
++static struct file_operations vfd_fops = {
++ .owner = THIS_MODULE,
++ .open = &vfd_open,
++ .write = &vfd_write,
++ .ioctl = &vfd_ioctl,
++ .release = &vfd_close,
++};
++
++/* USB Device ID for Sasem USB Control Board */
++static struct usb_device_id sasem_usb_id_table[] = {
++ /* Sasem USB Control Board */
++ { USB_DEVICE(0x11ba, 0x0101) },
++ /* Terminating entry */
++ {}
++};
++
++/* USB Device data */
++static struct usb_driver sasem_driver = {
++ .name = MOD_NAME,
++ .probe = sasem_probe,
++ .disconnect = sasem_disconnect,
++ .id_table = sasem_usb_id_table,
++};
++
++static struct usb_class_driver sasem_class = {
++ .name = DEVICE_NAME,
++ .fops = &vfd_fops,
++ .minor_base = VFD_MINOR_BASE,
++};
++
++/* to prevent races between open() and disconnect() */
++static DEFINE_MUTEX(disconnect_lock);
++
++static int debug;
++
++
++/*** M O D U L E C O D E ***/
++
++MODULE_AUTHOR(MOD_AUTHOR);
++MODULE_DESCRIPTION(MOD_DESC);
++MODULE_LICENSE("GPL");
++module_param(debug, int, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes (default: no)");
++
++static void delete_context(struct sasem_context *context)
++{
++ usb_free_urb(context->tx_urb); /* VFD */
++ usb_free_urb(context->rx_urb); /* IR */
++ lirc_buffer_free(context->driver->rbuf);
++ kfree(context->driver->rbuf);
++ kfree(context->driver);
++ kfree(context);
++
++ if (debug)
++ printk(KERN_INFO "%s: context deleted\n", __func__);
++}
++
++static void deregister_from_lirc(struct sasem_context *context)
++{
++ int retval;
++ int minor = context->driver->minor;
++
++ retval = lirc_unregister_driver(minor);
++ if (retval)
++ err("%s: unable to deregister from lirc (%d)",
++ __func__, retval);
++ else
++ printk(KERN_INFO "Deregistered Sasem driver (minor:%d)\n",
++ minor);
++
++}
++
++/**
++ * Called when the VFD device (e.g. /dev/usb/lcd)
++ * is opened by the application.
++ */
++static int vfd_open(struct inode *inode, struct file *file)
++{
++ struct usb_interface *interface;
++ struct sasem_context *context = NULL;
++ int subminor;
++ int retval = 0;
++
++ /* prevent races with disconnect */
++ mutex_lock(&disconnect_lock);
++
++ subminor = iminor(inode);
++ interface = usb_find_interface(&sasem_driver, subminor);
++ if (!interface) {
++ err("%s: could not find interface for minor %d",
++ __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++ context = usb_get_intfdata(interface);
++
++ if (!context) {
++ err("%s: no context found for minor %d",
++ __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (context->vfd_isopen) {
++ err("%s: VFD port is already open", __func__);
++ retval = -EBUSY;
++ } else {
++ context->vfd_isopen = 1;
++ file->private_data = context;
++ printk(KERN_INFO "VFD port opened\n");
++ }
++
++ mutex_unlock(&context->ctx_lock);
++
++exit:
++ mutex_unlock(&disconnect_lock);
++ return retval;
++}
++
++/**
++ * Called when the VFD device (e.g. /dev/usb/lcd)
++ * is closed by the application.
++ */
++static int vfd_ioctl(struct inode *inode, struct file *file,
++ unsigned cmd, unsigned long arg)
++{
++ struct sasem_context *context = NULL;
++
++ context = (struct sasem_context *) file->private_data;
++
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ switch (cmd) {
++ case IOCTL_LCD_CONTRAST:
++ if (arg > 1000)
++ arg = 1000;
++ context->vfd_contrast = (unsigned int)arg;
++ break;
++ default:
++ printk(KERN_INFO "Unknown IOCTL command\n");
++ mutex_unlock(&context->ctx_lock);
++ return -ENOIOCTLCMD; /* not supported */
++ }
++
++ mutex_unlock(&context->ctx_lock);
++ return 0;
++}
++
++/**
++ * Called when the VFD device (e.g. /dev/usb/lcd)
++ * is closed by the application.
++ */
++static int vfd_close(struct inode *inode, struct file *file)
++{
++ struct sasem_context *context = NULL;
++ int retval = 0;
++
++ context = (struct sasem_context *) file->private_data;
++
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (!context->vfd_isopen) {
++ err("%s: VFD is not open", __func__);
++ retval = -EIO;
++ } else {
++ context->vfd_isopen = 0;
++ printk(KERN_INFO "VFD port closed\n");
++ if (!context->dev_present && !context->ir_isopen) {
++
++ /* Device disconnected before close and IR port is
++ * not open. If IR port is open, context will be
++ * deleted by ir_close. */
++ mutex_unlock(&context->ctx_lock);
++ delete_context(context);
++ return retval;
++ }
++ }
++
++ mutex_unlock(&context->ctx_lock);
++ return retval;
++}
++
++/**
++ * Sends a packet to the VFD.
++ */
++static int send_packet(struct sasem_context *context)
++{
++ unsigned int pipe;
++ int interval = 0;
++ int retval = 0;
++
++ pipe = usb_sndintpipe(context->dev,
++ context->tx_endpoint->bEndpointAddress);
++ interval = context->tx_endpoint->bInterval;
++
++ usb_fill_int_urb(context->tx_urb, context->dev, pipe,
++ context->usb_tx_buf, sizeof(context->usb_tx_buf),
++ usb_tx_callback, context, interval);
++
++ context->tx_urb->actual_length = 0;
++
++ init_completion(&context->tx.finished);
++ atomic_set(&(context->tx.busy), 1);
++
++ retval = usb_submit_urb(context->tx_urb, GFP_KERNEL);
++ if (retval) {
++ atomic_set(&(context->tx.busy), 0);
++ err("%s: error submitting urb (%d)", __func__, retval);
++ } else {
++ /* Wait for transmission to complete (or abort) */
++ mutex_unlock(&context->ctx_lock);
++ wait_for_completion(&context->tx.finished);
++ mutex_lock(&context->ctx_lock);
++
++ retval = context->tx.status;
++ if (retval)
++ err("%s: packet tx failed (%d)", __func__, retval);
++ }
++
++ return retval;
++}
++
++/**
++ * Writes data to the VFD. The Sasem VFD is 2x16 characters
++ * and requires data in 9 consecutive USB interrupt packets,
++ * each packet carrying 8 bytes.
++ */
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos)
++{
++ int i;
++ int retval = 0;
++ struct sasem_context *context;
++
++ context = (struct sasem_context *) file->private_data;
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ if (!context->dev_present) {
++ err("%s: no Sasem device present", __func__);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ if (n_bytes <= 0 || n_bytes > 32) {
++ err("%s: invalid payload size", __func__);
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ retval = copy_from_user(context->tx.data_buf, buf, n_bytes);
++ if (retval < 0)
++ goto exit;
++
++ /* Pad with spaces */
++ for (i = n_bytes; i < 32; ++i)
++ context->tx.data_buf[i] = ' ';
++
++ /* Nine 8 byte packets to be sent */
++ /* NOTE: "\x07\x01\0\0\0\0\0\0" or "\x0c\0\0\0\0\0\0\0"
++ * will clear the VFD */
++ for (i = 0; i < 9; i++) {
++ switch (i) {
++ case 0:
++ memcpy(context->usb_tx_buf, "\x07\0\0\0\0\0\0\0", 8);
++ context->usb_tx_buf[1] = (context->vfd_contrast) ?
++ (0x2B - (context->vfd_contrast - 1) / 250)
++ : 0x2B;
++ break;
++ case 1:
++ memcpy(context->usb_tx_buf, "\x09\x01\0\0\0\0\0\0", 8);
++ break;
++ case 2:
++ memcpy(context->usb_tx_buf, "\x0b\x01\0\0\0\0\0\0", 8);
++ break;
++ case 3:
++ memcpy(context->usb_tx_buf, context->tx.data_buf, 8);
++ break;
++ case 4:
++ memcpy(context->usb_tx_buf,
++ context->tx.data_buf + 8, 8);
++ break;
++ case 5:
++ memcpy(context->usb_tx_buf, "\x09\x01\0\0\0\0\0\0", 8);
++ break;
++ case 6:
++ memcpy(context->usb_tx_buf, "\x0b\x02\0\0\0\0\0\0", 8);
++ break;
++ case 7:
++ memcpy(context->usb_tx_buf,
++ context->tx.data_buf + 16, 8);
++ break;
++ case 8:
++ memcpy(context->usb_tx_buf,
++ context->tx.data_buf + 24, 8);
++ break;
++ }
++ retval = send_packet(context);
++ if (retval) {
++
++ err("%s: send packet failed for packet #%d",
++ __func__, i);
++ goto exit;
++ }
++ }
++exit:
++
++ mutex_unlock(&context->ctx_lock);
++
++ return (!retval) ? n_bytes : retval;
++}
++
++/**
++ * Callback function for USB core API: transmit data
++ */
++static void usb_tx_callback(struct urb *urb)
++{
++ struct sasem_context *context;
++
++ if (!urb)
++ return;
++ context = (struct sasem_context *) urb->context;
++ if (!context)
++ return;
++
++ context->tx.status = urb->status;
++
++ /* notify waiters that write has finished */
++ atomic_set(&context->tx.busy, 0);
++ complete(&context->tx.finished);
++
++ return;
++}
++
++/**
++ * Called by lirc_dev when the application opens /dev/lirc
++ */
++static int ir_open(void *data)
++{
++ int retval = 0;
++ struct sasem_context *context;
++
++ /* prevent races with disconnect */
++ mutex_lock(&disconnect_lock);
++
++ context = (struct sasem_context *) data;
++
++ mutex_lock(&context->ctx_lock);
++
++ if (context->ir_isopen) {
++ err("%s: IR port is already open", __func__);
++ retval = -EBUSY;
++ goto exit;
++ }
++
++ usb_fill_int_urb(context->rx_urb, context->dev,
++ usb_rcvintpipe(context->dev,
++ context->rx_endpoint->bEndpointAddress),
++ context->usb_rx_buf, sizeof(context->usb_rx_buf),
++ usb_rx_callback, context, context->rx_endpoint->bInterval);
++
++ retval = usb_submit_urb(context->rx_urb, GFP_KERNEL);
++
++ if (retval)
++ err("%s: usb_submit_urb failed for ir_open (%d)",
++ __func__, retval);
++ else {
++ context->ir_isopen = 1;
++ printk(KERN_INFO "IR port opened\n");
++ }
++
++exit:
++ mutex_unlock(&context->ctx_lock);
++
++ mutex_unlock(&disconnect_lock);
++ return 0;
++}
++
++/**
++ * Called by lirc_dev when the application closes /dev/lirc
++ */
++static void ir_close(void *data)
++{
++ struct sasem_context *context;
++
++ context = (struct sasem_context *)data;
++ if (!context) {
++ err("%s: no context for device", __func__);
++ return;
++ }
++
++ mutex_lock(&context->ctx_lock);
++
++ usb_kill_urb(context->rx_urb);
++ context->ir_isopen = 0;
++ printk(KERN_INFO "IR port closed\n");
++
++ if (!context->dev_present) {
++
++ /*
++ * Device disconnected while IR port was
++ * still open. Driver was not deregistered
++ * at disconnect time, so do it now.
++ */
++ deregister_from_lirc(context);
++
++ if (!context->vfd_isopen) {
++
++ mutex_unlock(&context->ctx_lock);
++ delete_context(context);
++ return;
++ }
++ /* If VFD port is open, context will be deleted by vfd_close */
++ }
++
++ mutex_unlock(&context->ctx_lock);
++ return;
++}
++
++/**
++ * Process the incoming packet
++ */
++static void incoming_packet(struct sasem_context *context,
++ struct urb *urb)
++{
++ int len = urb->actual_length;
++ unsigned char *buf = urb->transfer_buffer;
++ long ms;
++ struct timeval tv;
++
++ if (len != 8) {
++ printk(KERN_WARNING "%s: invalid incoming packet size (%d)\n",
++ __func__, len);
++ return;
++ }
++
++#ifdef DEBUG
++ int i;
++ for (i = 0; i < 8; ++i)
++ printk(KERN_INFO "%02x ", buf[i]);
++ printk(KERN_INFO "\n");
++#endif
++
++ /*
++ * Lirc could deal with the repeat code, but we really need to block it
++ * if it arrives too late. Otherwise we could repeat the wrong code.
++ */
++
++ /* get the time since the last button press */
++ do_gettimeofday(&tv);
++ ms = (tv.tv_sec - context->presstime.tv_sec) * 1000 +
++ (tv.tv_usec - context->presstime.tv_usec) / 1000;
++
++ if (memcmp(buf, "\x08\0\0\0\0\0\0\0", 8) == 0) {
++ /*
++ * the repeat code is being sent, so we copy
++ * the old code to LIRC
++ */
++
++ /*
++ * NOTE: Only if the last code was less than 250ms ago
++ * - no one should be able to push another (undetected) button
++ * in that time and then get a false repeat of the previous
++ * press but it is long enough for a genuine repeat
++ */
++ if ((ms < 250) && (context->codesaved != 0)) {
++ memcpy(buf, &context->lastcode, 8);
++ context->presstime.tv_sec = tv.tv_sec;
++ context->presstime.tv_usec = tv.tv_usec;
++ }
++ } else {
++ /* save the current valid code for repeats */
++ memcpy(&context->lastcode, buf, 8);
++ /*
++ * set flag to signal a valid code was save;
++ * just for safety reasons
++ */
++ context->codesaved = 1;
++ context->presstime.tv_sec = tv.tv_sec;
++ context->presstime.tv_usec = tv.tv_usec;
++ }
++
++ lirc_buffer_write(context->driver->rbuf, buf);
++ wake_up(&context->driver->rbuf->wait_poll);
++}
++
++/**
++ * Callback function for USB core API: receive data
++ */
++static void usb_rx_callback(struct urb *urb)
++{
++ struct sasem_context *context;
++
++ if (!urb)
++ return;
++ context = (struct sasem_context *) urb->context;
++ if (!context)
++ return;
++
++ switch (urb->status) {
++
++ case -ENOENT: /* usbcore unlink successful! */
++ return;
++
++ case 0:
++ if (context->ir_isopen)
++ incoming_packet(context, urb);
++ break;
++
++ default:
++ printk(KERN_WARNING "%s: status (%d): ignored",
++ __func__, urb->status);
++ break;
++ }
++
++ usb_submit_urb(context->rx_urb, GFP_ATOMIC);
++ return;
++}
++
++
++
++/**
++ * Callback function for USB core API: Probe
++ */
++static int sasem_probe(struct usb_interface *interface,
++ const struct usb_device_id *id)
++{
++ struct usb_device *dev = NULL;
++ struct usb_host_interface *iface_desc = NULL;
++ struct usb_endpoint_descriptor *rx_endpoint = NULL;
++ struct usb_endpoint_descriptor *tx_endpoint = NULL;
++ struct urb *rx_urb = NULL;
++ struct urb *tx_urb = NULL;
++ struct lirc_driver *driver = NULL;
++ struct lirc_buffer *rbuf = NULL;
++ int lirc_minor = 0;
++ int num_endpoints;
++ int retval = 0;
++ int vfd_ep_found;
++ int ir_ep_found;
++ int alloc_status;
++ struct sasem_context *context = NULL;
++ int i;
++
++ printk(KERN_INFO "%s: found Sasem device\n", __func__);
++
++
++ dev = usb_get_dev(interface_to_usbdev(interface));
++ iface_desc = interface->cur_altsetting;
++ num_endpoints = iface_desc->desc.bNumEndpoints;
++
++ /*
++ * Scan the endpoint list and set:
++ * first input endpoint = IR endpoint
++ * first output endpoint = VFD endpoint
++ */
++
++ ir_ep_found = 0;
++ vfd_ep_found = 0;
++
++ for (i = 0; i < num_endpoints && !(ir_ep_found && vfd_ep_found); ++i) {
++
++ struct usb_endpoint_descriptor *ep;
++ int ep_dir;
++ int ep_type;
++ ep = &iface_desc->endpoint [i].desc;
++ ep_dir = ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK;
++ ep_type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++
++ if (!ir_ep_found &&
++ ep_dir == USB_DIR_IN &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++
++ rx_endpoint = ep;
++ ir_ep_found = 1;
++ if (debug)
++ printk(KERN_INFO "%s: found IR endpoint\n",
++ __func__);
++
++ } else if (!vfd_ep_found &&
++ ep_dir == USB_DIR_OUT &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++
++ tx_endpoint = ep;
++ vfd_ep_found = 1;
++ if (debug)
++ printk(KERN_INFO "%s: found VFD endpoint\n",
++ __func__);
++ }
++ }
++
++ /* Input endpoint is mandatory */
++ if (!ir_ep_found) {
++
++ err("%s: no valid input (IR) endpoint found.", __func__);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ if (!vfd_ep_found)
++ printk(KERN_INFO "%s: no valid output (VFD) endpoint found.\n",
++ __func__);
++
++
++ /* Allocate memory */
++ alloc_status = 0;
++
++ context = kzalloc(sizeof(struct sasem_context), GFP_KERNEL);
++ if (!context) {
++ err("%s: kzalloc failed for context", __func__);
++ alloc_status = 1;
++ goto alloc_status_switch;
++ }
++ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++ if (!driver) {
++ err("%s: kzalloc failed for lirc_driver", __func__);
++ alloc_status = 2;
++ goto alloc_status_switch;
++ }
++ rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!rbuf) {
++ err("%s: kmalloc failed for lirc_buffer", __func__);
++ alloc_status = 3;
++ goto alloc_status_switch;
++ }
++ if (lirc_buffer_init(rbuf, BUF_CHUNK_SIZE, BUF_SIZE)) {
++ err("%s: lirc_buffer_init failed", __func__);
++ alloc_status = 4;
++ goto alloc_status_switch;
++ }
++ rx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!rx_urb) {
++ err("%s: usb_alloc_urb failed for IR urb", __func__);
++ alloc_status = 5;
++ goto alloc_status_switch;
++ }
++ if (vfd_ep_found) {
++ tx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!tx_urb) {
++ err("%s: usb_alloc_urb failed for VFD urb",
++ __func__);
++ alloc_status = 6;
++ goto alloc_status_switch;
++ }
++ }
++
++ mutex_init(&context->ctx_lock);
++
++ strcpy(driver->name, MOD_NAME);
++ driver->minor = -1;
++ driver->code_length = 64;
++ driver->sample_rate = 0;
++ driver->features = LIRC_CAN_REC_LIRCCODE;
++ driver->data = context;
++ driver->rbuf = rbuf;
++ driver->set_use_inc = ir_open;
++ driver->set_use_dec = ir_close;
++ driver->dev = &interface->dev;
++ driver->owner = THIS_MODULE;
++
++ mutex_lock(&context->ctx_lock);
++
++ lirc_minor = lirc_register_driver(driver);
++ if (lirc_minor < 0) {
++ err("%s: lirc_register_driver failed", __func__);
++ alloc_status = 7;
++ mutex_unlock(&context->ctx_lock);
++ } else
++ printk(KERN_INFO "%s: Registered Sasem driver (minor:%d)\n",
++ __func__, lirc_minor);
++
++alloc_status_switch:
++
++ switch (alloc_status) {
++
++ case 7:
++ if (vfd_ep_found)
++ usb_free_urb(tx_urb);
++ case 6:
++ usb_free_urb(rx_urb);
++ case 5:
++ lirc_buffer_free(rbuf);
++ case 4:
++ kfree(rbuf);
++ case 3:
++ kfree(driver);
++ case 2:
++ kfree(context);
++ context = NULL;
++ case 1:
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ /* Needed while unregistering! */
++ driver->minor = lirc_minor;
++
++ context->dev = dev;
++ context->dev_present = 1;
++ context->rx_endpoint = rx_endpoint;
++ context->rx_urb = rx_urb;
++ if (vfd_ep_found) {
++ context->tx_endpoint = tx_endpoint;
++ context->tx_urb = tx_urb;
++ context->vfd_contrast = 1000; /* range 0 - 1000 */
++ }
++ context->driver = driver;
++
++ usb_set_intfdata(interface, context);
++
++ if (vfd_ep_found) {
++
++ if (debug)
++ printk(KERN_INFO "Registering VFD with sysfs\n");
++ if (usb_register_dev(interface, &sasem_class))
++ /* Not a fatal error, so ignore */
++ printk(KERN_INFO "%s: could not get a minor number "
++ "for VFD\n", __func__);
++ }
++
++ printk(KERN_INFO "%s: Sasem device on usb<%d:%d> initialized\n",
++ __func__, dev->bus->busnum, dev->devnum);
++
++ mutex_unlock(&context->ctx_lock);
++exit:
++ return retval;
++}
++
++/**
++ * Callback function for USB core API: disonnect
++ */
++static void sasem_disconnect(struct usb_interface *interface)
++{
++ struct sasem_context *context;
++
++ /* prevent races with ir_open()/vfd_open() */
++ mutex_lock(&disconnect_lock);
++
++ context = usb_get_intfdata(interface);
++ mutex_lock(&context->ctx_lock);
++
++ printk(KERN_INFO "%s: Sasem device disconnected\n", __func__);
++
++ usb_set_intfdata(interface, NULL);
++ context->dev_present = 0;
++
++ /* Stop reception */
++ usb_kill_urb(context->rx_urb);
++
++ /* Abort ongoing write */
++ if (atomic_read(&context->tx.busy)) {
++
++ usb_kill_urb(context->tx_urb);
++ wait_for_completion(&context->tx.finished);
++ }
++
++ /* De-register from lirc_dev if IR port is not open */
++ if (!context->ir_isopen)
++ deregister_from_lirc(context);
++
++ usb_deregister_dev(interface, &sasem_class);
++
++ mutex_unlock(&context->ctx_lock);
++
++ if (!context->ir_isopen && !context->vfd_isopen)
++ delete_context(context);
++
++ mutex_unlock(&disconnect_lock);
++}
++
++static int __init sasem_init(void)
++{
++ int rc;
++
++ printk(KERN_INFO MOD_DESC ", v" MOD_VERSION "\n");
++ printk(KERN_INFO MOD_AUTHOR "\n");
++
++ rc = usb_register(&sasem_driver);
++ if (rc < 0) {
++ err("%s: usb register failed (%d)", __func__, rc);
++ return -ENODEV;
++ }
++ return 0;
++}
++
++static void __exit sasem_exit(void)
++{
++ usb_deregister(&sasem_driver);
++ printk(KERN_INFO "module removed. Goodbye!\n");
++}
++
++
++module_init(sasem_init);
++module_exit(sasem_exit);
+diff --git a/drivers/input/lirc/lirc_serial.c b/drivers/input/lirc/lirc_serial.c
+new file mode 100644
+index 0000000..f4fcc37
+--- /dev/null
++++ b/drivers/input/lirc/lirc_serial.c
+@@ -0,0 +1,1317 @@
++/*
++ * lirc_serial.c
++ *
++ * lirc_serial - Device driver that records pulse- and pause-lengths
++ * (space-lengths) between DDCD event on a serial port.
++ *
++ * Copyright (C) 1996,97 Ralph Metzler <rjkm@thp.uni-koeln.de>
++ * Copyright (C) 1998 Trent Piepho <xyzzy@u.washington.edu>
++ * Copyright (C) 1998 Ben Pfaff <blp@gnu.org>
++ * Copyright (C) 1999 Christoph Bartelmus <lirc@bartelmus.de>
++ * Copyright (C) 2007 Andrei Tanas <andrei@tanas.ca> (suspend/resume support)
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++/*
++ * Steve's changes to improve transmission fidelity:
++ * - for systems with the rdtsc instruction and the clock counter, a
++ * send_pule that times the pulses directly using the counter.
++ * This means that the LIRC_SERIAL_TRANSMITTER_LATENCY fudge is
++ * not needed. Measurement shows very stable waveform, even where
++ * PCI activity slows the access to the UART, which trips up other
++ * versions.
++ * - For other system, non-integer-microsecond pulse/space lengths,
++ * done using fixed point binary. So, much more accurate carrier
++ * frequency.
++ * - fine tuned transmitter latency, taking advantage of fractional
++ * microseconds in previous change
++ * - Fixed bug in the way transmitter latency was accounted for by
++ * tuning the pulse lengths down - the send_pulse routine ignored
++ * this overhead as it timed the overall pulse length - so the
++ * pulse frequency was right but overall pulse length was too
++ * long. Fixed by accounting for latency on each pulse/space
++ * iteration.
++ *
++ * Steve Davies <steve@daviesfam.org> July 2001
++ */
++
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/kernel.h>
++#include <linux/serial_reg.h>
++#include <linux/time.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/wait.h>
++#include <linux/mm.h>
++#include <linux/delay.h>
++#include <linux/poll.h>
++#include <linux/platform_device.h>
++
++#include <asm/system.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++#include <linux/fcntl.h>
++#include <linux/spinlock.h>
++
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++#include <asm/hardware.h>
++#endif
++/* From Intel IXP42X Developer's Manual (#252480-005): */
++/* ftp://download.intel.com/design/network/manuals/25248005.pdf */
++#define UART_IE_IXP42X_UUE 0x40 /* IXP42X UART Unit enable */
++#define UART_IE_IXP42X_RTOIE 0x10 /* IXP42X Receiver Data Timeout int.enable */
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#define LIRC_DRIVER_NAME "lirc_serial"
++
++struct lirc_serial {
++ int signal_pin;
++ int signal_pin_change;
++ u8 on;
++ u8 off;
++ long (*send_pulse)(unsigned long length);
++ void (*send_space)(long length);
++ int features;
++ spinlock_t lock;
++};
++
++#define LIRC_HOMEBREW 0
++#define LIRC_IRDEO 1
++#define LIRC_IRDEO_REMOTE 2
++#define LIRC_ANIMAX 3
++#define LIRC_IGOR 4
++#define LIRC_NSLU2 5
++
++/*** module parameters ***/
++static int type;
++static int io;
++static int irq;
++static int iommap;
++static int ioshift;
++static int softcarrier = 1;
++static int share_irq;
++static int debug;
++static int sense = -1; /* -1 = auto, 0 = active high, 1 = active low */
++static int txsense; /* 0 = active high, 1 = active low */
++
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \
++ fmt, ## args); \
++ } while (0)
++
++/* forward declarations */
++static long send_pulse_irdeo(unsigned long length);
++static long send_pulse_homebrew(unsigned long length);
++static void send_space_irdeo(long length);
++static void send_space_homebrew(long length);
++
++static struct lirc_serial hardware[] = {
++ [LIRC_HOMEBREW] = {
++ .signal_pin = UART_MSR_DCD,
++ .signal_pin_change = UART_MSR_DDCD,
++ .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
++ .off = (UART_MCR_RTS | UART_MCR_OUT2),
++ .send_pulse = send_pulse_homebrew,
++ .send_space = send_space_homebrew,
++#ifdef CONFIG_LIRC_SERIAL_TRANSMITTER
++ .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SET_SEND_CARRIER |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2)
++#else
++ .features = LIRC_CAN_REC_MODE2
++#endif
++ },
++
++ [LIRC_IRDEO] = {
++ .signal_pin = UART_MSR_DSR,
++ .signal_pin_change = UART_MSR_DDSR,
++ .on = UART_MCR_OUT2,
++ .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2),
++ .send_pulse = send_pulse_irdeo,
++ .send_space = send_space_irdeo,
++ .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2)
++ },
++
++ [LIRC_IRDEO_REMOTE] = {
++ .signal_pin = UART_MSR_DSR,
++ .signal_pin_change = UART_MSR_DDSR,
++ .on = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2),
++ .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2),
++ .send_pulse = send_pulse_irdeo,
++ .send_space = send_space_irdeo,
++ .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2)
++ },
++
++ [LIRC_ANIMAX] = {
++ .signal_pin = UART_MSR_DCD,
++ .signal_pin_change = UART_MSR_DDCD,
++ .on = 0,
++ .off = (UART_MCR_RTS | UART_MCR_DTR | UART_MCR_OUT2),
++ .send_pulse = NULL,
++ .send_space = NULL,
++ .features = LIRC_CAN_REC_MODE2
++ },
++
++ [LIRC_IGOR] = {
++ .signal_pin = UART_MSR_DSR,
++ .signal_pin_change = UART_MSR_DDSR,
++ .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
++ .off = (UART_MCR_RTS | UART_MCR_OUT2),
++ .send_pulse = send_pulse_homebrew,
++ .send_space = send_space_homebrew,
++#ifdef CONFIG_LIRC_SERIAL_TRANSMITTER
++ .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SET_SEND_CARRIER |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2)
++#else
++ .features = LIRC_CAN_REC_MODE2
++#endif
++ },
++
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ /*
++ * Modified Linksys Network Storage Link USB 2.0 (NSLU2):
++ * We receive on CTS of the 2nd serial port (R142,LHS), we
++ * transmit with a IR diode between GPIO[1] (green status LED),
++ * and ground (Matthias Goebl <matthias.goebl@goebl.net>).
++ * See also http://www.nslu2-linux.org for this device
++ */
++ [LIRC_NSLU2] = {
++ .signal_pin = UART_MSR_CTS,
++ .signal_pin_change = UART_MSR_DCTS,
++ .on = (UART_MCR_RTS | UART_MCR_OUT2 | UART_MCR_DTR),
++ .off = (UART_MCR_RTS | UART_MCR_OUT2),
++ .send_pulse = send_pulse_homebrew,
++ .send_space = send_space_homebrew,
++#ifdef CONFIG_LIRC_SERIAL_TRANSMITTER
++ .features = (LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SET_SEND_CARRIER |
++ LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2)
++#else
++ .features = LIRC_CAN_REC_MODE2
++#endif
++ },
++#endif
++
++};
++
++#define RS_ISR_PASS_LIMIT 256
++
++/*
++ * A long pulse code from a remote might take up to 300 bytes. The
++ * daemon should read the bytes as soon as they are generated, so take
++ * the number of keys you think you can push before the daemon runs
++ * and multiply by 300. The driver will warn you if you overrun this
++ * buffer. If you have a slow computer or non-busmastering IDE disks,
++ * maybe you will need to increase this.
++ */
++
++/* This MUST be a power of two! It has to be larger than 1 as well. */
++
++#define RBUF_LEN 256
++#define WBUF_LEN 256
++
++static struct timeval lasttv = {0, 0};
++
++static struct lirc_buffer rbuf;
++
++static int wbuf[WBUF_LEN];
++
++static unsigned int freq = 38000;
++static unsigned int duty_cycle = 50;
++
++/* Initialized in init_timing_params() */
++static unsigned long period;
++static unsigned long pulse_width;
++static unsigned long space_width;
++
++#if defined(__i386__)
++/*
++ * From:
++ * Linux I/O port programming mini-HOWTO
++ * Author: Riku Saikkonen <Riku.Saikkonen@hut.fi>
++ * v, 28 December 1997
++ *
++ * [...]
++ * Actually, a port I/O instruction on most ports in the 0-0x3ff range
++ * takes almost exactly 1 microsecond, so if you're, for example, using
++ * the parallel port directly, just do additional inb()s from that port
++ * to delay.
++ * [...]
++ */
++/* transmitter latency 1.5625us 0x1.90 - this figure arrived at from
++ * comment above plus trimming to match actual measured frequency.
++ * This will be sensitive to cpu speed, though hopefully most of the 1.5us
++ * is spent in the uart access. Still - for reference test machine was a
++ * 1.13GHz Athlon system - Steve
++ */
++
++/*
++ * changed from 400 to 450 as this works better on slower machines;
++ * faster machines will use the rdtsc code anyway
++ */
++#define LIRC_SERIAL_TRANSMITTER_LATENCY 450
++
++#else
++
++/* does anybody have information on other platforms ? */
++/* 256 = 1<<8 */
++#define LIRC_SERIAL_TRANSMITTER_LATENCY 256
++
++#endif /* __i386__ */
++/*
++ * FIXME: should we be using hrtimers instead of this
++ * LIRC_SERIAL_TRANSMITTER_LATENCY nonsense?
++ */
++
++/* fetch serial input packet (1 byte) from register offset */
++static u8 sinp(int offset)
++{
++ if (iommap != 0)
++ /* the register is memory-mapped */
++ offset <<= ioshift;
++
++ return inb(io + offset);
++}
++
++/* write serial output packet (1 byte) of value to register offset */
++static void soutp(int offset, u8 value)
++{
++ if (iommap != 0)
++ /* the register is memory-mapped */
++ offset <<= ioshift;
++
++ outb(value, io + offset);
++}
++
++static void on(void)
++{
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ /*
++ * On NSLU2, we put the transmit diode between the output of the green
++ * status LED and ground
++ */
++ if (type == LIRC_NSLU2) {
++ gpio_line_set(NSLU2_LED_GRN, IXP4XX_GPIO_LOW);
++ return;
++ }
++#endif
++ if (txsense)
++ soutp(UART_MCR, hardware[type].off);
++ else
++ soutp(UART_MCR, hardware[type].on);
++}
++
++static void off(void)
++{
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ if (type == LIRC_NSLU2) {
++ gpio_line_set(NSLU2_LED_GRN, IXP4XX_GPIO_HIGH);
++ return;
++ }
++#endif
++ if (txsense)
++ soutp(UART_MCR, hardware[type].on);
++ else
++ soutp(UART_MCR, hardware[type].off);
++}
++
++#ifndef MAX_UDELAY_MS
++#define MAX_UDELAY_US 5000
++#else
++#define MAX_UDELAY_US (MAX_UDELAY_MS*1000)
++#endif
++
++static void safe_udelay(unsigned long usecs)
++{
++ while (usecs > MAX_UDELAY_US) {
++ udelay(MAX_UDELAY_US);
++ usecs -= MAX_UDELAY_US;
++ }
++ udelay(usecs);
++}
++
++#ifdef USE_RDTSC
++/*
++ * This is an overflow/precision juggle, complicated in that we can't
++ * do long long divide in the kernel
++ */
++
++/*
++ * When we use the rdtsc instruction to measure clocks, we keep the
++ * pulse and space widths as clock cycles. As this is CPU speed
++ * dependent, the widths must be calculated in init_port and ioctl
++ * time
++ */
++
++/* So send_pulse can quickly convert microseconds to clocks */
++static unsigned long conv_us_to_clocks;
++
++static int init_timing_params(unsigned int new_duty_cycle,
++ unsigned int new_freq)
++{
++ unsigned long long loops_per_sec, work;
++
++ duty_cycle = new_duty_cycle;
++ freq = new_freq;
++
++ loops_per_sec = current_cpu_data.loops_per_jiffy;
++ loops_per_sec *= HZ;
++
++ /* How many clocks in a microsecond?, avoiding long long divide */
++ work = loops_per_sec;
++ work *= 4295; /* 4295 = 2^32 / 1e6 */
++ conv_us_to_clocks = (work >> 32);
++
++ /*
++ * Carrier period in clocks, approach good up to 32GHz clock,
++ * gets carrier frequency within 8Hz
++ */
++ period = loops_per_sec >> 3;
++ period /= (freq >> 3);
++
++ /* Derive pulse and space from the period */
++ pulse_width = period * duty_cycle / 100;
++ space_width = period - pulse_width;
++ dprintk("in init_timing_params, freq=%d, duty_cycle=%d, "
++ "clk/jiffy=%ld, pulse=%ld, space=%ld, "
++ "conv_us_to_clocks=%ld\n",
++ freq, duty_cycle, current_cpu_data.loops_per_jiffy,
++ pulse_width, space_width, conv_us_to_clocks);
++ return 0;
++}
++#else /* ! USE_RDTSC */
++static int init_timing_params(unsigned int new_duty_cycle,
++ unsigned int new_freq)
++{
++/*
++ * period, pulse/space width are kept with 8 binary places -
++ * IE multiplied by 256.
++ */
++ if (256 * 1000000L / new_freq * new_duty_cycle / 100 <=
++ LIRC_SERIAL_TRANSMITTER_LATENCY)
++ return -EINVAL;
++ if (256 * 1000000L / new_freq * (100 - new_duty_cycle) / 100 <=
++ LIRC_SERIAL_TRANSMITTER_LATENCY)
++ return -EINVAL;
++ duty_cycle = new_duty_cycle;
++ freq = new_freq;
++ period = 256 * 1000000L / freq;
++ pulse_width = period * duty_cycle / 100;
++ space_width = period - pulse_width;
++ dprintk("in init_timing_params, freq=%d pulse=%ld, "
++ "space=%ld\n", freq, pulse_width, space_width);
++ return 0;
++}
++#endif /* USE_RDTSC */
++
++
++/* return value: space length delta */
++
++static long send_pulse_irdeo(unsigned long length)
++{
++ long rawbits, ret;
++ int i;
++ unsigned char output;
++ unsigned char chunk, shifted;
++
++ /* how many bits have to be sent ? */
++ rawbits = length * 1152 / 10000;
++ if (duty_cycle > 50)
++ chunk = 3;
++ else
++ chunk = 1;
++ for (i = 0, output = 0x7f; rawbits > 0; rawbits -= 3) {
++ shifted = chunk << (i * 3);
++ shifted >>= 1;
++ output &= (~shifted);
++ i++;
++ if (i == 3) {
++ soutp(UART_TX, output);
++ while (!(sinp(UART_LSR) & UART_LSR_THRE))
++ ;
++ output = 0x7f;
++ i = 0;
++ }
++ }
++ if (i != 0) {
++ soutp(UART_TX, output);
++ while (!(sinp(UART_LSR) & UART_LSR_TEMT))
++ ;
++ }
++
++ if (i == 0)
++ ret = (-rawbits) * 10000 / 1152;
++ else
++ ret = (3 - i) * 3 * 10000 / 1152 + (-rawbits) * 10000 / 1152;
++
++ return ret;
++}
++
++#ifdef USE_RDTSC
++/* Version that uses Pentium rdtsc instruction to measure clocks */
++
++/*
++ * This version does sub-microsecond timing using rdtsc instruction,
++ * and does away with the fudged LIRC_SERIAL_TRANSMITTER_LATENCY
++ * Implicitly i586 architecture... - Steve
++ */
++
++static long send_pulse_homebrew_softcarrier(unsigned long length)
++{
++ int flag;
++ unsigned long target, start, now;
++
++ /* Get going quick as we can */
++ rdtscl(start);
++ on();
++ /* Convert length from microseconds to clocks */
++ length *= conv_us_to_clocks;
++ /* And loop till time is up - flipping at right intervals */
++ now = start;
++ target = pulse_width;
++ flag = 1;
++ /*
++ * FIXME: This looks like a hard busy wait, without even an occasional,
++ * polite, cpu_relax() call. There's got to be a better way?
++ *
++ * The i2c code has the result of a lot of bit-banging work, I wonder if
++ * there's something there which could be helpful here.
++ */
++ while ((now - start) < length) {
++ /* Delay till flip time */
++ do {
++ rdtscl(now);
++ } while ((now - start) < target);
++
++ /* flip */
++ if (flag) {
++ rdtscl(now);
++ off();
++ target += space_width;
++ } else {
++ rdtscl(now); on();
++ target += pulse_width;
++ }
++ flag = !flag;
++ }
++ rdtscl(now);
++ return ((now - start) - length) / conv_us_to_clocks;
++}
++#else /* ! USE_RDTSC */
++/* Version using udelay() */
++
++/*
++ * here we use fixed point arithmetic, with 8
++ * fractional bits. that gets us within 0.1% or so of the right average
++ * frequency, albeit with some jitter in pulse length - Steve
++ */
++
++/* To match 8 fractional bits used for pulse/space length */
++
++static long send_pulse_homebrew_softcarrier(unsigned long length)
++{
++ int flag;
++ unsigned long actual, target, d;
++ length <<= 8;
++
++ actual = 0; target = 0; flag = 0;
++ while (actual < length) {
++ if (flag) {
++ off();
++ target += space_width;
++ } else {
++ on();
++ target += pulse_width;
++ }
++ d = (target - actual -
++ LIRC_SERIAL_TRANSMITTER_LATENCY + 128) >> 8;
++ /*
++ * Note - we've checked in ioctl that the pulse/space
++ * widths are big enough so that d is > 0
++ */
++ udelay(d);
++ actual += (d << 8) + LIRC_SERIAL_TRANSMITTER_LATENCY;
++ flag = !flag;
++ }
++ return (actual-length) >> 8;
++}
++#endif /* USE_RDTSC */
++
++static long send_pulse_homebrew(unsigned long length)
++{
++ if (length <= 0)
++ return 0;
++
++ if (softcarrier)
++ return send_pulse_homebrew_softcarrier(length);
++ else {
++ on();
++ safe_udelay(length);
++ return 0;
++ }
++}
++
++static void send_space_irdeo(long length)
++{
++ if (length <= 0)
++ return;
++
++ safe_udelay(length);
++}
++
++static void send_space_homebrew(long length)
++{
++ off();
++ if (length <= 0)
++ return;
++ safe_udelay(length);
++}
++
++static void rbwrite(int l)
++{
++ if (lirc_buffer_full(&rbuf)) {
++ /* no new signals will be accepted */
++ dprintk("Buffer overrun\n");
++ return;
++ }
++ lirc_buffer_write(&rbuf, (void *)&l);
++}
++
++static void frbwrite(int l)
++{
++ /* simple noise filter */
++ static int pulse, space;
++ static unsigned int ptr;
++
++ if (ptr > 0 && (l & PULSE_BIT)) {
++ pulse += l & PULSE_MASK;
++ if (pulse > 250) {
++ rbwrite(space);
++ rbwrite(pulse | PULSE_BIT);
++ ptr = 0;
++ pulse = 0;
++ }
++ return;
++ }
++ if (!(l & PULSE_BIT)) {
++ if (ptr == 0) {
++ if (l > 20000) {
++ space = l;
++ ptr++;
++ return;
++ }
++ } else {
++ if (l > 20000) {
++ space += pulse;
++ if (space > PULSE_MASK)
++ space = PULSE_MASK;
++ space += l;
++ if (space > PULSE_MASK)
++ space = PULSE_MASK;
++ pulse = 0;
++ return;
++ }
++ rbwrite(space);
++ rbwrite(pulse | PULSE_BIT);
++ ptr = 0;
++ pulse = 0;
++ }
++ }
++ rbwrite(l);
++}
++
++static irqreturn_t irq_handler(int i, void *blah)
++{
++ struct timeval tv;
++ int counter, dcd;
++ u8 status;
++ long deltv;
++ int data;
++ static int last_dcd = -1;
++
++ if ((sinp(UART_IIR) & UART_IIR_NO_INT)) {
++ /* not our interrupt */
++ return IRQ_NONE;
++ }
++
++ counter = 0;
++ do {
++ counter++;
++ status = sinp(UART_MSR);
++ if (counter > RS_ISR_PASS_LIMIT) {
++ printk(KERN_WARNING LIRC_DRIVER_NAME ": AIEEEE: "
++ "We're caught!\n");
++ break;
++ }
++ if ((status & hardware[type].signal_pin_change)
++ && sense != -1) {
++ /* get current time */
++ do_gettimeofday(&tv);
++
++ /* New mode, written by Trent Piepho
++ <xyzzy@u.washington.edu>. */
++
++ /*
++ * The old format was not very portable.
++ * We now use an int to pass pulses
++ * and spaces to user space.
++ *
++ * If PULSE_BIT is set a pulse has been
++ * received, otherwise a space has been
++ * received. The driver needs to know if your
++ * receiver is active high or active low, or
++ * the space/pulse sense could be
++ * inverted. The bits denoted by PULSE_MASK are
++ * the length in microseconds. Lengths greater
++ * than or equal to 16 seconds are clamped to
++ * PULSE_MASK. All other bits are unused.
++ * This is a much simpler interface for user
++ * programs, as well as eliminating "out of
++ * phase" errors with space/pulse
++ * autodetection.
++ */
++
++ /* calc time since last interrupt in microseconds */
++ dcd = (status & hardware[type].signal_pin) ? 1 : 0;
++
++ if (dcd == last_dcd) {
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": ignoring spike: %d %d %lx %lx %lx %lx\n",
++ dcd, sense,
++ tv.tv_sec, lasttv.tv_sec,
++ tv.tv_usec, lasttv.tv_usec);
++ continue;
++ }
++
++ deltv = tv.tv_sec-lasttv.tv_sec;
++ if (tv.tv_sec < lasttv.tv_sec ||
++ (tv.tv_sec == lasttv.tv_sec &&
++ tv.tv_usec < lasttv.tv_usec)) {
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": AIEEEE: your clock just jumped "
++ "backwards\n");
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": %d %d %lx %lx %lx %lx\n",
++ dcd, sense,
++ tv.tv_sec, lasttv.tv_sec,
++ tv.tv_usec, lasttv.tv_usec);
++ data = PULSE_MASK;
++ } else if (deltv > 15) {
++ data = PULSE_MASK; /* really long time */
++ if (!(dcd^sense)) {
++ /* sanity check */
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": AIEEEE: "
++ "%d %d %lx %lx %lx %lx\n",
++ dcd, sense,
++ tv.tv_sec, lasttv.tv_sec,
++ tv.tv_usec, lasttv.tv_usec);
++ /*
++ * detecting pulse while this
++ * MUST be a space!
++ */
++ sense = sense ? 0 : 1;
++ }
++ } else
++ data = (int) (deltv*1000000 +
++ tv.tv_usec -
++ lasttv.tv_usec);
++ frbwrite(dcd^sense ? data : (data|PULSE_BIT));
++ lasttv = tv;
++ last_dcd = dcd;
++ wake_up_interruptible(&rbuf.wait_poll);
++ }
++ } while (!(sinp(UART_IIR) & UART_IIR_NO_INT)); /* still pending ? */
++ return IRQ_HANDLED;
++}
++
++
++static int hardware_init_port(void)
++{
++ u8 scratch, scratch2, scratch3;
++
++ /*
++ * This is a simple port existence test, borrowed from the autoconfig
++ * function in drivers/serial/8250.c
++ */
++ scratch = sinp(UART_IER);
++ soutp(UART_IER, 0);
++#ifdef __i386__
++ outb(0xff, 0x080);
++#endif
++ scratch2 = sinp(UART_IER) & 0x0f;
++ soutp(UART_IER, 0x0f);
++#ifdef __i386__
++ outb(0x00, 0x080);
++#endif
++ scratch3 = sinp(UART_IER) & 0x0f;
++ soutp(UART_IER, scratch);
++ if (scratch2 != 0 || scratch3 != 0x0f) {
++ /* we fail, there's nothing here */
++ printk(KERN_ERR LIRC_DRIVER_NAME ": port existence test "
++ "failed, cannot continue\n");
++ return -EINVAL;
++ }
++
++
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* First of all, disable all interrupts */
++ soutp(UART_IER, sinp(UART_IER) &
++ (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI)));
++
++ /* Clear registers. */
++ sinp(UART_LSR);
++ sinp(UART_RX);
++ sinp(UART_IIR);
++ sinp(UART_MSR);
++
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ if (type == LIRC_NSLU2) {
++ /* Setup NSLU2 UART */
++
++ /* Enable UART */
++ soutp(UART_IER, sinp(UART_IER) | UART_IE_IXP42X_UUE);
++ /* Disable Receiver data Time out interrupt */
++ soutp(UART_IER, sinp(UART_IER) & ~UART_IE_IXP42X_RTOIE);
++ /* set out2 = interrupt unmask; off() doesn't set MCR
++ on NSLU2 */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
++ }
++#endif
++
++ /* Set line for power source */
++ off();
++
++ /* Clear registers again to be sure. */
++ sinp(UART_LSR);
++ sinp(UART_RX);
++ sinp(UART_IIR);
++ sinp(UART_MSR);
++
++ switch (type) {
++ case LIRC_IRDEO:
++ case LIRC_IRDEO_REMOTE:
++ /* setup port to 7N1 @ 115200 Baud */
++ /* 7N1+start = 9 bits at 115200 ~ 3 bits at 38kHz */
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
++ /* Set divisor to 1 => 115200 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 1);
++ /* Set DLAB 0 + 7N1 */
++ soutp(UART_LCR, UART_LCR_WLEN7);
++ /* THR interrupt already disabled at this point */
++ break;
++ default:
++ break;
++ }
++
++ return 0;
++}
++
++static int init_port(void)
++{
++ int i, nlow, nhigh;
++
++ /* Reserve io region. */
++ /*
++ * Future MMAP-Developers: Attention!
++ * For memory mapped I/O you *might* need to use ioremap() first,
++ * for the NSLU2 it's done in boot code.
++ */
++ if (((iommap != 0)
++ && (request_mem_region(iommap, 8 << ioshift,
++ LIRC_DRIVER_NAME) == NULL))
++ || ((iommap == 0)
++ && (request_region(io, 8, LIRC_DRIVER_NAME) == NULL))) {
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": port %04x already in use\n", io);
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": use 'setserial /dev/ttySX uart none'\n");
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": or compile the serial port driver as module and\n");
++ printk(KERN_WARNING LIRC_DRIVER_NAME
++ ": make sure this module is loaded first\n");
++ return -EBUSY;
++ }
++
++ if (hardware_init_port() < 0)
++ return -EINVAL;
++
++ /* Initialize pulse/space widths */
++ init_timing_params(duty_cycle, freq);
++
++ /* If pin is high, then this must be an active low receiver. */
++ if (sense == -1) {
++ /* wait 1/2 sec for the power supply */
++ msleep(500);
++
++ /*
++ * probe 9 times every 0.04s, collect "votes" for
++ * active high/low
++ */
++ nlow = 0;
++ nhigh = 0;
++ for (i = 0; i < 9; i++) {
++ if (sinp(UART_MSR) & hardware[type].signal_pin)
++ nlow++;
++ else
++ nhigh++;
++ msleep(40);
++ }
++ sense = (nlow >= nhigh ? 1 : 0);
++ printk(KERN_INFO LIRC_DRIVER_NAME ": auto-detected active "
++ "%s receiver\n", sense ? "low" : "high");
++ } else
++ printk(KERN_INFO LIRC_DRIVER_NAME ": Manually using active "
++ "%s receiver\n", sense ? "low" : "high");
++
++ return 0;
++}
++
++static int set_use_inc(void *data)
++{
++ int result;
++ unsigned long flags;
++
++ /* initialize timestamp */
++ do_gettimeofday(&lasttv);
++
++ result = request_irq(irq, irq_handler,
++ IRQF_DISABLED | (share_irq ? IRQF_SHARED : 0),
++ LIRC_DRIVER_NAME, (void *)&hardware);
++
++ switch (result) {
++ case -EBUSY:
++ printk(KERN_ERR LIRC_DRIVER_NAME ": IRQ %d busy\n", irq);
++ return -EBUSY;
++ case -EINVAL:
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": Bad irq number or handler\n");
++ return -EINVAL;
++ default:
++ dprintk("Interrupt %d, port %04x obtained\n", irq, io);
++ break;
++ };
++
++ spin_lock_irqsave(&hardware[type].lock, flags);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ soutp(UART_IER, sinp(UART_IER)|UART_IER_MSI);
++
++ spin_unlock_irqrestore(&hardware[type].lock, flags);
++
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{ unsigned long flags;
++
++ spin_lock_irqsave(&hardware[type].lock, flags);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* First of all, disable all interrupts */
++ soutp(UART_IER, sinp(UART_IER) &
++ (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI)));
++ spin_unlock_irqrestore(&hardware[type].lock, flags);
++
++ free_irq(irq, (void *)&hardware);
++
++ dprintk("freed IRQ %d\n", irq);
++}
++
++static ssize_t lirc_write(struct file *file, const char *buf,
++ size_t n, loff_t *ppos)
++{
++ int i, count;
++ unsigned long flags;
++ long delta = 0;
++
++ if (!(hardware[type].features&LIRC_CAN_SEND_PULSE))
++ return -EBADF;
++
++ if (n % sizeof(int))
++ return -EINVAL;
++ count = n / sizeof(int);
++ if (count > WBUF_LEN || count % 2 == 0)
++ return -EINVAL;
++ if (copy_from_user(wbuf, buf, n))
++ return -EFAULT;
++ spin_lock_irqsave(&hardware[type].lock, flags);
++ if (type == LIRC_IRDEO) {
++ /* DTR, RTS down */
++ on();
++ }
++ for (i = 0; i < count; i++) {
++ if (i%2)
++ hardware[type].send_space(wbuf[i]-delta);
++ else
++ delta = hardware[type].send_pulse(wbuf[i]);
++ }
++ off();
++ spin_unlock_irqrestore(&hardware[type].lock, flags);
++ return n;
++}
++
++static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd,
++ unsigned long arg)
++{
++ int result;
++ unsigned long value;
++ unsigned int ivalue;
++
++ switch (cmd) {
++ case LIRC_GET_SEND_MODE:
++ if (!(hardware[type].features&LIRC_CAN_SEND_MASK))
++ return -ENOIOCTLCMD;
++
++ result = put_user(LIRC_SEND2MODE
++ (hardware[type].features&LIRC_CAN_SEND_MASK),
++ (unsigned long *) arg);
++ if (result)
++ return result;
++ break;
++
++ case LIRC_SET_SEND_MODE:
++ if (!(hardware[type].features&LIRC_CAN_SEND_MASK))
++ return -ENOIOCTLCMD;
++
++ result = get_user(value, (unsigned long *) arg);
++ if (result)
++ return result;
++ /* only LIRC_MODE_PULSE supported */
++ if (value != LIRC_MODE_PULSE)
++ return -ENOSYS;
++ break;
++
++ case LIRC_GET_LENGTH:
++ return -ENOSYS;
++ break;
++
++ case LIRC_SET_SEND_DUTY_CYCLE:
++ dprintk("SET_SEND_DUTY_CYCLE\n");
++ if (!(hardware[type].features&LIRC_CAN_SET_SEND_DUTY_CYCLE))
++ return -ENOIOCTLCMD;
++
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++ if (ivalue <= 0 || ivalue > 100)
++ return -EINVAL;
++ return init_timing_params(ivalue, freq);
++ break;
++
++ case LIRC_SET_SEND_CARRIER:
++ dprintk("SET_SEND_CARRIER\n");
++ if (!(hardware[type].features&LIRC_CAN_SET_SEND_CARRIER))
++ return -ENOIOCTLCMD;
++
++ result = get_user(ivalue, (unsigned int *) arg);
++ if (result)
++ return result;
++ if (ivalue > 500000 || ivalue < 20000)
++ return -EINVAL;
++ return init_timing_params(duty_cycle, ivalue);
++ break;
++
++ default:
++ return lirc_dev_fop_ioctl(node, filep, cmd, arg);
++ }
++ return 0;
++}
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .write = lirc_write,
++ .ioctl = lirc_ioctl,
++ .read = lirc_dev_fop_read,
++ .poll = lirc_dev_fop_poll,
++ .open = lirc_dev_fop_open,
++ .release = lirc_dev_fop_close,
++};
++
++static struct lirc_driver driver = {
++ .name = LIRC_DRIVER_NAME,
++ .minor = -1,
++ .code_length = 1,
++ .sample_rate = 0,
++ .data = NULL,
++ .add_to_buf = NULL,
++ .rbuf = &rbuf,
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .fops = &lirc_fops,
++ .dev = NULL,
++ .owner = THIS_MODULE,
++};
++
++static struct platform_device *lirc_serial_dev;
++
++static int __devinit lirc_serial_probe(struct platform_device *dev)
++{
++ return 0;
++}
++
++static int __devexit lirc_serial_remove(struct platform_device *dev)
++{
++ return 0;
++}
++
++static int lirc_serial_suspend(struct platform_device *dev,
++ pm_message_t state)
++{
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* Disable all interrupts */
++ soutp(UART_IER, sinp(UART_IER) &
++ (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI)));
++
++ /* Clear registers. */
++ sinp(UART_LSR);
++ sinp(UART_RX);
++ sinp(UART_IIR);
++ sinp(UART_MSR);
++
++ return 0;
++}
++
++/* twisty maze... need a forward-declaration here... */
++static void lirc_serial_exit(void);
++
++static int lirc_serial_resume(struct platform_device *dev)
++{
++ unsigned long flags;
++
++ if (hardware_init_port() < 0) {
++ lirc_serial_exit();
++ return -EINVAL;
++ }
++
++ spin_lock_irqsave(&hardware[type].lock, flags);
++ /* Enable Interrupt */
++ do_gettimeofday(&lasttv);
++ soutp(UART_IER, sinp(UART_IER)|UART_IER_MSI);
++ off();
++
++ lirc_buffer_clear(&rbuf);
++
++ spin_unlock_irqrestore(&hardware[type].lock, flags);
++
++ return 0;
++}
++
++static struct platform_driver lirc_serial_driver = {
++ .probe = lirc_serial_probe,
++ .remove = __devexit_p(lirc_serial_remove),
++ .suspend = lirc_serial_suspend,
++ .resume = lirc_serial_resume,
++ .driver = {
++ .name = "lirc_serial",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init lirc_serial_init(void)
++{
++ int result;
++
++ /* Init read buffer. */
++ result = lirc_buffer_init(&rbuf, sizeof(int), RBUF_LEN);
++ if (result < 0)
++ return -ENOMEM;
++
++ result = platform_driver_register(&lirc_serial_driver);
++ if (result) {
++ printk("lirc register returned %d\n", result);
++ goto exit_buffer_free;
++ }
++
++ lirc_serial_dev = platform_device_alloc("lirc_serial", 0);
++ if (!lirc_serial_dev) {
++ result = -ENOMEM;
++ goto exit_driver_unregister;
++ }
++
++ result = platform_device_add(lirc_serial_dev);
++ if (result)
++ goto exit_device_put;
++
++ return 0;
++
++exit_device_put:
++ platform_device_put(lirc_serial_dev);
++exit_driver_unregister:
++ platform_driver_unregister(&lirc_serial_driver);
++exit_buffer_free:
++ lirc_buffer_free(&rbuf);
++ return result;
++}
++
++static void lirc_serial_exit(void)
++{
++ platform_device_unregister(lirc_serial_dev);
++ platform_driver_unregister(&lirc_serial_driver);
++ lirc_buffer_free(&rbuf);
++}
++
++static int __init lirc_serial_init_module(void)
++{
++ int result;
++
++ result = lirc_serial_init();
++ if (result)
++ return result;
++
++ switch (type) {
++ case LIRC_HOMEBREW:
++ case LIRC_IRDEO:
++ case LIRC_IRDEO_REMOTE:
++ case LIRC_ANIMAX:
++ case LIRC_IGOR:
++ /* if nothing specified, use ttyS0/com1 and irq 4 */
++ io = io ? io : 0x3f8;
++ irq = irq ? irq : 4;
++ break;
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ case LIRC_NSLU2:
++ io = io ? io : IRQ_IXP4XX_UART2;
++ irq = irq ? irq : (IXP4XX_UART2_BASE_VIRT + REG_OFFSET);
++ iommap = iommap ? iommap : IXP4XX_UART2_BASE_PHYS;
++ ioshift = ioshift ? ioshift : 2;
++ break;
++#endif
++ default:
++ result = -EINVAL;
++ goto exit_serial_exit;
++ }
++ if (!softcarrier) {
++ switch (type) {
++ case LIRC_HOMEBREW:
++ case LIRC_IGOR:
++#ifdef CONFIG_LIRC_SERIAL_NSLU2
++ case LIRC_NSLU2:
++#endif
++ hardware[type].features &=
++ ~(LIRC_CAN_SET_SEND_DUTY_CYCLE|
++ LIRC_CAN_SET_SEND_CARRIER);
++ break;
++ }
++ }
++
++ result = init_port();
++ if (result < 0)
++ goto exit_serial_exit;
++ driver.features = hardware[type].features;
++ driver.dev = &lirc_serial_dev->dev;
++ driver.minor = lirc_register_driver(&driver);
++ if (driver.minor < 0) {
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": register_chrdev failed!\n");
++ result = -EIO;
++ goto exit_release;
++ }
++ return 0;
++exit_release:
++ release_region(io, 8);
++exit_serial_exit:
++ lirc_serial_exit();
++ return result;
++}
++
++static void __exit lirc_serial_exit_module(void)
++{
++ lirc_serial_exit();
++ if (iommap != 0)
++ release_mem_region(iommap, 8 << ioshift);
++ else
++ release_region(io, 8);
++ lirc_unregister_driver(driver.minor);
++ dprintk("cleaned up module\n");
++}
++
++
++module_init(lirc_serial_init_module);
++module_exit(lirc_serial_exit_module);
++
++MODULE_DESCRIPTION("Infra-red receiver driver for serial ports.");
++MODULE_AUTHOR("Ralph Metzler, Trent Piepho, Ben Pfaff, "
++ "Christoph Bartelmus, Andrei Tanas");
++MODULE_LICENSE("GPL");
++
++module_param(type, int, S_IRUGO);
++MODULE_PARM_DESC(type, "Hardware type (0 = home-brew, 1 = IRdeo,"
++ " 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug,"
++ " 5 = NSLU2 RX:CTS2/TX:GreenLED)");
++
++module_param(io, int, S_IRUGO);
++MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)");
++
++/* some architectures (e.g. intel xscale) have memory mapped registers */
++module_param(iommap, bool, S_IRUGO);
++MODULE_PARM_DESC(iommap, "physical base for memory mapped I/O"
++ " (0 = no memory mapped io)");
++
++/*
++ * some architectures (e.g. intel xscale) align the 8bit serial registers
++ * on 32bit word boundaries.
++ * See linux-kernel/serial/8250.c serial_in()/out()
++ */
++module_param(ioshift, int, S_IRUGO);
++MODULE_PARM_DESC(ioshift, "shift I/O register offset (0 = no shift)");
++
++module_param(irq, int, S_IRUGO);
++MODULE_PARM_DESC(irq, "Interrupt (4 or 3)");
++
++module_param(share_irq, bool, S_IRUGO);
++MODULE_PARM_DESC(share_irq, "Share interrupts (0 = off, 1 = on)");
++
++module_param(sense, bool, S_IRUGO);
++MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit"
++ " (0 = active high, 1 = active low )");
++
++#ifdef CONFIG_LIRC_SERIAL_TRANSMITTER
++module_param(txsense, bool, S_IRUGO);
++MODULE_PARM_DESC(txsense, "Sense of transmitter circuit"
++ " (0 = active high, 1 = active low )");
++#endif
++
++module_param(softcarrier, bool, S_IRUGO);
++MODULE_PARM_DESC(softcarrier, "Software carrier (0 = off, 1 = on, default on)");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
+diff --git a/drivers/input/lirc/lirc_sir.c b/drivers/input/lirc/lirc_sir.c
+new file mode 100644
+index 0000000..4a471d6
+--- /dev/null
++++ b/drivers/input/lirc/lirc_sir.c
+@@ -0,0 +1,1283 @@
++/*
++ * LIRC SIR driver, (C) 2000 Milan Pikula <www@fornax.sk>
++ *
++ * lirc_sir - Device driver for use with SIR (serial infra red)
++ * mode of IrDA on many notebooks.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ *
++ * 2000/09/16 Frank Przybylski <mail@frankprzybylski.de> :
++ * added timeout and relaxed pulse detection, removed gap bug
++ *
++ * 2000/12/15 Christoph Bartelmus <lirc@bartelmus.de> :
++ * added support for Tekram Irmate 210 (sending does not work yet,
++ * kind of disappointing that nobody was able to implement that
++ * before),
++ * major clean-up
++ *
++ * 2001/02/27 Christoph Bartelmus <lirc@bartelmus.de> :
++ * added support for StrongARM SA1100 embedded microprocessor
++ * parts cut'n'pasted from sa1100_ir.c (C) 2000 Russell King
++ */
++
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/signal.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/kernel.h>
++#include <linux/serial_reg.h>
++#include <linux/time.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/wait.h>
++#include <linux/mm.h>
++#include <linux/delay.h>
++#include <linux/poll.h>
++#include <asm/system.h>
++#include <linux/io.h>
++#include <asm/irq.h>
++#include <linux/fcntl.h>
++#ifdef LIRC_ON_SA1100
++#include <asm/hardware.h>
++#ifdef CONFIG_SA1100_COLLIE
++#include <asm/arch/tc35143.h>
++#include <asm/ucb1200.h>
++#endif
++#endif
++
++#include <linux/timer.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++/* SECTION: Definitions */
++
++/*** Tekram dongle ***/
++#ifdef LIRC_SIR_TEKRAM
++/* stolen from kernel source */
++/* definitions for Tekram dongle */
++#define TEKRAM_115200 0x00
++#define TEKRAM_57600 0x01
++#define TEKRAM_38400 0x02
++#define TEKRAM_19200 0x03
++#define TEKRAM_9600 0x04
++#define TEKRAM_2400 0x08
++
++#define TEKRAM_PW 0x10 /* Pulse select bit */
++
++/* 10bit * 1s/115200bit in milliseconds = 87ms*/
++#define TIME_CONST (10000000ul/115200ul)
++
++#endif
++
++#ifdef LIRC_SIR_ACTISYS_ACT200L
++static void init_act200(void);
++#elif defined(LIRC_SIR_ACTISYS_ACT220L)
++static void init_act220(void);
++#endif
++
++/*** SA1100 ***/
++#ifdef LIRC_ON_SA1100
++struct sa1100_ser2_registers {
++ /* HSSP control register */
++ unsigned char hscr0;
++ /* UART registers */
++ unsigned char utcr0;
++ unsigned char utcr1;
++ unsigned char utcr2;
++ unsigned char utcr3;
++ unsigned char utcr4;
++ unsigned char utdr;
++ unsigned char utsr0;
++ unsigned char utsr1;
++} sr;
++
++static int irq = IRQ_Ser2ICP;
++
++#define LIRC_ON_SA1100_TRANSMITTER_LATENCY 0
++
++/* pulse/space ratio of 50/50 */
++static unsigned long pulse_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY);
++/* 1000000/freq-pulse_width */
++static unsigned long space_width = (13-LIRC_ON_SA1100_TRANSMITTER_LATENCY);
++static unsigned int freq = 38000; /* modulation frequency */
++static unsigned int duty_cycle = 50; /* duty cycle of 50% */
++
++#endif
++
++#define RBUF_LEN 1024
++#define WBUF_LEN 1024
++
++#define LIRC_DRIVER_NAME "lirc_sir"
++
++#define PULSE '['
++
++#ifndef LIRC_SIR_TEKRAM
++/* 9bit * 1s/115200bit in milli seconds = 78.125ms*/
++#define TIME_CONST (9000000ul/115200ul)
++#endif
++
++
++/* timeout for sequences in jiffies (=5/100s), must be longer than TIME_CONST */
++#define SIR_TIMEOUT (HZ*5/100)
++
++#ifndef LIRC_ON_SA1100
++#ifndef LIRC_IRQ
++#define LIRC_IRQ 4
++#endif
++#ifndef LIRC_PORT
++/* for external dongles, default to com1 */
++#if defined(LIRC_SIR_ACTISYS_ACT200L) || \
++ defined(LIRC_SIR_ACTISYS_ACT220L) || \
++ defined(LIRC_SIR_TEKRAM)
++#define LIRC_PORT 0x3f8
++#else
++/* onboard sir ports are typically com3 */
++#define LIRC_PORT 0x3e8
++#endif
++#endif
++
++static int io = LIRC_PORT;
++static int irq = LIRC_IRQ;
++static int threshold = 3;
++#endif
++
++static DEFINE_SPINLOCK(timer_lock);
++static struct timer_list timerlist;
++/* time of last signal change detected */
++static struct timeval last_tv = {0, 0};
++/* time of last UART data ready interrupt */
++static struct timeval last_intr_tv = {0, 0};
++static int last_value;
++
++static DECLARE_WAIT_QUEUE_HEAD(lirc_read_queue);
++
++static DEFINE_SPINLOCK(hardware_lock);
++
++static int rx_buf[RBUF_LEN];
++static unsigned int rx_tail, rx_head;
++static int tx_buf[WBUF_LEN];
++
++static int debug;
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG LIRC_DRIVER_NAME ": " \
++ fmt, ## args); \
++ } while (0)
++
++/* SECTION: Prototypes */
++
++/* Communication with user-space */
++static unsigned int lirc_poll(struct file *file, poll_table *wait);
++static ssize_t lirc_read(struct file *file, char *buf, size_t count,
++ loff_t *ppos);
++static ssize_t lirc_write(struct file *file, const char *buf, size_t n,
++ loff_t *pos);
++static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd,
++ unsigned long arg);
++static void add_read_queue(int flag, unsigned long val);
++static int init_chrdev(void);
++static void drop_chrdev(void);
++/* Hardware */
++static irqreturn_t sir_interrupt(int irq, void *dev_id);
++static void send_space(unsigned long len);
++static void send_pulse(unsigned long len);
++static int init_hardware(void);
++static void drop_hardware(void);
++/* Initialisation */
++static int init_port(void);
++static void drop_port(void);
++
++#ifdef LIRC_ON_SA1100
++static void on(void)
++{
++ PPSR |= PPC_TXD2;
++}
++
++static void off(void)
++{
++ PPSR &= ~PPC_TXD2;
++}
++#else
++static inline unsigned int sinp(int offset)
++{
++ return inb(io + offset);
++}
++
++static inline void soutp(int offset, int value)
++{
++ outb(value, io + offset);
++}
++#endif
++
++#ifndef MAX_UDELAY_MS
++#define MAX_UDELAY_US 5000
++#else
++#define MAX_UDELAY_US (MAX_UDELAY_MS*1000)
++#endif
++
++static void safe_udelay(unsigned long usecs)
++{
++ while (usecs > MAX_UDELAY_US) {
++ udelay(MAX_UDELAY_US);
++ usecs -= MAX_UDELAY_US;
++ }
++ udelay(usecs);
++}
++
++/* SECTION: Communication with user-space */
++
++static unsigned int lirc_poll(struct file *file, poll_table *wait)
++{
++ poll_wait(file, &lirc_read_queue, wait);
++ if (rx_head != rx_tail)
++ return POLLIN | POLLRDNORM;
++ return 0;
++}
++
++static ssize_t lirc_read(struct file *file, char *buf, size_t count,
++ loff_t *ppos)
++{
++ int n = 0;
++ int retval = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ if (count % sizeof(int))
++ return -EINVAL;
++
++ add_wait_queue(&lirc_read_queue, &wait);
++ set_current_state(TASK_INTERRUPTIBLE);
++ while (n < count) {
++ if (rx_head != rx_tail) {
++ if (copy_to_user((void *) buf + n,
++ (void *) (rx_buf + rx_head),
++ sizeof(int))) {
++ retval = -EFAULT;
++ break;
++ }
++ rx_head = (rx_head + 1) & (RBUF_LEN - 1);
++ n += sizeof(int);
++ } else {
++ if (file->f_flags & O_NONBLOCK) {
++ retval = -EAGAIN;
++ break;
++ }
++ if (signal_pending(current)) {
++ retval = -ERESTARTSYS;
++ break;
++ }
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ }
++ }
++ remove_wait_queue(&lirc_read_queue, &wait);
++ set_current_state(TASK_RUNNING);
++ return n ? n : retval;
++}
++static ssize_t lirc_write(struct file *file, const char *buf, size_t n,
++ loff_t *pos)
++{
++ unsigned long flags;
++ int i;
++
++ if (n % sizeof(int) || (n / sizeof(int)) > WBUF_LEN)
++ return -EINVAL;
++ if (copy_from_user(tx_buf, buf, n))
++ return -EFAULT;
++ i = 0;
++ n /= sizeof(int);
++#ifdef LIRC_ON_SA1100
++ /* disable receiver */
++ Ser2UTCR3 = 0;
++#endif
++ local_irq_save(flags);
++ while (1) {
++ if (i >= n)
++ break;
++ if (tx_buf[i])
++ send_pulse(tx_buf[i]);
++ i++;
++ if (i >= n)
++ break;
++ if (tx_buf[i])
++ send_space(tx_buf[i]);
++ i++;
++ }
++ local_irq_restore(flags);
++#ifdef LIRC_ON_SA1100
++ off();
++ udelay(1000); /* wait 1ms for IR diode to recover */
++ Ser2UTCR3 = 0;
++ /* clear status register to prevent unwanted interrupts */
++ Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
++ /* enable receiver */
++ Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE;
++#endif
++ return n;
++}
++
++static int lirc_ioctl(struct inode *node, struct file *filep, unsigned int cmd,
++ unsigned long arg)
++{
++ int retval = 0;
++ unsigned long value = 0;
++#ifdef LIRC_ON_SA1100
++ unsigned int ivalue;
++
++ if (cmd == LIRC_GET_FEATURES)
++ value = LIRC_CAN_SEND_PULSE |
++ LIRC_CAN_SET_SEND_DUTY_CYCLE |
++ LIRC_CAN_SET_SEND_CARRIER |
++ LIRC_CAN_REC_MODE2;
++ else if (cmd == LIRC_GET_SEND_MODE)
++ value = LIRC_MODE_PULSE;
++ else if (cmd == LIRC_GET_REC_MODE)
++ value = LIRC_MODE_MODE2;
++#else
++ if (cmd == LIRC_GET_FEATURES)
++ value = LIRC_CAN_SEND_PULSE | LIRC_CAN_REC_MODE2;
++ else if (cmd == LIRC_GET_SEND_MODE)
++ value = LIRC_MODE_PULSE;
++ else if (cmd == LIRC_GET_REC_MODE)
++ value = LIRC_MODE_MODE2;
++#endif
++
++ switch (cmd) {
++ case LIRC_GET_FEATURES:
++ case LIRC_GET_SEND_MODE:
++ case LIRC_GET_REC_MODE:
++ retval = put_user(value, (unsigned long *) arg);
++ break;
++
++ case LIRC_SET_SEND_MODE:
++ case LIRC_SET_REC_MODE:
++ retval = get_user(value, (unsigned long *) arg);
++ break;
++#ifdef LIRC_ON_SA1100
++ case LIRC_SET_SEND_DUTY_CYCLE:
++ retval = get_user(ivalue, (unsigned int *) arg);
++ if (retval)
++ return retval;
++ if (ivalue <= 0 || ivalue > 100)
++ return -EINVAL;
++ /* (ivalue/100)*(1000000/freq) */
++ duty_cycle = ivalue;
++ pulse_width = (unsigned long) duty_cycle*10000/freq;
++ space_width = (unsigned long) 1000000L/freq-pulse_width;
++ if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY)
++ pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY;
++ if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY)
++ space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY;
++ break;
++ case LIRC_SET_SEND_CARRIER:
++ retval = get_user(ivalue, (unsigned int *) arg);
++ if (retval)
++ return retval;
++ if (ivalue > 500000 || ivalue < 20000)
++ return -EINVAL;
++ freq = ivalue;
++ pulse_width = (unsigned long) duty_cycle*10000/freq;
++ space_width = (unsigned long) 1000000L/freq-pulse_width;
++ if (pulse_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY)
++ pulse_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY;
++ if (space_width >= LIRC_ON_SA1100_TRANSMITTER_LATENCY)
++ space_width -= LIRC_ON_SA1100_TRANSMITTER_LATENCY;
++ break;
++#endif
++ default:
++ retval = -ENOIOCTLCMD;
++
++ }
++
++ if (retval)
++ return retval;
++ if (cmd == LIRC_SET_REC_MODE) {
++ if (value != LIRC_MODE_MODE2)
++ retval = -ENOSYS;
++ } else if (cmd == LIRC_SET_SEND_MODE) {
++ if (value != LIRC_MODE_PULSE)
++ retval = -ENOSYS;
++ }
++
++ return retval;
++}
++
++static void add_read_queue(int flag, unsigned long val)
++{
++ unsigned int new_rx_tail;
++ int newval;
++
++ dprintk("add flag %d with val %lu\n", flag, val);
++
++ newval = val & PULSE_MASK;
++
++ /*
++ * statistically, pulses are ~TIME_CONST/2 too long. we could
++ * maybe make this more exact, but this is good enough
++ */
++ if (flag) {
++ /* pulse */
++ if (newval > TIME_CONST/2)
++ newval -= TIME_CONST/2;
++ else /* should not ever happen */
++ newval = 1;
++ newval |= PULSE_BIT;
++ } else {
++ newval += TIME_CONST/2;
++ }
++ new_rx_tail = (rx_tail + 1) & (RBUF_LEN - 1);
++ if (new_rx_tail == rx_head) {
++ dprintk("Buffer overrun.\n");
++ return;
++ }
++ rx_buf[rx_tail] = newval;
++ rx_tail = new_rx_tail;
++ wake_up_interruptible(&lirc_read_queue);
++}
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .read = lirc_read,
++ .write = lirc_write,
++ .poll = lirc_poll,
++ .ioctl = lirc_ioctl,
++ .open = lirc_dev_fop_open,
++ .release = lirc_dev_fop_close,
++};
++
++static int set_use_inc(void *data)
++{
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++}
++
++static struct lirc_driver driver = {
++ .name = LIRC_DRIVER_NAME,
++ .minor = -1,
++ .code_length = 1,
++ .sample_rate = 0,
++ .data = NULL,
++ .add_to_buf = NULL,
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .fops = &lirc_fops,
++ .dev = NULL,
++ .owner = THIS_MODULE,
++};
++
++
++static int init_chrdev(void)
++{
++ driver.minor = lirc_register_driver(&driver);
++ if (driver.minor < 0) {
++ printk(KERN_ERR LIRC_DRIVER_NAME ": init_chrdev() failed.\n");
++ return -EIO;
++ }
++ return 0;
++}
++
++static void drop_chrdev(void)
++{
++ lirc_unregister_driver(driver.minor);
++}
++
++/* SECTION: Hardware */
++static long delta(struct timeval *tv1, struct timeval *tv2)
++{
++ unsigned long deltv;
++
++ deltv = tv2->tv_sec - tv1->tv_sec;
++ if (deltv > 15)
++ deltv = 0xFFFFFF;
++ else
++ deltv = deltv*1000000 +
++ tv2->tv_usec -
++ tv1->tv_usec;
++ return deltv;
++}
++
++static void sir_timeout(unsigned long data)
++{
++ /*
++ * if last received signal was a pulse, but receiving stopped
++ * within the 9 bit frame, we need to finish this pulse and
++ * simulate a signal change to from pulse to space. Otherwise
++ * upper layers will receive two sequences next time.
++ */
++
++ unsigned long flags;
++ unsigned long pulse_end;
++
++ /* avoid interference with interrupt */
++ spin_lock_irqsave(&timer_lock, flags);
++ if (last_value) {
++#ifndef LIRC_ON_SA1100
++ /* clear unread bits in UART and restart */
++ outb(UART_FCR_CLEAR_RCVR, io + UART_FCR);
++#endif
++ /* determine 'virtual' pulse end: */
++ pulse_end = delta(&last_tv, &last_intr_tv);
++ dprintk("timeout add %d for %lu usec\n", last_value, pulse_end);
++ add_read_queue(last_value, pulse_end);
++ last_value = 0;
++ last_tv = last_intr_tv;
++ }
++ spin_unlock_irqrestore(&timer_lock, flags);
++}
++
++static irqreturn_t sir_interrupt(int irq, void *dev_id)
++{
++ unsigned char data;
++ struct timeval curr_tv;
++ static unsigned long deltv;
++#ifdef LIRC_ON_SA1100
++ int status;
++ static int n;
++
++ status = Ser2UTSR0;
++ /*
++ * Deal with any receive errors first. The bytes in error may be
++ * the only bytes in the receive FIFO, so we do this first.
++ */
++ while (status & UTSR0_EIF) {
++ int bstat;
++
++ if (debug) {
++ dprintk("EIF\n");
++ bstat = Ser2UTSR1;
++
++ if (bstat & UTSR1_FRE)
++ dprintk("frame error\n");
++ if (bstat & UTSR1_ROR)
++ dprintk("receive fifo overrun\n");
++ if (bstat & UTSR1_PRE)
++ dprintk("parity error\n");
++ }
++
++ bstat = Ser2UTDR;
++ n++;
++ status = Ser2UTSR0;
++ }
++
++ if (status & (UTSR0_RFS | UTSR0_RID)) {
++ do_gettimeofday(&curr_tv);
++ deltv = delta(&last_tv, &curr_tv);
++ do {
++ data = Ser2UTDR;
++ dprintk("%d data: %u\n", n, (unsigned int) data);
++ n++;
++ } while (status & UTSR0_RID && /* do not empty fifo in order to
++ * get UTSR0_RID in any case */
++ Ser2UTSR1 & UTSR1_RNE); /* data ready */
++
++ if (status&UTSR0_RID) {
++ add_read_queue(0 , deltv - n * TIME_CONST); /*space*/
++ add_read_queue(1, n * TIME_CONST); /*pulse*/
++ n = 0;
++ last_tv = curr_tv;
++ }
++ }
++
++ if (status & UTSR0_TFS)
++ printk(KERN_ERR "transmit fifo not full, shouldn't happen\n");
++
++ /* We must clear certain bits. */
++ status &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
++ if (status)
++ Ser2UTSR0 = status;
++#else
++ unsigned long deltintrtv;
++ unsigned long flags;
++ int iir, lsr;
++
++ while ((iir = inb(io + UART_IIR) & UART_IIR_ID)) {
++ switch (iir&UART_IIR_ID) { /* FIXME toto treba preriedit */
++ case UART_IIR_MSI:
++ (void) inb(io + UART_MSR);
++ break;
++ case UART_IIR_RLSI:
++ (void) inb(io + UART_LSR);
++ break;
++ case UART_IIR_THRI:
++#if 0
++ if (lsr & UART_LSR_THRE) /* FIFO is empty */
++ outb(data, io + UART_TX)
++#endif
++ break;
++ case UART_IIR_RDI:
++ /* avoid interference with timer */
++ spin_lock_irqsave(&timer_lock, flags);
++ do {
++ del_timer(&timerlist);
++ data = inb(io + UART_RX);
++ do_gettimeofday(&curr_tv);
++ deltv = delta(&last_tv, &curr_tv);
++ deltintrtv = delta(&last_intr_tv, &curr_tv);
++ dprintk("t %lu, d %d\n", deltintrtv, (int)data);
++ /*
++ * if nothing came in last X cycles,
++ * it was gap
++ */
++ if (deltintrtv > TIME_CONST * threshold) {
++ if (last_value) {
++ dprintk("GAP\n");
++ /* simulate signal change */
++ add_read_queue(last_value,
++ deltv -
++ deltintrtv);
++ last_value = 0;
++ last_tv.tv_sec =
++ last_intr_tv.tv_sec;
++ last_tv.tv_usec =
++ last_intr_tv.tv_usec;
++ deltv = deltintrtv;
++ }
++ }
++ data = 1;
++ if (data ^ last_value) {
++ /*
++ * deltintrtv > 2*TIME_CONST, remember?
++ * the other case is timeout
++ */
++ add_read_queue(last_value,
++ deltv-TIME_CONST);
++ last_value = data;
++ last_tv = curr_tv;
++ if (last_tv.tv_usec >= TIME_CONST) {
++ last_tv.tv_usec -= TIME_CONST;
++ } else {
++ last_tv.tv_sec--;
++ last_tv.tv_usec += 1000000 -
++ TIME_CONST;
++ }
++ }
++ last_intr_tv = curr_tv;
++ if (data) {
++ /*
++ * start timer for end of
++ * sequence detection
++ */
++ timerlist.expires = jiffies +
++ SIR_TIMEOUT;
++ add_timer(&timerlist);
++ }
++
++ lsr = inb(io + UART_LSR);
++ } while (lsr & UART_LSR_DR); /* data ready */
++ spin_unlock_irqrestore(&timer_lock, flags);
++ break;
++ default:
++ break;
++ }
++ }
++#endif
++ return IRQ_RETVAL(IRQ_HANDLED);
++}
++
++#ifdef LIRC_ON_SA1100
++static void send_pulse(unsigned long length)
++{
++ unsigned long k, delay;
++ int flag;
++
++ if (length == 0)
++ return;
++ /*
++ * this won't give us the carrier frequency we really want
++ * due to integer arithmetic, but we can accept this inaccuracy
++ */
++
++ for (k = flag = 0; k < length; k += delay, flag = !flag) {
++ if (flag) {
++ off();
++ delay = space_width;
++ } else {
++ on();
++ delay = pulse_width;
++ }
++ safe_udelay(delay);
++ }
++ off();
++}
++
++static void send_space(unsigned long length)
++{
++ if (length == 0)
++ return;
++ off();
++ safe_udelay(length);
++}
++#else
++static void send_space(unsigned long len)
++{
++ safe_udelay(len);
++}
++
++static void send_pulse(unsigned long len)
++{
++ long bytes_out = len / TIME_CONST;
++ long time_left;
++
++ time_left = (long)len - (long)bytes_out * (long)TIME_CONST;
++ if (bytes_out == 0) {
++ bytes_out++;
++ time_left = 0;
++ }
++ while (bytes_out--) {
++ outb(PULSE, io + UART_TX);
++ /* FIXME treba seriozne cakanie z char/serial.c */
++ while (!(inb(io + UART_LSR) & UART_LSR_THRE))
++ ;
++ }
++#if 0
++ if (time_left > 0)
++ safe_udelay(time_left);
++#endif
++}
++#endif
++
++#ifdef CONFIG_SA1100_COLLIE
++static int sa1100_irda_set_power_collie(int state)
++{
++ if (state) {
++ /*
++ * 0 - off
++ * 1 - short range, lowest power
++ * 2 - medium range, medium power
++ * 3 - maximum range, high power
++ */
++ ucb1200_set_io_direction(TC35143_GPIO_IR_ON,
++ TC35143_IODIR_OUTPUT);
++ ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_LOW);
++ udelay(100);
++ } else {
++ /* OFF */
++ ucb1200_set_io_direction(TC35143_GPIO_IR_ON,
++ TC35143_IODIR_OUTPUT);
++ ucb1200_set_io(TC35143_GPIO_IR_ON, TC35143_IODAT_HIGH);
++ }
++ return 0;
++}
++#endif
++
++static int init_hardware(void)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&hardware_lock, flags);
++ /* reset UART */
++#ifdef LIRC_ON_SA1100
++#ifdef CONFIG_SA1100_BITSY
++ if (machine_is_bitsy()) {
++ printk(KERN_INFO "Power on IR module\n");
++ set_bitsy_egpio(EGPIO_BITSY_IR_ON);
++ }
++#endif
++#ifdef CONFIG_SA1100_COLLIE
++ sa1100_irda_set_power_collie(3); /* power on */
++#endif
++ sr.hscr0 = Ser2HSCR0;
++
++ sr.utcr0 = Ser2UTCR0;
++ sr.utcr1 = Ser2UTCR1;
++ sr.utcr2 = Ser2UTCR2;
++ sr.utcr3 = Ser2UTCR3;
++ sr.utcr4 = Ser2UTCR4;
++
++ sr.utdr = Ser2UTDR;
++ sr.utsr0 = Ser2UTSR0;
++ sr.utsr1 = Ser2UTSR1;
++
++ /* configure GPIO */
++ /* output */
++ PPDR |= PPC_TXD2;
++ PSDR |= PPC_TXD2;
++ /* set output to 0 */
++ off();
++
++ /* Enable HP-SIR modulation, and ensure that the port is disabled. */
++ Ser2UTCR3 = 0;
++ Ser2HSCR0 = sr.hscr0 & (~HSCR0_HSSP);
++
++ /* clear status register to prevent unwanted interrupts */
++ Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
++
++ /* 7N1 */
++ Ser2UTCR0 = UTCR0_1StpBit|UTCR0_7BitData;
++ /* 115200 */
++ Ser2UTCR1 = 0;
++ Ser2UTCR2 = 1;
++ /* use HPSIR, 1.6 usec pulses */
++ Ser2UTCR4 = UTCR4_HPSIR|UTCR4_Z1_6us;
++
++ /* enable receiver, receive fifo interrupt */
++ Ser2UTCR3 = UTCR3_RXE|UTCR3_RIE;
++
++ /* clear status register to prevent unwanted interrupts */
++ Ser2UTSR0 &= (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
++
++#elif defined(LIRC_SIR_TEKRAM)
++ /* disable FIFO */
++ soutp(UART_FCR,
++ UART_FCR_CLEAR_RCVR|
++ UART_FCR_CLEAR_XMIT|
++ UART_FCR_TRIGGER_1);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* First of all, disable all interrupts */
++ soutp(UART_IER, sinp(UART_IER) &
++ (~(UART_IER_MSI|UART_IER_RLSI|UART_IER_THRI|UART_IER_RDI)));
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
++
++ /* Set divisor to 12 => 9600 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 12);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* power supply */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ safe_udelay(50*1000);
++
++ /* -DTR low -> reset PIC */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
++ udelay(1*1000);
++
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(100);
++
++
++ /* -RTS low -> send control byte */
++ soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(7);
++ soutp(UART_TX, TEKRAM_115200|TEKRAM_PW);
++
++ /* one byte takes ~1042 usec to transmit at 9600,8N1 */
++ udelay(1500);
++
++ /* back to normal operation */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(50);
++
++ udelay(1500);
++
++ /* read previous control byte */
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": 0x%02x\n", sinp(UART_RX));
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
++
++ /* Set divisor to 1 => 115200 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 1);
++
++ /* Set DLAB 0, 8 Bit */
++ soutp(UART_LCR, UART_LCR_WLEN8);
++ /* enable interrupts */
++ soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI);
++#else
++ outb(0, io + UART_MCR);
++ outb(0, io + UART_IER);
++ /* init UART */
++ /* set DLAB, speed = 115200 */
++ outb(UART_LCR_DLAB | UART_LCR_WLEN7, io + UART_LCR);
++ outb(1, io + UART_DLL); outb(0, io + UART_DLM);
++ /* 7N1+start = 9 bits at 115200 ~ 3 bits at 44000 */
++ outb(UART_LCR_WLEN7, io + UART_LCR);
++ /* FIFO operation */
++ outb(UART_FCR_ENABLE_FIFO, io + UART_FCR);
++ /* interrupts */
++ /* outb(UART_IER_RLSI|UART_IER_RDI|UART_IER_THRI, io + UART_IER); */
++ outb(UART_IER_RDI, io + UART_IER);
++ /* turn on UART */
++ outb(UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2, io + UART_MCR);
++#ifdef LIRC_SIR_ACTISYS_ACT200L
++ init_act200();
++#elif defined(LIRC_SIR_ACTISYS_ACT220L)
++ init_act220();
++#endif
++#endif
++ spin_unlock_irqrestore(&hardware_lock, flags);
++ return 0;
++}
++
++static void drop_hardware(void)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&hardware_lock, flags);
++
++#ifdef LIRC_ON_SA1100
++ Ser2UTCR3 = 0;
++
++ Ser2UTCR0 = sr.utcr0;
++ Ser2UTCR1 = sr.utcr1;
++ Ser2UTCR2 = sr.utcr2;
++ Ser2UTCR4 = sr.utcr4;
++ Ser2UTCR3 = sr.utcr3;
++
++ Ser2HSCR0 = sr.hscr0;
++#ifdef CONFIG_SA1100_BITSY
++ if (machine_is_bitsy())
++ clr_bitsy_egpio(EGPIO_BITSY_IR_ON);
++#endif
++#ifdef CONFIG_SA1100_COLLIE
++ sa1100_irda_set_power_collie(0); /* power off */
++#endif
++#else
++ /* turn off interrupts */
++ outb(0, io + UART_IER);
++#endif
++ spin_unlock_irqrestore(&hardware_lock, flags);
++}
++
++/* SECTION: Initialisation */
++
++static int init_port(void)
++{
++ int retval;
++
++ /* get I/O port access and IRQ line */
++#ifndef LIRC_ON_SA1100
++ if (request_region(io, 8, LIRC_DRIVER_NAME) == NULL) {
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": i/o port 0x%.4x already in use.\n", io);
++ return -EBUSY;
++ }
++#endif
++ retval = request_irq(irq, sir_interrupt, IRQF_DISABLED,
++ LIRC_DRIVER_NAME, NULL);
++ if (retval < 0) {
++# ifndef LIRC_ON_SA1100
++ release_region(io, 8);
++# endif
++ printk(KERN_ERR LIRC_DRIVER_NAME
++ ": IRQ %d already in use.\n",
++ irq);
++ return retval;
++ }
++#ifndef LIRC_ON_SA1100
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": I/O port 0x%.4x, IRQ %d.\n",
++ io, irq);
++#endif
++
++ init_timer(&timerlist);
++ timerlist.function = sir_timeout;
++ timerlist.data = 0xabadcafe;
++
++ return 0;
++}
++
++static void drop_port(void)
++{
++ free_irq(irq, NULL);
++ del_timer_sync(&timerlist);
++#ifndef LIRC_ON_SA1100
++ release_region(io, 8);
++#endif
++}
++
++#ifdef LIRC_SIR_ACTISYS_ACT200L
++/* Crystal/Cirrus CS8130 IR transceiver, used in Actisys Act200L dongle */
++/* some code borrowed from Linux IRDA driver */
++
++/* Register 0: Control register #1 */
++#define ACT200L_REG0 0x00
++#define ACT200L_TXEN 0x01 /* Enable transmitter */
++#define ACT200L_RXEN 0x02 /* Enable receiver */
++#define ACT200L_ECHO 0x08 /* Echo control chars */
++
++/* Register 1: Control register #2 */
++#define ACT200L_REG1 0x10
++#define ACT200L_LODB 0x01 /* Load new baud rate count value */
++#define ACT200L_WIDE 0x04 /* Expand the maximum allowable pulse */
++
++/* Register 3: Transmit mode register #2 */
++#define ACT200L_REG3 0x30
++#define ACT200L_B0 0x01 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */
++#define ACT200L_B1 0x02 /* DataBits, 0=6, 1=7, 2=8, 3=9(8P) */
++#define ACT200L_CHSY 0x04 /* StartBit Synced 0=bittime, 1=startbit */
++
++/* Register 4: Output Power register */
++#define ACT200L_REG4 0x40
++#define ACT200L_OP0 0x01 /* Enable LED1C output */
++#define ACT200L_OP1 0x02 /* Enable LED2C output */
++#define ACT200L_BLKR 0x04
++
++/* Register 5: Receive Mode register */
++#define ACT200L_REG5 0x50
++#define ACT200L_RWIDL 0x01 /* fixed 1.6us pulse mode */
++ /*.. other various IRDA bit modes, and TV remote modes..*/
++
++/* Register 6: Receive Sensitivity register #1 */
++#define ACT200L_REG6 0x60
++#define ACT200L_RS0 0x01 /* receive threshold bit 0 */
++#define ACT200L_RS1 0x02 /* receive threshold bit 1 */
++
++/* Register 7: Receive Sensitivity register #2 */
++#define ACT200L_REG7 0x70
++#define ACT200L_ENPOS 0x04 /* Ignore the falling edge */
++
++/* Register 8,9: Baud Rate Divider register #1,#2 */
++#define ACT200L_REG8 0x80
++#define ACT200L_REG9 0x90
++
++#define ACT200L_2400 0x5f
++#define ACT200L_9600 0x17
++#define ACT200L_19200 0x0b
++#define ACT200L_38400 0x05
++#define ACT200L_57600 0x03
++#define ACT200L_115200 0x01
++
++/* Register 13: Control register #3 */
++#define ACT200L_REG13 0xd0
++#define ACT200L_SHDW 0x01 /* Enable access to shadow registers */
++
++/* Register 15: Status register */
++#define ACT200L_REG15 0xf0
++
++/* Register 21: Control register #4 */
++#define ACT200L_REG21 0x50
++#define ACT200L_EXCK 0x02 /* Disable clock output driver */
++#define ACT200L_OSCL 0x04 /* oscillator in low power, medium accuracy mode */
++
++static void init_act200(void)
++{
++ int i;
++ __u8 control[] = {
++ ACT200L_REG15,
++ ACT200L_REG13 | ACT200L_SHDW,
++ ACT200L_REG21 | ACT200L_EXCK | ACT200L_OSCL,
++ ACT200L_REG13,
++ ACT200L_REG7 | ACT200L_ENPOS,
++ ACT200L_REG6 | ACT200L_RS0 | ACT200L_RS1,
++ ACT200L_REG5 | ACT200L_RWIDL,
++ ACT200L_REG4 | ACT200L_OP0 | ACT200L_OP1 | ACT200L_BLKR,
++ ACT200L_REG3 | ACT200L_B0,
++ ACT200L_REG0 | ACT200L_TXEN | ACT200L_RXEN,
++ ACT200L_REG8 | (ACT200L_115200 & 0x0f),
++ ACT200L_REG9 | ((ACT200L_115200 >> 4) & 0x0f),
++ ACT200L_REG1 | ACT200L_LODB | ACT200L_WIDE
++ };
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN8);
++
++ /* Set divisor to 12 => 9600 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 12);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, UART_LCR_WLEN8);
++ /* Set divisor to 12 => 9600 Baud */
++
++ /* power supply */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ for (i = 0; i < 50; i++)
++ safe_udelay(1000);
++
++ /* Reset the dongle : set RTS low for 25 ms */
++ soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
++ for (i = 0; i < 25; i++)
++ udelay(1000);
++
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(100);
++
++ /* Clear DTR and set RTS to enter command mode */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
++ udelay(7);
++
++ /* send out the control register settings for 115K 7N1 SIR operation */
++ for (i = 0; i < sizeof(control); i++) {
++ soutp(UART_TX, control[i]);
++ /* one byte takes ~1042 usec to transmit at 9600,8N1 */
++ udelay(1500);
++ }
++
++ /* back to normal operation */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(50);
++
++ udelay(1500);
++ soutp(UART_LCR, sinp(UART_LCR) | UART_LCR_DLAB);
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7);
++
++ /* Set divisor to 1 => 115200 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 1);
++
++ /* Set DLAB 0. */
++ soutp(UART_LCR, sinp(UART_LCR) & (~UART_LCR_DLAB));
++
++ /* Set DLAB 0, 7 Bit */
++ soutp(UART_LCR, UART_LCR_WLEN7);
++
++ /* enable interrupts */
++ soutp(UART_IER, sinp(UART_IER)|UART_IER_RDI);
++}
++#endif
++
++#ifdef LIRC_SIR_ACTISYS_ACT220L
++/*
++ * Derived from linux IrDA driver (net/irda/actisys.c)
++ * Drop me a mail for any kind of comment: maxx@spaceboyz.net
++ */
++
++void init_act220(void)
++{
++ int i;
++
++ /* DLAB 1 */
++ soutp(UART_LCR, UART_LCR_DLAB|UART_LCR_WLEN7);
++
++ /* 9600 baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 12);
++
++ /* DLAB 0 */
++ soutp(UART_LCR, UART_LCR_WLEN7);
++
++ /* reset the dongle, set DTR low for 10us */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_OUT2);
++ udelay(10);
++
++ /* back to normal (still 9600) */
++ soutp(UART_MCR, UART_MCR_DTR|UART_MCR_RTS|UART_MCR_OUT2);
++
++ /*
++ * send RTS pulses until we reach 115200
++ * i hope this is really the same for act220l/act220l+
++ */
++ for (i = 0; i < 3; i++) {
++ udelay(10);
++ /* set RTS low for 10 us */
++ soutp(UART_MCR, UART_MCR_DTR|UART_MCR_OUT2);
++ udelay(10);
++ /* set RTS high for 10 us */
++ soutp(UART_MCR, UART_MCR_RTS|UART_MCR_DTR|UART_MCR_OUT2);
++ }
++
++ /* back to normal operation */
++ udelay(1500); /* better safe than sorry ;) */
++
++ /* Set DLAB 1. */
++ soutp(UART_LCR, UART_LCR_DLAB | UART_LCR_WLEN7);
++
++ /* Set divisor to 1 => 115200 Baud */
++ soutp(UART_DLM, 0);
++ soutp(UART_DLL, 1);
++
++ /* Set DLAB 0, 7 Bit */
++ /* The dongle doesn't seem to have any problems with operation at 7N1 */
++ soutp(UART_LCR, UART_LCR_WLEN7);
++
++ /* enable interrupts */
++ soutp(UART_IER, UART_IER_RDI);
++}
++#endif
++
++static int init_lirc_sir(void)
++{
++ int retval;
++
++ init_waitqueue_head(&lirc_read_queue);
++ retval = init_port();
++ if (retval < 0)
++ return retval;
++ init_hardware();
++ printk(KERN_INFO LIRC_DRIVER_NAME
++ ": Installed.\n");
++ return 0;
++}
++
++
++static int __init lirc_sir_init(void)
++{
++ int retval;
++
++ retval = init_chrdev();
++ if (retval < 0)
++ return retval;
++ retval = init_lirc_sir();
++ if (retval) {
++ drop_chrdev();
++ return retval;
++ }
++ return 0;
++}
++
++static void __exit lirc_sir_exit(void)
++{
++ drop_hardware();
++ drop_chrdev();
++ drop_port();
++ printk(KERN_INFO LIRC_DRIVER_NAME ": Uninstalled.\n");
++}
++
++module_init(lirc_sir_init);
++module_exit(lirc_sir_exit);
++
++#ifdef LIRC_SIR_TEKRAM
++MODULE_DESCRIPTION("Infrared receiver driver for Tekram Irmate 210");
++MODULE_AUTHOR("Christoph Bartelmus");
++#elif defined(LIRC_ON_SA1100)
++MODULE_DESCRIPTION("LIRC driver for StrongARM SA1100 embedded microprocessor");
++MODULE_AUTHOR("Christoph Bartelmus");
++#elif defined(LIRC_SIR_ACTISYS_ACT200L)
++MODULE_DESCRIPTION("LIRC driver for Actisys Act200L");
++MODULE_AUTHOR("Karl Bongers");
++#elif defined(LIRC_SIR_ACTISYS_ACT220L)
++MODULE_DESCRIPTION("LIRC driver for Actisys Act220L(+)");
++MODULE_AUTHOR("Jan Roemisch");
++#else
++MODULE_DESCRIPTION("Infrared receiver driver for SIR type serial ports");
++MODULE_AUTHOR("Milan Pikula");
++#endif
++MODULE_LICENSE("GPL");
++
++#ifdef LIRC_ON_SA1100
++module_param(irq, int, S_IRUGO);
++MODULE_PARM_DESC(irq, "Interrupt (16)");
++#else
++module_param(io, int, S_IRUGO);
++MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)");
++
++module_param(irq, int, S_IRUGO);
++MODULE_PARM_DESC(irq, "Interrupt (4 or 3)");
++
++module_param(threshold, int, S_IRUGO);
++MODULE_PARM_DESC(threshold, "space detection threshold (3)");
++#endif
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
+diff --git a/drivers/input/lirc/lirc_streamzap.c b/drivers/input/lirc/lirc_streamzap.c
+new file mode 100644
+index 0000000..87db864
+--- /dev/null
++++ b/drivers/input/lirc/lirc_streamzap.c
+@@ -0,0 +1,821 @@
++/*
++ * Streamzap Remote Control driver
++ *
++ * Copyright (c) 2005 Christoph Bartelmus <lirc@bartelmus.de>
++ *
++ * This driver was based on the work of Greg Wickham and Adrian
++ * Dewhurst. It was substantially rewritten to support correct signal
++ * gaps and now maintains a delay buffer, which is used to present
++ * consistent timing behaviour to user space applications. Without the
++ * delay buffer an ugly hack would be required in lircd, which can
++ * cause sluggish signal decoding in certain situations.
++ *
++ * This driver is based on the USB skeleton driver packaged with the
++ * kernel; copyright (C) 2001-2003 Greg Kroah-Hartman (greg@kroah.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/kernel.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/smp_lock.h>
++#include <linux/completion.h>
++#include <linux/uaccess.h>
++#include <linux/usb.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++#define DRIVER_VERSION "1.28"
++#define DRIVER_NAME "lirc_streamzap"
++#define DRIVER_DESC "Streamzap Remote Control driver"
++
++static int debug;
++
++#define USB_STREAMZAP_VENDOR_ID 0x0e9c
++#define USB_STREAMZAP_PRODUCT_ID 0x0000
++
++/* Use our own dbg macro */
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG DRIVER_NAME "[%d]: " \
++ fmt "\n", ## args); \
++ } while (0)
++
++/* table of devices that work with this driver */
++static struct usb_device_id streamzap_table[] = {
++ /* Streamzap Remote Control */
++ { USB_DEVICE(USB_STREAMZAP_VENDOR_ID, USB_STREAMZAP_PRODUCT_ID) },
++ /* Terminating entry */
++ { }
++};
++
++MODULE_DEVICE_TABLE(usb, streamzap_table);
++
++#define STREAMZAP_PULSE_MASK 0xf0
++#define STREAMZAP_SPACE_MASK 0x0f
++#define STREAMZAP_TIMEOUT 0xff
++#define STREAMZAP_RESOLUTION 256
++
++/* number of samples buffered */
++#define STREAMZAP_BUF_LEN 128
++
++enum StreamzapDecoderState {
++ PulseSpace,
++ FullPulse,
++ FullSpace,
++ IgnorePulse
++};
++
++/* Structure to hold all of our device specific stuff
++ *
++ * some remarks regarding locking:
++ * theoretically this struct can be accessed from three threads:
++ *
++ * - from lirc_dev through set_use_inc/set_use_dec
++ *
++ * - from the USB layer throuh probe/disconnect/irq
++ *
++ * Careful placement of lirc_register_driver/lirc_unregister_driver
++ * calls will prevent conflicts. lirc_dev makes sure that
++ * set_use_inc/set_use_dec are not being executed and will not be
++ * called after lirc_unregister_driver returns.
++ *
++ * - by the timer callback
++ *
++ * The timer is only running when the device is connected and the
++ * LIRC device is open. Making sure the timer is deleted by
++ * set_use_dec will make conflicts impossible.
++ */
++struct usb_streamzap {
++
++ /* usb */
++ /* save off the usb device pointer */
++ struct usb_device *udev;
++ /* the interface for this device */
++ struct usb_interface *interface;
++
++ /* buffer & dma */
++ unsigned char *buf_in;
++ dma_addr_t dma_in;
++ unsigned int buf_in_len;
++
++ struct usb_endpoint_descriptor *endpoint;
++
++ /* IRQ */
++ struct urb *urb_in;
++
++ /* lirc */
++ struct lirc_driver *driver;
++ struct lirc_buffer *delay_buf;
++
++ /* timer used to support delay buffering */
++ struct timer_list delay_timer;
++ int timer_running;
++ spinlock_t timer_lock;
++
++ /* tracks whether we are currently receiving some signal */
++ int idle;
++ /* sum of signal lengths received since signal start */
++ unsigned long sum;
++ /* start time of signal; necessary for gap tracking */
++ struct timeval signal_last;
++ struct timeval signal_start;
++ enum StreamzapDecoderState decoder_state;
++ struct timer_list flush_timer;
++ int flush;
++ int in_use;
++ int timeout_enabled;
++};
++
++
++/* local function prototypes */
++static int streamzap_probe(struct usb_interface *interface,
++ const struct usb_device_id *id);
++static void streamzap_disconnect(struct usb_interface *interface);
++static void usb_streamzap_irq(struct urb *urb);
++static int streamzap_use_inc(void *data);
++static void streamzap_use_dec(void *data);
++static int streamzap_ioctl(struct inode *node, struct file *filep,
++ unsigned int cmd, unsigned long arg);
++static int streamzap_suspend(struct usb_interface *intf, pm_message_t message);
++static int streamzap_resume(struct usb_interface *intf);
++
++/* usb specific object needed to register this driver with the usb subsystem */
++
++static struct usb_driver streamzap_driver = {
++ .name = DRIVER_NAME,
++ .probe = streamzap_probe,
++ .disconnect = streamzap_disconnect,
++ .suspend = streamzap_suspend,
++ .resume = streamzap_resume,
++ .id_table = streamzap_table,
++};
++
++static void stop_timer(struct usb_streamzap *sz)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&sz->timer_lock, flags);
++ if (sz->timer_running) {
++ sz->timer_running = 0;
++ spin_unlock_irqrestore(&sz->timer_lock, flags);
++ del_timer_sync(&sz->delay_timer);
++ } else {
++ spin_unlock_irqrestore(&sz->timer_lock, flags);
++ }
++}
++
++static void flush_timeout(unsigned long arg)
++{
++ struct usb_streamzap *sz = (struct usb_streamzap *) arg;
++
++ /* finally start accepting data */
++ sz->flush = 0;
++}
++static void delay_timeout(unsigned long arg)
++{
++ unsigned long flags;
++ /* deliver data every 10 ms */
++ static unsigned long timer_inc =
++ (10000/(1000000/HZ)) == 0 ? 1 : (10000/(1000000/HZ));
++ struct usb_streamzap *sz = (struct usb_streamzap *) arg;
++ int data;
++
++ spin_lock_irqsave(&sz->timer_lock, flags);
++
++ if (!lirc_buffer_empty(sz->delay_buf) &&
++ !lirc_buffer_full(sz->driver->rbuf)) {
++ lirc_buffer_read(sz->delay_buf, (unsigned char *) &data);
++ lirc_buffer_write(sz->driver->rbuf, (unsigned char *) &data);
++ }
++ if (!lirc_buffer_empty(sz->delay_buf)) {
++ while (lirc_buffer_available(sz->delay_buf) <
++ STREAMZAP_BUF_LEN / 2 &&
++ !lirc_buffer_full(sz->driver->rbuf)) {
++ lirc_buffer_read(sz->delay_buf,
++ (unsigned char *) &data);
++ lirc_buffer_write(sz->driver->rbuf,
++ (unsigned char *) &data);
++ }
++ if (sz->timer_running) {
++ sz->delay_timer.expires = jiffies + timer_inc;
++ add_timer(&sz->delay_timer);
++ }
++ } else {
++ sz->timer_running = 0;
++ }
++
++ if (!lirc_buffer_empty(sz->driver->rbuf))
++ wake_up(&sz->driver->rbuf->wait_poll);
++
++ spin_unlock_irqrestore(&sz->timer_lock, flags);
++}
++
++static void flush_delay_buffer(struct usb_streamzap *sz)
++{
++ int data;
++ int empty = 1;
++
++ while (!lirc_buffer_empty(sz->delay_buf)) {
++ empty = 0;
++ lirc_buffer_read(sz->delay_buf, (unsigned char *) &data);
++ if (!lirc_buffer_full(sz->driver->rbuf)) {
++ lirc_buffer_write(sz->driver->rbuf,
++ (unsigned char *) &data);
++ } else {
++ dprintk("buffer overflow", sz->driver->minor);
++ }
++ }
++ if (!empty)
++ wake_up(&sz->driver->rbuf->wait_poll);
++}
++
++static void push(struct usb_streamzap *sz, unsigned char *data)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&sz->timer_lock, flags);
++ if (lirc_buffer_full(sz->delay_buf)) {
++ int read_data;
++
++ lirc_buffer_read(sz->delay_buf,
++ (unsigned char *) &read_data);
++ if (!lirc_buffer_full(sz->driver->rbuf)) {
++ lirc_buffer_write(sz->driver->rbuf,
++ (unsigned char *) &read_data);
++ } else {
++ dprintk("buffer overflow", sz->driver->minor);
++ }
++ }
++
++ lirc_buffer_write(sz->delay_buf, data);
++
++ if (!sz->timer_running) {
++ sz->delay_timer.expires = jiffies + HZ/10;
++ add_timer(&sz->delay_timer);
++ sz->timer_running = 1;
++ }
++
++ spin_unlock_irqrestore(&sz->timer_lock, flags);
++}
++
++static void push_full_pulse(struct usb_streamzap *sz,
++ unsigned char value)
++{
++ int pulse;
++
++ if (sz->idle) {
++ long deltv;
++ int tmp;
++
++ sz->signal_last = sz->signal_start;
++ do_gettimeofday(&sz->signal_start);
++
++ deltv = sz->signal_start.tv_sec-sz->signal_last.tv_sec;
++ if (deltv > 15) {
++ /* really long time */
++ tmp = LIRC_SPACE(LIRC_VALUE_MASK);
++ } else {
++ tmp = (int) (deltv*1000000+
++ sz->signal_start.tv_usec -
++ sz->signal_last.tv_usec);
++ tmp -= sz->sum;
++ tmp = LIRC_SPACE(tmp);
++ }
++ dprintk("ls %u", sz->driver->minor, tmp);
++ push(sz, (char *)&tmp);
++
++ sz->idle = 0;
++ sz->sum = 0;
++ }
++
++ pulse = ((int) value) * STREAMZAP_RESOLUTION;
++ pulse += STREAMZAP_RESOLUTION / 2;
++ sz->sum += pulse;
++ pulse = LIRC_PULSE(pulse);
++
++ dprintk("p %u", sz->driver->minor, pulse & PULSE_MASK);
++ push(sz, (char *)&pulse);
++}
++
++static void push_half_pulse(struct usb_streamzap *sz,
++ unsigned char value)
++{
++ push_full_pulse(sz, (value & STREAMZAP_PULSE_MASK)>>4);
++}
++
++static void push_full_space(struct usb_streamzap *sz,
++ unsigned char value)
++{
++ int space;
++
++ space = ((int) value)*STREAMZAP_RESOLUTION;
++ space += STREAMZAP_RESOLUTION/2;
++ sz->sum += space;
++ space = LIRC_SPACE(space);
++ dprintk("s %u", sz->driver->minor, space);
++ push(sz, (char *)&space);
++}
++
++static void push_half_space(struct usb_streamzap *sz,
++ unsigned char value)
++{
++ push_full_space(sz, value & STREAMZAP_SPACE_MASK);
++}
++
++/**
++ * usb_streamzap_irq - IRQ handler
++ *
++ * This procedure is invoked on reception of data from
++ * the usb remote.
++ */
++static void usb_streamzap_irq(struct urb *urb)
++{
++ struct usb_streamzap *sz;
++ int len;
++ unsigned int i = 0;
++
++ if (!urb)
++ return;
++
++ sz = urb->context;
++ len = urb->actual_length;
++
++ switch (urb->status) {
++ case -ECONNRESET:
++ case -ENOENT:
++ case -ESHUTDOWN:
++ /*
++ * this urb is terminated, clean up.
++ * sz might already be invalid at this point
++ */
++ dprintk("urb status: %d", -1, urb->status);
++ return;
++ default:
++ break;
++ }
++
++ dprintk("received %d", sz->driver->minor, urb->actual_length);
++ if (!sz->flush) {
++ for (i = 0; i < urb->actual_length; i++) {
++ dprintk("%d: %x", sz->driver->minor,
++ i, (unsigned char) sz->buf_in[i]);
++ switch (sz->decoder_state) {
++ case PulseSpace:
++ if ((sz->buf_in[i]&STREAMZAP_PULSE_MASK) ==
++ STREAMZAP_PULSE_MASK) {
++ sz->decoder_state = FullPulse;
++ continue;
++ } else if ((sz->buf_in[i]&STREAMZAP_SPACE_MASK)
++ == STREAMZAP_SPACE_MASK) {
++ push_half_pulse(sz, sz->buf_in[i]);
++ sz->decoder_state = FullSpace;
++ continue;
++ } else {
++ push_half_pulse(sz, sz->buf_in[i]);
++ push_half_space(sz, sz->buf_in[i]);
++ }
++ break;
++ case FullPulse:
++ push_full_pulse(sz, sz->buf_in[i]);
++ sz->decoder_state = IgnorePulse;
++ break;
++ case FullSpace:
++ if (sz->buf_in[i] == STREAMZAP_TIMEOUT) {
++ sz->idle = 1;
++ stop_timer(sz);
++ if (sz->timeout_enabled) {
++ int timeout =
++ LIRC_TIMEOUT
++ (STREAMZAP_TIMEOUT *
++ STREAMZAP_RESOLUTION);
++ push(sz, (char *)&timeout);
++ }
++ flush_delay_buffer(sz);
++ } else
++ push_full_space(sz, sz->buf_in[i]);
++ sz->decoder_state = PulseSpace;
++ break;
++ case IgnorePulse:
++ if ((sz->buf_in[i]&STREAMZAP_SPACE_MASK) ==
++ STREAMZAP_SPACE_MASK) {
++ sz->decoder_state = FullSpace;
++ continue;
++ }
++ push_half_space(sz, sz->buf_in[i]);
++ sz->decoder_state = PulseSpace;
++ break;
++ }
++ }
++ }
++
++ usb_submit_urb(urb, GFP_ATOMIC);
++
++ return;
++}
++
++static struct file_operations streamzap_fops = {
++ .owner = THIS_MODULE,
++ .ioctl = streamzap_ioctl,
++ .read = lirc_dev_fop_read,
++ .write = lirc_dev_fop_write,
++ .poll = lirc_dev_fop_poll,
++ .open = lirc_dev_fop_open,
++ .release = lirc_dev_fop_close,
++};
++
++
++/**
++ * streamzap_probe
++ *
++ * Called by usb-core to associated with a candidate device
++ * On any failure the return value is the ERROR
++ * On success return 0
++ */
++static int streamzap_probe(struct usb_interface *interface,
++ const struct usb_device_id *id)
++{
++ struct usb_device *udev = interface_to_usbdev(interface);
++ struct usb_host_interface *iface_host;
++ struct usb_streamzap *sz;
++ struct lirc_driver *driver;
++ struct lirc_buffer *lirc_buf;
++ struct lirc_buffer *delay_buf;
++ char buf[63], name[128] = "";
++ int retval = -ENOMEM;
++ int minor = 0;
++
++ /* Allocate space for device driver specific data */
++ sz = kzalloc(sizeof(struct usb_streamzap), GFP_KERNEL);
++ if (sz == NULL)
++ return -ENOMEM;
++
++ sz->udev = udev;
++ sz->interface = interface;
++
++ /* Check to ensure endpoint information matches requirements */
++ iface_host = interface->cur_altsetting;
++
++ if (iface_host->desc.bNumEndpoints != 1) {
++ err("%s: Unexpected desc.bNumEndpoints (%d)", __func__,
++ iface_host->desc.bNumEndpoints);
++ retval = -ENODEV;
++ goto free_sz;
++ }
++
++ sz->endpoint = &(iface_host->endpoint[0].desc);
++ if ((sz->endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
++ != USB_DIR_IN) {
++ err("%s: endpoint doesn't match input device 02%02x",
++ __func__, sz->endpoint->bEndpointAddress);
++ retval = -ENODEV;
++ goto free_sz;
++ }
++
++ if ((sz->endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ != USB_ENDPOINT_XFER_INT) {
++ err("%s: endpoint attributes don't match xfer 02%02x",
++ __func__, sz->endpoint->bmAttributes);
++ retval = -ENODEV;
++ goto free_sz;
++ }
++
++ if (sz->endpoint->wMaxPacketSize == 0) {
++ err("%s: endpoint message size==0? ", __func__);
++ retval = -ENODEV;
++ goto free_sz;
++ }
++
++ /* Allocate the USB buffer and IRQ URB */
++
++ sz->buf_in_len = sz->endpoint->wMaxPacketSize;
++ sz->buf_in = usb_buffer_alloc(sz->udev, sz->buf_in_len,
++ GFP_ATOMIC, &sz->dma_in);
++ if (sz->buf_in == NULL)
++ goto free_sz;
++
++ sz->urb_in = usb_alloc_urb(0, GFP_KERNEL);
++ if (sz->urb_in == NULL)
++ goto free_sz;
++
++ /* Connect this device to the LIRC sub-system */
++ driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
++ if (!driver)
++ goto free_sz;
++
++ lirc_buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!lirc_buf)
++ goto free_driver;
++ if (lirc_buffer_init(lirc_buf, sizeof(int), STREAMZAP_BUF_LEN))
++ goto kfree_lirc_buf;
++
++ delay_buf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);
++ if (!delay_buf)
++ goto free_lirc_buf;
++ if (lirc_buffer_init(delay_buf, sizeof(int), STREAMZAP_BUF_LEN))
++ goto kfree_delay_buf;
++
++ sz->driver = driver;
++ strcpy(sz->driver->name, DRIVER_NAME);
++ sz->driver->minor = -1;
++ sz->driver->sample_rate = 0;
++ sz->driver->code_length = sizeof(int) * 8;
++ sz->driver->features = LIRC_CAN_REC_MODE2 |
++ LIRC_CAN_GET_REC_RESOLUTION |
++ LIRC_CAN_SET_REC_TIMEOUT;
++ sz->driver->data = sz;
++ sz->driver->min_timeout = STREAMZAP_TIMEOUT * STREAMZAP_RESOLUTION;
++ sz->driver->max_timeout = STREAMZAP_TIMEOUT * STREAMZAP_RESOLUTION;
++ sz->driver->rbuf = lirc_buf;
++ sz->delay_buf = delay_buf;
++ sz->driver->set_use_inc = &streamzap_use_inc;
++ sz->driver->set_use_dec = &streamzap_use_dec;
++ sz->driver->fops = &streamzap_fops;
++ sz->driver->dev = &interface->dev;
++ sz->driver->owner = THIS_MODULE;
++
++ sz->idle = 1;
++ sz->decoder_state = PulseSpace;
++ init_timer(&sz->delay_timer);
++ sz->delay_timer.function = delay_timeout;
++ sz->delay_timer.data = (unsigned long) sz;
++ sz->timer_running = 0;
++ spin_lock_init(&sz->timer_lock);
++
++ init_timer(&sz->flush_timer);
++ sz->flush_timer.function = flush_timeout;
++ sz->flush_timer.data = (unsigned long) sz;
++ /* Complete final initialisations */
++
++ usb_fill_int_urb(sz->urb_in, udev,
++ usb_rcvintpipe(udev, sz->endpoint->bEndpointAddress),
++ sz->buf_in, sz->buf_in_len, usb_streamzap_irq, sz,
++ sz->endpoint->bInterval);
++ sz->urb_in->transfer_dma = sz->dma_in;
++ sz->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
++
++ if (udev->descriptor.iManufacturer
++ && usb_string(udev, udev->descriptor.iManufacturer,
++ buf, sizeof(buf)) > 0)
++ strlcpy(name, buf, sizeof(name));
++
++ if (udev->descriptor.iProduct
++ && usb_string(udev, udev->descriptor.iProduct,
++ buf, sizeof(buf)) > 0)
++ snprintf(name + strlen(name), sizeof(name) - strlen(name),
++ " %s", buf);
++
++ minor = lirc_register_driver(driver);
++
++ if (minor < 0)
++ goto free_delay_buf;
++
++ sz->driver->minor = minor;
++
++ usb_set_intfdata(interface, sz);
++
++ printk(KERN_INFO DRIVER_NAME "[%d]: %s on usb%d:%d attached\n",
++ sz->driver->minor, name,
++ udev->bus->busnum, sz->udev->devnum);
++
++ return 0;
++
++free_delay_buf:
++ lirc_buffer_free(sz->delay_buf);
++kfree_delay_buf:
++ kfree(delay_buf);
++free_lirc_buf:
++ lirc_buffer_free(sz->driver->rbuf);
++kfree_lirc_buf:
++ kfree(lirc_buf);
++free_driver:
++ kfree(driver);
++free_sz:
++ if (retval == -ENOMEM)
++ err("Out of memory");
++
++ if (sz) {
++ usb_free_urb(sz->urb_in);
++ usb_buffer_free(udev, sz->buf_in_len, sz->buf_in, sz->dma_in);
++ kfree(sz);
++ }
++
++ return retval;
++}
++
++static int streamzap_use_inc(void *data)
++{
++ struct usb_streamzap *sz = data;
++
++ if (!sz) {
++ dprintk("%s called with no context", -1, __func__);
++ return -EINVAL;
++ }
++ dprintk("set use inc", sz->driver->minor);
++
++ lirc_buffer_clear(sz->driver->rbuf);
++ lirc_buffer_clear(sz->delay_buf);
++
++ sz->flush_timer.expires = jiffies + HZ;
++ sz->flush = 1;
++ add_timer(&sz->flush_timer);
++
++ sz->urb_in->dev = sz->udev;
++ if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
++ dprintk("open result = -EIO error submitting urb",
++ sz->driver->minor);
++ return -EIO;
++ }
++ sz->in_use++;
++
++ return 0;
++}
++
++static void streamzap_use_dec(void *data)
++{
++ struct usb_streamzap *sz = data;
++
++ if (!sz) {
++ dprintk("%s called with no context", -1, __func__);
++ return;
++ }
++ dprintk("set use dec", sz->driver->minor);
++
++ if (sz->flush) {
++ sz->flush = 0;
++ del_timer_sync(&sz->flush_timer);
++ }
++
++ usb_kill_urb(sz->urb_in);
++
++ stop_timer(sz);
++
++ sz->in_use--;
++}
++
++static int streamzap_ioctl(struct inode *node, struct file *filep,
++ unsigned int cmd, unsigned long arg)
++{
++ int result = 0;
++ int val;
++ struct usb_streamzap *sz = lirc_get_pdata(filep);
++
++ switch (cmd) {
++ case LIRC_GET_REC_RESOLUTION:
++ result = put_user(STREAMZAP_RESOLUTION, (unsigned int *) arg);
++ break;
++ case LIRC_SET_REC_TIMEOUT:
++ result = get_user(val, (int *)arg);
++ if (result == 0) {
++ if (val == STREAMZAP_TIMEOUT * STREAMZAP_RESOLUTION)
++ sz->timeout_enabled = 1;
++ else if (val == 0)
++ sz->timeout_enabled = 0;
++ else
++ result = -EINVAL;
++ }
++ break;
++ default:
++ return lirc_dev_fop_ioctl(node, filep, cmd, arg);
++ }
++ return result;
++}
++
++/**
++ * streamzap_disconnect
++ *
++ * Called by the usb core when the device is removed from the system.
++ *
++ * This routine guarantees that the driver will not submit any more urbs
++ * by clearing dev->udev. It is also supposed to terminate any currently
++ * active urbs. Unfortunately, usb_bulk_msg(), used in streamzap_read(),
++ * does not provide any way to do this.
++ */
++static void streamzap_disconnect(struct usb_interface *interface)
++{
++ struct usb_streamzap *sz;
++ int errnum;
++ int minor;
++
++ sz = usb_get_intfdata(interface);
++
++ /* unregister from the LIRC sub-system */
++
++ errnum = lirc_unregister_driver(sz->driver->minor);
++ if (errnum != 0)
++ dprintk("error in lirc_unregister: (returned %d)",
++ sz->driver->minor, errnum);
++
++ lirc_buffer_free(sz->delay_buf);
++ lirc_buffer_free(sz->driver->rbuf);
++
++ /* unregister from the USB sub-system */
++
++ usb_free_urb(sz->urb_in);
++
++ usb_buffer_free(sz->udev, sz->buf_in_len, sz->buf_in, sz->dma_in);
++
++ minor = sz->driver->minor;
++ kfree(sz->driver->rbuf);
++ kfree(sz->driver);
++ kfree(sz->delay_buf);
++ kfree(sz);
++
++ printk(KERN_INFO DRIVER_NAME "[%d]: disconnected\n", minor);
++}
++
++static int streamzap_suspend(struct usb_interface *intf, pm_message_t message)
++{
++ struct usb_streamzap *sz = usb_get_intfdata(intf);
++
++ printk(KERN_INFO DRIVER_NAME "[%d]: suspend\n", sz->driver->minor);
++ if (sz->in_use) {
++ if (sz->flush) {
++ sz->flush = 0;
++ del_timer_sync(&sz->flush_timer);
++ }
++
++ stop_timer(sz);
++
++ usb_kill_urb(sz->urb_in);
++ }
++ return 0;
++}
++
++static int streamzap_resume(struct usb_interface *intf)
++{
++ struct usb_streamzap *sz = usb_get_intfdata(intf);
++
++ lirc_buffer_clear(sz->driver->rbuf);
++ lirc_buffer_clear(sz->delay_buf);
++
++ if (sz->in_use) {
++ sz->flush_timer.expires = jiffies + HZ;
++ sz->flush = 1;
++ add_timer(&sz->flush_timer);
++
++ sz->urb_in->dev = sz->udev;
++ if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
++ dprintk("open result = -EIO error submitting urb",
++ sz->driver->minor);
++ return -EIO;
++ }
++ }
++ return 0;
++}
++
++/**
++ * usb_streamzap_init
++ */
++static int __init usb_streamzap_init(void)
++{
++ int result;
++
++ /* register this driver with the USB subsystem */
++ result = usb_register(&streamzap_driver);
++
++ if (result) {
++ err("usb_register failed. Error number %d",
++ result);
++ return result;
++ }
++
++ printk(KERN_INFO DRIVER_NAME " " DRIVER_VERSION " registered\n");
++ return 0;
++}
++
++/**
++ * usb_streamzap_exit
++ */
++static void __exit usb_streamzap_exit(void)
++{
++ usb_deregister(&streamzap_driver);
++}
++
++
++module_init(usb_streamzap_init);
++module_exit(usb_streamzap_exit);
++
++MODULE_AUTHOR("Christoph Bartelmus, Greg Wickham, Adrian Dewhurst");
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE("GPL");
++
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
+diff --git a/drivers/input/lirc/lirc_ttusbir.c b/drivers/input/lirc/lirc_ttusbir.c
+new file mode 100644
+index 0000000..b0a4e8b
+--- /dev/null
++++ b/drivers/input/lirc/lirc_ttusbir.c
+@@ -0,0 +1,397 @@
++/*
++ * lirc_ttusbir.c
++ *
++ * lirc_ttusbir - LIRC device driver for the TechnoTrend USB IR Receiver
++ *
++ * Copyright (C) 2007 Stefan Macher <st_maker-lirc@yahoo.de>
++ *
++ * This LIRC driver provides access to the TechnoTrend USB IR Receiver.
++ * The receiver delivers the IR signal as raw sampled true/false data in
++ * isochronous USB packets each of size 128 byte.
++ * Currently the driver reduces the sampling rate by factor of 8 as this
++ * is still more than enough to decode RC-5 - others should be analyzed.
++ * But the driver does not rely on RC-5 it should be able to decode every
++ * IR signal that is not too fast.
++ */
++
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/usb.h>
++
++#include <linux/lirc.h>
++#include "lirc_dev.h"
++
++MODULE_DESCRIPTION("TechnoTrend USB IR device driver for LIRC");
++MODULE_AUTHOR("Stefan Macher (st_maker-lirc@yahoo.de)");
++MODULE_LICENSE("GPL");
++
++/* #define DEBUG */
++#ifdef DEBUG
++#define DPRINTK printk
++#else
++#define DPRINTK(_x_, a...)
++#endif
++
++/* function declarations */
++static int probe(struct usb_interface *intf, const struct usb_device_id *id);
++static void disconnect(struct usb_interface *intf);
++static void urb_complete(struct urb *urb);
++static int set_use_inc(void *data);
++static void set_use_dec(void *data);
++
++static int num_urbs = 2;
++module_param(num_urbs, int, S_IRUGO);
++MODULE_PARM_DESC(num_urbs,
++ "Number of URBs in queue. Try to increase to 4 in case "
++ "of problems (default: 2; minimum: 2)");
++
++/* table of devices that work with this driver */
++static struct usb_device_id device_id_table[] = {
++ /* TechnoTrend USB IR Receiver */
++ { USB_DEVICE(0x0B48, 0x2003) },
++ /* Terminating entry */
++ { }
++};
++MODULE_DEVICE_TABLE(usb, device_id_table);
++
++/* USB driver definition */
++static struct usb_driver usb_driver = {
++ .name = "TTUSBIR",
++ .id_table = &(device_id_table[0]),
++ .probe = probe,
++ .disconnect = disconnect,
++};
++
++/* USB device definition */
++struct ttusbir_device {
++ struct usb_driver *usb_driver;
++ struct usb_device *udev;
++ struct usb_interface *interf;
++ struct usb_class_driver class_driver;
++ unsigned int ifnum; /* Interface number to use */
++ unsigned int alt_setting; /* alternate setting to use */
++ unsigned int endpoint; /* Endpoint to use */
++ struct urb **urb; /* num_urb URB pointers*/
++ char **buffer; /* 128 byte buffer for each URB */
++ struct lirc_buffer rbuf; /* Buffer towards LIRC */
++ struct lirc_driver driver;
++ int minor;
++ int last_pulse; /* remembers if last received byte was pulse or space */
++ int last_num; /* remembers how many last bytes appeared */
++ int opened;
++};
++
++/*** LIRC specific functions ***/
++static int set_use_inc(void *data)
++{
++ int i, retval;
++ struct ttusbir_device *ttusbir = data;
++
++ DPRINTK("Sending first URBs\n");
++ /* @TODO Do I need to check if I am already opened */
++ ttusbir->opened = 1;
++
++ for (i = 0; i < num_urbs; i++) {
++ retval = usb_submit_urb(ttusbir->urb[i], GFP_KERNEL);
++ if (retval) {
++ err("%s: usb_submit_urb failed on urb %d",
++ __func__, i);
++ return retval;
++ }
++ }
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++ struct ttusbir_device *ttusbir = data;
++
++ DPRINTK("Device closed\n");
++
++ ttusbir->opened = 0;
++}
++
++/*** USB specific functions ***/
++
++/*
++ * This mapping table is used to do a very simple filtering of the
++ * input signal.
++ * For a value with at least 4 bits set it returns 0xFF otherwise
++ * 0x00. For faster IR signals this can not be used. But for RC-5 we
++ * still have about 14 samples per pulse/space, i.e. we sample with 14
++ * times higher frequency than the signal frequency
++ */
++const unsigned char map_table[] =
++{
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
++ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
++};
++
++static void urb_complete(struct urb *urb)
++{
++ struct ttusbir_device *ttusbir;
++ unsigned char *buf;
++ int i;
++ int l;
++
++ ttusbir = urb->context;
++
++ if (!ttusbir->opened)
++ return;
++
++ buf = (unsigned char *)urb->transfer_buffer;
++
++ for (i = 0; i < 128; i++) {
++ /* Here we do the filtering and some kind of down sampling */
++ buf[i] = ~map_table[buf[i]];
++ if (ttusbir->last_pulse == buf[i]) {
++ if (ttusbir->last_num < PULSE_MASK/63)
++ ttusbir->last_num++;
++ /*
++ * else we are in a idle period and do not need to
++ * increment any longer
++ */
++ } else {
++ l = ttusbir->last_num * 62; /* about 62 = us/byte */
++ if (ttusbir->last_pulse) /* pulse or space? */
++ l |= PULSE_BIT;
++ if (!lirc_buffer_full(&ttusbir->rbuf)) {
++ lirc_buffer_write(&ttusbir->rbuf, (void *)&l);
++ wake_up_interruptible(&ttusbir->rbuf.wait_poll);
++ }
++ ttusbir->last_num = 0;
++ ttusbir->last_pulse = buf[i];
++ }
++ }
++ usb_submit_urb(urb, GFP_ATOMIC); /* keep data rolling :-) */
++}
++
++/*
++ * Called whenever the USB subsystem thinks we could be the right driver
++ * to handle this device
++ */
++static int probe(struct usb_interface *intf, const struct usb_device_id *id)
++{
++ int alt_set, endp;
++ int found = 0;
++ int i, j;
++ int struct_size;
++ struct usb_host_interface *host_interf;
++ struct usb_interface_descriptor *interf_desc;
++ struct usb_host_endpoint *host_endpoint;
++ struct ttusbir_device *ttusbir;
++
++ DPRINTK("Module ttusbir probe\n");
++
++ /* To reduce memory fragmentation we use only one allocation */
++ struct_size = sizeof(struct ttusbir_device) +
++ (sizeof(struct urb *) * num_urbs) +
++ (sizeof(char *) * num_urbs) +
++ (num_urbs * 128);
++ ttusbir = kzalloc(struct_size, GFP_KERNEL);
++ if (!ttusbir)
++ return -ENOMEM;
++
++ ttusbir->urb = (struct urb **)((char *)ttusbir +
++ sizeof(struct ttusbir_device));
++ ttusbir->buffer = (char **)((char *)ttusbir->urb +
++ (sizeof(struct urb *) * num_urbs));
++ for (i = 0; i < num_urbs; i++)
++ ttusbir->buffer[i] = (char *)ttusbir->buffer +
++ (sizeof(char *)*num_urbs) + (i * 128);
++
++ ttusbir->usb_driver = &usb_driver;
++ ttusbir->alt_setting = -1;
++ /* @TODO check if error can be returned */
++ ttusbir->udev = usb_get_dev(interface_to_usbdev(intf));
++ ttusbir->interf = intf;
++ ttusbir->last_pulse = 0x00;
++ ttusbir->last_num = 0;
++
++ /*
++ * Now look for interface setting we can handle
++ * We are searching for the alt setting where end point
++ * 0x82 has max packet size 16
++ */
++ for (alt_set = 0; alt_set < intf->num_altsetting && !found; alt_set++) {
++ host_interf = &intf->altsetting[alt_set];
++ interf_desc = &host_interf->desc;
++ for (endp = 0; endp < interf_desc->bNumEndpoints; endp++) {
++ host_endpoint = &host_interf->endpoint[endp];
++ if ((host_endpoint->desc.bEndpointAddress == 0x82) &&
++ (host_endpoint->desc.wMaxPacketSize == 0x10)) {
++ ttusbir->alt_setting = alt_set;
++ ttusbir->endpoint = endp;
++ found = 1;
++ break;
++ }
++ }
++ }
++ if (ttusbir->alt_setting != -1)
++ DPRINTK("alt setting: %d\n", ttusbir->alt_setting);
++ else {
++ err("Could not find alternate setting\n");
++ kfree(ttusbir);
++ return -EINVAL;
++ }
++
++ /* OK lets setup this interface setting */
++ usb_set_interface(ttusbir->udev, 0, ttusbir->alt_setting);
++
++ /* Store device info in interface structure */
++ usb_set_intfdata(intf, ttusbir);
++
++ /* Register as a LIRC driver */
++ if (lirc_buffer_init(&ttusbir->rbuf, sizeof(int), 256) < 0) {
++ err("Could not get memory for LIRC data buffer\n");
++ usb_set_intfdata(intf, NULL);
++ kfree(ttusbir);
++ return -ENOMEM;
++ }
++ strcpy(ttusbir->driver.name, "TTUSBIR");
++ ttusbir->driver.minor = -1;
++ ttusbir->driver.code_length = 1;
++ ttusbir->driver.sample_rate = 0;
++ ttusbir->driver.data = ttusbir;
++ ttusbir->driver.add_to_buf = NULL;
++ ttusbir->driver.rbuf = &ttusbir->rbuf;
++ ttusbir->driver.set_use_inc = set_use_inc;
++ ttusbir->driver.set_use_dec = set_use_dec;
++ ttusbir->driver.dev = &intf->dev;
++ ttusbir->driver.owner = THIS_MODULE;
++ ttusbir->driver.features = LIRC_CAN_REC_MODE2;
++ ttusbir->minor = lirc_register_driver(&ttusbir->driver);
++ if (ttusbir->minor < 0) {
++ err("Error registering as LIRC driver\n");
++ usb_set_intfdata(intf, NULL);
++ lirc_buffer_free(&ttusbir->rbuf);
++ kfree(ttusbir);
++ return -EIO;
++ }
++
++ /* Allocate and setup the URB that we will use to talk to the device */
++ for (i = 0; i < num_urbs; i++) {
++ ttusbir->urb[i] = usb_alloc_urb(8, GFP_KERNEL);
++ if (!ttusbir->urb[i]) {
++ err("Could not allocate memory for the URB\n");
++ for (j = i - 1; j >= 0; j--)
++ kfree(ttusbir->urb[j]);
++ lirc_buffer_free(&ttusbir->rbuf);
++ lirc_unregister_driver(ttusbir->minor);
++ kfree(ttusbir);
++ usb_set_intfdata(intf, NULL);
++ return -ENOMEM;
++ }
++ ttusbir->urb[i]->dev = ttusbir->udev;
++ ttusbir->urb[i]->context = ttusbir;
++ ttusbir->urb[i]->pipe = usb_rcvisocpipe(ttusbir->udev,
++ ttusbir->endpoint);
++ ttusbir->urb[i]->interval = 1;
++ ttusbir->urb[i]->transfer_flags = URB_ISO_ASAP;
++ ttusbir->urb[i]->transfer_buffer = &ttusbir->buffer[i][0];
++ ttusbir->urb[i]->complete = urb_complete;
++ ttusbir->urb[i]->number_of_packets = 8;
++ ttusbir->urb[i]->transfer_buffer_length = 128;
++ for (j = 0; j < 8; j++) {
++ ttusbir->urb[i]->iso_frame_desc[j].offset = j*16;
++ ttusbir->urb[i]->iso_frame_desc[j].length = 16;
++ }
++ }
++ return 0;
++}
++
++/**
++ * Called when the driver is unloaded or the device is unplugged
++ */
++static void disconnect(struct usb_interface *intf)
++{
++ int i;
++ struct ttusbir_device *ttusbir;
++
++ DPRINTK("Module ttusbir disconnect\n");
++
++ ttusbir = (struct ttusbir_device *) usb_get_intfdata(intf);
++ usb_set_intfdata(intf, NULL);
++ lirc_unregister_driver(ttusbir->minor);
++ DPRINTK("unregistered\n");
++
++ for (i = 0; i < num_urbs; i++) {
++ usb_kill_urb(ttusbir->urb[i]);
++ usb_free_urb(ttusbir->urb[i]);
++ }
++ DPRINTK("URBs killed\n");
++ lirc_buffer_free(&ttusbir->rbuf);
++ kfree(ttusbir);
++}
++
++static int ttusbir_init_module(void)
++{
++ int result;
++
++ DPRINTK(KERN_DEBUG "Module ttusbir init\n");
++
++ /* register this driver with the USB subsystem */
++ result = usb_register(&usb_driver);
++ if (result)
++ err("usb_register failed. Error number %d", result);
++ return result;
++}
++
++static void ttusbir_exit_module(void)
++{
++ printk(KERN_DEBUG "Module ttusbir exit\n");
++ usb_deregister(&usb_driver);
++}
++
++module_init(ttusbir_init_module);
++module_exit(ttusbir_exit_module);
+diff --git a/drivers/input/lirc/lirc_zilog.c b/drivers/input/lirc/lirc_zilog.c
+new file mode 100644
+index 0000000..9f73430
+--- /dev/null
++++ b/drivers/input/lirc/lirc_zilog.c
+@@ -0,0 +1,1388 @@
++/*
++ * i2c IR lirc driver for devices with zilog IR processors
++ *
++ * Copyright (c) 2000 Gerd Knorr <kraxel@goldbach.in-berlin.de>
++ * modified for PixelView (BT878P+W/FM) by
++ * Michal Kochanowicz <mkochano@pld.org.pl>
++ * Christoph Bartelmus <lirc@bartelmus.de>
++ * modified for KNC ONE TV Station/Anubis Typhoon TView Tuner by
++ * Ulrich Mueller <ulrich.mueller42@web.de>
++ * modified for Asus TV-Box and Creative/VisionTek BreakOut-Box by
++ * Stefan Jahn <stefan@lkcc.org>
++ * modified for inclusion into kernel sources by
++ * Jerome Brock <jbrock@users.sourceforge.net>
++ * modified for Leadtek Winfast PVR2000 by
++ * Thomas Reitmayr (treitmayr@yahoo.com)
++ * modified for Hauppauge PVR-150 IR TX device by
++ * Mark Weaver <mark@npsl.co.uk>
++ * changed name from lirc_pvr150 to lirc_zilog, works on more than pvr-150
++ * Jarod Wilson <jarod@redhat.com>
++ *
++ * parts are cut&pasted from the lirc_i2c.c driver
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++
++#include <linux/version.h>
++#include <linux/module.h>
++#include <linux/kmod.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/fs.h>
++#include <linux/poll.h>
++#include <linux/string.h>
++#include <linux/timer.h>
++#include <linux/delay.h>
++#include <linux/completion.h>
++#include <linux/errno.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/firmware.h>
++#include <linux/vmalloc.h>
++
++#include <linux/mutex.h>
++#include <linux/kthread.h>
++
++#include "lirc_dev.h"
++#include <linux/lirc.h>
++
++struct IR {
++ struct lirc_driver l;
++
++ /* Device info */
++ struct mutex ir_lock;
++ int open;
++
++ /* RX device */
++ struct i2c_client c_rx;
++ int have_rx;
++
++ /* RX device buffer & lock */
++ struct lirc_buffer buf;
++ struct mutex buf_lock;
++
++ /* RX polling thread data */
++ struct completion *t_notify;
++ struct completion *t_notify2;
++ int shutdown;
++ struct task_struct *task;
++
++ /* RX read data */
++ unsigned char b[3];
++
++ /* TX device */
++ struct i2c_client c_tx;
++ int need_boot;
++ int have_tx;
++};
++
++/* Minor -> data mapping */
++static struct IR *ir_devices[MAX_IRCTL_DEVICES];
++
++/* Block size for IR transmitter */
++#define TX_BLOCK_SIZE 99
++
++/* Hauppauge IR transmitter data */
++struct tx_data_struct {
++ /* Boot block */
++ unsigned char *boot_data;
++
++ /* Start of binary data block */
++ unsigned char *datap;
++
++ /* End of binary data block */
++ unsigned char *endp;
++
++ /* Number of installed codesets */
++ unsigned int num_code_sets;
++
++ /* Pointers to codesets */
++ unsigned char **code_sets;
++
++ /* Global fixed data template */
++ int fixed[TX_BLOCK_SIZE];
++};
++
++static struct tx_data_struct *tx_data;
++static struct mutex tx_data_lock;
++
++#define zilog_notify(s, args...) printk(KERN_NOTICE KBUILD_MODNAME ": " s, \
++ ## args)
++#define zilog_error(s, args...) printk(KERN_ERR KBUILD_MODNAME ": " s, ## args)
++
++#define ZILOG_HAUPPAUGE_IR_RX_NAME "Zilog/Hauppauge IR RX"
++#define ZILOG_HAUPPAUGE_IR_TX_NAME "Zilog/Hauppauge IR TX"
++
++/* module parameters */
++static int debug; /* debug output */
++static int disable_rx; /* disable RX device */
++static int disable_tx; /* disable TX device */
++static int minor = -1; /* minor number */
++
++#define dprintk(fmt, args...) \
++ do { \
++ if (debug) \
++ printk(KERN_DEBUG KBUILD_MODNAME ": " fmt, \
++ ## args); \
++ } while (0)
++
++static int add_to_buf(struct IR *ir)
++{
++ __u16 code;
++ unsigned char codes[2];
++ unsigned char keybuf[6];
++ int got_data = 0;
++ int ret;
++ int failures = 0;
++ unsigned char sendbuf[1] = { 0 };
++
++ if (lirc_buffer_full(&ir->buf)) {
++ dprintk("buffer overflow\n");
++ return -EOVERFLOW;
++ }
++
++ /*
++ * service the device as long as it is returning
++ * data and we have space
++ */
++ do {
++ /*
++ * Lock i2c bus for the duration. RX/TX chips interfere so
++ * this is worth it
++ */
++ mutex_lock(&ir->ir_lock);
++
++ /*
++ * Send random "poll command" (?) Windows driver does this
++ * and it is a good point to detect chip failure.
++ */
++ ret = i2c_master_send(&ir->c_rx, sendbuf, 1);
++ if (ret != 1) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ if (failures >= 3) {
++ mutex_unlock(&ir->ir_lock);
++ zilog_error("unable to read from the IR chip "
++ "after 3 resets, giving up\n");
++ return ret;
++ }
++
++ /* Looks like the chip crashed, reset it */
++ zilog_error("polling the IR receiver chip failed, "
++ "trying reset\n");
++
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ schedule_timeout((100 * HZ + 999) / 1000);
++ ir->need_boot = 1;
++
++ ++failures;
++ mutex_unlock(&ir->ir_lock);
++ continue;
++ }
++
++ ret = i2c_master_recv(&ir->c_rx, keybuf, sizeof(keybuf));
++ mutex_unlock(&ir->ir_lock);
++ if (ret != sizeof(keybuf)) {
++ zilog_error("i2c_master_recv failed with %d -- "
++ "keeping last read buffer\n", ret);
++ } else {
++ ir->b[0] = keybuf[3];
++ ir->b[1] = keybuf[4];
++ ir->b[2] = keybuf[5];
++ dprintk("key (0x%02x/0x%02x)\n", ir->b[0], ir->b[1]);
++ }
++
++ /* key pressed ? */
++#ifdef I2C_HW_B_HDPVR
++ if (ir->c_rx.adapter->id == I2C_HW_B_HDPVR) {
++ if (got_data && (keybuf[0] == 0x80))
++ return 0;
++ else if (got_data && (keybuf[0] == 0x00))
++ return -ENODATA;
++ } else if ((ir->b[0] & 0x80) == 0)
++#else
++ if ((ir->b[0] & 0x80) == 0)
++#endif
++ return got_data ? 0 : -ENODATA;
++
++ /* look what we have */
++ code = (((__u16)ir->b[0] & 0x7f) << 6) | (ir->b[1] >> 2);
++
++ codes[0] = (code >> 8) & 0xff;
++ codes[1] = code & 0xff;
++
++ /* return it */
++ lirc_buffer_write(&ir->buf, codes);
++ ++got_data;
++ } while (!lirc_buffer_full(&ir->buf));
++
++ return 0;
++}
++
++/*
++ * Main function of the polling thread -- from lirc_dev.
++ * We don't fit the LIRC model at all anymore. This is horrible, but
++ * basically we have a single RX/TX device with a nasty failure mode
++ * that needs to be accounted for across the pair. lirc lets us provide
++ * fops, but prevents us from using the internal polling, etc. if we do
++ * so. Hence the replication. Might be neater to extend the LIRC model
++ * to account for this but I'd think it's a very special case of seriously
++ * messed up hardware.
++ */
++static int lirc_thread(void *arg)
++{
++ struct IR *ir = arg;
++
++ if (ir->t_notify != NULL)
++ complete(ir->t_notify);
++
++ dprintk("poll thread started\n");
++
++ do {
++ if (ir->open) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ /*
++ * This is ~113*2 + 24 + jitter (2*repeat gap +
++ * code length). We use this interval as the chip
++ * resets every time you poll it (bad!). This is
++ * therefore just sufficient to catch all of the
++ * button presses. It makes the remote much more
++ * responsive. You can see the difference by
++ * running irw and holding down a button. With
++ * 100ms, the old polling interval, you'll notice
++ * breaks in the repeat sequence corresponding to
++ * lost keypresses.
++ */
++ schedule_timeout((260 * HZ) / 1000);
++ if (ir->shutdown)
++ break;
++ if (!add_to_buf(ir))
++ wake_up_interruptible(&ir->buf.wait_poll);
++ } else {
++ /* if device not opened so we can sleep half a second */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ/2);
++ }
++ } while (!ir->shutdown);
++
++ if (ir->t_notify2 != NULL)
++ wait_for_completion(ir->t_notify2);
++
++ ir->task = NULL;
++ if (ir->t_notify != NULL)
++ complete(ir->t_notify);
++
++ dprintk("poll thread ended\n");
++ return 0;
++}
++
++static int set_use_inc(void *data)
++{
++ struct IR *ir = data;
++
++ if (ir->l.owner == NULL || try_module_get(ir->l.owner) == 0)
++ return -ENODEV;
++
++ /* lock bttv in memory while /dev/lirc is in use */
++ /*
++ * this is completely broken code. lirc_unregister_driver()
++ * must be possible even when the device is open
++ */
++ if (ir->c_rx.addr)
++ i2c_use_client(&ir->c_rx);
++ if (ir->c_tx.addr)
++ i2c_use_client(&ir->c_tx);
++
++ return 0;
++}
++
++static void set_use_dec(void *data)
++{
++ struct IR *ir = data;
++
++ if (ir->c_rx.addr)
++ i2c_release_client(&ir->c_rx);
++ if (ir->c_tx.addr)
++ i2c_release_client(&ir->c_tx);
++ if (ir->l.owner != NULL)
++ module_put(ir->l.owner);
++}
++
++/* safe read of a uint32 (always network byte order) */
++static int read_uint32(unsigned char **data,
++ unsigned char *endp, unsigned int *val)
++{
++ if (*data + 4 > endp)
++ return 0;
++ *val = ((*data)[0] << 24) | ((*data)[1] << 16) |
++ ((*data)[2] << 8) | (*data)[3];
++ *data += 4;
++ return 1;
++}
++
++/* safe read of a uint8 */
++static int read_uint8(unsigned char **data,
++ unsigned char *endp, unsigned char *val)
++{
++ if (*data + 1 > endp)
++ return 0;
++ *val = *((*data)++);
++ return 1;
++}
++
++/* safe skipping of N bytes */
++static int skip(unsigned char **data,
++ unsigned char *endp, unsigned int distance)
++{
++ if (*data + distance > endp)
++ return 0;
++ *data += distance;
++ return 1;
++}
++
++/* decompress key data into the given buffer */
++static int get_key_data(unsigned char *buf,
++ unsigned int codeset, unsigned int key)
++{
++ unsigned char *data, *endp, *diffs, *key_block;
++ unsigned char keys, ndiffs, id;
++ unsigned int base, lim, pos, i;
++
++ /* Binary search for the codeset */
++ for (base = 0, lim = tx_data->num_code_sets; lim; lim >>= 1) {
++ pos = base + (lim >> 1);
++ data = tx_data->code_sets[pos];
++
++ if (!read_uint32(&data, tx_data->endp, &i))
++ goto corrupt;
++
++ if (i == codeset)
++ break;
++ else if (codeset > i) {
++ base = pos + 1;
++ --lim;
++ }
++ }
++ /* Not found? */
++ if (!lim)
++ return -EPROTO;
++
++ /* Set end of data block */
++ endp = pos < tx_data->num_code_sets - 1 ?
++ tx_data->code_sets[pos + 1] : tx_data->endp;
++
++ /* Read the block header */
++ if (!read_uint8(&data, endp, &keys) ||
++ !read_uint8(&data, endp, &ndiffs) ||
++ ndiffs > TX_BLOCK_SIZE || keys == 0)
++ goto corrupt;
++
++ /* Save diffs & skip */
++ diffs = data;
++ if (!skip(&data, endp, ndiffs))
++ goto corrupt;
++
++ /* Read the id of the first key */
++ if (!read_uint8(&data, endp, &id))
++ goto corrupt;
++
++ /* Unpack the first key's data */
++ for (i = 0; i < TX_BLOCK_SIZE; ++i) {
++ if (tx_data->fixed[i] == -1) {
++ if (!read_uint8(&data, endp, &buf[i]))
++ goto corrupt;
++ } else {
++ buf[i] = (unsigned char)tx_data->fixed[i];
++ }
++ }
++
++ /* Early out key found/not found */
++ if (key == id)
++ return 0;
++ if (keys == 1)
++ return -EPROTO;
++
++ /* Sanity check */
++ key_block = data;
++ if (!skip(&data, endp, (keys - 1) * (ndiffs + 1)))
++ goto corrupt;
++
++ /* Binary search for the key */
++ for (base = 0, lim = keys - 1; lim; lim >>= 1) {
++ /* Seek to block */
++ unsigned char *key_data;
++ pos = base + (lim >> 1);
++ key_data = key_block + (ndiffs + 1) * pos;
++
++ if (*key_data == key) {
++ /* skip key id */
++ ++key_data;
++
++ /* found, so unpack the diffs */
++ for (i = 0; i < ndiffs; ++i) {
++ unsigned char val;
++ if (!read_uint8(&key_data, endp, &val) ||
++ diffs[i] >= TX_BLOCK_SIZE)
++ goto corrupt;
++ buf[diffs[i]] = val;
++ }
++
++ return 0;
++ } else if (key > *key_data) {
++ base = pos + 1;
++ --lim;
++ }
++ }
++ /* Key not found */
++ return -EPROTO;
++
++corrupt:
++ zilog_error("firmware is corrupt\n");
++ return -EFAULT;
++}
++
++/* send a block of data to the IR TX device */
++static int send_data_block(struct IR *ir, unsigned char *data_block)
++{
++ int i, j, ret;
++ unsigned char buf[5];
++
++ for (i = 0; i < TX_BLOCK_SIZE;) {
++ int tosend = TX_BLOCK_SIZE - i;
++ if (tosend > 4)
++ tosend = 4;
++ buf[0] = (unsigned char)(i + 1);
++ for (j = 0; j < tosend; ++j)
++ buf[1 + j] = data_block[i + j];
++ dprintk("%02x %02x %02x %02x %02x",
++ buf[0], buf[1], buf[2], buf[3], buf[4]);
++ ret = i2c_master_send(&ir->c_tx, buf, tosend + 1);
++ if (ret != tosend + 1) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++ i += tosend;
++ }
++ return 0;
++}
++
++/* send boot data to the IR TX device */
++static int send_boot_data(struct IR *ir)
++{
++ int ret;
++ unsigned char buf[4];
++
++ /* send the boot block */
++ ret = send_data_block(ir, tx_data->boot_data);
++ if (ret != 0)
++ return ret;
++
++ /* kick it off? */
++ buf[0] = 0x00;
++ buf[1] = 0x20;
++ ret = i2c_master_send(&ir->c_tx, buf, 2);
++ if (ret != 2) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++ ret = i2c_master_send(&ir->c_tx, buf, 1);
++ if (ret != 1) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++
++ /* Here comes the firmware version... (hopefully) */
++ ret = i2c_master_recv(&ir->c_tx, buf, 4);
++ if (ret != 4) {
++ zilog_error("i2c_master_recv failed with %d\n", ret);
++ return 0;
++ }
++ if (buf[0] != 0x80) {
++ zilog_error("unexpected IR TX response: %02x\n", buf[0]);
++ return 0;
++ }
++ zilog_notify("Zilog/Hauppauge IR blaster firmware version "
++ "%d.%d.%d loaded\n", buf[1], buf[2], buf[3]);
++
++ return 0;
++}
++
++/* unload "firmware", lock held */
++static void fw_unload_locked(void)
++{
++ if (tx_data) {
++ if (tx_data->code_sets)
++ vfree(tx_data->code_sets);
++
++ if (tx_data->datap)
++ vfree(tx_data->datap);
++
++ vfree(tx_data);
++ tx_data = NULL;
++ dprintk("successfully unloaded IR blaster firmware\n");
++ }
++}
++
++/* unload "firmware" for the IR TX device */
++static void fw_unload(void)
++{
++ mutex_lock(&tx_data_lock);
++ fw_unload_locked();
++ mutex_unlock(&tx_data_lock);
++}
++
++/* load "firmware" for the IR TX device */
++static int fw_load(struct IR *ir)
++{
++ int ret;
++ unsigned int i;
++ unsigned char *data, version, num_global_fixed;
++ const struct firmware *fw_entry;
++
++ /* Already loaded? */
++ mutex_lock(&tx_data_lock);
++ if (tx_data) {
++ ret = 0;
++ goto out;
++ }
++
++ /* Request codeset data file */
++ ret = reject_firmware(&fw_entry, "/*(DEBLOBBED)*/", &ir->c_tx.dev);
++ if (ret != 0) {
++ zilog_error("firmware /*(DEBLOBBED)*/ not available "
++ "(%d)\n", ret);
++ ret = ret < 0 ? ret : -EFAULT;
++ goto out;
++ }
++ dprintk("firmware of size %zu loaded\n", fw_entry->size);
++
++ /* Parse the file */
++ tx_data = vmalloc(sizeof(*tx_data));
++ if (tx_data == NULL) {
++ zilog_error("out of memory\n");
++ release_firmware(fw_entry);
++ ret = -ENOMEM;
++ goto out;
++ }
++ tx_data->code_sets = NULL;
++
++ /* Copy the data so hotplug doesn't get confused and timeout */
++ tx_data->datap = vmalloc(fw_entry->size);
++ if (tx_data->datap == NULL) {
++ zilog_error("out of memory\n");
++ release_firmware(fw_entry);
++ vfree(tx_data);
++ ret = -ENOMEM;
++ goto out;
++ }
++ memcpy(tx_data->datap, fw_entry->data, fw_entry->size);
++ tx_data->endp = tx_data->datap + fw_entry->size;
++ release_firmware(fw_entry); fw_entry = NULL;
++
++ /* Check version */
++ data = tx_data->datap;
++ if (!read_uint8(&data, tx_data->endp, &version))
++ goto corrupt;
++ if (version != 1) {
++ zilog_error("unsupported code set file version (%u, expected"
++ "1) -- please upgrade to a newer driver",
++ version);
++ fw_unload_locked();
++ ret = -EFAULT;
++ goto out;
++ }
++
++ /* Save boot block for later */
++ tx_data->boot_data = data;
++ if (!skip(&data, tx_data->endp, TX_BLOCK_SIZE))
++ goto corrupt;
++
++ if (!read_uint32(&data, tx_data->endp,
++ &tx_data->num_code_sets))
++ goto corrupt;
++
++ dprintk("%u IR blaster codesets loaded\n", tx_data->num_code_sets);
++
++ tx_data->code_sets = vmalloc(
++ tx_data->num_code_sets * sizeof(char *));
++ if (tx_data->code_sets == NULL) {
++ fw_unload_locked();
++ ret = -ENOMEM;
++ goto out;
++ }
++
++ for (i = 0; i < TX_BLOCK_SIZE; ++i)
++ tx_data->fixed[i] = -1;
++
++ /* Read global fixed data template */
++ if (!read_uint8(&data, tx_data->endp, &num_global_fixed) ||
++ num_global_fixed > TX_BLOCK_SIZE)
++ goto corrupt;
++ for (i = 0; i < num_global_fixed; ++i) {
++ unsigned char pos, val;
++ if (!read_uint8(&data, tx_data->endp, &pos) ||
++ !read_uint8(&data, tx_data->endp, &val) ||
++ pos >= TX_BLOCK_SIZE)
++ goto corrupt;
++ tx_data->fixed[pos] = (int)val;
++ }
++
++ /* Filch out the position of each code set */
++ for (i = 0; i < tx_data->num_code_sets; ++i) {
++ unsigned int id;
++ unsigned char keys;
++ unsigned char ndiffs;
++
++ /* Save the codeset position */
++ tx_data->code_sets[i] = data;
++
++ /* Read header */
++ if (!read_uint32(&data, tx_data->endp, &id) ||
++ !read_uint8(&data, tx_data->endp, &keys) ||
++ !read_uint8(&data, tx_data->endp, &ndiffs) ||
++ ndiffs > TX_BLOCK_SIZE || keys == 0)
++ goto corrupt;
++
++ /* skip diff positions */
++ if (!skip(&data, tx_data->endp, ndiffs))
++ goto corrupt;
++
++ /*
++ * After the diffs we have the first key id + data -
++ * global fixed
++ */
++ if (!skip(&data, tx_data->endp,
++ 1 + TX_BLOCK_SIZE - num_global_fixed))
++ goto corrupt;
++
++ /* Then we have keys-1 blocks of key id+diffs */
++ if (!skip(&data, tx_data->endp,
++ (ndiffs + 1) * (keys - 1)))
++ goto corrupt;
++ }
++ ret = 0;
++ goto out;
++
++corrupt:
++ zilog_error("firmware is corrupt\n");
++ fw_unload_locked();
++ ret = -EFAULT;
++
++out:
++ mutex_unlock(&tx_data_lock);
++ return ret;
++}
++
++/* initialise the IR TX device */
++static int tx_init(struct IR *ir)
++{
++ int ret;
++
++ /* Load 'firmware' */
++ ret = fw_load(ir);
++ if (ret != 0)
++ return ret;
++
++ /* Send boot block */
++ ret = send_boot_data(ir);
++ if (ret != 0)
++ return ret;
++ ir->need_boot = 0;
++
++ /* Looks good */
++ return 0;
++}
++
++/* do nothing stub to make LIRC happy */
++static loff_t lseek(struct file *filep, loff_t offset, int orig)
++{
++ return -ESPIPE;
++}
++
++/* copied from lirc_dev */
++static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
++{
++ struct IR *ir = (struct IR *)filep->private_data;
++ unsigned char buf[ir->buf.chunk_size];
++ int ret = 0, written = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ dprintk("read called\n");
++ if (ir->c_rx.addr == 0)
++ return -ENODEV;
++
++ if (mutex_lock_interruptible(&ir->buf_lock))
++ return -ERESTARTSYS;
++
++ if (n % ir->buf.chunk_size) {
++ dprintk("read result = -EINVAL\n");
++ mutex_unlock(&ir->buf_lock);
++ return -EINVAL;
++ }
++
++ /*
++ * we add ourselves to the task queue before buffer check
++ * to avoid losing scan code (in case when queue is awaken somewhere
++ * between while condition checking and scheduling)
++ */
++ add_wait_queue(&ir->buf.wait_poll, &wait);
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ /*
++ * while we didn't provide 'length' bytes, device is opened in blocking
++ * mode and 'copy_to_user' is happy, wait for data.
++ */
++ while (written < n && ret == 0) {
++ if (lirc_buffer_empty(&ir->buf)) {
++ /*
++ * According to the read(2) man page, 'written' can be
++ * returned as less than 'n', instead of blocking
++ * again, returning -EWOULDBLOCK, or returning
++ * -ERESTARTSYS
++ */
++ if (written)
++ break;
++ if (filep->f_flags & O_NONBLOCK) {
++ ret = -EWOULDBLOCK;
++ break;
++ }
++ if (signal_pending(current)) {
++ ret = -ERESTARTSYS;
++ break;
++ }
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ } else {
++ lirc_buffer_read(&ir->buf, buf);
++ ret = copy_to_user((void *)outbuf+written, buf,
++ ir->buf.chunk_size);
++ written += ir->buf.chunk_size;
++ }
++ }
++
++ remove_wait_queue(&ir->buf.wait_poll, &wait);
++ set_current_state(TASK_RUNNING);
++ mutex_unlock(&ir->buf_lock);
++
++ dprintk("read result = %s (%d)\n",
++ ret ? "-EFAULT" : "OK", ret);
++
++ return ret ? ret : written;
++}
++
++/* send a keypress to the IR TX device */
++static int send_code(struct IR *ir, unsigned int code, unsigned int key)
++{
++ unsigned char data_block[TX_BLOCK_SIZE];
++ unsigned char buf[2];
++ int i, ret;
++
++ /* Get data for the codeset/key */
++ ret = get_key_data(data_block, code, key);
++
++ if (ret == -EPROTO) {
++ zilog_error("failed to get data for code %u, key %u -- check "
++ "lircd.conf entries\n", code, key);
++ return ret;
++ } else if (ret != 0)
++ return ret;
++
++ /* Send the data block */
++ ret = send_data_block(ir, data_block);
++ if (ret != 0)
++ return ret;
++
++ /* Send data block length? */
++ buf[0] = 0x00;
++ buf[1] = 0x40;
++ ret = i2c_master_send(&ir->c_tx, buf, 2);
++ if (ret != 2) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++ ret = i2c_master_send(&ir->c_tx, buf, 1);
++ if (ret != 1) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++
++ /* Send finished download? */
++ ret = i2c_master_recv(&ir->c_tx, buf, 1);
++ if (ret != 1) {
++ zilog_error("i2c_master_recv failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++ if (buf[0] != 0xA0) {
++ zilog_error("unexpected IR TX response #1: %02x\n",
++ buf[0]);
++ return -EFAULT;
++ }
++
++ /* Send prepare command? */
++ buf[0] = 0x00;
++ buf[1] = 0x80;
++ ret = i2c_master_send(&ir->c_tx, buf, 2);
++ if (ret != 2) {
++ zilog_error("i2c_master_send failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++
++#ifdef I2C_HW_B_HDPVR
++ /*
++ * The sleep bits aren't necessary on the HD PVR, and in fact, the
++ * last i2c_master_recv always fails with a -5, so for now, we're
++ * going to skip this whole mess and say we're done on the HD PVR
++ */
++ if (ir->c_rx.adapter->id == I2C_HW_B_HDPVR)
++ goto done;
++#endif
++
++ /*
++ * This bit NAKs until the device is ready, so we retry it
++ * sleeping a bit each time. This seems to be what the windows
++ * driver does, approximately.
++ * Try for up to 1s.
++ */
++ for (i = 0; i < 20; ++i) {
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ schedule_timeout((50 * HZ + 999) / 1000);
++ ret = i2c_master_send(&ir->c_tx, buf, 1);
++ if (ret == 1)
++ break;
++ dprintk("NAK expected: i2c_master_send "
++ "failed with %d (try %d)\n", ret, i+1);
++ }
++ if (ret != 1) {
++ zilog_error("IR TX chip never got ready: last i2c_master_send "
++ "failed with %d\n", ret);
++ return ret < 0 ? ret : -EFAULT;
++ }
++
++ /* Seems to be an 'ok' response */
++ i = i2c_master_recv(&ir->c_tx, buf, 1);
++ if (i != 1) {
++ zilog_error("i2c_master_recv failed with %d\n", ret);
++ return -EFAULT;
++ }
++ if (buf[0] != 0x80) {
++ zilog_error("unexpected IR TX response #2: %02x\n", buf[0]);
++ return -EFAULT;
++ }
++
++done:
++ /* Oh good, it worked */
++ dprintk("sent code %u, key %u\n", code, key);
++ return 0;
++}
++
++/*
++ * Write a code to the device. We take in a 32-bit number (an int) and then
++ * decode this to a codeset/key index. The key data is then decompressed and
++ * sent to the device. We have a spin lock as per i2c documentation to prevent
++ * multiple concurrent sends which would probably cause the device to explode.
++ */
++static ssize_t write(struct file *filep, const char *buf, size_t n,
++ loff_t *ppos)
++{
++ struct IR *ir = (struct IR *)filep->private_data;
++ size_t i;
++ int failures = 0;
++
++ if (ir->c_tx.addr == 0)
++ return -ENODEV;
++
++ /* Validate user parameters */
++ if (n % sizeof(int))
++ return -EINVAL;
++
++ /* Lock i2c bus for the duration */
++ mutex_lock(&ir->ir_lock);
++
++ /* Send each keypress */
++ for (i = 0; i < n;) {
++ int ret = 0;
++ int command;
++
++ if (copy_from_user(&command, buf + i, sizeof(command))) {
++ mutex_unlock(&ir->ir_lock);
++ return -EFAULT;
++ }
++
++ /* Send boot data first if required */
++ if (ir->need_boot == 1) {
++ ret = send_boot_data(ir);
++ if (ret == 0)
++ ir->need_boot = 0;
++ }
++
++ /* Send the code */
++ if (ret == 0) {
++ ret = send_code(ir, (unsigned)command >> 16,
++ (unsigned)command & 0xFFFF);
++ if (ret == -EPROTO) {
++ mutex_unlock(&ir->ir_lock);
++ return ret;
++ }
++ }
++
++ /*
++ * Hmm, a failure. If we've had a few then give up, otherwise
++ * try a reset
++ */
++ if (ret != 0) {
++ /* Looks like the chip crashed, reset it */
++ zilog_error("sending to the IR transmitter chip "
++ "failed, trying reset\n");
++
++ if (failures >= 3) {
++ zilog_error("unable to send to the IR chip "
++ "after 3 resets, giving up\n");
++ mutex_unlock(&ir->ir_lock);
++ return ret;
++ }
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ schedule_timeout((100 * HZ + 999) / 1000);
++ ir->need_boot = 1;
++ ++failures;
++ } else
++ i += sizeof(int);
++ }
++
++ /* Release i2c bus */
++ mutex_unlock(&ir->ir_lock);
++
++ /* All looks good */
++ return n;
++}
++
++/* copied from lirc_dev */
++static unsigned int poll(struct file *filep, poll_table *wait)
++{
++ struct IR *ir = (struct IR *)filep->private_data;
++ unsigned int ret;
++
++ dprintk("poll called\n");
++ if (ir->c_rx.addr == 0)
++ return -ENODEV;
++
++ mutex_lock(&ir->buf_lock);
++
++ poll_wait(filep, &ir->buf.wait_poll, wait);
++
++ dprintk("poll result = %s\n",
++ lirc_buffer_empty(&ir->buf) ? "0" : "POLLIN|POLLRDNORM");
++
++ ret = lirc_buffer_empty(&ir->buf) ? 0 : (POLLIN|POLLRDNORM);
++
++ mutex_unlock(&ir->buf_lock);
++ return ret;
++}
++
++static int ioctl(struct inode *node, struct file *filep, unsigned int cmd,
++ unsigned long arg)
++{
++ struct IR *ir = (struct IR *)filep->private_data;
++ int result;
++ unsigned long mode, features = 0;
++
++ if (ir->c_rx.addr != 0)
++ features |= LIRC_CAN_REC_LIRCCODE;
++ if (ir->c_tx.addr != 0)
++ features |= LIRC_CAN_SEND_PULSE;
++
++ switch (cmd) {
++ case LIRC_GET_LENGTH:
++ result = put_user((unsigned long)13,
++ (unsigned long *)arg);
++ break;
++ case LIRC_GET_FEATURES:
++ result = put_user(features, (unsigned long *) arg);
++ break;
++ case LIRC_GET_REC_MODE:
++ if (!(features&LIRC_CAN_REC_MASK))
++ return -ENOSYS;
++
++ result = put_user(LIRC_REC2MODE
++ (features&LIRC_CAN_REC_MASK),
++ (unsigned long *)arg);
++ break;
++ case LIRC_SET_REC_MODE:
++ if (!(features&LIRC_CAN_REC_MASK))
++ return -ENOSYS;
++
++ result = get_user(mode, (unsigned long *)arg);
++ if (!result && !(LIRC_MODE2REC(mode) & features))
++ result = -EINVAL;
++ break;
++ case LIRC_GET_SEND_MODE:
++ if (!(features&LIRC_CAN_SEND_MASK))
++ return -ENOSYS;
++
++ result = put_user(LIRC_MODE_PULSE, (unsigned long *) arg);
++ break;
++ case LIRC_SET_SEND_MODE:
++ if (!(features&LIRC_CAN_SEND_MASK))
++ return -ENOSYS;
++
++ result = get_user(mode, (unsigned long *) arg);
++ if (!result && mode != LIRC_MODE_PULSE)
++ return -EINVAL;
++ break;
++ default:
++ return -EINVAL;
++ }
++ return result;
++}
++
++/*
++ * Open the IR device. Get hold of our IR structure and
++ * stash it in private_data for the file
++ */
++static int open(struct inode *node, struct file *filep)
++{
++ struct IR *ir;
++ int ret;
++
++ /* find our IR struct */
++ unsigned minor = MINOR(node->i_rdev);
++ if (minor >= MAX_IRCTL_DEVICES) {
++ dprintk("minor %d: open result = -ENODEV\n",
++ minor);
++ return -ENODEV;
++ }
++ ir = ir_devices[minor];
++
++ /* increment in use count */
++ mutex_lock(&ir->ir_lock);
++ ++ir->open;
++ ret = set_use_inc(ir);
++ if (ret != 0) {
++ --ir->open;
++ mutex_unlock(&ir->ir_lock);
++ return ret;
++ }
++ mutex_unlock(&ir->ir_lock);
++
++ /* stash our IR struct */
++ filep->private_data = ir;
++
++ return 0;
++}
++
++/* Close the IR device */
++static int close(struct inode *node, struct file *filep)
++{
++ /* find our IR struct */
++ struct IR *ir = (struct IR *)filep->private_data;
++ if (ir == NULL) {
++ zilog_error("close: no private_data attached to the file!\n");
++ return -ENODEV;
++ }
++
++ /* decrement in use count */
++ mutex_lock(&ir->ir_lock);
++ --ir->open;
++ set_use_dec(ir);
++ mutex_unlock(&ir->ir_lock);
++
++ return 0;
++}
++
++static struct lirc_driver lirc_template = {
++ .name = "lirc_zilog",
++ .set_use_inc = set_use_inc,
++ .set_use_dec = set_use_dec,
++ .owner = THIS_MODULE
++};
++
++static int ir_remove(struct i2c_client *client);
++static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id);
++static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg);
++
++static const struct i2c_device_id ir_transceiver_id[] = {
++ /* Generic entry for any IR transceiver */
++ { "ir_video", 0 },
++ /* IR device specific entries should be added here */
++ { "ir_tx_z8f0811_haup", 0 },
++ { "ir_rx_z8f0811_haup", 0 },
++ { }
++};
++
++static struct i2c_driver driver = {
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = "Zilog/Hauppauge i2c IR",
++ },
++ .probe = ir_probe,
++ .remove = ir_remove,
++ .command = ir_command,
++ .id_table = ir_transceiver_id,
++};
++
++static struct file_operations lirc_fops = {
++ .owner = THIS_MODULE,
++ .llseek = lseek,
++ .read = read,
++ .write = write,
++ .poll = poll,
++ .ioctl = ioctl,
++ .open = open,
++ .release = close
++};
++
++static int ir_remove(struct i2c_client *client)
++{
++ struct IR *ir = i2c_get_clientdata(client);
++
++ mutex_lock(&ir->ir_lock);
++
++ if (ir->have_rx || ir->have_tx) {
++ DECLARE_COMPLETION(tn);
++ DECLARE_COMPLETION(tn2);
++
++ /* end up polling thread */
++ if (ir->task && !IS_ERR(ir->task)) {
++ ir->t_notify = &tn;
++ ir->t_notify2 = &tn2;
++ ir->shutdown = 1;
++ wake_up_process(ir->task);
++ complete(&tn2);
++ wait_for_completion(&tn);
++ ir->t_notify = NULL;
++ ir->t_notify2 = NULL;
++ }
++
++ } else {
++ mutex_unlock(&ir->ir_lock);
++ zilog_error("%s: detached from something we didn't "
++ "attach to\n", __func__);
++ return -ENODEV;
++ }
++
++ /* unregister lirc driver */
++ if (ir->l.minor >= 0 && ir->l.minor < MAX_IRCTL_DEVICES) {
++ lirc_unregister_driver(ir->l.minor);
++ ir_devices[ir->l.minor] = NULL;
++ }
++
++ /* free memory */
++ lirc_buffer_free(&ir->buf);
++ mutex_unlock(&ir->ir_lock);
++ kfree(ir);
++
++ return 0;
++}
++
++static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
++{
++ struct IR *ir = NULL;
++ struct i2c_adapter *adap = client->adapter;
++ char buf;
++ int ret;
++ int have_rx = 0, have_tx = 0;
++
++ dprintk("%s: adapter id=0x%x, client addr=0x%02x\n",
++ __func__, adap->id, client->addr);
++
++ /*
++ * The external IR receiver is at i2c address 0x71.
++ * The IR transmitter is at 0x70.
++ */
++ client->addr = 0x70;
++
++ if (!disable_tx) {
++ if (i2c_master_recv(client, &buf, 1) == 1)
++ have_tx = 1;
++ dprintk("probe 0x70 @ %s: %s\n",
++ adap->name, have_tx ? "success" : "failed");
++ }
++
++ if (!disable_rx) {
++ client->addr = 0x71;
++ if (i2c_master_recv(client, &buf, 1) == 1)
++ have_rx = 1;
++ dprintk("probe 0x71 @ %s: %s\n",
++ adap->name, have_rx ? "success" : "failed");
++ }
++
++ if (!(have_rx || have_tx)) {
++ zilog_error("%s: no devices found\n", adap->name);
++ goto out_nodev;
++ }
++
++ printk(KERN_INFO "lirc_zilog: chip found with %s\n",
++ have_rx && have_tx ? "RX and TX" :
++ have_rx ? "RX only" : "TX only");
++
++ ir = kzalloc(sizeof(struct IR), GFP_KERNEL);
++
++ if (!ir)
++ goto out_nomem;
++
++ ret = lirc_buffer_init(&ir->buf, 2, BUFLEN / 2);
++ if (ret)
++ goto out_nomem;
++
++ mutex_init(&ir->ir_lock);
++ mutex_init(&ir->buf_lock);
++ ir->need_boot = 1;
++
++ memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver));
++ ir->l.minor = -1;
++
++ /* I2C attach to device */
++ i2c_set_clientdata(client, ir);
++
++ /* initialise RX device */
++ if (have_rx) {
++ DECLARE_COMPLETION(tn);
++ memcpy(&ir->c_rx, client, sizeof(struct i2c_client));
++
++ ir->c_rx.addr = 0x71;
++ strlcpy(ir->c_rx.name, ZILOG_HAUPPAUGE_IR_RX_NAME,
++ I2C_NAME_SIZE);
++
++ /* try to fire up polling thread */
++ ir->t_notify = &tn;
++ ir->task = kthread_run(lirc_thread, ir, "lirc_zilog");
++ if (IS_ERR(ir->task)) {
++ ret = PTR_ERR(ir->task);
++ zilog_error("lirc_register_driver: cannot run "
++ "poll thread %d\n", ret);
++ goto err;
++ }
++ wait_for_completion(&tn);
++ ir->t_notify = NULL;
++ ir->have_rx = 1;
++ }
++
++ /* initialise TX device */
++ if (have_tx) {
++ memcpy(&ir->c_tx, client, sizeof(struct i2c_client));
++ ir->c_tx.addr = 0x70;
++ strlcpy(ir->c_tx.name, ZILOG_HAUPPAUGE_IR_TX_NAME,
++ I2C_NAME_SIZE);
++ ir->have_tx = 1;
++ }
++
++ /* set lirc_dev stuff */
++ ir->l.code_length = 13;
++ ir->l.rbuf = &ir->buf;
++ ir->l.fops = &lirc_fops;
++ ir->l.data = ir;
++ ir->l.minor = minor;
++ ir->l.dev = &adap->dev;
++ ir->l.sample_rate = 0;
++
++ /* register with lirc */
++ ir->l.minor = lirc_register_driver(&ir->l);
++ if (ir->l.minor < 0 || ir->l.minor >= MAX_IRCTL_DEVICES) {
++ zilog_error("ir_attach: \"minor\" must be between 0 and %d "
++ "(%d)!\n", MAX_IRCTL_DEVICES-1, ir->l.minor);
++ ret = -EBADRQC;
++ goto err;
++ }
++
++ /* store this for getting back in open() later on */
++ ir_devices[ir->l.minor] = ir;
++
++ /*
++ * if we have the tx device, load the 'firmware'. We do this
++ * after registering with lirc as otherwise hotplug seems to take
++ * 10s to create the lirc device.
++ */
++ if (have_tx) {
++ /* Special TX init */
++ ret = tx_init(ir);
++ if (ret != 0)
++ goto err;
++ }
++
++ return 0;
++
++err:
++ /* undo everything, hopefully... */
++ if (ir->c_rx.addr)
++ ir_remove(&ir->c_rx);
++ if (ir->c_tx.addr)
++ ir_remove(&ir->c_tx);
++ return ret;
++
++out_nodev:
++ zilog_error("no device found\n");
++ return -ENODEV;
++
++out_nomem:
++ zilog_error("memory allocation failure\n");
++ kfree(ir);
++ return -ENOMEM;
++}
++
++static int ir_command(struct i2c_client *client, unsigned int cmd, void *arg)
++{
++ /* nothing */
++ return 0;
++}
++
++static int __init zilog_init(void)
++{
++ int ret;
++
++ zilog_notify("Zilog/Hauppauge IR driver initializing\n");
++
++ mutex_init(&tx_data_lock);
++
++ request_module("firmware_class");
++
++ ret = i2c_add_driver(&driver);
++ if (ret)
++ zilog_error("initialization failed\n");
++ else
++ zilog_notify("initialization complete\n");
++
++ return ret;
++}
++
++static void __exit zilog_exit(void)
++{
++ i2c_del_driver(&driver);
++ /* if loaded */
++ fw_unload();
++ zilog_notify("Zilog/Hauppauge IR driver unloaded\n");
++}
++
++module_init(zilog_init);
++module_exit(zilog_exit);
++
++MODULE_DESCRIPTION("Zilog/Hauppauge infrared transmitter driver (i2c stack)");
++MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, "
++ "Ulrich Mueller, Stefan Jahn, Jerome Brock, Mark Weaver");
++MODULE_LICENSE("GPL");
++/* for compat with old name, which isn't all that accurate anymore */
++MODULE_ALIAS("lirc_pvr150");
++
++module_param(minor, int, 0444);
++MODULE_PARM_DESC(minor, "Preferred minor device number");
++
++module_param(debug, bool, 0644);
++MODULE_PARM_DESC(debug, "Enable debugging messages");
++
++module_param(disable_rx, bool, 0644);
++MODULE_PARM_DESC(disable_rx, "Disable the IR receiver device");
++
++module_param(disable_tx, bool, 0644);
++MODULE_PARM_DESC(disable_tx, "Disable the IR transmitter device");
+diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
+index 23140a3..7085225 100644
+--- a/drivers/input/misc/Kconfig
++++ b/drivers/input/misc/Kconfig
+@@ -340,4 +340,16 @@ config INPUT_PCAP
+ To compile this driver as a module, choose M here: the
+ module will be called pcap_keys.
+
++config INPUT_IMON
++ tristate "SoundGraph iMON Receiver and Display"
++ depends on USB_ARCH_HAS_HCD
++ select USB
++ select INPUT_SPARSEKMAP
++ help
++ Say Y here if you want to use a SoundGraph iMON (aka Antec Veris)
++ IR Receiver and/or LCD/VFD/VGA display.
++
++ To compile this driver as a module, choose M here: the
++ module will be called imon.
++
+ endif
+diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
+index 7e95a5d..8918ce7 100644
+--- a/drivers/input/misc/Makefile
++++ b/drivers/input/misc/Makefile
+@@ -14,6 +14,7 @@ obj-$(CONFIG_INPUT_CM109) += cm109.o
+ obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o
+ obj-$(CONFIG_INPUT_DM355EVM) += dm355evm_keys.o
+ obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o
++obj-$(CONFIG_INPUT_IMON) += imon.o
+ obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o
+ obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o
+ obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o
+diff --git a/drivers/input/misc/imon.c b/drivers/input/misc/imon.c
+new file mode 100644
+index 0000000..58a2130
+--- /dev/null
++++ b/drivers/input/misc/imon.c
+@@ -0,0 +1,2523 @@
++/*
++ * imon.c: input and display driver for SoundGraph iMON IR/VFD/LCD
++ *
++ * Copyright(C) 2009 Jarod Wilson <jarod@wilsonet.com>
++ * Portions based on the original lirc_imon driver,
++ * Copyright(C) 2004 Venky Raju(dev@venky.ws)
++ *
++ * imon is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <linux/input.h>
++#include <linux/input/sparse-keymap.h>
++#include <linux/usb.h>
++#include <linux/usb/input.h>
++#include <linux/time.h>
++#include <linux/timer.h>
++
++#define MOD_AUTHOR "Jarod Wilson <jarod@wilsonet.com>"
++#define MOD_DESC "Driver for SoundGraph iMON MultiMedia IR/Display"
++#define MOD_NAME "imon"
++#define MOD_VERSION "0.8"
++
++#define DISPLAY_MINOR_BASE 144
++#define DEVICE_NAME "lcd%d"
++
++#define BUF_CHUNK_SIZE 8
++#define BUF_SIZE 128
++
++#define BIT_DURATION 250 /* each bit received is 250us */
++
++#define IMON_CLOCK_ENABLE_PACKETS 2
++#define IMON_KEY_RELEASE_OFFSET 1000
++
++/*** P R O T O T Y P E S ***/
++
++/* USB Callback prototypes */
++static int imon_probe(struct usb_interface *interface,
++ const struct usb_device_id *id);
++static void imon_disconnect(struct usb_interface *interface);
++static void usb_rx_callback_intf0(struct urb *urb);
++static void usb_rx_callback_intf1(struct urb *urb);
++static void usb_tx_callback(struct urb *urb);
++
++/* suspend/resume support */
++static int imon_resume(struct usb_interface *intf);
++static int imon_suspend(struct usb_interface *intf, pm_message_t message);
++
++/* Display file_operations function prototypes */
++static int display_open(struct inode *inode, struct file *file);
++static int display_close(struct inode *inode, struct file *file);
++
++/* VFD write operation */
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos);
++
++/* LCD file_operations override function prototypes */
++static ssize_t lcd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos);
++
++/*** G L O B A L S ***/
++
++struct imon_context {
++ struct device *dev;
++ struct usb_device *usbdev_intf0;
++ /* Newer devices have two interfaces */
++ struct usb_device *usbdev_intf1;
++ bool display_supported; /* not all controllers do */
++ bool display_isopen; /* display port has been opened */
++ bool ir_isassociating; /* IR port open for association */
++ bool dev_present_intf0; /* USB device presence, interface 0 */
++ bool dev_present_intf1; /* USB device presence, interface 1 */
++ struct mutex lock; /* to lock this object */
++ wait_queue_head_t remove_ok; /* For unexpected USB disconnects */
++
++ struct usb_endpoint_descriptor *rx_endpoint_intf0;
++ struct usb_endpoint_descriptor *rx_endpoint_intf1;
++ struct usb_endpoint_descriptor *tx_endpoint;
++ struct urb *rx_urb_intf0;
++ struct urb *rx_urb_intf1;
++ struct urb *tx_urb;
++ bool tx_control;
++ unsigned char usb_rx_buf[8];
++ unsigned char usb_tx_buf[8];
++
++ struct tx_t {
++ unsigned char data_buf[35]; /* user data buffer */
++ struct completion finished; /* wait for write to finish */
++ bool busy; /* write in progress */
++ int status; /* status of tx completion */
++ } tx;
++
++ u16 vendor; /* usb vendor ID */
++ u16 product; /* usb product ID */
++ int ir_protocol; /* iMON or MCE (RC6) IR protocol? */
++ struct input_dev *idev; /* input device for remote */
++ struct input_dev *touch; /* input device for touchscreen */
++ int ki; /* current input keycode key index */
++ u16 kc; /* current input keycode */
++ u16 last_keycode; /* last reported input keycode */
++ u8 mce_toggle_bit; /* last mce toggle bit */
++ int display_type; /* store the display type */
++ bool pad_mouse; /* toggle kbd(0)/mouse(1) mode */
++ int touch_x; /* x coordinate on touchscreen */
++ int touch_y; /* y coordinate on touchscreen */
++ char name_idev[128]; /* input device name */
++ char phys_idev[64]; /* input device phys path */
++ struct timer_list itimer; /* input device timer, need for rc6 */
++ char name_touch[128]; /* touch screen name */
++ char phys_touch[64]; /* touch screen phys path */
++ struct timer_list ttimer; /* touch screen timer */
++};
++
++#define TOUCH_TIMEOUT (HZ/30)
++#define MCE_TIMEOUT_MS 200
++
++/* vfd character device file operations */
++static const struct file_operations vfd_fops = {
++ .owner = THIS_MODULE,
++ .open = &display_open,
++ .write = &vfd_write,
++ .release = &display_close
++};
++
++/* lcd character device file operations */
++static const struct file_operations lcd_fops = {
++ .owner = THIS_MODULE,
++ .open = &display_open,
++ .write = &lcd_write,
++ .release = &display_close
++};
++
++enum {
++ IMON_DISPLAY_TYPE_AUTO = 0,
++ IMON_DISPLAY_TYPE_VFD = 1,
++ IMON_DISPLAY_TYPE_LCD = 2,
++ IMON_DISPLAY_TYPE_VGA = 3,
++ IMON_DISPLAY_TYPE_NONE = 4,
++};
++
++enum {
++ IMON_IR_PROTOCOL_IMON = 0,
++ IMON_IR_PROTOCOL_MCE = 1,
++ IMON_IR_PROTOCOL_IMON_NOPAD = 2,
++};
++
++enum {
++ IMON_BUTTON_IMON = 0,
++ IMON_BUTTON_MCE = 1,
++ IMON_BUTTON_PANEL = 2,
++};
++
++/*
++ * USB Device ID for iMON USB Control Boards
++ *
++ * The Windows drivers contain 6 different inf files, more or less one for
++ * each new device until the 0x0034-0x0046 devices, which all use the same
++ * driver. Some of the devices in the 34-46 range haven't been definitively
++ * identified yet. Early devices have either a TriGem Computer, Inc. or a
++ * Samsung vendor ID (0x0aa8 and 0x04e8 respectively), while all later
++ * devices use the SoundGraph vendor ID (0x15c2). This driver only supports
++ * the ffdc and later devices, which do onboard decoding.
++ */
++static struct usb_device_id imon_usb_id_table[] = {
++ /*
++ * Several devices with this same device ID, all use iMON_PAD.inf
++ * SoundGraph iMON PAD (IR & VFD)
++ * SoundGraph iMON PAD (IR & LCD)
++ * SoundGraph iMON Knob (IR only)
++ */
++ { USB_DEVICE(0x15c2, 0xffdc) },
++
++ /*
++ * Newer devices, all driven by the latest iMON Windows driver, full
++ * list of device IDs extracted via 'strings Setup/data1.hdr |grep 15c2'
++ * Need user input to fill in details on unknown devices.
++ */
++ /* SoundGraph iMON OEM Touch LCD (IR & 7" VGA LCD) */
++ { USB_DEVICE(0x15c2, 0x0034) },
++ /* SoundGraph iMON OEM Touch LCD (IR & 4.3" VGA LCD) */
++ { USB_DEVICE(0x15c2, 0x0035) },
++ /* SoundGraph iMON OEM VFD (IR & VFD) */
++ { USB_DEVICE(0x15c2, 0x0036) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x0037) },
++ /* SoundGraph iMON OEM LCD (IR & LCD) */
++ { USB_DEVICE(0x15c2, 0x0038) },
++ /* SoundGraph iMON UltraBay (IR & LCD) */
++ { USB_DEVICE(0x15c2, 0x0039) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x003a) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x003b) },
++ /* SoundGraph iMON OEM Inside (IR only) */
++ { USB_DEVICE(0x15c2, 0x003c) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x003d) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x003e) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x003f) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x0040) },
++ /* SoundGraph iMON MINI (IR only) */
++ { USB_DEVICE(0x15c2, 0x0041) },
++ /* Antec Veris Multimedia Station EZ External (IR only) */
++ { USB_DEVICE(0x15c2, 0x0042) },
++ /* Antec Veris Multimedia Station Basic Internal (IR only) */
++ { USB_DEVICE(0x15c2, 0x0043) },
++ /* Antec Veris Multimedia Station Elite (IR & VFD) */
++ { USB_DEVICE(0x15c2, 0x0044) },
++ /* Antec Veris Multimedia Station Premiere (IR & LCD) */
++ { USB_DEVICE(0x15c2, 0x0045) },
++ /* device specifics unknown */
++ { USB_DEVICE(0x15c2, 0x0046) },
++ {}
++};
++
++/* iMON LCD models use a different write op */
++static struct usb_device_id lcd_device_list[] = {
++ { USB_DEVICE(0x15c2, 0xffdc) },
++ { USB_DEVICE(0x15c2, 0x0038) },
++ { USB_DEVICE(0x15c2, 0x0039) },
++ { USB_DEVICE(0x15c2, 0x0045) },
++ {}
++};
++
++/* Some iMON devices have no lcd/vfd, don't set one up */
++static struct usb_device_id ir_only_list[] = {
++ /* the first imon lcd and the knob share this device id. :\ */
++ /*{ USB_DEVICE(0x15c2, 0xffdc) },*/
++ { USB_DEVICE(0x15c2, 0x003c) },
++ { USB_DEVICE(0x15c2, 0x0041) },
++ { USB_DEVICE(0x15c2, 0x0042) },
++ { USB_DEVICE(0x15c2, 0x0043) },
++ {}
++};
++
++/* iMON devices with VGA touchscreens */
++static struct usb_device_id imon_touchscreen_list[] = {
++ { USB_DEVICE(0x15c2, 0x0034) },
++ { USB_DEVICE(0x15c2, 0x0035) },
++ {}
++};
++
++/* USB Device data */
++static struct usb_driver imon_driver = {
++ .name = MOD_NAME,
++ .probe = imon_probe,
++ .disconnect = imon_disconnect,
++ .suspend = imon_suspend,
++ .resume = imon_resume,
++ .id_table = imon_usb_id_table,
++};
++
++static struct usb_class_driver imon_vfd_class = {
++ .name = DEVICE_NAME,
++ .fops = &vfd_fops,
++ .minor_base = DISPLAY_MINOR_BASE,
++};
++
++static struct usb_class_driver imon_lcd_class = {
++ .name = DEVICE_NAME,
++ .fops = &lcd_fops,
++ .minor_base = DISPLAY_MINOR_BASE,
++};
++
++/*
++ * standard imon remote key table, which isn't really entirely
++ * "standard", as different receivers decode the same key on the
++ * same remote to different hex codes... ugh.
++ */
++static const struct key_entry imon_remote_key_table[] = {
++ /* keys sorted mostly by frequency of use to optimize lookups */
++ { KE_KEY, 0x2a8195b7, { KEY_REWIND } },
++ { KE_KEY, 0x298315b7, { KEY_REWIND } },
++ { KE_KEY, 0x2b8115b7, { KEY_FASTFORWARD } },
++ { KE_KEY, 0x2b8315b7, { KEY_FASTFORWARD } },
++ { KE_KEY, 0x2b9115b7, { KEY_PREVIOUS } },
++ { KE_KEY, 0x298195b7, { KEY_NEXT } },
++
++ { KE_KEY, 0x2a8115b7, { KEY_PLAY } },
++ { KE_KEY, 0x2a8315b7, { KEY_PLAY } },
++ { KE_KEY, 0x2a9115b7, { KEY_PAUSE } },
++ { KE_KEY, 0x2b9715b7, { KEY_STOP } },
++ { KE_KEY, 0x298115b7, { KEY_RECORD } },
++
++ { KE_KEY, 0x01008000, { KEY_UP } },
++ { KE_KEY, 0x01007f00, { KEY_DOWN } },
++ { KE_KEY, 0x01000080, { KEY_LEFT } },
++ { KE_KEY, 0x0100007f, { KEY_RIGHT } },
++
++ { KE_KEY, 0x2aa515b7, { KEY_UP } },
++ { KE_KEY, 0x289515b7, { KEY_DOWN } },
++ { KE_KEY, 0x29a515b7, { KEY_LEFT } },
++ { KE_KEY, 0x2ba515b7, { KEY_RIGHT } },
++
++ { KE_KEY, 0x0200002c, { KEY_SPACE } }, /* Select/Space */
++ { KE_KEY, 0x2a9315b7, { KEY_SPACE } }, /* Select/Space */
++ { KE_KEY, 0x02000028, { KEY_ENTER } },
++ { KE_KEY, 0x28a195b7, { KEY_ENTER } },
++ { KE_KEY, 0x288195b7, { KEY_EXIT } },
++ { KE_KEY, 0x02000029, { KEY_ESC } },
++ { KE_KEY, 0x2bb715b7, { KEY_ESC } },
++ { KE_KEY, 0x0200002a, { KEY_BACKSPACE } },
++ { KE_KEY, 0x28a115b7, { KEY_BACKSPACE } },
++
++ { KE_KEY, 0x2b9595b7, { KEY_MUTE } },
++ { KE_KEY, 0x28a395b7, { KEY_VOLUMEUP } },
++ { KE_KEY, 0x28a595b7, { KEY_VOLUMEDOWN } },
++ { KE_KEY, 0x289395b7, { KEY_CHANNELUP } },
++ { KE_KEY, 0x288795b7, { KEY_CHANNELDOWN } },
++
++ { KE_KEY, 0x0200001e, { KEY_NUMERIC_1 } },
++ { KE_KEY, 0x0200001f, { KEY_NUMERIC_2 } },
++ { KE_KEY, 0x02000020, { KEY_NUMERIC_3 } },
++ { KE_KEY, 0x02000021, { KEY_NUMERIC_4 } },
++ { KE_KEY, 0x02000022, { KEY_NUMERIC_5 } },
++ { KE_KEY, 0x02000023, { KEY_NUMERIC_6 } },
++ { KE_KEY, 0x02000024, { KEY_NUMERIC_7 } },
++ { KE_KEY, 0x02000025, { KEY_NUMERIC_8 } },
++ { KE_KEY, 0x02000026, { KEY_NUMERIC_9 } },
++ { KE_KEY, 0x02000027, { KEY_NUMERIC_0 } },
++
++ { KE_KEY, 0x28b595b7, { KEY_NUMERIC_1 } },
++ { KE_KEY, 0x2bb195b7, { KEY_NUMERIC_2 } },
++ { KE_KEY, 0x28b195b7, { KEY_NUMERIC_3 } },
++ { KE_KEY, 0x2a8595b7, { KEY_NUMERIC_4 } },
++ { KE_KEY, 0x299595b7, { KEY_NUMERIC_5 } },
++ { KE_KEY, 0x2aa595b7, { KEY_NUMERIC_6 } },
++ { KE_KEY, 0x2b9395b7, { KEY_NUMERIC_7 } },
++ { KE_KEY, 0x2a8515b7, { KEY_NUMERIC_8 } },
++ { KE_KEY, 0x2aa115b7, { KEY_NUMERIC_9 } },
++ { KE_KEY, 0x2ba595b7, { KEY_NUMERIC_0 } },
++
++ { KE_KEY, 0x02200025, { KEY_NUMERIC_STAR } },
++ { KE_KEY, 0x28b515b7, { KEY_NUMERIC_STAR } },
++ { KE_KEY, 0x02200020, { KEY_NUMERIC_POUND } },
++ { KE_KEY, 0x29a115b7, { KEY_NUMERIC_POUND } },
++
++ { KE_KEY, 0x2b8515b7, { KEY_VIDEO } },
++ { KE_KEY, 0x299195b7, { KEY_AUDIO } },
++ { KE_KEY, 0x2ba115b7, { KEY_CAMERA } },
++ { KE_KEY, 0x28a515b7, { KEY_TV } },
++ { KE_KEY, 0x29a395b7, { KEY_DVD } },
++ { KE_KEY, 0x29a295b7, { KEY_DVD } },
++
++ /* the Menu key between DVD and Subtitle on the RM-200... */
++ { KE_KEY, 0x2ba385b7, { KEY_MENU } },
++ { KE_KEY, 0x2ba395b7, { KEY_MENU } },
++
++ { KE_KEY, 0x288515b7, { KEY_BOOKMARKS } },
++ { KE_KEY, 0x2ab715b7, { KEY_MEDIA } }, /* Thumbnail */
++ { KE_KEY, 0x298595b7, { KEY_SUBTITLE } },
++ { KE_KEY, 0x2b8595b7, { KEY_LANGUAGE } },
++
++ { KE_KEY, 0x29a595b7, { KEY_ZOOM } },
++ { KE_KEY, 0x2aa395b7, { KEY_SCREEN } }, /* FullScreen */
++
++ { KE_KEY, 0x299115b7, { KEY_KEYBOARD } },
++ { KE_KEY, 0x299135b7, { KEY_KEYBOARD } },
++
++ { KE_KEY, 0x01010000, { BTN_LEFT } },
++ { KE_KEY, 0x01020000, { BTN_RIGHT } },
++ { KE_KEY, 0x01010080, { BTN_LEFT } },
++ { KE_KEY, 0x01020080, { BTN_RIGHT } },
++ { KE_KEY, 0x688301b7, { BTN_LEFT } },
++ { KE_KEY, 0x688481b7, { BTN_RIGHT } },
++
++ { KE_KEY, 0x2a9395b7, { KEY_CYCLEWINDOWS } }, /* TaskSwitcher */
++ { KE_KEY, 0x2b8395b7, { KEY_TIME } }, /* Timer */
++
++ { KE_KEY, 0x289115b7, { KEY_POWER } },
++ { KE_KEY, 0x29b195b7, { KEY_EJECTCD } }, /* the one next to play */
++ { KE_KEY, 0x299395b7, { KEY_EJECTCLOSECD } }, /* eject (by TaskSw) */
++
++ { KE_KEY, 0x02800000, { KEY_CONTEXT_MENU } }, /* Left Menu */
++ { KE_KEY, 0x2b8195b7, { KEY_CONTEXT_MENU } }, /* Left Menu*/
++ { KE_KEY, 0x02000065, { KEY_COMPOSE } }, /* RightMenu */
++ { KE_KEY, 0x28b715b7, { KEY_COMPOSE } }, /* RightMenu */
++ { KE_KEY, 0x2ab195b7, { KEY_PROG1 } }, /* Go or MultiMon */
++ { KE_KEY, 0x29b715b7, { KEY_DASHBOARD } }, /* AppLauncher */
++ { KE_END, 0 }
++};
++
++/* mce-mode imon mce remote key table */
++static const struct key_entry imon_mce_key_table[] = {
++ /* keys sorted mostly by frequency of use to optimize lookups */
++ { KE_KEY, 0x800ff415, { KEY_REWIND } },
++ { KE_KEY, 0x800ff414, { KEY_FASTFORWARD } },
++ { KE_KEY, 0x800ff41b, { KEY_PREVIOUS } },
++ { KE_KEY, 0x800ff41a, { KEY_NEXT } },
++
++ { KE_KEY, 0x800ff416, { KEY_PLAY } },
++ { KE_KEY, 0x800ff418, { KEY_PAUSE } },
++ { KE_KEY, 0x800ff419, { KEY_STOP } },
++ { KE_KEY, 0x800ff417, { KEY_RECORD } },
++
++ { KE_KEY, 0x02000052, { KEY_UP } },
++ { KE_KEY, 0x02000051, { KEY_DOWN } },
++ { KE_KEY, 0x02000050, { KEY_LEFT } },
++ { KE_KEY, 0x0200004f, { KEY_RIGHT } },
++
++ { KE_KEY, 0x800ff41e, { KEY_UP } },
++ { KE_KEY, 0x800ff41f, { KEY_DOWN } },
++ { KE_KEY, 0x800ff420, { KEY_LEFT } },
++ { KE_KEY, 0x800ff421, { KEY_RIGHT } },
++
++ /* 0x800ff40b also KEY_NUMERIC_POUND on some receivers */
++ { KE_KEY, 0x800ff40b, { KEY_ENTER } },
++ { KE_KEY, 0x02000028, { KEY_ENTER } },
++/* the OK and Enter buttons decode to the same value on some remotes
++ { KE_KEY, 0x02000028, { KEY_OK } }, */
++ { KE_KEY, 0x800ff422, { KEY_OK } },
++ { KE_KEY, 0x0200002a, { KEY_EXIT } },
++ { KE_KEY, 0x800ff423, { KEY_EXIT } },
++ { KE_KEY, 0x02000029, { KEY_DELETE } },
++ /* 0x800ff40a also KEY_NUMERIC_STAR on some receivers */
++ { KE_KEY, 0x800ff40a, { KEY_DELETE } },
++
++ { KE_KEY, 0x800ff40e, { KEY_MUTE } },
++ { KE_KEY, 0x800ff410, { KEY_VOLUMEUP } },
++ { KE_KEY, 0x800ff411, { KEY_VOLUMEDOWN } },
++ { KE_KEY, 0x800ff412, { KEY_CHANNELUP } },
++ { KE_KEY, 0x800ff413, { KEY_CHANNELDOWN } },
++
++ { KE_KEY, 0x0200001e, { KEY_NUMERIC_1 } },
++ { KE_KEY, 0x0200001f, { KEY_NUMERIC_2 } },
++ { KE_KEY, 0x02000020, { KEY_NUMERIC_3 } },
++ { KE_KEY, 0x02000021, { KEY_NUMERIC_4 } },
++ { KE_KEY, 0x02000022, { KEY_NUMERIC_5 } },
++ { KE_KEY, 0x02000023, { KEY_NUMERIC_6 } },
++ { KE_KEY, 0x02000024, { KEY_NUMERIC_7 } },
++ { KE_KEY, 0x02000025, { KEY_NUMERIC_8 } },
++ { KE_KEY, 0x02000026, { KEY_NUMERIC_9 } },
++ { KE_KEY, 0x02000027, { KEY_NUMERIC_0 } },
++
++ { KE_KEY, 0x800ff401, { KEY_NUMERIC_1 } },
++ { KE_KEY, 0x800ff402, { KEY_NUMERIC_2 } },
++ { KE_KEY, 0x800ff403, { KEY_NUMERIC_3 } },
++ { KE_KEY, 0x800ff404, { KEY_NUMERIC_4 } },
++ { KE_KEY, 0x800ff405, { KEY_NUMERIC_5 } },
++ { KE_KEY, 0x800ff406, { KEY_NUMERIC_6 } },
++ { KE_KEY, 0x800ff407, { KEY_NUMERIC_7 } },
++ { KE_KEY, 0x800ff408, { KEY_NUMERIC_8 } },
++ { KE_KEY, 0x800ff409, { KEY_NUMERIC_9 } },
++ { KE_KEY, 0x800ff400, { KEY_NUMERIC_0 } },
++
++ { KE_KEY, 0x02200025, { KEY_NUMERIC_STAR } },
++ { KE_KEY, 0x02200020, { KEY_NUMERIC_POUND } },
++ /* 0x800ff41d also KEY_BLUE on some receivers */
++ { KE_KEY, 0x800ff41d, { KEY_NUMERIC_STAR } },
++ /* 0x800ff41c also KEY_PREVIOUS on some receivers */
++ { KE_KEY, 0x800ff41c, { KEY_NUMERIC_POUND } },
++
++ { KE_KEY, 0x800ff446, { KEY_TV } },
++ { KE_KEY, 0x800ff447, { KEY_AUDIO } }, /* My Music */
++ { KE_KEY, 0x800ff448, { KEY_PVR } }, /* RecordedTV */
++ { KE_KEY, 0x800ff449, { KEY_CAMERA } },
++ { KE_KEY, 0x800ff44a, { KEY_VIDEO } },
++ /* 0x800ff424 also KEY_MENU on some receivers */
++ { KE_KEY, 0x800ff424, { KEY_DVD } },
++ /* 0x800ff425 also KEY_GREEN on some receivers */
++ { KE_KEY, 0x800ff425, { KEY_TUNER } }, /* LiveTV */
++ { KE_KEY, 0x800ff450, { KEY_RADIO } },
++
++ { KE_KEY, 0x800ff44c, { KEY_LANGUAGE } },
++ { KE_KEY, 0x800ff427, { KEY_ZOOM } }, /* Aspect */
++
++ { KE_KEY, 0x800ff45b, { KEY_RED } },
++ { KE_KEY, 0x800ff45c, { KEY_GREEN } },
++ { KE_KEY, 0x800ff45d, { KEY_YELLOW } },
++ { KE_KEY, 0x800ff45e, { KEY_BLUE } },
++
++ { KE_KEY, 0x800ff466, { KEY_RED } },
++ /* { KE_KEY, 0x800ff425, { KEY_GREEN } }, */
++ { KE_KEY, 0x800ff468, { KEY_YELLOW } },
++ /* { KE_KEY, 0x800ff41d, { KEY_BLUE } }, */
++
++ { KE_KEY, 0x800ff40f, { KEY_INFO } },
++ { KE_KEY, 0x800ff426, { KEY_EPG } }, /* Guide */
++ { KE_KEY, 0x800ff45a, { KEY_SUBTITLE } }, /* Caption/Teletext */
++ { KE_KEY, 0x800ff44d, { KEY_TITLE } },
++
++ { KE_KEY, 0x800ff40c, { KEY_POWER } },
++ { KE_KEY, 0x800ff40d, { KEY_PROG1 } }, /* Windows MCE button */
++ { KE_END, 0 }
++
++};
++
++/* imon receiver front panel/knob key table */
++static const struct {
++ u64 hw_code;
++ u16 keycode;
++} imon_panel_key_table[] = {
++ { 0x000000000f00ffee, KEY_PROG1 }, /* Go */
++ { 0x000000001f00ffee, KEY_AUDIO },
++ { 0x000000002000ffee, KEY_VIDEO },
++ { 0x000000002100ffee, KEY_CAMERA },
++ { 0x000000002700ffee, KEY_DVD },
++ { 0x000000002300ffee, KEY_TV },
++ { 0x000000000500ffee, KEY_PREVIOUS },
++ { 0x000000000700ffee, KEY_REWIND },
++ { 0x000000000400ffee, KEY_STOP },
++ { 0x000000003c00ffee, KEY_PLAYPAUSE },
++ { 0x000000000800ffee, KEY_FASTFORWARD },
++ { 0x000000000600ffee, KEY_NEXT },
++ { 0x000000010000ffee, KEY_RIGHT },
++ { 0x000001000000ffee, KEY_LEFT },
++ { 0x000000003d00ffee, KEY_SELECT },
++ { 0x000100000000ffee, KEY_VOLUMEUP },
++ { 0x010000000000ffee, KEY_VOLUMEDOWN },
++ { 0x000000000100ffee, KEY_MUTE },
++ /* iMON Knob values */
++ { 0x000100ffffffffee, KEY_VOLUMEUP },
++ { 0x010000ffffffffee, KEY_VOLUMEDOWN },
++ { 0x000008ffffffffee, KEY_MUTE },
++};
++
++/* to prevent races between open() and disconnect(), probing, etc */
++static DEFINE_MUTEX(driver_lock);
++
++/* Module bookkeeping bits */
++MODULE_AUTHOR(MOD_AUTHOR);
++MODULE_DESCRIPTION(MOD_DESC);
++MODULE_VERSION(MOD_VERSION);
++MODULE_LICENSE("GPL");
++MODULE_DEVICE_TABLE(usb, imon_usb_id_table);
++
++static bool debug;
++module_param(debug, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(debug, "Debug messages: 0=no, 1=yes(default: no)");
++
++/* lcd, vfd, vga or none? should be auto-detected, but can be overridden... */
++static int display_type;
++module_param(display_type, int, S_IRUGO);
++MODULE_PARM_DESC(display_type, "Type of attached display. 0=autodetect, "
++ "1=vfd, 2=lcd, 3=vga, 4=none (default: autodetect)");
++
++/* IR protocol: native iMON, Windows MCE (RC-6), or iMON w/o PAD stabilize */
++static int ir_protocol;
++module_param(ir_protocol, int, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(ir_protocol, "Which IR protocol to use. 0=native iMON, "
++ "1=Windows Media Center Ed. (RC-6), 2=iMON w/o PAD stabilize "
++ "(default: native iMON)");
++
++/*
++ * In certain use cases, mouse mode isn't really helpful, and could actually
++ * cause confusion, so allow disabling it when the IR device is open.
++ */
++static bool nomouse;
++module_param(nomouse, bool, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(nomouse, "Disable mouse input device mode when IR device is "
++ "open. 0=don't disable, 1=disable. (default: don't disable)");
++
++/* threshold at which a pad push registers as an arrow key in kbd mode */
++static int pad_thresh;
++module_param(pad_thresh, int, S_IRUGO | S_IWUSR);
++MODULE_PARM_DESC(pad_thresh, "Threshold at which a pad push registers as an "
++ "arrow key in kbd mode (default: 28)");
++
++
++static void free_imon_context(struct imon_context *ictx)
++{
++ struct device *dev = ictx->dev;
++
++ usb_free_urb(ictx->tx_urb);
++ usb_free_urb(ictx->rx_urb_intf0);
++ usb_free_urb(ictx->rx_urb_intf1);
++ kfree(ictx);
++
++ dev_dbg(dev, "%s: iMON context freed\n", __func__);
++}
++
++/**
++ * Called when the Display device (e.g. /dev/lcd0)
++ * is opened by the application.
++ */
++static int display_open(struct inode *inode, struct file *file)
++{
++ struct usb_interface *interface;
++ struct imon_context *ictx = NULL;
++ int subminor;
++ int retval = 0;
++
++ /* prevent races with disconnect */
++ mutex_lock(&driver_lock);
++
++ subminor = iminor(inode);
++ interface = usb_find_interface(&imon_driver, subminor);
++ if (!interface) {
++ err("%s: could not find interface for minor %d",
++ __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++ ictx = usb_get_intfdata(interface);
++
++ if (!ictx) {
++ err("%s: no context found for minor %d", __func__, subminor);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->display_supported) {
++ err("%s: display not supported by device", __func__);
++ retval = -ENODEV;
++ } else if (ictx->display_isopen) {
++ err("%s: display port is already open", __func__);
++ retval = -EBUSY;
++ } else {
++ ictx->display_isopen = 1;
++ file->private_data = ictx;
++ dev_dbg(ictx->dev, "display port opened\n");
++ }
++
++ mutex_unlock(&ictx->lock);
++
++exit:
++ mutex_unlock(&driver_lock);
++ return retval;
++}
++
++/**
++ * Called when the display device (e.g. /dev/lcd0)
++ * is closed by the application.
++ */
++static int display_close(struct inode *inode, struct file *file)
++{
++ struct imon_context *ictx = NULL;
++ int retval = 0;
++
++ ictx = (struct imon_context *)file->private_data;
++
++ if (!ictx) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->display_supported) {
++ err("%s: display not supported by device", __func__);
++ retval = -ENODEV;
++ } else if (!ictx->display_isopen) {
++ err("%s: display is not open", __func__);
++ retval = -EIO;
++ } else {
++ ictx->display_isopen = 0;
++ dev_dbg(ictx->dev, "display port closed\n");
++ if (!ictx->dev_present_intf0) {
++ /*
++ * Device disconnected before close and IR port is not
++ * open. If IR port is open, context will be deleted by
++ * ir_close.
++ */
++ mutex_unlock(&ictx->lock);
++ free_imon_context(ictx);
++ return retval;
++ }
++ }
++
++ mutex_unlock(&ictx->lock);
++ return retval;
++}
++
++/**
++ * Sends a packet to the device -- this function must be called
++ * with ictx->lock held.
++ */
++static int send_packet(struct imon_context *ictx)
++{
++ unsigned int pipe;
++ int interval = 0;
++ int retval = 0;
++ struct usb_ctrlrequest *control_req = NULL;
++
++ /* Check if we need to use control or interrupt urb */
++ if (!ictx->tx_control) {
++ pipe = usb_sndintpipe(ictx->usbdev_intf0,
++ ictx->tx_endpoint->bEndpointAddress);
++ interval = ictx->tx_endpoint->bInterval;
++
++ usb_fill_int_urb(ictx->tx_urb, ictx->usbdev_intf0, pipe,
++ ictx->usb_tx_buf,
++ sizeof(ictx->usb_tx_buf),
++ usb_tx_callback, ictx, interval);
++
++ ictx->tx_urb->actual_length = 0;
++ } else {
++ /* fill request into kmalloc'ed space: */
++ control_req = kmalloc(sizeof(struct usb_ctrlrequest),
++ GFP_KERNEL);
++ if (control_req == NULL)
++ return -ENOMEM;
++
++ /* setup packet is '21 09 0200 0001 0008' */
++ control_req->bRequestType = 0x21;
++ control_req->bRequest = 0x09;
++ control_req->wValue = cpu_to_le16(0x0200);
++ control_req->wIndex = cpu_to_le16(0x0001);
++ control_req->wLength = cpu_to_le16(0x0008);
++
++ /* control pipe is endpoint 0x00 */
++ pipe = usb_sndctrlpipe(ictx->usbdev_intf0, 0);
++
++ /* build the control urb */
++ usb_fill_control_urb(ictx->tx_urb, ictx->usbdev_intf0,
++ pipe, (unsigned char *)control_req,
++ ictx->usb_tx_buf,
++ sizeof(ictx->usb_tx_buf),
++ usb_tx_callback, ictx);
++ ictx->tx_urb->actual_length = 0;
++ }
++
++ init_completion(&ictx->tx.finished);
++ ictx->tx.busy = 1;
++ smp_rmb(); /* ensure later readers know we're busy */
++
++ retval = usb_submit_urb(ictx->tx_urb, GFP_KERNEL);
++ if (retval) {
++ ictx->tx.busy = 0;
++ smp_rmb(); /* ensure later readers know we're not busy */
++ err("%s: error submitting urb(%d)", __func__, retval);
++ } else {
++ /* Wait for transmission to complete (or abort) */
++ mutex_unlock(&ictx->lock);
++ retval = wait_for_completion_interruptible(
++ &ictx->tx.finished);
++ if (retval)
++ err("%s: task interrupted", __func__);
++ mutex_lock(&ictx->lock);
++
++ retval = ictx->tx.status;
++ if (retval)
++ err("%s: packet tx failed (%d)", __func__, retval);
++ }
++
++ kfree(control_req);
++
++ return retval;
++}
++
++/**
++ * Sends an associate packet to the iMON 2.4G.
++ *
++ * This might not be such a good idea, since it has an id collision with
++ * some versions of the "IR & VFD" combo. The only way to determine if it
++ * is an RF version is to look at the product description string. (Which
++ * we currently do not fetch).
++ */
++static int send_associate_24g(struct imon_context *ictx)
++{
++ int retval;
++ const unsigned char packet[8] = { 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x20 };
++
++ if (!ictx) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ if (!ictx->dev_present_intf0) {
++ err("%s: no iMON device present", __func__);
++ return -ENODEV;
++ }
++
++ memcpy(ictx->usb_tx_buf, packet, sizeof(packet));
++ retval = send_packet(ictx);
++
++ return retval;
++}
++
++/**
++ * Sends packets to setup and show clock on iMON display
++ *
++ * Arguments: year - last 2 digits of year, month - 1..12,
++ * day - 1..31, dow - day of the week (0-Sun...6-Sat),
++ * hour - 0..23, minute - 0..59, second - 0..59
++ */
++static int send_set_imon_clock(struct imon_context *ictx,
++ unsigned int year, unsigned int month,
++ unsigned int day, unsigned int dow,
++ unsigned int hour, unsigned int minute,
++ unsigned int second)
++{
++ unsigned char clock_enable_pkt[IMON_CLOCK_ENABLE_PACKETS][8];
++ int retval = 0;
++ int i;
++
++ if (!ictx) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ switch (ictx->display_type) {
++ case IMON_DISPLAY_TYPE_LCD:
++ clock_enable_pkt[0][0] = 0x80;
++ clock_enable_pkt[0][1] = year;
++ clock_enable_pkt[0][2] = month-1;
++ clock_enable_pkt[0][3] = day;
++ clock_enable_pkt[0][4] = hour;
++ clock_enable_pkt[0][5] = minute;
++ clock_enable_pkt[0][6] = second;
++
++ clock_enable_pkt[1][0] = 0x80;
++ clock_enable_pkt[1][1] = 0;
++ clock_enable_pkt[1][2] = 0;
++ clock_enable_pkt[1][3] = 0;
++ clock_enable_pkt[1][4] = 0;
++ clock_enable_pkt[1][5] = 0;
++ clock_enable_pkt[1][6] = 0;
++
++ if (ictx->product == 0xffdc) {
++ clock_enable_pkt[0][7] = 0x50;
++ clock_enable_pkt[1][7] = 0x51;
++ } else {
++ clock_enable_pkt[0][7] = 0x88;
++ clock_enable_pkt[1][7] = 0x8a;
++ }
++
++ break;
++
++ case IMON_DISPLAY_TYPE_VFD:
++ clock_enable_pkt[0][0] = year;
++ clock_enable_pkt[0][1] = month-1;
++ clock_enable_pkt[0][2] = day;
++ clock_enable_pkt[0][3] = dow;
++ clock_enable_pkt[0][4] = hour;
++ clock_enable_pkt[0][5] = minute;
++ clock_enable_pkt[0][6] = second;
++ clock_enable_pkt[0][7] = 0x40;
++
++ clock_enable_pkt[1][0] = 0;
++ clock_enable_pkt[1][1] = 0;
++ clock_enable_pkt[1][2] = 1;
++ clock_enable_pkt[1][3] = 0;
++ clock_enable_pkt[1][4] = 0;
++ clock_enable_pkt[1][5] = 0;
++ clock_enable_pkt[1][6] = 0;
++ clock_enable_pkt[1][7] = 0x42;
++
++ break;
++
++ default:
++ return -ENODEV;
++ }
++
++ for (i = 0; i < IMON_CLOCK_ENABLE_PACKETS; i++) {
++ memcpy(ictx->usb_tx_buf, clock_enable_pkt[i], 8);
++ retval = send_packet(ictx);
++ if (retval) {
++ err("%s: send_packet failed for packet %d",
++ __func__, i);
++ break;
++ }
++ }
++
++ return retval;
++}
++
++/**
++ * These are the sysfs functions to handle the association on the iMON 2.4G LT.
++ */
++static ssize_t show_associate_remote(struct device *d,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct imon_context *ictx = dev_get_drvdata(d);
++
++ if (!ictx)
++ return -ENODEV;
++
++ mutex_lock(&ictx->lock);
++ if (ictx->ir_isassociating)
++ strcpy(buf, "associating\n");
++ else
++ strcpy(buf, "closed\n");
++
++ dev_info(d, "Visit http://www.lirc.org/html/imon-24g.html for "
++ "instructions on how to associate your iMON 2.4G DT/LT "
++ "remote\n");
++ mutex_unlock(&ictx->lock);
++ return strlen(buf);
++}
++
++static ssize_t store_associate_remote(struct device *d,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct imon_context *ictx;
++
++ ictx = dev_get_drvdata(d);
++
++ if (!ictx)
++ return -ENODEV;
++
++ mutex_lock(&ictx->lock);
++ ictx->ir_isassociating = 1;
++ send_associate_24g(ictx);
++ mutex_unlock(&ictx->lock);
++
++ return count;
++}
++
++/**
++ * sysfs functions to control internal imon clock
++ */
++static ssize_t show_imon_clock(struct device *d,
++ struct device_attribute *attr, char *buf)
++{
++ struct imon_context *ictx = dev_get_drvdata(d);
++ size_t len;
++
++ if (!ictx)
++ return -ENODEV;
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->display_supported) {
++ len = snprintf(buf, PAGE_SIZE, "Not supported.");
++ } else {
++ len = snprintf(buf, PAGE_SIZE,
++ "To set the clock on your iMON display:\n"
++ "# date \"+%%y %%m %%d %%w %%H %%M %%S\" > imon_clock\n"
++ "%s", ictx->display_isopen ?
++ "\nNOTE: imon device must be closed\n" : "");
++ }
++
++ mutex_unlock(&ictx->lock);
++
++ return len;
++}
++
++static ssize_t store_imon_clock(struct device *d,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct imon_context *ictx = dev_get_drvdata(d);
++ ssize_t retval;
++ unsigned int year, month, day, dow, hour, minute, second;
++
++ if (!ictx)
++ return -ENODEV;
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->display_supported) {
++ retval = -ENODEV;
++ goto exit;
++ } else if (ictx->display_isopen) {
++ retval = -EBUSY;
++ goto exit;
++ }
++
++ if (sscanf(buf, "%u %u %u %u %u %u %u", &year, &month, &day, &dow,
++ &hour, &minute, &second) != 7) {
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ if ((month < 1 || month > 12) ||
++ (day < 1 || day > 31) || (dow > 6) ||
++ (hour > 23) || (minute > 59) || (second > 59)) {
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ retval = send_set_imon_clock(ictx, year, month, day, dow,
++ hour, minute, second);
++ if (retval)
++ goto exit;
++
++ retval = count;
++exit:
++ mutex_unlock(&ictx->lock);
++
++ return retval;
++}
++
++
++static DEVICE_ATTR(imon_clock, S_IWUSR | S_IRUGO, show_imon_clock,
++ store_imon_clock);
++
++static DEVICE_ATTR(associate_remote, S_IWUSR | S_IRUGO, show_associate_remote,
++ store_associate_remote);
++
++static struct attribute *imon_display_sysfs_entries[] = {
++ &dev_attr_imon_clock.attr,
++ NULL
++};
++
++static struct attribute_group imon_display_attribute_group = {
++ .attrs = imon_display_sysfs_entries
++};
++
++static struct attribute *imon_rf_sysfs_entries[] = {
++ &dev_attr_associate_remote.attr,
++ NULL
++};
++
++static struct attribute_group imon_rf_attribute_group = {
++ .attrs = imon_rf_sysfs_entries
++};
++
++/**
++ * Writes data to the VFD. The iMON VFD is 2x16 characters
++ * and requires data in 5 consecutive USB interrupt packets,
++ * each packet but the last carrying 7 bytes.
++ *
++ * I don't know if the VFD board supports features such as
++ * scrolling, clearing rows, blanking, etc. so at
++ * the caller must provide a full screen of data. If fewer
++ * than 32 bytes are provided spaces will be appended to
++ * generate a full screen.
++ */
++static ssize_t vfd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos)
++{
++ int i;
++ int offset;
++ int seq;
++ int retval = 0;
++ struct imon_context *ictx;
++ const unsigned char vfd_packet6[] = {
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF };
++
++ ictx = (struct imon_context *)file->private_data;
++ if (!ictx) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->dev_present_intf0) {
++ err("%s: no iMON device present", __func__);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ if (n_bytes <= 0 || n_bytes > 32) {
++ err("%s: invalid payload size", __func__);
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ if (copy_from_user(ictx->tx.data_buf, buf, n_bytes)) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ /* Pad with spaces */
++ for (i = n_bytes; i < 32; ++i)
++ ictx->tx.data_buf[i] = ' ';
++
++ for (i = 32; i < 35; ++i)
++ ictx->tx.data_buf[i] = 0xFF;
++
++ offset = 0;
++ seq = 0;
++
++ do {
++ memcpy(ictx->usb_tx_buf, ictx->tx.data_buf + offset, 7);
++ ictx->usb_tx_buf[7] = (unsigned char) seq;
++
++ retval = send_packet(ictx);
++ if (retval) {
++ err("%s: send packet failed for packet #%d",
++ __func__, seq/2);
++ goto exit;
++ } else {
++ seq += 2;
++ offset += 7;
++ }
++
++ } while (offset < 35);
++
++ /* Send packet #6 */
++ memcpy(ictx->usb_tx_buf, &vfd_packet6, sizeof(vfd_packet6));
++ ictx->usb_tx_buf[7] = (unsigned char) seq;
++ retval = send_packet(ictx);
++ if (retval)
++ err("%s: send packet failed for packet #%d",
++ __func__, seq / 2);
++
++exit:
++ mutex_unlock(&ictx->lock);
++
++ return (!retval) ? n_bytes : retval;
++}
++
++/**
++ * Writes data to the LCD. The iMON OEM LCD screen expects 8-byte
++ * packets. We accept data as 16 hexadecimal digits, followed by a
++ * newline (to make it easy to drive the device from a command-line
++ * -- even though the actual binary data is a bit complicated).
++ *
++ * The device itself is not a "traditional" text-mode display. It's
++ * actually a 16x96 pixel bitmap display. That means if you want to
++ * display text, you've got to have your own "font" and translate the
++ * text into bitmaps for display. This is really flexible (you can
++ * display whatever diacritics you need, and so on), but it's also
++ * a lot more complicated than most LCDs...
++ */
++static ssize_t lcd_write(struct file *file, const char *buf,
++ size_t n_bytes, loff_t *pos)
++{
++ int retval = 0;
++ struct imon_context *ictx;
++
++ ictx = (struct imon_context *)file->private_data;
++ if (!ictx) {
++ err("%s: no context for device", __func__);
++ return -ENODEV;
++ }
++
++ mutex_lock(&ictx->lock);
++
++ if (!ictx->display_supported) {
++ err("%s: no iMON display present", __func__);
++ retval = -ENODEV;
++ goto exit;
++ }
++
++ if (n_bytes != 8) {
++ err("%s: invalid payload size: %d (expecting 8)",
++ __func__, (int) n_bytes);
++ retval = -EINVAL;
++ goto exit;
++ }
++
++ if (copy_from_user(ictx->usb_tx_buf, buf, 8)) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ retval = send_packet(ictx);
++ if (retval) {
++ err("%s: send packet failed!", __func__);
++ goto exit;
++ } else {
++ dev_dbg(ictx->dev, "%s: write %d bytes to LCD\n",
++ __func__, (int) n_bytes);
++ }
++exit:
++ mutex_unlock(&ictx->lock);
++ return (!retval) ? n_bytes : retval;
++}
++
++/**
++ * Callback function for USB core API: transmit data
++ */
++static void usb_tx_callback(struct urb *urb)
++{
++ struct imon_context *ictx;
++
++ if (!urb)
++ return;
++ ictx = (struct imon_context *)urb->context;
++ if (!ictx)
++ return;
++
++ ictx->tx.status = urb->status;
++
++ /* notify waiters that write has finished */
++ ictx->tx.busy = 0;
++ smp_rmb(); /* ensure later readers know we're not busy */
++ complete(&ictx->tx.finished);
++}
++
++/**
++ * mce/rc6 keypresses have no distinct release code, use timer
++ */
++static void imon_mce_timeout(unsigned long data)
++{
++ struct imon_context *ictx = (struct imon_context *)data;
++
++ input_report_key(ictx->idev, ictx->last_keycode, 0);
++ input_sync(ictx->idev);
++}
++
++/**
++ * report touchscreen input
++ */
++static void imon_touch_display_timeout(unsigned long data)
++{
++ struct imon_context *ictx = (struct imon_context *)data;
++
++ if (!ictx->display_type == IMON_DISPLAY_TYPE_VGA)
++ return;
++
++ input_report_abs(ictx->touch, ABS_X, ictx->touch_x);
++ input_report_abs(ictx->touch, ABS_Y, ictx->touch_y);
++ input_report_key(ictx->touch, BTN_TOUCH, 0x00);
++ input_sync(ictx->touch);
++}
++
++/**
++ * iMON IR receivers support two different signal sets -- those used by
++ * the iMON remotes, and those used by the Windows MCE remotes (which is
++ * really just RC-6), but only one or the other at a time, as the signals
++ * are decoded onboard the receiver.
++ */
++static void imon_set_ir_protocol(struct imon_context *ictx)
++{
++ int retval;
++ struct device *dev = ictx->dev;
++ unsigned char ir_proto_packet[] = {
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86 };
++
++ switch (ir_protocol) {
++ case IMON_IR_PROTOCOL_MCE:
++ dev_dbg(dev, "Configuring IR receiver for MCE protocol\n");
++ ir_proto_packet[0] = 0x01;
++ ictx->ir_protocol = IMON_IR_PROTOCOL_MCE;
++ ictx->pad_mouse = 0;
++ init_timer(&ictx->itimer);
++ ictx->itimer.data = (unsigned long)ictx;
++ ictx->itimer.function = imon_mce_timeout;
++ break;
++ case IMON_IR_PROTOCOL_IMON:
++ dev_dbg(dev, "Configuring IR receiver for iMON protocol\n");
++ /* ir_proto_packet[0] = 0x00; // already the default */
++ ictx->ir_protocol = IMON_IR_PROTOCOL_IMON;
++ ictx->pad_mouse = 1;
++ break;
++ case IMON_IR_PROTOCOL_IMON_NOPAD:
++ dev_dbg(dev, "Configuring IR receiver for iMON protocol "
++ "without PAD stabilize function enabled\n");
++ /* ir_proto_packet[0] = 0x00; // already the default */
++ ictx->ir_protocol = IMON_IR_PROTOCOL_IMON_NOPAD;
++ ictx->pad_mouse = 0;
++ break;
++ default:
++ dev_info(dev, "%s: unknown IR protocol specified, will "
++ "just default to iMON protocol\n", __func__);
++ ictx->ir_protocol = IMON_IR_PROTOCOL_IMON;
++ ictx->pad_mouse = 1;
++ break;
++ }
++
++ memcpy(ictx->usb_tx_buf, &ir_proto_packet, sizeof(ir_proto_packet));
++
++ retval = send_packet(ictx);
++ if (retval) {
++ dev_info(dev, "%s: failed to set IR protocol, falling back "
++ "to standard iMON protocol mode\n", __func__);
++ ir_protocol = IMON_IR_PROTOCOL_IMON;
++ ictx->ir_protocol = IMON_IR_PROTOCOL_IMON;
++ }
++}
++
++static inline int tv2int(const struct timeval *a, const struct timeval *b)
++{
++ int usecs = 0;
++ int sec = 0;
++
++ if (b->tv_usec > a->tv_usec) {
++ usecs = 1000000;
++ sec--;
++ }
++
++ usecs += a->tv_usec - b->tv_usec;
++
++ sec += a->tv_sec - b->tv_sec;
++ sec *= 1000;
++ usecs /= 1000;
++ sec += usecs;
++
++ if (sec < 0)
++ sec = 1000;
++
++ return sec;
++}
++
++/**
++ * The directional pad behaves a bit differently, depending on whether this is
++ * one of the older ffdc devices or a newer device. Newer devices appear to
++ * have a higher resolution matrix for more precise mouse movement, but it
++ * makes things overly sensitive in keyboard mode, so we do some interesting
++ * contortions to make it less touchy. Older devices run through the same
++ * routine with shorter timeout and a smaller threshold.
++ */
++static int stabilize(int a, int b, u16 timeout, u16 threshold)
++{
++ struct timeval ct;
++ static struct timeval prev_time = {0, 0};
++ static struct timeval hit_time = {0, 0};
++ static int x, y, prev_result, hits;
++ int result = 0;
++ int msec, msec_hit;
++
++ do_gettimeofday(&ct);
++ msec = tv2int(&ct, &prev_time);
++ msec_hit = tv2int(&ct, &hit_time);
++
++ if (msec > 100) {
++ x = 0;
++ y = 0;
++ hits = 0;
++ }
++
++ x += a;
++ y += b;
++
++ prev_time = ct;
++
++ if (abs(x) > threshold || abs(y) > threshold) {
++ if (abs(y) > abs(x))
++ result = (y > 0) ? 0x7F : 0x80;
++ else
++ result = (x > 0) ? 0x7F00 : 0x8000;
++
++ x = 0;
++ y = 0;
++
++ if (result == prev_result) {
++ hits++;
++
++ if (hits > 3) {
++ switch (result) {
++ case 0x7F:
++ y = 17 * threshold / 30;
++ break;
++ case 0x80:
++ y -= 17 * threshold / 30;
++ break;
++ case 0x7F00:
++ x = 17 * threshold / 30;
++ break;
++ case 0x8000:
++ x -= 17 * threshold / 30;
++ break;
++ }
++ }
++
++ if (hits == 2 && msec_hit < timeout) {
++ result = 0;
++ hits = 1;
++ }
++ } else {
++ prev_result = result;
++ hits = 1;
++ hit_time = ct;
++ }
++ }
++
++ return result;
++}
++
++static int imon_remote_key_lookup(u32 hw_code)
++{
++ int i;
++ u32 code = be32_to_cpu(hw_code);
++
++ /* Look for the initial press of a button */
++ for (i = 0; i < ARRAY_SIZE(imon_remote_key_table); i++)
++ if (imon_remote_key_table[i].code == code)
++ return i;
++
++ /* Look for the release of a button, return index + offset */
++ for (i = 0; i < ARRAY_SIZE(imon_remote_key_table); i++)
++ if ((imon_remote_key_table[i].code | 0x4000) == code)
++ return i + IMON_KEY_RELEASE_OFFSET;
++
++ return -1;
++}
++
++static int imon_mce_key_lookup(u32 hw_code)
++{
++ int i;
++ u32 code = be32_to_cpu(hw_code);
++
++#define MCE_KEY_MASK 0x7000
++#define MCE_TOGGLE_BIT 0x8000
++
++ /*
++ * On some receivers, mce keys decode to 0x8000f04xx and 0x8000f84xx
++ * (the toggle bit flipping between alternating key presses), while
++ * on other receivers, we see 0x8000f74xx and 0x8000ff4xx. To keep
++ * the table trim, we always or in the bits to look up 0x8000ff4xx,
++ * but we can't or them into all codes, as some keys are decoded in
++ * a different way w/o the same use of the toggle bit...
++ */
++ if ((code >> 24) & 0x80)
++ code = code | MCE_KEY_MASK | MCE_TOGGLE_BIT;
++
++ for (i = 0; i < ARRAY_SIZE(imon_mce_key_table); i++)
++ if (imon_mce_key_table[i].code == code)
++ return i;
++
++ return -1;
++}
++
++static int imon_panel_key_lookup(u64 hw_code)
++{
++ int i;
++ u64 code = be64_to_cpu(hw_code);
++
++ for (i = 0; i < ARRAY_SIZE(imon_panel_key_table); i++)
++ if (imon_panel_key_table[i].hw_code == (code | 0xffee))
++ return i;
++
++ return -1;
++}
++
++static bool imon_mouse_event(struct imon_context *ictx,
++ unsigned char *buf, int len)
++{
++ char rel_x = 0x00, rel_y = 0x00;
++ u8 right_shift = 1;
++ bool mouse_input = 1;
++ int dir = 0;
++
++ /* newer iMON device PAD or mouse button */
++ if (ictx->product != 0xffdc && (buf[0] & 0x01) && len == 5) {
++ rel_x = buf[2];
++ rel_y = buf[3];
++ right_shift = 1;
++ /* 0xffdc iMON PAD or mouse button input */
++ } else if (ictx->product == 0xffdc && (buf[0] & 0x40) &&
++ !((buf[1] & 0x01) || ((buf[1] >> 2) & 0x01))) {
++ rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 |
++ (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6;
++ if (buf[0] & 0x02)
++ rel_x |= ~0x0f;
++ rel_x = rel_x + rel_x / 2;
++ rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 |
++ (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6;
++ if (buf[0] & 0x01)
++ rel_y |= ~0x0f;
++ rel_y = rel_y + rel_y / 2;
++ right_shift = 2;
++ /* some ffdc devices decode mouse buttons differently... */
++ } else if (ictx->product == 0xffdc && (buf[0] == 0x68)) {
++ right_shift = 2;
++ /* ch+/- buttons, which we use for an emulated scroll wheel */
++ } else if (ictx->kc == KEY_CHANNELUP && (buf[2] & 0x40) != 0x40) {
++ dir = 1;
++ } else if (ictx->kc == KEY_CHANNELDOWN && (buf[2] & 0x40) != 0x40) {
++ dir = -1;
++ } else
++ mouse_input = 0;
++
++ if (mouse_input) {
++ dev_dbg(ictx->dev, "sending mouse data via input subsystem\n");
++
++ if (dir) {
++ input_report_rel(ictx->idev, REL_WHEEL, dir);
++ } else if (rel_x || rel_y) {
++ input_report_rel(ictx->idev, REL_X, rel_x);
++ input_report_rel(ictx->idev, REL_Y, rel_y);
++ } else {
++ input_report_key(ictx->idev, BTN_LEFT, buf[1] & 0x1);
++ input_report_key(ictx->idev, BTN_RIGHT,
++ buf[1] >> right_shift & 0x1);
++ }
++ input_sync(ictx->idev);
++ ictx->last_keycode = ictx->kc;
++ }
++
++ return mouse_input;
++}
++
++static void imon_touch_event(struct imon_context *ictx, unsigned char *buf)
++{
++ mod_timer(&ictx->ttimer, jiffies + TOUCH_TIMEOUT);
++ ictx->touch_x = (buf[0] << 4) | (buf[1] >> 4);
++ ictx->touch_y = 0xfff - ((buf[2] << 4) | (buf[1] & 0xf));
++ input_report_abs(ictx->touch, ABS_X, ictx->touch_x);
++ input_report_abs(ictx->touch, ABS_Y, ictx->touch_y);
++ input_report_key(ictx->touch, BTN_TOUCH, 0x01);
++ input_sync(ictx->touch);
++}
++
++static void imon_pad_to_keys(struct imon_context *ictx, unsigned char *buf)
++{
++ int ki = 1;
++ int dir = 0;
++ int offset = IMON_KEY_RELEASE_OFFSET;
++ char rel_x = 0x00, rel_y = 0x00;
++ u16 timeout, threshold;
++ u64 temp_key;
++ u32 remote_key;
++
++ /*
++ * The imon directional pad functions more like a touchpad. Bytes 3 & 4
++ * contain a position coordinate (x,y), with each component ranging
++ * from -14 to 14. We want to down-sample this to only 4 discrete values
++ * for up/down/left/right arrow keys. Also, when you get too close to
++ * diagonals, it has a tendancy to jump back and forth, so lets try to
++ * ignore when they get too close.
++ */
++ if (ictx->product != 0xffdc) {
++ /* first, pad to 8 bytes so it conforms with everything else */
++ buf[5] = buf[6] = buf[7] = 0;
++ timeout = 500; /* in msecs */
++ /* (2*threshold) x (2*threshold) square */
++ threshold = pad_thresh ? pad_thresh : 28;
++ rel_x = buf[2];
++ rel_y = buf[3];
++
++ if (ictx->ir_protocol == IMON_IR_PROTOCOL_IMON) {
++ if ((buf[1] == 0) && ((rel_x != 0) || (rel_y != 0))) {
++ dir = stabilize((int)rel_x, (int)rel_y,
++ timeout, threshold);
++ if (!dir) {
++ ictx->kc = KEY_UNKNOWN;
++ return;
++ }
++ buf[2] = dir & 0xFF;
++ buf[3] = (dir >> 8) & 0xFF;
++ memcpy(&temp_key, buf, sizeof(temp_key));
++ remote_key = (u32) (le64_to_cpu(temp_key)
++ & 0xffffffff);
++ ki = imon_remote_key_lookup(remote_key);
++ ictx->kc =
++ imon_remote_key_table[ki % offset].keycode;
++ }
++ } else {
++ if (abs(rel_y) > abs(rel_x)) {
++ buf[2] = (rel_y > 0) ? 0x7F : 0x80;
++ buf[3] = 0;
++ ictx->kc = (rel_y > 0) ? KEY_DOWN : KEY_UP;
++ } else {
++ buf[2] = 0;
++ buf[3] = (rel_x > 0) ? 0x7F : 0x80;
++ ictx->kc = (rel_x > 0) ? KEY_RIGHT : KEY_LEFT;
++ }
++ }
++
++ /*
++ * Handle on-board decoded pad events for e.g. older VFD/iMON-Pad
++ * device (15c2:ffdc). The remote generates various codes from
++ * 0x68nnnnB7 to 0x6AnnnnB7, the left mouse button generates
++ * 0x688301b7 and the right one 0x688481b7. All other keys generate
++ * 0x2nnnnnnn. Position coordinate is encoded in buf[1] and buf[2] with
++ * reversed endianess. Extract direction from buffer, rotate endianess,
++ * adjust sign and feed the values into stabilize(). The resulting codes
++ * will be 0x01008000, 0x01007F00, which match the newer devices.
++ */
++ } else {
++ timeout = 10; /* in msecs */
++ /* (2*threshold) x (2*threshold) square */
++ threshold = pad_thresh ? pad_thresh : 15;
++
++ /* buf[1] is x */
++ rel_x = (buf[1] & 0x08) | (buf[1] & 0x10) >> 2 |
++ (buf[1] & 0x20) >> 4 | (buf[1] & 0x40) >> 6;
++ if (buf[0] & 0x02)
++ rel_x |= ~0x10+1;
++ /* buf[2] is y */
++ rel_y = (buf[2] & 0x08) | (buf[2] & 0x10) >> 2 |
++ (buf[2] & 0x20) >> 4 | (buf[2] & 0x40) >> 6;
++ if (buf[0] & 0x01)
++ rel_y |= ~0x10+1;
++
++ buf[0] = 0x01;
++ buf[1] = buf[4] = buf[5] = buf[6] = buf[7] = 0;
++
++ if (ictx->ir_protocol == IMON_IR_PROTOCOL_IMON) {
++ dir = stabilize((int)rel_x, (int)rel_y,
++ timeout, threshold);
++ if (!dir) {
++ ictx->kc = KEY_UNKNOWN;
++ return;
++ }
++ buf[2] = dir & 0xFF;
++ buf[3] = (dir >> 8) & 0xFF;
++ memcpy(&temp_key, buf, sizeof(temp_key));
++ remote_key = (u32) (le64_to_cpu(temp_key) & 0xffffffff);
++ ki = imon_remote_key_lookup(remote_key);
++ ictx->kc = imon_remote_key_table[ki % offset].keycode;
++ } else {
++ if (abs(rel_y) > abs(rel_x)) {
++ buf[2] = (rel_y > 0) ? 0x7F : 0x80;
++ buf[3] = 0;
++ ictx->kc = (rel_y > 0) ? KEY_DOWN : KEY_UP;
++ } else {
++ buf[2] = 0;
++ buf[3] = (rel_x > 0) ? 0x7F : 0x80;
++ ictx->kc = (rel_x > 0) ? KEY_RIGHT : KEY_LEFT;
++ }
++ }
++ }
++
++ ictx->ki = ki;
++}
++
++static int imon_parse_press_type(struct imon_context *ictx,
++ unsigned char *buf, u8 ksrc)
++{
++ int press_type = 0;
++
++ /* key release of 0x02XXXXXX key */
++ if (ictx->ki == -1 && buf[0] == 0x02 && buf[3] == 0x00)
++ ictx->kc = ictx->last_keycode;
++
++ /* mouse button release on (some) 0xffdc devices */
++ else if (ictx->ki == -1 && buf[0] == 0x68 && buf[1] == 0x82 &&
++ buf[2] == 0x81 && buf[3] == 0xb7)
++ ictx->kc = ictx->last_keycode;
++
++ /* mouse button release on (some other) 0xffdc devices */
++ else if (ictx->ki == -1 && buf[0] == 0x01 && buf[1] == 0x00 &&
++ buf[2] == 0x81 && buf[3] == 0xb7)
++ ictx->kc = ictx->last_keycode;
++
++ /* mce-specific button handling */
++ else if (ksrc == IMON_BUTTON_MCE) {
++ /* initial press */
++ if (ictx->kc != ictx->last_keycode
++ || buf[2] != ictx->mce_toggle_bit) {
++ ictx->last_keycode = ictx->kc;
++ ictx->mce_toggle_bit = buf[2];
++ press_type = 1;
++ mod_timer(&ictx->itimer,
++ jiffies + msecs_to_jiffies(MCE_TIMEOUT_MS));
++ /* repeat */
++ } else {
++ press_type = 2;
++ mod_timer(&ictx->itimer,
++ jiffies + msecs_to_jiffies(MCE_TIMEOUT_MS));
++ }
++
++ /* incoherent or irrelevant data */
++ } else if (ictx->ki == -1)
++ press_type = -EINVAL;
++
++ /* key release of 0xXXXXXXb7 key */
++ else if (ictx->ki >= IMON_KEY_RELEASE_OFFSET)
++ press_type = 0;
++
++ /* this is a button press */
++ else
++ press_type = 1;
++
++ return press_type;
++}
++
++/**
++ * Process the incoming packet
++ */
++static void imon_incoming_packet(struct imon_context *ictx,
++ struct urb *urb, int intf)
++{
++ int len = urb->actual_length;
++ unsigned char *buf = urb->transfer_buffer;
++ struct device *dev = ictx->dev;
++ u16 kc;
++ bool norelease = 0;
++ int i, ki;
++ int offset = IMON_KEY_RELEASE_OFFSET;
++ u64 temp_key;
++ u64 panel_key = 0;
++ u32 remote_key = 0;
++ struct input_dev *idev = NULL;
++ int press_type = 0;
++ int msec;
++ struct timeval t;
++ static struct timeval prev_time = { 0, 0 };
++ u8 ksrc = IMON_BUTTON_IMON;
++
++ idev = ictx->idev;
++
++ /* filter out junk data on the older 0xffdc imon devices */
++ if ((buf[0] == 0xff) && (buf[7] == 0xff))
++ return;
++
++ /* Figure out what key was pressed */
++ memcpy(&temp_key, buf, sizeof(temp_key));
++ if (len == 8 && buf[7] == 0xee) {
++ ksrc = IMON_BUTTON_PANEL;
++ panel_key = le64_to_cpu(temp_key);
++ ki = imon_panel_key_lookup(panel_key);
++ if (ki < 0)
++ kc = KEY_UNKNOWN;
++ else
++ kc = imon_panel_key_table[ki].keycode;
++ } else {
++ remote_key = (u32) (le64_to_cpu(temp_key) & 0xffffffff);
++ if (ictx->ir_protocol == IMON_IR_PROTOCOL_MCE) {
++ if (buf[0] == 0x80)
++ ksrc = IMON_BUTTON_MCE;
++ ki = imon_mce_key_lookup(remote_key);
++ if (ki < 0)
++ kc = KEY_UNKNOWN;
++ else
++ kc = imon_mce_key_table[ki].keycode;
++ } else {
++ ki = imon_remote_key_lookup(remote_key);
++ if (ki < 0)
++ kc = KEY_UNKNOWN;
++ else
++ kc = imon_remote_key_table[ki % offset].keycode;
++ }
++ }
++
++ /* keyboard/mouse mode toggle button */
++ if (kc == KEY_KEYBOARD && ki < offset) {
++ ictx->last_keycode = kc;
++ if (!nomouse) {
++ ictx->pad_mouse = ~(ictx->pad_mouse) & 0x1;
++ dev_dbg(dev, "toggling to %s mode\n",
++ ictx->pad_mouse ? "mouse" : "keyboard");
++ return;
++ } else {
++ ictx->pad_mouse = 0;
++ dev_dbg(dev, "mouse mode disabled, passing key value\n");
++ }
++ }
++
++ ictx->ki = ki;
++ ictx->kc = kc;
++
++ /* send touchscreen events through input subsystem if touchpad data */
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA && len == 8 &&
++ buf[7] == 0x86) {
++ imon_touch_event(ictx, buf);
++
++ /* look for mouse events with pad in mouse mode */
++ } else if (ictx->pad_mouse) {
++ if (imon_mouse_event(ictx, buf, len))
++ return;
++ }
++
++ /* Now for some special handling to convert pad input to arrow keys */
++ if (((len == 5) && (buf[0] == 0x01) && (buf[4] == 0x00)) ||
++ ((len == 8) && (buf[0] & 0x40) &&
++ !(buf[1] & 0x1 || buf[1] >> 2 & 0x1))) {
++ len = 8;
++ imon_pad_to_keys(ictx, buf);
++ norelease = 1;
++ }
++
++ if (debug) {
++ printk(KERN_INFO "intf%d decoded packet: ", intf);
++ for (i = 0; i < len; ++i)
++ printk("%02x ", buf[i]);
++ printk("\n");
++ }
++
++ press_type = imon_parse_press_type(ictx, buf, ksrc);
++ if (press_type < 0)
++ goto not_input_data;
++
++ if (ictx->kc == KEY_UNKNOWN)
++ goto unknown_key;
++
++ /* KEY_MUTE repeats from MCE and knob need to be suppressed */
++ if ((ictx->kc == KEY_MUTE && ictx->kc == ictx->last_keycode)
++ && (buf[7] == 0xee || ksrc == IMON_BUTTON_MCE)) {
++ do_gettimeofday(&t);
++ msec = tv2int(&t, &prev_time);
++ prev_time = t;
++ if (msec < 200)
++ return;
++ }
++
++ input_report_key(idev, ictx->kc, press_type);
++ input_sync(idev);
++
++ /* panel keys and some remote keys don't generate a release */
++ if (panel_key || norelease) {
++ input_report_key(idev, ictx->kc, 0);
++ input_sync(idev);
++ }
++
++ ictx->last_keycode = ictx->kc;
++
++ return;
++
++unknown_key:
++ dev_info(dev, "%s: unknown keypress, code 0x%llx\n", __func__,
++ (panel_key ? be64_to_cpu(panel_key) :
++ be32_to_cpu(remote_key)));
++ return;
++
++not_input_data:
++ if (len != 8) {
++ dev_warn(dev, "imon %s: invalid incoming packet "
++ "size (len = %d, intf%d)\n", __func__, len, intf);
++ return;
++ }
++
++ /* iMON 2.4G associate frame */
++ if (buf[0] == 0x00 &&
++ buf[2] == 0xFF && /* REFID */
++ buf[3] == 0xFF &&
++ buf[4] == 0xFF &&
++ buf[5] == 0xFF && /* iMON 2.4G */
++ ((buf[6] == 0x4E && buf[7] == 0xDF) || /* LT */
++ (buf[6] == 0x5E && buf[7] == 0xDF))) { /* DT */
++ dev_warn(dev, "%s: remote associated refid=%02X\n",
++ __func__, buf[1]);
++ ictx->ir_isassociating = 0;
++ }
++}
++
++/**
++ * Callback function for USB core API: receive data
++ */
++static void usb_rx_callback_intf0(struct urb *urb)
++{
++ struct imon_context *ictx;
++ int intfnum = 0;
++
++ if (!urb)
++ return;
++
++ ictx = (struct imon_context *)urb->context;
++ if (!ictx)
++ return;
++
++ switch (urb->status) {
++ case -ENOENT: /* usbcore unlink successful! */
++ return;
++
++ case -ESHUTDOWN: /* transport endpoint was shut down */
++ break;
++
++ case 0:
++ imon_incoming_packet(ictx, urb, intfnum);
++ break;
++
++ default:
++ dev_warn(ictx->dev, "imon %s: status(%d): ignored\n",
++ __func__, urb->status);
++ break;
++ }
++
++ usb_submit_urb(ictx->rx_urb_intf0, GFP_ATOMIC);
++}
++
++static void usb_rx_callback_intf1(struct urb *urb)
++{
++ struct imon_context *ictx;
++ int intfnum = 1;
++
++ if (!urb)
++ return;
++
++ ictx = (struct imon_context *)urb->context;
++ if (!ictx)
++ return;
++
++ switch (urb->status) {
++ case -ENOENT: /* usbcore unlink successful! */
++ return;
++
++ case -ESHUTDOWN: /* transport endpoint was shut down */
++ break;
++
++ case 0:
++ imon_incoming_packet(ictx, urb, intfnum);
++ break;
++
++ default:
++ dev_warn(ictx->dev, "imon %s: status(%d): ignored\n",
++ __func__, urb->status);
++ break;
++ }
++
++ usb_submit_urb(ictx->rx_urb_intf1, GFP_ATOMIC);
++}
++
++static struct input_dev *imon_init_idev(struct imon_context *ictx)
++{
++ struct input_dev *idev;
++ int ret, i;
++
++ idev = input_allocate_device();
++ if (!idev) {
++ dev_err(ictx->dev, "remote input dev allocation failed\n");
++ goto idev_alloc_failed;
++ }
++
++ snprintf(ictx->name_idev, sizeof(ictx->name_idev),
++ "iMON Remote (%04x:%04x)", ictx->vendor, ictx->product);
++ idev->name = ictx->name_idev;
++
++ usb_make_path(ictx->usbdev_intf0, ictx->phys_idev,
++ sizeof(ictx->phys_idev));
++ strlcat(ictx->phys_idev, "/input0", sizeof(ictx->phys_idev));
++ idev->phys = ictx->phys_idev;
++
++ idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
++
++ idev->keybit[BIT_WORD(BTN_MOUSE)] =
++ BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);
++ idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) |
++ BIT_MASK(REL_WHEEL);
++
++ input_set_drvdata(idev, ictx);
++
++ if (ir_protocol == IMON_IR_PROTOCOL_MCE)
++ ret = sparse_keymap_setup(idev, imon_mce_key_table, NULL);
++ else
++ ret = sparse_keymap_setup(idev, imon_remote_key_table, NULL);
++ if (ret)
++ goto keymap_failed;
++
++ /* can't use sparse keymap atm, 64-bit keycodes */
++ for (i = 0; i < ARRAY_SIZE(imon_panel_key_table); i++) {
++ u16 kc = imon_panel_key_table[i].keycode;
++ __set_bit(kc, idev->keybit);
++ }
++
++ usb_to_input_id(ictx->usbdev_intf0, &idev->id);
++ idev->dev.parent = ictx->dev;
++ ret = input_register_device(idev);
++ if (ret < 0) {
++ dev_err(ictx->dev, "remote input dev register failed\n");
++ goto idev_register_failed;
++ }
++
++ return idev;
++
++idev_register_failed:
++ sparse_keymap_free(idev);
++keymap_failed:
++ input_free_device(idev);
++idev_alloc_failed:
++
++ return NULL;
++}
++
++static struct input_dev *imon_init_touch(struct imon_context *ictx)
++{
++ struct input_dev *touch;
++ int ret;
++
++ touch = input_allocate_device();
++ if (!touch) {
++ dev_err(ictx->dev, "touchscreen input dev allocation failed\n");
++ goto touch_alloc_failed;
++ }
++
++ snprintf(ictx->name_touch, sizeof(ictx->name_touch),
++ "iMON USB Touchscreen (%04x:%04x)",
++ ictx->vendor, ictx->product);
++ touch->name = ictx->name_touch;
++
++ usb_make_path(ictx->usbdev_intf1, ictx->phys_touch,
++ sizeof(ictx->phys_touch));
++ strlcat(ictx->phys_touch, "/input1", sizeof(ictx->phys_touch));
++ touch->phys = ictx->phys_touch;
++
++ touch->evbit[0] =
++ BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
++ touch->keybit[BIT_WORD(BTN_TOUCH)] =
++ BIT_MASK(BTN_TOUCH);
++ input_set_abs_params(touch, ABS_X,
++ 0x00, 0xfff, 0, 0);
++ input_set_abs_params(touch, ABS_Y,
++ 0x00, 0xfff, 0, 0);
++
++ input_set_drvdata(touch, ictx);
++
++ usb_to_input_id(ictx->usbdev_intf1, &touch->id);
++ touch->dev.parent = ictx->dev;
++ ret = input_register_device(touch);
++ if (ret < 0) {
++ dev_info(ictx->dev, "touchscreen input dev register failed\n");
++ goto touch_register_failed;
++ }
++
++ return touch;
++
++touch_register_failed:
++ input_free_device(ictx->touch);
++ mutex_unlock(&ictx->lock);
++
++touch_alloc_failed:
++ return NULL;
++}
++
++static bool imon_find_endpoints(struct imon_context *ictx,
++ struct usb_host_interface *iface_desc)
++{
++ struct usb_endpoint_descriptor *ep;
++ struct usb_endpoint_descriptor *rx_endpoint = NULL;
++ struct usb_endpoint_descriptor *tx_endpoint = NULL;
++ int ifnum = iface_desc->desc.bInterfaceNumber;
++ int num_endpts = iface_desc->desc.bNumEndpoints;
++ int i, ep_dir, ep_type;
++ bool ir_ep_found = 0;
++ bool display_ep_found = 0;
++ bool tx_control = 0;
++
++ /*
++ * Scan the endpoint list and set:
++ * first input endpoint = IR endpoint
++ * first output endpoint = display endpoint
++ */
++ for (i = 0; i < num_endpts && !(ir_ep_found && display_ep_found); ++i) {
++ ep = &iface_desc->endpoint[i].desc;
++ ep_dir = ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK;
++ ep_type = ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++
++ if (!ir_ep_found && ep_dir == USB_DIR_IN &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++
++ rx_endpoint = ep;
++ ir_ep_found = 1;
++ dev_dbg(ictx->dev, "%s: found IR endpoint\n", __func__);
++
++ } else if (!display_ep_found && ep_dir == USB_DIR_OUT &&
++ ep_type == USB_ENDPOINT_XFER_INT) {
++ tx_endpoint = ep;
++ display_ep_found = 1;
++ dev_dbg(ictx->dev, "%s: found display endpoint\n", __func__);
++ }
++ }
++
++ if (ifnum == 0) {
++ ictx->rx_endpoint_intf0 = rx_endpoint;
++ /*
++ * tx is used to send characters to lcd/vfd, associate RF
++ * remotes, set IR protocol, and maybe more...
++ */
++ ictx->tx_endpoint = tx_endpoint;
++ } else {
++ ictx->rx_endpoint_intf1 = rx_endpoint;
++ }
++
++ /*
++ * If we didn't find a display endpoint, this is probably one of the
++ * newer iMON devices that use control urb instead of interrupt
++ */
++ if (!display_ep_found) {
++ tx_control = 1;
++ display_ep_found = 1;
++ dev_dbg(ictx->dev, "%s: device uses control endpoint, not "
++ "interface OUT endpoint\n", __func__);
++ }
++
++ /*
++ * Some iMON receivers have no display. Unfortunately, it seems
++ * that SoundGraph recycles device IDs between devices both with
++ * and without... :\
++ */
++ if (ictx->display_type == IMON_DISPLAY_TYPE_NONE) {
++ display_ep_found = 0;
++ dev_dbg(ictx->dev, "%s: device has no display\n", __func__);
++ }
++
++ /*
++ * iMON Touch devices have a VGA touchscreen, but no "display", as
++ * that refers to e.g. /dev/lcd0 (a character device LCD or VFD).
++ */
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA) {
++ display_ep_found = 0;
++ dev_dbg(ictx->dev, "%s: iMON Touch device found\n", __func__);
++ }
++
++ /* Input endpoint is mandatory */
++ if (!ir_ep_found)
++ err("%s: no valid input (IR) endpoint found.", __func__);
++
++ ictx->tx_control = tx_control;
++
++ if (display_ep_found)
++ ictx->display_supported = 1;
++
++ return ir_ep_found;
++
++}
++
++static struct imon_context *imon_init_intf0(struct usb_interface *intf)
++{
++ struct imon_context *ictx;
++ struct urb *rx_urb;
++ struct urb *tx_urb;
++ struct device *dev = &intf->dev;
++ struct usb_host_interface *iface_desc;
++ int ret;
++
++ ictx = kzalloc(sizeof(struct imon_context), GFP_KERNEL);
++ if (!ictx) {
++ dev_err(dev, "%s: kzalloc failed for context", __func__);
++ goto exit;
++ }
++ rx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!rx_urb) {
++ dev_err(dev, "%s: usb_alloc_urb failed for IR urb", __func__);
++ goto rx_urb_alloc_failed;
++ }
++ tx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!tx_urb) {
++ dev_err(dev, "%s: usb_alloc_urb failed for display urb",
++ __func__);
++ goto tx_urb_alloc_failed;
++ }
++
++ mutex_init(&ictx->lock);
++
++ mutex_lock(&ictx->lock);
++
++ ictx->dev = dev;
++ ictx->usbdev_intf0 = usb_get_dev(interface_to_usbdev(intf));
++ ictx->dev_present_intf0 = 1;
++ ictx->rx_urb_intf0 = rx_urb;
++ ictx->tx_urb = tx_urb;
++
++ ictx->vendor = le16_to_cpu(ictx->usbdev_intf0->descriptor.idVendor);
++ ictx->product = le16_to_cpu(ictx->usbdev_intf0->descriptor.idProduct);
++
++ iface_desc = intf->cur_altsetting;
++ if (!imon_find_endpoints(ictx, iface_desc))
++ goto find_endpoint_failed;
++
++ ictx->idev = imon_init_idev(ictx);
++ if (!ictx->idev) {
++ dev_err(dev, "%s: input device setup failed\n", __func__);
++ goto idev_setup_failed;
++ }
++
++ usb_fill_int_urb(ictx->rx_urb_intf0, ictx->usbdev_intf0,
++ usb_rcvintpipe(ictx->usbdev_intf0,
++ ictx->rx_endpoint_intf0->bEndpointAddress),
++ ictx->usb_rx_buf, sizeof(ictx->usb_rx_buf),
++ usb_rx_callback_intf0, ictx,
++ ictx->rx_endpoint_intf0->bInterval);
++
++ ret = usb_submit_urb(ictx->rx_urb_intf0, GFP_KERNEL);
++ if (ret) {
++ err("%s: usb_submit_urb failed for intf0 (%d)",
++ __func__, ret);
++ goto urb_submit_failed;
++ }
++
++ return ictx;
++
++urb_submit_failed:
++ sparse_keymap_free(ictx->idev);
++ input_unregister_device(ictx->idev);
++ input_free_device(ictx->idev);
++idev_setup_failed:
++find_endpoint_failed:
++ mutex_unlock(&ictx->lock);
++ usb_free_urb(tx_urb);
++tx_urb_alloc_failed:
++ usb_free_urb(rx_urb);
++rx_urb_alloc_failed:
++ kfree(ictx);
++exit:
++ dev_err(dev, "unable to initialize intf0, err %d\n", ret);
++
++ return NULL;
++}
++
++static struct imon_context *imon_init_intf1(struct usb_interface *intf,
++ struct imon_context *ictx)
++{
++ struct urb *rx_urb;
++ struct usb_host_interface *iface_desc;
++ int ret;
++
++ rx_urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!rx_urb) {
++ err("%s: usb_alloc_urb failed for IR urb", __func__);
++ ret = -ENOMEM;
++ goto rx_urb_alloc_failed;
++ }
++
++ mutex_lock(&ictx->lock);
++
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA) {
++ init_timer(&ictx->ttimer);
++ ictx->ttimer.data = (unsigned long)ictx;
++ ictx->ttimer.function = imon_touch_display_timeout;
++ }
++
++ ictx->usbdev_intf1 = usb_get_dev(interface_to_usbdev(intf));
++ ictx->dev_present_intf1 = 1;
++ ictx->rx_urb_intf1 = rx_urb;
++
++ iface_desc = intf->cur_altsetting;
++ if (!imon_find_endpoints(ictx, iface_desc))
++ goto find_endpoint_failed;
++
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA) {
++ ictx->touch = imon_init_touch(ictx);
++ if (!ictx->touch)
++ goto touch_setup_failed;
++ } else
++ ictx->touch = NULL;
++
++ usb_fill_int_urb(ictx->rx_urb_intf1, ictx->usbdev_intf1,
++ usb_rcvintpipe(ictx->usbdev_intf1,
++ ictx->rx_endpoint_intf1->bEndpointAddress),
++ ictx->usb_rx_buf, sizeof(ictx->usb_rx_buf),
++ usb_rx_callback_intf1, ictx,
++ ictx->rx_endpoint_intf1->bInterval);
++
++ ret = usb_submit_urb(ictx->rx_urb_intf1, GFP_KERNEL);
++
++ if (ret) {
++ err("%s: usb_submit_urb failed for intf1 (%d)",
++ __func__, ret);
++ goto urb_submit_failed;
++ }
++
++ return ictx;
++
++urb_submit_failed:
++ if (ictx->touch) {
++ input_unregister_device(ictx->touch);
++ input_free_device(ictx->touch);
++ }
++touch_setup_failed:
++find_endpoint_failed:
++ mutex_unlock(&ictx->lock);
++ usb_free_urb(rx_urb);
++rx_urb_alloc_failed:
++ dev_err(ictx->dev, "unable to initialize intf0, err %d\n", ret);
++
++ return NULL;
++}
++
++static void imon_set_display_type(struct imon_context *ictx,
++ struct usb_interface *intf)
++{
++ int configured_display_type = IMON_DISPLAY_TYPE_VFD;
++
++ /*
++ * Try to auto-detect the type of display if the user hasn't set
++ * it by hand via the display_type modparam. Default is VFD.
++ */
++ if (display_type == IMON_DISPLAY_TYPE_AUTO) {
++ if (usb_match_id(intf, lcd_device_list))
++ configured_display_type = IMON_DISPLAY_TYPE_LCD;
++ else if (usb_match_id(intf, imon_touchscreen_list))
++ configured_display_type = IMON_DISPLAY_TYPE_VGA;
++ else if (usb_match_id(intf, ir_only_list))
++ configured_display_type = IMON_DISPLAY_TYPE_NONE;
++ else
++ configured_display_type = IMON_DISPLAY_TYPE_VFD;
++ } else {
++ configured_display_type = display_type;
++ dev_dbg(ictx->dev, "%s: overriding display type to %d via "
++ "modparam\n", __func__, display_type);
++ }
++
++ ictx->display_type = configured_display_type;
++}
++
++static void imon_init_display(struct imon_context *ictx,
++ struct usb_interface *intf)
++{
++ int ret;
++ const unsigned char fp_packet[] = { 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x88 };
++
++ dev_dbg(ictx->dev, "Registering iMON display with sysfs\n");
++
++ /* set up sysfs entry for built-in clock */
++ ret = sysfs_create_group(&intf->dev.kobj,
++ &imon_display_attribute_group);
++ if (ret)
++ dev_err(ictx->dev, "Could not create display sysfs "
++ "entries(%d)", ret);
++
++ if (ictx->display_type == IMON_DISPLAY_TYPE_LCD)
++ ret = usb_register_dev(intf, &imon_lcd_class);
++ else
++ ret = usb_register_dev(intf, &imon_vfd_class);
++ if (ret)
++ /* Not a fatal error, so ignore */
++ dev_info(ictx->dev, "could not get a minor number for "
++ "display\n");
++
++ /* Enable front-panel buttons and/or knobs */
++ memcpy(ictx->usb_tx_buf, &fp_packet, sizeof(fp_packet));
++ ret = send_packet(ictx);
++ /* Not fatal, but warn about it */
++ if (ret)
++ dev_info(ictx->dev, "failed to enable front-panel "
++ "buttons and/or knobs\n");
++}
++
++/**
++ * Callback function for USB core API: Probe
++ */
++static int __devinit imon_probe(struct usb_interface *interface,
++ const struct usb_device_id *id)
++{
++ struct usb_device *usbdev = NULL;
++ struct usb_host_interface *iface_desc = NULL;
++ struct usb_interface *first_if;
++ struct device *dev = &interface->dev;
++ int ifnum, code_length, sysfs_err;
++ int ret = 0;
++ struct imon_context *ictx = NULL;
++ struct imon_context *first_if_ctx = NULL;
++ u16 vendor, product;
++
++ code_length = BUF_CHUNK_SIZE * 8;
++
++ usbdev = usb_get_dev(interface_to_usbdev(interface));
++ iface_desc = interface->cur_altsetting;
++ ifnum = iface_desc->desc.bInterfaceNumber;
++ vendor = le16_to_cpu(usbdev->descriptor.idVendor);
++ product = le16_to_cpu(usbdev->descriptor.idProduct);
++
++ dev_dbg(dev, "%s: found iMON device (%04x:%04x, intf%d)\n",
++ __func__, vendor, product, ifnum);
++
++ /* prevent races probing devices w/multiple interfaces */
++ mutex_lock(&driver_lock);
++
++ first_if = usb_ifnum_to_if(usbdev, 0);
++ first_if_ctx = (struct imon_context *)usb_get_intfdata(first_if);
++
++ if (ifnum == 0) {
++ ictx = imon_init_intf0(interface);
++ if (!ictx) {
++ err("%s: failed to initialize context!\n", __func__);
++ ret = -ENODEV;
++ goto fail;
++ }
++
++ imon_set_display_type(ictx, interface);
++
++ if (ictx->display_supported)
++ imon_init_display(ictx, interface);
++
++ if (product == 0xffdc) {
++ /* RF products *also* use 0xffdc... sigh... */
++ sysfs_err = sysfs_create_group(&interface->dev.kobj,
++ &imon_rf_attribute_group);
++ if (sysfs_err)
++ err("%s: Could not create RF sysfs entries(%d)",
++ __func__, sysfs_err);
++ }
++
++ } else {
++ /* this is the secondary interface on the device */
++ ictx = imon_init_intf1(interface, first_if_ctx);
++ if (!ictx) {
++ err("%s: failed to attach to context!\n", __func__);
++ ret = -ENODEV;
++ goto fail;
++ }
++
++ }
++
++ usb_set_intfdata(interface, ictx);
++
++ /* set IR protocol/remote type */
++ imon_set_ir_protocol(ictx);
++
++ dev_info(dev, "iMON device (%04x:%04x, intf%d) on "
++ "usb<%d:%d> initialized\n", vendor, product, ifnum,
++ usbdev->bus->busnum, usbdev->devnum);
++
++ mutex_unlock(&ictx->lock);
++ mutex_unlock(&driver_lock);
++
++ return 0;
++
++fail:
++ mutex_unlock(&driver_lock);
++ dev_err(dev, "unable to register, err %d\n", ret);
++
++ return ret;
++}
++
++/**
++ * Callback function for USB core API: disconnect
++ */
++static void __devexit imon_disconnect(struct usb_interface *interface)
++{
++ struct imon_context *ictx;
++ struct device *dev;
++ int ifnum;
++
++ /* prevent races with multi-interface device probing and display_open */
++ mutex_lock(&driver_lock);
++
++ ictx = usb_get_intfdata(interface);
++ dev = ictx->dev;
++ ifnum = interface->cur_altsetting->desc.bInterfaceNumber;
++
++ mutex_lock(&ictx->lock);
++
++ /*
++ * sysfs_remove_group is safe to call even if sysfs_create_group
++ * hasn't been called
++ */
++ sysfs_remove_group(&interface->dev.kobj,
++ &imon_display_attribute_group);
++ sysfs_remove_group(&interface->dev.kobj,
++ &imon_rf_attribute_group);
++
++ usb_set_intfdata(interface, NULL);
++
++ /* Abort ongoing write */
++ if (ictx->tx.busy) {
++ usb_kill_urb(ictx->tx_urb);
++ complete_all(&ictx->tx.finished);
++ }
++
++ if (ifnum == 0) {
++ ictx->dev_present_intf0 = 0;
++ usb_kill_urb(ictx->rx_urb_intf0);
++ sparse_keymap_free(ictx->idev);
++ input_unregister_device(ictx->idev);
++ if (ictx->display_supported) {
++ if (ictx->display_type == IMON_DISPLAY_TYPE_LCD)
++ usb_deregister_dev(interface, &imon_lcd_class);
++ else
++ usb_deregister_dev(interface, &imon_vfd_class);
++ }
++ } else {
++ ictx->dev_present_intf1 = 0;
++ usb_kill_urb(ictx->rx_urb_intf1);
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA)
++ input_unregister_device(ictx->touch);
++ }
++
++ if (!ictx->dev_present_intf0 && !ictx->dev_present_intf1) {
++ if (ictx->display_type == IMON_DISPLAY_TYPE_VGA)
++ del_timer_sync(&ictx->ttimer);
++ mutex_unlock(&ictx->lock);
++ if (!ictx->display_isopen)
++ free_imon_context(ictx);
++ } else {
++ if (ictx->ir_protocol == IMON_IR_PROTOCOL_MCE)
++ del_timer_sync(&ictx->itimer);
++ mutex_unlock(&ictx->lock);
++ }
++
++ mutex_unlock(&driver_lock);
++
++ dev_dbg(dev, "%s: iMON device (intf%d) disconnected\n",
++ __func__, ifnum);
++}
++
++static int imon_suspend(struct usb_interface *intf, pm_message_t message)
++{
++ struct imon_context *ictx = usb_get_intfdata(intf);
++ int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
++
++ if (ifnum == 0)
++ usb_kill_urb(ictx->rx_urb_intf0);
++ else
++ usb_kill_urb(ictx->rx_urb_intf1);
++
++ return 0;
++}
++
++static int imon_resume(struct usb_interface *intf)
++{
++ int rc = 0;
++ struct imon_context *ictx = usb_get_intfdata(intf);
++ int ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
++
++ if (ifnum == 0) {
++ usb_fill_int_urb(ictx->rx_urb_intf0, ictx->usbdev_intf0,
++ usb_rcvintpipe(ictx->usbdev_intf0,
++ ictx->rx_endpoint_intf0->bEndpointAddress),
++ ictx->usb_rx_buf, sizeof(ictx->usb_rx_buf),
++ usb_rx_callback_intf0, ictx,
++ ictx->rx_endpoint_intf0->bInterval);
++
++ rc = usb_submit_urb(ictx->rx_urb_intf0, GFP_ATOMIC);
++
++ } else {
++ usb_fill_int_urb(ictx->rx_urb_intf1, ictx->usbdev_intf1,
++ usb_rcvintpipe(ictx->usbdev_intf1,
++ ictx->rx_endpoint_intf1->bEndpointAddress),
++ ictx->usb_rx_buf, sizeof(ictx->usb_rx_buf),
++ usb_rx_callback_intf1, ictx,
++ ictx->rx_endpoint_intf1->bInterval);
++
++ rc = usb_submit_urb(ictx->rx_urb_intf1, GFP_ATOMIC);
++ }
++
++ return rc;
++}
++
++static int __init imon_init(void)
++{
++ int rc;
++
++ rc = usb_register(&imon_driver);
++ if (rc) {
++ err("%s: usb register failed(%d)", __func__, rc);
++ rc = -ENODEV;
++ }
++
++ return rc;
++}
++
++static void __exit imon_exit(void)
++{
++ usb_deregister(&imon_driver);
++}
++
++module_init(imon_init);
++module_exit(imon_exit);
+diff --git a/include/linux/lirc.h b/include/linux/lirc.h
+new file mode 100644
+index 0000000..9ca6876
+--- /dev/null
++++ b/include/linux/lirc.h
+@@ -0,0 +1,159 @@
++/*
++ * lirc.h - linux infrared remote control header file
++ * last modified 2007/09/27
++ */
++
++#ifndef _LINUX_LIRC_H
++#define _LINUX_LIRC_H
++
++#include <linux/types.h>
++#include <linux/ioctl.h>
++
++/* <obsolete> */
++#define PULSE_BIT 0x01000000
++#define PULSE_MASK 0x00FFFFFF
++/* </obsolete> */
++
++#define LIRC_MODE2_SPACE 0x00000000
++#define LIRC_MODE2_PULSE 0x01000000
++#define LIRC_MODE2_FREQUENCY 0x02000000
++#define LIRC_MODE2_TIMEOUT 0x03000000
++
++#define LIRC_VALUE_MASK 0x00FFFFFF
++#define LIRC_MODE2_MASK 0xFF000000
++
++#define LIRC_SPACE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_SPACE)
++#define LIRC_PULSE(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_PULSE)
++#define LIRC_FREQUENCY(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_FREQUENCY)
++#define LIRC_TIMEOUT(val) (((val)&LIRC_VALUE_MASK) | LIRC_MODE2_TIMEOUT)
++
++#define LIRC_VALUE(val) ((val)&LIRC_VALUE_MASK)
++#define LIRC_MODE2(val) ((val)&LIRC_MODE2_MASK)
++
++#define LIRC_IS_SPACE(val) (LIRC_MODE2(val) == LIRC_MODE2_SPACE)
++#define LIRC_IS_PULSE(val) (LIRC_MODE2(val) == LIRC_MODE2_PULSE)
++#define LIRC_IS_FREQUENCY(val) (LIRC_MODE2(val) == LIRC_MODE2_FREQUENCY)
++#define LIRC_IS_TIMEOUT(val) (LIRC_MODE2(val) == LIRC_MODE2_TIMEOUT)
++
++/*** lirc compatible hardware features ***/
++
++#define LIRC_MODE2SEND(x) (x)
++#define LIRC_SEND2MODE(x) (x)
++#define LIRC_MODE2REC(x) ((x) << 16)
++#define LIRC_REC2MODE(x) ((x) >> 16)
++
++#define LIRC_MODE_RAW 0x00000001
++#define LIRC_MODE_PULSE 0x00000002
++#define LIRC_MODE_MODE2 0x00000004
++#define LIRC_MODE_LIRCCODE 0x00000010
++
++
++#define LIRC_CAN_SEND_RAW LIRC_MODE2SEND(LIRC_MODE_RAW)
++#define LIRC_CAN_SEND_PULSE LIRC_MODE2SEND(LIRC_MODE_PULSE)
++#define LIRC_CAN_SEND_MODE2 LIRC_MODE2SEND(LIRC_MODE_MODE2)
++#define LIRC_CAN_SEND_LIRCCODE LIRC_MODE2SEND(LIRC_MODE_LIRCCODE)
++
++#define LIRC_CAN_SEND_MASK 0x0000003f
++
++#define LIRC_CAN_SET_SEND_CARRIER 0x00000100
++#define LIRC_CAN_SET_SEND_DUTY_CYCLE 0x00000200
++#define LIRC_CAN_SET_TRANSMITTER_MASK 0x00000400
++
++#define LIRC_CAN_REC_RAW LIRC_MODE2REC(LIRC_MODE_RAW)
++#define LIRC_CAN_REC_PULSE LIRC_MODE2REC(LIRC_MODE_PULSE)
++#define LIRC_CAN_REC_MODE2 LIRC_MODE2REC(LIRC_MODE_MODE2)
++#define LIRC_CAN_REC_LIRCCODE LIRC_MODE2REC(LIRC_MODE_LIRCCODE)
++
++#define LIRC_CAN_REC_MASK LIRC_MODE2REC(LIRC_CAN_SEND_MASK)
++
++#define LIRC_CAN_SET_REC_CARRIER (LIRC_CAN_SET_SEND_CARRIER << 16)
++#define LIRC_CAN_SET_REC_DUTY_CYCLE (LIRC_CAN_SET_SEND_DUTY_CYCLE << 16)
++
++#define LIRC_CAN_SET_REC_DUTY_CYCLE_RANGE 0x40000000
++#define LIRC_CAN_SET_REC_CARRIER_RANGE 0x80000000
++#define LIRC_CAN_GET_REC_RESOLUTION 0x20000000
++#define LIRC_CAN_SET_REC_TIMEOUT 0x10000000
++#define LIRC_CAN_SET_REC_FILTER 0x08000000
++
++#define LIRC_CAN_MEASURE_CARRIER 0x02000000
++
++#define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK)
++#define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK)
++
++#define LIRC_CAN_NOTIFY_DECODE 0x01000000
++
++/*** IOCTL commands for lirc driver ***/
++
++#define LIRC_GET_FEATURES _IOR('i', 0x00000000, unsigned long)
++
++#define LIRC_GET_SEND_MODE _IOR('i', 0x00000001, unsigned long)
++#define LIRC_GET_REC_MODE _IOR('i', 0x00000002, unsigned long)
++#define LIRC_GET_SEND_CARRIER _IOR('i', 0x00000003, unsigned int)
++#define LIRC_GET_REC_CARRIER _IOR('i', 0x00000004, unsigned int)
++#define LIRC_GET_SEND_DUTY_CYCLE _IOR('i', 0x00000005, unsigned int)
++#define LIRC_GET_REC_DUTY_CYCLE _IOR('i', 0x00000006, unsigned int)
++#define LIRC_GET_REC_RESOLUTION _IOR('i', 0x00000007, unsigned int)
++
++#define LIRC_GET_MIN_TIMEOUT _IOR('i', 0x00000008, uint32_t)
++#define LIRC_GET_MAX_TIMEOUT _IOR('i', 0x00000009, uint32_t)
++
++#define LIRC_GET_MIN_FILTER_PULSE _IOR('i', 0x0000000a, uint32_t)
++#define LIRC_GET_MAX_FILTER_PULSE _IOR('i', 0x0000000b, uint32_t)
++#define LIRC_GET_MIN_FILTER_SPACE _IOR('i', 0x0000000c, uint32_t)
++#define LIRC_GET_MAX_FILTER_SPACE _IOR('i', 0x0000000d, uint32_t)
++
++/* code length in bits, currently only for LIRC_MODE_LIRCCODE */
++#define LIRC_GET_LENGTH _IOR('i', 0x0000000f, unsigned long)
++
++#define LIRC_SET_SEND_MODE _IOW('i', 0x00000011, unsigned long)
++#define LIRC_SET_REC_MODE _IOW('i', 0x00000012, unsigned long)
++/* Note: these can reset the according pulse_width */
++#define LIRC_SET_SEND_CARRIER _IOW('i', 0x00000013, unsigned int)
++#define LIRC_SET_REC_CARRIER _IOW('i', 0x00000014, unsigned int)
++#define LIRC_SET_SEND_DUTY_CYCLE _IOW('i', 0x00000015, unsigned int)
++#define LIRC_SET_REC_DUTY_CYCLE _IOW('i', 0x00000016, unsigned int)
++#define LIRC_SET_TRANSMITTER_MASK _IOW('i', 0x00000017, unsigned int)
++
++/*
++ * when a timeout != 0 is set the driver will send a
++ * LIRC_MODE2_TIMEOUT data packet, otherwise LIRC_MODE2_TIMEOUT is
++ * never sent, timeout is disabled by default
++ */
++#define LIRC_SET_REC_TIMEOUT _IOW('i', 0x00000018, uint32_t)
++
++/*
++ * pulses shorter than this are filtered out by hardware (software
++ * emulation in lirc_dev?)
++ */
++#define LIRC_SET_REC_FILTER_PULSE _IOW('i', 0x00000019, uint32_t)
++/*
++ * spaces shorter than this are filtered out by hardware (software
++ * emulation in lirc_dev?)
++ */
++#define LIRC_SET_REC_FILTER_SPACE _IOW('i', 0x0000001a, uint32_t)
++/*
++ * if filter cannot be set independantly for pulse/space, this should
++ * be used
++ */
++#define LIRC_SET_REC_FILTER _IOW('i', 0x0000001b, uint32_t)
++
++/*
++ * to set a range use
++ * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the
++ * lower bound first and later
++ * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound
++ */
++
++#define LIRC_SET_REC_DUTY_CYCLE_RANGE _IOW('i', 0x0000001e, unsigned int)
++#define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, unsigned int)
++
++#define LIRC_NOTIFY_DECODE _IO('i', 0x00000020)
++
++/*
++ * from the next key press on the driver will send
++ * LIRC_MODE2_FREQUENCY packets
++ */
++#define LIRC_MEASURE_CARRIER_ENABLE _IO('i', 0x00000021)
++#define LIRC_MEASURE_CARRIER_DISABLE _IO('i', 0x00000022)
++
++#endif
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/mirrors b/freed-ora/current/F-13-2.6.33-branch/F-13/mirrors
new file mode 100644
index 000000000..d4d35d639
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/mirrors
@@ -0,0 +1,6 @@
+http://linux-libre.fsfla.org/pub/linux-libre/freed-ora/src/
+http://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots
+http://ftp.kernel.org/pub/linux/kernel/v2.6
+http://ftp.kernel.org/pub/linux/kernel/v2.6/testing
+http://ftp.kernel.org/pub/linux/kernel/v2.6/stable-review
+http://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/old
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.bz2.sign b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.bz2.sign
new file mode 100644
index 000000000..d82920b32
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.14 (GNU/Linux)
+
+iEYEABECAAYFAkwzfq8ACgkQvLfPh359R6fl0ACfc2fmZeiXE5pISQtT/8t1lq+0
+U78An28CX/MoolJ7mBWHt3Oyt/msA6hI
+=G2mb
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta
new file mode 100644
index 000000000..d6e231ded
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta
Binary files differ
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta.sign b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta.sign
new file mode 100644
index 000000000..18029784a
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/patch-libre-2.6.33.6.xdelta.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.14 (GNU/Linux)
+
+iEYEABECAAYFAkwzfqwACgkQvLfPh359R6ccBQCffQvodDqnfmsCTVobXENu5RUl
+ks4AnRloN5LHXUBDsmd8wkqWWWiLfYAD
+=SYCi
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Entries b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Entries
new file mode 100644
index 000000000..a054ff4a2
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Entries
@@ -0,0 +1,25 @@
+/bumpspecfile.py/1.5/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/check-TODO.sh/1.3/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/combine.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/configcommon.pl/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/configdiff.pl/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-amd64.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-i586.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-i686.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-ia64.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-iseries.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-ppc.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-ppc64.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-ppc8260.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-ppc8560.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-pseries.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-s390.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/cross-s390x.sh/1.1/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/get-snapshot.sh/1.8/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/newpatch.sh/1.2/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/pull-upstreams.sh/1.9/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/rebase.sh/1.27/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/reconfig.sh/1.9/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/rediffall.pl/1.4/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+/sort-config/1.5/Thu Jun 17 14:04:43 2010//Tkernel-2_6_33_6-147_fc13
+D
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Repository b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Repository
new file mode 100644
index 000000000..d5698500b
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Repository
@@ -0,0 +1 @@
+rpms/kernel/F-13/scripts
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Root b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Root
new file mode 100644
index 000000000..d426f1a67
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs.fedoraproject.org.:/cvs/pkgs
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Tag b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Tag
new file mode 100644
index 000000000..ddc99821e
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/scripts/CVS/Tag
@@ -0,0 +1 @@
+Nkernel-2_6_33_6-147_fc13
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/sources b/freed-ora/current/F-13-2.6.33-branch/F-13/sources
new file mode 100644
index 000000000..29e9327ad
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/sources
@@ -0,0 +1,2 @@
+d29fbf17a8cad60e326dc9b152dda653 linux-2.6.33-libre.tar.bz2
+868144c92e9406a37643dc973be34d70 patch-libre-2.6.33.6.bz2
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/upstream b/freed-ora/current/F-13-2.6.33-branch/F-13/upstream
new file mode 100644
index 000000000..4cbd74384
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/upstream
@@ -0,0 +1,2 @@
+linux-2.6.33-libre.tar.bz2
+patch-libre-2.6.33.6.bz2
diff --git a/freed-ora/current/F-13-2.6.33-branch/F-13/upstream-key.gpg b/freed-ora/current/F-13-2.6.33-branch/F-13/upstream-key.gpg
new file mode 100644
index 000000000..601b65d11
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/F-13/upstream-key.gpg
@@ -0,0 +1,1597 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.9 (GNU/Linux)
+
+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
+iYhGBBARAgAGBQJHHOmdAAoJENoowjp5/0R0P5AAnj9bhzFVuLfLTYAcj5TZeBTD
+GRGcAKDGguy7ik3X8qwIgZaRYen082RfOYhGBBARAgAGBQJHIeYTAAoJED/eqnpP
+6wOh9poAnjh3qNWJ0Ee6levhCtxg9dmH33vYAJ9lgem1Xl1wmaicH6/4cvCxONoB
+H4hGBBMRAgAGBQJHIetpAAoJEE+rSctElUDySjAAoNE9ETLlZcO9aHv9+QzeKLmI
+nd9ZAKCmHzDfEDup2JwV33In5AUjywtQeNHQGNAWARAAAQEAAAAAAAAAAAAAAAD/
+2P/gABBKRklGAAEBAgBIAEgAAP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRIT
+DxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJ
+DAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
+MjIyMjIyMjIyMjIyMv/AABEIAJQAkQMBEQACEQEDEQH/xAAcAAABBAMBAAAAAAAA
+AAAAAAAAAQMGBwIEBQj/xABAEAABAwMBBQUFBAgFBQAAAAABAAIDBAURBhIhMUFR
+BxMiYXEyQoGRoQgUgrEVFyNEUmLB0RYzkqLwJFNysuH/xAAaAQEAAwEBAQAAAAAA
+AAAAAAAAAQIDBAUG/8QALBEBAAICAQQBAgYBBQAAAAAAAAECAxEhBBIxQVEFkRMi
+MkKBoXEUI0NT0f/aAAwDAQACEQMRAD8Av1AIBAIBBDdVdqGldIl8NbcBPWN/dKUd
+5ID0PJvxIQVBfvtE3mqc6Ox2umoYuAlqD30nrjc0fVBAbn2k6zvIcyr1DWua/jHC
+4RtPwYAgjhpquVxe6CdznbySwklV7q/LSMOSfFZ+zF9NURgl8ErR1LCFMWifElsW
+Svms/Z1bRq/UVhAba71W0rB7kcp2f9J3KWac2Xt81fbnNbcPul0i599EI348nMwP
+mCgtbTPbrpW+OZBcHSWeqduxUkOiJ8pBw/EAgs2KaOeJksUjZI3jaa9jgQ4dQRxQ
+ZoBAIBAIBAIBBytQajtWl7VJcbvVspqdm4Z3ue7+Fo4k+QQebdc9tt71K6Wjs7pL
+Vazuwx2JpR/M4eyPJvxJQVaSSSSck8UHQtttNY8vkyIR094ql79rp6fp5yzz4SGn
+p4aUBsMTWjmeZ+K5rTNvL18eOmLisOpEQ9uea5rcS9vBq9Tcu52CrV8OfNGralyq
+6zwVYL2tEUp95o3H1C3plmrzOo6GmXmvEotNC+nmfFIMPacFdcTExuHg3pNLTW3m
+GClVK9H9omodFVDf0bVl9GTmSiny6J3XA90+Yx8UHpnQfaZZddU4ZTu+63Njcy0M
+rhtDqWn3m+Y3jmAgmqAQCAQCAQRvWmtLZoixuuNwdtSOy2npmnxzv6DoOp5fIIPJ
+GrdX3bWd5fcbrPtYyIYW7o4W/wALR+Z4nmg4KDKNneStYPeOEkTGnjbDTsY0AYC5
+Lczt72GsY8cRHk+xhO88TyVJs6qUmW7BHsNyea5slty9jpcXbXcspog9qiltSt1G
+Gt6tJwcx29dEal5FotjnUuBqGAfsqhuM52HfmP6rpwz6eR9SpG4vDhLd5YQPUdZU
+2+siq6OeSCohcHxyxu2XNI5goPT/AGU9rEWr4m2i7uZDfI2+Fw8Lapo4lo5OHNvx
+HMALUQCAQCDnX290OnLLVXa4y93S0zNt55no0dSTgAdSg8caz1fcNa6hmulc4tb7
+MEAOWwx53NH5k8ygjyAQbNA3NYzyBKifCa+UhdcYoW4AMj8cOQ+Kw/CmXqz1tMcc
+RuTButU8nZLWD+Uf3VowU9sLfUs8/pnRP0lWH95k+an8HH8KT9R6r/sn7lbc60fv
+Lz64KTgx/C0fU+rj/kk428zNcBMxkjeoGCqT09f2t6fVsu/9yIn+jdxmirLXKWEg
+sw7ZPEb0rWa25RnzUzYZmvpHF0PLCAQO01TPRVUVVTSvhnheHxyMOHNcDkEHqg9b
+9lnaDHrnT/8A1BYy70gDKuMbtrpI0dD9DkdEE9QCAQeZO3bXDr1qAacopc0Ftf8A
+ttk7pJ+fwaN3qXIKhQHPHNBuR2uslAIhLQebyG/mqTkrDevTZbcxDdpLRURSOdI6
+MeHAw4FVnLDWvRZfevvDbZa8+08f6h/dROaGlegtPmf7j/1vU1BE3cI2vPplZWyT
+Ltw9Jjr5iJ+zdFvnLfDSPAPAiM/2Vdy3mlPHEfZmLBVTMLhRTOHM7CmL2ZWw4J8z
+DTqdPuafHFJGfNuFeMlvhzZOm6f1fX8OXLbWMc6I1cYJGC1wLThafiT7q5v9NSJ/
+Llj+2g+x1LQSySCT0fg/VIyx8InoskeJif5aE1PNTv2Zo3MPmOK0i0T4c16WpOrR
+o2pUCDv6M1VVaN1RSXily5sZ2Z4gf82I+03+o6EAoPaNvr6a6W6mr6OUS01RG2WJ
+495rhkFBsoI1r7UzdJaLuN2BHfxx7FO0+9K7c31wTn0BQeLZJHzSvkkeXyPJc5zj
+kuJ4koMUG9bJ4IJy6UYcfZeeX9lS8TMNcV4pbcu53zdnaLhg8+qy7XfGaut7aFbK
+HuDQQcLWkacfUXi06g9Q0Yqi+Paawk4D3+z1xu/5wUzOmERtO9Jadr6WFsr7lSUM
+chDyyUbRIVJmsy2rF6xwmMFbPCX99X0lVTMPgzHlpGQN3Q7xgZ+KzmYbU7v5N1lT
+TPbVONy7hhkMOGtxs7geAPHJ3b/NK6lOSbeN60iNxtltqzil1BJUT4z3b3Y5bsZV
+5nXpjEd37kKvED4XRmV7TLjDmjORjqr0ZX3vk3SVAc3Yc7fyzzVb19w6+nzbjttJ
+u51ULaZ8DiHPI3N6Hr5KKVne058te2auCtnAEAg9H/Z61Ua6yVmm6iTMtAe+p8nf
+3Tj4h8Hf+6C6kHn77R1+Lp7Rp+N/ha11ZM3PEnLGfk/5oKHQCAQdGg23UsjBjG2M
+DO/hvwqz5T6PxU0lTII4WF8jjgNG8lTvRETM6hItKxZnLSxrneIeLgD1WWWW2GNz
+pYVFaKEziSagFW/G90gc4cOQG4LGLzHh0zhif1M6y37VyorfFTtgZLI2Usa3GWjm
+efzUWmU1rWOW3LbxSX2elexmKhwezbwQTjHPdnh8goiZ8JmIn8x+4WhlQP2tO0OZ
+yjp9k7vgrTMoitdcQrPWtsfDURuLi/acGtdjGcrXFb0589JjUodcSbbc56WPDzA8
+s2ndQtYnuhhMdttOYSSSTxJyrKkQCAQTHstvx092i2iqc/Zgml+6zdNiTw7/AEJa
+fgg9j4d5IPIHbBcTcu1G8u2ssp3tpmDoGNAP+7aQQZAIBA5T1ElLOyaF2y9vA/mo
+mNxqUxOklsFXCLzSVFOXNeHYfGeROQMHgR6qlt61K+OYi8SlVmtgodQVFMXtc3ay
+C0bhnfhYXtuIdOKvbeVqRV1NZ7ST3bS93gYT16qK8Q0vzO5nhHI56ua9x1NFsvc4
+4LpBx8geQSI5LW3HDavclznrIpqxsLGln+S0jP8A8S8fKMdp8xDftOon1EBop2Fz
+2jwl3HHRNzpMREzuOET1QykfNC+sIbTwy944k4zgE4+JSu4mdIyTE62pe4TfeLlV
+TZJ7yVzsnzJXXEahwWnczLWUoCAQCBWucxwe0lrmnII5EIPQ368D5IKDute+6Xes
+uEudupmfM7PVxyg1EAgEAgfo5nwVTHMaH5IBYTgO8s8lEkLG0fVPmvUkNRI572gN
+Bc7O4csrDJWNbh0YrTvlbE9virLWHv8Aai47O44O7PqqdvG4X7+dSj9vpqO33FkN
+ztslU3bGxO2Vxa9vmOAPluUbhrFcn7ZdbUTaPumxUWmoJJZG47yck4HXA/qRwUzM
+R6RWl5jmxLBaIKARZO1NHE5z3dXHkPIKK8ztW89vCDdotSxkLYtpu3I/aG0MgbIz
+v8sq9I5ZZLcaU+5xe9z3cXHJXS5yIBAIBAIF2j1KBEAgEAgEBwORxQSrT91fNeIJ
+iGsnzsyOB9sn3sct/HCzvH5V6Tyuu23MiiL35cdnD2nmsYlpb5N01bs1DHsDntcf
+Ds7vn5KkcS3rPdGpdm5CpZTfeJojI3GQGu3hWtMyUise3Bprq5ksrS4EluXO6Doo
+jiGd53Koe0C4z1V9DC5wi7oEDPHJPH5Lox+NsL+URWigQCAQCAQCDq6mtf6F1Tdb
+ZjApaqSIegO76IOUgEAgEAg72k7fW111c+jp3Ssp2CWZzeEbQ4byqZP0ytXzC6I4
+H05bJGHFj2glq462dNqt2lpGF4lp3bDwc42eBWkSpzDpVslZUQGOSo2WkYOyOKmb
+DguoNpzooWHB3vceJWdrLVqqztAtdS26mtZBI6mbG1j5Gty1hycAnllb9PbddM88
+attC1uxCAQCAQCB/7nP/ANt3yQT7tvtbrb2n10uyWx10cdSz4t2Xf7mlBXSAQCDt
+2fSGoL7MI7faqmTIz3jmbDB+J2Ao2Lc0p2ERR1X3i/1batjACKeAOawu/mJ3keQw
+guGn07bI6E0sVFDFE6LunNjYG+Hpu9AkxExqSJ1y5Z01JSAtDO+h4DHHC5ZwzXx4
+dEZYnyajsMLXZa5zD0KiKJmzYdZIjve44HTmpmiO5p1VFHDC5kLMDqeaztHw0rPy
+SzaJp5zUVN0p2yxzxGIQSDcWu45H/Oq2wYpj80ssuSJ4hXesewRjA2fS1SQ7J26W
+rk3Y5bL8fQ/NdDBT970xe9OTCK7W6emJGQ5wyw+jhkfVTsclAIBA9SUstbWQUkDd
+qWeRsTB1c44H1KD1t+qizdB8kEP+0Vp81Nktt/iZl1HIaeYj+B+9pPkHDH4kHnml
+paiuqo6alhkmnkOyyONpc5x8ggubR/YS+pDanUtQ5gOC2lpnb/xOx9B81Gxalr7M
+tI2pzX09hpDI3GHzNMrt3PxE70Eo+6xhuAweSaDzYwxuAFIzaMHcgcH1RBHRsf7T
+QfUJpLA0sJ9wKO2E90kbSwMdtCJuRzxlRFYj0TMsycKyDTgHcQgZlpIJ43RyxMex
+24tc0EH1BQV/qbsZ0xfhLLT05ttY4ZEtLubnzZ7J+GFAqXUHYdqe0NMtvMN1iHEQ
++CQfhcd/wJTYraop56SofT1MMkM0Zw+ORpa5p6EHgpFidiGmzfe0GCskZmltbfvT
+yRu2+EY9drf+FB6vx5lBzNR2WDUWna+0VIHdVcLo8/wn3XeoOD8EEU0V2f2zSlBF
+HDTxurNn9tUuYNt7ue/kM8lEQJpDGA3KkOgbkCYy70QIUChBkgMnqgNooELigxKB
+MIDCAwgQtB3EII3qvQ9k1hQOprlTDvMHu6lgAliPUH+h3FRoNdm2gotBWGajMzKm
+rqJ3SzTtbjaA3MGPJv1JUiZoBA06MBxeOiDBgxCOpCDInAQAGAgCEBhAIBAYQGEC
+YQVbq/tTq7bfJLRYqGOUwS9zPW1DXOjY/m1oGM44ZJ47lS14q2w9PfLMajiZ1v00
+qDtUvlI8S3e209XR7y59Ix8MrAOJ2XEg+m71WdeorM6l25vpWalO+vMf4mJ+0rQt
+N3ob5bIbjbqhs9LMMte36gjkRzC3eY3UGcbcnJ4BA8gEAgCMoGi3ZwOQQA370QES
+EAgEAgEQEBwIRKm/1YX7/E10kmqKZ1qrZ5pGt3yZLiS3abu2RyJGcbtyyyY4vz4l
+2dJ1lun3WY3WfMS4kthq7DPPTVVNWRxtxjvWOfEP/CTGC0+vyXHlx39x9n0PQ9Z0
+upit5iJ9W9f4n4dLsor2WnVdRY4KrvqSuhdO2PIPdys9Orc/ILrw3taPzQ8H6h0+
+LDkiMVtxP9LrY3bWzgPAYGECoBAIBAcUGDgRw4IMUQEAiQgVEEQKgRAIlhKxzmHY
+IbIM7Djkhp64zv8AREItYuzexWG9i80v3p9cWyB8ksuQ5z/ads4wDx4bt6hKYABo
+wFIVAIBAIBAIBBiW5QYkEIEQCARBUAgEBglBkGolkgEAgEAgEAgEAgEAgTAKDEgI
+ERAQKBlEssAIFQCAQCAQCAQf/9mIXAQTEQIAHAUCPtZSiAIbAwQLBwMCAxUCAwMW
+AgECHgECF4AACgkQUjSEXfK5IPVx7wCgsHNOiaRzZM57EddeoV2Fueb7gaYAoKXG
+MLRjACqtxgFkE9j6byYSvEzoiEUEExECAAYFAj7bwVoACgkQxcDFxyGNGNfQugCY
+3Jkyvvvd5D4AFAnLbv7S5a1JoQCeJDRBCSZ6nwh50r2fTst/TfPg7ZeIRgQQEQIA
+BgUCRKQf6AAKCRBTn4yvDOJxHeYrAKCxd8QkhjxfssEC8CtgFtkaTRagugCaAr0b
+sh7Q/G4DJdpyYfrc/Bh1sPWIRgQQEQIABgUCROdwwgAKCRCnyMOy9x7fHM+qAJ96
+TkW12DDfpp2Vh7yQ7XAOLWSd9ACeIgXoB6QJfnkr50NWGPGcWyptyX6IRgQSEQIA
+BgUCQp9Z+gAKCRBY2pavC5ARQejZAKCQwnUq/PSlt/1ZJrUlRs9CHmBoRwCfU9K6
+TDpjXqKXjuJ70/FUMgYV+pGIRgQTEQIABgUCQv15awAKCRA8Y8o/oLPoi/b6AJsF
++3gUpX/jkVONSz1k202w/e1lKACgv6l3HYZAYdqSAm3tQ3N/KiHwYtqIRgQQEQIA
+BgUCRxzTsgAKCRDHJIY3TSCJ29lYAKCNM+svkCWVQAHzZIO4JP6jPux/gQCggYKW
+M111Wnji5PCbp5O3YJvmYxGIRgQQEQIABgUCRxzT/QAKCRB2nZNyaMUfOAkzAKCt
+6d14E3GfpOMKbGuA4mit5aH8hACggGhclDW4duBlUY4TMlIQpIfoe7aIRgQQEQIA
+BgUCRxzpnQAKCRDaKMI6ef9EdJc7AKCjJ1pCHDqThrzhlHq5JsSgbWIo7wCgvrkP
+9uelD8Kx3pQl83slE1jY6a2IRgQQEQIABgUCRyHmEwAKCRA/3qp6T+sDoVZhAKCz
+t0W8eD6xuh1UmbgHfaaiy9XfSQCg2qrusKGvq6973KRYc9tHDnvvyG2IRgQTEQIA
+BgUCRyHraQAKCRBPq0nLRJVA8vsXAJ909KYRuYPvKv7TWze7XJxOkitKswCdGxol
+DZI/f924xj02V45jBhDdybK0I0FsZXhhbmRyZSBPbGl2YSA8bHhvbGl2YUBnbWFp
+bC5jb20+iGAEExECACAFAkOCOLkCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK
+CRBSNIRd8rkg9ZT3AKDzsUWctob+fKQ8epOUxRzNeCOGjwCg+TOdj9fcp+VEpaMh
+l044qeyWXrGIRgQQEQIABgUCROdwwgAKCRCnyMOy9x7fHAbgAJ0UVN4b20yLsUAO
+mSbICRoD+c2QBACghJrI2BRfTTD4v28CpO+KHMAfgZSIRgQQEQIABgUCRxzTsgAK
+CRDHJIY3TSCJ2+RjAJ42XXIe1LxDowqB6wpLmX6GT4gMWACeMEy+44uiv5g/h3zK
+ROAVXf7b8leIRgQQEQIABgUCRxzT/QAKCRB2nZNyaMUfOBWyAJ9XAxl3FnpXsE0/
+YRbZH8f5/smrxACggGismT89HTLIpCYGeivIKfpoClOIRgQQEQIABgUCRxzpnQAK
+CRDaKMI6ef9EdOxuAJoCln60Mn8Q9BAvLCZYkW6U/JSdFwCgrLDIAFFNAyr9SNyk
+QJuMzjE4R/KIRgQQEQIABgUCRyHmEwAKCRA/3qp6T+sDodvDAKC6YPVppldlSpGH
+E81PmVM9dWv/3gCggMnbO8Of530HZLTV1iJ7Xp6ss3+IRgQTEQIABgUCRyHraQAK
+CRBPq0nLRJVA8taMAKDGkUQ+OePSdZa7pXRmkTCk5ECtnQCgiOwLtY8op8GeKuOY
++C4U9fqqDSK0I0FsZXhhbmRyZSBPbGl2YSA8bHhvbGl2YUBmc2ZsYS5vcmc+iGAE
+ExECACAFAkQa510CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBSNIRd8rkg
+9YU1AKCnMkypeazrf4l8wlGoP6MAOEIySwCfbqKEj4B2vqTshawNg2WQgtJagcmI
+RgQTEQIABgUCRKQUrAAKCRBs20NscgSFJTvXAJ91oqhxXts1Tlr8iyVS7S8YHIN/
+dwCgtuJ16XYK3hLJvckRjjA2n8uhA8eIRgQQEQIABgUCRbAMYgAKCRChmbGhUlG0
+Ypj9AJ4uKxaXLVCWlyfc6z07xMFTOCnkTQCfU7N7SKX9c7UkKFSOdhReIJk+Iv+I
+RgQQEQIABgUCROdwwgAKCRCnyMOy9x7fHFq5AJ9dJE7CgM/w6edKxnwwRBthzgWb
+6gCcDEActChytfUOJ/t4FNqDu54dNF6IRgQQEQIABgUCRxzTsgAKCRDHJIY3TSCJ
+2wvDAJ9juFOqcqU3VQMTHRQESF+wrsWH5ACeLPWkQm5pMISSbyR3o6EpYlOVKs+I
+RgQQEQIABgUCRxzT/QAKCRB2nZNyaMUfOGBvAJ0Q0m2XAaICdOEiZvYtMCMeQbzA
+7QCgkJbrNN+ug2iktCbtcpj2XPN4qyWIRgQQEQIABgUCRxzpnQAKCRDaKMI6ef9E
+dJFfAKDGqTZx3/HeyGmGasG8lD89AUaPJwCeIvYFZMVVLDrKxOL6W7K+IU52uBaI
+RgQQEQIABgUCRyHmEwAKCRA/3qp6T+sDoRP/AJ4jSyeLjW7n7NsnE5MxTc4BSZD4
+jwCgy8pdwzzbRgJHxTpcyTQUrbbZ9WyIRgQTEQIABgUCRyHraQAKCRBPq0nLRJVA
+8iKCAJ9JIK8pRrA35BQQwZEekfrFpIRZQQCgsjBLMf3yHZa4iSIw6kk9Y9iONtK0
+H0FsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZ251Lm9yZz6IYAQTEQIAIAUCRBrnigIb
+AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEFI0hF3yuSD1akMAoJ5bu6pfwaID
+NwER40e63rPDmGAjAKDsPOE1PBTtCxLWyXU0ClYcCcnA/YhGBBMRAgAGBQJEpBSr
+AAoJEGzbQ2xyBIUlV6cAn31OimaZJZ1vbjBHa74U7ishrMeQAKCIz9BbICSyV7/L
+nEW4UH1KzOQUbIhGBBMRAgAGBQJEpBSqAAoJEGzbQ2xyBIUlB2sAoNP9nOkBM/b1
++uJFf/hETZa2DQ51AKC7jhlY2dmvKgrTRA4+32hqKjeNmohGBBARAgAGBQJFsAxd
+AAoJEKGZsaFSUbRiIlcAn3SCdkGLaVe8IRIZeYDpFn0+B2s2AJ0bBaZLnP4AiCZv
+zZRW8vPE8HpVWIhGBBARAgAGBQJFsAxiAAoJEKGZsaFSUbRi6hsAnR218E16AafJ
+jbvCu5LnWWeLSsfcAJ9Sj/wtBxxdK+ULwDbQS6FejAtEFohGBBARAgAGBQJE53DC
+AAoJEKfIw7L3Ht8c/dMAoInknun/UQAdk0ODS3J6c07C9GUxAJ9M4VLB6IFssC0I
+Hk5DQBkUZQhG44hGBBARAgAGBQJHHNOyAAoJEMckhjdNIInb2W4AoI03SlFH2Hzx
+xZbspwaXUES3r9tsAJ91hi4/6MtrjyqU8+ol6PTmRdqPi4hGBBARAgAGBQJHHNP9
+AAoJEHadk3JoxR84LGAAnj7mixIDqoSaDeGdIPYGOQi7D6YcAJ92FDVQ81S4BUTm
+nfpqwQxLzysYAYhGBBARAgAGBQJHHOmdAAoJENoowjp5/0R09vMAni7ALYoAdYKM
+lNXWLw0hC3nScSEoAJ93o9M9HuFdfpi9G3FfZHTkm4TiOohGBBARAgAGBQJHIeYT
+AAoJED/eqnpP6wOhya4AnjPC68zy7ToBDB03XcdhiiTLcjULAJ0QsVNxG8i5TBNa
+g6cL0Pp4zlBBcohGBBMRAgAGBQJHIetpAAoJEE+rSctElUDya3cAn1ezpVp7ksH+
+V2BDErgxfXpUH4ydAKCFSB4mTqB0LCnMIsUEHEPCwnt6drQmQWxleGFuZHJlIE9s
+aXZhIDxhb2xpdmFAbXBjbmV0LmNvbS5icj6ISQQwEQIACQUCRBrwegIdIAAKCRBS
+NIRd8rkg9Y8GAJoDmkVmtrrSlwzW/JjqijGvUWnAaQCdELWSXbx+dOdRzOHuERQZ
+sCHEqVOIRgQQEQIABgUCPuJOEAAKCRBxc32m+MTRT53JAKChK/islX9K0ka3vF8X
+ZXU9jTh3YwCguasziZ5SIAfaH0OCuTkmgaFXC+WIRgQSEQIABgUCPs5rvwAKCRBV
+lt0M6b9lPX+fAJ4otEll4qls5epV4Eot4v530spzQQCeK/ykxir+ZuxqxDINUOb4
+ofjAlA2IRgQSEQIABgUCPtKbOwAKCRAiGMgejnwD/3yhAJwNY4MmwKcXm2QWQl7s
+DldHRY7tKQCeMhf7lpvohCN4/nMKfcGaGZu1mUmIRgQSEQIABgUCPtWNHQAKCRBQ
+uyl0LVmn0ippAJ9lLY3s9rV+44Be1I18qdNSFBf8ZACZAfyvFrUfeVWx2MEB2my9
+EQqOuEOIRgQTEQIABgUCPtE3XAAKCRBF5ZBo+Ru3nzK2AKDLaIzkpDhiRT4NYI9x
+WfHkdOBACwCfdmFvuqzSr6yx0rGjhcAwfsIroeuIRgQTEQIABgUCPtF4zAAKCRA4
+mlY8wnKhJiSkAJwNYneXwjvKWjBN4PR6aasrjj4iKACfY3+4NNEi9dZzrfSvGgWI
+RHJrkBuIRgQTEQIABgUCPtJWBAAKCRC3zpsZN6GHxkkvAJ9UitrO+K51AOyHxNPo
+pYStC9QZCwCfZtmL4SxszJSfWF61/SD3eQiQOgqIRgQTEQIABgUCPtOgswAKCRAu
+LPZ7d5amC/8EAKCvpMXojCAQ66DY3unI9yXrbanX9gCgxwQNMU8VIgfWfApdytF+
+oSF2FsmIRgQTEQIABgUCPtQTNgAKCRBJRaU313tD+1hoAJ4mTHXuBkpNYRut/4C5
+ghPdtQmcrACfW5mbgfVQUmkB1rja9uu1SEJ2yaOIRgQTEQIABgUCPtZk6AAKCRBu
+A49e4KODd49OAJ4ufLRQElpvcnmu9GJ8IbyNpzLEpwCfbJHMuVOn4ZPZMU02sl/b
+dojZFAqIRgQTEQIABgUCPta07QAKCRAk8T4/5owAkqiAAJ9qlhWmhk9ZMWmoZXPz
+qddWEQeIfQCg9HG2K4+ufkKZ7mqZxPDHLsJbxn6IRgQTEQIABgUCPtgWbwAKCRBZ
+USdMgY/jQE9AAKCmDfWFHjxauxsRoxlKoufTB6mfmACgkSVtCEP6IXpNWWfD7pKv
+/piEvZWIRgQTEQIABgUCPtlL5QAKCRBRxjMgeX3HX1r6AKCXCdgLIqPlwCfAop7K
+gCnlfLcOjwCg16RYrcuovNnOukVlk6hP1jZ1V3iIRgQTEQIABgUCPwEkLQAKCRAw
+t65wR936hXu9AJwNa6Rdd3MwxVzZeogtXWgOLsFUDwCeKCwG+CmZRH1sjY0s+9ky
+G+0Skx6IRgQTEQIABgUCPwExsQAKCRBdbP1mfoXQM++9AJsFJYyspt8dAQooGPAo
+dLeviDSmWgCcCVq1G1yOoA4thYA0fnHwN3QotIeIXAQTEQIAHAIbAwIeAQIXgAQL
+BwMCAxUCAwMWAgEFAj660GAACgkQUjSEXfK5IPXdHgCgvaapjNit3I5dux5z7Z5+
+HzGKvnsAn11JahGgwLrx2oYcnVJ9AXLdWWJ1iFwEExECABwFAj660F8CGwMECwcD
+AgMVAgMDFgIBAh4BAheAAAoJEFI0hF3yuSD10rYAoPj6+3K7NhOY/PFGibV06bvv
+pJzXAJ9fFz9s5nNPZ59eOt6RByKh4aWTE4jcBBMBAgAGBQJAGjk1AAoJEMKjXUok
+OhMpIPYGALZOGKpQWUaTywSyPJ5uHJqMflFnkKSy3A+++3HwDpUrUK6UlLzNL+AK
+5BzEbso71zdkkP8J/4nhHfqgFKLh0ezwZXPEpZABMT5Yvolm0GbjauMEwYPQkLEb
+d1Ae/ODPUUWlsNHc2PV++o46ECOzj1fpKR5cW7gFIJ1uhwvqL6AaeIlbQ9d8YMyL
+jQAyE+EX+uBLrkNlswm4aVJd6A9pi2H0SAXAMzYz8B/w2mD6TUNp9IHHO7WTstZ8
+hq6ZKXlDoohGBBMRAgAGBQJAGjl3AAoJEAvgKygRZSHZZYIAoIvNma1q1npAhWqA
+NA7kqae6g4dGAKCtpLvhTRJ2bjC0KCu+YOv0g0AG9IhGBBIRAgAGBQJCn1n6AAoJ
+EFjalq8LkBFBR9kAnRcjAn0EgF2n1O2a8fCmvZuxQI1CAKDOl5mKasdNQ07GyNtg
+ZZ13qO4/P4hGBBMRAgAGBQJC/XlrAAoJEDxjyj+gs+iLSUkAoLriSKhT9/4Syweo
+b6ZBBRYrWAsRAJ9FMkdsr7feuRR8md4Uqr/arFfsDohGBBARAgAGBQJDgyajAAoJ
+EL3QUagWtvhNNlQAn1AfAL8OWwWqrXNUqFaB3yG+zx1WAKC7tpA63saeOIvNnb7I
+cAlXqkPiILQgQWxleGFuZHJlIE9saXZhIDxhb2xpdmFAYWNtLm9yZz6IYAQTEQIA
+IAUCRBrvlAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEFI0hF3yuSD1SY8A
+oJ8698ppRhlkXQBWTaYjyq6iTjhBAKDIgFMSer2ykHA+EbVoPRBgEMwl4YhJBDAR
+AgAJBQJEGvB6Ah0gAAoJEFI0hF3yuSD1jwYAmgOaRWa2utKXDNb8mOqKMa9RacBp
+AJ0QtZJdvH5051HM4e4RFBmwIcSpU4hGBBMRAgAGBQJEpBSsAAoJEGzbQ2xyBIUl
+bbkAnizBAkYVmNUh6UCYhnQOpqxIP3slAJ0dM6Ti+ZHB8a8Oji2HRkRfFM3/UYhG
+BBARAgAGBQJFsAxiAAoJEKGZsaFSUbRi1e0AnjkBdktDgmHOXE598RImBDBUJiPV
+AKCcbLDelA5ZBGIQZVmAHSqVHYMh04hGBBARAgAGBQJE53DCAAoJEKfIw7L3Ht8c
+zlYAoIPLRni0APdwdUco81fJV5uwHc2AAJ9ilwHBkQxnMGQIgCFk3cOiTcjrI4hG
+BBARAgAGBQJHHNOyAAoJEMckhjdNIInbwUEAninx+OkD8JvNDK93xQS6zk7mFmSf
+AJ0QhSrSUDUQElR9K+REEi9RKYMkJohGBBARAgAGBQJHHNP9AAoJEHadk3JoxR84
+Yp0AoInlyDHTXF5jK+7+1qm/4IZoiNHzAJ4/XYv7Q7W7jlBqlggafL5kE3jM3ohG
+BBARAgAGBQJHHOmdAAoJENoowjp5/0R0AdsAnjQ0aDb0R7Dm+3FT8+Tpz55GKi6k
+AJ9ZdFA380MzOAiiqyhg6iPytArbEYhGBBARAgAGBQJHIeYTAAoJED/eqnpP6wOh
+BGgAoJo2OKiN+Y6g2pHXlgQURZf16+HSAJ9KxvwWHzmTjc4By99H+EzF4ft9oIhG
+BBMRAgAGBQJHIetpAAoJEE+rSctElUDy1GcAn2E0YQ075RvvwlRhbshacr16D9nE
+AJ9m6FlHNjugAoZF+cicoE3IHzLdf7QlQWxleGFuZHJlIE9saXZhIDxhb2xpdmFA
+Y29tcHV0ZXIub3JnPohgBBMRAgAgBQJEGu+4AhsDBgsJCAcDAgQVAggDBBYCAwEC
+HgECF4AACgkQUjSEXfK5IPWoDgCcC/UYWmAa+dLVyAgNuSj8hk35x7MAn0M8FdfP
+iCA1O+yNdG8We1cEvcG7iEYEExECAAYFAkSkFKwACgkQbNtDbHIEhSWiIgCg81MM
+Tcu6CX68n9iscKF+L5nCbQYAoMbEChbuOkiUVFXhZXrUazdN5XXGiEYEEBECAAYF
+AkWwDGIACgkQoZmxoVJRtGLraACdHY/uONLJxWiBuQXPgOLtBujkD78AnjNuCvNA
+3VlRHOyM4RiGSE2yKp51iEYEEBECAAYFAkTncMIACgkQp8jDsvce3xwx4gCgpXfL
+msK3kpU9VV1KPIRzAFX6LLMAn0UJA8ti3I78YQSA3OlYAxAt/b1iiEYEEBECAAYF
+Akcc07IACgkQxySGN00gidtxxgCeI/chiIyhlt8q1SQuKo+Bj6ShMQcAnjpLUjmD
+v6dUATvNBT+N31YxY/DaiEYEEBECAAYFAkcc0/0ACgkQdp2TcmjFHzh0MwCfS4h3
+cDVES4sITBXA3pIzRlx7+l4AnRfu3kYkyuAwFx74kFkdIzt6BlMJiEYEEBECAAYF
+Akcc6Z0ACgkQ2ijCOnn/RHRA6wCgglmdSd2qKD/w36JBGa/p4nJNAoQAn2XGI+OL
+7WwNqLdK3Sv3BnfSJIy8iEYEEBECAAYFAkch5hMACgkQP96qek/rA6FYQQCg593/
+Ry65COuBmSSfDYmJ17oRM5gAnRsLgZDxtu4kRcbPay/EMPCEtg2PiEYEExECAAYF
+Akch62kACgkQT6tJy0SVQPLYsgCfc48EVx8tMTMlF30tW9Ncyqp/PSkAnRxkM6J9
+0lVa9v+/VVI0fhxB8zhutCVBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGljLnVuaWNh
+bXAuYnI+iGAEExECACAFAkQa784CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK
+CRBSNIRd8rkg9XAJAKDx8kyIR5X/eSTIwL+t0ego6qiy8ACdHxgdT1Vlpp5GeOrr
+4KH3s7aQmXeIRgQTEQIABgUCRKQUrAAKCRBs20NscgSFJTe6AKDdJGOr2RLI0gHT
+BKv4pJB47RuRUQCg36MiEImBsAzA0Y4+p/ijbE9XQ2CIRgQQEQIABgUCRbAMYgAK
+CRChmbGhUlG0YrbzAJ0XWVZsROQYbqAmmnE5GkXNrFcR4ACdFPnOSoogQvP/b4J1
+IarQCZtGlRWIRgQQEQIABgUCROdwwgAKCRCnyMOy9x7fHK+XAJ9CXmSjAxVi3hBg
+UJtlGqwg6Cl4NwCgoWbC/tVuTpUS/+/fqd3hi8q4ES6IRgQQEQIABgUCRxzTsgAK
+CRDHJIY3TSCJ2xI8AJ9doBXm3c7j06IcxrNxI7XxS5J4UQCdEC/i1k7VCcAqDubo
+zx3t1lnRPW+IRgQQEQIABgUCRxzT/QAKCRB2nZNyaMUfOBxdAKCydS5uswQzWZ95
+AlBGcJ9ZdX2NYQCfSPeuCXRGY1ryJNzfWec2cfq7PluIRgQQEQIABgUCRxzpnQAK
+CRDaKMI6ef9EdNQoAJsHJX7alox28tLBtSkKokd3PNlvyACfeimh/PazB03IvnKt
+ptwQKaowFgyIRgQQEQIABgUCRyHmEwAKCRA/3qp6T+sDocTiAKCmp1Anb8MaWsH0
+HH15+31FmS2Q0wCfV5GxoOf1xP41AE/LQzyW7cs0NMyIRgQTEQIABgUCRyHraQAK
+CRBPq0nLRJVA8pURAKCQNwAoZgZ9ayHo6Jl4Vqc2R3o01QCfReCxa8/zHemmpVto
+LuhNdvb313q0I0FsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZ3VhcmFuYS5vcmc+iGAE
+ExECACAFAkQa7/MCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBSNIRd8rkg
+9UwaAJ9Cd2GWiqnp3o/GLNGQnJKbR2KnAgCg9M8dOpI6IhlHY1TkKZBH9tkw/SCI
+RgQTEQIABgUCRKQUrAAKCRBs20NscgSFJYjmAKDEpVsUlrr76gYOQ58qgnzB7vLD
+AwCgwc9+ST2LOOQusNFcgUezKEXwOB2IRgQQEQIABgUCRbAMYgAKCRChmbGhUlG0
+YpneAJ4u0JFJWtitR64oI9sKAHs+sozrEQCfdz636TUoiECfzar4a0TyZRV71C2I
+RgQQEQIABgUCROdwwgAKCRCnyMOy9x7fHE3pAKCV6wuH/YicDRlIxHPOziLrgtMF
+qQCdGlK4/o9llOjs5Xbwhyxt6EGkbTmIRgQQEQIABgUCRxzTsgAKCRDHJIY3TSCJ
+2yyaAJ4iLqIeN39tOQO/ERzzaMqxkJQoOwCeKVdkZKQNGYDfFJRhvk5JK+QkYaqI
+RgQQEQIABgUCRxzT/QAKCRB2nZNyaMUfOLooAJ9ijYlAJE9FelumxQYsUuOQF4er
+EQCfYwKA9yRovZyqYr/QdwOsG/yWCsqIRgQQEQIABgUCRxzpnQAKCRDaKMI6ef9E
+dH0mAJ9djNUYo39cw62LSWoOtMgKJvfb0gCgzbwIDLy8oP83jDeNS9XeNC7gHoKI
+RgQQEQIABgUCRyHmEwAKCRA/3qp6T+sDob/PAKCFnujsijjQ6fqe0FK3LC4ukCE+
+qACgsf+0xt+X0U8cFor93bNbLFC4YveIRgQTEQIABgUCRyHraQAKCRBPq0nLRJVA
+8mTvAJ97SzawuY5BM3YVPZbk8N/T2xIaXQCfTSho+NGdmWqdSeyIRe5/R6fiD3+0
+I0FsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZ3VhcmFuYS5jb20+iGAEExECACAFAkQa
+8AwCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBSNIRd8rkg9XpsAJ0YopoN
+21u9VSt5roOEY1bCdUC0MgCgmTTP7vg2ZnN1yPvH8s+5hKhKgwGIRgQTEQIABgUC
+RKQUrAAKCRBs20NscgSFJSXUAKD3pFaug4aSfQ2uyPQrmABHEzbv0QCg77VISd/v
+XGJ+l59aOFugclkSu+6IRgQQEQIABgUCRbAMYgAKCRChmbGhUlG0YrWFAJ4hIxle
+056A2kS9yzBZx1ul5Od4zACdEXty1e8aGCs3y5xvgJ4r7vCzzqGIRgQQEQIABgUC
+ROdwwgAKCRCnyMOy9x7fHGaaAJ45D5hU6dBkfR4VA2Fs7AJ5ADLu6QCcCCpGNGce
+jLPrCGZKjVBNCfg3yiWIRgQQEQIABgUCRxzTsgAKCRDHJIY3TSCJ2zoDAJ97ned/
+EjfSxSn0w+rLtDExVpcLaQCgivbHwBYyypLVVbludyyFGnrMxumIRgQQEQIABgUC
+RxzT/QAKCRB2nZNyaMUfOGwUAKCbiU5jDc6GDQl6lupR7pStRql3DgCdHBjeB+tb
+OSl0rfr78fZngqj33f+IRgQQEQIABgUCRxzpnQAKCRDaKMI6ef9EdDVoAKCK/YpD
+BNeb7gLmtKkYTVVN6OYbuQCdEQngfxMRec6XfU2bd43K8iDA8yWIRgQQEQIABgUC
+RyHmEwAKCRA/3qp6T+sDocInAJ0Qu5HqplOP6odq7K6Qf6YGkEeh/wCg1j8OSABf
+TYMpLE31HlqI1Gc4kiqIRgQTEQIABgUCRyHraQAKCRBPq0nLRJVA8vUiAJoD4ris
+Wa7b0pn0CUDTMEZY2rjajACeMLTSxRc+djoXMMxq6SBFoAm+czm0N0FsZXhhbmRy
+ZSBPbGl2YSA8YW9saXZhQG9saXZhLmF0aG9tZS5sc2QuaWMudW5pY2FtcC5icj6I
+YAQTEQIAIAUCRBrwPQIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEFI0hF3y
+uSD18tMAoNq5oF4VBEoyvwcVm5cp7bP5mx9eAKDlThy8zJPdqoGTrsFp6/mMMNWU
+DohGBBMRAgAGBQJEpBSsAAoJEGzbQ2xyBIUlkpYAn3yUFeO+qVylXqmLoNIo/9j7
+FOyhAKDX1Lz5zUApOwiCFvIgg+oj9crn54hGBBARAgAGBQJFsAxiAAoJEKGZsaFS
+UbRibikAoIEijwo+Q7IsCMwcI5hkc4ZMXKnKAJwLXqAo3+NrQETJmyT35cwWSFGS
+OYhGBBARAgAGBQJE53DCAAoJEKfIw7L3Ht8coPQAoIawwqBwjirFx3i+TLmev45o
+ajKgAJ9b8uPbRSpKRt7g/pJX5T5hmry1A4hGBBARAgAGBQJHHNOyAAoJEMckhjdN
+IInbt6UAoJKrF7r6ZBwtOESf+0yLPZk2IQTSAJ4rF1Axk1JEbwxDhU8xiR+NQs8h
+3ohGBBARAgAGBQJHHNP9AAoJEHadk3JoxR84yBAAn11kwxqkPiDaibQwrSptcLsE
+GtIVAKCeIxBzFC+sylFk6YKnDTEPXLB3d4hGBBARAgAGBQJHHOmdAAoJENoowjp5
+/0R0cUAAnijyMfYTJXrHIqUziCIDcDuvLW7JAJ9mkAdHZvM2gP9xIWuIVjZ12oct
+5YhGBBARAgAGBQJHIeYTAAoJED/eqnpP6wOhtd0An1wd16vE2YrODDnWvRsWN+tx
+uVnhAJ9d1od51VYC19+4DdsNG9jPWnVc1YhGBBMRAgAGBQJHIetpAAoJEE+rSctE
+lUDyETwAoIXpuZG7ssYUeJrXLtaDzjE3O45RAJ9U3IRsunOC4As3YWDXeuwLXyKb
+NdH/AABUpv8AAFShARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAQBIAEgA
+AP/hFk1FeGlmAABJSSoACAAAAAsADgECACAAAACSAAAADwECAAUAAACyAAAAEAEC
+AAgAAAC4AAAAEgEDAAEAAAABAAAAGgEFAAEAAADAAAAAGwEFAAEAAADIAAAAKAED
+AAEAAAACAAAAMgECABQAAADQAAAAEwIDAAEAAAACAAAAaYcEAAEAAAAAAQAApcQH
+ABwAAADkAAAAoAgAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAU09O
+WQAARFNDLVA5MgBIAAAAAQAAAEgAAAABAAAAMjAwNjowNDoxMSAyMzoyNTo1MQBQ
+cmludElNADAyNTAAAAIAAgABAAAAAQEAAAAAGwCaggUAAQAAAEoCAACdggUAAQAA
+AFICAAAiiAMAAQAAAAIAAAAniAMAAQAAAMgAAAAAkAcABAAAADAyMjADkAIAFAAA
+AFoCAAAEkAIAFAAAAG4CAAABkQcABAAAAAECAwACkQUAAQAAAIICAAAEkgoAAQAA
+AIoCAAAFkgUAAQAAAJICAAAHkgMAAQAAAAUAAAAIkgMAAQAAAAAAAAAJkgMAAQAA
+AB8AAAAKkgUAAQAAAJoCAAB8kgcA4AUAAKICAAAAoAcABAAAADAxMDABoAMAAQAA
+AAEAAAACoAQAAQAAACAKAAADoAQAAQAAAJgHAAAFoAQAAQAAAIIIAAAAowcAAQAA
+AAMAAAABowcAAQAAAAEAAAABpAMAAQAAAAAAAAACpAMAAQAAAAAAAAADpAMAAQAA
+AAAAAAAGpAMAAQAAAAAAAAAAAAAACgAAAJABAAAtAAAACgAAADIwMDY6MDQ6MTEg
+MjM6MjU6NTEAMjAwNjowNDoxMSAyMzoyNTo1MQAEAAAAAQAAAAAAAAAKAAAAMAAA
+ABAAAAC0AAAACgAAAFNPTlkgRFNDIAAAAAwAAZAHAJQAAABAAwAAApAHAMgAAADU
+AwAAA5AHAMgAAACcBAAABJAHABoAAABkBQAABZAHAHgAAAB+BQAABpAHAPwAAAD2
+BQAAB5AHAMgAAADyBgAACJAHAMgAAAC6BwAA///////f//v////v//////7/////
+///////9///////////////////////9////AAAAAAABANEAAAAOAN28hwCGDCUA
+cOcAAAAADAAAAAAAAAAMAAGqIf8AANgAAH3VlQD+AGB9QKMOrQAA/Z8AAABKMACI
+fQVKMFuIfYq3AAAAAOfGAL4AgQAAAcEAAAB4AADYPgAAlQAgvzBbircAEQBSXsTY
+owAAlZkAAQAAAAAAAAAAAAAAAADNAIoAcABsAADnxgEA8AAAUmFaAHzEg////ywA
+AAAAAAAAAAAAAF4FxAAAXP/QgHAWXmAFxAAAAAAAAAAAAACKNgAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAbQLcAfQAM8AAAcAB9xgBw2XDZcBZAAAAA3NxzRgDsACAA
+BwA5AFAAvwA/AC6Hf7e3xU7wTiRHxXc5TrQAAEz2TPYENdcAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAA/wAAKgBaAJEBAAAAAAAEBQFQAQcA/wEBgSz9by3DLS0AAE+4KAxi
+9uyjhwPwRAeJJHQ5Hicf/3sf/u0GfgBeai13IYZUvb29vb29vb29vb29vb29vb29
+vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vSAIGwAB3Ny8XxAA
+AAgBAfkB/AgIAMQAxADEAMQAAAAAAAEAAAEBAAAAAAB9AAAAAABPAAAAAAAAANgA
+AAAAAAAAAAAAAAEAAQAAAAAAAAABAEAAAAAAJOygz2kAAAAAAAAAAAAAAADTAQAA
+ABv//wD/AAAAACQAAABYJAAAvf8AAM3EaQAAAAAAAAAAAAAAAAAAAAAAAABAAEAA
+QAAAAAEbVRuECO8AnwBnG3obPRt9ARcA1gCMALAIPxt2ASIBTABkASsBVgg0GxEI
+QAE2ATcBBgFfGx4bPAHBCFkB2QHzAR8IuRsyAVoIGAHyCMQIXAESCH8IYQhXAWgB
+JQHUCAEI4ABlAFQATAAAAOcAwgDjACMAagAEAAAAAAB5AMQAUQBAAAAAGwAAAAIA
+xADTAH0ADgBAAAEATADEALsAiAC2AEAAfQBRADMAVgC2AJIAGgCsADMAIwAwAMsA
+4gCHAFwAywCOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAA2NLYZF6aXuZewA7CXmZesF652LnYLtg12KvYyNiF2FIA
+owVWBSKKMnCOcAOKj4qIBboFxM156s1WkQRf518OJ16dG6wb3BtPGxEbtBslG0Qb
+RxuRG2wbDhugG+Ib8BvwG+4Ao0B/QLVAeH092HB9J0AfQOpAgRtyG4UbhhslG+Eb
+PBuaXvsOqQ4aDpQOnQ4pDjIODg44DiNeTQ6gDrZe+w55DhoAo4o2ikNwkXAUcO22
+JLZJto9pXGm9aQqIKIhfiD8gaSAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAgAEAAAAUjk4AAIABwAE
+AAAAMDEwMAAAAAAKAAMBAwABAAAABgAAAA8BAgAFAAAAHgkAABABAgAIAAAAJAkA
+ABIBAwABAAAAAQAAABoBBQABAAAALAkAABsBBQABAAAANAkAACgBAwABAAAAAgAA
+ADIBAgAUAAAAPAkAAAECBAABAAAAUQkAAAICBAABAAAA9AwAAAAAAABTT05ZAABE
+U0MtUDkyAEgAAAABAAAASAAAAAEAAAAyMDA2OjA0OjExIDIzOjI1OjUxAAD/2P/b
+AIQAEAsMDgwKEA4NDhIREBMYKBoYFhYYMSMlHSg6Mz08OTM4N0BIXE5ARFdFNzhQ
+bVFXX2JnaGc+TXF5cGR4XGVnYwEREhIYFRgvGhovY0I4QmNjY2NjY2NjY2NjY2Nj
+Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj/8QBogAAAQUBAQEB
+AQEAAAAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiEx
+QQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpD
+REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma
+oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy
+8/T19vf4+foBAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxEAAgECBAQDBAcF
+BAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl
+8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
+goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU
+1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/8AAEQgAeACgAwEhAAIRAQMRAf/aAAwD
+AQACEQMRAD8Av49akQDIrmNAYUqdRTAGAzSoOaAFIpAKoQwClHHPp3pgI9xAvDTR
+A+hcUqOknMbqw9iDSG01rYkYc9KaBzTJFYCm45oAVqbj0poAYcCmYoQhSMGnr1BF
+Zlg3BPpSp1oAG6mlQUxCkcmkHWmBn6pffYYQVUNI5wueg965u4up7k5mlZ/bPA/C
+k2d2EpprmZAcYpUJB44+lSd1rkvnyq4YSybh0O45FdLo1617bHzDmSM4Y+voaqJw
+4qmrXXQ0W7U3HrVHAKw4FNpoQMOBTDxQgFb070qVmWOYHcaVODmgAYc0q9aYhzda
+bjmmI5vxJJm7SP8Aurn86x6lnqYZfu0GKcopHUkBrV8OSbL54+0ifqOf8aaOfEr3
+GdMRwKbWh5Ap6UyhAKeVph5oQCt973pU+971mWK3DU5aAFYc4qMTRK+3zY93TG4Z
+piI76/t7EKZ2I3dABkmoItYsJsYuAh9HG2ncuNOUldHM69c+bqcrREMvADDkGswS
+uT941SimV7WpBcq0H73/ALxpRK4/iNPlQLEVV9oUzOPQ1e0e6C6lbk/L84HtzxUu
+FtjX605JxmdsegptNHGL/DTDQgF/hphoAHxu96ctZljnGeaRaAOd8TXVysgiV2SL
+jIU4z9aw7WS1R83UEkq+iPt/OrhsSzdm1O2vrcQyQYiC/Iw6rXPysFchG3L64pR1
+ZspuC0GCZgOOtTQGWbhE3YGTgU3FG1PFS2auTWscl0WEaDK9QTipWsZ+8GfoRUPR
+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
+GWHTnbjj0ochIj8hZZxgqQFIweDx259KncY+7tpYbSdjsC7MEDBPUewqm6F5zs3s
+3mExhQec45z+FOEk1cTRq6Yw+ycggh3G5fqaueYw54ZfUVyz+Jmi2EKrJ9z5W64P
+ehGySGGCeCKgYxlw4JGexpw4Hupq4ys0xNXIs4O4dN3P0p7DO76CpKGxPlnPuDTo
+udo7Ak0CY5364ppyy49OaokeOxxwaZcqj2zrJGzqf4R1J7UR0eg2Z4t4jGubSZuO
+V8xsZ54/T9RU6xq03FoRhlAySAMd62lJv7RKXkBjLbma2YOeTtLDcfwpwtk/cObX
+k8uMFivp+tTzW2YWHmS4fg2+FyQcjORg/wBarm3XB3WUY4/hHOcD/wCv+VJOMdpB
+qyzaQ+XbqEUR9cp6GpsOvODWctXcpCcN22tSkbx6OvepAMgsPcZpucOPQiqQM//Z
+/9sAQwABAQEBAQEBAQEBAQEBAQECAQEBAQECAQEBAgICAgICAgICAwMEAwMDAwMC
+AgMEAwMEBAQEBAIDBQUEBAUEBAQE/9sAQwEBAQEBAQECAQECBAMCAwQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE/8AAEQgA
+egCiAwEhAAIRAQMRAf/EAB4AAAEEAwEBAQAAAAAAAAAAAAYEBQcIAAMJCgIB/8QA
+QRAAAQMDAwIEAwUGAwcFAQAAAQIDBAUGEQASIQcxEyJBUQgUYRUycYGRCRYjQlKh
+M2KxJXKSwdHh8BckNEOj8f/EAB0BAAEFAQEBAQAAAAAAAAAAAAMEBQYHCAIJAAH/
+xABAEQABAwIEAgYHBgQGAwEAAAABAgMRAAQFEiExBlEHEyJBYXEIgZGhscHwFCMy
+QtHhUmKCshUWJDNyokPC8ZL/2gAMAwEAAhEDEQA/AL3oaCnFeK22oNKA3JTuI54U
+U+oJ4OOdHdAaaXKjEICHFILYITkLWQcIP0UOAfprNTyJb05VZuYkid61VOKyoh1K
+AnwnSlxO3/D3cEEfQhOnm3ikPxmnGs7XklKinnbnBAP03D66OUAsAnuigZjmNJqt
+FZS842tCdm8htzGVtHuOf6fTGnC3o6G5KApfCXQtJQdq0Z5woY9/XsfQ6WrTDQM8
+vlSdClFVO89tBdcKUoCvGOUjuMH1H/nGkrMdIfSoNpKVpKQdudmRxn6Zxp5AHVA+
+FI8xC6EAw0hbrjjaShS8OpyFKbUk4H/TP019OvQqWl+bNlQqfDjK+ZXPnSm4MJhJ
+5JU+4QhOCFdzpepIykHaKEjO44lLYkkiANSdogDf1UF1z4nfhypSG2qt1z6P0+c2
+CzIirv8ApjjqVJVyFBDqsHTlavV7o3erwFodVOm1eec+7Ho160ydIczyAGUvbzz7
+D8tJmLm16oI60ZuU1JrvgrjOztTiV3hNyi33zqYcCY5zl0HidKliqPRlCC2lbe9b
+P8JJdSlbpHOG05yoj/LnjTS2ylSidnn3e3JwexPodL7aDbJjlUTckLP19fXKiCox
+m1x2XC0PDXlKsjBHA5+mCDoZlx0Jd3bEhKxuBwBnHHf/AJ6LapHViguqUFTSyY3u
+gsqLYQpC+VJ7q47kfhobVGaeVuQA04nKioDhR9yM9vw/volqiGdOZ+NCcWSvXw+V
+b3o4FJUggKV4wykgFPrgg/kdCK2ElS07UkpyEJBz2PocenfRbRPYMcz8aA8da0iP
+wP4RPHfZ3/trNfSjlScExuKWSo6ok0uhIAWVBaSRt3A+YfgoH9c6MKCNsmK+24pb
+S3A0plZzsJydvv7/AK8arN2epFTsqAUY8PlWqptliW8tPnjOKLKwTnZ7IUO/0CvX
+8dPFvBlEtsLUotK/iIc2eIoe2SBjIPGeARogVLMDl+lBJ7WlfNR2fMvoebWhwOKS
+jAwhWCRnH4c406UNnO4K3ENAPNqSnCkAZxg+3fB7jS8E9QJ8PlSYGVb86dp8JaJM
+hW/cCpQIAyQRyk5+o02spb+YbS5kIU4ChYJBQcjIP0507p/2PUPlSMntCqF/G/8A
+EtL+F/pyq4KDSqfVr0umsO0G1W6mlSqdT1tN+LImyGwQp1DSVNpDIIC1vJyQAQfN
+B1R639U+sdRcq/U6/rhu99Sj4UCoz1ig05JOQiLT0bYzSB2AQgdhkk86bMXu3A6L
+ZvYRPmRPw/Wt5+hx0c4FiVneceYu0F3DbnUs5hIQAlKlLTOy1FUZtwBAiTUPOyAh
+tSGQlvcNvkSEfhgDX7SnXkymt6WyTk71NgqH4HGdNAKeqM1u95ht25Q2nVOgI8yK
+NnK3V4suLIj1eptvxMLhupqkhLkUjzAtL35RjGcoIII16Df2X3xV3X1loV19Kuot
+Xk3BdPT+BGrdv12ovl+sVmjvOfLOMynT5nXYb3g7XV5WpuSkKJKAS6YG8pt1AB0V
+ofl7/rWsg+lhwJhr/CV1ilswlL9mUOJKUgHKpaUOJ0A7MKzEfxJB512GmIQiBHVu
+3tLJwpQJW2cDkH6Y50NOsFsDxAHI61ZQpGFFHPt6en059dS+20ZHr+NeZrp7UfXd
+S11vfR1KICtroSCAPMMHnOhZbR3BbZACPv705x6HIHpo9qZbPKT8aTuaKB+tqXPR
+1fZijkBtRCsDkIySBg+2hCZHU0pJJxncMpHORyD/AK67tIhUcz8qE8diOQrSFjAy
+0knHJCwAdZo2VRoITpt76XzgZC3o5GZLLu5oEYceAJSpOP6u4I9x9dO1vNKLrakK
+OUKS4pCj22kZVjvxyCO41V60ktA/XdU6V+KKX1SO+zPkKCSW/EO4p8yFDPB4/Ig+
++nuiN+BKZkJWwlh5OFlCTsBB53JByk++3I+muwJYSoeFBEZor5rMdTcx5SQnale9
+Rzk8kALH4D+2llFbHirLbS3MD+MhK9gT7kDsQfb/AJ40uGtsCBy+VJiPvKI6p/iq
+ebTuQQAscpIwMYP1wRz+uh1bSQ62sBS2lLH3RgoOex/TTugfcgnl+lJDqrSvPZ+2
+bu0/+ofTOxm3gUUq3JVxvtJXuTvqE0ttqP18OAODriWVFQ3bsHv9e/bTDfKKrlaj
+zA9yRXqN6J9ipjonYWNOtdeXP9eT/wBa2NxlOcryBnHGTnP1+mnuBAJWlQ4CTndj
+OPfOmx54AR3f/K1nhGGKCgtR8ffS2oAFSVBY3Nny4GBxn/z89Xk/Zp3m5ZXxddN0
+eMW6ffrNQ6fzQVYQo1CKpyMlX1EqLFx/vDSjDXMi2z/Mn4iqf9IbCU3fBWMNgTnt
+HgPNLZWn3gRXrIcaS5SULayQl3kEYWCQeP7HA0xoCmVjcMNk4KVcJGePX0z31Yds
+mWo8T8a8VnQQv2fAU5PBJprgwPK4HPCBy0cn0x6EaEloCFjOdqjuB24CR9f+mi2g
+7KgeZoTuqgfL5U4toCqdIb2gkIKQV524JHt6cA/roQko+8woYUkhSFnkAjjB+nfB
+9QdFthOYHn+lAegR5U3/AC6vVgf8Os0eB9D9qAEuRp8aXVFKXKi6pP8AAkoeyVgE
+ofHrkDsoADt3A0QUFDxqCnCEIfLWC2oBxmT2G5JyM7gMZ5+vrqqyCGgPD9Kn5y5i
+R9bUsqrao9SeZSoIbcXvSlYynnO0n6HkH8dO1IcWneAxggpBbWkZODkpJ9SRnBPf
+jPPczY/0w8v0oB/3Naeqo2kS3I+0uB5OY4SN6sLTynAzyATx7D6ajSB1FsOm3AaE
+/f1ix66z/BkUSTedMYq4O4J2riqfDoJx2Kc86cWW1OW5yJnQbAmkrisrkk9/6UI/
+Er8UvRv4YaRSbh6q16o0415GaPSaJQ36/VawELbbdUhtG1tKWy6jct1xAG7jJ4MD
+WT+0j+C2/ltt0/rRS7UnPqH+zr/pM2ztx77Q862Y+e/Pi40tRcsJT1c6iAdDEwDE
++RB9dTbAejHjPinBV49w/ah9pKlJyJWnrSUgElLZgqGsdmVGNE15z/2tnXCLfHxU
+3NUen9Xp1ftumUWnUKm3DRn26/SJqI0RsrXHkt7mlJU68+cgnkHXKGPfF2SJrbTl
+dlIQTylCWWQv/LwkYzyM6k2DYLhN3Zi6fQFqUSTJ0GuggHTSN6kLfS50wcB4ZbcG
+4VcO4cywDCAyEOKKlFaipTqCs9pRgCABAjc0TuXBciRvFaq3PGRKVtAIB44xpwi3
+tdkNGGrgnFWQdrqm5A/MKSc9tPTnDuAvoyG1QR4DX2jWgWnpB9OGFXYuWuJ7wObw
+twKSf6FpKSP6ad3Oo10x2VuvOQZ/hI3LRJhhpS+MkBTZSc/rqXugfXiLa/U7p7dc
+1pVEk2xftHuBM1t8uwmflqhGccKjgKSNiVZPIAJzxqO4jwZbNNl3CSQRrkJkHwBO
+oPKZHlVy4L6XHEOPWK+Guk9ht5p1JR9paR1biMwy5nG09haddSgIUN4VtXvj8Rh6
+jl1hbbrEl/x47zawph5pY3NuIVnlKkqSfwOdDikglYPG08ZAUU4/1HfjRbQSyTOs
+n41i92QoD67qdGWwqnukpTubTnBxzznA+h5HtoYmto2oKANicoIxyM84Pto1sAMy
+f5jQHe7yFZGWVw5LSsKwgrA9cD0+uNC7+0qLawFZOEKH30d+M+2PfRbdMlZ8fkKE
+6SAB4Uh8Mjj5lsY4wdwI/LWaLPh7/wBqTa0sq6Iyqi+tG5h8rCg3uCmxnnIJ9OP9
+Px09UlG9TbqUNpdCghbYTgOk8YKccK9PQ89/eqolhPl+lWCdFwKIbhgpdBlN7VAM
+h5B7qAAyU/mP7jSCmOIdylSlIkNtktOoVw4ByAR69u300ZoE2/qoCoz153/2zXxB
+9faJdMTp5bly3FZvTIIis1qHbc12iO3G3IhtSGHZ0lkpdcZddLyUo3hGWUpIJJzx
+Q6JXd8OdGrian8QvTbqn1HpomKcNNsG9aZZsJxJHl+becirmPEnO7wpDGR2VnnU5
+4PU9cYCtdqoJf6xxJkSBlWQkRp+TKfXMGaasQQ2i8T1klOVJ9oBPvmu6F9/HF8O3
+xKdKaX0mujpRMi9LItqN0zp3cFIWqTdvT56FFREjpCZCyXCltlDTwW4pLwbOSSpK
+0+fbqLUqZb90VCmWlcaLlozClBE+FDcjONKCsKZcDqcLKcEbmyR6ZJGo7w2V4rjT
+tpeMkFsKDkEZQpJypM95VB2/hB2FXFhXGPEXRvw64MCuUAXRbW2VJzFJiV5UkFOo
+IBJnymgaP1ErkNtSG3W3HAopYadCo53YO1BCePNjGcak/p7WrzvyUxT6BaDtfqTk
+VUuZHplJM4xEpBGXF7DgE4G5RCcqxnUixThfD2m13LbxbHfOw9YIO9XPwD6WfFq3
+bbCuIMKavQkAZhoskEapStK0gxuAUjxAqX+k1uXj1fuO4rRtizmBXbWbS9VYFUfb
+o5SC4WQEFSwlR3pWkp4P8NX0zL1V+GLqyzhE7pN88eUqMOfCqAVg4OB4hVxj29NQ
+m6trvCrvI1ckHTVJI3AI5d1a2wLpb6M+kTBQrH8LAbVKS3csIcSMpKTsHREg7AaV
+Gla+HW6PDeZmdJLwhISSl9UBl3aPf7mR7enrqEq90joVrJWbidue140rc0j7bjpY
+bUogkoS4ttOcAH19NPuG8S48ghhRDx5KHa9o1PvqmuPOhz0ZMcBxDD73/CnN1Flw
+Bru3aeBSnU/lKK7v9E/2y8qx+mFh9Oq500p/UD9zrTgWu9drPUNcSs1/7PjojIlP
+tGI42lxaG0bkpURkdzzq9fQT9ptZHXq9bfsOmdG+qNOrNcnIp5qVGXEvOi0grODI
+mrZCHWY6M5ceWnCE5JBGlNpiTjSgxcMqSonYa7+Bg1nLjD0esMw3CHuIeGuI2ri1
+QgrlxGSUgSIcQtaCTsJABPnXUuGQqDKI4Owgt5ynv6e4OO+huQgnxHG8KQfK41u8
+/wCn46fbfQr8/kKy67PZjlX7AQ2UzCnOPAKgSMEHjH4euhGXjcQUp3KJHGQO3bHo
+dGtyc6x4/IUB4aJ8vnSPe6OPEHHHLeT+udZo2Uc/fQIJ7qcLgY8OYh/wj4a20bkr
+IURuSOCfr6Eeut9MUG9vmdU0ojDo7oweNx9CkgYPqPX2qlGtuJ+tqny5DkfXdTR1
+16pp6Q2JP6gvWxW7vhU1iOqoUygqQiSlpZS27McUvIQ21wXcBWAoHHcjnlJ+NS77
+jiRjZlOoFAckx1SGZi2zXyjZ5xguFKCCnCfuZyCcDtphv8acsyLNpHbKQZOxExpz
+jvnmKkOAYExjDyi85ATGg3Pr7u7aq2dY7yPxOU+k2d1ztCiT5MKKafAuy3mm6HWV
+MuLG6K8lYUw6wrzLAKSULQFJKCTrlp1Y/Z9IpV1MR+l1+02n0KqVRijsQ+oszwUs
+vOJYMh5uox2y2IrJfAKpCUqw2s7iMZX8K8XXGEXi3bpGZh0jMBp2gAAtMnQnRKh3
+iDuNVON8HNKhi2WQ4n8M66TJTpuNyDvOlSzaXwy0ykdK69V6d1Ah3ExbVCrj9dot
+GtyYu9KW9Qp32dU0roawJjZb3omYebbSmIlT6ihKTmscD9nf1iqM1t2VefTaDak5
+LVRgXZBrL9TFVYmstS6etiF4La0uSGJDToZeU2ppK8OBJABlOGYgvhK4xC8xpAzO
+uwAhQVC0gLKSe4AOJ1OomCAdKT40yOImLGysT2WkalQIlJhIUOeYpMDw3qGOofwI
+9frWqDDlNhU2+KWKk3Dcm2jL+ckUxaiAVTYZPiJQkKAU42XEpyMlORqVrQ6P/Ep0
+0TPsW2bTlfbPUWmxmKrdb5jwaXSfCcIcEd3cFbA0SklSfKtIUPvcO73FuBY1bNtr
+XlzGVJO4KCDl8ZjQ7R46UXhzh7GcFxFd00iXIyo5HOIzSdgkEyN5EVeToTGuP4fv
+Gh0PpT0prdfnvNya/VLc6v0yZdU1SDtS27DWPK2jcsCMMYUVE5Vk6vjUer9DqVDf
+uQ9PY0WvNtNuOTVSiYLK9uFtlCfIlSlHBOCkbQQO+Y1il5apuTJKioT2klJGggjm
+I2jurQXB792qxLKkpbS2I+7WFhWokGPwqJ38zVP76663pVqi7S4FtdKbfkvsJW0/
+dvVGFRpMtStwIbhpTvUSUKABI5Sr2OKEfErGuyqWLWHrkpEJqXRahDqbD9Omrn0x
+9C1rZeCTjtheMpUUlKgffTjhTdm3d2twgqzqUCJQUggwDBO43127qg/GON32I4Zf
+WzqG+rSlSeysLUCB+YDY7aGoA+EL4Z+q3XfrN0/tC2bWu9+2ardcGNdtyQKHIl0S
+36aH21TZEuRtDKUpZSvAUsFRUkDvr3mWnZVrWHRYls2jb9EtmkQIjcOPEoNJjUeM
+pDSdqPEQw2gKPG4qIJJUfXOpvdfZ3bvrGwCoDUiN+U8xp7azrcYriq8Nbwh99Ztk
+qKktlRyAmNcu07xO3dRvBYUGZKcZWGidvrjHJH+uhWR5VlSSM9vbd+ek9vEr8/kK
+Z3J7PlWyIoLEjGR4jJxxwR9fr30KSmyVEH7yTjPqO+M67t5C1jx+QoTxBSKbC4AS
+OODj7qTrNKITyNBAVGgomqobkR2EZBdXBSlpeNpdSAcEfUFOPpjTLS5K2XgkJ3NO
+8KHGEkjv+uqpbEsVPHJzj65UV1gtuQYyH2m5EV+L4L7DqUuIUPMhXB47ZGDwR9Nc
+zevnw+dBbVLlTth2sWffdxJclUe1bQrEeFRJzqiQZ0yBJbcYiQ0q5ceaLeSkoQlS
+zw14rZWlxYB24kFH4SN5OkciD3j191L8IubxjEUJsT2iQPDxJ8hPvqFaxZdl2zbl
+MkPR6t1NuCN4P2z9kLVHokxQSjxUocQEttdztJWrJCRkZzodmQrbn2NBv6z7Zapk
+F+76hVaVRpUZL79LbWpMJTTratx3oXATvGTlWecd4s/bt29uconUa+r5ke6rSvHn
+VoZK3JM6924pPb1w1+BOaq7FtORZz7LrLFYptttxnXm3g8mQgkpSFIdStYUDlLm9
+W4HJ0MdfJMuk9Euo1fpTaWbmptOer1LYk0nxmlT0tFxkOxipSVblElZVwfNk6S2Z
++13bbdwDlWsZt5MkSZ5nnSJ4JtGlPW5GZI02O2oBqA+nPV6uNdOrTvy4qPT6rCvC
+k06TUqhbCkU1mJUFMrZfjuwXCdigYqsracKFbQChKgU6nKhU6g9SY8hdfprSqbUk
+BtNLckKS14ZAP8VSCCQrjcgYB4Bzp5awk4fijhQ5KEk5f4hBjXu059/hU7wC1/xF
+DaSRCkJUeXaAJEe0eVSLA6A9M6FTJi6B0ysiko+X+cmz6ZQzCYn/AC6vmEKlNle1
+YbUN6eBg86i1mMmo2rfcqOl92Gqtx5rEhhO5khBQt7AHlIKgs8ZHfTte3N5eOIdu
+VEmIk6mBA+hyqb2eCWGE260WaQnMFEgQBrEiB36fCj+J0ctm57WiXTJ6c2RcsV2M
+rwqwbdjVB2HuK/E2JUlQb3laioDAUpSiQc6hepdPbZZcZpTlv0WZbYdJVbk+IhNB
+dWAcNOspA2tEgZSnA49NL2bi5WtkvrUcsQJMDbUUwY1gOGt4a9eMAFW6hA12kHzH
+tr0MfD/09trp10rtq2rXgtUykotmI+3AiITHhJW5HbeWUtJATypRPuP11IbpRy06
+AodkrPlWjv66suyBDJk9/wAh+9YzvYNwpQESTpy1pTDCkIk4PifwVBKzneP8p0Hz
+EArCgAUq5URzn8vfRrc9twePyFI17JIr7pgSFvIVgpWkqT/LyAf+/wCmhyWoLK0A
+grB8qh3WAePzHtozMB1fmPgKC6OyPrlTQS3k5SnOecnnWaVCYoEJ5ilVUcWqHTnW
+eHkMFW0cKc2k8p+oGQR6jHrpBEkMqU3JSsZUoF9vG7BPO4D2PqPrqpmdER3a/GrA
+XBVNRB16+ICnWOINkWbHZuXqTWGiKfTm0KegWy24SUzKiAR6Hc2xwV8FRSnlVQZF
+CotJh1e9Op9Zfq9ZkqS9UqvVl/NFbifuJICSnaM7UNpTtTwlCUjjTBePOXAypP3a
+PZP7be2ppwphYW717g7Sh/1ET7fhTnaEfrNcLkKqW07adMgTwQ3TK9R5Km3IylFL
+Diwl5Dzbq0jJQlCkJSpGVbtwDZcNGkWk7fVOrlMiUaNRFwbviQY7yTToceoqc+bd
+ZCSAWlOsuuecJILisp4yaVwrpZ4X4g4vueCrNalPtpKkOf8Ajcyn7xKe+EToo6Kg
+5dImX3Sra5t1FlMFCkx/N3e2huLelp1CdGpMB9uY+VhGWJSPAawgKJThWFgJH8ud
+pCvbUqdO7C/euVKlz6ELjtqeapbseBVobr0esqlNLYkPFLagUpjtPvpC1eRKwrJG
+ASfj3pDY6O8DTxIlpLzgcQhttRypWsnMQSNRCErVtuBzpscsHLhhy2WoplJk949v
+nXOz4meiUH4abks/prQH3UdOr0m1evQLWltqcRYVQjMxpzkanzN292PKNQU4GZIL
+kcoWlK1BWBI/R+KmmxKY7JbWsRo6FltPCzhIyeePTJJ7amvCXGLXGGFWHEaAB9qZ
+S6oJOYJWT20zv2VAjXUd+tTzgK5WyequPyAoB5hIGX1xG2lSP1T6sv3zFcpDjSI1
+PahJgUyJTY7cCJOSDsUtxCcb0nbjKuVkFRJGBpHYdUepHTS5qZV+nM5YkRHpUCpQ
+pgbgJAcc3BSTjByQNqs8EEZ1Yi2VOkOJIUsiSmQANBr/AEjWO/XvqTPYwCQ2whfU
+glIVBVmMj+4yJ7pBqN+m3VKt2hIkMRlvwYslJZq8CFIDsQtKABcU393egY3ccgEn
+kDUl0yLFuXqdY1KlwVyIVfu+mQZkVRUkTWn5baXE5GPvpUoEj00NhQ+0tsg5kkyP
+CSNPnSLGsSbPDN5mTkfSmD4wkQfbI/au9dCUy2h1hpCGGW2CyhhI2paCU7UJSOwA
+AA+gGmyUVlRQFAgkjgfqPofpq1WNFLCe4/IVi53UgmvumlxanEbipW3BGcbuOCf0
+76YZLezxMEKSVZTwRj3GumdHVjxHwoK9k0npxUJBQpXdOATnaoY9R/VoenD+KpCi
+lDgOEuHgKx2599Ea0eX6qG5BSI+tqai5JBI8NB577e/99Zo2lAn+WvyqBxVNh7du
+9pxaU7FFSkjyqT+Pf09tVB6p/ESikXE/0u6eFNR6jNtobq9VbifOU+zS8QUocSAU
+uySglYaXhLQKSsnIbNSuulu2lP4jt58/nVkWlobu9Sydtz4DT686rrTQ5alxS6lM
+8esVepvKeqtWmrU/UH5SlbnXJTiuStRwTkj0wMAAWF6QNwr4YduV+nCrvu1SQ1SF
+uMZRCQy6uMohKkq2rUtt0jYnfgp8yQMHN/T7xDd4TwB9isXC2blwNrUDlOTKpahI
+1GbKAeaSod9WWq2Xh9kHWhBVCf6eXrqz1QnRrM+zU3JT4dKQ4lyTATLnIclN+coW
+lTZT4iQsDcnGRnHvjVUfiOs7qFd7NauzpJBiVd2Tb7lGm26wqPUnX0+M1KjylM5w
+4N3zCHE7htS+CM7CjWHOjrG18GdIWG8RYm24MPWXEB0oORQWnJIMQcqlSYJMTpNL
+rdhLtoSSJlMidRH0K5SW49cdofELYfTKp26611GuV2NJTYFMo0qRWEsVBh1xt1Y8
+ZxuNGU0y4+p1ZbCGELWoBBSVei7pJSkWJZ9r2VMZbKogebn1lLCWnak9IddkOvBH
+GEb3HcJVnASkHGdWr6UHFdnYYFgeHskEXIVdogky0UlDa4iQFdvJMSEztFKWVtYk
+84m3MhuEqPdI3A901C3xkfD5bHXGhv1T7GRLui3nnqrZcxttTEyivOJCSvxRjxEP
+obDTja/8QK3A5SkHnJYUViNBj+I0UPwwkSIixkeXhQVx6dj/AP3Vi+iVxE7ieGOc
+MXa5FskFsH8qVGSB4ZgpXms0osHvs6XXAPzSfr1e6vq+KDb6n2J1Np1LkVSkq8en
+isRw/ArcNZS6IMkY5SlYUptwcoUM8jI0ZxKtbcfpQ7UH+g/T4VPD8JqNJu6U6ZL6
+3mXGpLkQYQpKEtrQ24V8IcdAUM62wWV9Z1fcke0bwNDqTUsw1tV5hzN1b4iq2lcK
+TlCgdT2hJEQnffZOkioV6fwILUmqz67Co5rN3VBPzUehxExaRSYrSw4IkNtP3UZT
+lRHKieSeSbEdIaci4fiC6dBDLaUwq69XlJByhpqnRXXxwO3mQ2PzGi4egvPtOL0J
+UAByAIAFRLjW5as7W6sbdRKEt7nUq7O5PMnU+JNdkqU6HN4UnnwCnPcgYOQfqNNy
+leMCVYDjKtuexVjODn6451Y7JPWLSO8/IVmFwaClVMc3PBWcbgRxwCccjPodMs5R
+Q6tZO5tSjkjy5/L310wfv1jyoKhKRSeIhJkIVypJPlVjg40O1RSC44heU4XnkYx9
+f76O0T1y9eVCcHYH1ypiK3MnGCM8HHfWaUSeVJYTzqoXxE/EQLbiHpl07mR6j1Yl
+xQuUphIdYseG6lIM2UR5A+QoFhgncSQpQCRzH3QnphRbEpD8uW6ubVJEpVWq1cnP
+GVUq8++n5guvuq8ylKKzk6ppwKVLivwp0Hr3Py9XjV2YHbBodeoaq28tPjQV1Wej
+1+vxIVDVNRVqlMTTKS1RZKoNXqjy/usg9ilIBUpagQhCVEkAagO4bY+JqxbEqNlM
+1a++mVPsmvVSqVOpUSm1KqUK56dOkPympzdwwUKUtmOy4UrbX4RSfMpJ+6mpOM+G
+m8ftrV+5szcsMvhakABQHYWkKKT+IJzhah4d50MuucatGXmrO8IgawY22GviZgeF
+QlTeiHXuQqLcQqFcqkWoPIVKuUyKq+6Iq9mZanHUFSg0hYcKXFDGMnaASPUp0h6M
+dNba6fUSCxSVVJEC322nJ761ipTNrY3OuO5ytbmFLWtWeVccAalvRS3wVxtY37Fu
+WL23aKG1NlIWhEhWhQoDITGkAbGDUY49xB1lNp9kBbnMZGkkZY1B2EnSuUX7NfpF
+02+I3rN8YfxrxrmuBFYvDrNV+mHTun12I0/VrZtuG3AJdL48viyUIhsYjkBtiGlG
+SVq04/H71Z6pfDB1Is6JbNzPOwrroj1RpyloQ8IaoLoblMJbKcKacDkZ1JI3edQJ
+PGm7pU6COjG7YRjl5h3Wv27TLDYW4spSw2lLSEJTmAGUDNP4ioqUTJpu4Kxe/vcS
+Thri4Q5mUYEdoysknx28o5VFPTD9pjXroqtAs/qpbsWVDrj7VHF5UGlvwp1NdfUl
+tp2VFShbS2k70lfhJSoA5wQCNV4tXqXEq993i14LcMt3jUoBjqa8JKW0TXkJGznA
+WnCx6ELHPOqF6Juj9vgPpBu7nDVn7G4ykpCjKhLhzJPMJgZVEAwqDJBNW01aoYcV
+bqVmCkn1EbfXfRbd/wBpNT4qluh6mSCV0ibs3IZWoJPy7yhxtICincOQTjODoppV
+qVGtWjLUuZTadNhH5qmwkR0qiTGyklQSvnncAMcA5I762dadY5mLJjSNfL4eNLML
+urZhtLVygkSFRyIifd3aVBlMZqorrjT60tSIrym5TkMeFHispzkkZwFHO0c88nVr
+PhPuqjUzqtddeq8GqSItHtQU+FU4scSIdPXMkoDqVEkFTqm2MBKOQkqOMEZiuM8V
+4Xwa0zi2MKIYQ4kLyiSAVJTIH5sqiCQNSAY1qO8TWdxjVrdqtQMywQmTAOo05CRI
+FdQ6D1Z6cvOoP730GP4xP/t6jOTTZTZGQQpp3apJBBHPGntu5qBNdUIVdokveMpM
+erx3i4PTsv01YmC8Y8K40k3GFYiy4lcEQ4kHUDdJIUPIiaz9eYViVoeruGFpI/lM
+e0TT3TndshLiCFNqUBkcoX+fqfrpvnueE+6pICkKWd7Z8yDqTNGXlwdOzTWoEJA+
+u6muOvZIbW0rhStxbWdw78kf99NFR8zr6P50uHuDzzkEaK0ZeUPAUJwdgHz+VMpU
+gEggd/6sazSwDT9qSwnw9tcsujfRluiRHJE9cmXV6pJTOqVQrDvzU2syFK8Rx2Q6
+rzLWVAkkk9uxAAEq3pcUW1Ke8pK1pLjASlbqwhmOhGVBByrsMqWR2wdUriLgt7Yp
+netD2TIUsZRWvo5Ci2309vr4obnpsqpNUq2p02y6aQG5gpbKC49MZ3A7HJziEoSs
+jysJTx51ZrNC+Ief1YqUG3+p0+opYrkyHV41uUuUaXadOZmJQ7DQ003tXIQ2opBe
+fWsqUkrITjamP4pfLsrFvDdgtMr/AKoAHluDzAApss7ZGLYvcXZghswnl2e/x5jz
+Jq2nTmZbVkTajSbZjNiU94jq6UFL+WkJS+0HHMjyBaVLUUqA5AIUMKUNSv8AFf1w
+d6B/Cb1svW2rrlWxVKbaztLt6konJdhuzKuPsyK1EaV52yhyWl3DJCQGhwMnWXcW
+xbiXgPp0wZzgi7DCsaCGLhBCVIXkW2gKCVCOsAcTkMSCFbhSgZBiNla4hgrv+IIz
+BrtJ5jTmO4xrQl+zfoI6F/CD0cpEWe0m4Lpt1zqNXo8pouJMuuLVOSlTiVJUPDim
+ClYJUSpAASDyQj4qL3hdSrktyTTKRSrgq8CC6xUa/Ijht23St1tpMdsvqGAlsyJB
+S3uy40kKyUpAl+G9MfSB0j8TrwBeHlOEW93clV0gKh5tCnOoZXIyDKS2V5CVKyJk
+JBVLNheBWGGKTdJcPW5EykHYkCSO/XUctTVQKZcFt20E0oUmPeVdmSnESZaCZXyr
+bxJ8HKwHiVJAQVlCd+0nABCRKNN6F2reKGq/TKki0LiceUzGnxGHZ0B5LR8NDUxv
+A8RHlwl9tRVtA5PfSfpM46VwTbW2L2aAtxLwQpJIBW0UKK0pPMFKCDGigJEE1P8A
+AbNZfK3DAUDpykiJ99SKOnF/0anuw6zQaNdlK8LY5JoVXZqDTyR2JjuFDySO4BSS
+PQnQgbNo5ATEtq/Yq1L3LpseLNbYzxkI8RJCBnBG1WOfz1IOHPSA6PcZw4XFzei3
+cSBmQ7LSxtoNwsf8SakaMHuWnCpv83fodDz5effS2J0hrtSaaYW1B6eUWQslUmqH
+7Tr00qxuWmO3kbyOynnBgkeU9tTLTKXafT6jtW/bdOq0xxkEuVOcyWFSXV43ugrA
+SVqOfORxxjOANZu6YemAcdXreFcOnLh7MnrFdnrFDSUpPayjukZjvA0oa7Ni1RLy
+syp2Hz+udBkmhs1Zx6THQmRIQT8xS3uJiU9z4YPJI745zzgnXxFs5Lny7yUJSzNJ
+TFdSNyFrGSWie6V4H3T6g6qFniK+tQEpcMp09Y2I8CNfUTSJdky9JI0P7T7KkCiu
+XnZiG6pbVw1OG224EOx0yVPRAochLjKsoUleCORwRjVqbP6lN3O1Gi1VTMGuSYgm
+MpbOyJWG8lK3I4JyFoUClbOSUkZBKSNbE9GjppvjxE1wXxA+VW9wClkqM5HRGVIJ
+/K5qMv8AFljQmqr4+4UZ+xKxSzRDiNVR3pO5PinfyB8KO2HNshGCOVZ5GACcH++t
+FT2tzHzuI8yiRnhQ9Dr0Ca/31eQqk3B2AR4/KmvxG/c/8I1mluUnupMCAImqhzpS
+KFBchJTjw2lNrWVZXhIyDxnzAnv3wdUnu6rQupHUKBZFTmyWrTiYrV9SoTLkmain
+sLATCbbbSVKemrIYQ2kb1J8UgYSSM9cQYjaW77ab9xLbKSCtSiAAkamT47Ad5IA1
+gVpJDbrdi8+yCXAnsgczoPfHvq5l13dXrptZdi2JbtJRZNbtl6iVn954rkF75dxt
+UdUOKyhW1kIawPEcyQpSAEeUk80upHRWrWNAoDdNflTKlbVuLl29UJDO2o1mksyX
+lT4D6EgJVNpLhS4dn+LGkggeU4pG56VbPijjUYLZBP2NSSGlkELUoJCzIJgTCsoj
+aO813w/gS8KtTcPE9bPbG6QNtPIameVWt6LzxeES27yhzJDFTdebjyoMpTUmG/Ij
+rC8q2p3IQ8pPiBvcNxSQeFY0k+OToX1T+JSyLAsugVekwrZT1Ph1rqG5VJao70em
+sRH2kvREhOX1hbrhLHBK1NqBASrFLcecRJ4c6bcE4p4jSVWlgnrGEISJJKVKSokm
+CeuSEk6AISDEiaf28KF/hFzaNKAWuUknbcT/ANfjXUr4VqFT2Z79svxhLYXZdIVZ
+0aa6lTNvMU9uRHlxmlKPkbVmO6cZyc+m0CnXxzfCmLm62Rq/09n/AC02t240byp9
+KOGm5zTikCR5lobR8w0WyorI8zSl/wA3OgeGMfwTD/RmwjiC/cDTbYklIlSnFPuJ
+VCRutZJURzknQaQ1tDlv0j3LLKJSobdwGRJHqke+kHSj4ZenHTlTFWuhxN13SpnC
+qdBdVXfB3HKkOup2ox6EHYjvkqHe08K+7VTGDKaYYaIGWW4eY7UaOlHBKlJ8iUge
+gyeONYK6Q+Nbni/G+vKSm3RKWkEyUgwSVdxWvdXkEjspBq1LVrq0SsyrSf28B+/f
+TtD6gWdISXVLQstIK22UwlOeOfQA4Gc+5wNNiOplObS67NgUtDOSWVRnU+M2PZbf
+PP1B1XRJKUrQdJ1HspwCylOU0zTepNs1NtyPVJEbwHOEslaVpbHsRgjOPQfrqP6v
+RKRWYz/7n1oOOpb3/ZMpfjw3fYJB8yD7FP6ac2H0AhKx2e/3ajx5ew033AUBIqLE
+swvmTGqEeVbVciKAblbVuxhz910HzBJIyFDI+uieE94LrseqRgUywFVCPHVuamgY
+KZ8FwceKjAUpA8xxnGe6l0KBCZlSdjzToR6x/b5UJpYAk7HfwP7/ABoshlpucKbU
+Fsvw61EAanII+XnpP3H0egUeAtP8qh9Rpmq9Clt0WqwGVuNVi1J4rlIlNkpWtl0e
+faRyAopzx2VpbguJP4biVvdsKKVIcSoEGCJ0kHuMx664uWE3LC2liQQQeVSp0t6k
+JumMmnVd1LdegtgrWFAKqLWAQ4keqwMFQHceYfzBMq1VZVJdSlQBB3JBOcggHKfx
+z217P9FvGTfHPCNlxBmBdWgJdHJ1Gi9O7Me2AfyqFZV4iwtWD4m7Zx2QZT4pMEez
+Y+INMRmEEgpOQcHkazVjyPo/vUdg8q553dWq5cFSTQLZIcq9QUppLshBVAp6FeRT
+7oHdKStAAHKlKCR3yJKsmwrct2VWreixY4DMyJU3q4tITOqrjrJjGRId7rcDyHQg
+HgBSUjAGvMz0geMFPYozw/aOEJSM7kHcyOrSfLU+tJ7q2BhtsWrQFQ1MH4Ue0ENI
+o9uynWEeJVJaoc5ITtSt8tuBLmPqqPjA45OmDqbZzV105QZcFPnRwi5rfrAQVilz
+EpdZccwOVIJQUPN9nGn3UkebWarLiG8scbt8Rtz94y4lQ80qSojyOx8Kc0W6AwpK
+hoRr5QR8Kkj4YvglodIS31OuCuVJyHdFBjVGFYNOdLVEo4eQiQttyUrzrCHFAtob
+SgjCcrVoov6ixoD86nU5Ti46a0uJFU4oLcGGXlAHHsfLnWw/Sl4Fw/CeB8IxxztX
+pf6sq1/A40teSO/IUCD/ADK51XHBvEdxiuN3TATDKET/AFJUkZvXO3gKZqZMqrf2
+fPp1TXT0MR0CHMpiPlqtDG3a8wHc7eSFJUlaTnP4aSzb0t2JKeXLpEifNdXvlza2
+tx96Qv1WtSshR+p9uPTGN/8ANONL4PtuF27lZw1CutS0SMocIAJ2nnAkiSSBJNT5
+Vowb9d1kHXHTNGsbxQ1Xr4aqcZcZqZR7VpG0hxciWzTVT8DlG4qSEo/qIPPb31Fs
+2t0BHyk2t3XZkKBJC00xRumDApVRDBCXAyouhLpQSkK2lW0kA4zpiawrEr9KXLK2
+ccBJAyIWqVRMDKDJABMbgAmNJrpd0wyoocWBt3gaaVomXj07prIqyrzsduGClubv
+uqAGW93CcEPZyTjAHJ0yTOrHTOeG5D3Uez5TKFqZZZTcUbwkbAkqCWUq9AtGSf6x
+k8jS234O4oebLrOGvlIMT1LgAMAkapHdrQlYrZhUF5P/AOh4eNam7/6cVKQxDi3r
+aDciWssx4rdYjIkyyhC3FBO5QyQhC1YH8qCcYB03VDqj0Zt+VDTK6l2zSKjKiN1K
+Ef3qhxfmY7o3NPsnxxubcHmSseUjkEjR2uC+MH3haMYW+pZTmgMrUYGkiEnSQfZX
+DuJ2CEdYp5IA8QOXMipfp15US8KJEk1Fuo1yjvIKqTeNLjtT07QSk7ZLKlIcTkYP
+ftzrQflae2GC43U6A+oFMiMVITHUOEOo9WHk+ueDjg+mmJbNyw6bW5GV1BIg6EKB
+1SQQCCDIIIncRrRULQ4jrEGUnv8AZqPCneAou4t6oyUrZnL+dtqtI/hobfznCscJ
+KiMLSOCcnUiw5SqtTjOkthit0PdRa9HKf8VpeNrh90hQQ4M+iVe+krkBYUOYj4j2
+KBFKrY9rKr6+hVepyf3euJ95nx2kwHkyMR1lDzkVxXioU2oYIW1uWEqHILfsSNWl
+t66XayyzGqExmbJVGS9TqsykMpqrRSFIUpPYL2kE4wFYPAIOtm+jF0kP8N8aN8L3
+ipscQIRB/I+BLah/znqlDv7J/LVW9IOBtX2ErvkCHrfXzQfxA+X4h6x30RmRJyf4
+eee+O+s16WZh/DVCBKoqmPTOlPNS3J9UYRHr8qQuVOY3h0x/lHNsaKFdiGxIQ4rH
+dZPsNH9OitzqrVKbJcU2moWtHZQtCih5Doky1oUhXotKhuT9U/jrxO4wx5XEXEt7
+iU6LUop8EgkIHqSAPVW1S0GW0gch8q1RX5s6xZUhtYFat4yXkoQPDQ5JgyFpeIT7
+rRuWB/nOnlyaKnTXZTKyqPNp6/kmjhSAJ7kZxG317uPDjtt1CEZk4iDP/kA9Skz8
+qG84AwY5H3bfOpppnVW7qJZVAtODKgxYltqESHUmYWKlUGG0eChEgrJQQ22AMpCS
+ogE88aCK7WVSE0QOKU4+uppkTHnFblbpDchLe4+qlklX5fhq8Okvpe4l6VvsLGLp
+S1bWw7LaJMr6tKFLUTqSozlGyAopEzNQ/A8EsMCS8q1krc1JPIqmB4D3wCab4suS
+2l1MYtKCnd2x0ZQVDvkep47/AF0H9XLtFudK+pFxVZqNEVQLEq1WYlIQUstvNQH1
+MEE8lXieGB7kgDVTcNWYuHrKxKZ6x1CI/wCSwB8aer94oS66NCEz7BXAyrUiqSqW
+qpsVVqKmhvwen8CsVSPFr0yTVqXRLfixKE0xK8XHz9Rq9RkOhCMrTFWpRw2Rq0PR
+gQKRanWKvuT4lrUui2He9et+usW43V2LPcrt4qpECVBpiRg4/dzehpkDJWAMDW3e
+Mi2eG0NWbRUS6y0UZ1IStSilASkSEIBzlPWJSJzrJJ1qr8MUr7aS4rSCoGASANd9
+ztMHkI7qeots3a7X6hSW6fdbdcVbjEKr3Q7Z8yb1BsqKw4Ju2nQ5U1ElRrLrvhSF
+xvCkNx28sOICAkuT9x02wY1zX5UKvNj0GqWfX+harqtSqXBUru6aV0MKra1yaJXn
+FS2pHhwWwlEaUWgsNqVjdvFeOC1xVaMPsENuLcCQNWVtjMAW2VfdJcbt3Utkpdty
+pvrLhwOIIANPCVKYCnHVEAE8wdNCoakFSSYIVBhIgjatdXsC/Ylt1et1yxblq1Ao
+fTu4q6/X75m1JiTR5Ldsz0QJ0Nhdy1BtyQ66/tKTHAQl5ZCk9tUeqanaNT6g5TLm
+pliJoliWTdMisqlwYdbehs9PXlU1qKy+N8ph6qhplxpgLyuQ2VoITlM44AxLDMVb
+uU4d/qmQEpU00n7vrOubytpDVvbEoJWhS1dV2ZUVKKUEhqxZl9goLhyK3zE6xlMk
+ypWuhAE66aSa6ufA/VoqKB1ZYXLdsypMdWzPRS4kFEe34X2lQKJPcaMMAMNocdee
+dLaUpALhxjV7JFxs0k+LWbXpsiHJQUSKrRSlynSweCVo5LZPsokf5tZF6SCn/POI
+EdokoVJ1KszbasxO5Kpme8mTvNT/AAbs4Yzm0G3lBiPVtTRNtuhV6O4qzZ7bT5QJ
+yremn5YKI58SOedigf5kEpPqNfdt1hf2ir7Qach1P5cUO4oUtIZccBOIshQHcEko
+Kxwd451BSEXCM7e/fznQgn1iP/tPCCW3Ae4x9eygW9KK41KZmFCiabLXDk7Blx+K
+VJdTgdidjivzQdEdPbbipegwnSwilpRMppRwRFdO5soHc7FhQ/Aj31KsJxJ3DHWM
+WtVQ6wttxJ5FCgQffPq8KRXzCH1qt3PwOBST/UPlRQm/IyUpTIplRMhICXyyApkr
+H3th9s5x9NZr1GtvSL4Dctm3HXVBRSCRA0JGorOrnBGNpWpKU6AnvqG4koQa7DmF
+P8Go3PMpb7yTlLLj7aCxk/0uABP+8hGn+qB1l25ahHQrfAZps6MEnzlLJddewPqH
+HQQPrrykcUEvNqP5kifURPxrWL0FuORNI7LqzD0u8EpUlcVF1mUEp8yFMVCMytX6
+lS/1OlVjtLkxbZpwVhMJyWXdx+9HiSXmYpP4qP8A+WulNEXJUP5Vf9TTJcOQ3PhH
+wo2uKrRYzchAcbU1Fa2hAAT4iz3HA/DOhiqyVyqUtMJuV87BkNV0Lfb8NMxcYhag
+n2GxJSkegHvnTtZtFthDzuicw9cxp7aagvMSkGn1laUuNSFFbUSW2mQxM4U0gKAU
+Ar24I76DettrWle3R3qLbN33ZKt+2KpbLqa5cMVCVuUiO0tEgujeNiyVMpT4ZPn3
+7RyRrrh64ucKxuzfsWwt9q4bUhJ2WoOJUlJjWFEAaa686LeJQ/brS4qEqQQTy0g+
+zeubdJ6SdMpTNt3qrrxfsW4rjhCcisQegluT+oEBSZNRp6UyKiyh3wJhdo89AdS4
+XT8sVFzA3CTqbZPQhmHLsa1r16pTLJftKz7NqVPpltxajLu+RHq0eoQYBcejB1t6
+RIuCO8/scQF/NuJSMMrI0djfEPGN2osJwq1ZbaUkyq6fc7TDqeo1WsKbbbVmWhAG
+VSSrMmTFQ+1s8PQnOXVqUr+RI0UO1sIJOgJ5gRT/AHranRu9bsv+8psyvUGtT1SK
+5eCKjb9rXDSYjdFkTLfjvMfazBebW4qjPtqZgrcQhSApzAUFlNP6SdLLg6c9NarW
+bm6kiyrivWZ02TFlv2/YdFtcTjUIdWfXBjwvlGitVNdZXKQfHWiR5ZCQohUbaxnj
+HC7WzbW0wtTBS02pRuV6pt1BGRkuhnOW0ZVKbEyuIClLAVG2sXlrSCoBUqIGUbqE
+yqJiTInl5VYGt9dLEmyajYke2avXKd9vU6xK887IiQrZXAqsp+ivP/NuKKVNtONh
+txDmzKH0KCwDnVPqX0j6AqbttMFrrTbDUKC2uBNRdUWsWzZq3hX34kOLGqTUiQ00
+P3fmJOxJQ0p1nOfEGmrhay4n4TsLhqxvLY9bkWtp1tSxmKFQlC0lK0uFK8isq0gA
+wokZTSi8ctbx1CnG1dnQKSY7xMjUEAiRI7tKsz8MVjohWvfN0WvUrvu83j1Ck1G7
+Jl91CJULnfqDEWM0HErbbSy6w4wthaFDYrCsEJ27RYtFQfo7ilPUtDDTnlkQ32FQ
+C6D67FZbJ+qVaqjjY3txxbeXN4htLuYJKWgUtgISlCQhJJITlSmATI76esO6tOHo
+Q2TESJ1OpkzzMzS6OikVYoftx9dNqcZQksQA4lC2XP5lRljgZz5kfdUCcgd9KZjB
+uVp1D7gh3VSWiGZ/h+CqQ0s4U28nvtyQlSeySULT64ixSGng+NAICh4GBPqOtLkn
+M31c77edbZDjVUi0xU8hl+cBBnsEZLMmI4lTiT/vJD34hSdD9WlCBVaXUlJAYXNd
+pUoABI8F4eIj/hKQR+Gnm0azrVak6ZVD2aVzdLHUofG8j5UpXTZe9fhhCm9x2KHm
+Chng5z7azSIYg+kZY2r8yW51IqJEKULdyFKyZ0dwnPO4CKQr8Qec6k+cABV8ADNO
+UDx3wt7GdCeJBajx/wDWn24JzHz/AEqE+li1/O3inerbspx27jjPgjnH5D9NSb0/
+UrwHjuOU0qMEnPKQVSlED8SST9TnS64JDjkfwI+FMV1/tjz+QpEkl2uqS6S6kSNw
+S4d6c5Xzg/gP00WUNSnHq+FqKw1GUWws7g3ltwHb7flp1uSfs4HdCf7hTWwTE+f9
+tE9GANOo7ZAKCwnKDyjhCccadqxAg1CPFgz4USbCXUo7q4cuMiTFWpp1DrSi2oFJ
+KFoQtJxwpIIwQDqO3jzzN4lxpZSoSQQSCCNiCO8c6WM9pISraB8q/Y9q2uh3ci26
+AhTry5DpTR46S44pa1KWrycqJkySVHkmQ7/WrJGm27dYdMtig0VmUUBBktUthuQR
+G3fLjeE5w14bewZ8vhpxjA02N4pibj46y4cMyDK1GRy320FKw02EkBI35eVOTdGo
+6kuLVSqapbXDSzBaKmw+Nz4SdvHiFSivH3iTnOtkOLFIXGMZgxkKOyOWU+Ajj0Rj
+A0uS++sQtZMcyfP4kmkZADsCktQjRvCQPl2MOABY8JOFjBHPHPYfoNBdbjsJQVJZ
+aSoEkFLYBBB4PbSBZJGtK2vw0IQnnoklluK65GR4hGyOsso9R2GNTPFAfp7hfAeI
+CcF3+IRnv319aOLURmUfbQ3AANPD4Co2u+HEYgSX2Ysdl9l5xTLzTCW3WiNhBSoD
+IPJ7e+kqVrXMtZ9alLffiyEPvLUVOvAMnAWruR9DpZek9So/yq/toVsTI17xTTWl
+KEqIAogG5IKiAcAlUUhRP44GffGmq6CTAj5JP+0WDyc/ypGnXCyTfon+H9K/bkn7
+CrzpwiPvCJFw87/8dH/2H+kazQl/iNDSTA1r/9mIYAQTEQIAIAUCRIuuhQIbAwYL
+CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEFI0hF3yuSD1DYoAn26QnS4XjcEQfUej
+03MlZCcaSdL1AKDb9ZBnsahW3KGVmhYRA5VU5X4SwohGBBARAgAGBQJHHNOyAAoJ
+EMckhjdNIInbsl8An27QwLkqHt9ciPK2+6vTkYshmuFTAJ9P/6V9og6jphPPKsCj
+8NncsMiMvohGBBARAgAGBQJHHNP9AAoJEHadk3JoxR84LW8AnRIDpf7CgXgw3uxO
+DujWkrLj4nE0AJ9QxjA3+Kl/XmLnoUURXvkLFCEtkIhGBBARAgAGBQJHHOmdAAoJ
+ENoowjp5/0R0IS0AnjoxElXZvqnIEVhz7hMAju+nJSP2AKCaqA3TbZPQ4w8HsqGY
+ifrx6EDYrYhGBBARAgAGBQJHIeYTAAoJED/eqnpP6wOhRroAnjnypB+yVgnoUPcH
+j3nvifvC9Cc9AJ4zlbTXI0hLE34t2a1yR1ZXR+0ayYhGBBMRAgAGBQJHIetpAAoJ
+EE+rSctElUDyr8UAn2kL/7oRveLF8+im8hPNs2egVOhcAKC+P0hmr9USd/8vRkeh
+r2RI3yHnLLQkQWxleGFuZHJlIE9saXZhIDxseG9saXZhMkBnbWFpbC5jb20+iGAE
+ExECACAFAkUSMYgCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBSNIRd8rkg
+9Y/6AKDy4ZrF38Y5nx5RUp2ixb06dpIHdQCgj4yficR7p3/iGr1kDlgMOj3+gpi0
+NkFsZXhhbmRyZSBPbGl2YSAoZm9yIEJjYyBzZWxmIG9ubHkpIDxhb2xpdmFAbG9j
+YWxob3N0PohgBBMRAgAgBQJF9MeYAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AA
+CgkQUjSEXfK5IPVlTwCeI+QnjS+TJ6ZuhbLvWVYQv2dh6vgAoLAMjgWMoeSrcRuV
+ik8NvzXG2h5auQENBDdxLdkQBADKUKFem3lLTibOuS5ZUeZ2WZn8uJn06KUwEy12
+6MebajTCKeGLGbxLn44sxD8hOvbIN8Qong4XUy6JXP9kABwgQ8CwhC/cY9dQCykU
+gsbkZD00SYGY8uNJ4+AkfLbBC2gdUEgQgcMKe5Zdf0HJMXc4G8I7AVjOv2kjK19m
+AGv7cwACAgQAlDaviOjHim8qjbzAsxHy/aESIL6+Ddv7atMqWK1e7bOH0Uz1fp1P
+G1OvBSB0C/oEq2PjRuno59mbAcoQRc8sQEKmVW5EQMxlgYTiA+KU+Upt3lCPSoLF
+DcutboWEmY3rQ82DaGp0HaEuPMLhC49cMxnS1B26XMxcFDi2mShdohyIPwMFGDdx
+LdlSNIRd8rkg9RECjMwAoKhmGZLIMKYY1WjGsS37zcnuCpLMAKD/B0XjJbUcVc8w
+2a43skbMtU2j4JkBogQ54qw5EQQAwky/4lE3mSm9LYgHCnWXbFD/ykp6xho5Yp6J
+VALFAtA+v4VAdUXQqSTjhEUyBK9cr3oagzO73kYTTKMSTUMWv7Eq5MsHsuanPLmr
+JFDRKnp4pqv+9G2oViXqFl42nevJkBYeuZVC5x0K64qHiZ4fVKchiaaTW/8iI3Z8
+ph/WmBMAoJYD+1HoAcx9tofDVUBCtj1lm8lFA/40AOJSNMEVnC/R6ZGJB3B9C0yk
+Qfc2KUGLcr8yYskxsCchTH2DV8tEU9dXSAni5H9xzEfOIZDxESjIQC6Gy8VVG33O
+49gMoJsxqYVhsgx/8Y6bUD/867KvO8pWETjStfMNSeNnJvsmWuF04TAzyTK2/f5f
+Kp8VNSZ1u1tWpRyk6QQAm7PvdSi6q5yBnBeOEzMMYFI+QlK2sj6BJy1PmTAan0o5
+rvEahGJk8SQir+3qwRUrmswRo+V+7cLp67a1t28TutzGy2x4310kazJyjm/HUVCy
+IOnlgJ6AMfFVWWI6zqcAJ7VN1sWDqW4gh7fZC22/jea7zbRXJjqkUUGgiFBTjmi0
+PExpbnV4IEtlcm5lbCBBcmNoaXZlcyBWZXJpZmljYXRpb24gS2V5IDxmdHBhZG1p
+bkBrZXJuZWwub3JnPokAlQIFEDti5lp30qslsMhxPQEB/bcD/0mu4UfOi3O/cOgf
+yeQ9Xl2mUEGoO4h9Fyz4JxDsko673e087X7HrFnCBVI8wfzW7qKIj0cgahmtdryE
+nr7hkGAj9w1Fg05ZTXWZH/9lpdRTgngEil2EDvHo2h51WUIpjh7/3/ZOQTT0iC7K
+341h6VjxC0DRH6IFd35QQSTunf1JiQEVAwUQOeKwNWx5eAAqlgcFAQEdZgf/Vn2d
+MKrn8021NhavP0uA3pHGRmdKQ2WJBdLiN2tvLkpAioZtho+op+xBz8j1zdIJQ/7X
+Wko869KHge2BAFwA8rWDzjtaAWdE0Jo/NiARepUwV2FdRRwSxIcNG2CCPyJnfPok
+Rqjdl2z9k2PkwidHSq+2k6JxCWnOcIXChSKfkHnemtA65ixAlhuxvyN3MPuYs1jA
+HyDGcyMfomp1qH9tXFQhhyXRrG2eMAfslstCXGXLcoLN3O2BMR/fG2GlV6kOqGOv
+oMIW3clVeQLQ9B1yyekKiVY6Vg+CgK5qhg8z9tjH4f33zzNDwsx1WSCOU/1LIPzF
+BNbR9QtTF2XmOUfRs4kAlQMFEDtfZyF+MVCmdjvpAQEBtt4D/iShO9KALAxdFSxh
+RVfnWQmTZ9jfsHj9AkWYzxmVhPTjbJgOM5B5Zsn1nvXiBUXH1k1lH+wpHbt4aKih
+fv2bxemJYInYmMNbC84VkU8iYz9yD2FmFck7wR/5PTD6LDki2mJ5QAwdqHw+qanM
+WZnxFs48rVPgeJn6uldFAyZ8epANiQCVAwUQO8hzMLsMy2KDaNINAQGnegQAjZb0
+4oyD2qDKdvBLzaZLiY4tU765ERfaFbXn0ZnValtj+MmqX3x4oFVnqjb60NUFi8U5
+KB/nm6FcDxM12kzFZx3mFFEpR+WT/3fhVVuwkZ+kx9zS4ZUO88sKThElL5FRhlY1
+RqeHmnriIUJX5ZD0y0nxXbE0aSWv6ir3BTOCBxCJARwEEAEBAAYFAjoL1bgACgkQ
+HgbN99DDsiHq7gf/eTITRtHebCbGoH9pQZE1gppa0fmJJihXLQWFnbGy1sz28HtH
+Yl7DDQMXsg3hKYrXaK3BDDq5K04DpCQUqxKpe1UAuQzwxRCmWTPYnt1iPb5w9TsR
+eVCaywy/FLVPHU77RqHwcDo6N6pFUAtYPdaOA8r08nPqcYbrB6xux2Ky9FGjd6r4
+9XhfrgVZfQbg+h2Oki+fLZx1Sxs9sWRbifLbYPBqx9a/gHuUchJbm4zKbRw5L+rx
+tbSNYjPpL5VcsBA6lVmhz9wPwDc0eJ+m1BBjqL8XI4TVAEgTDr/AXmSWi4g317iE
+J0bzOSOTSvlFV2zqLcvBBgZu5FIAlEj3U1A7NokCHAQQAQIABgUCO77anQAKCRCh
+AEl+AbRc4hTFEACWIB6H2922hws7il8M6jvZoT99mk0r8KRdKK060eGIRjS3btW+
++KxTsBQ9wryGy/Z8WVh3EG8H+ahtzwbuktwyMVOdzVqawf3Ppex1BAZw1VjpyUCp
+ML6Q5kVamggOSZ/kKl3H7FDSRDaLB03TJZMEoilhDzxcdB1w+SyW6PpZvVz9h3ir
+uBDbDgctgUHJdUzLuwKQQ8UrnBsRAc95FBXCQjq/3QMx0IP6T3ejNwt/O3rQUkht
+IfsykwHUcZaLQ4qIQw+vOoWPwPYg1G/ygXn4esph7SEKks+k296oZGDMxt9fW9oo
+Cmx/641dXL38Adh0gxAicHESmqxApjCbdfZ7IRjKQuemBgY86pktRcwXnRk+52iD
+ZGbkRzUumE5ZUNDmEx6WISMULdAoh1sc9IjkDW4PB7UK8qfofjwyvPWJKvXwccYK
+c1vhDeHt3zzij9W2yRPIJlmi/7iJ+ThxqALZvfijd+fmJWUKDNSq2afKRt8f1DFV
+7LKdimQNHrkhRIwx5hiBSfTsxSWnbMHeXWCMxZD/uG8liG4qWkQ+azDGKmNHnC02
+jpnrAOLorKBaZbgHMKxzgRtYoNeM6gnmQ9vGWGsUIp5mnNHx44Chgb3UBfEBjSMs
+DkuVUyfldOjJz3sRSxAFN3HKpAdfDDa3NDG6G1XNJ4gcWTjd0BFwqAmATokBHAQQ
+AQIABgUCO8ayJQAKCRBCtwuQzgi9kXKRB/4o2OBqqGpLuY7d8roEFcAkvS4cVVBw
+6NqyyES0/To0ORsIHa+ZOOe4++b3DTVSLQ4/kxysbQjAOsgBVST3NYHV3NHiVm42
+eeuZrwEwBVK7MHfARt4pOzfDVhqctlgElVVl9xpdkG9l2kFNvj/CNdRFq/74e7Wt
+JJ9OXcxLRx1nkUAkBU4o3J7R3pvW/svP5ZTqbtmBcZazmm1HynWruF/MQ+7yJydM
+WN4pDT3ToefKMMd/PuJlKPcGZ9nHZUuf/RU3UkNpPd9LFQIh599qVUH8kcUXQ5mb
+vZmp5b9zCvmXWJdS+3ldVAwsxY2HpnMirD8UaZwM+fHEbIFh0n3MfSLRiQIcBBAB
+AgAGBQI8Kxh7AAoJELEmyajfoR0VLmcP/3faYEuha7qlozIVza0w4twysEBzfA9T
+bOGicL5Sp7+JeMEAqj6Q4AiI5NnVt95k5cBzj4uoHjhVzJYwcSNouUFFUBOAJtGh
+m7DPkOrZ2Jw5WK8VG5WD8fKIjI6ssIAqj3DE23a7yMBij/S0LE3wN2rXg9E4+DwE
+ix0mj1M4YAMw7AvAYxKHTGWYUP0jP2VojvuJ6Joxj6xMwY4iT3esL5UqPImihnmH
+I7HiRIWLus0o6HzkmNmGRpwIN4qis2rak+L+Psw70RCo+EzcwIeUM0zQlxVZivfO
+tOxVG14ZkrF1GBit99K3KjFRCpTecQ+OKW6uLO8iFeILiVwdGejuYmRwPFAHwAkx
+dYkWR9BVV3ui6BBTz97NrG+f8Rj07yHW+7x07ocr3cYSqmbFpEXGNBKURH1r8L7w
+YH5TTowPl32qiJ7jOblFd2IIEl8N5PbCoK4UNG2ODud8O/DMVtxKFGyY4+JJnG7p
+Ht6y1NQT16LQZXzqWI3ydG4tfTTfRTUdWq4LnhstDU4fmUGbAjAo4gZ/hI+Toj9/
+inpkjQ4vs7CMlTvrcLncHSzFW3poqBFdL+EJcX0DZUJS6wEzreg+CLWSE2HDhXrC
+UzG1K4LM9QQWm6jH1pax95tNpN5mOFURygUr0ZTNbmiAmlLjDkJMEW0isXQOrcym
+LTZIpbKC/EGmiQEUBBABAgAGBQI9oe3RAAoJEI8u8DzpeueD0dAHv01m7F4a5Y1K
+XjGIZ8mBAfa+i1A8DRCKLYHQp0WBKx/ubo8z6JpeKWDRBKItgwbmvqfrt1sDyW2+
+4nTxv/P1xNe9OkeDbLdDBHBD1LVGQea6mGXw76t+KvD+w/ITdvooZeaE9h4lM55/
+pHar9nU4eV4gPCFUQmVBXOXuwz2wwlEkGYBoNja4Buk6xBt50P9UZK6zqQBCQ7bw
+gPonkEvdmENR9GCDI38euIkIPOCSoELdt0gyxR/Rvqv8uXuM1bI+UGHgHOvX+AWa
+CQibpJcssr1VVR2v4kn86ka8bzchWYHw4+7PCZoLqgXfyAJer+C272d6CVyF+v8P
+iQIcBBABAgAGBQJAG/hRAAoJECNCZCZrkyM/C/EP/iMjzTC+KVYe+t95ky70EFfN
+aS6qRTfav9y4Ct7m2eYxyZ2JVhEeMoE1Y/ZfPG1WWcD+olSxrUbiTMxVb8RdlvPz
+K4tWLRj+UECpIoIYpMN0QoObr8iX8VnVrMmgg2+WeGI45q3hwrtqdfboe8FkRswZ
+bOaIVeX9ZaH8f4z+VLkQRE3JorgS978osYv7SoJDUoDn0mWOTLJ491iJO3QLa0BZ
+47ZThNFxWkOtGEDXTp/YXMABvt/QyNUMWnc27Gel56MJp9okB3V2NfoiYhAqaOsL
+UtSS64ttSlRJ1qfyFPu8vnJt35KurJB1B8KpQv7YhGRT3LeX0vuHbRT6+0qu/hwI
+ljcbBmgVAiJiTevIRT1NiY1JtLfWgj793buxHM23wis2QTs/lPfbm8ecvGta972Z
+b9INxTzQ7Fn3EIpCcyaWhOvVrvt9ArrJbRhQxoKIkQy/tSi0vMzwk9px3VtiDcww
+i5ckr/A74GgC+rVf4N7sSGf3YPAaGkFlJWGIvRAtZ+JZ1iKJFHULIL5GAYhvLX6r
++YHQIH1InNbv+MNMvcFWfQkHo07TRvSTMmB0zRH75LxMooLe186VifIYRM/oNtjH
+GK2WPv8eBBYOQRV5nNXL0oNU5ZRfVAbHbzTJyqa3Je6ZDyIusDDzxuRwA6oC2vG3
+kiRvfgN4jr2xk6mNGLODiQIiBBABAgAMBQI/cU0eBQMAgTMAAAoJEIoML/M6I414
+R/UQAKZS08kPvzW+ktIzm8Os2wMmmYqj27Bn6n14/Y0B39+7dSt4+KM5+4S8l6T7
+up5nMcDCCAcCOkVCUz4pX/plQ5KuCYA4qkruzDz8d3fdJgelvrWFKPithvaDvZlL
+2J67sLETfIBYCe7VXPIm73S0xPCDe98OfzORh1oNenawvtUFvTKZYsRfpQmOmRG9
+rGOMtWzl4ejFIH3pVQpeiory9CW2U3DsWor4ZI+3iybj1Scuu3FxinHlBGxhGKW1
+UUnh6KYiLOxevkmrDinve/3/PKmyeUE2n7eQ6QOznshBCglHW+emojSW3Kr1wKt+
+/YpSmxeIdmED16Pe58DCBNs3s+BF8kJtPCZqCZGfyNbzwGc6etc61xfY0KOvNBMA
+tAPrSC6uOTsYpY2QvSnbcKYNqKBdh+8umGvM0II0R2ALguy0cAkaxrivrquBqint
+yKmWjkh4lHL6fIDDiWiJPiQamSTfE+13wtpu5tvoyS71j1qdtNzObIsHRgxsoRk0
+Xn9o11NhKx7THQDfFz3Y6Rx9kYOvQqwgFgutrvUsHM1DEePSGsQH4NYqLie1KyPN
+GIARM8o8aA4Ej7MHg9WGoTlqAw582LoM5yjYAIpGIR8KDTmMUDMDJSwhI2EnbgX7
+ZdPvim0ySC0mC8qflNqH8SqXa89XSeJcgp6nRVOmqfQiljyDiQGcBBABAwAGBQI/
+S39DAAoJECvQVSqbAePALqsL/ipA7zU0Rbymv1lPD2UOgee5fxorJUAPYOlr9O5n
+KWVrVtNmGEDdIF33KBmOE6j4qdLsTJrUXjGSQ2WKROUhgBJCzZqWNSJ7Z9nmPXA5
+xas3Agmgr2KcDQYQ/UwZKInrwory6Y5c0LJsds9n6JxIjoR7aTaYjoXDzyiyviDb
+JoqNAAXpFqIvJ5oQ3jzQe5t2nJuoEUzqmRuKAJ6yDc8MGn63GAZnrN/XVPTqdVGT
+2DpMLoHax6P0b9yfTE8NA0oEko2L9bYyRHo8bJo/eanvCQM4UJlP8CFLltyAnDpo
+ksqu1eEBZFiIQArVHHfCkrwtAHECrmEf5QF0mDefb7yTUwFZ5y5xgqn2dNhGEQvn
+5g+qYboKEekjO4WGV/+AnW4qH/jv/K611x4HRhS+r1s4pKAVXQbnhFLY0xGV+FeK
+A7+5PoTsjKrYIcH7UX4G8LGMjVLYZrnRkzaGzvv2e0IZ/QZ1/BvxiQuoZTUFQNjR
+HSknmh/3yaLrgQCc23FsWdjgcohGBBARAgAGBQI54rBcAAoJEH2d7s4ry8YhmjsA
+oMUW9RxfXBSos0A6LwGd+5pXv/MRAKCYFLG2T4GSV+qfiRsXnrgDHQHD04hGBBAR
+AgAGBQI54rOZAAoJEPKlddweGoeC/+sAoL5f7JF21mReZ8VV4nhh7prm+idSAKCM
+XDWW/tBOeJDYpiEhgyGSGgJJWohGBBARAgAGBQI55v8hAAoJEEQ0VrKnu+CcckcA
+n0bINySI33ekx/9fubh24CpLOLKiAJ0YK1rjnurjCW5sCvn08YPy21vtbYhGBBAR
+AgAGBQI59jioAAoJENSvrXiRcWfcXcMAoICAQOde9cxQl8U64Eslg24KTK+pAJ9t
+CfaUCdcQhxiR/bZUpjRaUk9H14hGBBARAgAGBQI6CNeWAAoJEMKNxEgYd9TGiIAA
+oMirDh1RADAVWM1UzQX5pn0gdNTFAJ9Wn275P+nGM/NzE/L9zwZi76WGg4hGBBAR
+AgAGBQI6DAnMAAoJEAMS6MNdjNp7hoEAnjPjL8v4O9itus0TUdRlQn195AnXAJ4z
+m6OvtlZBhNCAg9pzGywG5U46bohGBBARAgAGBQI6GKxMAAoJELslbetxrfyH/r0A
+nR/b0nUl7lRLun7ZOo8fkU2c/nzuAJ9YQ4H8n9oK666Gxd3mdcmHYafFW4hGBBAR
+AgAGBQI6JJUzAAoJEAhV/hReJ6UOUp0AnimdgCRcmEw6NdKXwiM/MruyoLGyAJ9h
+i+Wm9SY/b+Crf+E7Ct2izr5l44hGBBARAgAGBQI6JeeCAAoJEBz/8ajp1waIZKIA
+nj9bfT6gMVhFE57aiO1YacrYNFq9AKCRr72sk5jlvXWeh0ozetAri762FIhGBBAR
+AgAGBQI6K0cEAAoJECdM9+maYseeupkAnifLbVudq8u60Po3B5rH4jkj7VeTAJ9B
+ALdvcFH3QsMPNi3zstiF88rcTYhGBBARAgAGBQI6N1IcAAoJEG6ULP1pTeNwmyQA
+oPvtkAnDnH+aIp3fv0uGfEpT3FyQAJwL0u/eqJO81suhPaDADkahVwrqh4hGBBAR
+AgAGBQI6R+rYAAoJEBtgNPR2t58gjQEAn0xo189rO8p7H6qs9J8JJsqJBPVwAJ4w
+NhL6xjOciTjSdSVPfX6Dcu3C3IhGBBARAgAGBQI6VYiNAAoJEFaYkXshRaolSKQA
+nAynoaYFVvVfD+k1lMkPq4nT1T/PAJsGdVrp7QYXUd5MaS1hjfH/wEji84hGBBAR
+AgAGBQI6eFk9AAoJEG/2vJcCFjKGD4MAoK2neQwpeaThU6LM1jBtIlBTKQ8gAJ0e
+cbyEpPZgXwQRx4EUulWvK6xHiohGBBARAgAGBQI6hc+BAAoJEJ853fBeKcbCalcA
+n3ogb9+jPhGUGJjKB2XegKgePH9TAKC2Lli6xVbQe30SRKws26QC8PnmvYhGBBAR
+AgAGBQI6jS5fAAoJEGIEVKJ5Fu5nBPYAnj/8r3k9TzuK/JuIHJu06/61K6t/AJ99
+3rxumjiqbbj/dju/YipMUrngCIhGBBARAgAGBQI6nDT7AAoJEBUjaPzZBkwIgj8A
+nRp1lSjaloBXq/5swZmL7hy+TiXlAJ4qL5JGcsoUmij1ngg9vMFkSFwYeIhGBBAR
+AgAGBQI6pEiuAAoJECQDiafuTpyZ2rAAn2If/DH3iNvuqwZ7J+3YwCKkFVZgAJ0V
+/7WpYpFcawWxv/rAZmMhU81R5ohGBBARAgAGBQI6pYc7AAoJEPGffNTDGmB2GDwA
+nicqxgtqmDme6twd9DY5cUsvN37FAJ40nGio+42zjDMDtp4gOGU2nTHxfohGBBAR
+AgAGBQI6qnIvAAoJEC27dr+t1MkzYvoAn3KF0mCWkDVM8Fw1uE/W/1wl8LKvAJ9r
+CldbFWkfdCcyjclGycUWL/GW1YhGBBARAgAGBQI6wmlRAAoJEEFe8BGJGukbpeoA
+n0EfQclzQPYItq09Uaav5ROv4UFtAJ91g5G5Dt7eLcPHyFzGz4LWGE69YohGBBAR
+AgAGBQI6xnWvAAoJEOo/YuNyt+xvGWAAoLKijh3Dh/5R2VcPp2Ocpujxn/5HAKDO
+zlEqaM2MPYOEZ+UIbhaLrYEUY4hGBBARAgAGBQI63xpfAAoJEAWyDkpQEKwBmL0A
+n1x2j1NwzQm1jn8FeYIArOTHq9DyAKCD85+dlI1lsu9wH8cNJMImOu/IMYhGBBAR
+AgAGBQI66kliAAoJECQOWLWWm1jHJAIAnR/G/NurrSoFKH4dEASjHwmYQxonAJ9B
+wbrWBFXT3MYqJ6uRYRhSQwp9n4hFBBARAgAGBQI66+HhAAoJEI/At40JszEGgoUA
+lRm27Uiaq+FkkIn87Ua4aqimGhgAniIOeb6fSWBqSYQFUgrOrCsNBqsUiEYEEBEC
+AAYFAjr9C3UACgkQkWipGa983KTD5ACfdMcQGf+Yp8oNb0yCEzSprGJ0rVYAn205
+Q1FvYUeKm6gBTVtuQHCk9YhyiEYEEBECAAYFAjr9C5sACgkQx+D2lKJNi063twCf
+Vnv5L8U0r2VsB/yhf6tfwLmQLWgAni2Hg0nA83baW4Z7iyHLcHMxIJMZiEYEEBEC
+AAYFAjssZKcACgkQ/v9WCvitjrniDgCgpuWIBpbKrX6tyjuAVq86e/Iw0tUAoKMT
+I4Q2SPiep095uQ2DJjft3m/1iEYEEBECAAYFAjsvIUIACgkQt+9CfNoR4PEYgQCf
+Z/oMdVITUrQFOJV1Cf0wFWLIxd0An059Qz+rjcZXTSU5Flo6T+Fn/3yUiEYEEBEC
+AAYFAjsyNQEACgkQMSTUCNBS1+JdcACcDqAOcKgYsXKixr3jk3XDqN7cH2kAni+q
+QOywl00VZGy3/1xY5gXNFa56iEYEEBECAAYFAjtBNqsACgkQlPjcB9PRp5R16wCd
+Fb90m5OvimZ1eh8EPfLn/oKFK18AoKr3DXHCBSSZHj39CfmtBKokVn82iEYEEBEC
+AAYFAjtP56EACgkQXkUCMnOIgUCbawCdHSx8ePLBbajbUe0jxz7Kt6e7YCMAoJtc
+2WTy4c1deW0tGhCkmp1ftALeiEYEEBECAAYFAjtZGeIACgkQcAIrUZErEO8CnwCf
+Q4l0nnuFyoF3kPl23zOlNb8+bwoAoPJ9/hAlCrIPmqZeIopoocZ712/qiEYEEBEC
+AAYFAjted4YACgkQkSDiUIMAZoqkSwCfWENqkbLpiw7lgZ8pPrTKliXW+pEAn3CC
+zBHmZYXb2QleXYQcsMcPxCYIiEYEEBECAAYFAjtfRNoACgkQg2i7WWb7wYwafQCe
+N2wve9kwsGyotATbKoLPr3L1A9cAn3T98Ty4Urlgv2QLtP/eIz/J/TgUiEYEEBEC
+AAYFAjtfVeEACgkQpIg59Q01vtZ6uwCeOZDyEeen0rbM1ITRY5gVHbhrbjEAoLOM
+i9xzPc9Acc1nDm34w0vPHTSmiEYEEBECAAYFAjtfmGYACgkQIf3VFb+4gKPrtQCf
+VwKm62WsWj+Q4RSioRTGKDWiitIAoIQFNbBgm9oclsnNslYY661LdmwRiEYEEBEC
+AAYFAjtgAfQACgkQkmD5p7UxHJe1LgCfc4ul1ab0SnIzaR7DirBYK29H9GUAnizn
+J9RfeM4nS3TMjGxaZCIjbIoYiEYEEBECAAYFAjtgdcAACgkQ/QMmLlEgvt0sbwCf
+XLFd7in8Xp7n1G/Jw69HL20RcTwAn3e7CaIOnTnWqaGYXFwQKsW3K/xoiEYEEBEC
+AAYFAjtkmUMACgkQOZUYFjSWmolN0gCg2ySAu58meE8CepGXZwVX2CjfiQYAoMV7
+vPKDNOEV0bJONzdxbJHa2YDbiEYEEBECAAYFAjtkyl8ACgkQg5pjs0vy4heicQCf
+c4+tARJdQVoXzmM5A6bFDqY1dSsAoJmnWN8Rh7Kxd2rb0mrACoktWvfZiEYEEBEC
+AAYFAjtm288ACgkQAvuU4IzqIz01LgCgk1oy9oywJcPNmEsMNtqk2qPj1acAnicx
+1FOMIsro2RpJVj6l478RuaO2iEYEEBECAAYFAjtoGhwACgkQ8L+clySSyY3WoACe
+OzSxhNUy0zcuMDkvkx2BEO3dwZ4An03w5OAJ+CNRIlHMo8Ulpvr/gs4wiEYEEBEC
+AAYFAjtw8MUACgkQ7WTxbyAOsazMBQCfYVkbElRfTpW/6q2KidiRpnb/MpAAn2q9
+P0g8VKGn45RN+zlRLgxGbB8XiEYEEBECAAYFAjt4B4AACgkQIvjvEYYapvGd5QCf
+W5BoT2Zn3qtaopgQS0R3IV+y84cAnj//Ir1BZGAbX5dnhUNE+jGQNwqwiEYEEBEC
+AAYFAjt4CCcACgkQB2XEhsnp/bnTtgCg5kLJwZ/HURcwmfKXRL/kw+weLbYAoNr7
+OKFjDaCsGnYZb4K0AJAHOJK6iEYEEBECAAYFAjuTOx8ACgkQzMBjFhovlE60uwCg
+16P3nn13Bo3ah9w3f1kEXkMffN0AoJE+g5G671AEM3k3JrM5n6QhoyJ6iEYEEBEC
+AAYFAjuU1C4ACgkQ9OZqfMIN8nOQLACghjVGvQiIP7UzSgoypQBircgu6WUAoKYV
+ehDAT7GLL9USZ0932SbTMSrciEYEEBECAAYFAjuYNSgACgkQkC29kYw4qQow9ACe
+JQZEIdnXBDl8o7KObj4j3y85ClUAniBd7MTI3hYZWAzerAWLowuhWoHWiEYEEBEC
+AAYFAjudpx4ACgkQeu61KqChAjBhngCfXJtEmsKYapxlcFjKlLdSE/0fFzEAn0mK
+ByJcvv4U98EsnZ6XgWH1ouDZiEYEEBECAAYFAjuv+0UACgkQr+l9yO+T5cqNjQCg
+ti/CWMJTWoE5kXtUCPd28IulShEAoJRchXN6yO9cwtF7vKbRKPyFr8dziEYEEBEC
+AAYFAjuyl7wACgkQVtINKT0Hg4TTBACgk7kIdp0QdG03oXXru8Mr6iqfrtkAoJFP
+ucZLjshOHZpPs6Y2bo1v3uu7iEYEEBECAAYFAju8j/QACgkQLYywqksgYBp/3QCd
+HPEFQoGHddZntU8KpRCxwbTI0a8AoILBb24XzJmEcFFQ8ZcdjkGssWrriEYEEBEC
+AAYFAju+2iUACgkQptOr2ZzTDT2PsgCgrSaQTPZzsrk3OlOnBwvgCBTjPO0An0lI
+J329aJehBnN+sbWPA1SeW9F3iEYEEBECAAYFAjvPTPQACgkQUk1dcheBzp4XDQCf
+bNYb6nwGdcp9C1CC/i7Ag4VgUG0AnjhlNMn6rHmRyuKxhyLaIIvCVRdbiEYEEBEC
+AAYFAjvW3JcACgkQyWyxmULvU0M/GACgn+jUI9tY6yhbbOj3Zvhvb2qJ3lcAoJLv
+8T4b2Fri1DLUw7NFpFBHN/NgiEYEEBECAAYFAjvZYsIACgkQCHEDMp0gQw0mowCg
+juSnV1U2uyYJkzaNM/JdPBjtyDwAniU+yHBhx3Pesvv2j2ZcIqOdWAZZiEYEEBEC
+AAYFAjvZiYUACgkQtqtGgZIk3wH/GACgxPHzVTPg8PpD7+VmxmjcgQWet94An3S/
+qakpI1EaQg5IZ1PoxammSGVqiEYEEBECAAYFAjvalLAACgkQ89a1hWqaGIhHjwCd
+Hf7kULY5i5UciZDEImzPVCLvLAUAn2v3BPprMxZ2V8B3dEjntKlsx6OxiEYEEBEC
+AAYFAjve3pEACgkQh6i9dqYzhRq0+QCgiesdd7DHo1lmrJoc2Hmyvp9UHKcAn2el
+ADZiv2TL/fJfYNVLkY1dCuBFiEYEEBECAAYFAjvnlkYACgkQpO2E8SaBoMGGcwCd
+HGMnGIcnaPvxTI670LvPvYfV4JMAoOSrI5B0clSF+fFDLERghHiaD1XiiEYEEBEC
+AAYFAjvseYwACgkQL1tKMpmbH0yA2wCgh3E0zxSOq8tu9Vo2RuHwGnvUEpIAoM5n
+sHAzyaubH9cPpg6KlJ7TjFYPiEYEEBECAAYFAjv9aRcACgkQdLDg7hQ9KqOMhgCg
+4bpcgwpTuD8JV2wa8XNRibQJWhgAn0zrC9KAj8MWX4HB369BIhNf3AYAiEYEEBEC
+AAYFAjv+bKQACgkQ49d+H5UWGZEl3gCfb5pl6mL3xwQFq0EHUsMNuEq/a+sAoJuo
+kALmeWO5tzapyPMjjRFttar7iEYEEBECAAYFAjwD3kIACgkQUL1+FvMooiW+AQCd
+HX1NIkOL+6/UI7Xzutm094LCStcAnAyxY6BYFdDEp++1/C0iWd7C5kTyiEYEEBEC
+AAYFAjwV9FEACgkQ85xjo/gqveK5BACdGvwWCw+5Co0eRQ7uIQvir0IenfYAoO6i
+Ylwg5pFYvjcN2eMWpRljbQn7iEYEEBECAAYFAjwswRcACgkQ1sDu3biMcKUBaACf
+fsA6qXCB+ZhnNPqNwyYPPQMRQD0An0phCZLMSHibIXBfvi5XKQFdhojTiEYEEBEC
+AAYFAjw1o8kACgkQfQkeAEIcUTRHJwCfX1vsANX6TpAXR+yIkHUZ1/NhS8AAoMcw
+l05v6UM00wGg6L1YY+u91N93iEYEEBECAAYFAjxAvUsACgkQozRwEVjsIl5E+wCf
+V0dc65O3kg2ZbpqnSQjYq8D72v8AnjcNUWBEa/4fqq75pgVkXHG1/o5IiEYEEBEC
+AAYFAjxAvhsACgkQozRwEVjsIl4cwgCeMhI14FB4B32nBwe3YT7ZuyJIO0MAnREf
+YPBubiAcHD5GdU39Xg9EKa+RiEYEEBECAAYFAjxHw8wACgkQG5LyFGFNXOuuEwCe
+MoERlAxehkeHAqaa7l28tKz96mMAoIIxZAMRVaJkTcQeTsj0J9Pw4F09iEYEEBEC
+AAYFAjxdkoYACgkQFiDKULDTkUtQ9QCeOWvFK1oGs+/D2VuqlLS+exaK1RcAoIAX
+VOYNXMFafByJG8mcyJYWysh5iEYEEBECAAYFAjxd3SoACgkQqEj/8Co6lHib0ACc
+CuKYrQl6hasEk8+Au/EzgaIzmWQAn3svKefyh0R2rm/bYi6NMrR3pKd2iEYEEBEC
+AAYFAjxh2FMACgkQc2shPf8sJp+uxgCghDHpZ8mscniDkV7po1cI63r+yPsAniPH
+IT9/KZ0F8t47hNJ4ntZU7/jsiEYEEBECAAYFAjxmKzUACgkQtC/nHH/DrZZkdQCc
+CVjhxDj6xJ0Lv3PpT/FykN0nCbMAoKGDVNf9kyKNgx219/Qni7hJEl8QiEYEEBEC
+AAYFAjxwuDoACgkQD5EwlQadeUPC0gCgjyd8/q5acdYXtd4tkIU1AUWDoqEAn2uk
+/eLugWljBLALDWlbBPxhTLFyiEYEEBECAAYFAjyCYvkACgkQsqbE3BH1ogB85ACe
+OrYUHl+naIupoaMc+zDA7r1JSYQAniCgY0fwn6oYGlu1C1V7Qb5hYjAciEYEEBEC
+AAYFAjyFTDIACgkQtV7owmc0engENACfT0n6xeFvRbhjKtODwARL+yX2/cAAn2hO
+ViKUAOW2iJnK2khvrTjpCi3biEYEEBECAAYFAjzJh+8ACgkQqpTUbs1p1cZApQCe
+NHHUBpgwhwlLGGB+J/HXpZ7CdrEAn0t/Rh6No7fvVu85gsvgqgD4NSZEiEYEEBEC
+AAYFAjzmcp8ACgkQKwZcgs55jUP1IQCgw9+xaWrHsGJ6vHlxZVYjF1NQKP0AoNbb
+4egx0qgtFbI7CgtRmIlQ/JXIiEYEEBECAAYFAjzyiVEACgkQeElPvVIamnRekwCf
+XFXO0yrvf54LveXjwhVrOoB12sQAn3E+Xol4X4ndBqmByaVJICAuHNA8iEYEEBEC
+AAYFAjz4tw4ACgkQIbyDR5y81feMrgCfTVqDcJ0XJwDprEcMVl2sQyJuLsAAn0ZI
+U+y8P23tCB1ge8fKf9/XIuPkiEYEEBECAAYFAj08QOgACgkQwqyhDwc+JHEL4ACf
+dBRQNrKGuzqU+JdEAz9qf1Bh8A0AoOOq18psEdqW5EdQvFYw0Jv9vle6iEYEEBEC
+AAYFAj0/3tUACgkQT0WsQz/0l0wS7QCfdW2MsCgR2ERyhL2A2x8REdvhn5cAnRj+
+Vqx6hKd900Eepb7sDxyS6psJiEYEEBECAAYFAj1NG6sACgkQQPN8cJTNiPoBmgCg
+sBef4t12dS9b3/mdXgFFJBYGH/AAnjQRHTNznlywGwXtepyKObQED8AYiEYEEBEC
+AAYFAj1ao08ACgkQ6cgU7J/95JxAcQCfby8yGGAJhY4pvSoM4939bpGCRtYAmgIR
+KO6khpB0MmihrEI6dziFH1eaiEYEEBECAAYFAj1pWxQACgkQuQMWIGtm8TT5CACe
+M/uLzjGEjn/n9W8Kh/qWJ4yb1nkAniSg11Aqw09L6zPVr+y4VrgghuOOiEYEEBEC
+AAYFAj1q0SsACgkQbfU6uV4fG87njACfZ0DhJ1UGX/1f5btQOuS+H6Q1VtgAoPBU
+7aPVnxldPZ/h5o4XWpz2yXT7iEYEEBECAAYFAj1sncAACgkQ9oX72eAN1lSp+QCg
+ohiysP20WcFV9bdIfqyVTu3v2iEAnjKdkyN7jwI08a2eOsUMimprAriJiEYEEBEC
+AAYFAj13PMIACgkQpVM9FaYhUOCUIACfer5wu4GvyiroptGjN8HLxcjmiNsAn3TE
+k5bTWPLWGfX/Kp5/pBcBPDdeiEYEEBECAAYFAj2KaZIACgkQ82uuK8DpNCAFhACc
+Cyz1T3Ht9l/qBdT9cJL8SR1rh5YAn1M3F5VGOmOdgnSjIfEwk6LkzNGliEYEEBEC
+AAYFAj2OlIkACgkQAFDl+qFk/Q1bAQCgh4xvjC5FVCeWSj5laYww5wPlq+gAnAvV
+qa883DlLZ0Hi3U7135MQJ3F3iEYEEBECAAYFAj2TNYUACgkQEY3ZoL5uJ3jWNgCf
+ekC5x/q5o4AXDb6hoLRWxhJ2HfoAn1R4WMOd+NevTiJhz+J0edsREKsniEYEEBEC
+AAYFAj2bBz8ACgkQg3DPM9bSYMqodQCfW0Q1YXoUqPtI+PbavPb4fex0IzcAnjmP
+v52QgFiw2lN7S9gxN7EoglxWiEYEEBECAAYFAj2kWc8ACgkQdjdlQoHP513PBwCf
+XkavLzc9/Z44QNNXMBdZKauA8R4An1t4+0jZk2tdlbdnoWmm7t8XaQhJiEYEEBEC
+AAYFAj3RaWoACgkQKGrpCq1I6FQ5IgCgzRDq74P0pOz0rEVzI/A90tV+iTgAnjpM
+n/OkfO5UUfo7aEZa/rhU2RKHiEYEEBECAAYFAj3kU5EACgkQbgiwzIBQRqPsBQCg
+yNkezkyKRM02yXjqb9IMhd2vrt0AnA0P0NuRju5EnsTok+r+pRs9m1ULiEYEEBEC
+AAYFAj3lRQQACgkQKC22VTgH49RseQCfZmNMa/B5JtezgeQOT16FZZaAc1kAnA1V
+n1Zqy7DEc0sXGRlFEV2ztBzHiEYEEBECAAYFAj3tX2AACgkQuxW2ExZWiX0tdACd
+F7Yyzi29Z9mgo5LD+9IFYQyI164AoKAVzz108TKaRb3TzmtEXVqxYFWSiEYEEBEC
+AAYFAj3uEocACgkQugMkHg/A9eFgBACfbFp1ZN73iUt6z3CGJAbLvjxec50An1kS
+BcZFpjAJfcVyGzVPgdqdeM8miEYEEBECAAYFAj4IEdQACgkQRdel9hlgaga2kgCf
+fzTE3rsEinxwU9sbdpooeBdwHdYAnRH5UeIpRmGVto/0US1GNveCgWrbiEYEEBEC
+AAYFAj6P33QACgkQPuR8c4jhFKIqHQCfa824PR4J6nUzzoPjRwzld4Uqm38AnR3g
+ZRgQIQ8ZsuNvl5CU0QZRD8SaiEYEEBECAAYFAj6flagACgkQleiQhuQqcGa/lACg
+v74MJlE15Q8gdOo7x8bbQzjNpbAAn2vm5HlZ1ZYI7g6npEXT6aUN1kONiEYEEBEC
+AAYFAj6+HXYACgkQhLklxa0MWdeZXQCgyW0rbFKbgTQwnsmhTJisErmL3QgAoLq4
+cm424l/PyjmS4QHr+iDRU4HliEYEEBECAAYFAj74p0MACgkQ+y7y9FbF3ZBtzQCg
+yJyuKOhsX6pbM4xlPGP0sFxhXaMAnidrXD2ILoRGZ+S7KVcV0ooX3EDMiEYEEBEC
+AAYFAj8WbKcACgkQbwTDRMQPodxIjwCgiS+3tUZ9qblX5mNBD0HDk51T6CwAn1X+
+8PLIeq47bMR/eEYCwOqX3x//iEYEEBECAAYFAj8ahEYACgkQk+Wzm/ozm+lNLQCf
+WBpY/6Dji00kZl55COSTcBzkW4gAnRvhtc5dDtEPreLjaCcc9OgXIsJviEYEEBEC
+AAYFAj8lL80ACgkQcAaCB+JDIFeQMQCgthZ4PMW56TIxHuQ1hB+6OHTNCoMAn3QU
+kf6MjBFWaSCa8ZLuZKs3E4VgiEYEEBECAAYFAj9HQVMACgkQ+y7y9FbF3ZAlvgCf
+a1rzmXPjVpBLaW8gJmUZ+KE+1PYAoMDHWOsNGlzPi0ecZ5jFbwKp0AYGiEYEEBEC
+AAYFAj9Lf2AACgkQo+qxryDitlB4vACgxVKNHLTjr/W4ha3dTNycCKiW7eYAoLqk
+/A5deva1k461yBUwWag17pe3iEYEEBECAAYFAj9WPwEACgkQoYpWGTfE7kDq8wCg
+uKCDLTHj0QQmSJ5Ruovy6iC1OXcAoJsKqjbiVP8NE6cVToPDAeTRLU8FiEYEEBEC
+AAYFAj9n51YACgkQnmS9sI6ifC0qNwCfcGtwnrHDHYF8cXCD6DSomCmOb6oAn3lY
+qMvXziu6CakHAtn/5xJt/QNwiEYEEBECAAYFAj+QijMACgkQMC+fdwHoOyV6zgCg
+xprelBeZyK38dQQo0D1i31GR0X0AoLdIt790FQBRL7Tz9wR9Hrk7kmZ9iEYEEBEC
+AAYFAj/P5qQACgkQXfUwmzIVCLFbwACfVsTYrkA0nD8vhu/6F4BkreYz3gQAnR7C
+aK3kpC7jZ2iOL+nJJT+ml69diEYEEBECAAYFAj/kAecACgkQk+9jXsWyW9MtLACf
+VIhj+ColUSAo+0SQL+dXy7/QPyYAmwT/Ch8921Ye5yKAqj7/22cNOcaniEYEEBEC
+AAYFAkAGUHEACgkQEwhmFo32INeKWwCfS8qn0L6h8DhbxhhYOTIG/YGwnagAoIZS
+ZlUmnmPYXnrrEY4wLyu4JZCXiEYEEBECAAYFAkAIGikACgkQUriM5KOnlzYF5ACg
+gJfQq09wCFvo5g1wVrWOdfyYuLEAoIIn/028tMIr3rQIIWTCMLDI7SCLiEYEEBEC
+AAYFAkA2hL4ACgkQ5s/mFOYu21UeqACfQ/6TWE6WCCr2QqgODq3hQTROjVwAnRGv
+THvJ/Yyd/r9sx9EP6TOZFP6RiEYEEBECAAYFAkA4xJQACgkQlcGs6wo7juVYIQCf
+Y8ksmBdP7W64dtCwbtou4Pb4uXEAnAt3xICVbkjb2rFIBvZ/Cz90eBCBiEwEEBEC
+AAwFAjveqcMFAwBTDoAACgkQ4zynCI5ifqT7SwCgzv0vNC6h4ws/TW2cxCZzyQGk
+3rEAnj2OXIhBFdYWDLUzoUuRMNrplnb6iEYEERECAAYFAj1PiAQACgkQ06HFHc1N
+8gWcXwCcDQPaHDqpU5JKynKLtFMz5uJiniYAn06g4xAgrIU6vKR0hNXOvSShTxpk
+iEYEERECAAYFAkA5mL8ACgkQbJOOcQCjKmH9VwCfd9/Fx8VZyz37nNuYrSSeak12
+O64AoNCBa+8kFmOmT1s7Wl1D9M4Wg3MeiQEcBBIBAQAGBQI+SLurAAoJEMQAnns5
+HcHpIFIH/3aTAcVgZvCwDkxqqDlKm3P9wIIjMCaVnpBnWZ0RIVUq9d16tWTiO8YQ
+dNs5BdfOTwcPN6Qf8OT8s1zWO+TiLuoWvMRgJDQMY9j6UD7M5CsnwwWQRB1xm0RB
+c84b+fmHY5tBjJyQNeRD9WKuTWYSHLqmCzMqTHseejR+Anvl4zw+U7fccXMfg2UE
+9V1UIRYgehODk8NMB91xNJaVHVNhm0jV2Adt44O3Gjpd1hpiEQuL0vEHqD2Tf6al
+Yz4Jo8KPEUmPuEPv9A/nxJqxvC26Gta6TwlGKo0uicjbqdFeUtWZBFRqIKUO0MkU
+fczAQrWoYkBmFph2JhRXzoGfJWZZd82JARwEEgECAAYFAj/NruAACgkQMO+ERHE1
+42Y4VQgAkmboHTcXUulB/GWM+M5dji63jT1yczL7vrPrEKmzTVz949EkzhfKcQW7
+64xcL8mxbWnmCdzP+udYmDM7LfvkItBguO62DD7S3FSLszW+uJ4Ezc7aPkH4wQhK
+5kx+S+2b7YR4LJHYQi66v8T45GKZttBCPPj0aLpQRDx8lfWVO1TD4s7AGI0FA7DX
+uTmmYhx8sX5jMHB4gkBMeqzCXhGv7q71RDeeVpb8ZL0DceMv1s6FUXIRHZ+uEgIL
+MXoIbGxmIDMWzYyhVnD2pJrT8zhYMBuDmTyQIvaxzJwl9vcLwiO4huXSxTsFESqN
+yksK/JCzIVyUwBNH6aNgMNAe9oudrYhGBBIRAgAGBQI9Sb0MAAoJENX0/2PBGjh6
+qCUAn3VNcel2GP1grva6MZPKRsU6RpxrAJ9jFzuwyw8Doxv/rZ6Vq9V2WshXBohG
+BBIRAgAGBQI9c/XcAAoJEEmSwrX1c3K8qdIAnilCrQ7tQDRXVqhvHPQ02h6GycNJ
+AJ4xfSQh1+EFSy441C3pTn4AR3QNv4hGBBIRAgAGBQI975GZAAoJENy+GP+gNVO8
+2OgAoMGoOfIkIXl8mmtuVJhYmGbI+oXDAJ0URPO1ywr5YMkv6zlu/Sj60IS+VohG
+BBIRAgAGBQI+R9koAAoJEO3RUpKXBcNb60AAn3dO2lX9QoQ7Q6URnLusCGbZvEHa
+AJ9EnAQjxaThspM//tRwG+jUTTFxkIhGBBIRAgAGBQI+jq56AAoJEMXAxcchjRjX
+jkAAoMUvnYF8kXtcbcJscVKUqCGTgI71AKDtu2jmwFxHFvnbmzqkxDpCdtk1W4hG
+BBIRAgAGBQI+mKOkAAoJEI5cpMLbUON8nGUAnjhiNww9RCCujz6mi+hrR8YIfGKN
+AJ0eHCtAWvHilG0ICWNuKV1NAnNP+ohGBBIRAgAGBQI+7v1CAAoJEIBOmxXE8Pnw
+Y34AoJmsn0/o468Vf3Rq+SK5wKY20MJwAJ0cb+vrGnfFiWHMoxbKQvwKLe7jNIhG
+BBIRAgAGBQI/iY9FAAoJEOTlTRGaDNqZJVQAn1cu7t+cSWyHB/RTmQ8Bn5Gxef1P
+AKCwIjKzG+QAtroqRGG+9fc+TJjbEYhGBBIRAgAGBQI/se/1AAoJEL0i+r1xJN0k
+NnEAni7HP9tFNqzCrElT+cFZcgJwK4UXAJ9rs/N8qA+nGu3qS8nRdaFlye76tohG
+BBIRAgAGBQJAAuKQAAoJEFU3ABLBsEnH2tcAoMNDajZzn8Jr5m/NDxnPmCr4SFnq
+AJ9HT7hREpqF/XsXiHjw+hGKbuhqx4hGBBIRAgAGBQJABBKQAAoJEMZfhluOkZid
+Y9kAniEcIGhvP3o7iLLq9RltOjJCybwqAJ0VkRHrBYOEDYT3khxS1r2KMV45yYhG
+BBIRAgAGBQJALq5HAAoJEPxo4Q6sdjs1Pv8An0uWMGg2tsWlV9XASJjlWIITXozo
+AJ99brwgZeHhruXPE/Ex32TfzzfNj4hGBBMRAgAGBQI9L8t1AAoJEIvYLm8wuUtc
+KfcAnjRp07TXOzsr4klmVldF5AqxS52dAJkBu51LQ4vhudxpXlh8k3D3n2fG5IhG
+BBMRAgAGBQI9v+PJAAoJEC8hGeLPvmTAfP0AoKVCo5/+NO4tiGQiehYwlnnWD9f0
+AJ9hUhK+12EzvdZSTK9mQXbA3rxVYYhGBBMRAgAGBQI+CuilAAoJEC2r55+p3AAl
+VlsAn0hY/FwjCg6XWqaLapefMSm+cuCjAKDAVyWXX6QkqA9UlrVV80vxU4h0V4hG
+BBMRAgAGBQI+Twp8AAoJEG31OrleHxvOdW8AoJTmHT0pQE+ynOkjhwYlgN3kDscJ
+AKDotNUQGSfzO7tb51FogUL52y63Y4hGBBMRAgAGBQI+VLQYAAoJENkpKCV+qUXf
+JKMAn3pZHYlymfuy5unJjkT9PqmFw+LoAJwNCcGwACj0WyFvCQmek/lNUh++AIhG
+BBMRAgAGBQI+8JBVAAoJEDSzBkBHuNNZRW4AnRTER+6orBGqcxjR0sprQ73nscFA
+AKDFBjzKFNyI27mXR2FdEpn4+f+WsIhGBBMRAgAGBQI/sC4kAAoJEGDNOu240Kti
+OzAAnRIJtk3X36JDQ1OeXn9RRJAuGE03AJ9WKOp+z/TQZbkGxr23XaogY8yKkYhV
+BBMRAgAVBQI54qw5AwsKAwMVAwIDFgIBAheAAAoJEMhroGpRfQ8ODDQAniYkE8gp
+kMzxqLtnJf0cjl4+/ZGGAJwLE+sbe9oafzxYssGDPbwbA1b/Z4hdBBMRAgAVBQI5
+4qw5AwsKAwMVAwIDFgIBAheAABIJEMhroGpRfQ8OB2VHUEcAAQEMNACeJiQTyCmQ
+zPGou2cl/RyOXj79kYYAnAsT6xt72hp/PFiywYM9vBsDVv9niEYEMBECAAYFAj4c
+ihcACgkQuxW2ExZWiX3ntACg5XYuB9EX4qysEsAAFMMMTxLenKoAni8jbGdhoGXH
+3ZTWJDje0nvE4wX1iEkEMBECAAkFAjprQR0CHSAACgkQyY+3gBPeB1mHbQCeOU4B
+ZrdZ9ahvkMm9J4igPb5nYaAAn3U9ib5GD/acPVG5r0CEJKGeKHx3iFsEMBECABsF
+Aj5PBuwUHQByZXBsYWNpbmcgMHgxMCBzaWcACgkQbfU6uV4fG860twCg2Q5uGDwD
+8Gch8RP6+eLdyvB0uhIAoLPbsGc60Znw7WhKhzzKi0y/wIvCiIwEMBECAEwFAjyR
+8tBFHSBTb3JyeSwgSSBzaG91bGQgbmV2ZXIgaGF2ZSBzaWduZWQgdGhpcyBrZXks
+IEkgZG9udCBrbm93IHRoZW0gYXQgYWxsAAoJEMlssZlC71NDWRYAnR/iMZ2VQex9
+2cIa7bjonfLtjGfCAJ97qpnjK2BWlmx78rVcmch4vLwYo4hGBBMRAgAGBQJAikAS
+AAoJENnlgkXLzYjFuD4Ani2iDbJ0ywckhKQ5cLz0VJh4k9UoAJ49LJ0ukY4M6dpE
+ybEaRO4mTgbWGohGBBMRAgAGBQJAdieMAAoJENrArTcPEkCiOZAAniY9O8rGOUng
+Gz6urxBaA9Be6x+CAKCanpBpmZ+KfQvt9P9yx/d1WpGx1ohJBBIRAgAJBQI/1S9c
+AgcAAAoJEBX+akWWCq7yAlcAnRlMy6IPn/eYrcF86sdtgnhrtZwCAJ9lEUtbgfNh
+F2aLKWFSpVFz5J+02IhGBBIRAgAGBQI/zon2AAoJEMps9rQLyK359FgAmwQUR8aa
+U/Ay93OKpVLe9n971EvhAJ9kzDVzIiARqiD6W1a9hHMH1FGzC4hGBBARAgAGBQJA
+chjAAAoJELcDJlbQA7v76E4AoMPYhEW+VHw23yteFnie7O2h86RdAKDxK1shqL+K
+zD3XAZQ8HqfHpbHfv4hGBBARAgAGBQJAbtiaAAoJEAsA24E9Ijhb1xIAoP7nXMRd
+XxkoGZZF+wdKgiA/mvG6AJ4htu9FBeu7gqNZQkekmex+vRxueIhGBBARAgAGBQJA
+bUrGAAoJEJgPCexN5Y9gkl0AoJzX3Kzk3Uq3+tYuGLD94GfdBeC/AJ9xAfFLmzgV
+kml6dDHiFIuBc5ryr4hGBBARAgAGBQJAYu8WAAoJELOn5StmJDKa9GUAn2oXTzZ/
+zR9/GGOeEFvIw4qpwmMDAJ9XSR5tq5ka60sOvKTwjLpG9Ps+EYhGBBARAgAGBQJA
+VAUnAAoJEFJTyEmOou8meJIAnj4/pPH+Fm5bxEjf92zUe7NsujdwAJ9r7zdcWEkk
+1u3nL46ptVYOk8DuP4hGBBARAgAGBQJAMzlgAAoJEOnWfireQXIWn6MAoLbBNi8a
+0mLEximjL3jLyY1JvMJ7AJ0UxcVJJiVtaYJZT8OBUaKVix5hBohGBBARAgAGBQI7
+l3F9AAoJEMj6RZFuNvzLgXcAn27vbmJCUmt6+syLthzd0bF3OEf7AKCvg7BV3EBd
+95Q7ysfc+N9HpF67AIhGBBIRAgAGBQI/xdCGAAoJEJpv8FQpnhtsT5cAnjVrookk
+QXkbGC2WJ4rxKTpkBNelAJ9m6RGagvqpv5bA8p+9ycQ5Cy2O2ohGBBIRAgAGBQJA
+AU0DAAoJELk4CjHmlh2NipcAoIGgzK6bLXXln6kAIMwEwzB8D+KKAJ49lsgzEd7K
+ju5TG6grl6eV/6h1mohGBBARAgAGBQJAoBWHAAoJEANxTXifOqmaqDsAoIOlRezJ
+fUEuz+2gniQgumhHPotYAKCOPXnTy22eXsQVEM91Rka4ctt0XYhGBBARAgAGBQJA
+mPcYAAoJEHGcAqvJmvMf3ncAn1bPQRhysYFCvu3Uj4/Q48pt2IHVAKDIo9GPDrV9
+VMN/WBfX84t8h3pdwYicBBABAgAGBQJAqxz8AAoJEMPCvFg7oIwNJC8D/i+rxZN6
+xy3jFE7g0Ef9dHXk9L0kbHzDMs34wRL+3B5bdgWKR3PmTUiV217mrd2GjjJAomzk
+kN2Pve2PkvBQacg1166WCnb13aqP+kId+1Zvyg8JH5oDLAD1askROVQZ6fvd8Hv8
+lrGmGj25PvzJbkSB8WKKAKOfItjWi2yI+jb4iFUEMBECABUFAj+QUiMOHQBkaWRu
+b3R2ZXJpZnkACgkQSB6HhDKZ9oqpggCcC2yCPmd+CSLQj64vt7HGJSYJ12EAoIfP
+7Jha0WsRBAJaF4BefvulXSVsiEYEEhECAAYFAj+QT9IACgkQSB6HhDKZ9opynQCf
+bDXSOy3ubf2EGa6b6BQRKjazoY4AoKBdMad6AwY2rSph22GMLhIkkF+5iEYEExEC
+AAYFAkEJpSoACgkQenyZHmk/YxPZfQCghA3KsyAYN+1Dn18Vc3tsyj1XguMAniMn
+uly/kXQWgVKW5zyIyRtKtlxQiEYEEhECAAYFAkESGMMACgkQOcor9D1qil/LNwCf
+fOGXb9F3wy36zlgzolAUP0K2HPYAoMYRiXFqr2+IvaukQHM2b4zXfENgiEYEExEC
+AAYFAkEWIDQACgkQ+xlYQPsqm10ajgCgpaJGfN21kp2Gb9vBLH7ih66ETtQAn1Gs
+iyhbHK35dDKs1PgyxWh3tBs/iEYEEhECAAYFAkEZ+4sACgkQTDCXIWohcimbnACg
+nXjUjvgFhzRgDBp5vlRmqYxFcYoAoMXLpFHQ/89b7dolA6aAcYcldwJjiEYEEhEC
+AAYFAkEgXcoACgkQPGPKP6Cz6ItXgACgmh0cmH1g/FmWHKLpD+xCehYLwPwAoJ6G
+D0WuLZipH4cF8XaR0Xm3l3tYiEYEExECAAYFAkEjBy0ACgkQvIbA0KnrjgigFgCe
+L1XUtAiolJsc7QJgtf69jgt/lwoAni1+tB6pTRwdqNHs3/u6uK76sNEXiEYEEBEC
+AAYFAjubn40ACgkQmuxi1ygNtXsrwwCfaBtiKwpsNBnMU2eZKgQRDNmNVEUAnjVF
+XpWxgVjVzZOFNuLA1MSRb+z/iEYEEBECAAYFAkDdxNsACgkQK9KNMpH/QhEOaACe
+IJTY2Juex1XmU/LDlV0JOfQ3GcAAoMCK1HemijkfIgnda0mqM4AWOkyziEYEEBEC
+AAYFAkDj61UACgkQJbhu7aTV+SU72ACeMVy6yLWJrExtz+Pk3/iZhgnL+q8AoLSz
+sK12FtWQQnay3+dQA70Gq6gyiEYEEBECAAYFAkDk1+gACgkQ8EN4IzBGRGzTEgCf
+Zeesc9iV2ZW4iQoZJfmBZMbEEQIAniWeb4lkdZtHET7eiagGL39yadLgiEYEEBEC
+AAYFAkD70pMACgkQ2djNiH7XAVpFAQCfSh+vvOKKmeaLCK5C/zhNEnN5v1oAoNWk
+GAL8tdcm2hDA9y5gjxDbS8ZJiEYEEBECAAYFAkD70tsACgkQD2nEhndV+jKTAQCg
+jDtuBxvXrgiORnGMKyQ5rh6a3gYAn3OFOzk8Ha+zzGRs0XE/CJHiBJjgiEYEExEC
+AAYFAkAs+7QACgkQObpiqACbv5wbhgCfT4QCbJgcgW5KfNe/lr1vfcw66mEAoKxS
+Zbn/zfG9L9MT5XBoaBH/wjMMiEYEExECAAYFAkCt0lYACgkQuQxgFMZGnX537QCf
+Xjt7e7C9jW6FEkwySjCS121+ta0AoKtFxSttRsDZ/kdYGKc2W0rxgSBgiEYEEhEC
+AAYFAkCfeZ8ACgkQXtn1Qb6VBHK7GgCdGdi8XMwy2OCZqMDv+dFEF5tfIccAnjD9
+PQyEH0OnGVRGsvDVGvhyAHBbiQEcBBMBAgAGBQI/4bfiAAoJEAuerLG7SymnfykH
+/RE17RFviRCEHqFgvJ4/e6xlbi2L4/cxrUYcj8i1WIoyCIlaPj0K7vIQmMhBtXz5
+twVcu4Pcj0JQjEoufSdQt6K3s015taPI0iVmFTb/Yqs9t4M34Jr+y6N89h9gM+fv
+bYTEVBRBJDMoky2DIKrCQK7y6iEAfOBXEDMko52gB2T3xuqsJ+DAZPy7I+2dtD6u
++JzwqZPpXzkAmf/oCSURMzzJYLfjk2DxTtj3oIlnjcopMq9ktiD5owHlJzKOTX+8
+nCxgn2JpL+696UD2mkz5RlqhYbntwYy3x90NRhoPwJw47YWj1DH7s+IXmROAL5Uj
+/y5yPbIYmHEOmZ0lnnia8cyIRgQTEQIABgUCQVxx4AAKCRAr/dPXH00CzNwOAJ9F
+391aH29vX5z7j79SpjCbT4oQ9gCeM3lScSLaNFhUqK6rMUcEHxmdOQaIRgQSEQIA
+BgUCQWdzSgAKCRDKWj1eAN9UBNw8AJ9nmV839wWRfOGqsoKd2idN95+5oACgvWUJ
+TtuyoAC4zeGvkaFG/4pPGfaIRgQSEQIABgUCPgB7eAAKCRCZyJwbUBf1gn8wAJ9C
+JGM+HgxDwgUejc4GeeIVsTHZZACdEeCQo9GS4Pr56l688ZI3NVbQXtKIRgQQEQIA
+BgUCPHmB7AAKCRChQCvQv/75e4kLAKDIYBIHxkzY+gBYx33eCMzcpVpmUQCgjlTU
+I2r0uohZRpw3fFlFzJHp6V+IRgQQEQIABgUCQZXrvwAKCRDzVO+qQYDDG0iGAJ0d
+IYF5xpH6NIXXGchxOC4NYdxoNQCgl+p3tPjlV3pYj1sp8kQ8zvdEPxCIRgQQEQIA
+BgUCQZ8mHAAKCRCbtIk/plAMh+DuAJwMx7sUhKgfHgyl/1WbtgCI3lJtqACfVBUZ
+bDENYhGxUnv+zoScZNwsXTGIRgQQEQIABgUCQdaR6wAKCRCaeTVp++u8F1Q9AJ9Z
+p2xKJ+Ms5pAROhmjP9rQs7FHggCfQ/KU3Z5hRIV9jJK+2DACoxXzQ/2IRgQSEQIA
+BgUCQeKNYgAKCRDmB9YqXOwnSiDJAKCOlXcPkBr4nDg93NioihH30MLenQCgo45H
+7bHjNXOeG0WiFXDSUbTkaXKIRgQSEQIABgUCQe+yMgAKCRCNLV1loW4hQHQBAJ9/
+dEV46EOObFPf4V2e3k5MQXzevgCfdGlPX4QQ8/HqbybOdjkqipbjFrqIRgQTEQIA
+BgUCQfaeGAAKCRD1tHjGZqmlENG1AKCOA1ihd9F+7TpCEiYrJjpBNCc2JgCeJX+J
+0Ehexeje7GU2+uESKt/vFyeIRgQTEQIABgUCQFfsAgAKCRBm79vIzYL9PmGLAJ4s
+gNjXv7k8k2vOeMnODYbz7vZuAQCfW2WZdFw8kAUvKHKZihA7Cm5gBo6IRgQQEQIA
+BgUCOynWNwAKCRDnSx1i3y0I01a3AJ9oUUI0E//xY68cjlVPK86sSDKvYgCfWDba
+fFMDov4UdFHVcBa2UABEy6WIRgQREQIABgUCQdG/OgAKCRD4g3nYwLiUMP+MAJ9q
+1P44kEUC0AZjkn+v2Cv+sVLRFgCeLICM7HIvwK4B5utE3XlqDwK+wcmISQQwEQIA
+CQUCQdG/jgIdAAAKCRD4g3nYwLiUMKlsAJ9AAdgP8n1dDwBjzwvE4ICaVlrrhgCe
+LcqHoKq8RJPZ+pcklLZ9+kj3Fl+IRgQTEQIABgUCQTgEkAAKCRAczfFVIa/YfYzs
+AJ9JHrQkUo/wavwQ8hpaWTDms38CVQCff9eYaj3OFhXZPQwSxukfoFNwkbmIRgQQ
+EQIABgUCQiHngwAKCRBaveulSVOofqV/AJ4hp1foPOCKSkOdV7Z0XjQYf7mePQCg
+45mRcZ86Um/ryEhIs0JL5Cx5EKuIRgQQEQIABgUCQgPmhgAKCRAczfFVIa/Yfel5
+AJ0TXWn2qtZmEN6tdZ4/VTpH9cOXVwCaAyui/mmmPPCEQcaC2DoC4rHMMqKIRgQQ
+EQIABgUCQh+4vgAKCRA+pv3jVaQOy4I5AJoCCMts0wQQx2Wnuz6Ii+ieu1MMmgCg
+h2H34O+pBg1dHC3GWZiyq9aDFjmIRgQQEQIABgUCQivBWwAKCRDmG6SJFeu5qyoE
+AKC/xmhCmG8fohMkHi1YRgzJm2VDzQCgviLROOstWwPujI4c/6U1MvAMJFOIRgQQ
+EQIABgUCQixCvwAKCRCNlVuZtDxY/syWAJ9psKJlkwGX+25fQIloLre0prFKMACe
+JNyKzd93pqAL2p2FyxmjEExSxbqIRgQQEQIABgUCQj2X3wAKCRDJFnZ6z2bubsFH
+AJ9X+MXZ+Wo9+BI6Jxv7DohpqRORiACgv2ZG6oESd26tbmu6d4nFvLC/6kGIRgQQ
+EQIABgUCPDXcNQAKCRA1vkGfu3Ky8uAPAKD+CZ8+0LJbw4+FyqYjX88HRITy2ACg
+3P/GI5yz2bcm9C68jTGQRDETkH6ISQQSEQIACQUCQGhfgQIHAAAKCRBlYvyF8V1B
+6e5rAJ4u2LkeWRfx0H4lO8Kw8qa15B93bQCcCDAOzq5Tm32u2/ys+xv79W9GiqWI
+RgQTEQIABgUCP/ry5QAKCRCnsnSlE6sGY2F9AJ40DgNKAqjTwJ39As3Ay0K4niv9
+cgCfS5xlN79+zwD/DrVmiAdBufOXdT2IRgQQEQIABgUCQoiLAgAKCRAzj7twz+FT
+RO7AAJ9/1EEkLaNtp5NsNLtFEcOtyu1NrACeKc4ysw08YOihE+1K9o2o+NmJPm6I
+RgQQEQIABgUCQphzyQAKCRBNtucbgGGoMOQOAKDlpdJ662o8GZMZcAa5Bn9zBLNm
+3QCg3hSOMJN3qCx7u4WH5unoMBNvrp6IRQQQEQIABgUCQrV83QAKCRDPHxWT14OS
+WtAQAJUSmIyDG5c/S65bzlVAXCQwk+kRAKDFzx4OT3lH4+ShLFubSNWHkiiCaYkC
+HAQQAQIABgUCQrq8/AAKCRDpsJZTSEc0NkA5D/0VdiADaGEwgFtJOFp6cL5i2BdB
+Acq+aPzsYn0/Z7PwE+sMieHACJMlmpUYUpY7ly84KqWZ8YEsFpqK7GXht0yMyPFZ
+DaAUU3QjasDPbEO2XoFwmNG9rahTzqm30bGASp2nAkVy0tcJ+ajWxt8HkYgdx/L3
+Up/qU+esvIIx51LS3rLPMKYyb9TnK00+75nbsHdHWNdwEeg9DiaQl2NyewGsCy8T
+nuGDI7xtnde/jXdkO2z96pNfIC8MY6VlvZ8/F3NKAA6c3SMd10cUEd+vwosUwIPC
+SrprjtlFr55zKeBoookpk5uDlN53A28vCtLp2LEUJmiOZfu7sCKTW2Ag8kOp79Ui
+mulPNcCBX5Ga9xem2BSL6PetbRJqI3FT9XLl77Ajy4StxwPXG+TWq7RRtRrSgzep
+TRdSgnluy5a0nwplZh9koG4qjCOGonav4YLWY9xN8Na7fdFLN0+hIq3akxksDrnE
+A5FDQBxMKZE+2Z+Oy1wXm0jxRSlj5xvTNeFCEAZfxTr5MjeEc4tdQ+nJ6hcSI3QF
+LpkAPWwV9/zAUDcFCxcor246U4OJ5eFy+qK2m1n/c+nGqtnGhwgiHEidMcdRf1SY
+9cpVw2y/yrxuFBnrA6gL7E1Hkd+q1ZKBpNOMLRehuZLDZ9smezC0559zm83m/mWu
++3609YuwpR3nDEradohGBBARAgAGBQJCuw7OAAoJEEmc1wj9vBgJHCkAoL3NsMJT
+fulYHNlIq9gdlT2T3ZZtAJ936ffVtCMBMAQCXcukL7SE72NBsohGBBIRAgAGBQJB
+O5QZAAoJEE5gbDa1mq/YqsIAoIbXf+2oLq49JEg/e8IykF1AzgXvAJ9oE0QmEF/q
+IjcsWsgujAQSKttYUohGBBIRAgAGBQJBdVr6AAoJELMQKtJN6F74JlgAn1Ex3TC8
+sXrcb2mbgXcXRCLYKTO1AJwLfOTIuGEttlQsh075hrvMvNYMDohJBDARAgAJBQJD
+NGqmAh0AAAoJEPTmanzCDfJzgywAn0HxMKr2vnxhWx0kOTiA82AIWJdwAJ46K1GD
+g+G2foONZksTmv584Q/VBohGBBARAgAGBQI+Kch3AAoJEIPQlUhkteA3VjoAoLe7
+eWCzTt38QRqWO9Z6hRQo3lgOAJ4qYIlorPixGSowm4rKsFe0eHFZeohGBBARAgAG
+BQJB5FtWAAoJEDn85ni80AmkqEUAoN6+juKQPddMzybnFP7+NiQ1TM3MAKDd0/NG
+LetZbXLrIzO/XUCkVT8vWYhaBDARAgAaBQJDV0E0Ex0Ac2lnbmVkIGJ5IG1pc3Rh
+a2UACgkQ9OZqfMIN8nPSJgCgrb3VZccTTqhUcrWlKx0sT3SsaGoAmgMwoNZHR+6c
+/mM4Jg8NBEjBwLG9iQEiBBABAgAMBQJCG4wqBQMAEnUAAAoJEJcQuJvKV618dO0I
+AI12hMFBAPnydtJfZsDDoEsm9YTbMCOipBBFIs9tsH+QCfrsIStRF3zPaNhA9lYm
+LWzIBD4BmrxwaGcZ0ofLI49RHHFt7a5AlDQ0tYuB1eudVSe8PmvqlyWrkmEE11DC
+1qtZY/5dQovyKs5XhZoz/kAueAxcldI9TD6NRpL4SglOdkHukfqeVaom5CMqnP5C
+vIcehKkRJz9qcONai4HjI+LTtveazXWmCsE3UqK/46OtQU+jFwdqDF0UM9UFkTDW
+0Ox+gpltpCcWsNqSzl6CUu4tlzvrahvRtzQbEsore5ZOL1eohDPFkrzrWztebfZ5
+nqtzeRXzNjTYp/2SOwE9eUmI3AQQAQIABgUCQ1EWfQAKCRDR2VIECemh1aBgBf44
+o92QDDYfzau08virTOHy8tCVosgnP772D7blNDb6YURBmRiXdN4EBor/d59tL/m9
+oRA48Ub13g0Jsg9Chj9AK+fV8FuJYjc5FvKPcKi8GabblwxR2O9+/2l7O+EzNYtm
+Con0CUYFYuHUlpg7bayt6pH/c26uwfFOWmpb5rsHdHF5HHQiuIChHMW0Ag9nahgV
+OA4buk0GTv/KoZtdr8AJHdf2fheoEeLRQlQHbjR5In3Qe9wNIa8daBwC991c11qJ
+AhwEEAECAAYFAkO8DmEACgkQ/0rfvFdiXfqlzQ//Zq1dMcLOfXeFOIPdvbeFTwOi
+icSfiGVxuPhMvDBgLhhABWB/3kUt9GA1OGK8XPBdXZVPy9NEps3W+7FwCL6e/fCM
+ejeiscdA+ORJ03h0EnFmU/+LsarZmPrxda5SEmdjsipwl/Z2uiH2e7uulPzxlkss
+qJ0Ibd7rgn0ZFpYrt3Sp8Ml2x14evBxVzBDcL4iSghKmXqL/TyYFgNtmVe4XA7/N
+gJAx1gdWY/vlPbxht9tu/g84lPZh68z/u/K1v3umqUx3FPkQho2jH73nZ6UEyG/h
+RbLmWA6fiorng975XRiU3NkT4Upp4MB8JZIP7LjuBZ2NY8CWqFsRDyEYtW0KWdaT
+7pDxn2a/C6f/Cm2rPp5d5VZNfW+2kGErhrR//WfnDoh8IwPQVZ4DdWX9FQ6wvcQY
+fV7QtVBT//rW3pkHoTOPViHlh6Uxfw+ojVH8d8Bjl50FL0e7cqI+mqOUuXoPfwAM
+eqB3zJpdDx7VgNhFx3pjCbkWKAVc1cQxhx/V74HKJZhBh2+JQMSkJWn+EAR6UEvv
+1DZINoFsRA1iQdyW6AWxWoVyLNFir07UEbLscyC/ZZGNoB1F9HxBEVuEyrVnyWV/
+6bSpfPvZYHsLQnIa5+aUNyd+AMuwIZmM9cfUYSP1PIsAUjv53AC7oiHbX2hxYqJa
+OYrsKe7CWXf/z64zbO+IRgQREQIABgUCQ72JVQAKCRBozYDOqcHxkEGUAKCpD9jY
+Y+vxDlnAHZs2tIlp5Ru3IQCdGGbUd60CK1eWcQfaxfeASuAxhFaIRgQQEQIABgUC
+Q8L3AAAKCRBaSGhqmjqZdS/pAKCZbST5woymej5+lO38bS4NljyG6wCcDt8GOZ/i
+MqhKp9BfDNP+XM3Vjc2IRgQQEQIABgUCQ/5DPQAKCRAhmpdyhocbsyfFAJ93j4Tc
+YRnBrfBymnTHNnqcOYlI2ACeOUOz2IIx9Wjk4DxzWlLua8oT8viIRgQQEQIABgUC
+RDUf0QAKCRD2v2ZeweIXyuHgAJ9PiGse3O/nOpUir4Y9k8JEN0oH8ACgkJ8uG9Oc
+3/fP3qr+qzJqUQVu0XSIRgQQEQIABgUCRDZ8MgAKCRAWsHVNB6a3bbhYAJ0b1/Jx
+c+BkraUc7CIjQ5LtxQckqACbBvJPJ35NmNi/cPGy0HtpNGjX3riIRgQQEQIABgUC
+RFPbyAAKCRDgn+8l2WSErDBTAJ9CL0DzKuzilTyQYx53KU6o0lTQYwCeMQric6e9
+ZTdb84VHfgTqO5lXNmKJASIEEAECAAwFAkI91xUFAwASdQAACgkQlxC4m8pXrXy/
+QAf/coFzCKoyqe+aQj3bef1w0EkWDMU6VtNfQP55m7QZjEldUCn+4kWaERJAsMzn
+GTijPOA7NFo+Au+kZ8iJBmwOoqn7cUbZEet0YoCyh4S7zz4Dwo/8cqMV1B/FoaOS
+kTf5HxRr3s90T2bs+DHn4etBG/kFgLwAmltdBobVw6O6B6aJV0u7e3vaUgfDv5DJ
+lMLJNT1JfEdlaolBfEfxAp3x7tqfaqncm0Y0TJKUtgS1uNDMxyVnZ4qCcwq1KlYP
+UgC+QIbOiRHCDcvvpHomEVc7zDnu8/uXnLWiDFjCf1gQkeuk1FCd/E3aRk8VN5Se
+2Dz1nSTlFAjrybW/BptDIBH5wokBIgQQAQIADAUCQk/JPQUDABJ1AAAKCRCXELib
+yletfK6mB/9zJP4FXUoH4v5ZAA1Tn1SJuMJuEIn4r2rVR4uFBRQJc0CTSxqVZVRK
+9ydBJbPFQDi6jwR0oXDoYraXNPX1XXK6Uulv+BbO3KQ7b8YYZ3EfRQU8lLppog8U
+CC3PzFY9CjE4sy5z3IDzZkCPrXyUbWea3wr21kPcVZYv8esCrsgohMxNBztGVlij
+aA9A9OMahknvS3qN9zXLHQY5UmTzeqa5s9RvadOKHUl9Hu0ssYHMPdol6LqPWvYe
+AGp3ebJop3nOpOkFDuaikl1kThevCJ12sxWnRh7TeQCNwxznMwbpqM9i24ssH9sk
+iOGqskPSvoD/6YCb3if2EEJkX3oDPY4YiQEiBBABAgAMBQJCYi/IBQMAEnUAAAoJ
+EJcQuJvKV618DgAH/3VwkhJ1YxyyTdOciV5OO7/43GTH9W5H78wvxfeBy+a++Qyk
+4W6yx3CwrlemZLqFuTt5ZV8TUDoPCCIx1PTpAISpST0VbDyD0Dk8of0kj+1ZS6zM
+zQVIft6kItibPBOuYfER2RmV2OTLUPoKHxhDvyO43mOAX4MpwRj2HzlswGQNKrAK
+pOOBJONo5As6+b5DOPHT/tdNkuKpdG0wYw4lgGURO8bU00btinam8KghGnEj44C5
+yYo4mUTU0J7NtUAbg2p98PnCI5eocM+HC1bCuibYUyBZ0oT/F1K4zC6OUuxo0F17
+mTrMsRKttRkSLm0bb+jTtQi3WBdIjstFSZ2+P0qJASIEEAECAAwFAkJiuMsFAwAS
+dQAACgkQlxC4m8pXrXw/hggAv/mMEXuuoyvdkoTs8JGC8EBzHy7p6E3JT02LmYQm
+SoSOKFp6sBVtJglfnDd3QrA5V+SdRepaINZ2Sux3k4x1SE2GcMGfI6bv/nGUCFpr
+3Piap3jGuarqGH2zRiV4xMohe2mLURAVuYjG8vZ9alrZ2XfnETy5/DRjhCEfjhP7
+iPmwZXuSQFFW5+wJxr0pQ3NeoIR16hNfcCry+mLrvTJB0DgbdUGRtihzmFagHbCZ
+rMHmo0UE76D22H/IkQu9L8GMZ9t4niAijc/LoOfwB7lLX/Rje8mXo9VzrdsnvHhT
+5pjsoCYWI+owGIc0WyNkDoeNpVPfcyNqekAwdtyFAFmwIokBIgQQAQIADAUCQmMJ
+YwUDABJ1AAAKCRCXELibyletfE1VB/9Wa+SGPPSLNXCqT/lnHh7r2lvwT/CGc+w5
+D+iN3ria9wbFe1kXUL3DaPoX+65lRY8oaiEjdfOGfosgU0xd/WxOfSuB3dIs8v2k
+zTZKBfxuks1cY5fOt2k4jY47U961GeqFfRgELWQtZnJvTmog+7wN61xQgvoLSfRb
+QQJBT6NLvCQbE0Rbga3LajdX6G//hqHzN0FJ4D/hUOJnd2evSP81sBwW/O1IJYxT
+Zjgw4YMipgBL4yEmVpMKs51TJxVRAOPgW5lqPzTnFUt6aaFSZDwSm0mQGu8blDqk
+v2Q86p17jvDlbjzQEyUCqOiyVjfP3NmW0avn4wMnDP7ENVzWL4FeiQEiBBABAgAM
+BQJCdUVCBQMAEnUAAAoJEJcQuJvKV618/EMH/0/rvB1pN/nB+iLY9g+Ed+ZgMcSh
+mG5q7PCv7c36NA1zeYomSIRmDJhddOTAcEwZqqfrWCWNvNyA/WcX/D72EkmUWX95
+NkhE2W3SvHOhq1dpfKlRqXQCsJ380NbGhfLghKdnuZdnrjcXnL+9hR7iDCreqtU9
+l3l2W3dQE8iWXt31Z5eCd3CEyREpGYg67fpopt3gVvUrxckgJd6XJA9jqVJeMk6F
+GSBLzuUA418cbgaz3hUnvpvGALKd+jCgu0spV259xyQeQ2M3hIsJUNEYemegMkS4
+d0mwuZwdxyrbMZO7W7yXgCrL9MN7dx/trYx9RMeC3o24NWrXLpe3M4a7kmqJASIE
+EAECAAwFAkKHFwsFAwASdQAACgkQlxC4m8pXrXw6LAgAwtcTMqqLIgOyGZXaiH5f
+bCQ+dBQHx0wMVB3LBeLVF3Shr5JDoe5xrSyeJ40qZFjOgvFa0Sia2j0ZTzI3pvJu
+3sbjEAcXSBJ2LEk8+dg4E9xxaCRBGYwwhY03JTkwcn10fSZ7jD2ytvKbkx4u2mQv
+oWIeE9b5GwOZkFPWJnXGeOMMSDvSkxCn5wXNHrYY+PQJYA9BmUVlnkk8hbgWKKFi
+m2OdurNB6v3DoODZXOYvExINIXaU05MP+ZU57cyfjgaGxteIfolt3kwDkNGherKQ
+KhBl7sBu1FM2JPtU6zwUN2+vaw/TT0/npI5xXKumITqds8b/mVQKHGlbEzrIN0IC
+nIkBIgQQAQIADAUCQom9zAUDABJ1AAAKCRCXELibyletfKyWB/9ezlx19q/I1Ge2
+bACeVZLvNNdrGg/LkuDAAp1LwIyMDQqr+5Uf08kpn+O5SfULah5xTTIWsyHTkBux
+wr+o24J8WKYjm+0ols+ykMD0YsSdL8lhs52cvXUG6dyeti+m79o4kjnKlkhJ4Fjn
+I373rZIzdpdKJpo/JAEIQ6ZNmuDRfHJnAtQFmH/qolWbBSbT94/m5ayL1aGHVUF0
+6ZKD7gxl0V911sK7Bccc3869KBPIJV1IgYNq8h23QeZaNyxMqHfMQJcxFc/4BbVy
+/lYsdMLGKGMmOCxMaz/fzuiP0FS08VDkm1irTOvp8JtiHxcOaDnHuLS9rqrH6w1X
+SZJcH2M/iQEiBBABAgAMBQJCnNyMBQMAEnUAAAoJEJcQuJvKV618CSkH/jPcaZAr
+kwmHS4TeH93NaBHMQYhdt9L4eHH+t1jmkyhSpnc4wf0/Sbf7+jCMWlAak3yVwAIQ
+Y+eML2lpLZiyWCCr0iH+AE9jsv4tawgq4IiEUuD5lesYwCZTYKw1lI50LtbKRS76
+Jz9AeaaODQqCMswRzGvzVGmCzzGDCWvLa7Sp3/WP+qJvzc9rclwB7zlS20ycyOup
+eeN2jZ77etTJ2PC4WTC/XU5g9Oygk26MBfI8ypvH1ORYAoAa4J8oSoxcFfPA26WU
+9JjBS89In9iChpRobygELx+SsZ9RuTfab3TVcM7UiTr5itzPpgGQs2ZJOo17CTzR
+UJKSmc59KK3NDsSJASIEEAECAAwFAkK3P2EFAwASdQAACgkQlxC4m8pXrXwrOwf9
+FBK8jl4oTqMGZHN2ST7obZbMyEzoh0r+kbulKXCfRjTxIHk8U5qcgPOTRzTcoOlF
+HiTOIeQ+phTVHhgrP37zWBZ0FzMnhlaQ0WeHSvub+DKNWvWKVx9XPyNtShwiXy36
+qBhdW/VNL6DwdhdiEOWwtyBrnBYgHS7qNeK7wE7gBLTA7jDfEXTOXF3CxhsFFAYs
+G/9sa6D2WWeXzvT+rPpi45v0lJ+36AEkZOk/3N2HJXW1Z7yIYTdvw7YBmrFEQVsE
+HBXDeNdLmKKr5Xp643Zl2VlYT0o54qmcBwfny0lZ8vCtg2XKoCUZux8MybKI2Muu
+QQtdFrWgKFkm2Sj4AeyUqIkBIgQQAQIADAUCQtECogUDABJ1AAAKCRCXELibylet
+fCgeB/9y5Hg7fRGSTPAOxnAeaNWAE8z2Mi1T7Kxi7vWeo29P5sdYvlXrBphB0Wln
+820CFLtJPwOcSraNh4iQM8rYegP/NuyZWRN70RhgiYvotkBVFcSDSRXiUQsvQ1rn
+nkVf2gqVxmniZThkNaak4djvDHn36weiDqepE0eacLcnf9Id1Iscelr4kOapMAwG
+esMpYCOvvCErC5oFP48jaOFRXLIdJkJxIpNu7JVWcsXg9XFUZ4ybQdgYAcpv6VF4
+hxOXjF2J432JsOGwG0jD97a6xlXDQvR80STXo7qEWYnyQderXzkq92QnVyLkEAWb
+vr5ChTkonXfmmpBjKB8C2kcOgC6aiQEiBBABAgAMBQJC0aewBQMAEnUAAAoJEJcQ
+uJvKV618YDwH/j86Nd+fHdaQ477vu4NjyEHIUDMyV8ijZq7WS9Px+1ouH+AcRz7E
+Ph/6c+9QXGHiQJIVKCnuES+l7mD9An3hLF8VDq7YU7+MirhCFogOi3VLTSqJ8Rz5
+O2uPI/4ku7T0eOcGP6N5ZOIzZCf5Cz+AYVTxZ4H80Jc1djXZ37kqv3QmGszvDE3U
+zNegKaO/vi9kPjV330kLIlb+oLn8USR7IuWnD90obEuHv7FzmoWylTAlLvVZnJEx
+ZI1nnn0fDqArydrd5cvXhxti7vMsrY2eIGMhou16mEn/NzFybwcYxwzDf/TvzCrr
+x5xRipD1rCbEJhx7T4dZAjSPpBPOPvQPEUqJASIEEAECAAwFAkLjcf0FAwASdQAA
+CgkQlxC4m8pXrXykrQf+LKgdS2E3BY0WMGjvpcW9+Ve0XQ42Pd3fyW1uG0MzPpJp
+6Wt6dlMAZCGTMveOwNH7i4/w/P8DVb3wQcPSQb1Clx+u77x9sXJP/EX90DYfieYs
+DCymbBw3aI7QUhF9pn7bWalN+3o2zIGOSOBKczvjCoFuiMUmU8QMX1O4mtOJlpV8
+QVwRTp33KwOkt/SJ3ddlCWNYerdssSictQsejFGCDZynkhcoRmWMD4YfqDiaA6lj
+8Obtx+hBgq/JtnN76oqWkOAWGhevtANulP4O/n6qwOSdVscXgTrByE0PejM1AMul
+6AZ0KhjTTN9VLE7mlpPwHIHjASv9cq0Q8fDisjP0B4kBIgQQAQIADAUCQuyvVQUD
+ABJ1AAAKCRCXELibyletfE/DCADDXiXcqp5tdGGgGz1nqDHzNNytNwr/JGnpkraQ
+2QgpMdVM73mb27ZJ/KuZXLJBHXvnunG2OrZIZQXBz5lzOL+v6DTNZxLHU0uAH3Y5
+vaNbGasnhPKGdbX5o7vt/4+1PgK8YZ/nPZefqrIbmdRkuY1oo+YJB6mNy3dLiNM+
+kk+gVM/v6CO9XXTpzUdzXzvtd+qRp+MKaV3jkxwEBONN3ulkv1/LfrWNRq8fJ+Vp
+cFWYFtrZG71RhtL3DjpkAolZwd6BsQFguozT35iI+bYJS5WQfjIjZm8lJAokmWFb
+bx9DjNxUJlABbCAUhdlRoepemGiWV7Dtq1I0uBQfz1t6TGggiQEiBBABAgAMBQJC
+7VYoBQMAEnUAAAoJEJcQuJvKV618eNQIALQMXuHfk4Zces6KkEp9l1kRRaaRqbCX
+n3c9q6OHLgKl17ix+cZonAoDoT0k8PavbBzqJjhwg1oJqIayCCFGxs/kpG9MoT17
+KdIf/GV9rTYm860PGmpBMD0vP8EMEunmnfLYGtfytYFJLcfQTEnKR0hqbiOjFVtQ
+ZOoiJVA7NwkSjUQ5KFAGcohvVHOiV0Lr2sh+NTfjA9lNAwlZ3SKSGDVCPlOsjvOA
+S47wNRUdKSGeQ5oU5Hb/dCFGthdg7wdkMBWU4Es0hsFpadFcAekY/hgM9RzC07Zv
+xaAnpfmTwQRnFqoTjifngVCYvgYl7Q0xjfvwQ71431Ffw1sfk0xR2fGIRgQSEQIA
+BgUCRGyV6gAKCRDEEBZI0RNaSxgqAKCmWb0sKQMtHY3Nan5AYlt6MLyLhgCgwWi2
+Vf3ccVN6L6kqdML+eoozpK+IRgQSEQIABgUCRQxbaAAKCRBpCnQ6XgPXFgZmAKDV
+1+RCLFlkutFJfQ/b0UldOLLVwACgg+FccWA1xmaiiBK0lVubxbKW30+IRgQQEQIA
+BgUCRttuuQAKCRCp4hl9WkBdjGcpAJ0Q9wrJJaHsjbFXID9Jqz2snl9MVACfaTRk
+A80gwpF67x6LZ6sE4tOdW2+IRgQQEQIABgUCQ0p5OwAKCRDvnrfDDR3ibipeAJ0Y
+7u9S/+Y5FKMVd2niut4+EgP+dwCgsIHu40owlB7g5F+E/AGHmkqdgImIRgQQEQIA
+BgUCQ/yEwgAKCRAeUgMMcIt1wz+oAJ9HFE6JWpIynU0ALQNKTBZ14QWcvwCeO+WV
+JpWrDwnuPzenFw9TKRxVufGIRgQQEQIABgUCRBrvpwAKCRAhC/Krn3HUScK6AJ9K
+LP3uzhU9U4dMpo9E3onxljn1CQCfY6izVeKNEWW/8z5W+plE2aOhvKKIRgQQEQIA
+BgUCRHakhgAKCRDtdSVsHuUfaaLAAKCV9YoXAqj9oDdKXelQMeuNtn9MhgCfXJ9m
+rzwaZggGx/PbmpiA0EZ1nEKIRgQQEQIABgUCRJjmTQAKCRD7SeY4FPTib6iuAJ9i
+BZryTLGNGClkqy/S1FRbKc/ORwCfYE8L4PBDG3JaPSItbJ5OH/zVIveIRgQQEQIA
+BgUCROE3AgAKCRBwiVW29xHmXrt6AKDq7q8HFdgDC1kTOPJqYZxnjojaHwCeIaPP
+H67iYfEiciv8R8A6GpOVutuIRgQQEQIABgUCRP2b0QAKCRD79V+u1gLw/8Z3AJ9z
+Eq0UkL/TkPWs3sdSBqxgfqEclgCfcz0IuykflGrYTsEAcj31ttg+NmaIRgQQEQIA
+BgUCRVvQtgAKCRDPN7v0phZJI1BgAJ9sLtNxl/5sAwmhIBSQOChw4kj3nQCggFfm
+G4vTiGhuxOiv9gGVKSct3feIRgQQEQIABgUCRWtdSgAKCRC+wlealWpazyiJAJ4q
+eISXI94tUQrBwwQeln/LGmHDPQCeOQ0c/+Se1uVS/CNVV2MxOApbVZiIRgQQEQIA
+BgUCRZNxpAAKCRD9+FRXs92MMsoyAJ903ypivSi8liv0DzMZBvW3MNi+RwCgs/36
+w9kyMSxd0kGEKrz2DPGPJWqIRgQQEQIABgUCRceEMwAKCRDLQTAEm+Qcg8eNAKCH
+TnCetq8UKwjT24qm4iK/aCRYQACgo1QER5aKXQ+xn8P25TfMcVbLcKqIRgQQEQIA
+BgUCRivC7gAKCRCpoY/MCyX3glmUAJwKUUkw8/jySmS/VO6kq9nNAxfMJgCfZlv3
+iTuDGd+4lTIZnYLOZuL0veKIRgQQEQIABgUCRmhsGwAKCRBeQmLvNg3sg0pBAJ9D
+fmGyxZcqlwLwI5J8lvjz0LkywgCeKZ+q04zviWIo+m0CHRJw3d1y2GWISQQwEQIA
+CQUCQ/yGbQIdAAAKCRAeUgMMcIt1wys+AJ9kKsm5/b8S4PXpvPbUy+23HoCPUgCg
+jiXcOlISMO4wbj2nr47zpGlhzTOISgQQEQIACgUCRkhSZAMFAXgACgkQwkoPY342
+SFZUVgCeOOu4gFfQJ6fw2UnLUe6MqGxQ7zAAn1yRygbmdx6vlEX8EODtO1Ax/btY
+iGAEMBECACAFAkJ3OEIZHQBTaG91bGQgaGF2ZSBiZWVuIGxvY2FsLgAKCRA5yiv0
+PWqKX7ERAJ4+hfOYx+yBvJzD8qtawcylltJMkQCcDxJQGod8n41mszmRsk/oyn0A
+ZWiJAh8EMAECAAkFAkXm7KYCHQAACgkQ/0rfvFdiXfo37A/6A+ci1hreJiLkZWkh
+FOHoesFz5/80hmD7HIDfNZKL3+dLSRMErZsuSYrdfbEPRO2cRD5uhL2jds4XdhYC
+wz6amtL38MPivFwVt5ZmnBKO//nHnFcpQjbBxQELYvN3gLzWguN4OYs4MpKioscs
+9WyNePaSjWOJvBZs+7xglGAuHrIyS7ti0O9l9bcldGKgrrixyY4enfGPqtGGJlSY
+eqP2eNo1sTA91Nr1KHtx37IJ/1QRl25bsz1ejgaXceN+XKLMX9zTBls3ly8yQXgb
+Hlf8wGZVBWnPq13gGNN1H9l4hJiulI8akV/adk69PzsOdlTvRTNJdwUyIFUvPcW0
+vV17pCudT0AX3ZemPsHGoDeeQMgcNhPP9bSjojc57atEiUcOoK6ZD82EGPLBjtes
+183DrS4AEiczHmEjC4uDnluVT2H841CB6HGHAvsxW00lSDRmZQz94+ZSaee1142+
+p8QZJeoWpem0MFIlkbaFQL+k23cfRTvvfVVgE+4XTU14/TgDC7lNKRdf8IBKJkWB
+Fa3aPn7JBC7hKqQ6RgofObzHt8RqBfvD09+C2LRkrPqgVmYyylWWWz7pcahNM+jl
+CtoCim+jGavWVfYAzHjBjBkSj8XUR9mZcorBpf/1eywTQ8QuVWSrN50eRqi5YlMv
+Jv0qcAi4PqsMUn+N2x+Fqq3VFh2IRgQQEQIABgUCRzjMIQAKCRDAHykL4aAyrN9Z
+AKCu2Ea2rHIlKiYCT02b3dAaPjdAlQCgxXL9AIHWejbZE5J3uAruFq5sjNaIRgQQ
+EQIABgUCRiI3zAAKCRCFlDgaMpUfXREcAJ90tMSivsfnKRK+BwFmb4ivo+ixlQCg
+n8R3oXTcQTsdeRuA41UWomdI6KyIRgQQEQIABgUCRqpdUAAKCRCy+wRQJ9CQpk/F
+AJ9Mv5Ozx/L4o1UthBfB1NhD8NpSrwCffzAYzzbqV+rxJRtI6JIkDuJ0h4qIRgQQ
+EQIABgUCR48diAAKCRBRr0V+2m3VMiZqAJ9HtrbsqsYHjdPwC9SkdOpl2ZYR0gCg
+kqWdGBYiK/LQG0YDrQMrueeWVBaIRgQQEQIABgUCR6Ff/AAKCRA2Zog6U2NQnCPd
+AJ4sDR3nawaL/UmnSm8ljgGkkkNUFQCglKTGXUbgbREONKjqAw0RwoxADHC5BA0E
+OeKvnBAQAI0Zm7cWpnGfRGLEE50L1S9per2OUZ23NSQ3XMhxFdZB+TsGVqr3JC+E
+ICigW00MMgfaQqNJxiuD5AW68C9KLrXx0OY5fQ1M0yiLvmrFlMn938X1Feo9gOgT
+KOfSjZyc1MidvgeZ2ujTfJxKhLZqIETrY0/C5Dr2MKg+AP+a3tr8LYnvoeclOgPi
+W8hkBepRcU4WY+FhnLQYAnAwakZDwBvAxRQHXjeUjAAK5LQmLlBl4tqvPBA6DrN2
+JMNJAfPmRRAs/+P2/d7KOVrdoQteXMQCaFxX0d5lx5uNBB8zHRLm5VleG5Qdirxa
+HEAu+Px++ED1JHFpXOhIT6HSr3Ljn04pg8V2ohjRTjVD4DQJgl3laDmqXVqW98e4
+jhz8Eml3iUqzvX3OBrVYw7/dA09npCu3L2JPLOgd7e6e1ttV4voUYK8OtwdxxJa9
+NYHTGWOVwOXsv1pp8gUuizsV5Z1QRPtrkkPmmR6qy6V3Eb6tmaJzs4g0hNIveNGb
+yMJUs59FOQUFpfYQQ0MO/EWnGKmhb5aXBoj4++W0nAeHnpsVelnaPZrStFa6/vW1
+knFxxL+3YneF/u7QVimwPDPoNvdDks43kARi7j5m48cxCh/Y3FLpswc8wuceRhYe
+zp/Uy10OCv6EU+kEKUvd2K01W0etBuDCrHj1iyZoOyIGFLTXSxo7AAMFD/9GgAKv
+AplraLq49V8TWKRZjgFOOXeuXz1lWnSshfvgfrg8kTWDex0Aqqye3XZ9LB+zgbZR
+PMmgWIEdExZcvffi6kDuK+CBgsNkwYAObSpzlqDxhM76y3qMUd0pz6ygZQ78eka/
+YdzifVFebvzS4Zgj/YjddIFghs7FmzjXOqg+j7oG07q+OA+rOAkSvcX5Ykq7Rtxg
+R1vdeFCoyXgfbHt6HNa5Jjb9/ZCnLt98OF1REwI+KqV58KCb8ut/XX750LdU1hYy
+LdtIj+5vo5E9wW+durieRriZeq/LJuTmGEbOXC4oL1M0WVYGJ446pUUQAsdFnIpy
+iueS4tj6uKnEVb0hOU695E1ExsXZstddxW7HK4S4XrBgC79x2+43nlgvI74hhGh6
+aYFLpker9IbCNa2dyvJAoxUQGFfDirXBHjKo6LgKxouXZ9ApZhuJcB+EhHagv00T
+VhhvolaVn+cgo/Zr7b1IS7ZekI1xy6yXUhsmn76kdREDCWnRbeFEb8dDO7amSHMD
+1J2/uznPifeqaHvxEJp5uqxZ06Vs9AW2OJmyQu71B+Cci7NJ5cYiqwY2jvQtQ0gC
+gaY6moGvHUHtWZCziNheyFhXildi2jJfmb731jBAjXKjVtn5Arj/Rac+SvsYNtU8
+KL1cvd2lioBS+tOoyudaEKd31vOsVyvWRimKkIhGBBgRAgAGBQI54q+cAAoJEMhr
+oGpRfQ8OTPUAoIYZh2pc1n/AdwFa4z67a0RwNb5YAJ92EZVOZdFeVtYl7x10AlBy
+BEqYJpkBogRIfaqlEQQAiqNyeVchgYAKXJuEHXay8qEt0sbfmlF9QkObfF/FHtrV
+8qRzkY810ciogXgHP8iLi0rchNOT9A1UE3un12cgyBmW8PBnOpHc0/sLVpkB0Gzy
+3F1d7E/+2Q20YNkoZkpXiVDYFgASyCjZPIihn4DCq8x4lHniys6+npX/oWGDTH8A
+oK0GpYEPwzyJVY45ib3Z2TmDfGQtA/9yRKADhURbZpLn0uateyTIy9F4wy+xwDSX
+Nf4UKAKejnJIV+k+6Nj59UCSCaEAEd34yKmF/0EJ+svktj60ba19H0ahzRh2P0Mo
+1oHX6iO5cOh+2u2u+ztrA9DH5C1qgFOj0KfMWBEBQ8HQ14IIJhVBIYpFlmzSVP6T
+YmpYWITcqQP8DwgJM+O/9+kWDy+/Z2WP6eoglvrX1LazOUZpE2eZalSsWlr/elqa
+R8KMqTFpOuoJJvxCufMymQEqb4dWuZ0Np4lh3Gs59k30X4AYAXxYsmhzYM2+ng8F
+nCDBxVYJZ4G1C+YcJgZFlZINhsUpDJNujghYa8RefSG5pH9mMUAV3pu0PWxpbnV4
+LWxpYnJlIChBbGV4YW5kcmUgT2xpdmEpIDxsaW51eC1saWJyZStseG9saXZhQGZz
+ZmxhLm9yZz6IYAQTEQIAIAUCSH2qpQIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheA
+AAoJELy3z4d+fUenDbQAnRfRX+spKe1EMSpGyIgj5H2lXe/mAKCD6kx1IURSvYvN
+kTo+vCx9cZ82cYhGBBARAgAGBQJIfazWAAoJEFI0hF3yuSD16CoAnA+WJR2vjn1S
+mykS38WjR3nOx+VAAKC9k/euHMg0M/MssqoLhJdYYwQkbw==
+=0z9e
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/freed-ora/current/F-13-2.6.33-branch/common b/freed-ora/current/F-13-2.6.33-branch/common
new file mode 120000
index 000000000..60d3b0a6a
--- /dev/null
+++ b/freed-ora/current/F-13-2.6.33-branch/common
@@ -0,0 +1 @@
+../common \ No newline at end of file
OpenPOWER on IntegriCloud