diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-08-10 13:46:28 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-10 13:46:28 -0400 |
commit | 2f058256cb64e346f4fb4499ff4e0f1c2791a4b4 (patch) | |
tree | 91e06602f4d3abb6812ea8c9bc9ba4501e14c84e /drivers/video | |
parent | 0274aa2506fd2fe89a58dd6cd64d3b3f7b976af8 (diff) | |
parent | 86b3786078d63242d3194ffc58ae8dae1d1bbef3 (diff) |
Merge /spare/repo/linux-2.6/
Diffstat (limited to 'drivers/video')
30 files changed, 1638 insertions, 243 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 04d3120f723..cde0ed097af 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -1399,8 +1399,8 @@ config FB_TX3912 Say Y here to enable kernel support for the on-board framebuffer. config FB_G364 - bool - depends on MIPS_MAGNUM_4000 || OLIVETTI_M700 + bool "G364 frame buffer support" + depends on (FB = y) && (MIPS_MAGNUM_4000 || OLIVETTI_M700) select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT diff --git a/drivers/video/aty/aty128fb.c b/drivers/video/aty/aty128fb.c index 9789115980a..7bc1d44d881 100644 --- a/drivers/video/aty/aty128fb.c +++ b/drivers/video/aty/aty128fb.c @@ -350,10 +350,8 @@ static int default_vmode __initdata = VMODE_1024_768_60; static int default_cmode __initdata = CMODE_8; #endif -#ifdef CONFIG_PMAC_PBOOK static int default_crt_on __initdata = 0; static int default_lcd_on __initdata = 1; -#endif #ifdef CONFIG_MTRR static int mtrr = 1; @@ -1249,7 +1247,6 @@ static int aty128_crtc_to_var(const struct aty128_crtc *crtc, return 0; } -#ifdef CONFIG_PMAC_PBOOK static void aty128_set_crt_enable(struct aty128fb_par *par, int on) { if (on) { @@ -1284,7 +1281,6 @@ static void aty128_set_lcd_enable(struct aty128fb_par *par, int on) aty_st_le32(LVDS_GEN_CNTL, reg); } } -#endif /* CONFIG_PMAC_PBOOK */ static void aty128_set_pll(struct aty128_pll *pll, const struct aty128fb_par *par) { @@ -1491,12 +1487,10 @@ static int aty128fb_set_par(struct fb_info *info) info->fix.visual = par->crtc.bpp == 8 ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; -#ifdef CONFIG_PMAC_PBOOK if (par->chip_gen == rage_M3) { aty128_set_crt_enable(par, par->crt_on); aty128_set_lcd_enable(par, par->lcd_on); } -#endif if (par->accel_flags & FB_ACCELF_TEXT) aty128_init_engine(par); @@ -1652,7 +1646,6 @@ static int __init aty128fb_setup(char *options) return 0; while ((this_opt = strsep(&options, ",")) != NULL) { -#ifdef CONFIG_PMAC_PBOOK if (!strncmp(this_opt, "lcd:", 4)) { default_lcd_on = simple_strtoul(this_opt+4, NULL, 0); continue; @@ -1660,7 +1653,6 @@ static int __init aty128fb_setup(char *options) default_crt_on = simple_strtoul(this_opt+4, NULL, 0); continue; } -#endif #ifdef CONFIG_MTRR if(!strncmp(this_opt, "nomtrr", 6)) { mtrr = 0; @@ -1752,10 +1744,8 @@ static int __init aty128_init(struct pci_dev *pdev, const struct pci_device_id * info->fbops = &aty128fb_ops; info->flags = FBINFO_FLAG_DEFAULT; -#ifdef CONFIG_PMAC_PBOOK par->lcd_on = default_lcd_on; par->crt_on = default_crt_on; -#endif var = default_var; #ifdef CONFIG_PPC_PMAC @@ -2035,12 +2025,10 @@ static int aty128fb_blank(int blank, struct fb_info *fb) aty_st_8(CRTC_EXT_CNTL+1, state); -#ifdef CONFIG_PMAC_PBOOK if (par->chip_gen == rage_M3) { aty128_set_crt_enable(par, par->crt_on && !blank); aty128_set_lcd_enable(par, par->lcd_on && !blank); } -#endif #ifdef CONFIG_PMAC_BACKLIGHT if ((_machine == _MACH_Pmac) && !blank) set_backlight_enable(1); @@ -2124,7 +2112,6 @@ static int aty128fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, static int aty128fb_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long arg, struct fb_info *info) { -#ifdef CONFIG_PMAC_PBOOK struct aty128fb_par *par = info->par; u32 value; int rc; @@ -2149,7 +2136,6 @@ static int aty128fb_ioctl(struct inode *inode, struct file *file, u_int cmd, value = (par->crt_on << 1) | par->lcd_on; return put_user(value, (__u32 __user *)arg); } -#endif return -EINVAL; } diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c index 47a6b12bc96..e7e8b52014c 100644 --- a/drivers/video/aty/radeon_base.c +++ b/drivers/video/aty/radeon_base.c @@ -2521,6 +2521,11 @@ static void __devexit radeonfb_pci_unregister (struct pci_dev *pdev) radeonfb_pm_exit(rinfo); + if (rinfo->mon1_EDID) + sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid1_attr); + if (rinfo->mon2_EDID) + sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid2_attr); + #if 0 /* restore original state * diff --git a/drivers/video/au1100fb.c b/drivers/video/au1100fb.c index cacd88cc84a..b6fe30c3ad6 100644 --- a/drivers/video/au1100fb.c +++ b/drivers/video/au1100fb.c @@ -111,15 +111,15 @@ static int au1100fb_ioctl(struct inode *inode, struct file *file, u_int cmd, void au1100_nocursor(struct display *p, int mode, int xx, int yy){}; static struct fb_ops au1100fb_ops = { - owner: THIS_MODULE, - fb_get_fix: fbgen_get_fix, - fb_get_var: fbgen_get_var, - fb_set_var: fbgen_set_var, - fb_get_cmap: fbgen_get_cmap, - fb_set_cmap: fbgen_set_cmap, - fb_pan_display: fbgen_pan_display, - fb_ioctl: au1100fb_ioctl, - fb_mmap: au1100fb_mmap, + .owner = THIS_MODULE, + .fb_get_fix = fbgen_get_fix, + .fb_get_var = fbgen_get_var, + .fb_set_var = fbgen_set_var, + .fb_get_cmap = fbgen_get_cmap, + .fb_set_cmap = fbgen_set_cmap, + .fb_pan_display = fbgen_pan_display, + .fb_ioctl = au1100fb_ioctl, + .fb_mmap = au1100fb_mmap, }; static void au1100_detect(void) diff --git a/drivers/video/chipsfb.c b/drivers/video/chipsfb.c index 95e72550d43..e75a965ec76 100644 --- a/drivers/video/chipsfb.c +++ b/drivers/video/chipsfb.c @@ -28,22 +28,17 @@ #include <linux/fb.h> #include <linux/init.h> #include <linux/pci.h> +#include <linux/console.h> #include <asm/io.h> #ifdef CONFIG_PMAC_BACKLIGHT #include <asm/backlight.h> #endif -#ifdef CONFIG_PMAC_PBOOK -#include <linux/adb.h> -#include <linux/pmu.h> -#endif /* * Since we access the display with inb/outb to fixed port numbers, * we can only handle one 6555x chip. -- paulus */ -static struct fb_info chipsfb_info; - #define write_ind(num, val, ap, dp) do { \ outb((num), (ap)); outb((val), (dp)); \ } while (0) @@ -74,14 +69,6 @@ static struct fb_info chipsfb_info; inb(0x3da); read_ind(num, var, 0x3c0, 0x3c1); \ } while (0) -#ifdef CONFIG_PMAC_PBOOK -static unsigned char *save_framebuffer; -int chips_sleep_notify(struct pmu_sleep_notifier *self, int when); -static struct pmu_sleep_notifier chips_sleep_notifier = { - chips_sleep_notify, SLEEP_LEVEL_VIDEO, -}; -#endif - /* * Exported functions */ @@ -356,6 +343,8 @@ static struct fb_var_screeninfo chipsfb_var __initdata = { static void __init init_chips(struct fb_info *p, unsigned long addr) { + memset(p->screen_base, 0, 0x100000); + p->fix = chipsfb_fix; p->fix.smem_start = addr; @@ -366,34 +355,41 @@ static void __init init_chips(struct fb_info *p, unsigned long addr) fb_alloc_cmap(&p->cmap, 256, 0); - if (register_framebuffer(p) < 0) { - printk(KERN_ERR "C&T 65550 framebuffer failed to register\n"); - return; - } - - printk(KERN_INFO "fb%d: Chips 65550 frame buffer (%dK RAM detected)\n", - p->node, p->fix.smem_len / 1024); - chips_hw_init(); } static int __devinit chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) { - struct fb_info *p = &chipsfb_info; + struct fb_info *p; unsigned long addr, size; unsigned short cmd; + int rc = -ENODEV; + + if (pci_enable_device(dp) < 0) { + dev_err(&dp->dev, "Cannot enable PCI device\n"); + goto err_out; + } if ((dp->resource[0].flags & IORESOURCE_MEM) == 0) - return -ENODEV; + goto err_disable; addr = pci_resource_start(dp, 0); size = pci_resource_len(dp, 0); if (addr == 0) - return -ENODEV; - if (p->screen_base != 0) - return -EBUSY; - if (!request_mem_region(addr, size, "chipsfb")) - return -EBUSY; + goto err_disable; + + p = framebuffer_alloc(0, &dp->dev); + if (p == NULL) { + dev_err(&dp->dev, "Cannot allocate framebuffer structure\n"); + rc = -ENOMEM; + goto err_disable; + } + + if (pci_request_region(dp, 0, "chipsfb") != 0) { + dev_err(&dp->dev, "Cannot request framebuffer\n"); + rc = -EBUSY; + goto err_release_fb; + } #ifdef __BIG_ENDIAN addr += 0x800000; // Use big-endian aperture @@ -411,37 +407,89 @@ chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) set_backlight_enable(1); #endif /* CONFIG_PMAC_BACKLIGHT */ +#ifdef CONFIG_PPC p->screen_base = __ioremap(addr, 0x200000, _PAGE_NO_CACHE); +#else + p->screen_base = ioremap(addr, 0x200000); +#endif if (p->screen_base == NULL) { - release_mem_region(addr, size); - return -ENOMEM; + dev_err(&dp->dev, "Cannot map framebuffer\n"); + rc = -ENOMEM; + goto err_release_pci; } + + pci_set_drvdata(dp, p); p->device = &dp->dev; + init_chips(p, addr); -#ifdef CONFIG_PMAC_PBOOK - pmu_register_sleep_notifier(&chips_sleep_notifier); -#endif /* CONFIG_PMAC_PBOOK */ + if (register_framebuffer(p) < 0) { + dev_err(&dp->dev,"C&T 65550 framebuffer failed to register\n"); + goto err_unmap; + } + + dev_info(&dp->dev,"fb%d: Chips 65550 frame buffer" + " (%dK RAM detected)\n", + p->node, p->fix.smem_len / 1024); - pci_set_drvdata(dp, p); return 0; + + err_unmap: + iounmap(p->screen_base); + err_release_pci: + pci_release_region(dp, 0); + err_release_fb: + framebuffer_release(p); + err_disable: + err_out: + return rc; } static void __devexit chipsfb_remove(struct pci_dev *dp) { struct fb_info *p = pci_get_drvdata(dp); - if (p != &chipsfb_info || p->screen_base == NULL) + if (p->screen_base == NULL) return; unregister_framebuffer(p); iounmap(p->screen_base); p->screen_base = NULL; - release_mem_region(pci_resource_start(dp, 0), pci_resource_len(dp, 0)); + pci_release_region(dp, 0); +} + +#ifdef CONFIG_PM +static int chipsfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) +{ + struct fb_info *p = pci_get_drvdata(pdev); + + if (state == pdev->dev.power.power_state) + return 0; + if (state != PM_SUSPEND_MEM) + goto done; + + acquire_console_sem(); + chipsfb_blank(1, p); + fb_set_suspend(p, 1); + release_console_sem(); + done: + pdev->dev.power.power_state = state; + return 0; +} + +static int chipsfb_pci_resume(struct pci_dev *pdev) +{ + struct fb_info *p = pci_get_drvdata(pdev); -#ifdef CONFIG_PMAC_PBOOK - pmu_unregister_sleep_notifier(&chips_sleep_notifier); -#endif /* CONFIG_PMAC_PBOOK */ + acquire_console_sem(); + fb_set_suspend(p, 0); + chipsfb_blank(0, p); + release_console_sem(); + + pdev->dev.power.power_state = PMSG_ON; + return 0; } +#endif /* CONFIG_PM */ + static struct pci_device_id chipsfb_pci_tbl[] = { { PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_65550, PCI_ANY_ID, PCI_ANY_ID }, @@ -455,6 +503,10 @@ static struct pci_driver chipsfb_driver = { .id_table = chipsfb_pci_tbl, .probe = chipsfb_pci_init, .remove = __devexit_p(chipsfb_remove), +#ifdef CONFIG_PM + .suspend = chipsfb_pci_suspend, + .resume = chipsfb_pci_resume, +#endif }; int __init chips_init(void) @@ -472,48 +524,4 @@ static void __exit chipsfb_exit(void) pci_unregister_driver(&chipsfb_driver); } -#ifdef CONFIG_PMAC_PBOOK -/* - * Save the contents of the frame buffer when we go to sleep, - * and restore it when we wake up again. - */ -int -chips_sleep_notify(struct pmu_sleep_notifier *self, int when) -{ - struct fb_info *p = &chipsfb_info; - int nb = p->var.yres * p->fix.line_length; - - if (p->screen_base == NULL) - return PBOOK_SLEEP_OK; - - switch (when) { - case PBOOK_SLEEP_REQUEST: - save_framebuffer = vmalloc(nb); - if (save_framebuffer == NULL) - return PBOOK_SLEEP_REFUSE; - break; - case PBOOK_SLEEP_REJECT: - if (save_framebuffer) { - vfree(save_framebuffer); - save_framebuffer = NULL; - } - break; - case PBOOK_SLEEP_NOW: - chipsfb_blank(1, p); - if (save_framebuffer) - memcpy(save_framebuffer, p->screen_base, nb); - break; - case PBOOK_WAKE: - if (save_framebuffer) { - memcpy(p->screen_base, save_framebuffer, nb); - vfree(save_framebuffer); - save_framebuffer = NULL; - } - chipsfb_blank(0, p); - break; - } - return PBOOK_SLEEP_OK; -} -#endif /* CONFIG_PMAC_PBOOK */ - MODULE_LICENSE("GPL"); diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig index e4b91a4b936..cbff98337aa 100644 --- a/drivers/video/console/Kconfig +++ b/drivers/video/console/Kconfig @@ -156,7 +156,6 @@ config FONT_6x11 config FONT_7x14 bool "console 7x14 font (not supported by all drivers)" if FONTS depends on FRAMEBUFFER_CONSOLE - default y if !SPARC32 && !SPARC64 && !FONTS help Console font with characters just a bit smaller than the default. If the standard 8x16 font is a little too big for you, say Y. @@ -197,8 +196,8 @@ config FONT_SUN12x22 standard font is unreadable for you, say Y, otherwise say N. config FONT_10x18 - bool "console 10x18 font (not supported by all drivers)" - depends on FONTS + bool "console 10x18 font (not supported by all drivers)" if FONTS + depends on FRAMEBUFFER_CONSOLE help This is a high resolution console font for machines with very big letters. It fits between the sun 12x22 and the normal 8x16 font. diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index b209adbd508..35c88bd7ba5 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -142,7 +142,6 @@ static int fbcon_set_origin(struct vc_data *); #define CURSOR_DRAW_DELAY (1) /* # VBL ints between cursor state changes */ -#define ARM_CURSOR_BLINK_RATE (10) #define ATARI_CURSOR_BLINK_RATE (42) #define MAC_CURSOR_BLINK_RATE (32) #define DEFAULT_CURSOR_BLINK_RATE (20) @@ -276,7 +275,8 @@ static void fb_flashcursor(void *private) if (!vc || !CON_IS_VISIBLE(vc) || fbcon_is_inactive(vc, info) || - registered_fb[con2fb_map[vc->vc_num]] != info) + registered_fb[con2fb_map[vc->vc_num]] != info || + vc_cons[ops->currcon].d->vc_deccm != 1) return; acquire_console_sem(); p = &fb_display[vc->vc_num]; @@ -288,7 +288,7 @@ static void fb_flashcursor(void *private) release_console_sem(); } -#if (defined(__arm__) && defined(IRQ_VSYNCPULSE)) || defined(CONFIG_ATARI) || defined(CONFIG_MAC) +#if defined(CONFIG_ATARI) || defined(CONFIG_MAC) static int cursor_blink_rate; static irqreturn_t fb_vbl_handler(int irq, void *dev_id, struct pt_regs *fp) { @@ -878,11 +878,6 @@ static const char *fbcon_startup(void) } #endif /* CONFIG_MAC */ -#if defined(__arm__) && defined(IRQ_VSYNCPULSE) - cursor_blink_rate = ARM_CURSOR_BLINK_RATE; - irqres = request_irq(IRQ_VSYNCPULSE, fb_vbl_handler, SA_SHIRQ, - "framebuffer vbl", info); -#endif /* Initialize the work queue. If the driver provides its * own work queue this means it will use something besides * default timer to flash the cursor. */ diff --git a/drivers/video/fbcmap.c b/drivers/video/fbcmap.c index 4e5ce8f7d65..c32a2a50bfa 100644 --- a/drivers/video/fbcmap.c +++ b/drivers/video/fbcmap.c @@ -212,7 +212,7 @@ int fb_cmap_to_user(struct fb_cmap *from, struct fb_cmap_user *to) int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *info) { - int i, start; + int i, start, rc = 0; u16 *red, *green, *blue, *transp; u_int hred, hgreen, hblue, htransp = 0xffff; @@ -225,75 +225,51 @@ int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *info) if (start < 0 || (!info->fbops->fb_setcolreg && !info->fbops->fb_setcmap)) return -EINVAL; - if (info->fbops->fb_setcmap) - return info->fbops->fb_setcmap(cmap, info); - for (i = 0; i < cmap->len; i++) { - hred = *red++; - hgreen = *green++; - hblue = *blue++; - if (transp) - htransp = *transp++; - if (info->fbops->fb_setcolreg(start++, - hred, hgreen, hblue, htransp, - info)) - break; + if (info->fbops->fb_setcmap) { + rc = info->fbops->fb_setcmap(cmap, info); + } else { + for (i = 0; i < cmap->len; i++) { + hred = *red++; + hgreen = *green++; + hblue = *blue++; + if (transp) + htransp = *transp++; + if (info->fbops->fb_setcolreg(start++, + hred, hgreen, hblue, + htransp, info)) + break; + } } - return 0; + if (rc == 0) + fb_copy_cmap(cmap, &info->cmap); + + return rc; } int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *info) { - int i, start; - u16 __user *red, *green, *blue, *transp; - u_int hred, hgreen, hblue, htransp = 0xffff; - - red = cmap->red; - green = cmap->green; - blue = cmap->blue; - transp = cmap->transp; - start = cmap->start; + int rc, size = cmap->len * sizeof(u16); + struct fb_cmap umap; - if (start < 0 || (!info->fbops->fb_setcolreg && - !info->fbops->fb_setcmap)) + if (cmap->start < 0 || (!info->fbops->fb_setcolreg && + !info->fbops->fb_setcmap)) return -EINVAL; - /* If we can batch, do it */ - if (info->fbops->fb_setcmap && cmap->len > 1) { - struct fb_cmap umap; - int size = cmap->len * sizeof(u16); - int rc; - - memset(&umap, 0, sizeof(struct fb_cmap)); - rc = fb_alloc_cmap(&umap, cmap->len, transp != NULL); - if (rc) - return rc; - if (copy_from_user(umap.red, red, size) || - copy_from_user(umap.green, green, size) || - copy_from_user(umap.blue, blue, size) || - (transp && copy_from_user(umap.transp, transp, size))) { - rc = -EFAULT; - } - umap.start = start; - if (rc == 0) - rc = info->fbops->fb_setcmap(&umap, info); - fb_dealloc_cmap(&umap); + memset(&umap, 0, sizeof(struct fb_cmap)); + rc = fb_alloc_cmap(&umap, cmap->len, cmap->transp != NULL); + if (rc) return rc; + if (copy_from_user(umap.red, cmap->red, size) || + copy_from_user(umap.green, cmap->green, size) || + copy_from_user(umap.blue, cmap->blue, size) || + (cmap->transp && copy_from_user(umap.transp, cmap->transp, size))) { + fb_dealloc_cmap(&umap); + return -EFAULT; } - - for (i = 0; i < cmap->len; i++, red++, blue++, green++) { - if (get_user(hred, red) || - get_user(hgreen, green) || - get_user(hblue, blue) || - (transp && get_user(htransp, transp))) - return -EFAULT; - if (info->fbops->fb_setcolreg(start++, - hred, hgreen, hblue, htransp, - info)) - return 0; - if (transp) - transp++; - } - return 0; + umap.start = cmap->start; + rc = fb_set_cmap(&umap, info); + fb_dealloc_cmap(&umap); + return rc; } /** diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 2222de6ad84..d2e19f6dd72 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -80,10 +80,12 @@ EXPORT_SYMBOL(fb_get_color_depth); */ void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height) { - int i; + int i, j; for (i = height; i--; ) { - memcpy(dst, src, s_pitch); + /* s_pitch is a few bytes at the most, memcpy is suboptimal */ + for (j = 0; j < s_pitch; j++) + dst[j] = src[j]; src += s_pitch; dst += d_pitch; } @@ -1164,6 +1166,7 @@ static void __exit fbmem_exit(void) { class_destroy(fb_class); + unregister_chrdev(FB_MAJOR, "fb"); } module_exit(fbmem_exit); diff --git a/drivers/video/fbmon.c b/drivers/video/fbmon.c index 6cd1976548d..c2718bb9494 100644 --- a/drivers/video/fbmon.c +++ b/drivers/video/fbmon.c @@ -1241,6 +1241,8 @@ int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info *info) vtotal *= 2; hfreq = pixclock/htotal; + hfreq = (hfreq + 500) / 1000 * 1000; + vfreq = hfreq/vtotal; return (vfreq < vfmin || vfreq > vfmax || diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c index 277d733c6d0..1147b899f00 100644 --- a/drivers/video/fbsysfs.c +++ b/drivers/video/fbsysfs.c @@ -228,8 +228,6 @@ static ssize_t store_virtual(struct class_device *class_device, if (last - buf >= count) return -EINVAL; var.yres_virtual = simple_strtoul(last, &last, 0); - printk(KERN_ERR "fb: xres %d yres %d\n", var.xres_virtual, - var.yres_virtual); if ((err = activate(fb_info, &var))) return err; @@ -244,10 +242,68 @@ static ssize_t show_virtual(struct class_device *class_device, char *buf) fb_info->var.yres_virtual); } -static ssize_t store_cmap(struct class_device *class_device, const char * buf, +/* Format for cmap is "%02x%c%4x%4x%4x\n" */ +/* %02x entry %c transp %4x red %4x blue %4x green \n */ +/* 256 rows at 16 chars equals 4096, the normal page size */ +/* the code will automatically adjust for different page sizes */ +static ssize_t store_cmap(struct class_device *class_device, const char *buf, size_t count) { -// struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + int rc, i, start, length, transp = 0; + + if ((count > PAGE_SIZE) || ((count % 16) != 0)) + return -EINVAL; + + if (!fb_info->fbops->fb_setcolreg && !fb_info->fbops->fb_setcmap) + return -EINVAL; + + sscanf(buf, "%02x", &start); + length = count / 16; + + for (i = 0; i < length; i++) + if (buf[i * 16 + 2] != ' ') + transp = 1; + + /* If we can batch, do it */ + if (fb_info->fbops->fb_setcmap && length > 1) { + struct fb_cmap umap; + + memset(&umap, 0, sizeof(umap)); + if ((rc = fb_alloc_cmap(&umap, length, transp))) + return rc; + + umap.start = start; + for (i = 0; i < length; i++) { + sscanf(&buf[i * 16 + 3], "%4hx", &umap.red[i]); + sscanf(&buf[i * 16 + 7], "%4hx", &umap.blue[i]); + sscanf(&buf[i * 16 + 11], "%4hx", &umap.green[i]); + if (transp) + umap.transp[i] = (buf[i * 16 + 2] != ' '); + } + rc = fb_info->fbops->fb_setcmap(&umap, fb_info); + fb_copy_cmap(&umap, &fb_info->cmap); + fb_dealloc_cmap(&umap); + + return rc; + } + for (i = 0; i < length; i++) { + u16 red, blue, green, tsp; + + sscanf(&buf[i * 16 + 3], "%4hx", &red); + sscanf(&buf[i * 16 + 7], "%4hx", &blue); + sscanf(&buf[i * 16 + 11], "%4hx", &green); + tsp = (buf[i * 16 + 2] != ' '); + if ((rc = fb_info->fbops->fb_setcolreg(start++, + red, green, blue, tsp, fb_info))) + return rc; + + fb_info->cmap.red[i] = red; + fb_info->cmap.blue[i] = blue; + fb_info->cmap.green[i] = green; + if (transp) + fb_info->cmap.transp[i] = tsp; + } return 0; } @@ -255,20 +311,24 @@ static ssize_t show_cmap(struct class_device *class_device, char *buf) { struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); - unsigned int offset = 0, i; + unsigned int i; if (!fb_info->cmap.red || !fb_info->cmap.blue || - fb_info->cmap.green || fb_info->cmap.transp) + !fb_info->cmap.green) + return -EINVAL; + + if (fb_info->cmap.len > PAGE_SIZE / 16) return -EINVAL; + /* don't mess with the format, the buffer is PAGE_SIZE */ + /* 256 entries at 16 chars per line equals 4096 = PAGE_SIZE */ for (i = 0; i < fb_info->cmap.len; i++) { - offset += snprintf(buf, PAGE_SIZE - offset, - "%d,%d,%d,%d,%d\n", i + fb_info->cmap.start, - fb_info->cmap.red[i], fb_info->cmap.blue[i], - fb_info->cmap.green[i], - fb_info->cmap.transp[i]); + snprintf(&buf[ i * 16], PAGE_SIZE - i * 16, "%02x%c%4x%4x%4x\n", i + fb_info->cmap.start, + ((fb_info->cmap.transp && fb_info->cmap.transp[i]) ? '*' : ' '), + fb_info->cmap.red[i], fb_info->cmap.blue[i], + fb_info->cmap.green[i]); } - return offset; + return 16 * fb_info->cmap.len; } static ssize_t store_blank(struct class_device *class_device, const char * buf, @@ -354,6 +414,13 @@ static ssize_t show_pan(struct class_device *class_device, char *buf) fb_info->var.xoffset); } +static ssize_t show_name(struct class_device *class_device, char *buf) +{ + struct fb_info *fb_info = (struct fb_info *)class_get_devdata(class_device); + + return snprintf(buf, PAGE_SIZE, "%s\n", fb_info->fix.id); +} + static struct class_device_attribute class_device_attrs[] = { __ATTR(bits_per_pixel, S_IRUGO|S_IWUSR, show_bpp, store_bpp), __ATTR(blank, S_IRUGO|S_IWUSR, show_blank, store_blank), @@ -364,6 +431,7 @@ static struct class_device_attribute class_device_attrs[] = { __ATTR(modes, S_IRUGO|S_IWUSR, show_modes, store_modes), __ATTR(pan, S_IRUGO|S_IWUSR, show_pan, store_pan), __ATTR(virtual_size, S_IRUGO|S_IWUSR, show_virtual, store_virtual), + __ATTR(name, S_IRUGO, show_name, NULL), }; int fb_init_class_device(struct fb_info *fb_info) diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 8fe1c12a17b..cabd53cec99 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -249,9 +249,6 @@ static void imxfb_enable_controller(struct imxfb_info *fbi) /* disable hardware cursor */ LCDC_CPOS &= ~(CPOS_CC0 | CPOS_CC1); - /* fixed burst length (see erratum 11) */ - LCDC_DMACR = DMACR_BURST | DMACR_HM(8) | DMACR_TM(2); - LCDC_RMCR = RMCR_LCDC_EN; if(fbi->backlight_power) @@ -359,6 +356,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf LCDC_PCR = fbi->pcr; LCDC_PWMR = fbi->pwmr; LCDC_LSCR1 = fbi->lscr1; + LCDC_DMACR = fbi->dmacr; return 0; } @@ -509,6 +507,7 @@ static int __init imxfb_init_fbinfo(struct device *dev) fbi->cmap_inverse = inf->cmap_inverse; fbi->pcr = inf->pcr; fbi->lscr1 = inf->lscr1; + fbi->dmacr = inf->dmacr; fbi->pwmr = inf->pwmr; fbi->lcd_power = inf->lcd_power; fbi->backlight_power = inf->backlight_power; @@ -642,12 +641,12 @@ static int imxfb_remove(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct fb_info *info = dev_get_drvdata(dev); + struct imxfb_info *fbi = info->par; struct resource *res; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - /* disable LCD controller */ - LCDC_RMCR &= ~RMCR_LCDC_EN; + imxfb_disable_controller(fbi); unregister_framebuffer(info); @@ -663,8 +662,9 @@ static int imxfb_remove(struct device *dev) void imxfb_shutdown(struct device * dev) { - /* disable LCD Controller */ - LCDC_RMCR &= ~RMCR_LCDC_EN; + struct fb_info *info = dev_get_drvdata(dev); + struct imxfb_info *fbi = info->par; + imxfb_disable_controller(fbi); } static struct device_driver imxfb_driver = { diff --git a/drivers/video/imxfb.h b/drivers/video/imxfb.h index 128c3ee515c..e837a8b48eb 100644 --- a/drivers/video/imxfb.h +++ b/drivers/video/imxfb.h @@ -54,6 +54,7 @@ struct imxfb_info { u_int pcr; u_int pwmr; u_int lscr1; + u_int dmacr; u_int cmap_inverse:1, cmap_static:1, unused:30; diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig index 6ba10e3acef..3e9ccf370ab 100644 --- a/drivers/video/logo/Kconfig +++ b/drivers/video/logo/Kconfig @@ -63,5 +63,10 @@ config LOGO_SUPERH_CLUT224 depends on LOGO && SUPERH default y +config LOGO_M32R_CLUT224 + bool "224-color M32R Linux logo" + depends on LOGO && M32R + default y + endmenu diff --git a/drivers/video/logo/Makefile b/drivers/video/logo/Makefile index b0d995020bd..d0244c04af5 100644 --- a/drivers/video/logo/Makefile +++ b/drivers/video/logo/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_LOGO_SUN_CLUT224) += logo_sun_clut224.o obj-$(CONFIG_LOGO_SUPERH_MONO) += logo_superh_mono.o obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o +obj-$(CONFIG_LOGO_M32R_CLUT224) += logo_m32r_clut224.o # How to generate logo's diff --git a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c index 77b62207500..788fa812c87 100644 --- a/drivers/video/logo/logo.c +++ b/drivers/video/logo/logo.c @@ -33,6 +33,7 @@ extern const struct linux_logo logo_sun_clut224; extern const struct linux_logo logo_superh_mono; extern const struct linux_logo logo_superh_vga16; extern const struct linux_logo logo_superh_clut224; +extern const struct linux_logo logo_m32r_clut224; const struct linux_logo *fb_find_logo(int depth) @@ -97,6 +98,10 @@ const struct linux_logo *fb_find_logo(int depth) /* SuperH Linux logo */ logo = &logo_superh_clut224; #endif +#ifdef CONFIG_LOGO_M32R_CLUT224 + /* M32R Linux logo */ + logo = &logo_m32r_clut224; +#endif } return logo; } diff --git a/drivers/video/logo/logo_m32r_clut224.ppm b/drivers/video/logo/logo_m32r_clut224.ppm new file mode 100644 index 00000000000..8b2983c5a0b --- /dev/null +++ b/drivers/video/logo/logo_m32r_clut224.ppm @@ -0,0 +1,1292 @@ +P3 +# CREATOR: The GIMP's PNM Filter Version 1.0 +# +# Note: how to convert ppm to pnm(ascii). +# $ convert -posterize 224 m32r.ppm - | pnm2asc -f5 >logo_m32r_clut224.ppm +# +# convert - imagemagick: /usr/bin/convert +# pnm2asc - pnm to ascii-pnm format converter +# http://www.is.aist.go.jp/etlcdb/util/p2a.htm#English + +80 80 +255 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 43 43 43 75 75 75 27 27 27 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 59 59 59 123 123 123 67 67 67 27 27 27 + 2 2 3 2 2 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 10 6 3 59 59 59 80 80 80 43 43 43 27 27 27 + 2 2 3 2 2 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 19 19 19 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 2 2 3 10 6 3 10 6 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 10 6 3 11 11 11 11 11 11 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 2 2 3 2 2 3 27 27 27 10 6 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 19 19 19 2 2 3 2 2 3 51 51 51 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 123 123 123 196 196 196 115 115 115 2 2 3 + 2 2 3 2 2 3 2 2 3 75 75 75 141 141 140 + 172 172 172 196 196 196 190 189 188 2 2 3 11 11 11 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 27 27 27 164 164 164 228 228 228 221 221 220 10 6 3 + 2 2 3 2 2 3 2 2 3 172 172 172 245 245 245 + 254 254 252 254 254 252 221 221 220 35 35 35 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 164 164 164 228 228 228 35 35 35 236 236 236 236 236 236 + 2 2 3 11 11 11 2 2 3 254 254 252 245 245 245 + 2 2 3 75 75 75 245 245 245 245 245 245 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 212 212 212 2 2 3 51 51 51 11 11 11 245 245 245 + 27 27 27 80 80 80 10 6 3 254 254 252 2 2 3 + 2 2 3 91 91 91 19 19 19 254 254 252 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 196 196 196 10 6 3 2 2 3 11 11 11 107 107 107 + 49 35 5 57 42 11 31 22 3 236 236 236 2 2 3 + 2 2 3 2 2 3 2 2 3 254 254 252 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 107 107 107 221 221 220 2 2 3 64 43 7 194 148 10 + 236 188 10 225 180 10 170 126 10 236 188 10 94 86 67 + 2 2 3 2 2 3 204 204 204 236 236 236 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 228 228 228 182 126 10 218 164 9 236 188 10 + 236 188 10 237 204 14 236 205 40 246 214 48 246 214 48 + 245 189 11 209 156 9 196 196 196 11 11 11 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 165 114 10 207 148 7 229 172 9 236 180 10 + 236 196 11 237 204 14 242 218 43 246 218 75 246 218 19 + 246 213 13 246 218 19 244 205 11 218 164 9 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 164 109 5 192 133 7 224 165 9 236 180 10 236 188 10 + 236 196 11 241 212 42 246 218 75 246 218 19 246 218 19 + 246 218 19 236 196 11 150 114 10 229 172 9 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 165 114 10 201 142 7 229 172 9 242 182 11 236 188 10 + 237 204 14 245 213 67 246 218 19 246 213 13 246 213 13 + 154 119 10 207 148 7 218 164 9 216 156 8 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 120 78 3 225 180 10 245 189 11 236 205 40 + 241 212 42 241 212 17 237 204 14 148 107 9 182 126 10 + 216 156 8 218 164 9 207 148 7 82 70 43 2 2 3 + 2 2 3 123 123 123 35 35 35 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 10 6 3 180 180 180 156 102 5 135 88 5 142 106 7 + 126 98 11 165 114 10 185 132 9 207 148 7 215 150 13 + 199 140 8 188 148 71 196 196 196 190 189 188 2 2 3 + 2 2 3 11 11 11 132 132 132 75 75 75 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 10 6 3 190 189 188 190 189 188 151 97 5 192 133 7 + 207 148 7 206 142 8 199 140 8 180 121 7 180 132 31 + 190 189 188 190 189 188 212 212 212 212 212 212 107 107 107 + 2 2 3 2 2 3 99 99 99 51 51 51 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 190 189 188 190 189 188 190 189 188 136 95 7 + 151 97 5 151 97 5 151 97 5 183 156 91 190 189 188 + 190 189 188 228 228 228 254 254 252 254 254 252 221 221 220 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 10 6 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 75 75 75 245 245 245 196 196 196 190 189 188 190 189 188 + 190 189 188 196 196 196 190 189 188 190 189 188 204 204 204 + 236 236 236 254 254 252 254 254 252 254 254 252 254 254 252 + 35 35 35 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 27 27 27 2 2 3 + 245 245 245 254 254 252 245 245 245 190 189 188 190 189 188 + 190 189 188 190 189 188 190 189 188 212 212 212 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 10 6 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 2 2 3 132 132 132 + 254 254 252 254 254 252 254 254 252 236 236 236 196 196 196 + 190 189 188 204 204 204 245 245 245 245 245 245 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 80 80 80 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 2 2 3 2 2 3 2 2 3 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 2 2 3 2 2 3 212 212 212 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 2 2 3 2 2 3 204 204 204 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 245 245 245 236 236 236 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 2 2 3 11 11 11 164 164 164 212 212 212 + 236 236 236 245 245 245 254 254 252 236 236 236 221 221 220 + 221 221 220 228 228 228 245 245 245 245 245 245 245 245 245 + 236 236 236 221 221 220 212 212 212 204 204 204 204 204 204 + 196 196 196 204 204 204 59 59 59 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 2 2 3 27 27 27 172 172 172 212 212 212 + 236 236 236 254 254 252 254 254 252 254 254 252 228 228 228 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 245 245 245 221 221 220 204 204 204 196 196 196 + 196 196 196 196 196 196 228 228 228 19 19 19 2 2 3 + 80 80 80 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 2 2 3 2 2 3 + 11 11 11 2 2 3 164 164 164 236 236 236 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 236 236 236 212 212 212 196 196 196 245 245 245 2 2 3 + 2 2 3 11 11 11 51 51 51 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 2 2 3 86 86 83 + 2 2 3 27 27 27 236 236 236 254 254 252 254 254 252 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 212 212 212 196 196 196 91 91 91 + 2 2 3 2 2 3 2 2 3 11 11 11 2 2 3 + 2 2 3 2 2 3 2 2 3 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 2 2 3 2 2 3 + 2 2 3 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 221 221 220 245 245 245 + 2 2 3 11 11 11 43 43 43 19 19 19 10 6 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 2 2 3 80 80 80 2 2 3 + 2 2 3 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 43 43 43 27 27 27 80 80 80 19 19 19 80 80 80 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 2 2 3 2 2 3 2 2 3 2 2 3 + 245 245 245 254 254 252 254 254 252 17 11 233 254 254 252 + 254 254 252 254 254 252 254 254 252 236 236 236 17 11 233 + 17 11 233 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 11 11 11 11 11 11 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 2 2 3 67 67 67 2 2 3 19 19 19 + 254 254 252 254 254 252 245 245 245 17 11 233 245 245 245 + 254 254 252 254 254 252 17 11 233 228 228 228 17 11 233 + 17 11 233 17 11 233 17 11 233 254 254 252 17 11 233 + 17 11 233 254 254 252 254 254 252 17 11 233 17 11 233 + 17 11 233 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 2 2 3 + 11 11 11 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 10 6 3 11 11 11 2 2 3 228 228 228 + 254 254 252 254 254 252 254 254 252 17 11 233 254 254 252 + 254 254 252 17 11 233 17 11 233 17 11 233 245 245 245 + 254 254 252 254 254 252 17 11 233 17 11 233 17 11 233 + 17 11 233 17 11 233 254 254 252 17 11 233 17 11 233 + 17 11 233 17 11 233 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 2 2 3 + 27 27 27 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 2 2 3 2 2 3 2 2 3 2 2 3 254 254 252 + 254 254 252 254 254 252 254 254 252 17 11 233 17 11 233 + 17 11 233 17 11 233 17 11 233 17 11 233 254 254 252 + 17 11 233 17 11 233 17 11 233 254 254 252 254 254 252 + 17 11 233 17 11 233 254 254 252 17 11 233 17 11 233 + 254 254 252 17 11 233 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 2 2 3 + 11 11 11 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 19 19 19 2 2 3 2 2 3 254 254 252 + 254 254 252 254 254 252 17 11 233 245 245 245 17 11 233 + 17 11 233 245 245 245 254 254 252 17 11 233 254 254 252 + 17 11 233 17 11 233 17 11 233 254 254 252 254 254 252 + 17 11 233 17 11 233 254 254 252 17 11 233 17 11 233 + 17 11 233 17 11 233 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 2 2 3 + 2 2 3 19 19 19 2 2 3 19 19 19 254 254 252 + 254 254 252 245 245 245 17 11 233 254 254 252 17 11 233 + 17 11 233 254 254 252 254 254 252 17 11 233 254 254 252 + 254 254 252 254 254 252 17 11 233 17 11 233 254 254 252 + 17 11 233 17 11 233 254 254 252 17 11 233 17 11 233 + 17 11 233 17 11 233 17 11 233 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 43 43 43 2 2 3 43 43 43 254 254 252 + 245 245 245 254 254 252 17 11 233 254 254 252 17 11 233 + 254 254 252 254 254 252 254 254 252 17 11 233 17 11 233 + 17 11 233 17 11 233 17 11 233 254 254 252 17 11 233 + 17 11 233 17 11 233 17 11 233 17 11 233 17 11 233 + 245 245 245 254 254 252 17 11 233 254 254 252 254 254 252 + 245 245 245 2 2 3 2 2 3 2 2 3 11 11 11 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 75 75 75 2 2 3 99 99 99 254 254 252 + 254 254 252 254 254 252 17 11 233 254 254 252 254 254 252 + 254 254 252 254 254 252 245 245 245 228 228 228 254 254 252 + 254 254 252 17 11 233 245 245 245 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 17 11 233 17 11 233 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 2 2 3 75 75 75 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 2 2 3 + 2 2 3 2 2 3 11 11 11 107 107 107 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 245 245 245 254 254 252 245 245 245 236 236 236 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 2 2 3 11 11 11 19 19 19 + 11 11 11 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 2 2 3 11 11 11 + 140 102 3 11 11 11 10 6 3 67 67 67 254 254 252 + 245 245 245 245 245 245 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 245 245 245 228 228 228 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 245 245 245 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 2 2 3 43 43 43 2 2 3 2 2 3 + 2 2 3 11 11 11 67 67 67 11 11 11 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 185 132 9 242 182 11 + 245 189 11 245 189 11 49 35 5 2 2 3 228 228 228 + 254 254 252 254 254 252 254 254 252 245 245 245 254 254 252 + 254 254 252 254 254 252 254 254 252 228 228 228 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 245 238 222 232 189 94 + 226 186 99 43 43 43 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 59 59 59 2 2 3 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 216 156 8 236 180 22 + 245 189 11 245 189 11 245 189 11 49 35 5 11 11 11 + 212 212 212 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 245 245 245 228 228 228 254 254 252 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 245 245 245 254 254 252 254 254 252 229 172 9 246 218 19 + 246 218 19 41 27 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 19 19 19 27 27 27 196 154 14 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 199 140 8 229 172 9 242 182 11 + 245 189 11 245 189 11 245 189 11 244 196 10 2 2 3 + 2 2 3 115 115 115 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 245 245 245 228 228 228 254 254 252 + 254 254 252 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 224 165 9 245 189 11 + 236 196 11 19 19 19 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 11 11 11 236 196 11 + 244 205 11 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 182 126 10 209 156 9 215 150 13 + 193 140 10 207 148 24 216 156 8 242 182 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 209 156 9 + 2 2 3 2 2 3 43 43 43 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 236 236 236 216 156 8 245 189 11 + 229 172 9 64 43 7 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 207 148 7 236 188 10 + 245 189 11 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 180 121 7 216 156 8 242 182 11 236 180 10 + 229 172 9 242 182 11 242 182 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 237 204 14 + 170 126 10 2 2 3 2 2 3 11 11 11 236 236 236 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 204 204 204 196 196 196 216 156 8 236 180 10 + 224 165 9 182 126 10 73 48 6 2 2 3 2 2 3 + 2 2 3 41 27 3 199 140 8 229 172 9 236 180 10 + 245 189 11 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 185 132 9 229 172 9 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 226 188 11 2 2 3 2 2 3 2 2 3 11 11 11 + 245 245 245 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 196 196 196 196 196 196 215 150 13 236 180 10 + 229 172 9 201 142 7 185 132 9 180 121 7 173 120 10 + 180 121 7 192 133 7 229 172 9 242 182 11 245 189 11 + 245 189 11 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 180 126 47 224 165 9 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 236 188 10 193 140 10 2 2 3 2 2 3 2 2 3 + 2 2 3 212 212 212 254 254 252 245 245 245 245 245 245 + 254 254 252 254 254 252 254 254 252 245 245 245 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 204 204 204 196 196 196 199 140 8 229 172 9 + 236 180 10 218 164 9 215 150 13 207 148 7 207 148 7 + 216 156 8 229 172 9 245 189 11 245 189 11 245 189 11 + 245 189 11 242 182 11 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 185 132 9 216 156 8 242 182 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 236 196 11 19 19 19 2 2 3 2 2 3 + 2 2 3 11 11 11 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 245 245 245 254 254 252 254 254 252 + 245 245 245 221 221 220 196 196 196 185 132 9 229 172 9 + 242 182 11 229 172 9 224 165 9 218 164 9 224 165 9 + 229 172 9 236 180 10 245 189 11 245 189 11 245 189 11 + 245 189 11 236 180 22 242 182 11 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 236 180 22 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 236 188 10 225 180 10 2 2 3 2 2 3 + 2 2 3 11 11 11 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 221 221 220 19 19 19 185 132 9 224 165 9 + 245 189 11 245 189 11 242 182 11 236 180 10 236 180 10 + 242 182 11 242 182 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 196 154 14 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 207 148 7 236 180 22 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 242 182 11 + 245 189 11 245 189 11 237 204 14 135 88 5 2 2 3 + 27 27 27 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 245 245 245 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 67 67 67 19 13 3 185 132 9 229 172 9 + 242 182 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 236 180 22 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 245 189 11 242 182 11 + 242 182 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 236 188 10 226 188 11 104 83 48 + 254 254 252 254 254 252 254 254 252 254 254 252 245 245 245 + 254 254 252 254 254 252 245 245 245 254 254 252 245 245 245 + 254 254 252 245 245 245 254 254 252 254 254 252 254 254 252 + 2 2 3 2 2 3 56 38 5 185 132 9 229 172 9 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 242 182 11 + 229 172 9 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 182 126 10 215 150 13 242 182 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 242 182 11 245 189 11 236 196 11 216 156 8 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 245 245 245 2 2 3 + 2 2 3 2 2 3 75 54 3 182 126 10 229 172 9 + 242 182 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 229 172 9 + 207 148 24 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 192 133 7 229 172 9 242 182 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 242 182 11 225 180 10 224 165 9 + 107 69 5 245 245 245 254 254 252 254 254 252 254 254 252 + 254 254 252 254 254 252 254 254 252 254 254 252 254 254 252 + 254 254 252 236 236 236 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 91 67 9 182 126 10 229 172 9 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 242 182 11 242 182 11 216 156 8 180 126 47 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 206 142 8 224 165 9 245 189 11 242 182 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 242 182 11 + 245 189 11 245 189 11 242 182 11 242 182 11 216 156 8 + 156 102 5 19 13 3 43 43 43 196 196 196 254 254 252 + 245 245 245 254 254 252 254 254 252 204 204 204 51 51 51 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 95 62 5 185 132 9 229 172 9 + 242 182 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 242 182 11 245 189 11 245 189 11 + 236 180 22 216 156 8 206 142 8 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 192 133 7 215 150 13 229 172 9 229 172 9 + 236 180 10 236 180 22 242 182 11 242 182 11 245 189 11 + 245 189 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 245 189 11 245 189 11 229 172 9 216 156 8 + 156 102 5 83 54 6 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 115 73 3 185 132 9 229 172 9 + 242 182 11 245 189 11 245 189 11 245 189 11 245 189 11 + 245 189 11 242 182 11 229 172 9 229 172 9 216 156 8 + 180 121 7 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 180 121 7 182 126 10 192 133 7 199 140 8 + 207 148 7 215 150 13 216 156 8 224 165 9 229 172 9 + 236 180 22 245 189 11 242 182 11 245 189 11 242 182 11 + 245 189 11 245 189 11 242 182 11 229 172 9 199 140 8 + 151 97 5 101 67 7 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 115 73 3 180 121 7 216 156 8 + 236 180 22 242 182 11 245 189 11 245 189 11 242 182 11 + 236 180 10 224 165 9 215 150 13 206 142 8 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 156 102 5 164 109 5 172 114 5 180 121 7 180 121 7 + 192 133 7 201 142 7 216 156 8 224 165 9 236 180 22 + 245 189 11 242 182 11 229 172 9 201 142 7 172 114 5 + 125 83 5 83 54 6 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 2 2 3 2 2 3 2 2 3 + 2 2 3 2 2 3 91 58 5 156 102 5 192 133 7 + 216 156 8 229 172 9 236 180 10 236 180 10 229 172 9 + 215 150 13 199 140 8 164 109 5 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 120 78 3 132 82 3 + 151 97 5 157 106 7 180 121 7 185 132 9 193 140 10 + 207 148 7 207 148 7 192 133 7 172 114 5 132 82 3 + 101 67 7 41 27 3 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 73 48 6 143 90 3 180 121 7 + 192 133 7 207 148 7 207 148 7 201 142 7 185 132 9 + 173 120 10 136 95 7 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 91 58 5 125 83 5 135 88 5 + 144 95 7 151 97 5 132 82 3 115 73 3 95 62 5 + 64 43 7 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 64 43 7 91 58 5 151 97 5 + 157 106 7 172 114 5 172 114 5 164 109 5 151 97 5 + 85 59 6 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 73 48 6 + 91 58 5 95 62 5 95 62 5 91 58 5 56 38 5 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 83 54 6 + 107 69 5 132 82 3 125 83 5 101 67 7 71 47 31 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 + 215 150 13 215 150 13 215 150 13 215 150 13 215 150 13 diff --git a/drivers/video/matrox/matroxfb_maven.c b/drivers/video/matrox/matroxfb_maven.c index e529841cd83..67f85344f0c 100644 --- a/drivers/video/matrox/matroxfb_maven.c +++ b/drivers/video/matrox/matroxfb_maven.c @@ -1230,7 +1230,6 @@ static int maven_shutdown_client(struct i2c_client* clnt) { } static unsigned short normal_i2c[] = { MAVEN_I2CID, I2C_CLIENT_END }; -static unsigned short normal_i2c_range[] = { MAVEN_I2CID, MAVEN_I2CID, I2C_CLIENT_END }; I2C_CLIENT_INSMOD; static struct i2c_driver maven_driver; diff --git a/drivers/video/matrox/matroxfb_misc.c b/drivers/video/matrox/matroxfb_misc.c index 76fd3a519b8..a18dd024fc8 100644 --- a/drivers/video/matrox/matroxfb_misc.c +++ b/drivers/video/matrox/matroxfb_misc.c @@ -197,10 +197,7 @@ int matroxfb_vgaHWinit(WPMINFO struct my_timming* m) { DBG(__FUNCTION__) hw->SEQ[0] = 0x00; - if (fwidth == 9) - hw->SEQ[1] = 0x00; - else - hw->SEQ[1] = 0x01; /* or 0x09 */ + hw->SEQ[1] = 0x01; /* or 0x09 */ hw->SEQ[2] = 0x0F; /* bitplanes */ hw->SEQ[3] = 0x00; hw->SEQ[4] = 0x0E; diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c index fbf659b6dab..3edc9f49344 100644 --- a/drivers/video/modedb.c +++ b/drivers/video/modedb.c @@ -246,6 +246,11 @@ static const struct fb_videomode modedb[] = { /* 480x300 @ 72 Hz, 48.0 kHz hsync */ NULL, 72, 480, 300, 33386, 40, 24, 11, 19, 80, 3, 0, FB_VMODE_DOUBLE + }, { + /* 1920x1200 @ 60 Hz, 74.5 Khz hsync */ + NULL, 60, 1920, 1200, 5177, 128, 336, 1, 38, 208, 3, + FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, + FB_VMODE_NONINTERLACED }, }; diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c index b2e6b240786..52b16850a54 100644 --- a/drivers/video/nvidia/nvidia.c +++ b/drivers/video/nvidia/nvidia.c @@ -1324,6 +1324,13 @@ static int __devinit nvidia_set_fbinfo(struct fb_info *info) fb_videomode_to_var(&nvidiafb_default_var, &modedb); nvidiafb_default_var.bits_per_pixel = 8; + } else if (par->fpWidth && par->fpHeight) { + char buf[16]; + + memset(buf, 0, 16); + snprintf(buf, 15, "%dx%d", par->fpWidth, par->fpHeight); + fb_find_mode(&nvidiafb_default_var, info, buf, specs->modedb, + specs->modedb_len, &modedb, 8); } if (mode_option) diff --git a/drivers/video/platinumfb.c b/drivers/video/platinumfb.c index 3dd1de1539d..b00887e9851 100644 --- a/drivers/video/platinumfb.c +++ b/drivers/video/platinumfb.c @@ -523,7 +523,7 @@ int __init platinumfb_setup(char *options) #define invalidate_cache(addr) #endif -static int __devinit platinumfb_probe(struct of_device* odev, const struct of_match *match) +static int __devinit platinumfb_probe(struct of_device* odev, const struct of_device_id *match) { struct device_node *dp = odev->node; struct fb_info *info; @@ -647,12 +647,10 @@ static int __devexit platinumfb_remove(struct of_device* odev) return 0; } -static struct of_match platinumfb_match[] = +static struct of_device_id platinumfb_match[] = { { .name = "platinum", - .type = OF_ANY_MATCH, - .compatible = OF_ANY_MATCH, }, {}, }; diff --git a/drivers/video/pm2fb.c b/drivers/video/pm2fb.c index 5dceddedf50..42c17efa9fb 100644 --- a/drivers/video/pm2fb.c +++ b/drivers/video/pm2fb.c @@ -138,27 +138,27 @@ static struct fb_var_screeninfo pm2fb_var __devinitdata = { * Utility functions */ -inline static u32 RD32(unsigned char __iomem *base, s32 off) +static inline u32 RD32(unsigned char __iomem *base, s32 off) { return fb_readl(base + off); } -inline static void WR32(unsigned char __iomem *base, s32 off, u32 v) +static inline void WR32(unsigned char __iomem *base, s32 off, u32 v) { fb_writel(v, base + off); } -inline static u32 pm2_RD(struct pm2fb_par* p, s32 off) +static inline u32 pm2_RD(struct pm2fb_par* p, s32 off) { return RD32(p->v_regs, off); } -inline static void pm2_WR(struct pm2fb_par* p, s32 off, u32 v) +static inline void pm2_WR(struct pm2fb_par* p, s32 off, u32 v) { WR32(p->v_regs, off, v); } -inline static u32 pm2_RDAC_RD(struct pm2fb_par* p, s32 idx) +static inline u32 pm2_RDAC_RD(struct pm2fb_par* p, s32 idx) { int index = PM2R_RD_INDEXED_DATA; switch (p->type) { @@ -174,7 +174,7 @@ inline static u32 pm2_RDAC_RD(struct pm2fb_par* p, s32 idx) return pm2_RD(p, index); } -inline static void pm2_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) +static inline void pm2_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) { int index = PM2R_RD_INDEXED_DATA; switch (p->type) { @@ -190,7 +190,7 @@ inline static void pm2_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) pm2_WR(p, index, v); } -inline static void pm2v_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) +static inline void pm2v_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) { pm2_WR(p, PM2VR_RD_INDEX_LOW, idx & 0xff); mb(); @@ -200,7 +200,7 @@ inline static void pm2v_RDAC_WR(struct pm2fb_par* p, s32 idx, u32 v) #ifdef CONFIG_FB_PM2_FIFO_DISCONNECT #define WAIT_FIFO(p,a) #else -inline static void WAIT_FIFO(struct pm2fb_par* p, u32 a) +static inline void WAIT_FIFO(struct pm2fb_par* p, u32 a) { while( pm2_RD(p, PM2R_IN_FIFO_SPACE) < a ); mb(); diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index 815fbc8317f..16e37a535d8 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c @@ -43,6 +43,7 @@ #include <asm/io.h> #include <asm/irq.h> #include <asm/uaccess.h> +#include <asm/div64.h> #include <asm/arch/pxa-regs.h> #include <asm/arch/bitfield.h> #include <asm/arch/pxafb.h> @@ -460,7 +461,7 @@ static inline unsigned int get_pcd(unsigned int pixclock) * speeds */ pcd = (unsigned long long)get_lcdclk_frequency_10khz() * pixclock; - pcd /= 100000000 * 2; + do_div(pcd, 100000000 * 2); /* no need for this, since we should subtract 1 anyway. they cancel */ /* pcd += 1; */ /* make up for integer math truncations */ return (unsigned int)pcd; diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c index 6a9e183be41..ae297e22268 100644 --- a/drivers/video/riva/fbdev.c +++ b/drivers/video/riva/fbdev.c @@ -1826,7 +1826,7 @@ static void __devinit riva_get_EDID(struct fb_info *info, struct pci_dev *pdev) #ifdef CONFIG_PPC_OF if (!riva_get_EDID_OF(info, pdev)) printk(PFX "could not retrieve EDID from OF\n"); -#elif CONFIG_FB_RIVA_I2C +#elif defined(CONFIG_FB_RIVA_I2C) if (!riva_get_EDID_i2c(info)) printk(PFX "could not retrieve EDID from DDC/I2C\n"); #endif diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/s1d13xxxfb.c index 789de13f461..3848be2b9d2 100644 --- a/drivers/video/s1d13xxxfb.c +++ b/drivers/video/s1d13xxxfb.c @@ -67,12 +67,18 @@ static struct fb_fix_screeninfo __devinitdata s1d13xxxfb_fix = { static inline u8 s1d13xxxfb_readreg(struct s1d13xxxfb_par *par, u16 regno) { +#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_OPSPUT) || defined(CONFIG_PLAT_MAPPI3) + regno=((regno & 1) ? (regno & ~1L) : (regno + 1)); +#endif return readb(par->regs + regno); } static inline void s1d13xxxfb_writereg(struct s1d13xxxfb_par *par, u16 regno, u8 value) { +#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_OPSPUT) || defined(CONFIG_PLAT_MAPPI3) + regno=((regno & 1) ? (regno & ~1L) : (regno + 1)); +#endif writeb(value, par->regs + regno); } @@ -259,7 +265,11 @@ s1d13xxxfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, dbg("s1d13xxxfb_setcolreg: pseudo %d, val %08x\n", regno, pseudo_val); +#if defined(CONFIG_PLAT_MAPPI) + ((u32 *)info->pseudo_palette)[regno] = cpu_to_le16(pseudo_val); +#else ((u32 *)info->pseudo_palette)[regno] = pseudo_val; +#endif break; case FB_VISUAL_PSEUDOCOLOR: diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 2d29db7ef80..beeec7b5142 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c @@ -598,7 +598,7 @@ sa1100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, * requests for the LCD controller. If we hit this, it means we're * doing nothing but LCD DMA. */ -static unsigned int sa1100fb_display_dma_period(struct fb_var_screeninfo *var) +static inline unsigned int sa1100fb_display_dma_period(struct fb_var_screeninfo *var) { /* * Period = pixclock * bits_per_byte * bytes_per_transfer diff --git a/drivers/video/savage/savagefb_driver.c b/drivers/video/savage/savagefb_driver.c index 8fadcdae6f4..f4633d1891f 100644 --- a/drivers/video/savage/savagefb_driver.c +++ b/drivers/video/savage/savagefb_driver.c @@ -2113,7 +2113,7 @@ static int savagefb_suspend (struct pci_dev* dev, pm_message_t state) printk(KERN_DEBUG "state: %u\n", state); acquire_console_sem(); - fb_set_suspend(info, state); + fb_set_suspend(info, pci_choose_state(dev, state)); savage_disable_mmio(par); release_console_sem(); diff --git a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c index da8004e5d03..698ca9232e7 100644 --- a/drivers/video/tridentfb.c +++ b/drivers/video/tridentfb.c @@ -454,13 +454,16 @@ static struct accel_switch accel_image = { static void tridentfb_fillrect(struct fb_info * info, const struct fb_fillrect *fr) { int bpp = info->var.bits_per_pixel; - int col; + int col = 0; switch (bpp) { default: - case 8: col = fr->color; + case 8: col |= fr->color; + col |= col << 8; + col |= col << 16; break; case 16: col = ((u32 *)(info->pseudo_palette))[fr->color]; + break; case 32: col = ((u32 *)(info->pseudo_palette))[fr->color]; break; @@ -882,8 +885,9 @@ static int tridentfb_set_par(struct fb_info *info) write3X4(GraphEngReg, 0x80); //enable GE for text acceleration -// if (info->var.accel_flags & FB_ACCELF_TEXT) -//FIXME acc->init_accel(info->var.xres,bpp); +#ifdef CONFIG_FB_TRIDENT_ACCEL + acc->init_accel(info->var.xres,bpp); +#endif switch (bpp) { case 8: tmp = 0x00; break; @@ -900,7 +904,7 @@ static int tridentfb_set_par(struct fb_info *info) write3X4(DRAMControl, tmp); //both IO,linear enable write3X4(InterfaceSel, read3X4(InterfaceSel) | 0x40); - write3X4(Performance,0x20); + write3X4(Performance,0x92); write3X4(PCIReg,0x07); //MMIO & PCI read and write burst enable /* convert from picoseconds to MHz */ @@ -981,12 +985,14 @@ static int tridentfb_setcolreg(unsigned regno, unsigned red, unsigned green, t_outb(green>>10,0x3C9); t_outb(blue>>10,0x3C9); - } else - if (bpp == 16) /* RGB 565 */ - ((u32*)info->pseudo_palette)[regno] = (red & 0xF800) | - ((green & 0xFC00) >> 5) | ((blue & 0xF800) >> 11); - else - if (bpp == 32) /* ARGB 8888 */ + } else if (bpp == 16) { /* RGB 565 */ + u32 col; + + col = (red & 0xF800) | ((green & 0xFC00) >> 5) | + ((blue & 0xF800) >> 11); + col |= col << 16; + ((u32 *)(info->pseudo_palette))[regno] = col; + } else if (bpp == 32) /* ARGB 8888 */ ((u32*)info->pseudo_palette)[regno] = ((transp & 0xFF00) <<16) | ((red & 0xFF00) << 8) | diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index f3069b01e24..a272592b037 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c @@ -45,7 +45,7 @@ static struct fb_fix_screeninfo vesafb_fix __initdata = { }; static int inverse = 0; -static int mtrr = 1; +static int mtrr = 3; /* default to write-combining */ static int vram_remap __initdata = 0; /* Set amount of memory to be used */ static int vram_total __initdata = 0; /* Set total amount of memory */ static int pmi_setpal = 0; /* pmi for palette changes ??? */ @@ -204,8 +204,8 @@ static int __init vesafb_setup(char *options) pmi_setpal=0; else if (! strcmp(this_opt, "pmipal")) pmi_setpal=1; - else if (! strcmp(this_opt, "mtrr")) - mtrr=1; + else if (! strncmp(this_opt, "mtrr:", 5)) + mtrr = simple_strtoul(this_opt+5, NULL, 0); else if (! strcmp(this_opt, "nomtrr")) mtrr=0; else if (! strncmp(this_opt, "vtotal:", 7)) @@ -387,13 +387,39 @@ static int __init vesafb_probe(struct device *device) if (mtrr) { unsigned int temp_size = size_total; - /* Find the largest power-of-two */ - while (temp_size & (temp_size - 1)) - temp_size &= (temp_size - 1); - - /* Try and find a power of two to add */ - while (temp_size && mtrr_add(vesafb_fix.smem_start, temp_size, MTRR_TYPE_WRCOMB, 1)==-EINVAL) { - temp_size >>= 1; + unsigned int type = 0; + + switch (mtrr) { + case 1: + type = MTRR_TYPE_UNCACHABLE; + break; + case 2: + type = MTRR_TYPE_WRBACK; + break; + case 3: + type = MTRR_TYPE_WRCOMB; + break; + case 4: + type = MTRR_TYPE_WRTHROUGH; + break; + default: + type = 0; + break; + } + + if (type) { + int rc; + + /* Find the largest power-of-two */ + while (temp_size & (temp_size - 1)) + temp_size &= (temp_size - 1); + + /* Try and find a power of two to add */ + do { + rc = mtrr_add(vesafb_fix.smem_start, temp_size, + type, 1); + temp_size >>= 1; + } while (temp_size >= PAGE_SIZE && rc == -EINVAL); } } |