diff --git a/usermodule/uctx/.gitignore b/usermodule/uctx/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..1cc89bf0890546ce616908b445fbafecb547844d
--- /dev/null
+++ b/usermodule/uctx/.gitignore
@@ -0,0 +1,2 @@
+*.sw*
+binaries
diff --git a/usermodule/uctx/LICENSE b/usermodule/uctx/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4a6305cd4ca563979df92259285c03776ee687ea
--- /dev/null
+++ b/usermodule/uctx/LICENSE
@@ -0,0 +1,85 @@
+The MIT License (MIT)
+
+Copyright (c) 2020-2022 Øyvind Kolås
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+
+Unless specified otherwise (see below), the above license and copyright applies
+to all files in this repository.
+
+Individual files may include additional copyright holders.
+
+The various ports of MicroPython may include third-party software that is
+licensed under different terms. These licenses are summarised in the tree
+below, please refer to these files and directories for further license and
+copyright information. Note that (L)GPL-licensed code listed below is only
+used during the build process and is not part of the compiled source code.
+
+/ (MIT)
+    /drivers
+        /cc3000 (BSD-3-clause)
+        /cc3100 (BSD-3-clause)
+        /wiznet5k (BSD-3-clause)
+    /lib
+        /asf4 (Apache-2.0)
+        /axtls (BSD-3-clause)
+            /config
+                /scripts
+                    /config (GPL-2.0-or-later)
+                /Rules.mak (GPL-2.0)
+        /berkeley-db-1xx (BSD-4-clause)
+        /btstack (See btstack/LICENSE)
+        /cmsis (BSD-3-clause)
+        /crypto-algorithms (NONE)
+        /libhydrogen (ISC)
+        /littlefs (BSD-3-clause)
+        /lwip (BSD-3-clause)
+        /mynewt-nimble (Apache-2.0)
+        /nrfx (BSD-3-clause)
+        /nxp_driver (BSD-3-Clause)
+        /oofatfs (BSD-1-clause)
+        /pico-sdk (BSD-3-clause)
+        /re15 (BSD-3-clause)
+        /stm32lib (BSD-3-clause)
+        /tinytest (BSD-3-clause)
+        /tinyusb (MIT)
+        /uzlib (Zlib)
+    /logo (uses OFL-1.1)
+    /ports
+        /cc3200
+            /hal (BSD-3-clause)
+            /simplelink (BSD-3-clause)
+            /FreeRTOS (GPL-2.0 with FreeRTOS exception)
+        /stm32
+            /usbd*.c (MCD-ST Liberty SW License Agreement V2)
+            /stm32_it.* (MIT + BSD-3-clause)
+            /system_stm32*.c (MIT + BSD-3-clause)
+            /boards
+                /startup_stm32*.s (BSD-3-clause)
+                /*/stm32*.h (BSD-3-clause)
+            /usbdev (MCD-ST Liberty SW License Agreement V2)
+            /usbhost (MCD-ST Liberty SW License Agreement V2)
+        /teensy
+            /core (PJRC.COM)
+        /zephyr
+            /src (Apache-2.0)
+    /tools
+        /dfu.py (LGPL-3.0-only)
diff --git a/usermodule/uctx/examples/332pal.py b/usermodule/uctx/examples/332pal.py
new file mode 100755
index 0000000000000000000000000000000000000000..36688a0e0a7ee64cf3aefa8cc51c1af71062645e
--- /dev/null
+++ b/usermodule/uctx/examples/332pal.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env uctx
+
+import uimui
+exit=False
+while not exit:
+  uimui.start_frame()
+  uimui.label("foo")
+  valid_red=(0,40,80,140,174,209,233,255)  # 176
+  valid_green=(0,40,80,140,174,209,233,255)  # 176
+  valid_blue=(0,80,140,255)    
+
+  ctx = uimui.get_ctx()
+  y = 0
+  x = 0
+  dim = ctx.width / (36)
+  for green in valid_green:
+     for red in valid_red:
+         for blue in valid_blue:
+              real_blue = blue | (green &31) # mix in low bits of green
+              ctx.rectangle(x, y, dim, dim).rgb(red/255,green/255,real_blue/255).fill()
+              x += dim
+              if x + dim >= ctx.width:
+                  x = 0
+                  y += dim
+  if uimui.button("X", x= 0, y =0, width = ctx.width/10):
+    exit = True  
+  uimui.end_frame()
diff --git a/usermodule/uctx/examples/Calculator.py b/usermodule/uctx/examples/Calculator.py
new file mode 100755
index 0000000000000000000000000000000000000000..a9c8ad4370f2fe1a87de24a896cf5313545faefc
--- /dev/null
+++ b/usermodule/uctx/examples/Calculator.py
@@ -0,0 +1,242 @@
+#!/usr/bin/env uctx
+
+import canvas
+import micropython
+import gc
+
+class Calculator:
+    def __init__(self):
+        True
+    
+    def foo(self):
+        print("fooed")
+
+
+calc=Calculator()
+calc.foo()
+ctx=canvas.ctx
+o=ctx
+
+ctx.flags = ctx.HASH_CACHE | ctx.INTRA_UPDATE
+
+pointer_x = 0
+pointer_y = 0
+pointer_down = False
+
+pointer_was_down = False
+
+widget_font_size_vh = 0.12
+widget_bg=[70/255,70/255,90/255]
+widget_fg=[1.0,1.0,1.0]
+widget_marker=[1.0,0,0]
+widget_fs=0.1
+
+button_bg=widget_bg
+button_fg=widget_fg
+button_bg_active=widget_bg#[200,20,100]
+
+def inside_rect(u,v,x,y,w,h):
+    if u >= x and  u < x + w and v >= y and v < y + h:
+      return True
+    return False
+
+def button(x, y, w, h, label):
+    global pointer_down, pointer_was_down
+    result = False
+    ctx.font_size = ctx.height * widget_font_size_vh # why do we need this override
+    lwidth = ctx.text_width (label)
+    ctx.rectangle(x, y, w, h)
+    ctx.rgb(*button_bg)
+    if pointer_down and pointer_was_down == False and inside_rect(pointer_x,pointer_y,x,y,w,h):
+      result = True
+      ctx.rgb(*button_bg_active)    
+    ctx.fill()
+    ctx.rgb(*button_fg)
+    ctx.move_to(x + w/2-lwidth/2, y + h/2 + ctx.font_size/3)
+    ctx.text(label)
+    return result
+
+def toggle(x, y, w, h, label, value):
+    global pointer_down, pointer_was_down
+    result = value
+    ctx.font_size = ctx.height * widget_font_size_vh # why do we need this override
+    
+    if pointer_down and pointer_was_down == False and inside_rect(pointer_x,pointer_y,x,y,w,h):
+      result = not value
+      ctx.rectangle(x, y, w, h).rgb(*button_bg_active).fill()
+
+    ctx.rgb(*widget_fg)
+    ctx.move_to(x + ctx.font_size*0.1, y + ctx.font_size*0.8)
+    ctx.text(label)
+    ctx.save()
+    ctx.text_align=ctx.RIGHT
+    ctx.move_to(x+w,y+ctx.font_size*0.8)
+    if value:
+        ctx.text("on")
+    else:
+        ctx.text("off")
+    ctx.restore()
+
+    return value
+
+
+def coords_press(x, y):
+    global pointer_x, pointer_y, pointer_down
+    pointer_x = x
+    pointer_y = y
+    pointer_down = True
+
+def coords_motion(x, y):
+    global pointer_x, pointer_y
+    pointer_x = x
+    pointer_y = y
+
+def coords_release(x, y):
+    global pointer_x, pointer_y, pointer_down
+    pointer_x = x
+    pointer_y = y
+    pointer_down = False
+
+exit = False
+need_clear = True
+frame_no = 0
+value = 0
+accumulator = 0
+op = ""
+in_decimal = 0  # higher than zero means were in decimals at that digit
+hex_mode = False
+
+def compute_op():
+    global need_clear,value, accumulator, op, in_decimals
+    if op == '+':
+      value = accumulator + value
+      accumulator = 0
+    if op == '-':
+      value = accumulator - value
+      accumulator = 0
+    if op == 'x':
+      value = accumulator * value
+      accumulator = 0
+    if op == '/':
+      if value != 0.0:
+         value = accumulator / value
+      else:
+         value = -0.0
+      accumulator = 0
+    op = ''
+    need_clear = True
+
+def calc_loop():
+    global hex_mode,need_clear,value, accumulator, in_decimal, op, exit, pointer_was_down, pointer_down
+    bw = ctx.width * 0.13
+    bh = ctx.height * 0.19
+    bsx = ctx.width * 0.14
+    bsy = ctx.height * 0.2
+    ctx.start_frame()
+    ctx.translate(0,20)
+    ctx.rectangle(0,0,ctx.width, ctx.height)#,ctx.height)
+    o.listen(o.PRESS, lambda e:coords_press(e.x, e.y))
+    o.listen(o.MOTION, lambda e:coords_motion(e.x, e.y))
+    o.listen(o.RELEASE, lambda e:coords_release(e.x, e.y))
+    
+    ctx.gray(0).fill()
+
+    ctx.font_size = ctx.height * widget_font_size_vh
+    ctx.rgb(*widget_fg)
+    
+    ctx.text_align = ctx.RIGHT
+    ctx.move_to(bsx*6,ctx.font_size*0.8)
+    if hex_mode:
+      value = int(value)
+      ctx.text(hex(value))
+    else:
+      ctx.text(str(value))
+    ctx.text_align = ctx.LEFT
+
+    if accumulator != 0:
+        ctx.move_to(0,ctx.font_size*0.8)
+        ctx.text(str(accumulator) + " " + op)
+
+
+    for digit in range(1,10):
+      if button((((digit-1)%3)+1) * bsx, (3-int((digit-1)/3)) * bsy, bw, bh, str(digit)):
+        if need_clear:
+            value = 0
+        need_clear = False
+        if in_decimal>0:
+            value = value + 1.0/pow(10,in_decimal)*digit
+            in_decimal+=1
+        else:
+            value = value * 10 + digit
+    if button(0 * bsx, 3 * bsy, bw, bh, "0"):
+        if need_clear:
+           value = 0
+        need_clear = False
+
+        if in_decimal>0:
+            value = value + 0.0
+        else:
+            value = value * 10 + 0
+        
+    if button(0 * bsx, 2 * bsy, bw, bh, "."):
+        in_decimal = 1
+    if button(4 * bsx, 3 * bsy, bw * 1.5, bh, "="):
+        compute_op()
+        
+    if button(5 * bsx, 1 * bsy, bw, bh, "/"):
+        compute_op()
+        accumulator = value
+        value = 0
+        op = "/"
+        in_decimal = 0
+    if button(6 * bsx, 2 * bsy, bw, bh, "sqrt"):
+        value = pow(value, 0.5)
+        op = ""
+        need_clear = 1
+        in_decimal = 0
+
+    if hex_mode:
+      if button(6 * bsx, 1 * bsy, bw, bh, "hex"):
+        hex_mode = False
+    else:
+      if button(6 * bsx, 1 * bsy, bw, bh, "dec"):
+        hex_mode = True
+
+    if button(5.5 * bsx, 3 * bsy, 1.5 * bw, bh, "C"):
+        value = 0
+        accumulator = 0
+        in_decimal = 0
+    if button(4 * bsx, 2 * bsy, bw, bh, "+"):
+        compute_op()
+        accumulator = value
+        value = 0
+        op = "+"
+        in_decimal = 0
+    if button(5 * bsx, 2 * bsy, bw, bh, "x"):
+        compute_op()        
+        accumulator = value
+        value = 0
+        op = "x"
+        in_decimal = 0
+    if button(4 * bsx, 1 * bsy, bw, bh, "-"):
+        compute_op()
+        accumulator = value
+        value = 0
+        op = "-"
+        in_decimal = 0
+    if button(0, 1 * bsy, bw, bh, "q"):
+        exit = True
+    
+    #ctx.rectangle(pointer_x-2, pointer_y-2, 4, 4).color([255,0,0]).fill()
+    pointer_was_down = pointer_down # must happen after all the buttons
+    #micropython.mem_info()
+    ctx.end_frame()
+    gc.collect()    
+    
+import micropython
+    
+while not exit:
+    calc_loop()
+    #micropython.mem_info(1)
+
+
diff --git a/usermodule/uctx/examples/canvas.py b/usermodule/uctx/examples/canvas.py
new file mode 100755
index 0000000000000000000000000000000000000000..ed978cf72f31d3edbab95759e73ed7cef0777495
--- /dev/null
+++ b/usermodule/uctx/examples/canvas.py
@@ -0,0 +1,300 @@
+#!/usr/bin/env uctx
+
+import os
+import sys
+import ctx as modctx
+
+_ctx = None
+
+# this is the function exposed to the outside
+def get_ctx(): 
+  global _ctx
+  if _ctx != None:  # we try to only run once
+      return _ctx
+
+  if sys.platform == 'linux':
+    _ctx = unix_get_ctx ()
+  elif sys.platform == 'javascript':
+    _ctx = wasm_get_ctx ()
+  else:
+    print('you need to configure a display config for ctx in canvas.py')
+
+    #_ctx = rp_pico_waveshare_240x240_joystick()
+    _ctx = rp_pico_waveshare_480x320_res_touch()
+    #_ctx = rp_pico_waveshare_240x320_res_touch()
+    #_ctx = esp32_waveshare_320x240()
+
+    #_ctx = dummy_get_ctx ()
+  return _ctx
+
+# The canvas module provides backend integration and configuration for
+# ctx, by importing canvas.
+
+scratch_size = 53 * 1024
+    # for the cb backend used on microcontrollers, how much heap
+    # to use for a scratch compositing buffer.
+    # For a 480x320 display:
+    #   14kb is enough for 2x2 GRAY2
+    #                      5x5 LOWRES
+    #   23kb is enough for 2x2 GRAY4 
+    #                      3x3 RGB332
+    #                      4x4 LOWRES
+    #                      1x1 GRAY1  (not currently available)
+    #   42kb is enough for 2x2 RGB332
+    #                      1x1 GRAY2
+    #                      3x3 LOWRES
+
+canvas_flags = modctx.INTRA_UPDATE|modctx.LOWFI
+    # the default flags the cb backend gets initialized with
+    # possible values:
+    #   INTRA_UPDATE : call the event handling between renders in hifi mode
+    #   HASH_CACHE   : keep track of rendered content and only re-render changed areas
+    #   LOWFI        : do preview rendering with RGB565
+    #   RGB332       : trade color fidelity for higher res preview
+    #   GRAY8        : full grayscale
+    #   GRAY4        : 16 level gray
+    #   GRAY2        : 4 level gray
+    #   CBRLE        : constant bitrate RLE
+
+# when non-zero override board default
+canvas_width  = 0
+canvas_height = 0
+
+##### end of basic configuration ###########
+############################################
+############################################
+
+pointer_down = False
+pointer_x = 0
+pointer_y = 0
+
+# this is currently used by one of the backends
+# adding gpio based input for more boards should
+# follow the same pattern
+
+keys={}
+key_state={}
+def get_pin_events(ctx):
+    ret = False
+    for name,pin in keys.items():
+       if pin.value()== 0:
+           if key_state[name] != 0:
+               key_state[name]=0
+               ctx.key_down(0, name, 0)
+               ctx.key_press(0, name, 0)
+               ret = True
+       else:
+          if key_state[name] != 1:
+               ctx.key_up(0, name, 0)
+               key_state[name]=1
+               ret = True
+    return ret
+
+
+def rp_waveshare_240x240_joystick():
+    import machine
+    from machine import Pin,SPI,PWM
+    global keys,key_state,canvas_width, canvas_height
+    machine.freq(266_000_000)
+
+
+    keys['a']= Pin(15,Pin.IN,Pin.PULL_UP)
+    keys['b'] = Pin(17,Pin.IN,Pin.PULL_UP)
+    keys['x'] = Pin(19 ,Pin.IN,Pin.PULL_UP)
+    keys['y'] = Pin(21 ,Pin.IN,Pin.PULL_UP)
+    
+    keys['up'] = Pin(2,Pin.IN,Pin.PULL_UP)
+    keys['down'] = Pin(18,Pin.IN,Pin.PULL_UP)
+    keys['left'] = Pin(16,Pin.IN,Pin.PULL_UP)
+    keys['right'] = Pin(20,Pin.IN,Pin.PULL_UP)
+    keys['space'] = Pin(3,Pin.IN,Pin.PULL_UP)
+
+    for key,value in keys.items():
+       key_state[key]=1
+        
+    import lcd13
+    import machine
+    display=lcd13.LCD_1inch3()
+    
+    if canvas_width == 0:
+        canvas_width = 240
+    if canvas_height == 0:
+        canvas_height = 240
+
+    ret_ctx = modctx.Context(
+      width=canvas_width,
+      height=canvas_height,
+      format=modctx.RGB565_BYTESWAPPED,
+      # function to update a subregion of target framebuffer using prepared buf
+      # with appropriate stride
+      set_pixels=lambda x, y, w, h, buf: display.blit_buffer(buf, x, y, w, h),
+      update=lambda:get_pin_events (ret_ctx),
+      memory_budget=scratch_size,
+      flags=canvas_flags)
+    return ret_ctx
+def update_events(lcd):
+   global pointer_down, pointer_x, pointer_y
+   touch=lcd.touch_get()
+   if(touch):
+      pointer_x=touch[0]
+      pointer_y=touch[1]
+      if not pointer_down:
+         _ctx.pointer_press(pointer_x,pointer_y, 0, 0)
+      else:
+         _ctx.pointer_motion(pointer_x,pointer_y, 0, 0)
+      pointer_down = True
+      return True # abort rendering if in slow refresh
+   else:
+      if pointer_down:
+         _ctx.pointer_release(pointer_x,pointer_y, 0, 0)
+         pointer_down = False
+         return True
+      return False
+
+def rp_pico_waveshare_480x320_res_touch():
+    global canvas_width, canvas_height
+    import ililcd
+    lcd=ililcd.LCD()#480, 320, 15, 8, 9, 10, 11, 12, 13)
+    if canvas_width == 0:
+        canvas_width = 480
+    if canvas_height == 0:
+        canvas_height = 320
+
+    return modctx.Context(
+      width=canvas_width,
+      height=canvas_height,
+                             
+      # the format specified here is the format of the lcd
+      # not neccesarily the format used for rendering
+      format=modctx.RGB565_BYTESWAPPED,
+
+      # function to update a subregion of target framebuffer using prepared buf
+      # with appropriate stride
+      set_pixels=lambda x, y, w, h, buf: lcd.blit_buffer(buf, x, y, w, h),
+                             
+      # callback to be invoked in between batches of render+blit
+      # if True is returned progressive updates are aborted
+      # this is where touch events and button presses should be fed
+      # to ctx
+      update=lambda : update_events(lcd),
+      memory_budget=scratch_size,
+      flags=canvas_flags)
+
+def dummy_get_ctx():
+    global canvas_width, canvas_height
+    if canvas_width == 0:
+        canvas_width = 240
+    if canvas_height == 0:
+        canvas_height = 240
+
+    return modctx.Context(
+      width=canvas_width,
+      height=canvas_height,
+      format=modctx.RGB565_BYTESWAPPED,
+      # function to update a subregion of target framebuffer using prepared buf
+      # with appropriate stride
+      set_pixels = lambda x, y, w, h, buf: True,
+      update= lambda : False,
+      memory_budget=scratch_size,
+      flags=canvas_flags)
+
+def esp32_waveshare_320x240():
+    import st7789py
+    import machine    
+    machine.freq(240_000_000) # we want full tilt!
+    spi = machine.SPI(2, baudrate=40000000, polarity=1)
+    display = st7789py.ST7789(
+        spi, 240, 320,
+        reset=machine.Pin(17, machine.Pin.OUT),
+        dc=machine.Pin(16, machine.Pin.OUT),
+        cs=machine.Pin(5, machine.Pin.OUT),
+        xstart=0,ystart=0
+    )
+    display.init()
+    display.inversion_mode(False)
+
+    if canvas_width == 0:
+        canvas_width = 240
+    if canvas_height == 0:
+        canvas_height = 320
+
+    return modctx.Context(
+      width=canvas_width,
+      height=canvas_height,
+      format=modctx.RGB565_BYTESWAPPED,
+      # function to update a subregion of target framebuffer using prepared buf
+      # with appropriate stride
+      set_pixels = lambda x, y, w, h, buf: display.blit_buffer(buf, x, y, w, h),
+      update= lambda : False,
+      memory_budget=scratch_size,
+      flags=canvas_flags)
+  
+def rp_pico_waveshare_240x320_res_touch():
+    global canvas_width, canvas_height
+    import st7789py
+    import time, machine
+    machine.Pin(13,machine.Pin.OUT).low()
+    spi = machine.SPI(1, baudrate=50000000, phase=1,polarity=1)
+    display = st7789py.ST7789(spi, 240, 320,
+        reset=machine.Pin(15, machine.Pin.OUT),
+        backlight=machine.Pin(13, machine.Pin.OUT),
+        sck=10,#machine.Pin(10, machine.Pin.OUT),        
+        mosi=11,
+        miso=12,
+        dc=machine.Pin(8, machine.Pin.OUT),
+        cs=machine.Pin(9, machine.Pin.OUT),xstart=0,ystart=0,tp_irq=17,tp_cs=18)
+    display.init()
+    if canvas_width == 0:
+        canvas_width = 240
+    if canvas_height == 0:
+        canvas_height = 320
+    
+    return modctx.Context(
+      width=canvas_width,
+      height=canvas_height,
+      format=modctx.RGB565_BYTESWAPPED,
+      # function to update a subregion of target framebuffer using prepared buf
+      # with appropriate stride
+      set_pixels=lambda x, y, w, h, buf: display.blit_buffer(buf, x, y, w, h),
+      update = lambda : update_events(display),
+      memory_budget=scratch_size,
+      flags=canvas_flags)
+
+def reset_terminal():
+    os.system('reset')
+
+def unix_get_ctx():  # perhaps turn this into an attribute of the module?
+  print("\e[H\e[2J")
+  sys.atexit(reset_terminal)
+  return modctx.Context()
+
+def wasm_get_ctx():
+  ctx = modctx.Context(memory_budget=scratch_size)
+  ctx.flags=canvas_flags
+  return ctx
+
+def __getattr__(name):
+    if name == 'ctx2d':
+        return get_ctx()    
+    elif name == 'ctx':
+        return get_ctx()
+    elif name == 'width':
+        return get_ctx().width
+    elif name == 'height':
+        return get_ctx().height
+    raise AttributeError("module '{__name__}' has no attribute '{name}'")
+
+if __name__=='__main__':
+    ctx = get_ctx()
+    frames=60
+    for frame in range(0,frames):
+      ctx.start_frame()
+      ctx.rgb(50/255,50/255,30/255).rectangle(0,0,ctx.width,ctx.height).fill()
+      dim = ctx.height * frame / (frames-2.0)
+      if frame >= frames-2:
+        dim = ctx.height
+      ctx.logo(ctx.width/2,ctx.height/2, dim)
+      ctx.end_frame()
+
+
+
diff --git a/usermodule/uctx/examples/fonts.py b/usermodule/uctx/examples/fonts.py
new file mode 100755
index 0000000000000000000000000000000000000000..428cb18d25efd5f32fc7fc5ad64cb2961c7ef38c
--- /dev/null
+++ b/usermodule/uctx/examples/fonts.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env uctx
+import canvas
+ctx = canvas.get_ctx()
+
+ctx.flags=0
+
+frames=400
+for frame in range(0,frames):
+        ctx.start_frame()
+        ctx.rgb(50/255,50/255,30/255).rectangle(0,0,ctx.width,ctx.height).fill()
+        dim = ctx.height * frame / (frames-2.0)
+        ctx.rgb(1.0,1.0,1.0)
+        ctx.font_size= ctx.height * 0.15
+        ctx.save()
+        ctx.translate(0,-frame/frames * ctx.height *2.5)
+        ctx.move_to(0,ctx.height)
+        ctx.rgba(1.0,0.0,0.0, .85)
+
+        for font in ('Sans','Regular',
+                     'Sans Bold','Bold',
+                     "Courier Italic",
+                     'Times',
+                     'Mono',
+                     'Arial Bold',
+                     'Foobar Bold Italic',
+                     'Helvetica Bold',
+                     'Mono Bold',
+                     'Mono Italic',
+                     'Bold Italic', 
+                     'Times Italic'):
+          ctx.font=font
+          ctx.text(font+'\n')
+
+        ctx.rgba(1.0,1.0,1.0, .85)
+        
+        font_no = 0 
+        
+        while ctx.get_font_name(font_no) != None:
+          font = ctx.get_font_name(font_no)
+          font_no+=1
+          ctx.font=font
+          ctx.text(font+"\n")
+
+          dim=ctx.height
+        ctx.restore()
+        ctx.end_frame()
+
+
diff --git a/usermodule/uctx/examples/ililcd.py b/usermodule/uctx/examples/ililcd.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4895ceb636e4d985bf34c9c9ef3f0416359939e
--- /dev/null
+++ b/usermodule/uctx/examples/ililcd.py
@@ -0,0 +1,183 @@
+from machine import Pin,SPI,PWM
+import framebuf
+import time
+import os
+
+LCD_DC   = 8
+LCD_CS   = 9
+LCD_SCK  = 10
+LCD_MOSI = 11
+LCD_MISO = 12
+LCD_BL   = 13
+LCD_RST  = 15
+TP_CS    = 16
+TP_IRQ   = 17
+
+class LCD():
+
+    def __init__(self):
+        self.RED   =   0x07E0
+        self.GREEN =   0x001f
+        self.BLUE  =   0xf800
+        self.WHITE =   0xffff
+        self.BLACK =   0x0000
+        
+        self.width = 480
+        self.height = 160
+        
+        self.cs = Pin(LCD_CS,Pin.OUT)
+        self.rst = Pin(LCD_RST,Pin.OUT)
+        self.dc = Pin(LCD_DC,Pin.OUT)
+        
+        self.tp_cs =Pin(TP_CS,Pin.OUT)
+        self.irq = Pin(TP_IRQ,Pin.IN)
+        
+        self.cs(1)
+        self.dc(1)
+        self.rst(1)
+        self.tp_cs(1)
+        self.spi = SPI(1,60_000_000,sck=Pin(LCD_SCK),mosi=Pin(LCD_MOSI),miso=Pin(LCD_MISO))
+              
+        self.init_display()
+
+        
+    def write_cmd(self, cmd):
+        self.cs(1)
+        self.dc(0)
+        self.cs(0)
+        self.spi.write(bytearray([cmd]))
+        self.cs(1)
+
+    def write_data(self, buf):
+        self.cs(1)
+        self.dc(1)
+        self.cs(0)
+        #self.spi.write(bytearray([0X00]))
+        self.spi.write(bytearray([buf]))
+        self.cs(1)
+
+
+    def init_display(self):
+        """Initialize dispaly"""  
+        self.rst(1)
+        time.sleep_ms(5)
+        self.rst(0)
+        time.sleep_ms(10)
+        self.rst(1)
+        time.sleep_ms(5)
+        self.write_cmd(0x21)
+        self.write_cmd(0xC2)
+        self.write_data(0x33)
+        self.write_cmd(0XC5)
+        self.write_data(0x00)
+        self.write_data(0x1e)
+        self.write_data(0x80)
+        self.write_cmd(0xB1)
+        self.write_data(0xB0)
+        self.write_cmd(0x36)
+        self.write_data(0x28)
+        self.write_cmd(0XE0)
+        self.write_data(0x00)
+        self.write_data(0x13)
+        self.write_data(0x18)
+        self.write_data(0x04)
+        self.write_data(0x0F)
+        self.write_data(0x06)
+        self.write_data(0x3a)
+        self.write_data(0x56)
+        self.write_data(0x4d)
+        self.write_data(0x03)
+        self.write_data(0x0a)
+        self.write_data(0x06)
+        self.write_data(0x30)
+        self.write_data(0x3e)
+        self.write_data(0x0f)
+        self.write_cmd(0XE1)
+        self.write_data(0x00)
+        self.write_data(0x13)
+        self.write_data(0x18)
+        self.write_data(0x01)
+        self.write_data(0x11)
+        self.write_data(0x06)
+        self.write_data(0x38)
+        self.write_data(0x34)
+        self.write_data(0x4d)
+        self.write_data(0x06)
+        self.write_data(0x0d)
+        self.write_data(0x0b)
+        self.write_data(0x31)
+        self.write_data(0x37)
+        self.write_data(0x0f)
+        self.write_cmd(0X3A)
+        self.write_data(0x55)
+        self.write_cmd(0x11)
+        time.sleep_ms(120)
+        self.write_cmd(0x29)
+        
+        self.write_cmd(0xB6)
+        self.write_data(0x00)
+        self.write_data(0x62)
+        
+        self.write_cmd(0x36)
+        self.write_data(0x28)
+    def blit_buffer(self, buffer,x,y,w,h):
+        self.write_cmd(0x2A)
+        self.write_data(int(x/256))
+        self.write_data(int(x&255))
+        self.write_data(int((x+w-1)/256))
+        self.write_data(int((x+w-1)&255))
+
+        self.write_cmd(0x2B)
+        self.write_data(int(y/256))
+        self.write_data(int(y&255))
+        self.write_data(int((y+h-1)/256))
+        self.write_data(int((y+h-1)&255))
+        
+        self.write_cmd(0x2C)
+        
+        self.cs(1)
+        self.dc(1)
+        self.cs(0)
+        self.spi.write(buffer)
+        self.cs(1)
+    def bl_ctrl(self,duty):
+        pwm = PWM(Pin(LCD_BL))
+        pwm.freq(1000)
+        if(duty>=100):
+            pwm.duty_u16(65535)
+        else:
+            pwm.duty_u16(655*duty)
+    def touch_get(self): 
+        if self.irq() == 0:
+            self.spi = SPI(1,5_000_000,sck=Pin(LCD_SCK),mosi=Pin(LCD_MOSI),miso=Pin(LCD_MISO))
+            self.tp_cs(0)
+            X_Point = 0
+            Y_Point = 0
+            for i in range(0,3):
+                self.spi.write(bytearray([0XD0]))
+                Read_date = self.spi.read(2)
+                time.sleep_us(10)
+                Y_Point=Y_Point+(((Read_date[0]<<8)+Read_date[1])>>3)
+                
+                self.spi.write(bytearray([0X90]))
+                Read_date = self.spi.read(2)
+                X_Point=X_Point+(((Read_date[0]<<8)+Read_date[1])>>3)
+
+            X_Point=X_Point/3
+            Y_Point=Y_Point/3
+            
+            self.tp_cs(1) 
+            self.spi = SPI(1,60_000_000,sck=Pin(LCD_SCK),mosi=Pin(LCD_MOSI),miso=Pin(LCD_MISO))
+
+            X_Point = int((X_Point-430)*480/3270)
+            if(X_Point>480):
+                X_Point = 480
+            elif X_Point<0:
+                X_Point = 0
+            Y_Point = 320-int((Y_Point-430)*320/3270)
+
+
+            Result_list = [X_Point,Y_Point]
+            #print(Result_list)
+            return(Result_list)
+
diff --git a/usermodule/uctx/examples/lcd13.py b/usermodule/uctx/examples/lcd13.py
new file mode 100644
index 0000000000000000000000000000000000000000..e5d66528d065fff744f6076c8c31754786f92dcb
--- /dev/null
+++ b/usermodule/uctx/examples/lcd13.py
@@ -0,0 +1,146 @@
+from machine import Pin,SPI,PWM
+import framebuf
+import time
+import os
+
+BL = 13
+DC = 8
+RST = 12
+MOSI = 11
+SCK = 10
+CS = 9
+
+
+class LCD_1inch3():#framebuf.FrameBuffer):
+    def __init__(self):
+        pwm = PWM(Pin(BL))
+        pwm.freq(1000)
+        pwm.duty_u16(int(65535*0.3))#max 65535
+        
+        self.width = 240
+        self.height = 240
+        
+        self.cs = Pin(CS,Pin.OUT)
+        self.rst = Pin(RST,Pin.OUT)
+        self.cs(1)
+        self.spi = SPI(1,80_000_000,polarity=0, phase=0,sck=Pin(SCK),mosi=Pin(MOSI),miso=None)
+        self.dc = Pin(DC,Pin.OUT)
+        self.dc(1)
+        self.init_display()
+    def write_cmd(self, cmd):
+        self.cs(1)
+        self.dc(0)
+        self.cs(0)
+        self.spi.write(bytearray([cmd]))
+        self.cs(1)
+
+    def write_data(self, buf):
+        self.cs(1)
+        self.dc(1)
+        self.cs(0)
+        self.spi.write(bytearray([buf]))
+        self.cs(1)
+
+    def init_display(self):
+        """Initialize dispaly"""  
+        self.rst(1)
+        self.rst(0)
+        self.rst(1)
+        
+        self.write_cmd(0x36)
+        self.write_data(0x70)
+
+        self.write_cmd(0x3A) 
+        self.write_data(0x05)
+
+        self.write_cmd(0xB2)
+        self.write_data(0x0C)
+        self.write_data(0x0C)
+        self.write_data(0x00)
+        self.write_data(0x33)
+        self.write_data(0x33)
+
+        self.write_cmd(0xB7)
+        self.write_data(0x35) 
+
+        self.write_cmd(0xBB)
+        self.write_data(0x19)
+
+        self.write_cmd(0xC0)
+        self.write_data(0x2C)
+
+        self.write_cmd(0xC2)
+        self.write_data(0x01)
+
+        self.write_cmd(0xC3)
+        self.write_data(0x12)   
+
+        self.write_cmd(0xC4)
+        self.write_data(0x20)
+
+        self.write_cmd(0xC6)
+        self.write_data(0x0F) 
+
+        self.write_cmd(0xD0)
+        self.write_data(0xA4)
+        self.write_data(0xA1)
+
+        self.write_cmd(0xE0)
+        self.write_data(0xD0)
+        self.write_data(0x04)
+        self.write_data(0x0D)
+        self.write_data(0x11)
+        self.write_data(0x13)
+        self.write_data(0x2B)
+        self.write_data(0x3F)
+        self.write_data(0x54)
+        self.write_data(0x4C)
+        self.write_data(0x18)
+        self.write_data(0x0D)
+        self.write_data(0x0B)
+        self.write_data(0x1F)
+        self.write_data(0x23)
+
+        self.write_cmd(0xE1)
+        self.write_data(0xD0)
+        self.write_data(0x04)
+        self.write_data(0x0C)
+        self.write_data(0x11)
+        self.write_data(0x13)
+        self.write_data(0x2C)
+        self.write_data(0x3F)
+        self.write_data(0x44)
+        self.write_data(0x51)
+        self.write_data(0x2F)
+        self.write_data(0x1F)
+        self.write_data(0x1F)
+        self.write_data(0x20)
+        self.write_data(0x23)
+        
+        self.write_cmd(0x21)
+
+        self.write_cmd(0x11)
+
+        self.write_cmd(0x29)
+
+    def blit_buffer(self, buffer,x,y,w,h):
+        self.write_cmd(0x2A)
+        self.write_data(int(x/256))
+        self.write_data(int(x&255))
+        self.write_data(int((x+w-1)/256))
+        self.write_data(int((x+w-1)&255))
+
+        self.write_cmd(0x2B)
+        self.write_data(int(y/256))
+        self.write_data(int(y&255))
+        self.write_data(int((y+h-1)/256))
+        self.write_data(int((y+h-1)&255))
+        
+        self.write_cmd(0x2C)
+        
+        self.cs(1)
+        self.dc(1)
+        self.cs(0)
+        self.spi.write(buffer)
+        self.cs(1)
+
diff --git a/usermodule/uctx/examples/menu.py b/usermodule/uctx/examples/menu.py
new file mode 100755
index 0000000000000000000000000000000000000000..00651f3e2645c3e2fe740f363b9d3690112eea49
--- /dev/null
+++ b/usermodule/uctx/examples/menu.py
@@ -0,0 +1,365 @@
+#!/usr/bin/env uctx
+
+# If you are reading this on the web, this file is probably part of your
+# persistent micropython filsystem on this URL (stored in your browser).
+# as part of a rapid protoyping environment.
+#
+# main.py and canvas.py are copied afresh from the server on each reload, if
+# canvas.py is missing all the preloaded contents are brought back. Navigate
+# filesystem in dropdown, create files and folders by specifying paths to save.
+#
+# press ctrl+return to run code
+#
+
+import canvas # this contains the python configuration to create a context
+import io,os,gc,time,sys
+
+ctx=canvas.ctx
+
+clientflags = ctx.flags # the flags used for launching clients
+
+# override client flags
+clientflags = ctx.HASH_CACHE | ctx.RGB332
+# and set the flags specific for the launcher
+ctx.flags |= ctx.HASH_CACHE | ctx.GRAY4
+
+light_red=(255/255,80/255,80/255)
+white=(1.0,1.0,1.0)
+black=(0,0,0)
+dark_gray=(80/255,80/255,80/255)
+light_gray=(170/255,170/255,170/255)
+
+wallpaper_bg    = black
+document_bg     = white
+document_fg     = black
+toolbar_bg      = dark_gray
+toolbar_fg      = white
+button_bg       = dark_gray
+button_fg       = white
+dir_selected_bg = white
+dir_selected_fg = black
+dir_entry_fg    = white
+scrollbar_fg    = dark_gray
+
+button_height_vh = 0.33
+button_width_vh  = 0.3
+font_size_vh     = 0.11
+
+if ctx.width < ctx.height:
+  font_size_vh = 0.06
+  button_width_vh = 0.2
+
+cur = 0
+def set_cur(event, no):
+    global cur
+    cur=no
+    return 0
+
+maxframe=10
+def linear(start_val,end_val):
+  return (frame/maxframe)*(end_val-start_val)+start_val
+
+def mbutton(ctx, x, y, label, cb, user_data):
+   ctx.save()
+   ctx.font_size *= 0.75
+   ctx.translate(x, y)
+   ctx.begin_path().rectangle(0,0, ctx.height*button_width_vh * 0.95, ctx.height * button_height_vh * 0.95)
+   ctx.listen_stop_propagate(ctx.PRESS, lambda e:cb(e, e.user_data), user_data)
+   ctx.rgb(*button_bg).fill()
+   ctx.rgb(*button_fg).move_to(ctx.font_size/3, ctx.height * button_height_vh / 2).text(label)
+   ctx.restore()
+
+def mbutton_thin(ctx, x, y, label, cb, user_data):
+   ctx.save()
+   ctx.font_size *= 0.8
+   ctx.translate(x, y)
+   ctx.begin_path().rectangle(0,0, ctx.height*button_width_vh * 0.95, ctx.font_size * 3)
+   ctx.listen_stop_propagate(ctx.PRESS, lambda e:cb(e, e.user_data), user_data)
+   ctx.begin_path().rectangle(0,0, ctx.height*button_width_vh * 0.95, ctx.font_size)
+
+   ctx.rgb(*button_bg).fill()
+   ctx.rgb(*button_fg).move_to(ctx.font_size/3, ctx.font_size*0.8).text(label)
+   ctx.restore()
+
+response = False
+
+def respond(val):
+    global response
+    response = val
+
+more_actions=False
+def show_more_cb(event, userdata):
+    global more_actions
+    more_actions = True
+    #event.stop_propagate=1
+
+def hide_more_cb(userdata):
+    global more_actions
+    more_actions = False
+    #event.stop_propagate=1
+
+
+def remove_cb(event, path):
+    global more_actions
+    os.remove(path)
+    more_actions = False
+    #event.stop_propagate=1
+
+offset=0
+
+def drag_cb(event):
+    global offset
+    offset -=event.delta_y/(font_size_vh*ctx.height) #20.0
+
+view_file=""
+run_file=False
+frame_no = 0
+
+def run_cb(event, path):
+    global run_file
+    run_file = path
+
+def view_cb(event, path):
+    global view_file, offset
+    offset = 0
+    view_file = path
+    #event.stop_propagate=1
+
+def space_cb(event):
+    run_cb(None, current_file)
+    print(event.string)
+
+def up_cb(event):
+    global cur
+    cur -= 1
+    if cur <= 0:
+        cur = 0
+
+def down_cb(event):
+    global cur
+    cur += 1
+
+def exit_cb(event):
+    global main_exit
+    main_exit = True
+
+import micropython
+
+def dir_view(ctx):
+   global cur,frame_no,current_file,offset
+   frame_no += 1
+
+#   if cur > 4:
+       
+
+   #gc.collect()
+   ctx.start_frame()
+   #micropython.mem_info()
+   ctx.add_key_binding("space", "", "", space_cb)
+   ctx.add_key_binding("up", "", "", up_cb)
+   ctx.add_key_binding("down", "", "", down_cb)
+   ctx.add_key_binding("q", "", "", exit_cb)
+
+   ctx.font_size=ctx.height*font_size_vh#32
+
+   if (offset ) < cur - (ctx.height/ctx.font_size) * 0.75:
+     offset = cur - (ctx.height/ctx.font_size)*0.42
+   if (offset ) > cur - (ctx.height/ctx.font_size) * 0.2:
+     offset = cur - (ctx.height/ctx.font_size)*0.42
+   if offset < 0:
+     offset = 0
+
+
+
+   y = ctx.font_size - offset * ctx.font_size
+   no = 0 
+      
+   ctx.rectangle(0,0,ctx.width,ctx.height).rgb(0.0,0.0,0.0).fill()
+   #ctx.listen(ctx.MOTION, drag_cb)
+   #ctx.begin_path()
+   
+   current_file = ""
+
+   if hasattr(os, 'listdir'):
+     file_list = os.listdir('/')
+   else:
+     file_list = []
+     for f in os.ilistdir('/'):
+         file_list.append(f[0])
+   file_list.sort()
+
+   for file in file_list:        
+    if file[0] != '.':
+      ctx.rectangle(ctx.height * button_width_vh * 1.2,y-ctx.font_size*0.75,
+                  ctx.width - ctx.height * button_width_vh * 1.2, ctx.font_size)
+      if no == cur:
+        ctx.rgb(*dir_selected_bg)
+        current_file = file
+        ctx.fill()
+        ctx.rgb(*dir_selected_fg)
+      else:
+        ctx.listen(ctx.PRESS, lambda e:set_cur(e, e.user_data), no)
+        ctx.begin_path()
+        ctx.rgb(*dir_entry_fg)
+      ctx.move_to(ctx.height * button_width_vh * 1.2 + ctx.font_size * 0.1,y)
+      
+      ctx.text(file)
+      
+      y += ctx.font_size
+      no += 1
+
+   mbutton(ctx, 0, 0,
+          "view", view_cb, current_file)
+   mbutton(ctx, 0, ctx.height * button_height_vh,
+          "run", run_cb, current_file)
+   mbutton(ctx, 0, ctx.height - ctx.height * button_height_vh * 1,
+          "...", show_more_cb, current_file)
+   if more_actions:
+     ctx.rectangle(60,0,ctx.width,ctx.height)
+     ctx.listen_stop_propagate(ctx.PRESS, hide_more_cb)
+     mbutton(ctx, ctx.width-ctx.height * button_width_vh, ctx.height - ctx.height * button_height_vh * 1, "remove", remove_cb, current_file)
+
+   if frame_no > 1000:
+     ctx.save()
+     global_alpha=((frame_no-32)/50.0)
+     if global_alpha > 1.0:
+         global_alpha = 1.0
+     elif global_alpha < 0:
+         global_alpha = 0.0
+     ctx.global_alpha = global_alpha
+     ctx.logo(ctx.width - 32,ctx.height-32,64)
+     ctx.restore()
+   ctx.end_frame()
+   
+def scrollbar_cb(event):
+    global offset
+    factor = (event.y - ctx.font_size * 1.5) / (ctx.height-ctx.font_size*2);
+    if factor < 0.0:
+        factor = 0.0
+    if factor > 1.0:
+        factor = 1.0
+    offset = factor * event.user_data
+
+def prev_page_cb(event):
+    global offset
+    offset -= ((ctx.height / ctx.font_size) - 2)
+
+def next_page_cb(event):
+    global offset
+    offset += ((ctx.height / ctx.font_size) - 2)
+
+def file_view(ctx):
+   global offset
+   gc.collect()
+   ctx.start_frame()
+   ctx.save()
+
+   ctx.font_size = ctx.height * font_size_vh
+
+   #offset += 0.25
+   ctx.rectangle(0,0,ctx.width,ctx.height)
+   #ctx.listen(ctx.MOTION, drag_cb)
+   ctx.rgb(*document_bg).fill()
+   
+   ctx.rgb(*document_fg)
+   ctx.translate(0,(int(offset)-offset) * ctx.font_size)
+   ctx.move_to(0, ctx.font_size*0.8 * 2)
+   line_no = 0
+   ctx.font="mono";
+   y = ctx.font_size * 0.8 * 2
+   with open(view_file,'r') as file:
+     for line in file:
+       if line_no > offset and y - ctx.font_size < ctx.height:
+          ctx.move_to (0, int(y))
+          for word in line.split():
+            ctx.move_to(int(ctx.x), int(ctx.y))
+            ctx.text(word + ' ')
+          y+=ctx.font_size
+            
+       line_no += 1
+   ctx.restore()
+
+   ctx.save()
+   ctx.rgb(*toolbar_bg)
+   ctx.rectangle(0,0,ctx.width, ctx.font_size).clip()
+   ctx.paint()
+   ctx.text_align=ctx.RIGHT
+   ctx.rgb(*toolbar_fg)
+   ctx.move_to(ctx.width, ctx.font_size*0.8)
+   ctx.text(view_file)
+   ctx.restore()
+   mbutton_thin(ctx, 0, ctx.height * button_height_vh * 0, "close", lambda e,d:view_cb(e,False), -3)
+
+   ctx.rgb(*scrollbar_fg)
+   
+   ctx.move_to(ctx.width - ctx.font_size * 1.2, ctx.font_size + ctx.font_size)
+   
+   if True:#draw scrollbar
+    ctx.line_to(ctx.width - ctx.font_size * 1.2, ctx.height - ctx.font_size)
+    ctx.line_width=1
+    ctx.stroke()
+    ctx.arc(ctx.width - ctx.font_size * 1.2,
+          ctx.font_size + ctx.font_size + (offset / line_no) * (ctx.height - ctx.font_size * 2),
+          ctx.font_size*0.8, 0.0, 3.14152*2, 0).stroke()
+    ctx.rectangle(ctx.width - ctx.font_size * 2, 0, ctx.font_size * 2, ctx.height)
+    ctx.listen(ctx.PRESS|ctx.DRAG_MOTION, scrollbar_cb, line_no)
+    ctx.begin_path()
+    
+   ctx.rectangle(0, ctx.font_size,
+               ctx.width, (ctx.height - ctx.font_size)/2-1)
+   ctx.listen(ctx.PRESS, prev_page_cb)
+   ctx.begin_path()
+   ctx.rectangle(0, ctx.font_size + (ctx.height - ctx.font_size)/2,
+               ctx.width, (ctx.height - ctx.font_size)/2-1)
+   ctx.listen(ctx.PRESS, next_page_cb)
+   ctx.begin_path()
+   ctx.end_frame()
+
+
+main_exit = False
+while not main_exit:
+    if view_file:
+        file_view(ctx)
+    else:
+        dir_view(ctx)
+        if run_file != False:
+            backupflags = ctx.flags
+            # we remove any scratch format from flags
+            ctx.flags = backupflags - (ctx.flags&(ctx.GRAY2|ctx.GRAY4|ctx.RGB332))
+            # and add in low res
+            ctx.flags = clientflags
+
+            gc.collect()
+            ctx.start_frame()    
+            ctx.rgb(*wallpaper_bg).paint()
+            ctx.end_frame()
+            ctx.start_frame()    
+            ctx.rgb(*wallpaper_bg).paint()
+            ctx.font_size=ctx.height*font_size_vh#32
+            ctx.rgb(*white).move_to(0,ctx.font_size).text(run_file)
+            ctx.end_frame()
+            gc.collect()
+
+
+            
+            try:
+              exec(open(run_file).read())
+            except Exception as e:
+              string_res=io.StringIO(256)
+              sys.print_exception(e, string_res)
+              for frame in range(0,2):
+               ctx.start_frame()
+               ctx.rgb(*wallpaper_bg).paint()
+               ctx.font_size=ctx.height*font_size_vh#32
+               ctx.rgb(*white).move_to(0,ctx.font_size).text(run_file)
+               #ctx.rgb(*[255,0,0]).move_to(0,ctx.font_size*2).text(str(e))
+               ctx.rgb(*light_red).move_to(0,ctx.font_size*3).text(string_res.getvalue())
+
+               ctx.end_frame()
+              time.sleep(5)
+     
+            ctx.flags = backupflags
+            run_file = False
+            gc.collect()
+
+
diff --git a/usermodule/uctx/examples/rectangles.py b/usermodule/uctx/examples/rectangles.py
new file mode 100755
index 0000000000000000000000000000000000000000..d12f9762c956bcaabc83fd786d4f4dda19b75ea7
--- /dev/null
+++ b/usermodule/uctx/examples/rectangles.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env uctx
+
+import canvas
+
+ctx=canvas.ctx
+
+down = False
+
+def on_press(e):
+    global down
+    down = True
+
+def on_release(e):
+    global down
+    down = False
+
+x = ctx.width/2
+y = ctx.height/2
+
+def on_motion(e):
+  global x,y
+  x = e.x
+  y = e.y
+
+exit = False
+
+def exit_cb():
+    global exit
+    exit=True
+
+#machine.freq(200_000_000)
+max_frame = 100.0
+frame_no = 1
+while not exit:
+   ctx.start_frame()
+   ctx.add_key_binding("q", "", "", exit_cb)
+   ctx.font_size = ctx.height * 0.1
+
+   ctx.rectangle(0,0,ctx.width,ctx.height)
+   ctx.listen(ctx.PRESS, on_press)
+   ctx.listen(ctx.RELEASE, on_release)
+   ctx.listen(ctx.MOTION, on_motion) 
+  
+   if (down):
+     ctx.color([0,111,222])
+   else:
+     ctx.color([255,255,255])
+ 
+   ctx.fill()
+   dim = (frame_no/max_frame) * ctx.height
+
+
+   if frame_no >= max_frame-2:
+       dim = ctx.height
+   ctx.logo(x,y, dim)
+   ctx.end_frame()
+   frame_no+=1
+   
diff --git a/usermodule/uctx/examples/simple.py b/usermodule/uctx/examples/simple.py
new file mode 100755
index 0000000000000000000000000000000000000000..0f105aad2669fce7976632c4f1786da85802f981
--- /dev/null
+++ b/usermodule/uctx/examples/simple.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env uctx
+
+import canvas
+
+ctx=canvas.ctx
+
+down = False
+
+def on_press(e):
+    global down
+    down = True
+
+def on_release(e):
+    global down
+    down = False
+
+x = ctx.width/2
+y = ctx.height/2
+
+def on_motion(e):
+  global x,y
+  x = e.x
+  y = e.y
+
+exit = False
+
+
+def exit_cb():
+    global exit
+    exit=True
+
+#machine.freq(200_000_000)
+max_frame = 100.0
+frame_no = 0
+while not exit:
+   ctx.start_frame()
+   ctx.add_key_binding("q", "", "", exit_cb)
+   ctx.font_size = ctx.height * 0.1
+
+   ctx.rectangle(0,0,ctx.width,ctx.height)
+   ctx.listen(ctx.PRESS, on_press)
+   ctx.listen(ctx.RELEASE, on_release)
+   ctx.listen(ctx.MOTION, on_motion) 
+  
+   if (down):
+     ctx.rgb(0,111,222)
+   else:
+     ctx.rgb(255,255,255)
+ 
+   ctx.fill()
+   dim = (frame_no/max_frame) * ctx.height
+   if frame_no >= max_frame-2:
+       dim = ctx.height
+   ctx.logo(x,y, dim)
+   ctx.end_frame()
+
+   frame_no+=1
+   if frame_no > max_frame:
+       frame_no = 0
+   
diff --git a/usermodule/uctx/examples/st7789py.py b/usermodule/uctx/examples/st7789py.py
new file mode 100644
index 0000000000000000000000000000000000000000..e37ef4b098b3a001d677ccd21230fe0783284f1d
--- /dev/null
+++ b/usermodule/uctx/examples/st7789py.py
@@ -0,0 +1,403 @@
+#from machine import Pin,SPI,PWM
+import machine
+import time
+import ctx
+import gc
+from micropython import const
+import ustruct as struct
+
+# commands
+ST77XX_NOP = const(0x00)
+ST77XX_SWRESET = const(0x01)
+ST77XX_RDDID = const(0x04)
+ST77XX_RDDST = const(0x09)
+
+ST77XX_SLPIN = const(0x10)
+ST77XX_SLPOUT = const(0x11)
+ST77XX_PTLON = const(0x12)
+ST77XX_NORON = const(0x13)
+
+ST77XX_INVOFF = const(0x20)
+ST77XX_INVON = const(0x21)
+ST77XX_DISPOFF = const(0x28)
+ST77XX_DISPON = const(0x29)
+ST77XX_CASET = const(0x2A)
+ST77XX_RASET = const(0x2B)
+ST77XX_RAMWR = const(0x2C)
+ST77XX_RAMRD = const(0x2E)
+
+ST77XX_PTLAR = const(0x30)
+ST77XX_COLMOD = const(0x3A)
+ST7789_MADCTL = const(0x36)
+
+ST7789_MADCTL_MY = const(0x80)
+ST7789_MADCTL_MX = const(0x40)
+ST7789_MADCTL_MV = const(0x20)
+ST7789_MADCTL_ML = const(0x10)
+ST7789_MADCTL_BGR = const(0x08)
+ST7789_MADCTL_MH = const(0x04)
+ST7789_MADCTL_RGB = const(0x00)
+
+ST7789_RDID1 = const(0xDA)
+ST7789_RDID2 = const(0xDB)
+ST7789_RDID3 = const(0xDC)
+ST7789_RDID4 = const(0xDD)
+
+ColorMode_65K = const(0x50)
+ColorMode_262K = const(0x60)
+ColorMode_12bit = const(0x03)
+ColorMode_16bit = const(0x05)
+ColorMode_18bit = const(0x06)
+ColorMode_16M = const(0x07)
+
+# Color definitions
+BLACK = const(0x0000)
+BLUE = const(0x001F)
+RED = const(0xF800)
+GREEN = const(0x07E0)
+CYAN = const(0x07FF)
+MAGENTA = const(0xF81F)
+YELLOW = const(0xFFE0)
+WHITE = const(0xFFFF)
+
+_ENCODE_PIXEL = ">H"
+_ENCODE_POS = ">HH"
+_DECODE_PIXEL = ">BBB"
+
+_BUFFER_SIZE = const(256)
+
+
+def delay_ms(ms):
+    time.sleep_ms(ms)
+
+
+def color565(r, g=0, b=0):
+    """Convert red, green and blue values (0-255) into a 16-bit 565 encoding.  As
+    a convenience this is also available in the parent adafruit_rgb_display
+    package namespace."""
+    try:
+        r, g, b = r  # see if the first var is a tuple/list
+    except TypeError:
+        pass
+    return (r & 0xf8) << 8 | (g & 0xfc) << 3 | b >> 3
+
+
+class ST77xx:
+    def __init__(self, spi, width, height, reset, dc, cs=None, backlight=None,
+                 xstart=-1, ystart=-1, sck=None, mosi=None, miso=None, tp_irq=None, tp_cs=None):
+        """
+        display = st7789.ST7789(
+            SPI(1, baudrate=40000000, phase=0, polarity=1),
+            240, 240,
+            reset=machine.Pin(5, machine.Pin.OUT),
+            dc=machine.Pin(2, machine.Pin.OUT),
+        )
+        """
+        self.width = width
+        self.height = height
+        self.spi = spi
+        self.sck = sck
+        self.ctx = False
+        if spi == None:
+            self.spi = machine.SPI(1, baudrate=50000000, polarity=1)
+        self.reset = reset
+        self.dc = dc
+        self.cs = cs
+        self.mosi = mosi
+        self.miso = miso
+        
+
+        
+        self.backlight = backlight
+        if xstart >= 0 and ystart >= 0:
+            self.xstart = xstart
+            self.ystart = ystart
+        elif (self.width, self.height) == (320, 240):
+            self.xstart = 0
+            self.ystart = 0            
+        elif (self.width, self.height) == (240, 320):
+            self.xstart = 0
+            self.ystart = 0            
+        elif (self.width, self.height) == (240, 240):
+            self.xstart = 0
+            self.ystart = 0
+        elif (self.width, self.height) == (135, 240):
+            self.xstart = 52
+            self.ystart = 40
+        else:
+            raise ValueError(
+                "Unsupported display. Only 240x240 and 135x240 are supported "
+                "without xstart and ystart provided"
+            )
+        self.X_Point = 0
+        self.Y_Point = 1
+        
+        if tp_irq != None:
+          self.irq = machine.Pin(tp_irq,machine.Pin.IN)
+          self.tp_cs = machine.Pin(tp_cs,machine.Pin.OUT)
+          self.tp_cs(1)
+
+        self.pointer_down = False
+        if self.backlight:
+            self.backlight.high();
+
+    def get_id(self):
+        self.cs_low()
+        self.dc_low()
+        self.spi.write(bytes([ST7789_RDID2]))
+        res = self.spi.read(1)
+        self.cs_high()
+        return res[0]
+
+    def dc_low(self):
+        self.dc.off()
+
+    def dc_high(self):
+        self.dc.on()
+
+    def reset_low(self):
+        if self.reset:
+            self.reset.off()
+
+    def reset_high(self):
+        if self.reset:
+            self.reset.on()
+
+    def cs_low(self):
+        if self.cs:
+            self.cs.off()
+
+    def cs_high(self):
+        if self.cs:
+            self.cs.on()
+
+    def write(self, command=None, data=None):
+        """SPI write to the device: commands and data"""
+        self.cs_low()
+        if command is not None:
+            self.dc_low()
+            self.spi.write(bytes([command]))
+        if data is not None:
+            self.dc_high()
+            self.spi.write(data)
+        self.cs_high()
+
+    def hard_reset(self):
+        self.cs_low()
+        self.reset_high()
+        delay_ms(50)
+        self.reset_low()
+        delay_ms(50)
+        self.reset_high()
+        delay_ms(150)
+        self.cs_high()
+
+    def soft_reset(self):
+        self.write(ST77XX_SWRESET)
+        delay_ms(150)
+
+    def sleep_mode(self, value):
+        if value:
+            self.write(ST77XX_SLPIN)
+        else:
+            self.write(ST77XX_SLPOUT)
+
+    def inversion_mode(self, value):
+        if value:
+            self.write(ST77XX_INVON)
+        else:
+            self.write(ST77XX_INVOFF)
+
+    def _set_color_mode(self, mode):
+        self.write(ST77XX_COLMOD, bytes([mode & 0x77]))
+
+    def init(self, *args, **kwargs):
+        self.hard_reset()      
+        self.soft_reset()
+        self.sleep_mode(False)
+        return True
+
+    def _set_mem_access_mode(self, rotation, vert_mirror, horz_mirror, is_bgr):
+        rotation &= 7
+        value = {
+            0: 0,
+            1: ST7789_MADCTL_MX,
+            2: ST7789_MADCTL_MY,
+            3: ST7789_MADCTL_MX | ST7789_MADCTL_MY,
+            4: ST7789_MADCTL_MV,
+            5: ST7789_MADCTL_MV | ST7789_MADCTL_MX,
+            6: ST7789_MADCTL_MV | ST7789_MADCTL_MY,
+            7: ST7789_MADCTL_MV | ST7789_MADCTL_MX | ST7789_MADCTL_MY,
+        }[rotation]
+
+        if vert_mirror:
+            value = ST7789_MADCTL_ML
+        elif horz_mirror:
+            value = ST7789_MADCTL_MH
+
+        if is_bgr:
+            value |= ST7789_MADCTL_BGR
+        self.write(ST7789_MADCTL, bytes([value]))
+
+    def _encode_pos(self, x, y):
+        """Encode a postion into bytes."""
+        return struct.pack(_ENCODE_POS, x, y)
+
+    def _encode_pixel(self, color):
+        """Encode a pixel color into bytes."""
+        return struct.pack(_ENCODE_PIXEL, color)
+
+    def _set_columns(self, start, end):
+        if start > end or end >= self.width:
+            return
+        start += self.xstart
+        end += self.xstart
+        self.write(ST77XX_CASET, self._encode_pos(start, end))
+
+    def _set_rows(self, start, end):
+        if start > end or end >= self.height:
+            return
+        start += self.ystart
+        end += self.ystart
+        self.write(ST77XX_RASET, self._encode_pos(start, end))
+
+    def set_window(self, x0, y0, x1, y1):
+        self._set_columns(x0, x1)
+        self._set_rows(y0, y1)
+        self.write(ST77XX_RAMWR)
+
+    def vline(self, x, y, length, color):
+        self.fill_rect(x, y, 1, length, color)
+
+    def hline(self, x, y, length, color):
+        self.fill_rect(x, y, length, 1, color)
+
+    def pixel(self, x, y, color):
+        self.set_window(x, y, x, y)
+        self.write(None, self._encode_pixel(color))
+
+    def blit_buffer(self, buffer, x, y, width, height):
+        self.set_window(x, y, x + width -1, y + height -1)
+        self.write(None, buffer)
+
+    def rect(self, x, y, w, h, color):
+        self.hline(x, y, w, color)
+        self.vline(x, y, h, color)
+        self.vline(x + w - 1, y, h, color)
+        self.hline(x, y + h - 1, w, color)
+
+    def fill_rect(self, x, y, width, height, color):
+        self.set_window(x, y, x + width - 1, y + height - 1)
+        chunks, rest = divmod(width * height, _BUFFER_SIZE)
+        pixel = self._encode_pixel(color)
+        self.dc_high()
+        if chunks:
+            data = pixel * _BUFFER_SIZE
+            for _ in range(chunks):
+                self.write(None, data)
+        if rest:
+            self.write(None, pixel * rest)
+
+    def fill(self, color):
+        self.fill_rect(0, 0, self.width, self.height, color)
+
+    def line(self, x0, y0, x1, y1, color):
+        # Line drawing function.  Will draw a single pixel wide line starting at
+        # x0, y0 and ending at x1, y1.
+        steep = abs(y1 - y0) > abs(x1 - x0)
+        if steep:
+            x0, y0 = y0, x0
+            x1, y1 = y1, x1
+        if x0 > x1:
+            x0, x1 = x1, x0
+            y0, y1 = y1, y0
+        dx = x1 - x0
+        dy = abs(y1 - y0)
+        err = dx // 2
+        if y0 < y1:
+            ystep = 1
+        else:
+            ystep = -1
+        while x0 <= x1:
+            if steep:
+                self.pixel(y0, x0, color)
+            else:
+                self.pixel(x0, y0, color)
+            err -= dy
+            if err < 0:
+                y0 += ystep
+                err += dx
+            x0 += 1
+    def touch_get(self): 
+        if self.irq() == 0:
+            self.spi =machine.SPI(1, baudrate=5000000, sck=machine.Pin(self.sck),
+                                   mosi=machine.Pin(self.mosi),
+                                   miso=machine.Pin(self.miso))
+            self.tp_cs(0)
+            X_Point = 0
+            Y_Point = 0
+            for i in range(0,2):
+                self.spi.write(bytearray([0XD0]))
+                Read_date = self.spi.read(3)
+                time.sleep_us(10)
+                X_Point=X_Point+(((Read_date[0]<<8)+Read_date[1])>>3)
+                
+                self.spi.write(bytearray([0X90]))
+                Read_date = self.spi.read(2)
+                Y_Point=Y_Point+(((Read_date[0]<<8)+Read_date[1])>>3)
+
+            X_Point=X_Point/2
+            Y_Point=Y_Point/2
+            
+            self.tp_cs(1)
+
+            self.spi =machine.SPI(1, baudrate=40000000, polarity=1, sck=machine.Pin(self.sck),
+                                     mosi=machine.Pin(self.mosi),
+                                     miso=machine.Pin(self.miso))
+            X_Point = 240-((X_Point-540)*240.0/3270)
+            Y_Point = 320-((Y_Point-540)*320.0/3270)
+
+            Result_list = [X_Point,Y_Point]
+            return(Result_list)
+    def ctx_update_events(self,o):
+      touch=self.touch_get()
+      if(touch):
+          self.X_Point = touch[0]
+          self.Y_Point = touch[1]
+          if(self.X_Point>240):
+            self.X_Point = 240
+          elif self.X_Point<0:
+            self.X_Point = 0
+          if(self.Y_Point>320):
+            self.Y_Point = 320
+          elif self.Y_Point<0:
+            self.Y_Point = 0
+          if not self.pointer_down:
+            o.pointer_press(self.X_Point,self.Y_Point, 0, 0, 1)
+          else:
+            o.pointer_motion(self.X_Point,self.Y_Point, 0, 0, 1)
+          #print ("pointer " + str(self.X_Point) + ' ' + str (self.Y_Point))
+          self.pointer_down = True
+          return False # abort rendering if in slow refresh
+      else:
+          if self.pointer_down:
+            o.pointer_release(self.X_Point,self.Y_Point, 0, 0, 1)
+          self.pointer_down = False
+          return False
+
+
+class ST7789(ST77xx):
+    def init(self, *, color_mode=ColorMode_65K | ColorMode_16bit):
+        super().init()
+        self._set_color_mode(color_mode)
+        delay_ms(50)
+        self._set_mem_access_mode(4, True, True, False)
+        self.inversion_mode(True)
+        delay_ms(10)
+        self.write(ST77XX_NORON)
+        delay_ms(10)
+        self.fill(0)
+        self.write(ST77XX_DISPON)
+        delay_ms(500)
+
+lcd = False
diff --git a/usermodule/uctx/examples/uimui.py b/usermodule/uctx/examples/uimui.py
new file mode 100755
index 0000000000000000000000000000000000000000..04912711405b93bb35894ad56664803c118b51eb
--- /dev/null
+++ b/usermodule/uctx/examples/uimui.py
@@ -0,0 +1,492 @@
+#!/usr/bin/env uctx
+
+import ctx
+import gc
+
+pointer_x = 0
+pointer_y = 0
+down = False
+was_down = False
+text_edit_preview = ''
+
+cursor_pos=[0,0]
+widget_no = 0
+grab_no = 0
+text_edit_no = 0
+text_edit_font_size = 0
+text_edit_copy = None
+text_edit_done = False
+
+import canvas
+
+o = canvas.ctx
+
+try:
+    font_size_vh
+except NameError:
+    if o.width < o.height:
+      font_size_vh = 0.05
+    else:
+      font_size_vh = 0.06
+
+widget_fs=0.1
+widget_height_fs=2.0
+
+#o.flags = o.HASH_CACHE | o.RGB332 | o.INTRA_UPDATE
+o.flags = o.HASH_CACHE|o.RGB332
+wallpaper_bg=(0,0,0)
+widget_font_size_vh = font_size_vh
+widget_bg=(80/255,80/255,80/255)
+widget_fg=(1.0,1.0,1.0)
+widget_marker=(163/255,100/255,180/255)
+button_bg=widget_bg
+button_fg=widget_fg
+button_bg_active=(225/255,35/255,90/255)
+
+widget_x=0
+widget_y=0
+widget_width=0
+widget_height=0
+
+edge_left = o.height * font_size_vh * 8
+edge_right = o.width - edge_left
+
+def add_widget(x, y, w, h):
+    global widget_no
+    widget_no += 1
+    return widget_no
+def get_ctx():
+    return o
+  
+def inside_rect(u,v,x,y,w,h):
+    if u >= x and  u < x + w and v >= y and v < y + h:
+      return True
+    return False
+
+def slider_sized(x, y, w, h, label, value, min, max):
+    global grab_no
+    add_widget(x, y, w, h)
+    o.font_size = o.height * widget_font_size_vh # why do we need this override
+    o.rgb(*widget_bg).rectangle(x, y, w, h - 2).fill()
+    o.rgb(*widget_marker).rectangle(x + (value-min)/(max-min)*w, y, 0.1*o.font_size, h).fill()     
+    o.rgb(*widget_fg)
+    o.move_to(x + o.font_size*0.1, y + o.font_size*0.8)
+    o.text(label)
+    o.save()
+    o.text_align=o.RIGHT
+    o.move_to(x+w,y+o.font_size*0.8)
+    o.text(str(value))
+    o.restore()
+    
+    if text_edit_no != 0:
+      return value
+    
+    if down and text_edit_no==0:
+      if inside_rect(pointer_x,pointer_y,x,y,w,h) or\
+         grab_no == widget_no:
+        if was_down == False:
+          grab_no = widget_no
+        if grab_no == widget_no:
+          value = ((pointer_x - x) / w) * (max-min) + min
+          if value < min:
+            value = min
+          if value > max:
+            value = max
+    else:
+      grab_no = 0
+    o.begin_path()
+    return value
+
+def label_sized(x, y, w, h, label):
+    global down, was_down
+    add_widget(x,y,w,h)
+    o.font_size = o.height * widget_font_size_vh # why do we need this override
+    o.rgb(*button_fg)
+    o.move_to(x + o.font_size/8, y + h/2 + o.font_size/3).text(label)
+
+
+def button_sized(x, y, w, h, label):
+    global down, was_down
+
+    add_widget(x,y,w,h)
+    result = False
+    o.font_size = o.height * widget_font_size_vh # why do we need this override
+    lwidth = o.text_width (label)
+    o.rectangle(x, y, w, h)
+    o.rgb(*button_bg)
+    if text_edit_no == 0 and down and was_down == False and inside_rect(pointer_x,pointer_y,x,y,w,h):
+      result = True
+      o.rgb(*button_bg_active)    
+    o.fill()
+    o.rgb(*button_fg)
+    o.move_to(x + w/2-lwidth/2, y + h/2 + o.font_size/3).text(label)
+    
+
+    return result
+
+def toggle_sized(x, y, w, h, label, value):
+    global down, was_down
+    add_widget(x,y,w,h)
+    result = value
+
+    o.font_size = o.height * widget_font_size_vh # why do we need this override
+    
+    if text_edit_no == 0 and down and was_down == False and inside_rect(pointer_x,pointer_y,x,y,w,h):
+      result = not value
+      o.rectangle(x, y, w, h).rgb(*button_bg_active).fill()
+
+    o.rgb(*widget_fg)
+    o.move_to(x + o.font_size*0.1, y + o.font_size*0.8)
+    o.text(label)
+    o.save()
+    o.text_align=o.RIGHT
+    o.move_to(x+w,y+o.font_size*0.8)
+    if value:
+        o.text("on")
+    else:
+        o.text("off")
+    o.restore()
+    
+    if text_edit_no != 0:
+       result = value
+    
+    return result
+
+
+def entry_sized(x, y, w, h, label, value, default_value):
+    global down, was_down, cursor_pos, text_edit_no, text_edit_font_size, text_edit_done, text_edit_copy
+    widget_no=add_widget(x,y,w,h)
+    result = value
+    o.font_size = o.height * widget_font_size_vh # why do we need this override
+    
+    o.rgb(*widget_fg)
+    o.move_to(x + o.font_size*0.1, y + o.font_size*0.8)
+    o.text(label)
+    
+    o.save()
+    #o.text_align=o.RIGHT
+    #o.move_to(x+w,y+o.font_size*0.8)
+    #if value:
+    if text_edit_no == widget_no:
+      o.text(text_edit_copy)
+    else:
+      o.text(value)
+    
+    if text_edit_no == 0 and down and was_down == False and inside_rect(pointer_x,pointer_y,x,y,w,h):
+      #result = "baah"#not value
+      #o.rectangle(x, y, w, h).rgb(*button_bg_active).fill()
+      text_edit_copy = value
+      text_edit_no = widget_no
+      text_edit_font_size = o.font_size
+      
+    if text_edit_no == widget_no:
+       cursor_pos=[o.x,o.y]
+       o.move_to(cursor_pos[0],cursor_pos[1])
+
+       o.rgb(1.0,1.0,1.0).text(text_edit_preview)
+       o.rectangle(x, y, w, h).rgb(*button_bg_active).stroke()
+       o.rectangle(cursor_pos[0],cursor_pos[1]-o.font_size,3, o.font_size * 1.1).fill()
+       #o.move_to(cursor_pos[0],cursor_pos[1])
+        
+    if text_edit_done:
+        text_edit_done = False # we only do this once
+        text_edit_no = 0
+        o.restore()
+
+        return text_edit_copy
+    o.restore()
+    return None
+
+def init_geom(x,y,width,height):
+    absolute=True
+    if x==None or y==None:
+      x = edge_left #o.x
+      y = o.y
+      absolute=False
+    if height==None:
+      height = o.height * widget_font_size_vh * widget_height_fs
+    if width==None:
+      width = edge_right-edge_left #o.width
+
+    # convert to integer and drop least signifcant
+    # bit, this makes 2x2 preview renders avoid
+    # rectangle AA
+    x = int(x) & ~1
+    y = int(y) & ~1
+    width = int(width) & ~1
+    height = int(height) & ~1
+      
+    return (x,y,width,height,absolute)
+
+
+def slider(label, value, min, max, x=None, y=None, width=None, height=None):
+    tup = init_geom(x,y,width,height)
+    x=tup[0];y=tup[1];width=tup[2];height=tup[3];absolute=tup[4]
+
+    retval = slider_sized (x, y, width, height, label, value, min, max)
+
+    if not absolute:
+      o.move_to (x, y + height)
+
+    return retval
+
+
+def toggle(label, value, x=None, y=None, width=None, height=None):
+    tup = init_geom(x,y,width,height)
+    x=tup[0];y=tup[1];width=tup[2];height=tup[3];absolute=tup[4]
+
+    retval = toggle_sized (x, y, width, height, label, value)
+
+    if not absolute:
+      o.move_to (x, y + height)
+
+    return retval
+
+
+def button(string, x=None, y=None, width=None, height=None):
+    tup = init_geom(x,y,width,height)
+    x=tup[0];y=tup[1];width=tup[2];height=tup[3];absolute=tup[4]
+    
+    retval = button_sized (x, y, width, height * 0.98, string)
+    if not absolute:
+      o.move_to (x, y + height)
+    return retval
+
+def label(string, x=None, y=None, width=None, height=None):
+    tup = init_geom(x,y,width,height)
+    x=tup[0];y=tup[1];width=tup[2];height=tup[3];absolute=tup[4]
+
+    label_sized (x, y, width, height * 0.98, string)
+    if not absolute:
+      o.move_to (x, y + height)
+    
+def entry(label,string,default_string,x=None,y=None,width=None,height=None):
+    tup = init_geom(x,y,width,height)
+    x=tup[0];y=tup[1];width=tup[2];height=tup[3];absolute=tup[4]
+    string = entry_sized (x, y, width, height * 0.98, label, string, default_string)
+    if not absolute:
+      o.move_to (x, y + height)
+    return string
+
+def coords_press(x, y):
+    global pointer_x, pointer_y, down
+    pointer_x = x
+    pointer_y = y
+    down = True
+
+def coords_motion(x, y):
+    global pointer_x, pointer_y
+    pointer_x = x
+    pointer_y = y
+
+def coords_release(x, y):
+    global pointer_x, pointer_y, down
+    pointer_x = x
+    pointer_y = y
+    down = False
+
+exit = False
+
+KEYs = (
+        (
+            ('q','w','e','r','t','y','u','i','o','p'),
+            ('a','s','d','f','g','h','j','k','l','⏎'),
+            ('z','x','c','v','b','n','m',',','.'),
+            ('ABC',' ',' ',' ',' ',' ',' ',' ',' ','⌫')
+        ),
+        (
+            ('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',),
+            ('A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', '⏎'),
+            ('Z', 'X', 'C', 'V', 'B', 'N', 'M', ':', '?'),
+            ('123', ' ',' ', ' ', ' ', ' ', ' ', '!',' ','⌫')
+        ),
+        (
+            ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '|'),
+            ('@', '#', '$', '%', '^', '&', '*', '(', ')', '⏎'),
+            ('+','-','=','_','"','\'','[',']'),
+            ('æøå', ' ', '~', '/', '\\', '{','}','`',' ','⌫')
+        ),
+        (
+            ('pu','é', 'ñ', 'ß', 'ü', 'Ü', 'æ', 'ø', 'å', '|'),
+            ('pd', '€', '®', '©', 'Æ', 'Ø', 'Å',' ', ' ', '⏎'),
+            ('ctr' ,'alt', ' ',' ↑', ' ', 'ö','Ö','Å'),
+            ('abc', ' ','←','↓','→', ' ',' ',' ',' ','⌫')
+        )
+
+        
+        # add a layout with cursor keys and modifiers, return space tab escape
+        # home, end insert delta page up page down .. and even some F keys?
+    )
+
+osk_layout=0
+
+def start_frame():
+    global widget_no
+    widget_no = 0
+    o.start_frame()
+    o.rgb(*wallpaper_bg).paint()
+    o.rectangle(0,0,o.width, o.height)#,o.height)
+    o.listen(o.PRESS, lambda e:coords_press(e.x, e.y))
+    o.listen(o.MOTION, lambda e:coords_motion(e.x, e.y))
+    o.listen(o.RELEASE, lambda e:coords_release(e.x, e.y))
+    o.fill()
+
+import math
+
+keyboard_bg=(70/255,70/255,90/255)
+keyboard_fg=(1.0,1.0,1.0)
+
+
+def keyboard(x,y,width,height):
+    global text_edit_copy, cursor_pos, text_edit_preview, osk_layout, text_edit_done
+    o.rectangle(x,y,width,height)
+    #o.listen_stop_propagate(o.PRESS|o.MOTION, lambda e:update_coords(e.x, e.y, True))
+    #o.listen_stop_propagate(o.RELEASE, lambda e:update_coords(e.x, e.y, False))
+    o.rgb(*keyboard_bg).fill()
+    cell_width = width /11.0;
+    cell_height = height / 4.0;
+    o.font_size = cell_height;
+    row_no=0
+    o.save()
+    o.text_align=o.CENTER
+    o.rgb(*keyboard_fg)
+    
+    nearest = False
+    best_dist = 1000
+    
+    for row in KEYS[osk_layout]:
+        col_no = 0
+        for key in row:
+          keyx = x + (col_no+0.5 + row_no/4.0) * cell_width
+          keyy = y + row_no * cell_height + cell_height * 0.5
+
+          dist = math.sqrt((pointer_x-keyx)*(pointer_x-keyx)+ (pointer_y-keyy)*(pointer_y-keyy))
+          if dist < best_dist:
+              best_dist = dist
+              nearest = key
+          o.move_to(keyx, keyy + cell_height * 0.3)
+          label = str(key)
+          label = {'\b':'bs','\n':'nl'}.get(label,label)
+          o.text(label)
+          col_no += 1
+        row_no += 1
+    o.restore()
+    if inside_rect(pointer_x,pointer_y,x,y,width,height):
+      if down:
+        text_edit_preview = nearest
+      else:
+        text_edit_preview = ''
+      if not down and was_down:
+        
+        o.font_size = text_edit_font_size
+        if nearest == '⏎':
+          text_edit_done = True
+        elif nearest == '⌫':
+          if len(text_edit_copy)>0:
+            cursor_pos[0] -= o.text_width (text_edit_copy[-1])
+            text_edit_copy = text_edit_copy[0:-1]
+        elif nearest == 'ABC':
+            osk_layout=1
+        elif nearest == '123':
+            osk_layout=2
+        elif nearest == '<>{':
+            osk_layout=3
+        elif nearest == 'æøå':
+            osk_layout=3
+        elif nearest == 'abc':
+            osk_layout=0
+        else:
+          text_edit_copy += nearest
+          #cursor_pos[0] += o.text_width (nearest)
+          text_edit_preview = ''
+    else:
+       text_edit_preview = ''
+
+def end_frame():
+    global was_down, down, text_edit_no
+    
+    if text_edit_no > 0:
+        keyboard(0,o.height/2,o.width,o.height/2)
+    
+    
+    was_down = down # must happen after all the buttons    
+    gc.collect()
+    o.end_frame()
+    
+
+
+
+
+    
+def nearest_in_list(needle,list):
+    best_score=400000
+    best=needle
+    for i in list:
+        score = abs(i-needle)
+        if score < best_score:
+            best_score = score
+            best=i
+    return best
+
+def choice(label, chosen, choices):
+    return chosen
+
+if __name__=='__main__':
+  exit = 0
+  constrain_332 = False
+  string = ""
+  red = widget_bg[0]
+  green = widget_bg[1]
+  blue = widget_bg[2]
+  chosen = "foo"
+  
+  start_frame()
+  end_frame()
+  gc.collect()
+ 
+  while exit < 4: # a hack to let the ui re-settle, makes
+                  # switching apps slower though
+    start_frame()
+    edited_string = entry ("entry: ", string, "default")
+    if edited_string:
+        string = edited_string
+
+    chosen = choice ("among", chosen, ("foo","bar","baz"))
+        
+    label (chosen)
+        
+    constrain_332 = toggle ("RGB332", constrain_332)
+    red  = int(slider("red", red, 0, 255))
+    green  = int(slider("green", green, 0, 255))
+    blue = int(slider("blue", blue, 0, 255))
+
+    o.rectangle (o.x+o.width/2,o.y - o.font_size * 4,o.width * 0.15, o.height * 0.15)
+    o.rgb(red/255,green/255,blue/255).fill()
+    o.rectangle (o.x+o.width/2,o.y - o.font_size * 4,o.width * 0.15, o.height * 0.15)
+    o.rgb(1.0,1.0,1.0).stroke()
+
+    if constrain_332:
+      valid_red=[0,40,80,140,174,209,233,255]  # 176
+      valid_green=[0,40,80,140,174,209,233,255]  # 176
+      valid_blue=[0,80,170,255]    
+      red = nearest_in_list(red, valid_red)
+      green = nearest_in_list(green, valid_green)
+      blue = nearest_in_list(blue, valid_blue)
+
+    if button ("done"):
+        exit = True
+
+    if button("x", x=40, y=40, width=50, height=50):
+        exit = True
+
+    if False:
+      widget_bg[0] = red
+      widget_bg[1] = green
+      widget_bg[2] = blue
+        
+    
+    end_frame()
+    gc.collect()
+    if exit > 0:
+        exit += 1
+
diff --git a/usermodule/uctx/fonts/Arimo-Bold.h b/usermodule/uctx/fonts/Arimo-Bold.h
new file mode 100644
index 0000000000000000000000000000000000000000..7bf7fa047a8f7a02d91f97427e9b49e80d392ba9
--- /dev/null
+++ b/usermodule/uctx/fonts/Arimo-Bold.h
@@ -0,0 +1,5056 @@
+#ifndef CTX_FONT_Arimo_Bold
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Arimo_Bold[]={
+{15, 0x0000a008, 0x000013b5},/* length:5045 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000c, 0x00000002},/* Arimo Bold*/
+{32, 0x6d697241, 0x6f42206f},
+{'l', 0x00000064, 0x00000000},
+{')', 0x0000000c, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x00000021, 0x00002fb1},/*        !        x-advance: 47.691406 */
+{'M', 0x41fe8ba3, 0xc1ee5259},
+{'l', 0xc180abdc, 0x00000000},
+{'4', 0xfddbffef, 0x000000a4},
+{'6', 0x0225ffef, 0x00eeff6e},
+{'l', 0xb5800000, 0xc1970c88},
+{'l', 0x41a11e70, 0x00000000},
+{'l', 0x00000000, 0x41970c88},
+{'l', 0xc1a11e70, 0x00000000},
+{'@', 0x00000022, 0x000043e6},/*        "        x-advance: 67.898438 */
+{'M', 0x4261bbf9, 0xc27b3056},
+{'l', 0xc17508f4, 0x00000000},
+{'4', 0xfee3fff1, 0x00000099},
+{'6', 0x011dfff0, 0x0000ff12},
+{'l', 0xc17508f3, 0x00000000},
+{'l', 0xbff1ada8, 0xc20eefe2},
+{'l', 0x4198ba2e, 0x00000000},
+{'l', 0xbff1ada0, 0x420eefe2},
+{'@', 0x00000023, 0x00004fa6},/*        #        x-advance: 79.648438 */
+{'M', 0x427e4407, 0xc2711e6f},
+{'l', 0xc09a67d8, 0x41b9bbfa},
+{'l', 0x41708f38, 0x00000000},
+{'l', 0x00000000, 0x4126b698},
+{'l', 0xc1899f54, 0x00000000},
+{'l', 0xc0b77f18, 0x41d52598},
+{'l', 0xc12e8ba4, 0x00000000},
+{'l', 0x40b30560, 0xc1d52598},
+{'l', 0xc1abbf8d, 0x00000000},
+{'l', 0xc0b30560, 0x41d52598},
+{'l', 0xc12b3056, 0x00000000},
+{'l', 0x40b0c882, 0xc1d52598},
+{'l', 0xc12d6d34, 0x00000000},
+{'l', 0xb4800000, 0xc126b698},
+{'l', 0x41525982, 0x00000000},
+{'l', 0x409ca4b2, 0xc1b9bbfa},
+{'l', 0xc1679bbe, 0x00000000},
+{'l', 0xb5000000, 0xc125982c},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x40bbf8d4, 0xc1d76274},
+{'l', 0x412b3058, 0x00000000},
+{'l', 0xc0b77f20, 0x41d76274},
+{'l', 0x41abbf8e, 0x00000000},
+{'l', 0x40bbf8d8, 0xc1d76274},
+{'l', 0x412e8ba4, 0x00000000},
+{'l', 0xc0bbf8e0, 0x41d76274},
+{'4', 0x0000005b, 0x00520000},
+{'6', 0x0000ff92, 0x0000feff},
+{'l', 0xc0a11e70, 0x41b9bbfa},
+{'l', 0x41acddfc, 0x00000000},
+{'l', 0x409ca4b8, 0xc1b9bbfa},
+{'l', 0xc1abbf8e, 0x00000000},
+{'@', 0x00000024, 0x00004fa6},/*        $        x-advance: 79.648438 */
+{'M', 0x429b3ea8, 0xc1e67d50},
+{'q', 0x00000000, 0x414a8478},
+{0, 0xc10880e0, 0x419d33ea},
+{'9', 0x0037ffbd, 0x003cff38},
+{'4', 0x00610000, 0x0000ffc4},
+{'l', 0x00000000, 0xc1407293},
+{'q', 0xc1708f38, 0xbf0f377c},
+{0, 0xc1bb699f, 0xc0e20394},
+{'9', 0xffccffbd, 0xff60ffa8},
+{'l', 0x418f377e, 0xc0525988},
+{'8', 0x5c293f0a, 0x225a1d1f},
+{'l', 0x00000000, 0xc1dabdc2},
+{'8', 0xfef8ffff, 0xfff8fffa},
+{'q', 0xc135423e, 0xc0259820},
+{0, 0xc189101d, 0xc0c2af70},
+{'8', 0xb9b9e4d3, 0x96e7d5e7},
+{'q', 0x00000000, 0xc139bbf8},
+{0, 0x40ff1adb, 0xc18fc6b8},
+{'9', 0xffce0040, 0xffc900ba},
+{'4', 0xffb60000, 0x0000003c},
+{'l', 0x00000000, 0x4115ee20},
+{'q', 0x411292cc, 0x3eb30500},
+{0, 0x4173ea84, 0x403bf8c0},
+{'q', 0x40c4ec48, 0x40211e80},
+{0, 0x411dc324, 0x40ef70d0},
+{'9', 0x0027001e, 0x00700030},
+{'l', 0xc193b13c, 0x402e8ba0},
+{'8', 0xb6dfd0f8, 0xdfbce6e8},
+{'4', 0x00c40000, 0x00010006},
+{'q', 0x4001ca40, 0x00000000},
+{0, 0x4144ec4c, 0x4056d340},
+{'q', 0x41259830, 0x4056d330},
+{0, 0x417745d0, 0x411ee190},
+{'9', 0x00340028, 0x00820028},
+{'m', 0xc191745c, 0x3e8f3780},
+{'8', 0xd3f6e500, 0xe3e3eff6},
+{'9', 0xfff5ffed, 0xffe3ffad},
+{'l', 0x00000000, 0x41cd508e},
+{'9', 0xfff8007b, 0xff9b007b},
+{'m', 0xc1b89d8a, 0xc25bdc33},
+{'8', 0x59980798, 0x28081800},
+{'8', 0x1a191008, 0x1c460a10},
+{'l', 0x00000000, 0xc1b9bbfa},
+{'@', 0x00000025, 0x00007f57},/*        %        x-advance: 127.339844 */
+{'M', 0x41e44072, 0xc2c74cfa},
+{'q', 0x4148479c, 0x00000000},
+{0, 0x41944072, 0x40fcddf0},
+{'q', 0x40c2af78, 0x40fcde00},
+{0, 0x40c2af78, 0x41bb69a0},
+{'q', 0x00000000, 0x4173ea84},
+{0, 0xc0cba2f0, 0x41bada68},
+{'q', 0xc0c96608, 0x4100abdc},
+{0, 0xc194cfa9, 0x4100abdc},
+{'q', 0xc142af70, 0x00000000},
+{0, 0xc1932204, 0xc0ff1ad8},
+{'q', 0xc0c7292b, 0xc100abdc},
+{0, 0xc0c7292b, 0xc1bb69a0},
+{'q', 0x00000000, 0xc17dfc68},
+{0, 0x40c07293, 0xc1bc880c},
+{'9', 0xffc20030, 0xffc20097},
+{'m', 0x42be11e6, 0x428ae190},
+{'q', 0x37000000, 0x4173ea88},
+{0, 0xc0c965f0, 0x41ba4b32},
+{'q', 0xc0c96610, 0x4100abdc},
+{0, 0xc193b13c, 0x4100abdc},
+{'q', 0xc144ec50, 0xb4000000},
+{0, 0xc1944074, 0xc0ff1ada},
+{'q', 0xc0c72920, 0xc0ff1ada},
+{0, 0xc0c72920, 0xc1bada68},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0x40c07290, 0xc1bbf8d6},
+{'q', 0x40c07290, 0xc0fcde00},
+{0, 0x41982af4, 0xc0fcde00},
+{'q', 0x41496610, 0x00000000},
+{0, 0x41944074, 0x40ff1ad8},
+{'9', 0x003f002f, 0x00bb002f},
+{'m', 0xc2a9ee18, 0x41f1ada6},
+{'l', 0xc1667d54, 0x00000000},
+{'4', 0xfcec0202, 0x00000074},
+{'6', 0x0314fdfc, 0xfddefffb},
+{'q', 0x00000000, 0xc12faa10},
+{0, 0xc00abdc0, 0xc17bbf90},
+{'8', 0xdac6daf0, 0x26c200d4},
+{'q', 0xc00abdc0, 0x4095ee20},
+{0, 0xc00abdc0, 0x417bbf90},
+{'q', 0x00000000, 0x4130c880},
+{0, 0x400f3780, 0x417cddfc},
+{'8', 0x253c2512, 0xda3a0029},
+{'9', 0xffda0011, 0xff830011},
+{'m', 0x428d1e6e, 0x42187293},
+{'q', 0x00000000, 0xc131e6f0},
+{0, 0xc00abdc0, 0xc17dfc6c},
+{'8', 0xdac6daf0, 0x26c200d4},
+{'q', 0xc0064400, 0x409a67d0},
+{0, 0xc0064400, 0x417cddfc},
+{'q', 0x00000000, 0x4133055e},
+{0, 0x400f3780, 0x417cddfc},
+{'8', 0x243b2411, 0xda3a0028},
+{'q', 0x400f3760, 0xc0982af6},
+{0, 0x400f3760, 0xc17982af},
+{'@', 0x00000026, 0x0000676d},/*        &        x-advance: 103.425781 */
+{'M', 0x40c9660b, 0xc1d76276},
+{'q', 0x00000000, 0xc1170c88},
+{0, 0x40b5423d, 0xc1864408},
+{'q', 0x40b5423c, 0xc0ed33e8},
+{0, 0x418fc6b6, 0xc1525980},
+{'q', 0xc0a59828, 0xc127d50c},
+{0, 0xc0a59828, 0xc19c157a},
+{'q', 0x00000000, 0xc12e8ba8},
+{0, 0x40db4cf8, 0xc1864408},
+{'q', 0x40db4cf8, 0xc0be35b0},
+{0, 0x419c157c, 0xc0be35b0},
+{'q', 0x413bf8d4, 0x00000000},
+{0, 0x41944074, 0x40b30550},
+{'q', 0x40db4cf0, 0x40b30560},
+{0, 0x40db4cf0, 0x4172cc18},
+{'8', 0x4deb2b00, 0x40c222eb},
+{'q', 0xc09ee190, 0x406d33f0},
+{0, 0xc1876276, 0x4114cfac},
+{'q', 0x40dd89d8, 0x4143cde0},
+{0, 0x418880e6, 0x41bbf8d6},
+{'9', 0xffa8003a, 0xff350058},
+{'l', 0x4169d8a0, 0x409ca4b8},
+{'q', 0xc0982b00, 0x41825982},
+{0, 0xc157f1b0, 0x41eaf70c},
+{'8', 0x28632830, 0xf8410024},
+{'l', 0x00000000, 0x41632203},
+{'8', 0x0cb70ce2, 0xefa000d0},
+{'q', 0xc0c07290, 0xc00abdc2},
+{0, 0xc12faa10, 0xc0c9660a},
+{'q', 0xc13e35b8, 0x411055ee},
+{0, 0xc1d4072a, 0x411055ee},
+{'q', 0xc1813b13, 0xb4000000},
+{0, 0xc1c8479c, 0xc0ed33eb},
+{'9', 0xffc5ffb9, 0xff59ffb9},
+{'m', 0x42433ea8, 0x411b8644},
+{'q', 0xc139bbfc, 0xc14efe36},
+{0, 0xc1982af8, 0xc1d2e8ba},
+{'q', 0xc1407292, 0x40b54240},
+{0, 0xc1407292, 0x4182e8ba},
+{'8', 0x58243700, 0x21632124},
+{'8', 0xf3410024, 0xe32ff31d},
+{'m', 0x40b77f20, 0xc273ea84},
+{'8', 0xccebe100, 0xecc7eceb},
+{'8', 0x18be00d5, 0x3fea18ea},
+{'8', 0x6b1e3000, 0xd653e73a},
+{'8', 0xdc27ef19, 0xd40ded0d},
+{'@', 0x00000027, 0x0000220e},/*        '        x-advance: 34.054688 */
+{'M', 0x41c60abe, 0xc27b3056},
+{'l', 0xc17508f4, 0x00000000},
+{'l', 0xbfe8ba30, 0xc20eefe2},
+{'l', 0x41982af7, 0x00000000},
+{'l', 0xbff1ada0, 0x420eefe2},
+{'@', 0x00000028, 0x00002fb1},/*        (        x-advance: 47.691406 */
+{'M', 0x41df377f, 0x41edc322},
+{'q', 0xc12faa12, 0xc17cddfd},
+{0, 0xc17dfc6b, 0xc1fc4ec5},
+{'q', 0xc09ca4b4, 0xc17bbf8e},
+{0, 0xc09ca4b4, 0xc20d423c},
+{'q', 0x00000000, 0xc19c157c},
+{0, 0x409ca4b4, 0xc20cb306},
+{'9', 0xff830027, 0xff05007e},
+{'l', 0x419d33eb, 0x00000000},
+{'q', 0xc130c884, 0x417f1ad8},
+{0, 0xc180abdd, 0x41fdfc6c},
+{'q', 0xc09ee190, 0x417cddfc},
+{0, 0xc09ee190, 0x420bdc32},
+{'q', 0x00000000, 0x4198ba2e},
+{0, 0x409ee190, 0x420b4cfa},
+{'q', 0x409ee194, 0x417aa11e},
+{0, 0x4180abdd, 0x41ffaa12},
+{'l', 0xc19d33eb, 0x00000000},
+{'@', 0x00000029, 0x00002fb1},/*        )        x-advance: 47.691406 */
+{'M', 0x3e0f377f, 0x41edc322},
+{'q', 0x4133055f, 0xc182e8ba},
+{0, 0x4180abdc, 0xc1ffaa12},
+{'q', 0x409ee190, 0xc17aa11e},
+{0, 0x409ee190, 0xc20b4cfa},
+{'q', 0x00000000, 0xc199d89e},
+{0, 0xc0a11e6c, 0xc20c23ce},
+{'9', 0xff82ffd8, 0xff03ff80},
+{'l', 0x419d33ea, 0x00000000},
+{'q', 0x4130c882, 0x417dfc68},
+{0, 0x417dfc6e, 0x41fcddfc},
+{'q', 0x409ca4b0, 0x417bbf8c},
+{0, 0x409ca4b0, 0x420c23ce},
+{'q', 0x00000000, 0x419b8643},
+{0, 0xc09ca4b0, 0x420cb305},
+{'q', 0xc09a67d8, 0x417bbf8d},
+{0, 0xc17dfc6e, 0x41fd6d34},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000002a, 0x000037bb},/*        *        x-advance: 55.730469 */
+{'M', 0x42099f54, 0xc29ebdc3},
+{'l', 0x418377f2, 0xc0e8ba30},
+{'l', 0x40982af8, 0x415c6b68},
+{'l', 0xc18bdc32, 0x408880f0},
+{'l', 0x41501ca4, 0x416e5258},
+{'l', 0xc14ddfc8, 0x41076274},
+{'l', 0xc1235b4c, 0xc18cfaa0},
+{'l', 0xc126b69a, 0x418cfaa0},
+{'l', 0xc1501ca4, 0xc1099f54},
+{'l', 0x41549660, 0xc16c1578},
+{'l', 0xc18bdc32, 0xc08880f0},
+{'l', 0x40982af7, 0xc15c6b68},
+{'l', 0x4185b4cf, 0x40e8ba30},
+{'l', 0xbfa11e70, 0xc1994964},
+{'l', 0x41708f3a, 0x00000000},
+{'l', 0xbfa11e80, 0x41994964},
+{'@', 0x0000002b, 0x000053a2},/*        +        x-advance: 83.632812 */
+{'M', 0x4246e191, 0xc21f292d},
+{'l', 0x00000000, 0x41e44073},
+{'l', 0xc17cddfc, 0x00000000},
+{'l', 0x00000000, 0xc1e44073},
+{'l', 0xc1df377f, 0x00000000},
+{'l', 0xb5000000, 0xc17aa11c},
+{'l', 0x41df377f, 0x00000000},
+{'l', 0x00000000, 0xc1e44074},
+{'l', 0x417cddfc, 0x00000000},
+{'l', 0x00000000, 0x41e44074},
+{'l', 0x41e0e526, 0x00000000},
+{'l', 0x00000000, 0x417aa11c},
+{'l', 0xc1e0e526, 0x00000000},
+{'@', 0x0000002c, 0x000027ca},/*        ,        x-advance: 39.789062 */
+{'M', 0x41f1ada6, 0xc093b13b},
+{'q', 0x00000000, 0x41064407},
+{0, 0xbfe8ba30, 0x416d33ea},
+{'9', 0x0033fff3, 0x005fffd3},
+{'l', 0xc14efe36, 0x00000000},
+{'8', 0xa935d921, 0xa614d114},
+{'l', 0xc11055ee, 0x00000000},
+{'l', 0x00000000, 0xc1aaa11e},
+{'l', 0x41a1ada6, 0x00000000},
+{'l', 0x00000000, 0x4185b4cf},
+{'@', 0x0000002d, 0x00002fb1},/*        -        x-advance: 47.691406 */
+{'M', 0x40b3055f, 0xc1e4cfaa},
+{'l', 0x00000000, 0xc18880e4},
+{'l', 0x4211745d, 0x00000000},
+{'l', 0x00000000, 0x418880e4},
+{'l', 0xc211745d, 0x00000000},
+{'@', 0x0000002e, 0x000027ca},/*        .        x-advance: 39.789062 */
+{'M', 0x411b8644, 0x00000000},
+{'l', 0x00000000, 0xc1aaa11e},
+{'l', 0x41a1ada6, 0x00000000},
+{'l', 0x00000000, 0x41aaa11e},
+{'l', 0xc1a1ada6, 0x00000000},
+{'@', 0x0000002f, 0x000027ca},/*        /        x-advance: 39.789062 */
+{'M', 0x3fb3055f, 0x40377f1b},
+{'l', 0x41a2cc15, 0xc2d54966},
+{'l', 0x41852599, 0x00000000},
+{'l', 0xc1a00001, 0x42d54966},
+{'l', 0xc187f1ad, 0xb5a00000},
+{'@', 0x00000030, 0x00004fa6},/*        0        x-advance: 79.648438 */
+{'M', 0x42938d6d, 0xc24533ea},
+{'q', 0x00000000, 0x41c7b863},
+{0, 0xc1099f50, 0x42175423},
+{'q', 0xc10880e8, 0x414ddfc8},
+{0, 0xc1cd5090, 0x414ddfc8},
+{'q', 0xc2076276, 0xb4000000},
+{0, 0xc2076276, 0xc24acc15},
+{'q', 0xb5c00000, 0xc18d89d8},
+{0, 0x406d33e4, 0xc1e70c88},
+{'q', 0x406d33ec, 0xc1330560},
+{0, 0x4131e6ef, 0xc1840728},
+{'q', 0x40ed33ec, 0xc0aa11f0},
+{0, 0x419ca4b4, 0xc0aa11f0},
+{'q', 0x418bdc32, 0x00000000},
+{0, 0x41ccc158, 0x414a8478},
+{'9', 0x00650040, 0x01300040},
+{'m', 0xc19dc322, 0x00000000},
+{'q', 0x00000000, 0xc15a2e8c},
+{0, 0xbfaa11e0, 0xc1a982b0},
+{'8', 0xaadec4f6, 0xe6bce6e9},
+{'8', 0x1ab800d1, 0x56de1ae8},
+{'q', 0xbfa11e70, 0x40ef70c8},
+{0, 0xbfa11e70, 0x41a8f378},
+{'q', 0x00000000, 0x4157f1ac},
+{0, 0x3faa11e0, 0x41a8f377},
+{'8', 0x56223c0b, 0x1a451a18},
+{'8', 0xe544002c, 0xa823e518},
+{'q', 0x3fb30560, 0xc0f3ea80},
+{0, 0x3fb30560, 0xc1a5982a},
+{'@', 0x00000031, 0x00004fa6},/*        1        x-advance: 79.648438 */
+{'M', 0x411055ee, 0x00000000},
+{'l', 0x00000000, 0xc169d89d},
+{'l', 0x41c33ea9, 0x00000000},
+{'l', 0x00000000, 0xc28667d5},
+{'l', 0xc1bd1746, 0x416c1580},
+{'l', 0xb5800000, 0xc17745d0},
+{'l', 0x41c57b86, 0xc1801ca4},
+{'l', 0x4194cfaa, 0x00000000},
+{'l', 0x00000000, 0x42a7d508},
+{'l', 0x41b4b306, 0x36400000},
+{'l', 0x00000000, 0x4169d89d},
+{'l', 0xc2854966, 0x00000000},
+{'@', 0x00000032, 0x00004fa6},/*        2        x-advance: 79.648438 */
+{'M', 0x409ee191, 0x00000000},
+{'l', 0x00000000, 0xc15a2e8b},
+{'q', 0x40762762, 0xc1076277},
+{0, 0x412e8ba2, 0xc184072a},
+{'q', 0x40e44074, 0xc100abd8},
+{0, 0x418f377f, 0xc1864406},
+{'q', 0x4125982c, 0xc1064408},
+{0, 0x41679bc0, 0xc15d89d8},
+{'8', 0xab21d521, 0x9a999a00},
+{'8', 0x1bb300ce, 0x51de1ae6},
+{'l', 0xc19e525a, 0xbf8f3740},
+{'q', 0x3fd6d340, 0xc15b4d00},
+{0, 0x41235b4e, 0xc1a745d4},
+{'q', 0x41099f54, 0xc0e67d50},
+{0, 0x41bada67, 0xc0e67d50},
+{'q', 0x417f1adc, 0x00000000},
+{0, 0x41c3cde0, 0x40e8ba30},
+{'q', 0x410880e8, 0x40e8ba30},
+{0, 0x410880e8, 0x41a35b4c},
+{'8', 0x64eb3700, 0x52c92ceb},
+{'8', 0x46b425de, 0x40b021d7},
+{'8', 0x3fb91fd9, 0x44d11fe1},
+{'l', 0x4236efe4, 0x00000000},
+{'l', 0x00000000, 0x41813b14},
+{'l', 0xc289e6f0, 0x00000000},
+{'@', 0x00000033, 0x00004fa6},/*        3        x-advance: 79.648438 */
+{'M', 0x4294f378, 0xc1dabdc3},
+{'q', 0x00000000, 0x415d89d9},
+{0, 0xc1117460, 0x41ab3056},
+{'q', 0xc111745c, 0x40f1ada6},
+{0, 0xc1cefe34, 0x40f1ada6},
+{'q', 0xc17dfc6c, 0xb4000000},
+{0, 0xc1c9f543, 0xc0e8ba2f},
+{'9', 0xffc6ffb6, 0xff58ffa9},
+{'l', 0x41a00000, 0xbfdfc6b0},
+{'q', 0x3ff1adb0, 0x41632203},
+{0, 0x41813b14, 0x41632203},
+{'8', 0xe5570038, 0xab1fe51f},
+{'q', 0x00000000, 0xc0d25988},
+{0, 0xc0982af8, 0xc1211e70},
+{'9', 0xffe5ffda, 0xffe5ff8f},
+{'4', 0x0000ffca, 0xff820000},
+{'l', 0x40cddfc8, 0x00000000},
+{'8', 0xe5650043, 0xb122e522},
+{'8', 0xb4e5d000, 0xe5b2e5e6},
+{'8', 0x1ab200d0, 0x4cde1ae3},
+{'l', 0xc19d33eb, 0xbfb30580},
+{'q', 0x3fc4ec54, 0xc14ba2e8},
+{0, 0x4128f378, 0xc19f70c8},
+{'q', 0x411055ee, 0xc0e67d50},
+{0, 0x41bc880e, 0xc0e67d50},
+{'q', 0x417745d0, 0x00000000},
+{0, 0x41c101ca, 0x40dfc6c0},
+{'q', 0x410bdc30, 0x40dd89d0},
+{0, 0x410bdc30, 0x4199d89c},
+{'q', 0x00000000, 0x4113b138},
+{0, 0xc0ae8ba0, 0x4172cc14},
+{'9', 0x002fffd5, 0x003fff84},
+{'l', 0x00000000, 0x3e8f3780},
+{'q', 0x4135423c, 0x3faa11e0},
+{0, 0x418b4cfa, 0x40ef70c8},
+{'q', 0x40c4ec50, 0x40c2af70},
+{0, 0x40c4ec50, 0x417982ae},
+{'@', 0x00000034, 0x00004fa6},/*        4        x-advance: 79.648438 */
+{'M', 0x428377f2, 0xc1a08f37},
+{'l', 0x00000000, 0x41a08f37},
+{'l', 0xc195ee1a, 0x00000000},
+{'l', 0x00000000, 0xc1a08f37},
+{'l', 0xc2334cfb, 0x00000000},
+{'l', 0x35400000, 0xc16c157e},
+{'l', 0x42266efe, 0xc27ed33d},
+{'l', 0x41afaa14, 0x00000000},
+{'l', 0x00000000, 0x427f6275},
+{'4', 0x00000069, 0x00740000},
+{'6', 0x0000ff97, 0xfe8aff6b},
+{'8', 0xbf01e200, 0xd303dd02},
+{'9', 0x001ffff2, 0x005affcc},
+{'l', 0xc1b6efe3, 0x420b055f},
+{'l', 0x41e67d51, 0x00000000},
+{'l', 0x00000000, 0xc200f377},
+{'@', 0x00000035, 0x00004fa6},/*        5        x-advance: 79.648438 */
+{'M', 0x42975424, 0xc2033056},
+{'q', 0x00000000, 0x417aa11e},
+{0, 0xc11ca4b8, 0x41c7b864},
+{'q', 0xc11b8640, 0x4113b13c},
+{0, 0xc1d5b4ce, 0x4113b13c},
+{'q', 0xc16d33ea, 0xb4000000},
+{0, 0xc1be35b5, 0xc0d49661},
+{'9', 0xffcbffb9, 0xff66ffa9},
+{'l', 0x419d33eb, 0xbfcddfc0},
+{'8', 0x492b320c, 0x164e161f},
+{'8', 0xdb5d003a, 0x9523db23},
+{'8', 0x9ddfc200, 0xdba4dbdf},
+{'9', 0x0000ffbf, 0x0032ff96},
+{'l', 0xc1994966, 0x00000000},
+{'l', 0x405b4cf8, 0xc25dd173},
+{'l', 0x426cec4e, 0x00000000},
+{'4', 0x00740000, 0x0000feb5},
+{'l', 0xbfcddfc0, 0x41c7292e},
+{'q', 0x40e44070, 0xc0c96608},
+{0, 0x418ea848, 0xc0c96608},
+{'q', 0x4160e524, 0x00000000},
+{0, 0x41b39496, 0x410bdc30},
+{'q', 0x41076278, 0x410bdc30},
+{0, 0x41076278, 0x41be35b4},
+{'@', 0x00000036, 0x00004fa6},/*        6        x-advance: 79.648438 */
+{'M', 0x4294f378, 0xc200f378},
+{'q', 0x00000000, 0x417bbf8e},
+{0, 0xc10cfaa0, 0x41c57b86},
+{'q', 0xc10cfaa4, 0x410f3780},
+{0, 0xc1c2af72, 0x410f3780},
+{'q', 0xc18b4cfa, 0xb4000000},
+{0, 0xc1d64407, 0xc142af71},
+{'q', 0xc114cfaa, 0xc143cddf},
+{0, 0xc114cfaa, 0xc210e526},
+{'q', 0x35000000, 0xc1d2e8ba},
+{0, 0x41170c88, 0xc21e99f5},
+{'q', 0x41182af8, 0xc155b4d0},
+{0, 0x41d9101c, 0xc155b4d0},
+{'q', 0x4148479c, 0x00000000},
+{0, 0x419dc322, 0x40b0c880},
+{'9', 0x002c003a, 0x00890052},
+{'l', 0xc1944074, 0x40259840},
+{'8', 0xb3a1b3eb, 0x3f9d00c1},
+{'q', 0xc08f377c, 0x40fcde00},
+{0, 0xc08f377c, 0x41bfe35a},
+{'8', 0xc045d719, 0xea65ea2c},
+{'q', 0x415377f0, 0x00000000},
+{0, 0x41a745d2, 0x41064404},
+{'9', 0x0043003d, 0x00b6003d},
+{'m', 0xc19dc322, 0x3f0f3780},
+{'8', 0x9ae1bd00, 0xddabdde2},
+{'8', 0x21ad00cc, 0x57e121e1},
+{'q', 0x00000000, 0x41099f52},
+{0, 0x4081ca48, 0x41644072},
+{'8', 0x2c562c21, 0xdb520035},
+{'q', 0x406d33f0, 0xc0982af8},
+{0, 0x406d33f0, 0xc1513b14},
+{'@', 0x00000037, 0x00004fa6},/*        7        x-advance: 79.648438 */
+{'M', 0x4292b69a, 0xc2a5dfc7},
+{'q', 0xc0d49660, 0x4127d510},
+{0, 0xc149660c, 0x41a2cc16},
+{'q', 0xc0bbf8d8, 0x411dc324},
+{0, 0xc12479bc, 0x419ee192},
+{'q', 0xc08cfaa0, 0x411ee190},
+{0, 0xc0dfc6b8, 0x41a3ea84},
+{'9', 0x0053ffec, 0x00b1ffec},
+{'l', 0xc1a3ea84, 0x00000000},
+{'q', 0x00000000, 0xc144ec4f},
+{0, 0x404ddfc8, 0xc1be35b5},
+{'q', 0x404ddfc8, 0xc1389d8a},
+{0, 0x4114cfaa, 0xc1bb699f},
+{'9', 0xffa10030, 0xfee700b0},
+{'l', 0xc243cddf, 0x00000000},
+{'l', 0xb5000000, 0xc1813b10},
+{'l', 0x428667d5, 0x00000000},
+{'l', 0x00000000, 0x417982a8},
+{'@', 0x00000038, 0x00004fa6},/*        8        x-advance: 79.648438 */
+{'M', 0x42967d50, 0xc1de1910},
+{'q', 0x00000000, 0x415d89d9},
+{0, 0xc11292c8, 0x41ac4ec5},
+{'q', 0xc11292cc, 0x40f3ea84},
+{0, 0xc1d13b14, 0x40f3ea84},
+{'q', 0xc186d33e, 0xb4000000},
+{0, 0xc1d13b14, 0xc0f3ea85},
+{'q', 0xc113b13a, 0xc0f3ea83},
+{0, 0xc113b13a, 0xc1ab3056},
+{'q', 0x35000000, 0xc1170c86},
+{0, 0x40ae8ba4, 0xc17dfc6a},
+{'9', 0xffcc002b, 0xffc00074},
+{'l', 0x00000000, 0xbe8f3780},
+{'q', 0xc0ff1adc, 0xbfdfc6c0},
+{0, 0xc14ddfc7, 0xc0fcde00},
+{'q', 0xc09ca4b4, 0xc0c4ec48},
+{0, 0xc09ca4b4, 0xc1632204},
+{'q', 0x00000000, 0xc1419100},
+{0, 0x410880e5, 0xc198ba2c},
+{'q', 0x41099f54, 0xc0dfc6c0},
+{0, 0x41c22039, 0xc0dfc6c0},
+{'q', 0x41801ca4, 0x00000000},
+{0, 0x41c45d16, 0x40db4d00},
+{'q', 0x41099f58, 0x40d91020},
+{0, 0x41099f58, 0x419af70c},
+{'q', 0x00000000, 0x4100abd8},
+{0, 0xc09ca4b0, 0x41620394},
+{'9', 0x0030ffda, 0x003dff98},
+{'l', 0x00000000, 0x3e8f3780},
+{'q', 0x41182af8, 0x3fc4ec60},
+{0, 0x416e5258, 0x40faa120},
+{'9', 0x0031002b, 0x0080002b},
+{'m', 0xc1a2cc14, 0xbfcddfc0},
+{'q', 0x00000000, 0xc17745d0},
+{0, 0xc1762760, 0xc17745d0},
+{'8', 0x20a900c7, 0x5de220e2},
+{'8', 0x651e4500, 0x1f5c1f1e},
+{'8', 0xe159003c, 0x991de11d},
+{'m', 0xc013b130, 0xc22d6d34},
+{'8', 0xafe7c900, 0xe6b3e6e7},
+{'q', 0xc14ba2e8, 0x00000000},
+{0, 0xc14ba2e8, 0x4157f1b0},
+{'q', 0x00000000, 0x41620394},
+{0, 0x414ddfc8, 0x41620394},
+{'8', 0xe64c0033, 0xaa19e619},
+{'@', 0x00000039, 0x00004fa6},/*        9        x-advance: 79.648438 */
+{'M', 0x4294abdc, 0xc24b5b4d},
+{'q', 0x00000000, 0x41d1ca4b},
+{0, 0xc1194968, 0x421cec4f},
+{'q', 0xc1194964, 0x41501ca4},
+{0, 0xc1d99f52, 0x41501ca4},
+{'q', 0xc1501ca6, 0xb4000000},
+{0, 0xc1a35b4d, 0xc0b0c881},
+{'9', 0xffd4ffc6, 0xff74ffad},
+{'l', 0x4193b13c, 0xc0259830},
+{'8', 0x52645215, 0xc1650042},
+{'q', 0x408f3780, 0xc0fcddfc},
+{0, 0x4093b140, 0xc1bb699e},
+{'8', 0x42bb29eb, 0x179817d0},
+{'q', 0xc1501ca4, 0x00000000},
+{0, 0xc1a5982a, 0xc10cfaa0},
+{'q', 0xc0f3ea87, 0xc10e1910},
+{0, 0xc0f3ea87, 0xc1bfe35a},
+{'q', 0x00000000, 0xc1786440},
+{0, 0x410f377e, 0xc1c2203c},
+{'q', 0x411055f0, 0xc10bdc30},
+{0, 0x41cba2e9, 0xc10bdc30},
+{'q', 0x418d89d8, 0x00000000},
+{0, 0x41d25984, 0x4144ec50},
+{'9', 0x00610045, 0x01260045},
+{'m', 0xc1a62762, 0xc15c6b6c},
+{'q', 0x00000000, 0xc11292c8},
+{0, 0xc081ca48, 0xc168ba28},
+{'8', 0xd5abd5e1, 0x26ae00cc},
+{'8', 0x68e325e3, 0x691d4100},
+{'8', 0x2752271d, 0xde530032},
+{'q', 0x40864408, 0xc08abdc0},
+{0, 0x40864408, 0xc1389d8c},
+{'@', 0x0000003a, 0x00002fb1},/*        :        x-advance: 47.691406 */
+{'M', 0x415c6b69, 0xc2525983},
+{'l', 0x00000000, 0xc19dc322},
+{'4', 0x000000a1, 0x009d0000},
+{'6', 0x0000ff5f, 0x01a40000},
+{'l', 0x00000000, 0xc19d33ea},
+{'l', 0x41a11e70, 0x00000000},
+{'l', 0x00000000, 0x419d33ea},
+{'l', 0xc1a11e70, 0x00000000},
+{'@', 0x0000003b, 0x00002fb1},/*        ;        x-advance: 47.691406 */
+{'M', 0x42083949, 0xc093b13b},
+{'q', 0x00000000, 0x41064407},
+{0, 0xbfe8ba20, 0x416d33ea},
+{'9', 0x0033fff3, 0x005fffd3},
+{'l', 0xc14ddfc7, 0x00000000},
+{'8', 0xa536d323, 0xaa13d213},
+{'l', 0xc11055ef, 0x00000000},
+{'4', 0xff630000, 0x000000a1},
+{'6', 0x00780000, 0xfe81ff5f},
+{'l', 0xb5800000, 0xc19dc320},
+{'l', 0x41a11e6e, 0x00000000},
+{'l', 0x00000000, 0x419dc322},
+{'l', 0xc1a11e6e, 0x00000000},
+{'@', 0x0000003c, 0x000053a2},/*        <        x-advance: 83.632812 */
+{'M', 0x40c07293, 0xc21055ee},
+{'l', 0x00000000, 0xc1b423ce},
+{'l', 0x428fa2e9, 0xc1dabdc2},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc26901ca, 0x41b5d174},
+{'l', 0x426901ca, 0x41b5423d},
+{'l', 0x00000000, 0x417dfc6c},
+{'l', 0xc28fa2e9, 0xc1dabdc3},
+{'@', 0x0000003d, 0x000053a2},/*        =        x-advance: 83.632812 */
+{'M', 0x40be35b5, 0xc26b8644},
+{'l', 0x00000000, 0xc17982b0},
+{'4', 0x0000023e, 0x007c0000},
+{'6', 0x0000fdc2, 0x01340000},
+{'l', 0x00000000, 0xc17745d4},
+{'l', 0x428fa2e9, 0x00000000},
+{'l', 0x00000000, 0x417745d2},
+{'l', 0xc28fa2e9, 0x00000000},
+{'@', 0x0000003e, 0x000053a2},/*        >        x-advance: 83.632812 */
+{'M', 0x40c07293, 0xc10bdc32},
+{'l', 0x00000000, 0xc17dfc6c},
+{'l', 0x4268ba2e, 0xc1b5423d},
+{'l', 0xc268ba2e, 0xc1b5d174},
+{'l', 0x35c00000, 0xc17f1ad8},
+{'l', 0x428fa2e9, 0x41dabdc2},
+{'l', 0x00000000, 0x41b423ce},
+{'l', 0xc28fa2e9, 0x41dabdc3},
+{'@', 0x0000003f, 0x0000577b},/*        ?        x-advance: 87.480469 */
+{'M', 0x429e7627, 0xc28f7f1b},
+{'8', 0x61e83600, 0x5aa62be8},
+{'l', 0xc0aa11e0, 0x40762760},
+{'8', 0x37c71bda, 0x3dec1bee},
+{'l', 0xc1955ee1, 0x00000000},
+{'8', 0x9b1fc703, 0xad55d41d},
+{'8', 0xb854d73b, 0xba18e118},
+{'8', 0xb3e0cf00, 0xe4a5e4e1},
+{'8', 0x21a100c8, 0x57d421da},
+{'l', 0xc19f70c8, 0xbf56d380},
+{'q', 0x3ff1ada0, 0xc1632200},
+{0, 0x413ada66, 0xc1b0c880},
+{'q', 0x411ca4b4, 0xc0fcde00},
+{0, 0x41cba2ea, 0xc0fcde00},
+{'q', 0x41849660, 0x00000000},
+{0, 0x41d01ca2, 0x40f1adb0},
+{'9', 0x003b004c, 0x00a5004c},
+{'m', 0xc24267d4, 0x428f7f1b},
+{'l', 0xb6000000, 0xc1970c88},
+{'l', 0x41a1ada7, 0x00000000},
+{'l', 0x00000000, 0x41970c88},
+{'l', 0xc1a1ada7, 0x00000000},
+{'@', 0x00000040, 0x00008ba6},/*        @        x-advance: 139.648438 */
+{'M', 0x43035424, 0xc24acc15},
+{'q', 0x00000000, 0x414ba2e8},
+{0, 0xc08f3790, 0x41b9bbf8},
+{'q', 0xc08cfaa0, 0x4127d508},
+{0, 0xc143cdd8, 0x418377f2},
+{'q', 0xc0faa120, 0x40bbf8d5},
+{0, 0xc1876278, 0x40bbf8d5},
+{'8', 0xe7b100cd, 0xb9e5e7e5},
+{'9', 0xffec0000, 0xffdb0003},
+{'l', 0xbed6d300, 0x00000000},
+{'q', 0xc05fc6c0, 0x40eaf70c},
+{0, 0xc126b698, 0x41407292},
+{'q', 0xc0db4d00, 0x4095ee19},
+{0, 0xc160e528, 0x4095ee19},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18880e4, 0xc0e20395},
+{'q', 0xc0c07298, 0xc0e44070},
+{0, 0xc0c07298, 0xc19ee190},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0x408f3780, 0xc1ab3056},
+{'q', 0x40917460, 0xc1200000},
+{0, 0x4148479c, 0xc17aa11c},
+{'q', 0x4100abdc, 0xc0b77f20},
+{0, 0x418fc6b8, 0xc0b77f20},
+{'9', 0x0000006d, 0x00610093},
+{'l', 0x3ed6d400, 0x00000000},
+{'4', 0xffab0015, 0x00000057},
+{'l', 0xc102e8b8, 0x420d89d9},
+{'q', 0xc0259820, 0x41407292},
+{0, 0xc0259820, 0x41864407},
+{'8', 0x270c1b00, 0x0b1e0b0d},
+{'8', 0xda55002c, 0x9840d928},
+{'q', 0x404072a0, 0xc102e8b8},
+{0, 0x404072a0, 0xc18fc6b6},
+{'q', 0x00000000, 0xc143cde0},
+{0, 0xc0ac4ed0, 0xc1acddfc},
+{'q', 0xc0aa11e0, 0xc1170c88},
+{0, 0xc1762760, 0xc168ba30},
+{'q', 0xc1211e70, 0xc0a35b50},
+{0, 0xc1bb69a0, 0xc0a35b50},
+{'q', 0xc1864406, 0x00000000},
+{0, 0xc1eca4b2, 0x40eaf710},
+{'q', 0xc14cc158, 0x40eaf710},
+{0, 0xc1a11e6f, 0x41a982b0},
+{'q', 0xc0e8ba30, 0x415d89d8},
+{0, 0xc0e8ba30, 0x41f86440},
+{'q', 0x00000000, 0x415a2e8c},
+{0, 0x40b0c884, 0x41bfe35c},
+{'q', 0x40b3055c, 0x412479bb},
+{0, 0x417aa11c, 0x417982ae},
+{'q', 0x41211e70, 0x40a7d50a},
+{0, 0x41bd1746, 0x40a7d50a},
+{'9', 0x000000a4, 0xffaa0149},
+{'l', 0x408abdc0, 0x410880e5},
+{'q', 0xc13bf8d8, 0x40d49660},
+{0, 0xc1b80e50, 0x41182af6},
+{'q', 0xc1330560, 0x40377f20},
+{0, 0xc1b80e54, 0x40377f20},
+{'q', 0xc184072a, 0x00000000},
+{0, 0xc1e8ba2e, 0xc0d49660},
+{'q', 0xc148479c, 0xc0d6d340},
+{0, 0xc19ca4b4, 0xc19a67d5},
+{'q', 0xc0dfc6b4, 0xc14a847a},
+{0, 0xc0dfc6b4, 0xc1e79bc0},
+{'q', 0x00000000, 0xc19e525a},
+{0, 0x410cfaa2, 0xc20f377e},
+{'q', 0x410e1910, 0xc1801ca8},
+{0, 0x41c3cde0, 0xc1c699f8},
+{'q', 0x417982ac, 0xc10cfaa0},
+{0, 0x420b9495, 0xc10cfaa0},
+{'q', 0x4187f1b0, 0x00000000},
+{0, 0x41eb8644, 0x40cba2f0},
+{'q', 0x41472930, 0x40c96600},
+{0, 0x41979bc0, 0x418ea848},
+{'9', 0x005c0034, 0x00d60034},
+{'m', 0xc234faa2, 0x3e8f3780},
+{'8', 0xaadfcb00, 0xdfabdfdf},
+{'8', 0x23a200cc, 0x63c022d7},
+{'q', 0xc0377f10, 0x40ff1ae0},
+{0, 0xc0377f10, 0x418377f2},
+{'8', 0x641a3f00, 0x2453241b},
+{'8', 0xe9470024, 0xbd3ee923},
+{'8', 0x9b29d41b, 0xa60fc70f},
+{'@', 0x00000041, 0x0000676d},/*        A        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'q', 0xbf7aa100, 0x404ddfc0},
+{0, 0xc1407290, 0x420d89d9},
+{'l', 0x41e292ca, 0x00000000},
+{'@', 0x00000042, 0x0000676d},/*        B        x-advance: 103.425781 */
+{'M', 0x42c1d89d, 0xc1e0e525},
+{'q', 0x00000000, 0x4156d33e},
+{0, 0xc1211e68, 0x41a62762},
+{'9', 0x003affb0, 0x003aff21},
+{'4', 0x0000fe76, 0xfcec0000},
+{'l', 0x42346b6a, 0x00000000},
+{'q', 0x419055ec, 0x00000000},
+{0, 0x41da2e88, 0x40c96600},
+{'q', 0x4114cfb0, 0x40c72930},
+{0, 0x4114cfb0, 0x4193b13c},
+{'q', 0x00000000, 0x41064408},
+{0, 0xc095ee20, 0x41632204},
+{'q', 0xc093b140, 0x40b77f18},
+{0, 0xc1620398, 0x40f86440},
+{'q', 0x413f5428, 0x3fb30560},
+{0, 0x41917460, 0x40f1ada0},
+{'9', 0x00300032, 0x00810032},
+{'m', 0xc1a59828, 0xbfcddfd0},
+{'9', 0xff920000, 0xff92ff62},
+{'4', 0x0000ff2f, 0x00e20000},
+{'l', 0x41d76276, 0x35800000},
+{'q', 0x411ee190, 0x00000000},
+{0, 0x41679bc0, 0xc0644074},
+{'9', 0xffe30024, 0xffaa0024},
+{'m', 0xc0b77f20, 0xc22508f3},
+{'8', 0xb5decb00, 0xea9ceadf},
+{'4', 0x0000ff45, 0x00c30000},
+{'l', 0x41bd1746, 0x00000000},
+{'8', 0xe8650045, 0xb71fe81f},
+{'@', 0x00000043, 0x0000676d},/*        C        x-advance: 103.425781 */
+{'M', 0x425e60ac, 0xc16d33ea},
+{'9', 0x00000095, 0xff6b00cf},
+{'l', 0x418fc6b8, 0x40d9101c},
+{'q', 0xc0b9bc00, 0x41644072},
+{0, 0xc18880e8, 0x41aa11e7},
+{'q', 0xc1330558, 0x40dd89d8},
+{0, 0xc1d6d33c, 0x40dd89d8},
+{'q', 0xc1be35b5, 0xb4000000},
+{0, 0xc2132204, 0xc156d33f},
+{'q', 0xc14efe34, 0xc157f1ad},
+{0, 0xc14efe34, 0xc216c4ec},
+{'q', 0xb5000000, 0xc1c2203a},
+{0, 0x4148479a, 0xc2151745},
+{'q', 0x4148479c, 0xc1501ca8},
+{0, 0x42112cc2, 0xc1501ca8},
+{'q', 0x418abdc0, 0x00000000},
+{0, 0x41e20394, 0x40dfc6c0},
+{'9', 0x00370057, 0x00a3007a},
+{'l', 0xc191745c, 0x409ee190},
+{'q', 0xc013b140, 0xc0ed33f0},
+{0, 0xc1117460, 0xc13bf8d8},
+{'q', 0xc0d6d340, 0xc08cfaa0},
+{0, 0xc17dfc6c, 0xc08cfaa0},
+{'q', 0xc15fc6b4, 0x00000000},
+{0, 0xc1aa11e6, 0x410abdc0},
+{'q', 0xc0e67d50, 0x410abdc8},
+{0, 0xc0e67d50, 0x41cb13b2},
+{'q', 0x00000000, 0x4187f1ae},
+{0, 0x40ed33e8, 0x41cf8d6d},
+{'q', 0x40ef70c8, 0x410f3780},
+{0, 0x41ac4ec6, 0x410f3780},
+{'@', 0x00000044, 0x0000676d},/*        D        x-advance: 103.425781 */
+{'M', 0x42c2d33f, 0xc2480000},
+{'q', 0x00000000, 0x4173ea84},
+{0, 0xc0c072a0, 0x41d52598},
+{'q', 0xc0be35b0, 0x4135423d},
+{0, 0xc1876274, 0x418abdc3},
+{'9', 0x0030ffa9, 0x0030ff38},
+{'4', 0x0000fec2, 0xfcec0000},
+{'l', 0x420ea848, 0x00000000},
+{'q', 0x41c7292c, 0x00000000},
+{0, 0x421a2038, 0x41496608},
+{'9', 0x0064006d, 0x011f006d},
+{'m', 0xc1a62764, 0x00000000},
+{'q', 0x00000000, 0xc17dfc68},
+{0, 0xc1040728, 0xc1c19100},
+{'9', 0xffbdffbe, 0xffbdff44},
+{'4', 0x0000ff8c, 0x02150000},
+{'l', 0x418bdc32, 0xb6000000},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a8f378, 0xc11292cc},
+{'q', 0x40faa120, 0xc11292ce},
+{0, 0x40faa120, 0xc1c7292d},
+{'@', 0x00000045, 0x00005f86},/*        E        x-advance: 95.523438 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0x00000000, 0x41c60abc},
+{'l', 0x42525983, 0x00000000},
+{'l', 0x00000000, 0x417f1adc},
+{'l', 0xc2525983, 0x00000000},
+{'l', 0x00000000, 0x41cf8d6d},
+{'l', 0x426ee191, 0x00000000},
+{'l', 0x00000000, 0x417f1ada},
+{'l', 0xc2a0b305, 0x00000000},
+{'@', 0x00000046, 0x0000577b},/*        F        x-advance: 87.480469 */
+{'M', 0x41f1ada6, 0xc2a52cc1},
+{'l', 0x00000000, 0x41f3ea84},
+{'l', 0x4249ada7, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc249ada7, 0x00000000},
+{'l', 0x00000000, 0x42109d8a},
+{'l', 0xc1a508f3, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x4291508f, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc2501ca5, 0x00000000},
+{'@', 0x00000047, 0x00006f66},/*        G        x-advance: 111.398438 */
+{'M', 0x4261745d, 0xc16c157b},
+{'q', 0x4100abdc, 0x00000000},
+{0, 0x417982ac, 0xc013b13c},
+{'9', 0xffed003c, 0xffd0005d},
+{'l', 0x00000000, 0xc15a2e8c},
+{'l', 0xc1c07292, 0x00000000},
+{'4', 0xff870000, 0x00000157},
+{'l', 0x00000000, 0x4210e526},
+{'q', 0xc0faa120, 0x4100abdb},
+{0, 0xc1a35b4c, 0x41496609},
+{'q', 0xc1484798, 0x4091745e},
+{0, 0xc1d25982, 0x4091745e},
+{'q', 0xc1c07293, 0xb4000000},
+{0, 0xc213f8d7, 0xc1549661},
+{'q', 0xc14efe34, 0xc155b4cf},
+{0, 0xc14efe34, 0xc2175424},
+{'q', 0xb5000000, 0xc1c2af72},
+{0, 0x41501ca4, 0xc2151745},
+{'q', 0x41501ca4, 0xc1501ca8},
+{0, 0x4215a67d, 0xc1501ca8},
+{'9', 0x00000115, 0x00cd0161},
+{'l', 0xc1982af8, 0x40b77f20},
+{'q', 0xc044ec40, 0xc0ef70d0},
+{0, 0xc11a67d0, 0xc1354240},
+{'q', 0xc0d25980, 0xc0762760},
+{0, 0xc17745d4, 0xc0762760},
+{'q', 0xc168ba2c, 0x00000000},
+{0, 0xc1b0c880, 0x410cfaa0},
+{'q', 0xc0f1ada8, 0x410cfaa0},
+{0, 0xc0f1ada8, 0x41c9f542},
+{'q', 0x00000000, 0x4185b4d0},
+{0, 0x40f86440, 0x41cefe36},
+{'q', 0x40faa120, 0x4111745d},
+{0, 0x41afaa12, 0x4111745d},
+{'@', 0x00000048, 0x0000676d},/*        H        x-advance: 103.425781 */
+{'M', 0x42924b30, 0x00000000},
+{'l', 0x00000000, 0xc228f378},
+{'l', 0xc22bbf8d, 0x00000000},
+{'l', 0x00000000, 0x4228f378},
+{'l', 0xc1a508f3, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x41a508f3, 0x00000000},
+{'l', 0x00000000, 0x421cec4e},
+{'l', 0x422bbf8d, 0x00000000},
+{'l', 0x00000000, 0xc21cec4e},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc1a508f4, 0x00000000},
+{'@', 0x00000049, 0x000027ca},/*        I        x-advance: 39.789062 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x41a508f3, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc1a508f3, 0x00000000},
+{'@', 0x0000004a, 0x00004fa6},/*        J        x-advance: 79.648438 */
+{'M', 0x421292cc, 0x3fb3055f},
+{'q', 0xc17508f4, 0x00000000},
+{0, 0xc1bc880e, 0xc0d49661},
+{'9', 0xffcbffbf, 0xff55ffa9},
+{'l', 0x41a3ea84, 0xc0407290},
+{'8', 0x5a253c0a, 0x1d4b1d1b},
+{'8', 0xdf4a0031, 0xa219df19},
+{'l', 0x00000000, 0xc24eb69a},
+{'l', 0xc19d33ea, 0x00000000},
+{'4', 0xff7f0000, 0x00000141},
+{'l', 0x00000000, 0x4286af70},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc10bdc30, 0x41bfe35c},
+{'q', 0xc10bdc34, 0x41099f54},
+{0, 0xc1c3cde0, 0x41099f54},
+{'@', 0x0000004b, 0x0000676d},/*        K        x-advance: 103.425781 */
+{'M', 0x429b8644, 0x00000000},
+{'l', 0xc20d89d9, 0xc234faa1},
+{'l', 0xc142af70, 0x4114cfac},
+{'l', 0x00000000, 0x420fc6b6},
+{'l', 0xc1a508f3, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x41a508f3, 0x00000000},
+{'l', 0x00000000, 0x4232bdc2},
+{'l', 0x42319f55, 0xc232bdc2},
+{'l', 0x41c07290, 0x00000000},
+{'l', 0xc2286440, 0x4226b699},
+{'l', 0x42361910, 0x4263699f},
+{'l', 0xc1c2af70, 0x00000000},
+{'@', 0x0000004c, 0x0000577b},/*        L        x-advance: 87.480469 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x41a508f3, 0x00000000},
+{'l', 0x00000000, 0x42a52cc1},
+{'l', 0x425377f1, 0xb6000000},
+{'l', 0x00000000, 0x417f1ada},
+{'l', 0xc292fe35, 0x00000000},
+{'@', 0x0000004d, 0x0000774c},/*        M        x-advance: 119.296875 */
+{'M', 0x42b6cc15, 0x00000000},
+{'l', 0x00000000, 0xc26ee191},
+{'q', 0x00000000, 0xc001ca50},
+{0, 0x00000000, 0xc081ca48},
+{'q', 0x3d8f3800, 0xc001ca40},
+{0, 0x3f330580, 0xc18b4cfc},
+{'9', 0x0096ffd9, 0x00d1ffc6},
+{'l', 0xc18e1910, 0x425bdc32},
+{'4', 0x0000ff8b, 0xfe49ff72},
+{'l', 0xc0ef70cc, 0xc1d1ca4c},
+{'9', 0x00810006, 0x00ab0006},
+{'l', 0x00000000, 0x426ee191},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x41dcfaa1, 0x00000000},
+{'l', 0x418cfaa0, 0x425c6b68},
+{'l', 0x409ca4b8, 0x41944073},
+{'l', 0x408cfa98, 0xc17cddfa},
+{'l', 0x4190e528, 0xc2675423},
+{'l', 0x41dbdc30, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc19292cc, 0x00000000},
+{'@', 0x0000004e, 0x0000676d},/*        N        x-advance: 103.425781 */
+{'M', 0x428b292d, 0x00000000},
+{'l', 0xc22bbf8e, 0xc297bf8d},
+{'9', 0x0058000a, 0x008e000a},
+{'l', 0x00000000, 0x42687293},
+{'l', 0xc19292cc, 0x00000000},
+{'4', 0xfcec0000, 0x000000bc},
+{'l', 0x422e4407, 0x429901ca},
+{'9', 0xffacfff6, 0xff67fff6},
+{'l', 0x00000000, 0xc2651745},
+{'l', 0x419292cc, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc1c19100, 0x00000000},
+{'@', 0x0000004f, 0x00006f66},/*        O        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'q', 0x40f1ada0, 0xc111745c},
+{0, 0x40f1ada0, 0xc1ce6efe},
+{'@', 0x00000050, 0x00005f86},/*        P        x-advance: 95.523438 */
+{'M', 0x42b5423d, 0xc286af71},
+{'q', 0x00000000, 0x41182af8},
+{0, 0xc08abdc0, 0x4187f1ae},
+{'q', 0xc08abdd0, 0x40ef70c8},
+{0, 0xc1472930, 0x4139bbfc},
+{'9', 0x0020ffc0, 0x0020ff67},
+{'l', 0xc1c3cde0, 0x00000000},
+{'l', 0x00000000, 0x420abdc3},
+{'4', 0x0000ff5b, 0xfcec0000},
+{'l', 0x4231101c, 0x00000000},
+{'q', 0x418d89d8, 0x00000000},
+{0, 0x41d99f54, 0x4102e8b8},
+{'9', 0x0040004c, 0x00b8004c},
+{'m', 0xc1a62764, 0x3eb30600},
+{'9', 0xff840000, 0xff84ff6e},
+{'4', 0x0000ff56, 0x00ff0000},
+{'l', 0x41af1ada, 0x00000000},
+{'8', 0xdf690044, 0x9f24de24},
+{'@', 0x00000051, 0x00006f66},/*        Q        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x419dc322},
+{0, 0xc11b8640, 0x420377f2},
+{'q', 0xc11a67d8, 0x41513b12},
+{0, 0xc1d76278, 0x41849660},
+{'8', 0x50353713, 0x18601822},
+{'9', 0x00000021, 0xfffb0042},
+{'l', 0xbe0f3600, 0x41620394},
+{'q', 0xc10cfaa0, 0x3ffaa120},
+{0, 0xc1876278, 0x3ffaa120},
+{'q', 0xc13660a8, 0x00000000},
+{0, 0xc1970c88, 0xc0cba2e8},
+{'q', 0xc0ef70c8, 0xc0cba2ea},
+{0, 0xc1407290, 0xc1a8f378},
+{'q', 0xc19f70c9, 0xbff1ada7},
+{0, 0xc1f7d509, 0xc172cc15},
+{'q', 0xc12faa12, 0xc155b4cf},
+{0, 0xc12faa12, 0xc20cfaa1},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f62768, 0x4115ee19},
+{0, 0x41a8f378, 0x4115ee19},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745d},
+{'q', 0x40f1ada0, 0xc111745c},
+{0, 0x40f1ada0, 0xc1cefe36},
+{'@', 0x00000052, 0x0000676d},/*        R        x-advance: 103.425781 */
+{'M', 0x429a8ba3, 0x00000000},
+{'l', 0xc1b6efe4, 0xc215a67d},
+{'l', 0xc1c19102, 0x00000000},
+{'l', 0x00000000, 0x4215a67d},
+{'4', 0x0000ff5b, 0xfcec0000},
+{'l', 0x4244ec4e, 0x00000000},
+{'q', 0x418cfaa0, 0x00000000},
+{0, 0x41d99f54, 0x40f3ea80},
+{'q', 0x41194968, 0x40f1ada0},
+{0, 0x41194968, 0x41adfc6c},
+{'q', 0x00000000, 0x41259828},
+{0, 0xc0bbf8e0, 0x418f377e},
+{'9', 0x003bffd2, 0x004eff82},
+{'4', 0x014b00d5, 0x0000ff47},
+{'m', 0xc01ca4c0, 0xc288a4b3},
+{'9', 0xff8f0000, 0xff8fff6f},
+{'4', 0x0000ff2d, 0x00e80000},
+{'l', 0x41d7f1ae, 0x00000000},
+{'8', 0xe1690045, 0xa923e123},
+{'@', 0x00000053, 0x00005f86},/*        S        x-advance: 95.523438 */
+{'M', 0x42b3dc32, 0xc1e32203},
+{'q', 0x00000000, 0x41679bbf},
+{0, 0xc12c4ec8, 0x41b157b8},
+{'q', 0xc12b3050, 0x40f3ea84},
+{0, 0xc1fbbf8c, 0x40f3ea84},
+{'q', 0xc1979bbf, 0xb4000000},
+{0, 0xc1edc322, 0xc0d6d33f},
+{'9', 0xffcbffaa, 0xff5eff92},
+{'l', 0x419f70c9, 0xc0525980},
+{'q', 0x4001ca48, 0x40faa11c},
+{0, 0x40fcddfc, 0x413660aa},
+{'q', 0x40bbf8d8, 0x405fc6bc},
+{0, 0x41825982, 0x405fc6bc},
+{'q', 0x41acddfc, 0x00000000},
+{0, 0x41acddfc, 0xc1525983},
+{'8', 0xc9ecdf00, 0xdcc9ebed},
+{'q', 0xc08f3780, 0xbfe8ba20},
+{0, 0xc18a2e8c, 0xc08cfaa0},
+{'q', 0xc130c880, 0xc0259820},
+{0, 0xc1762764, 0xc0840728},
+{'8', 0xe3c2f4de, 0xd7d1efe5},
+{'8', 0xc8e2e8ed, 0xb6f6e0f6},
+{'q', 0x00000000, 0xc155b4d0},
+{0, 0x41200000, 0xc1a35b50},
+{'q', 0x41211e6e, 0xc0e44070},
+{0, 0x41e9d89d, 0xc0e44070},
+{'q', 0x419292ce, 0x00000000},
+{0, 0x41dbdc32, 0x40b77f20},
+{'9', 0x002d0049, 0x0097005f},
+{'l', 0xc1a00000, 0x402e8ba0},
+{'8', 0xb4cecef4, 0xe795e7db},
+{'q', 0xc195ee1a, 0x00000000},
+{0, 0xc195ee1a, 0x413bf8d8},
+{'8', 0x320f1e00, 0x212f1310},
+{'q', 0x407aa120, 0x3fdfc6a0},
+{0, 0x417dfc6c, 0x408880e0},
+{'q', 0x41632204, 0x40407290},
+{0, 0x41a23cde, 0x40b30560},
+{'8', 0x2f4d1431, 0x402b1a1c},
+{'q', 0x3ff1adc0, 0x4095ee18},
+{0, 0x3ff1adc0, 0x412d6d36},
+{'@', 0x00000054, 0x0000577b},/*        T        x-advance: 87.480469 */
+{'M', 0x42583949, 0xc2a52cc1},
+{'l', 0x00000000, 0x42a52cc1},
+{'l', 0xc1a508f2, 0x00000000},
+{'l', 0x00000000, 0xc2a52cc1},
+{'l', 0xc1fe8ba4, 0x00000000},
+{'l', 0x35600000, 0xc17f1ad8},
+{'l', 0x42a8abdc, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc1ff1ada, 0x00000000},
+{'@', 0x00000055, 0x0000676d},/*        U        x-advance: 103.425781 */
+{'M', 0x424a3cde, 0x3fb3055f},
+{'q', 0xc1a2cc16, 0x00000000},
+{0, 0xc1f982b0, 0xc11ee191},
+{'9', 0xffb1ffaa, 0xff1dffaa},
+{'4', 0xfe140000, 0x000000a5},
+{'l', 0x00000000, 0x426fffff},
+{'q', 0x00000000, 0x413ada68},
+{0, 0x40b0c884, 0x418e1910},
+{'q', 0x40b30560, 0x40c07292},
+{0, 0x4182e8ba, 0x40c07292},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x4187f1ac, 0xc0c9660a},
+{'9', 0xffce002f, 0xff6f002f},
+{'4', 0xfe260000, 0x000000a5},
+{'l', 0x00000000, 0x42723cdd},
+{'q', 0x00000000, 0x4195ee19},
+{0, 0xc139bbf8, 0x41e8ba2e},
+{'q', 0xc1389d88, 0x412479bc},
+{0, 0xc20211e6, 0x412479bc},
+{'@', 0x00000056, 0x00005f86},/*        V        x-advance: 95.523438 */
+{'M', 0x42694966, 0x00000000},
+{'l', 0xc1a745d2, 0x00000000},
+{'4', 0xfcecfedd, 0x000000ac},
+{'l', 0x41a23cde, 0x427d2597},
+{'9', 0x0031000f, 0x00940029},
+{'l', 0x3fcddfc0, 0xc0c2af70},
+{'9', 0xffbd0010, 0xff9c001b},
+{'l', 0x41a1ada6, 0xc27d2597},
+{'l', 0x41aaa120, 0x00000000},
+{'l', 0xc210e526, 0x42c5101c},
+{'@', 0x00000057, 0x0000872c},/*        W        x-advance: 135.171875 */
+{'M', 0x42db292d, 0x00000000},
+{'4', 0x0000ff3d, 0xfe39ff96},
+{'q', 0xc01ca4c0, 0xc1211e6c},
+{0, 0xc0840730, 0xc1a8643e},
+{'q', 0xbfd6d340, 0x411292c8},
+{0, 0xc02e8ba0, 0x415fc6b0},
+{'9', 0x0026fff8, 0x0200ff89},
+{'l', 0xc1c3cde0, 0x00000000},
+{'l', 0xc1cb13b1, 0xc2c5101c},
+{'4', 0x000000a7, 0x01fd0072},
+{'l', 0x404ddfc0, 0x41762762},
+{'q', 0x3ffaa120, 0xc11b8644},
+{0, 0x4071adb0, 0xc1944073},
+{'9', 0xffb9000f, 0xfe1d006f},
+{'4', 0x000000b8, 0x01a30063},
+{'9', 0x002e000b, 0x00d40027},
+{'l', 0x3fdfc680, 0xc101ca4c},
+{'l', 0x406d3400, 0xc180abdd},
+{'l', 0x413e35b0, 0xc25b4cf9},
+{'l', 0x41a745d0, 0x00000000},
+{'l', 0xc1cba2e4, 0x42c5101c},
+{'@', 0x00000058, 0x00005f86},/*        X        x-advance: 95.523438 */
+{'M', 0x42912cc1, 0x00000000},
+{'l', 0xc1c60abc, 0xc21cec4f},
+{'l', 0xc1c60abe, 0x421cec4f},
+{'l', 0xc1ae8ba3, 0x00000000},
+{'l', 0x420880e6, 0xc24f45d1},
+{'l', 0xc1fa11ea, 0xc23ada67},
+{'l', 0x41ae8ba3, 0x00000000},
+{'l', 0x41af1adb, 0x420b4cfa},
+{'l', 0x41af1ad8, 0xc20b4cfa},
+{'l', 0x41ad6d34, 0x00000000},
+{'l', 0xc1ef70c6, 0x423ada67},
+{'l', 0x42033055, 0x424f45d1},
+{'l', 0xc1ad6d34, 0x00000000},
+{'@', 0x00000059, 0x00005f86},/*        Y        x-advance: 95.523438 */
+{'M', 0x42687293, 0xc221ada6},
+{'l', 0x00000000, 0x4221ada6},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x00000000, 0xc221ada6},
+{'l', 0xc20c6b6a, 0xc2687292},
+{'l', 0x41acddfd, 0x00000000},
+{'l', 0x41bd1745, 0x4226b699},
+{'l', 0x41bf5424, 0xc226b699},
+{'l', 0x41acddfc, 0x00000000},
+{'l', 0xc20c6b69, 0x42687292},
+{'@', 0x0000005a, 0x0000577b},/*        Z        x-advance: 87.480469 */
+{'M', 0x42a6b69a, 0x00000000},
+{'l', 0xc29e2e8c, 0x00000000},
+{'l', 0x36200000, 0xc169d89d},
+{'l', 0x42552598, 0xc2878644},
+{'l', 0xc23fe35c, 0x00000000},
+{'l', 0x36000000, 0xc1813b10},
+{'l', 0x428dd174, 0x00000000},
+{'l', 0x00000000, 0x41655ee0},
+{'l', 0xc2552598, 0x4288157b},
+{'l', 0x42609d8a, 0x00000000},
+{'l', 0x00000000, 0x41813b14},
+{'@', 0x0000005b, 0x00002fb1},/*        [        x-advance: 47.691406 */
+{'M', 0x4100abdc, 0x41edc322},
+{'l', 0x00000000, 0xc3057f1b},
+{'l', 0x42179bbf, 0x37000000},
+{'l', 0x00000000, 0x41549660},
+{'l', 0xc19a67d4, 0x00000000},
+{'l', 0x00000000, 0x42d5b4d0},
+{'l', 0x419a67d4, 0xb6800000},
+{'l', 0x00000000, 0x4155b4d0},
+{'l', 0xc2179bbf, 0x00000000},
+{'@', 0x0000005c, 0x000027ca},/*       \         x-advance: 39.789062 */
+{'M', 0x41abbf8d, 0x40377f1b},
+{'l', 0xc1a00000, 0xc2d56d34},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x41a2cc15, 0x42d56d34},
+{'l', 0xc187f1ad, 0xb5a00000},
+{'@', 0x0000005d, 0x00002fb1},/*        ]        x-advance: 47.691406 */
+{'M', 0x3fdfc6b6, 0x41edc322},
+{'l', 0x00000000, 0xc155b4d0},
+{'l', 0x419b8644, 0x00000000},
+{'l', 0x00000000, 0xc2d5b4d0},
+{'l', 0xc19b8644, 0x37000000},
+{'l', 0x35400000, 0xc1549660},
+{'l', 0x42179bbf, 0x00000000},
+{'l', 0x00000000, 0x43057f1b},
+{'l', 0xc2179bbf, 0xb6800000},
+{'@', 0x0000005e, 0x000053a2},/*        ^        x-advance: 83.632812 */
+{'M', 0x4280f378, 0xc20fc6b6},
+{'l', 0xc1b660ac, 0xc2525984},
+{'l', 0xc1b5423d, 0x42525984},
+{'l', 0xc17dfc6b, 0x00000000},
+{'l', 0x41dabdc2, 0xc27a5982},
+{'l', 0x41b423ce, 0x00000000},
+{'l', 0x41dbdc32, 0x427a5982},
+{'l', 0xc1801ca4, 0x00000000},
+{'@', 0x0000005f, 0x00004fa6},/*        _        x-advance: 79.648438 */
+{'M', 0xbfb3055f, 0x418bdc32},
+{'l', 0x00000000, 0xc0ae8ba2},
+{'l', 0x42a49d89, 0x00000000},
+{'l', 0x00000000, 0x40ae8ba2},
+{'l', 0xc2a49d89, 0x00000000},
+{'@', 0x00000060, 0x00002fb1},/*        `        x-advance: 47.691406 */
+{'M', 0x41e32203, 0xc2a5745d},
+{'l', 0xc1be35b4, 0xc19a67d4},
+{'l', 0xb5000000, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b69, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1746, 0x00000000},
+{'@', 0x00000061, 0x00004fa6},/*        a        x-advance: 79.648438 */
+{'M', 0x41dbdc32, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'l', 0x00000000, 0xc0762768},
+{'@', 0x00000062, 0x0000577b},/*        b        x-advance: 87.480469 */
+{'M', 0x42a3377f, 0xc2187293},
+{'q', 0x00000000, 0x4195ee1a},
+{0, 0xc0f1ada0, 0x41e94966},
+{'q', 0xc0ef70d0, 0x4125982c},
+{0, 0xc1abbf8e, 0x4125982c},
+{'8', 0xe59100c0, 0xb0b8e5d2},
+{'l', 0xbe0f3780, 0x00000000},
+{'8', 0x35fe1300, 0x2bfb22fe},
+{'l', 0xc198ba2e, 0x00000000},
+{'9', 0xffcc0004, 0xff760004},
+{'l', 0x00000000, 0xc2ad01ca},
+{'l', 0x419d33ea, 0x00000000},
+{'4', 0x00e70000, 0x0062fffe},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x40d49660, 0xc168ba2c},
+{0, 0x41c19102, 0xc168ba2c},
+{'q', 0x4156d340, 0x00000000},
+{0, 0x41a479bc, 0x41235b48},
+{'9', 0x00510039, 0x00e50039},
+{'m', 0xc1a3ea84, 0x00000000},
+{'q', 0x00000000, 0xc14ddfc4},
+{0, 0xc071adb0, 0xc198ba2e},
+{'8', 0xcfa3cfe2, 0x359f00c1},
+{'q', 0xc0840728, 0x40d49660},
+{0, 0xc0840728, 0x4199d89e},
+{'q', 0x00000000, 0x41407292},
+{0, 0x4081ca50, 0x4195ee19},
+{'q', 0x40840728, 0x40d6d33e},
+{0, 0x41419100, 0x40d6d33e},
+{'q', 0x417982b0, 0x00000000},
+{0, 0x417982b0, 0xc1d0abdc},
+{'@', 0x00000063, 0x00004fa6},/*        c        x-advance: 79.648438 */
+{'M', 0x42262762, 0x3fb3055f},
+{'q', 0xc1899f53, 0x00000000},
+{0, 0xc1d49660, 0xc1235b4d},
+{'q', 0xc115ee18, 0xc12479bb},
+{0, 0xc115ee18, 0xc1e4cfaa},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x41170c87, 0xc1e94966},
+{'q', 0x41170c89, 0xc127d508},
+{0, 0x41d64406, 0xc127d508},
+{'q', 0x4155b4d0, 0x00000000},
+{0, 0x41b0c882, 0x40d6d340},
+{'9', 0x00350045, 0x00940057},
+{'l', 0xc19e525a, 0x3f7aa100},
+{'8', 0xb7dfd2fa, 0xe5b4e5e6},
+{'q', 0xc172cc16, 0x00000000},
+{0, 0xc172cc16, 0x41cb13b2},
+{'q', 0x00000000, 0x41d13b12},
+{0, 0x417745d2, 0x41d13b12},
+{'8', 0xe54a002c, 0xac25e41e},
+{'l', 0x419dc322, 0x3f68ba20},
+{'8', 0x6ed43ef8, 0x4ba230dd},
+{'q', 0xc0eaf710, 0x40525984},
+{0, 0xc184072a, 0x40525984},
+{'@', 0x00000064, 0x0000577b},/*        d        x-advance: 87.480469 */
+{'M', 0x426c157b, 0x00000000},
+{'8', 0xd7fbf8fe, 0xc8fedefe},
+{'l', 0xbe8f3780, 0x00000000},
+{'q', 0xc0cba2e8, 0x415b4cfb},
+{0, 0xc1c19102, 0x415b4cfb},
+{'q', 0xc15377f0, 0xb4000000},
+{0, 0xc1a35b4c, 0xc12479bc},
+{'q', 0xc0e67d51, 0xc125982a},
+{0, 0xc0e67d51, 0xc1e70c88},
+{'q', 0x00000000, 0xc1967d50},
+{0, 0x40f1ada5, 0xc1e82af8},
+{'q', 0x40f3ea84, 0xc12479b8},
+{0, 0x41ac4ec5, 0xc12479b8},
+{'8', 0x1a6e0040, 0x50481a2e},
+{'l', 0x3e0f3700, 0x00000000},
+{'l', 0xbe0f3700, 0xc1472930},
+{'4', 0xff240000, 0x0000009d},
+{'l', 0x00000000, 0x42ae8ba3},
+{'9', 0x00370000, 0x00840004},
+{'6', 0x0000ff68, 0xfecefff9},
+{'q', 0x00000000, 0xc143cde0},
+{0, 0xc0840730, 0xc1967d50},
+{'8', 0xcba0cbe0, 0x33a300c1},
+{'q', 0xc0762760, 0x40cba2e8},
+{0, 0xc0762760, 0x419c157c},
+{'q', 0x00000000, 0x41cddfc6},
+{0, 0x417745d0, 0x41cddfc6},
+{'q', 0x40f86440, 0x35800000},
+{0, 0x41407294, 0xc0d91018},
+{'q', 0x408880e8, 0xc0db4cfc},
+{0, 0x408880e8, 0xc19b8644},
+{'@', 0x00000065, 0x00004fa6},/*        e        x-advance: 79.648438 */
+{'M', 0x4223ea84, 0x3fb3055f},
+{'q', 0xc18880e4, 0x00000000},
+{0, 0xc1d1ca4a, 0xc1211e6f},
+{'q', 0xc11292cc, 0xc1223cdd},
+{0, 0xc11292cc, 0xc1ec157a},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x4114cfa9, 0xc1e67d50},
+{'q', 0x4114cfab, 0xc1211e70},
+{0, 0x41d2e8ba, 0xc1211e70},
+{'q', 0x41825984, 0x00000000},
+{0, 0x41c7292e, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x00040000, 0x0000fe7c},
+{'q', 0xb6000000, 0x4130c880},
+{0, 0x4081ca48, 0x4185b4cf},
+{'8', 0x2c5d2c21, 0xb8690053},
+{'l', 0x41944072, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0x00000000, 0xc2842af6},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf70c, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'@', 0x00000066, 0x00002fb1},/*        f        x-advance: 47.691406 */
+{'M', 0x42044ec5, 0xc27982af},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b4, 0x00000000},
+{'l', 0x35800000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba2, 0xc173ea88},
+{'q', 0x40ae8ba4, 0xc09ee190},
+{0, 0x41849661, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'l', 0x416e5258, 0x00000000},
+{'l', 0x00000000, 0x41549664},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x00000067, 0x0000577b},/*        g        x-advance: 87.480469 */
+{'M', 0x4226b69a, 0x41f2cc15},
+{'q', 0xc15d89da, 0x00000000},
+{0, 0xc1b27628, 0xc0a7d508},
+{'9', 0xffd6ffbd, 0xff88ffae},
+{'l', 0x419d33ea, 0xc013b13c},
+{'8', 0x39232408, 0x1448141b},
+{'q', 0x4102e8b8, 0x00000000},
+{0, 0x413f5424, 0xc0a11e70},
+{'9', 0xffd8001e, 0xff89001e},
+{'4', 0xffe10000, 0xffc50001},
+{'l', 0xbe0f3800, 0x00000000},
+{'q', 0xc0d01ca0, 0x415ea847},
+{0, 0xc1c2af70, 0x415ea847},
+{'q', 0xc15377f2, 0x32800000},
+{0, 0xc1a3ea84, 0xc11ee191},
+{'q', 0xc0e8ba31, 0xc11ee191},
+{0, 0xc0e8ba31, 0xc1e32202},
+{'q', 0x00000000, 0xc1944074},
+{0, 0x40ef70c9, 0xc1e4cfaa},
+{'q', 0x40ef70c8, 0xc1211e70},
+{0, 0x41adfc6c, 0xc1211e70},
+{'9', 0x00000084, 0x006d00b6},
+{'l', 0x3eb30580, 0x00000000},
+{'8', 0xcb02ed00, 0xd405df02},
+{'l', 0x4194cfac, 0x00000000},
+{'9', 0x003cfffd, 0x008bfffd},
+{'l', 0x00000000, 0x425f7f1a},
+{'q', 0x00000000, 0x41813b14},
+{0, 0xc11292c8, 0x41c33ea9},
+{'9', 0x0042ffb7, 0x0042ff2b},
+{'m', 0x418377f2, 0xc28a7627},
+{'q', 0x00000000, 0xc13ada68},
+{0, 0xc0864408, 0xc191745c},
+{'q', 0xc0840728, 0xc0d25988},
+{0, 0xc13d1748, 0xc0d25988},
+{'q', 0xc17bbf8c, 0x00000000},
+{0, 0xc17bbf8c, 0x41c9660c},
+{'q', 0x00000000, 0x41c57b86},
+{0, 0x417982b0, 0x41c57b86},
+{'q', 0x40faa120, 0xb5800000},
+{0, 0x413f5424, 0xc0d01ca8},
+{'q', 0x40864408, 0xc0d25980},
+{0, 0x40864408, 0xc194cfaa},
+{'@', 0x00000068, 0x0000577b},/*        h        x-advance: 87.480469 */
+{'M', 0x41eaf70c, 0xc2723cde},
+{'q', 0x407f1ae0, 0xc10abdc0},
+{0, 0x41200000, 0xc1496608},
+{'q', 0x40c07290, 0xc07aa120},
+{0, 0x41655ee0, 0xc07aa120},
+{'q', 0x41407298, 0x00000000},
+{0, 0x4193b13c, 0x40ed33e0},
+{'9', 0x003b0033, 0x00ad0033},
+{'4', 0x017f0000, 0x0000ff64},
+{'l', 0x00000000, 0xc22982af},
+{'q', 0x00000000, 0xc19f70ca},
+{0, 0xc157f1ac, 0xc19f70ca},
+{'q', 0xc0e44070, 0x00000000},
+{0, 0xc1389d88, 0x40c4ec50},
+{'9', 0x0030ffde, 0x007dffde},
+{'l', 0x00000000, 0x4221f542},
+{'l', 0xc19d33ea, 0x00000000},
+{'4', 0xfcc20000, 0x0000009d},
+{'l', 0x00000000, 0x41e292cc},
+{'q', 0x00000000, 0x40f3ea80},
+{0, 0xbf0f3780, 0x416e5258},
+{'l', 0x3e8f3780, 0x00000000},
+{'@', 0x00000069, 0x000027ca},/*        i        x-advance: 39.789062 */
+{'M', 0x41200000, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd360000},
+{'l', 0x00000000, 0xc1679bc0},
+{'l', 0x419d33ea, 0x00000000},
+{'l', 0x00000000, 0x41679bc0},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000006a, 0x000027ca},/*        j        x-advance: 39.789062 */
+{'M', 0x411a67d5, 0x41edc322},
+{'9', 0x0000ffc9, 0xfffbffa1},
+{'4', 0xff920000, 0x0002001c},
+{'8', 0xef360028, 0xb70fef0f},
+{'4', 0xfd820000, 0x0000009d},
+{'l', 0x00000000, 0x42a93b14},
+{'q', 0x00000000, 0x411ffffe},
+{0, 0xc0a35b4c, 0x41762762},
+{'9', 0x002bffd8, 0x002bff89},
+{'m', 0x3ed6d340, 0xc2ee0abe},
+{'l', 0x00000000, 0xc1679bb8},
+{'l', 0x419d33ea, 0x00000000},
+{'l', 0x00000000, 0x41679bc0},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000006b, 0x00004fa6},/*        k        x-advance: 79.648438 */
+{'M', 0x42694966, 0x00000000},
+{'l', 0xc1a1ada6, 0xc209101d},
+{'l', 0xc1076278, 0x40bbf8dc},
+{'l', 0x00000000, 0x41e32203},
+{'l', 0xc19d33ea, 0x00000000},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x419d33ea, 0x00000000},
+{'l', 0x00000000, 0x426dc322},
+{'l', 0x41d7f1ae, 0xc1faa120},
+{'l', 0x41a8f378, 0x00000000},
+{'l', 0xc1d49660, 0x41ec157c},
+{'l', 0x41e4cfa8, 0x42389d8a},
+{'l', 0xc1abbf8c, 0x00000000},
+{'@', 0x0000006c, 0x000027ca},/*        l        x-advance: 39.789062 */
+{'M', 0x41200000, 0x00000000},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x419d33ea, 0x00000000},
+{'l', 0x00000000, 0x42cf8d6d},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000006d, 0x00007f57},/*        m        x-advance: 127.339844 */
+{'M', 0x425a2e8b, 0x00000000},
+{'l', 0x00000000, 0xc229ca4b},
+{'q', 0x00000000, 0xc19f70c8},
+{0, 0xc1377f18, 0xc19f70c8},
+{'q', 0xc0be35b8, 0x00000000},
+{0, 0xc11b8644, 0x40c2af70},
+{'9', 0x0030ffe3, 0x007dffe3},
+{'4', 0x01440000, 0x0000ff63},
+{'l', 0x00000000, 0xc26af70c},
+{'8', 0xb1ffd000, 0xc9fee1ff},
+{'l', 0x4195ee19, 0x00000000},
+{'8', 0x39040a01, 0x3f022d02},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0x9c48bb1d, 0xe168e12b},
+{'9', 0x0000008a, 0x008400a8},
+{'l', 0x3ed6d400, 0x00000000},
+{'8', 0x9b49ba1e, 0xe26de22b},
+{'q', 0x4130c888, 0x00000000},
+{0, 0x4186d340, 0x40f1ada0},
+{'9', 0x003b002e, 0x00ac002e},
+{'4', 0x01800000, 0x0000ff64},
+{'l', 0x00000000, 0xc229ca4b},
+{'q', 0x00000000, 0xc19f70c8},
+{0, 0xc1377f20, 0xc19f70c8},
+{'q', 0xc0b77f10, 0x00000000},
+{0, 0xc1170c88, 0x40b30560},
+{'9', 0x002cffe3, 0x007affe1},
+{'l', 0x00000000, 0x4225dfc7},
+{'l', 0xc19c157e, 0x00000000},
+{'@', 0x0000006e, 0x0000577b},/*        n        x-advance: 87.480469 */
+{'M', 0x426c157b, 0x00000000},
+{'l', 0x00000000, 0xc229ca4b},
+{'q', 0x00000000, 0xc19f70c8},
+{0, 0xc157f1ac, 0xc19f70c8},
+{'q', 0xc0e44070, 0x00000000},
+{0, 0xc1389d88, 0x40c4ec50},
+{'9', 0x0030ffde, 0x007dffde},
+{'4', 0x01440000, 0x0000ff63},
+{'l', 0x00000000, 0xc26af70c},
+{'8', 0xb1ffd000, 0xc9fee1ff},
+{'l', 0x4195ee19, 0x00000000},
+{'8', 0x39040a01, 0x3f022d02},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x407f1ae0, 0xc10abdc0},
+{0, 0x41200000, 0xc1496608},
+{'q', 0x40c07290, 0xc07aa120},
+{0, 0x41655ee0, 0xc07aa120},
+{'q', 0x41407298, 0x00000000},
+{0, 0x4193b13c, 0x40ed33f0},
+{'9', 0x003b0033, 0x00ad0033},
+{'l', 0x00000000, 0x42402af7},
+{'l', 0xc19ca4b2, 0x00000000},
+{'@', 0x0000006f, 0x0000577b},/*        o        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'q', 0x4190e526, 0x00000000},
+{0, 0x4190e526, 0xc1cefe34},
+{'@', 0x00000070, 0x0000577b},/*        p        x-advance: 87.480469 */
+{'M', 0x42a3377f, 0xc218ba2e},
+{'q', 0x00000000, 0x41979bbf},
+{0, 0xc0f3ea80, 0x41ea67d4},
+{'q', 0xc0f1adb0, 0x412479bc},
+{0, 0xc1ab3056, 0x412479bc},
+{'8', 0xe59100c1, 0xb0b8e5d2},
+{'l', 0xbed6d340, 0x00000000},
+{'9', 0x00100003, 0x00650003},
+{'4', 0x00e80000, 0x0000ff63},
+{'l', 0x00000000, 0xc2aff1ae},
+{'9', 0xffab0000, 0xff75fffc},
+{'l', 0x4198ba2e, 0x00000000},
+{'8', 0x27040a02, 0x3a021d02},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x40d49660, 0xc15ea848},
+{0, 0x41c19102, 0xc15ea848},
+{'q', 0x415377f0, 0x00000000},
+{0, 0x41a3ea84, 0x41235b50},
+{'9', 0x0051003a, 0x00e7003a},
+{'m', 0xc1a3ea84, 0x00000000},
+{'q', 0x00000000, 0xc1cba2ea},
+{0, 0xc17982b0, 0xc1cba2ea},
+{'q', 0xc0faa120, 0x00000000},
+{0, 0xc1407294, 0x40db4d00},
+{'q', 0xc0840728, 0x40db4cf8},
+{0, 0xc0840728, 0x41994966},
+{'q', 0x00000000, 0x4143cdde},
+{0, 0x40840728, 0x41979bbf},
+{'q', 0x40864408, 0x40d4965e},
+{0, 0x413e35b4, 0x40d4965e},
+{'q', 0x417bbf90, 0x00000000},
+{0, 0x417bbf90, 0xc1d13b12},
+{'@', 0x00000071, 0x0000577b},/*        q        x-advance: 87.480469 */
+{'M', 0x40bbf8d7, 0xc2170c88},
+{'q', 0x00000000, 0xc195ee18},
+{0, 0x40f3ea83, 0xc1e82af8},
+{'q', 0x40f62762, 0xc1259828},
+{0, 0x41acddfe, 0xc1259828},
+{'q', 0x41840728, 0x00000000},
+{0, 0x41b6efe2, 0x415a2e8c},
+{'8', 0xc702e700, 0xd805e103},
+{'l', 0x41970c8a, 0x00000000},
+{'9', 0x003cfffd, 0x008bfffd},
+{'l', 0x00000000, 0x42aff1ae},
+{'l', 0xc19c157a, 0xb6800000},
+{'4', 0xff050000, 0xffaa0002},
+{'l', 0xbe0f3800, 0x00000000},
+{'q', 0xc0d01ca0, 0x415fc6b7},
+{0, 0xc1c57b86, 0x415fc6b7},
+{'q', 0xc15377f0, 0xb4000000},
+{0, 0xc1a35b4c, 0xc12479bc},
+{'9', 0xffaeffc7, 0xff19ffc7},
+{'m', 0x4250f378, 0xbed6d300},
+{'q', 0x00000000, 0xc1419104},
+{0, 0xc081ca50, 0xc195ee1a},
+{'q', 0xc081ca48, 0xc0d6d340},
+{0, 0xc13f5424, 0xc0d6d340},
+{'q', 0xc17bbf8c, 0x00000000},
+{0, 0xc17bbf8c, 0x41cefe36},
+{'q', 0x00000000, 0x41cddfc6},
+{0, 0x417982b0, 0x41cddfc6},
+{'q', 0x40f62760, 0x35800000},
+{0, 0x413e35b4, 0xc0d91018},
+{'q', 0x408880e8, 0xc0db4cfc},
+{0, 0x408880e8, 0xc19af70c},
+{'@', 0x00000072, 0x000037bb},/*        r        x-advance: 55.730469 */
+{'M', 0x41200000, 0x00000000},
+{'l', 0x00000000, 0xc2679bbf},
+{'8', 0xaeffcf00, 0xc5fedfff},
+{'l', 0x4195ee19, 0x00000000},
+{'8', 0x3d040a01, 0x43023202},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0xa728c116, 0xda2ae611},
+{'8', 0xf43df418, 0x0830001e},
+{'l', 0x00000000, 0x418377f2},
+{'8', 0xf8bdf8da, 0x2fa500c6},
+{'9', 0x002fffe0, 0x008cffe0},
+{'l', 0x00000000, 0x4214880e},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x00000073, 0x00004fa6},/*        s        x-advance: 79.648438 */
+{'M', 0x42938d6d, 0xc1b0c881},
+{'q', 0x00000000, 0x412faa12},
+{0, 0xc11055f0, 0x418a2e8c},
+{'q', 0xc10f377c, 0x40c7292c},
+{0, 0xc1c699f4, 0x40c7292c},
+{'q', 0xc17982ae, 0xb4000000},
+{0, 0xc1bf5423, 0xc09ca4b3},
+{'9', 0xffd9ffbe, 0xff85ffa9},
+{'l', 0x418a2e8b, 0xc0259828},
+{'8', 0x3c282b0b, 0x1164111d},
+{'8', 0xf0600042, 0xcc1ef01e},
+{'8', 0xd3e8e300, 0xe3aeefe8},
+{'q', 0xc1852597, 0xc0525980},
+{0, 0xc1b39496, 0xc0c2af70},
+{'8', 0xc6b9ead2, 0xa8e8dce8},
+{'q', 0x00000000, 0xc12d6d34},
+{0, 0x41052598, 0xc186d33e},
+{'q', 0x41064408, 0xc0c2af70},
+{0, 0x41bda67e, 0xc0c2af70},
+{'q', 0x4157f1ac, 0x00000000},
+{0, 0x41ad6d34, 0x40a7d510},
+{'9', 0x00290042, 0x00790052},
+{'l', 0xc18b4cfa, 0x3fe8ba40},
+{'8', 0xcadfdcfa, 0xeeadeee6},
+{'8', 0x0ead00c9, 0x2fe50de5},
+{'8', 0x29151a00, 0x19480f15},
+{'q', 0x410e1910, 0x3fe8ba20},
+{0, 0x417bbf8c, 0x4071ada0},
+{'8', 0x24580f37, 0x36351521},
+{'q', 0x40211e60, 0x40840728},
+{0, 0x40211e60, 0x412a11e6},
+{'@', 0x00000074, 0x00002fb1},/*        t        x-advance: 47.691406 */
+{'M', 0x41eaf70c, 0x3fa11e6f},
+{'q', 0xc10abdc2, 0x00000000},
+{0, 0xc155b4ce, 0xc095ee19},
+{'9', 0xffdaffdb, 0xff8effdb},
+{'l', 0x00000000, 0xc2327627},
+{'l', 0xc1194966, 0x00000000},
+{'l', 0xb4800000, 0xc1549664},
+{'l', 0x4128f378, 0x00000000},
+{'l', 0x40c4ec4e, 0xc18e1910},
+{'l', 0x4144ec4e, 0x00000000},
+{'l', 0x00000000, 0x418e1910},
+{'l', 0x41655ee0, 0x00000000},
+{'4', 0x006a0000, 0x0000ff8e},
+{'l', 0x00000000, 0x421d33ea},
+{'8', 0x41102c00, 0x14341410},
+{'9', 0x00000012, 0xfff90034},
+{'l', 0x00000000, 0x4142af71},
+{'q', 0xc0e8ba28, 0x40182af8},
+{0, 0xc1849660, 0x40182af8},
+{'@', 0x00000075, 0x0000577b},/*        u        x-advance: 87.480469 */
+{'M', 0x41e44072, 0xc2975424},
+{'l', 0x00000000, 0x4229ca4c},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0x4156d340, 0x419f70c8},
+{'q', 0x40e44070, 0xb5800000},
+{0, 0x41377f1c, 0xc0c2af70},
+{'9', 0xffcf0023, 0xff830023},
+{'4', 0xfebc0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'9', 0x004d0000, 0x00870004},
+{'l', 0xc195ee18, 0x00000000},
+{'9', 0xffb0fffa, 0xff88fffa},
+{'l', 0xbeb30500, 0x00000000},
+{'q', 0xc07aa120, 0x41099f54},
+{0, 0xc1200000, 0x4148479b},
+{'q', 0xc0c07298, 0x407aa120},
+{0, 0xc1655ee4, 0x407aa120},
+{'q', 0xc1407292, 0xb4000000},
+{0, 0xc193b13a, 0xc0eaf70d},
+{'9', 0xffc5ffcd, 0xff53ffcd},
+{'l', 0x00000000, 0xc2402af8},
+{'l', 0x419d33ea, 0x00000000},
+{'@', 0x00000076, 0x00004fa6},/*        v        x-advance: 79.648438 */
+{'M', 0x424c79bc, 0x00000000},
+{'l', 0xc1bbf8d7, 0x00000000},
+{'4', 0xfda3ff28, 0x000000a6},
+{'l', 0x415377f4, 0x42293b14},
+{'q', 0x3f864400, 0x405fc6b8},
+{0, 0x409ee190, 0x418bdc32},
+{'q', 0x3f330540, 0xc0377f18},
+{0, 0x40377f10, 0xc1211e6e},
+{'9', 0xffc70011, 0xfe730080},
+{'l', 0x41a479be, 0x00000000},
+{'l', 0xc1df3780, 0x42975424},
+{'@', 0x00000077, 0x00006f66},/*        w        x-advance: 111.398438 */
+{'M', 0x42b7a2e9, 0x00000000},
+{'4', 0x0000ff5a, 0xfe8fffa0},
+{'9', 0xffe7fffa, 0xff84ffe6},
+{'l', 0xc068ba30, 0x417aa120},
+{'l', 0xc142af70, 0x42380e52},
+{'l', 0xc1a62762, 0x00000000},
+{'l', 0xc19ca4b3, 0xc2975424},
+{'l', 0x4193b13b, 0x00000000},
+{'l', 0x4147292c, 0x42675424},
+{'l', 0x3f7aa120, 0xc0a59828},
+{'l', 0x3fdfc6b0, 0xc102e8ba},
+{'4', 0xfe9d005f, 0x000000a8},
+{'l', 0x4139bbf8, 0x4231e6f0},
+{'9', 0x001d0007, 0x006a0016},
+{'l', 0x3ffaa100, 0xc113b13a},
+{'l', 0x412e8ba8, 0xc24267d6},
+{'l', 0x4191745c, 0x00000000},
+{'l', 0xc19ee190, 0x42975424},
+{'@', 0x00000078, 0x00004fa6},/*        x        x-advance: 79.648438 */
+{'M', 0x42651746, 0x00000000},
+{'l', 0xc18cfaa2, 0xc1db4cfa},
+{'l', 0xc18e1910, 0x41db4cfa},
+{'l', 0xc1a745d1, 0x00000000},
+{'l', 0x41dd89d8, 0xc21c5d17},
+{'l', 0xc1d2e8ba, 0xc2124b31},
+{'l', 0x41a982b0, 0x00000000},
+{'l', 0x41813b13, 0x41c60abe},
+{'l', 0x4180abdc, 0xc1c60abe},
+{'l', 0x41aaa11e, 0x00000000},
+{'l', 0xc1d2e8ba, 0x4211745e},
+{'l', 0x41df377e, 0x421d33ea},
+{'l', 0xc1aaa11c, 0x00000000},
+{'@', 0x00000079, 0x00004fa6},/*        y        x-advance: 79.648438 */
+{'M', 0x419e5259, 0x41edc322},
+{'9', 0x0000ffc8, 0xfff9ff9d},
+{'l', 0x00000000, 0xc15fc6b6},
+{'8', 0x0436041d, 0xf6370021},
+{'8', 0xdd27f616, 0xad27e811},
+{'4', 0xfda9ff11, 0x000000a6},
+{'l', 0x413e35b4, 0x420dd175},
+{'9', 0x003c0016, 0x00ba0038},
+{'l', 0x3fdfc6c0, 0xc0d49660},
+{'l', 0x40917458, 0xc18377f1},
+{'4', 0xfee30059, 0x000000a4},
+{'l', 0xc1ef70c8, 0x429f4cfb},
+{'q', 0xc0c07298, 0x4168ba2c},
+{0, 0xc148479c, 0x41a11e6e},
+{'q', 0xc0cddfc8, 0x40b30560},
+{0, 0xc1852599, 0x40b30560},
+{'@', 0x0000007a, 0x0000479b},/*        z        x-advance: 71.605469 */
+{'M', 0x40b77f1b, 0x00000000},
+{'l', 0x00000000, 0xc15ea847},
+{'l', 0x420e60ac, 0xc23e35b5},
+{'l', 0xc202e8ba, 0x00000000},
+{'l', 0x00000000, 0xc1632204},
+{'l', 0x42599f54, 0x00000000},
+{'l', 0x00000000, 0x4160e528},
+{'l', 0xc20d89d8, 0x423d1746},
+{'l', 0x421b3ea7, 0xb5800000},
+{'l', 0x00000000, 0x41655ee1},
+{'l', 0xc272cc15, 0x00000000},
+{'@', 0x0000007b, 0x000037bb},/*        {        x-advance: 55.730469 */
+{'M', 0x421bcde0, 0x41edc322},
+{'q', 0xc115ee1a, 0x00000000},
+{0, 0xc1708f38, 0xc0ae8ba4},
+{'9', 0xffd4ffd4, 0xff85ffd4},
+{'l', 0x00000000, 0xc1b77f1a},
+{'8', 0xa1e2c100, 0xdf9fe1e2},
+{'l', 0xb4800000, 0xc15a2e8a},
+{'8', 0xde61fe43, 0xa11ee11e},
+{'l', 0x00000000, 0xc1b77f1c},
+{'q', 0x00000000, 0xc1235b48},
+{0, 0x40ae8ba4, 0xc1786440},
+{'9', 0xffd5002c, 0xffd50079},
+{'4', 0x0000006e, 0x006a0000},
+{'l', 0xc081ca48, 0x00000000},
+{'8', 0x1db700ce, 0x57ea1dea},
+{'l', 0x00000000, 0x41a86440},
+{'8', 0x5be03500, 0x31ad26e1},
+{'l', 0x00000000, 0x3e8f3780},
+{'8', 0x32540c35, 0x5a1f261f},
+{'l', 0x00000000, 0x41a86440},
+{'8', 0x58163b00, 0x1c491c16},
+{'l', 0x4081ca48, 0x00000000},
+{'l', 0x00000000, 0x4155b4d0},
+{'l', 0xc15c6b68, 0x00000000},
+{'@', 0x0000007c, 0x00002811},/*        |        x-advance: 40.066406 */
+{'M', 0x412e8ba3, 0x41fe8ba3},
+{'l', 0x00000000, 0xc307982b},
+{'l', 0x419292cc, 0x00000000},
+{'l', 0xb6000000, 0x4307982b},
+{'l', 0xc19292cc, 0xb6000000},
+{'@', 0x0000007d, 0x000037bb},/*        }        x-advance: 55.730469 */
+{'M', 0x40407293, 0x4182e8ba},
+{'l', 0x407f1ad9, 0x00000000},
+{'8', 0xe4490034, 0xa816e316},
+{'l', 0x00000000, 0xc1a86440},
+{'8', 0xa61fcd00, 0xce54da1f},
+{'l', 0x00000000, 0xbe8f3780},
+{'8', 0xd0adf6ce, 0xa4e0dae0},
+{'l', 0x00000000, 0xc1a86440},
+{'8', 0xa9eac600, 0xe3b7e3eb},
+{'4', 0x0000ffe1, 0xff960000},
+{'l', 0x415c6b69, 0x00000000},
+{'q', 0x411a67d6, 0x00000000},
+{0, 0x4171ada6, 0x40ac4ec0},
+{'9', 0x002a002c, 0x007c002c},
+{'l', 0x00000000, 0x41b77f1c},
+{'8', 0x5e1e3e00, 0x22621f1e},
+{'l', 0x00000000, 0x415a2e8a},
+{'8', 0x219e01bd, 0x5ee220e2},
+{'l', 0x00000000, 0x41b77f1a},
+{'q', 0x00000000, 0x411dc322},
+{0, 0xc0b3055c, 0x41762764},
+{'9', 0x002cffd4, 0x002cff88},
+{'l', 0xc15c6b69, 0x00000000},
+{'l', 0xb4800000, 0xc155b4d0},
+{'@', 0x0000007e, 0x000053a2},/*        ~        x-advance: 83.632812 */
+{'M', 0x426e5259, 0xc21055ee},
+{'8', 0xf5ae00d7, 0xe6aef5d8},
+{'q', 0xc1170c8a, 0xc0525980},
+{0, 0xc17745d2, 0xc0525980},
+{'8', 0x0cb700d9, 0x24bb0bdf},
+{'l', 0xb5000000, 0xc16e525c},
+{'q', 0x40fcddfb, 0xc0bbf8d0},
+{0, 0x41979bc0, 0xc0bbf8d0},
+{'q', 0x40eaf70c, 0x00000000},
+{0, 0x41876275, 0x40525980},
+{'8', 0x20651949, 0x0635061b},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x22bc18dd, 0x0ab00ae0},
+{'@', 0x000000a0, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x000000a1, 0x00002fb1},/*        ¡        x-advance: 47.691406 */
+{'M', 0x4159101c, 0x41b6efe3},
+{'l', 0x400f3780, 0xc28933ea},
+{'4', 0x00000080, 0x02240011},
+{'6', 0x0000ff5c, 0xfd830003},
+{'l', 0x00000000, 0xc1970c8c},
+{'l', 0x41a11e6f, 0x00000000},
+{'l', 0x00000000, 0x41970c8a},
+{'l', 0xc1a11e6f, 0x00000000},
+{'@', 0x000000a2, 0x00004fa6},/*        ¢        x-advance: 79.648438 */
+{'M', 0x422479bc, 0xc1be35b5},
+{'8', 0xe2520031, 0xaa29e221},
+{'l', 0x419e5258, 0x3f56d340},
+{'q', 0xbfc4ec40, 0x412b3058},
+{0, 0xc115ee18, 0x418ea848},
+{'9', 0x0038ffc2, 0x0044ff5e},
+{'4', 0x006a0000, 0x0000ffa6},
+{'l', 0x00000000, 0xc15377f2},
+{'q', 0xc1708f3a, 0xbfbbf8d8},
+{0, 0xc1bb69a0, 0xc12faa11},
+{'q', 0xc1064408, 0xc1182af8},
+{0, 0xc1064408, 0xc1cf8d6d},
+{'q', 0x35000000, 0xc181ca4a},
+{0, 0x4102e8bb, 0xc1d0abde},
+{'9', 0xffb20042, 0xffa400bd},
+{'4', 0xff9a0000, 0x0000005a},
+{'l', 0x00000000, 0x414ddfc0},
+{'q', 0x413d1744, 0x3faa1200},
+{0, 0x419b8644, 0x40fcde00},
+{'9', 0x0034003c, 0x0088004c},
+{'l', 0xc19dc324, 0x3f7aa100},
+{'8', 0xb2d9cef8, 0xe5b0e5e1},
+{'q', 0xc10abdc0, 0x00000000},
+{0, 0xc1525982, 0x40cddfc0},
+{'q', 0xc08f377c, 0x40cddfc8},
+{0, 0xc08f377c, 0x418f377e},
+{'q', 0x00000000, 0x4142af74},
+{0, 0x4093b138, 0x41944073},
+{'q', 0x4095ee18, 0x40cba2e8},
+{0, 0x41525984, 0x40cba2e8},
+{'@', 0x000000a3, 0x00004fa6},/*        £        x-advance: 79.648438 */
+{'M', 0x429c5d17, 0xc1cb13b1},
+{'q', 0xc00abdc0, 0x41407292},
+{0, 0xc1182af8, 0x4195ee19},
+{'9', 0x0035ffc6, 0x0035ff71},
+{'4', 0x0000fe7c, 0xff8e0000},
+{'8', 0xb84de039, 0x9d15d815},
+{'0', 0x0097cd00, 0x0063a100},
+{'l', 0x00000000, 0xc18abdc2},
+{'q', 0x00000000, 0xc160e528},
+{0, 0x40ef70ca, 0xc1aa11e8},
+{'q', 0x40ef70c8, 0xc0e8ba30},
+{0, 0x41b27628, 0xc0e8ba30},
+{'q', 0x413d1744, 0x00000000},
+{0, 0x4194cfaa, 0x409a67d0},
+{'9', 0x00260036, 0x007c004e},
+{'l', 0xc1825982, 0x405259a0},
+{'8', 0xc2ded5f5, 0xedc5edea},
+{'8', 0x20b700ce, 0x65ea1fea},
+{'l', 0x00000000, 0x417bbf8c},
+{'l', 0x41a00000, 0x00000000},
+{'4', 0x005f0000, 0x0000ff60},
+{'l', 0x00000000, 0x40c96610},
+{'8', 0x62ea3900, 0x48b228ea},
+{'l', 0x41d49660, 0x00000000},
+{'8', 0xe557003a, 0xb027e51e},
+{'l', 0x41825982, 0x402e8ba0},
+{'@', 0x000000a4, 0x00004fa6},/*        ¤        x-advance: 79.648438 */
+{'M', 0x4115ee19, 0xc23f5424},
+{'9', 0xffbd0000, 0xff850021},
+{'4', 0xffb6ffb6, 0xffa90057},
+{'l', 0x411292cc, 0x4114cfb0},
+{'q', 0x40e20394, 0xc0840730},
+{0, 0x41762764, 0xc0840730},
+{'9', 0x00000043, 0x0021007a},
+{'4', 0xffb5004b, 0x00580058},
+{'l', 0xc1182af8, 0x41170c88},
+{'q', 0x40864400, 0x40dd89d8},
+{0, 0x40864400, 0x417508f0},
+{'9', 0x00420000, 0x0079ffe0},
+{'4', 0x004a004a, 0x0059ffa8},
+{'l', 0xc114cfac, 0xc1170c87},
+{'q', 0xc0dfc6b8, 0x40840728},
+{0, 0xc17745d0, 0x40840728},
+{'9', 0x0000ffbc, 0xffe1ff85},
+{'4', 0x004cffb5, 0xffa8ffa9},
+{'l', 0x41170c88, 0xc1194966},
+{'9', 0xffc9ffe0, 0xff86ffe0},
+{'m', 0x417cddfd, 0xbe0f3700},
+{'8', 0x52223000, 0x22522222},
+{'8', 0xde51002f, 0xae22de22},
+{'8', 0xaeded000, 0xdeaedede},
+{'8', 0x22ae00d0, 0x52de22de},
+{'@', 0x000000a5, 0x00004fa6},/*        ¥        x-advance: 79.648438 */
+{'M', 0x42564407, 0xc2414966},
+{'l', 0x419a67d6, 0x00000000},
+{'l', 0x00000000, 0x41235b4c},
+{'l', 0xc1bd1746, 0x00000000},
+{'l', 0x00000000, 0x4135423e},
+{'l', 0x41bd1746, 0x00000000},
+{'l', 0x00000000, 0x412479bc},
+{'l', 0xc1bd1746, 0x00000000},
+{'l', 0x00000000, 0x41840729},
+{'l', 0xc1982af8, 0x00000000},
+{'l', 0x00000000, 0xc1840729},
+{'l', 0xc1bbf8d6, 0x00000000},
+{'l', 0xb5800000, 0xc12479bc},
+{'l', 0x41bbf8d6, 0x00000000},
+{'l', 0x3e0f3780, 0xc135423e},
+{'l', 0xc1bd1746, 0x00000000},
+{'l', 0x35800000, 0xc1235b4c},
+{'l', 0x419a67d6, 0x00000000},
+{'l', 0xc1cba2ea, 0xc248d6d2},
+{'l', 0x41a1ada6, 0x00000000},
+{'l', 0x41970c88, 0x4226b699},
+{'l', 0x41994966, 0xc226b699},
+{'l', 0x41a1ada8, 0x00000000},
+{'l', 0xc1cba2ea, 0x4248d6d2},
+{'@', 0x000000a6, 0x00002811},/*        ¦        x-advance: 40.066406 */
+{'M', 0x412e8ba3, 0x41fe8ba3},
+{'l', 0x00000000, 0xc259e6f0},
+{'4', 0x00000092, 0x01b30000},
+{'6', 0x0000ff6e, 0xfd880000},
+{'l', 0x00000000, 0xc2599f54},
+{'l', 0x419292cc, 0x00000000},
+{'l', 0xb6000000, 0x42599f54},
+{'l', 0xc19292cc, 0x00000000},
+{'@', 0x000000a7, 0x00004fa6},/*        §        x-advance: 79.648438 */
+{'M', 0x4220d6d3, 0xc2c79496},
+{'q', 0x4159101c, 0x00000000},
+{0, 0x41adfc6c, 0x409ee190},
+{'9', 0x00270042, 0x00710051},
+{'l', 0xc185b4d0, 0x3fdfc6c0},
+{'8', 0xcbd9def9, 0xedaeede1},
+{'8', 0x10a400c2, 0x34e310e3},
+{'8', 0x270f1600, 0x1b2a0f0f},
+{'q', 0x405fc6b0, 0x3fbbf8c0},
+{0, 0x414a8478, 0x405fc6a0},
+{'q', 0x413bf8d8, 0x402a1200},
+{0, 0x418abdc4, 0x40b0c888},
+{'8', 0x3944162d, 0x52182218},
+{'8', 0x5ce23400, 0x36b127e2},
+{'q', 0x414a8478, 0x40b0c880},
+{0, 0x414a8478, 0x418f377f},
+{'q', 0x00000000, 0x413ada68},
+{0, 0xc10cfaa0, 0x418f377f},
+{'q', 0xc10bdc34, 0x40c4ec50},
+{0, 0xc1c8479c, 0x40c4ec50},
+{'q', 0xc17982b0, 0x00000000},
+{0, 0xc1c07293, 0xc09a67d6},
+{'9', 0xffd9ffbd, 0xff86ffa8},
+{'l', 0x41849661, 0xc0259828},
+{'8', 0x422d2c0b, 0x14671422},
+{'8', 0xef670044, 0xc123ee23},
+{'8', 0xd5f3e600, 0xe3d6f0f3},
+{'q', 0xc0644080, 0xbfcddfd0},
+{0, 0xc184072a, 0xc095ee18},
+{'q', 0xc1667d50, 0xc05b4d00},
+{0, 0xc1a35b4c, 0xc10e1910},
+{'8', 0x96d1d5d1, 0xa91ecc00},
+{'8', 0xc958dd1e, 0xc5b3ebce},
+{'q', 0xc05b4cfc, 0xc0982af0},
+{0, 0xc05b4cfc, 0xc12a11e8},
+{'q', 0x00000000, 0xc126b698},
+{0, 0x4102e8bb, 0xc1813b14},
+{'9', 0xffd30042, 0xffd300bf},
+{'m', 0x4187f1ae, 0x42675423},
+{'q', 0x00000000, 0xc09ee190},
+{0, 0xc0864408, 0xc0f3ea80},
+{'q', 0xc0840728, 0xc02a11f0},
+{0, 0xc181ca4c, 0xc09ee190},
+{'8', 0x55950c95, 0x260f1600},
+{'8', 0x1a2b0f0f, 0x1d680b1b},
+{'q', 0x415a2e8c, 0xbf330540},
+{0, 0x415a2e8c, 0xc11ee190},
+{'@', 0x000000a8, 0x00002fb1},/*        ¨        x-advance: 47.691406 */
+{'M', 0x41fbbf8d, 0xc2a7b13b},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0xb4000000, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c8, 0x00000000},
+{'@', 0x000000a9, 0x00006986},/*        ©        x-advance: 105.523438 */
+{'M', 0x42ceb69a, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944074, 0x41944072},
+{'q', 0xc13bf8d0, 0x40d6d340},
+{0, 0xc1c9f540, 0x40d6d340},
+{'q', 0xc15c6b6c, 0xb4000000},
+{0, 0xc1cd5090, 0xc0dfc6b7},
+{'q', 0xc13d1745, 0xc0e20395},
+{0, 0xc1932203, 0xc1955ee1},
+{'q', 0xc0d01ca4, 0xc13ada66},
+{0, 0xc0d01ca4, 0xc1c7292d},
+{'q', 0xb4800000, 0xc157f1ac},
+{0, 0x40d9101c, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d6, 0xc0d91020},
+{0, 0x41c9f543, 0xc0d91020},
+{'q', 0x41591018, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0faa120, 0x00000000},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0xc0b77f20, 0xc1a982b0},
+{'q', 0xc0b77f10, 0xc11dc320},
+{0, 0xc17aa120, 0xc17982b0},
+{'q', 0xc11ee190, 0xc0b77f10},
+{0, 0xc1aaa11c, 0xc0b77f10},
+{'q', 0xc12faa14, 0x00000000},
+{0, 0xc1a62762, 0x40ae8ba0},
+{'q', 0xc11ca4b4, 0x40ae8ba0},
+{0, 0xc17cddfe, 0x41762760},
+{'q', 0xc0be35b4, 0x411dc324},
+{0, 0xc0be35b4, 0x41ad6d34},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40b5423c, 0x41aaa11f},
+{'q', 0x40b77f1c, 0x411ee190},
+{0, 0x41786440, 0x417aa11d},
+{'q', 0x411dc322, 0x40b77f1c},
+{0, 0x41aaa11f, 0x40b77f1c},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41ab3054, 0xc0b77f1c},
+{'q', 0x411ee190, 0xc0b77f1a},
+{0, 0x417982b0, 0xc17aa11d},
+{'9', 0xffb1002d, 0xff56002d},
+{'m', 0xc265ee19, 0xbe0f3700},
+{'q', 0x00000000, 0x41170c88},
+{0, 0x40840728, 0x4169d89c},
+{'8', 0x295c2921, 0xec410024},
+{'9', 0xffec001c, 0xffc5002c},
+{'l', 0x41330558, 0x40525990},
+{'q', 0xc081ca40, 0x410bdc30},
+{0, 0xc1223cd8, 0x414a8478},
+{'q', 0xc0c2af78, 0x407aa120},
+{0, 0xc16c1580, 0x407aa120},
+{'q', 0xc157f1ac, 0x00000000},
+{0, 0xc1a745d0, 0xc0f86440},
+{'q', 0xc0eaf70c, 0xc0f86440},
+{0, 0xc0eaf70c, 0xc1af1ada},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x40e44074, 0xc1acddfe},
+{'q', 0x40e44070, 0xc0ed33e0},
+{0, 0x41a3ea84, 0xc0ed33e0},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x4172cc14, 0x407aa120},
+{'9', 0x001f0031, 0x0060004c},
+{'l', 0xc12e8ba0, 0x40377f20},
+{'8', 0xcbd7def2, 0xedbfede6},
+{'q', 0xc0f3ea88, 0x00000000},
+{0, 0xc1389d8c, 0x409ca4b0},
+{'q', 0xc0762760, 0x409ca4b0},
+{0, 0xc0762760, 0x41644074},
+{'@', 0x000000aa, 0x00003501},/*        ª        x-advance: 53.003906 */
+{'M', 0x418fc6b6, 0xc24acc15},
+{'8', 0xe3aa00ca, 0xade1e3e1},
+{'9', 0xff8d0000, 0xff8a009e},
+{'4', 0xffff0052, 0xffe90000},
+{'8', 0xbec6be00, 0x34c200c7},
+{'l', 0xc1549660, 0xbf211e80},
+{'q', 0x3fa11e6c, 0xc0db4cf0},
+{0, 0x40d6d33e, 0xc127d508},
+{'q', 0x40b0c882, 0xc06d33e0},
+{0, 0x41655ee1, 0xc06d33e0},
+{'q', 0x411a67d6, 0x00000000},
+{0, 0x416d33ea, 0x408880e0},
+{'9', 0x00220029, 0x00610029},
+{'l', 0x00000000, 0x41849660},
+{'8', 0x28051a00, 0x0d170d05},
+{'4', 0xfffe001b, 0x003c0000},
+{'8', 0x0abe0adc, 0xecc200d9},
+{'9', 0xffecffea, 0xffcaffe7},
+{'l', 0xbe56d400, 0x00000000},
+{'9', 0x004cffd8, 0x004cff84},
+{'m', 0x409ee194, 0xc11292cc},
+{'8', 0xe63a0022, 0xc118e618},
+{'4', 0xfff10000, 0x0001ffcd},
+{'8', 0x0fbe01cf, 0x29ef0def},
+{'q', 0x00000000, 0x40be35b0},
+{0, 0x40d25984, 0x40be35b0},
+{'@', 0x000000ab, 0x00004fa6},/*        «        x-advance: 79.648438 */
+{'M', 0x4261bbf9, 0xc11dc322},
+{'l', 0xc18f3780, 0xc1c9f543},
+{'l', 0x00000000, 0xc09ee190},
+{'l', 0x418f3780, 0xc1cd5090},
+{'l', 0x41852596, 0x00000000},
+{'l', 0x00000000, 0x40259840},
+{'l', 0xc18e190e, 0x41ccc156},
+{'4', 0x00c9008f, 0x00130000},
+{'6', 0x0000ff7a, 0x0000ff01},
+{'l', 0xc19055ee, 0xc1c9f543},
+{'l', 0xb5000000, 0xc09ee190},
+{'l', 0x419055ee, 0xc1cd5090},
+{'l', 0x41840728, 0x00000000},
+{'l', 0x00000000, 0x40259840},
+{'l', 0xc18e190f, 0x41ccc156},
+{'l', 0x418f377f, 0x41c9f542},
+{'l', 0x00000000, 0x401ca4b8},
+{'l', 0xc1852598, 0x00000000},
+{'@', 0x000000ac, 0x000053a2},/*        ¬        x-advance: 83.632812 */
+{'M', 0x42781ca5, 0xc11dc322},
+{'l', 0x00000000, 0xc1ef70c9},
+{'l', 0xc2609d8a, 0x00000000},
+{'l', 0xb5000000, 0xc17aa11c},
+{'l', 0x428fa2e9, 0x00000000},
+{'l', 0x00000000, 0x423660ac},
+{'l', 0xc17aa11c, 0xb6000000},
+{'@', 0x000000ad, 0x00002fb1},/*        ­        x-advance: 47.691406 */
+{'M', 0x40b3055f, 0xc1e4cfaa},
+{'l', 0x00000000, 0xc18880e4},
+{'l', 0x4211745d, 0x00000000},
+{'l', 0x00000000, 0x418880e4},
+{'l', 0xc211745d, 0x00000000},
+{'@', 0x000000ae, 0x00006986},/*        ®        x-advance: 105.523438 */
+{'M', 0x42ceb69a, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944074, 0x41944072},
+{'q', 0xc13bf8d0, 0x40d6d340},
+{0, 0xc1c9f540, 0x40d6d340},
+{'q', 0xc15c6b6c, 0xb4000000},
+{0, 0xc1cd5090, 0xc0dfc6b7},
+{'q', 0xc13d1745, 0xc0e20395},
+{0, 0xc1932203, 0xc1955ee1},
+{'q', 0xc0d01ca4, 0xc13ada66},
+{0, 0xc0d01ca4, 0xc1c7292d},
+{'q', 0xb4800000, 0xc157f1ac},
+{0, 0x40d9101c, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d6, 0xc0d91020},
+{0, 0x41c9f543, 0xc0d91020},
+{'q', 0x41591018, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0faa120, 0x00000000},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0xc0b77f20, 0xc1a982b0},
+{'q', 0xc0b77f10, 0xc11dc320},
+{0, 0xc17aa120, 0xc17982b0},
+{'q', 0xc11ee190, 0xc0b77f10},
+{0, 0xc1aaa11c, 0xc0b77f10},
+{'q', 0xc12faa14, 0x00000000},
+{0, 0xc1a62762, 0x40ae8ba0},
+{'q', 0xc11ca4b4, 0x40ae8ba0},
+{0, 0xc17cddfe, 0x41762760},
+{'q', 0xc0be35b4, 0x411dc324},
+{0, 0xc0be35b4, 0x41ad6d34},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40b5423c, 0x41aaa11f},
+{'q', 0x40b77f1c, 0x411ee190},
+{0, 0x41786440, 0x417aa11d},
+{'q', 0x411dc322, 0x40b77f1c},
+{0, 0x41aaa11f, 0x40b77f1c},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41ab3054, 0xc0b77f1c},
+{'q', 0x411ee190, 0xc0b77f1a},
+{0, 0x417982b0, 0xc17aa11d},
+{'9', 0xffb1002d, 0xff56002d},
+{'m', 0xc1f7d508, 0x41e55ee2},
+{'l', 0xc1472930, 0xc1af1ada},
+{'l', 0xc102e8b8, 0x00000000},
+{'l', 0x00000000, 0x41af1ada},
+{'4', 0x0000ff9d, 0xfe390000},
+{'l', 0x41b89d89, 0x00000000},
+{'q', 0x412b3054, 0x00000000},
+{0, 0x41801ca6, 0x40917460},
+{'8', 0x632a232a, 0x55e63400},
+{'9', 0x0021ffe6, 0x002effba},
+{'4', 0x00bb0077, 0x0000ff90},
+{'m', 0xbfa11e80, 0xc21fb864},
+{'8', 0xd0ebe100, 0xf0c5f0ec},
+{'4', 0x0000ffb6, 0x00890000},
+{'l', 0x41211e6c, 0x00000000},
+{'8', 0xed370024, 0xcc13ec13},
+{'@', 0x000000af, 0x00004f17},/*        ¯        x-advance: 79.089844 */
+{'M', 0x42a08f37, 0xc2cb13b1},
+{'l', 0xc2a2efe3, 0x00000000},
+{'l', 0x35900000, 0xc0d25980},
+{'l', 0x42a2efe3, 0x00000000},
+{'l', 0x00000000, 0x40d25980},
+{'@', 0x000000b0, 0x00003945},/*        °        x-advance: 57.269531 */
+{'M', 0x424c79bc, 0xc29b3ea8},
+{'q', 0x00000000, 0x41117458},
+{0, 0xc0d25980, 0x417982ac},
+{'q', 0xc0d01ca8, 0x40cddfc8},
+{0, 0xc17dfc6e, 0x40cddfc8},
+{'q', 0xc113b13a, 0x00000000},
+{0, 0xc17cddfb, 0xc0cba2e8},
+{'q', 0xc0d25983, 0xc0cba2e8},
+{0, 0xc0d25983, 0xc17aa11c},
+{'8', 0xa817d000, 0xc140d818},
+{'q', 0x40a5982c, 0xc03bf8c0},
+{0, 0x4135423c, 0xc03bf8c0},
+{'q', 0x41170c8a, 0x00000000},
+{0, 0x417f1ada, 0x40d01ca0},
+{'9', 0x00330034, 0x007c0034},
+{'m', 0xc130c880, 0x00000000},
+{'8', 0xbee6d900, 0xe6c0e6e7},
+{'8', 0x1bbe00d9, 0x41e61ae6},
+{'8', 0x421b2600, 0x1b411b1b},
+{'8', 0xe5400025, 0xbe1ae51a},
+{'@', 0x000000b1, 0x00004e99},/*        ±        x-advance: 78.597656 */
+{'M', 0x423c880e, 0xc245c322},
+{'l', 0x00000000, 0x41bec4ec},
+{'l', 0xc17aa11e, 0x00000000},
+{'l', 0x00000000, 0xc1bec4ec},
+{'l', 0xc1e055ee, 0x00000000},
+{'l', 0x35000000, 0xc17982b0},
+{'l', 0x41e055ee, 0x00000000},
+{'l', 0x00000000, 0xc1be35b4},
+{'l', 0x417aa11e, 0x00000000},
+{'l', 0x00000000, 0x41be35b4},
+{'4', 0x000000e0, 0x007c0000},
+{'6', 0x0000ff20, 0x018bfea3},
+{'l', 0xb5c00000, 0xc17982af},
+{'l', 0x428fa2e8, 0x00000000},
+{'l', 0x00000000, 0x417982af},
+{'l', 0xc28fa2e8, 0x00000000},
+{'@', 0x000000b2, 0x00002fb1},/*        ²        x-advance: 47.691406 */
+{'M', 0x406d33ea, 0xc2422039},
+{'l', 0xbe0f3780, 0xc1076278},
+{'8', 0xc12dde10, 0xc250e31d},
+{'8', 0xcd42e130, 0xd611ec11},
+{'8', 0xced3ce00, 0x36cb00d1},
+{'l', 0xc159101c, 0xbeb30500},
+{'8', 0xa831c907, 0xde6fde2a},
+{'q', 0x411292ce, 0x00000000},
+{0, 0x41655ee2, 0x407aa120},
+{'q', 0x40a59828, 0x40762760},
+{0, 0x40a59828, 0x412c4ec0},
+{'q', 0x00000000, 0x410bdc30},
+{0, 0xc12b3054, 0x417982b0},
+{'8', 0x36b124c7, 0x23e211eb},
+{'l', 0x41ca847a, 0x00000000},
+{'l', 0x00000000, 0x411a67d4},
+{'l', 0xc223ea84, 0x00000000},
+{'@', 0x000000b3, 0x00002fb1},/*        ³        x-advance: 47.691406 */
+{'M', 0x42327627, 0xc27a5983},
+{'q', 0x00000000, 0x40dd89e0},
+{0, 0xc0a7d508, 0x412d6d34},
+{'q', 0xc0a7d508, 0x407aa120},
+{0, 0xc16e5258, 0x407aa120},
+{'q', 0xc1170c89, 0x00000000},
+{0, 0xc16f70c9, 0xc068ba30},
+{'9', 0xffe3ffd4, 0xffa9ffcd},
+{'l', 0x415377f2, 0xbf56d340},
+{'8', 0x343f3405, 0xcb390039},
+{'9', 0xffcc0000, 0xffccffb3},
+{'4', 0x0000ffe1, 0xffba0000},
+{'l', 0x40644070, 0x00000000},
+{'8', 0xf4350023, 0xdb11f311},
+{'8', 0xdef4eb00, 0xf4dcf4f4},
+{'9', 0x0000ffcf, 0x0031ffca},
+{'l', 0xc1501ca6, 0xbf56d300},
+{'q', 0x3f44ec58, 0xc0d25980},
+{0, 0x40c2af72, 0xc126b698},
+{'q', 0x40ac4ec4, 0xc0762760},
+{0, 0x41620395, 0xc0762760},
+{'8', 0x1d6f0047, 0x4c281c28},
+{'8', 0x3dec2300, 0x22c019ec},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x1e47052e, 0x40181918},
+{'@', 0x000000b4, 0x00002fb1},/*        ´        x-advance: 47.691406 */
+{'M', 0x40c2af71, 0xc2a5745d},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa1, 0xc1a11e70},
+{'l', 0x419055ef, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b6, 0x419a67d4},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000b5, 0x00005284},/*        µ        x-advance: 82.515625 */
+{'M', 0x425cb305, 0x00000000},
+{'9', 0xffc9fff9, 0xffb0fff9},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x45d530ee, 0x15bb15e7},
+{'8', 0xf3cc00e3, 0xdcddf3ea},
+{'l', 0xbe8f3780, 0x00000000},
+{'9', 0x00180002, 0x00400002},
+{'l', 0x00000000, 0x41d52598},
+{'l', 0xc19d33ea, 0x00000000},
+{'4', 0xfcb50000, 0x0000009d},
+{'l', 0x36000000, 0x42293b14},
+{'q', 0x00000000, 0x4127d50a},
+{0, 0x403bf8d8, 0x4172cc16},
+{'8', 0x254a2518, 0xd64a0031},
+{'9', 0xffd60019, 0xff7d0019},
+{'4', 0xfebd0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'q', 0x00000000, 0x4111745d},
+{0, 0x3f0f3780, 0x41876276},
+{'l', 0xc195ee1a, 0x00000000},
+{'@', 0x000000b6, 0x00004fa6},/*        ¶        x-advance: 79.648438 */
+{'M', 0x428377f2, 0xc2b1101d},
+{'l', 0x00000000, 0x42d5fc6c},
+{'l', 0xc12e8ba8, 0xb6000000},
+{'l', 0x00000000, 0xc2d5fc6c},
+{'l', 0xc15a2e88, 0x00000000},
+{'4', 0x03570000, 0x0000ffaa},
+{'l', 0x00000000, 0xc285fc6b},
+{'q', 0xc13d1746, 0xb6800000},
+{0, 0xc194cfaa, 0xc0cddfd0},
+{'q', 0xc0d9101b, 0xc0d01ca8},
+{0, 0xc0d9101b, 0xc1932204},
+{'q', 0x00000000, 0xc13d1748},
+{0, 0x40db4cfb, 0xc193b13c},
+{'9', 0xffcb0037, 0xffcb0098},
+{'l', 0x422ff1ae, 0x00000000},
+{'l', 0x00000000, 0x411ffff8},
+{'l', 0xc11292c8, 0x00000000},
+{'@', 0x000000b7, 0x00002fb1},/*        ·        x-advance: 47.691406 */
+{'M', 0x411dc322, 0xc214880e},
+{'l', 0x00000000, 0xc1aaa11e},
+{'l', 0x41a11e6f, 0x00000000},
+{'l', 0x00000000, 0x41aaa11e},
+{'l', 0xc1a11e6f, 0x00000000},
+{'@', 0x000000b8, 0x00002fb1},/*        ¸        x-advance: 47.691406 */
+{'M', 0x420bdc32, 0x418377f2},
+{'q', 0x00000000, 0x40d25980},
+{0, 0xc0ae8ba4, 0x411ee190},
+{'q', 0xc0ae8ba0, 0x4056d340},
+{0, 0xc17bbf8d, 0x4056d340},
+{'9', 0x0000ffe7, 0xfffdffc8},
+{'l', 0x00000000, 0xc104072a},
+{'8', 0x032e0313, 0xda4c004c},
+{'8', 0xe3f1ed00, 0xf7ccf7f1},
+{'9', 0x0000ffeb, 0x0001ffe3},
+{'4', 0xffa00022, 0x00000050},
+{'l', 0xc013b140, 0x40b77f1b},
+{'8', 0x194d0234, 0x3b191619},
+{'@', 0x000000b9, 0x00002fb1},/*        ¹        x-advance: 47.691406 */
+{'M', 0x40b77f1b, 0xc2422039},
+{'l', 0x00000000, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x00000000, 0xc202e8b9},
+{'0', 0xbc003ca0, 0x0061bf64},
+{'l', 0x00000000, 0x42278d6d},
+{'l', 0x413e35b4, 0x00000000},
+{'l', 0x00000000, 0x41076278},
+{'l', 0xc215ee19, 0x00000000},
+{'@', 0x000000ba, 0x0000344e},/*        º        x-advance: 52.304688 */
+{'M', 0x424770c8, 0xc29611e7},
+{'q', 0x00000000, 0x41354240},
+{0, 0xc0c96608, 0x418ea848},
+{'q', 0xc0c72930, 0x40d01ca8},
+{0, 0xc18abdc3, 0x40d01ca8},
+{'q', 0xc12a11e7, 0x00000000},
+{0, 0xc186d33e, 0xc0cddfc8},
+{'q', 0xc0c7292e, 0xc0cddfc8},
+{0, 0xc0c7292e, 0xc18f3780},
+{'q', 0xb4800000, 0xc1354238},
+{0, 0x40c4ec4e, 0xc18e1910},
+{'q', 0x40c4ec4e, 0xc0cddfc0},
+{0, 0x41899f54, 0xc0cddfc0},
+{'q', 0x4133055e, 0x00000000},
+{0, 0x418a2e8b, 0x40c72930},
+{'9', 0x00310030, 0x008f0030},
+{'m', 0xc15fc6b4, 0x00000000},
+{'8', 0xaaf0c500, 0xe5c7e5f0},
+{'8', 0x1bc500d8, 0x55ef1bef},
+{'8', 0x57113b00, 0x1c371c11},
+{'8', 0xe53b0029, 0xa811e411},
+{'@', 0x000000bb, 0x00004fa6},/*        »        x-advance: 79.648438 */
+{'M', 0x40d01ca5, 0xc11dc322},
+{'l', 0x00000000, 0xc01ca4b4},
+{'l', 0x418f377f, 0xc1c9f542},
+{'l', 0xc18e1910, 0xc1ccc156},
+{'l', 0x35000000, 0xc0259840},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x418f3780, 0x41cd5090},
+{'4', 0x00270000, 0x00c9ff71},
+{'6', 0x0000ff7a, 0x00000100},
+{'l', 0x36800000, 0xc01ca4b4},
+{'l', 0x418f377e, 0xc1c9f542},
+{'l', 0xc18e1910, 0xc1ccc156},
+{'l', 0x00000000, 0xc0259840},
+{'l', 0x4184072a, 0x00000000},
+{'l', 0x419055ee, 0x41cd5090},
+{'l', 0x00000000, 0x409ee190},
+{'l', 0xc19055ee, 0x41c9f543},
+{'l', 0xc1852598, 0x00000000},
+{'@', 0x000000bc, 0x00007770},/*        ¼        x-advance: 119.437500 */
+{'M', 0x40d25983, 0xc2422039},
+{'l', 0x00000000, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x00000000, 0xc202e8b9},
+{'0', 0xbc003ca0, 0x0061bf64},
+{'l', 0x00000000, 0x42278d6d},
+{'4', 0x0000005f, 0x00430000},
+{'6', 0x0000fed5, 0x018400fb},
+{'l', 0xc160e526, 0x00000000},
+{'4', 0xfcec01f4, 0x00000070},
+{'6', 0x0314fe0c, 0xffb2021b},
+{'l', 0x00000000, 0x411ca4b3},
+{'l', 0xc14cc158, 0x32000000},
+{'l', 0x00000000, 0xc11ca4b3},
+{'l', 0xc1c07294, 0x00000000},
+{'l', 0x00000000, 0xc125982a},
+{'l', 0x41b0c884, 0xc1f1ada6},
+{'l', 0x416c1578, 0x00000000},
+{'l', 0x00000000, 0x41f62762},
+{'4', 0x00000039, 0x004e0000},
+{'6', 0x0000ffc7, 0xff09ff9c},
+{'l', 0xbf44ec80, 0x3faa11e0},
+{'9', 0x001afff2, 0x0031ffe2},
+{'l', 0xc11dc320, 0x4159101c},
+{'l', 0x41620390, 0x00000000},
+{'l', 0x00000000, 0xc159101c},
+{'l', 0x3e8f3800, 0xc0f1ada8},
+{'@', 0x000000bd, 0x00007770},/*        ½        x-advance: 119.437500 */
+{'M', 0x40d25983, 0xc2422039},
+{'l', 0x00000000, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x00000000, 0xc202e8b9},
+{'0', 0xbc003ca0, 0x0061bf64},
+{'l', 0x00000000, 0x42278d6d},
+{'4', 0x0000005f, 0x00430000},
+{'6', 0x0000fed5, 0x018400f0},
+{'l', 0xc160e526, 0x00000000},
+{'4', 0xfcec01f4, 0x00000070},
+{'6', 0x0314fe0c, 0x00000118},
+{'l', 0xbe0f3800, 0xc1076276},
+{'8', 0xc12dde10, 0xc250e31d},
+{'8', 0xcd42e130, 0xd611ec11},
+{'8', 0xced3ce00, 0x36cb00d1},
+{'l', 0xc1591020, 0xbeb30500},
+{'8', 0xa831c907, 0xde6fde2a},
+{'q', 0x411292c8, 0x00000000},
+{0, 0x41655ee0, 0x407aa120},
+{'q', 0x40a59830, 0x40762760},
+{0, 0x40a59830, 0x412c4ec4},
+{'q', 0x00000000, 0x410bdc34},
+{0, 0xc12b3058, 0x417982b0},
+{'8', 0x36b124c7, 0x23e211eb},
+{'l', 0x41ca8478, 0x00000000},
+{'l', 0x00000000, 0x411a67d5},
+{'l', 0xc223ea84, 0xb2000000},
+{'@', 0x000000be, 0x00007770},/*        ¾        x-advance: 119.437500 */
+{'M', 0x42182af7, 0x00000000},
+{'l', 0xc160e526, 0x00000000},
+{'4', 0xfcec01f4, 0x00000070},
+{'6', 0x0314fe0c, 0xffb2021b},
+{'l', 0x00000000, 0x411ca4b3},
+{'l', 0xc14cc158, 0x32000000},
+{'l', 0x00000000, 0xc11ca4b3},
+{'l', 0xc1c07294, 0x00000000},
+{'l', 0x00000000, 0xc125982a},
+{'l', 0x41b0c884, 0xc1f1ada6},
+{'l', 0x416c1578, 0x00000000},
+{'l', 0x00000000, 0x41f62762},
+{'4', 0x00000039, 0x004e0000},
+{'6', 0x0000ffc7, 0xff09ff9c},
+{'l', 0xbf44ec80, 0x3faa11e0},
+{'9', 0x001afff2, 0x0031ffe2},
+{'l', 0xc11dc320, 0x4159101c},
+{'4', 0x00000071, 0xff940000},
+{'6', 0xffc40002, 0xff52fe9f},
+{'q', 0x00000000, 0x40dd89e0},
+{0, 0xc0a7d508, 0x412d6d34},
+{'q', 0xc0a7d508, 0x407aa120},
+{0, 0xc16e5258, 0x407aa120},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc16f70c9, 0xc068ba30},
+{'9', 0xffe3ffd4, 0xffa9ffcd},
+{'l', 0x415377f2, 0xbf56d340},
+{'8', 0x343f3405, 0xcb390039},
+{'9', 0xffcc0000, 0xffccffb3},
+{'4', 0x0000ffe1, 0xffba0000},
+{'l', 0x40644078, 0x00000000},
+{'8', 0xf4350023, 0xdb11f311},
+{'8', 0xdef4eb00, 0xf4dcf4f4},
+{'9', 0x0000ffcf, 0x0031ffca},
+{'l', 0xc1501ca5, 0xbf56d300},
+{'q', 0x3f44ec50, 0xc0d25980},
+{0, 0x40c2af70, 0xc126b698},
+{'q', 0x40ac4ec6, 0xc0762760},
+{0, 0x41620395, 0xc0762760},
+{'8', 0x1d6f0047, 0x4c281c28},
+{'8', 0x3dec2300, 0x22c019ec},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x1e47052e, 0x40181918},
+{'@', 0x000000bf, 0x0000577b},/*        ¿        x-advance: 87.480469 */
+{'M', 0x40ff1ada, 0xc07aa11e},
+{'8', 0x9f18ca00, 0xa65bd518},
+{'l', 0x40ac4ec4, 0xc0762768},
+{'8', 0xc937e525, 0xc314e513},
+{'l', 0x41955ee2, 0x00000000},
+{'8', 0x66e039fd, 0x52ac2ce3},
+{'8', 0x49ac29c5, 0x46e81fe8},
+{'8', 0x4d1f3100, 0x1c5b1c20},
+{'8', 0xdf5e0038, 0xa92ddf26},
+{'l', 0x419f70ca, 0x3f56d340},
+{'q', 0xbff1adc0, 0x41632204},
+{0, 0xc13ada68, 0x41b0c881},
+{'q', 0xc11ca4b4, 0x40fcddfc},
+{0, 0xc1cba2ea, 0x40fcddfc},
+{'q', 0xc1849660, 0x00000000},
+{0, 0xc1d0abdb, 0xc0ef70c8},
+{'9', 0xffc4ffb5, 0xff5affb5},
+{'m', 0x424267d5, 0xc28f7f1b},
+{'l', 0x00000000, 0x41970c8a},
+{'l', 0xc1a1ada6, 0x00000000},
+{'l', 0x00000000, 0xc1970c8a},
+{'l', 0x41a1ada6, 0x00000000},
+{'@', 0x000000c0, 0x0000676d},/*        À        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfdeeffa0},
+{'l', 0xc1be35b4, 0xc187627c},
+{'l', 0x00000000, 0xc0407280},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b6a, 0x418e1910},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1748, 0x00000000},
+{'@', 0x000000c1, 0x0000676d},/*        Á        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfdeeff32},
+{'l', 0x00000000, 0xc00abde0},
+{'l', 0x418cfaa0, 0xc18e1910},
+{'l', 0x419055f0, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b6, 0x41876278},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000c2, 0x0000676d},/*        Â        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfdde005c},
+{'l', 0x00000000, 0x4001ca60},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632208, 0xc128f378},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4128f378},
+{'l', 0xc133055c, 0x00000000},
+{'l', 0x00000000, 0xc001ca60},
+{'l', 0x419055ee, 0xc19a67d0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc34, 0x419a67d0},
+{'@', 0x000000c3, 0x0000676d},/*        Ã        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfdeeffec},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194966, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3780, 0x417bbf88},
+{'q', 0xc07aa120, 0x40982b00},
+{0, 0xc131e6f0, 0x40982b00},
+{'@', 0x000000c4, 0x0000676d},/*        Ä        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfdeeffd7},
+{'l', 0x00000000, 0xc1750900},
+{'4', 0x0000006e, 0x007a0000},
+{'6', 0x0000ff92, 0x0000ff03},
+{'l', 0x00000000, 0xc17508f8},
+{'l', 0x4159101e, 0x00000000},
+{'l', 0x00000000, 0x417508f8},
+{'l', 0xc159101e, 0x00000000},
+{'@', 0x000000c5, 0x0000676d},/*        Ã…        x-advance: 103.425781 */
+{'M', 0x429e7627, 0x00000000},
+{'l', 0xc10bdc30, 0xc1c9660b},
+{'l', 0xc21635b5, 0x00000000},
+{'l', 0xc10bdc30, 0x41c9660b},
+{'l', 0xc1a508f4, 0x00000000},
+{'l', 0x420fc6b7, 0xc2c5101c},
+{'4', 0x000000c2, 0x0314011e},
+{'6', 0x0000ff5d, 0xfebbff96},
+{'4', 0xff1effb3, 0xff8effdd},
+{'q', 0xbf8f3780, 0x4081ca50},
+{0, 0xc0064410, 0x40e8ba30},
+{'9', 0x0019fff9, 0x011bffa0},
+{'6', 0x000000e2, 0xfde2001c},
+{'8', 0x64d73a00, 0x299c29d8},
+{'8', 0xd79b00c5, 0x9cd8d7d8},
+{'8', 0x9c29c600, 0xd764d729},
+{'8', 0x2964003a, 0x64292929},
+{'m', 0xc10e1910, 0x00000000},
+{'8', 0xcfece400, 0xecceecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x33141f00, 0x14311414},
+{'8', 0xec32001d, 0xce14ec14},
+{'@', 0x000000c6, 0x00008f37},/*        Æ        x-advance: 143.214844 */
+{'M', 0x428235b5, 0x00000000},
+{'l', 0x00000000, 0xc1c9660b},
+{'l', 0xc1fbbf8e, 0x00000000},
+{'l', 0xc1407294, 0x41c9660b},
+{'l', 0xc1aaa11e, 0x00000000},
+{'l', 0x4243cde0, 0xc2c5101c},
+{'l', 0x42ab0c88, 0x00000000},
+{'l', 0x00000000, 0x417dfc68},
+{'l', 0xc244157c, 0x00000000},
+{'l', 0x00000000, 0x41c699f4},
+{'l', 0x4232bdc4, 0x00000000},
+{'l', 0x00000000, 0x417745d4},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0x00000000, 0x41d40728},
+{'4', 0x0000019f, 0x007e0000},
+{'6', 0x0000fdbc, 0xfd660000},
+{'l', 0xc08880e8, 0x00000000},
+{'9', 0x003effe5, 0x0155ff60},
+{'l', 0x41c2af72, 0x00000000},
+{'l', 0x00000000, 0xc22aa11f},
+{'@', 0x000000c7, 0x0000676d},/*        Ç        x-advance: 103.425781 */
+{'M', 0x425e60ac, 0xc16d33ea},
+{'9', 0x00000095, 0xff6b00cf},
+{'l', 0x418fc6b8, 0x40d9101c},
+{'q', 0xc0b9bc00, 0x41644072},
+{0, 0xc18880e8, 0x41aa11e7},
+{'q', 0xc1330558, 0x40dd89d8},
+{0, 0xc1d6d33c, 0x40dd89d8},
+{'q', 0xc1be35b5, 0xb4000000},
+{0, 0xc2132204, 0xc156d33f},
+{'q', 0xc14efe34, 0xc157f1ad},
+{0, 0xc14efe34, 0xc216c4ec},
+{'q', 0xb5000000, 0xc1c2203a},
+{0, 0x4148479a, 0xc2151745},
+{'q', 0x4148479c, 0xc1501ca8},
+{0, 0x42112cc2, 0xc1501ca8},
+{'q', 0x418abdc0, 0x00000000},
+{0, 0x41e20394, 0x40dfc6c0},
+{'9', 0x00370057, 0x00a3007a},
+{'l', 0xc191745c, 0x409ee190},
+{'q', 0xc013b140, 0xc0ed33f0},
+{0, 0xc1117460, 0xc13bf8d8},
+{'q', 0xc0d6d340, 0xc08cfaa0},
+{0, 0xc17dfc6c, 0xc08cfaa0},
+{'q', 0xc15fc6b4, 0x00000000},
+{0, 0xc1aa11e6, 0x410abdc0},
+{'q', 0xc0e67d50, 0x410abdc8},
+{0, 0xc0e67d50, 0x41cb13b2},
+{'q', 0x00000000, 0x4187f1ae},
+{0, 0x40ed33e8, 0x41cf8d6d},
+{'9', 0x0047003b, 0x004700ac},
+{'m', 0x41591018, 0x41fa11e7},
+{'q', 0x00000000, 0x40d25980},
+{0, 0xc0ae8ba0, 0x411ee190},
+{'q', 0xc0ae8ba0, 0x4056d340},
+{0, 0xc17bbf8c, 0x4056d340},
+{'9', 0x0000ffe7, 0xfffdffc8},
+{'l', 0x00000000, 0xc104072a},
+{'8', 0x032e0313, 0xda4c004c},
+{'8', 0xe3f1ed00, 0xf7ccf7f1},
+{'9', 0x0000ffeb, 0x0001ffe3},
+{'4', 0xffa00022, 0x00000050},
+{'l', 0xc013b140, 0x40b77f1b},
+{'8', 0x194d0234, 0x3b191619},
+{'@', 0x000000c8, 0x00005f86},/*        È        x-advance: 95.523438 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0x00000000, 0x41c60abc},
+{'l', 0x42525983, 0x00000000},
+{'l', 0x00000000, 0x417f1adc},
+{'l', 0xc2525983, 0x00000000},
+{'l', 0x00000000, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007f0000},
+{'6', 0x0000fd7e, 0xfca9014f},
+{'l', 0xc1be35b6, 0xc1876278},
+{'l', 0x00000000, 0xc0407280},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b6a, 0x418e1910},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000c9, 0x00005f86},/*        É        x-advance: 95.523438 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0x00000000, 0x41c60abc},
+{'l', 0x42525983, 0x00000000},
+{'l', 0x00000000, 0x417f1adc},
+{'l', 0xc2525983, 0x00000000},
+{'l', 0x00000000, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007f0000},
+{'6', 0x0000fd7e, 0xfca900d4},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa0, 0xc18e1910},
+{'l', 0x419055f0, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b6, 0x41876278},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000ca, 0x00005f86},/*        Ê        x-advance: 95.523438 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0x00000000, 0x41c60abc},
+{'l', 0x42525983, 0x00000000},
+{'l', 0x00000000, 0x417f1adc},
+{'l', 0xc2525983, 0x00000000},
+{'l', 0x00000000, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007f0000},
+{'6', 0x0000fd7e, 0xfc980210},
+{'l', 0x00000000, 0x4001ca60},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc128f378},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4128f378},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0x00000000, 0xc001ca60},
+{'l', 0x419055ed, 0xc19a67d0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x418bdc32, 0x419a67d0},
+{'@', 0x000000cb, 0x00005f86},/*        Ë        x-advance: 95.523438 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0x00000000, 0x41c60abc},
+{'l', 0x42525983, 0x00000000},
+{'l', 0x00000000, 0x417f1adc},
+{'l', 0xc2525983, 0x00000000},
+{'l', 0x00000000, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007f0000},
+{'6', 0x0000fd7e, 0xfca90189},
+{'l', 0x00000000, 0xc17508f8},
+{'4', 0x0000006e, 0x007a0000},
+{'6', 0x0000ff92, 0x0000ff03},
+{'l', 0x00000000, 0xc17508f8},
+{'l', 0x4159101e, 0x00000000},
+{'l', 0x00000000, 0x417508f8},
+{'l', 0xc159101e, 0x00000000},
+{'@', 0x000000cc, 0x000027ca},/*        Ì        x-advance: 39.789062 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x000000a5, 0x03140000},
+{'6', 0x0000ff5b, 0xfca9005b},
+{'l', 0xc1be35b5, 0xc1876278},
+{'l', 0x34800000, 0xc0407280},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b6a, 0x418e1910},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1746, 0x00000000},
+{'@', 0x000000cd, 0x000027ca},/*        Í        x-advance: 39.789062 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x000000a5, 0x03140000},
+{'6', 0x0000ff5b, 0xfca9ffee},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa2, 0xc18e1910},
+{'l', 0x419055ec, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b4, 0x41876278},
+{'l', 0xc13e35b5, 0x00000000},
+{'@', 0x000000ce, 0x000027ca},/*        ÃŽ        x-advance: 39.789062 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x000000a5, 0x03140000},
+{'6', 0x0000ff5b, 0xfc980120},
+{'l', 0x00000000, 0x4001ca60},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc128f378},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4128f378},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0xb5000000, 0xc001ca60},
+{'l', 0x419055ee, 0xc19a67d0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc33, 0x419a67d0},
+{'@', 0x000000cf, 0x000027ca},/*        Ï        x-advance: 39.789062 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x000000a5, 0x03140000},
+{'6', 0x0000ff5b, 0xfca9009a},
+{'l', 0x00000000, 0xc17508f8},
+{'4', 0x0000006e, 0x007a0000},
+{'6', 0x0000ff92, 0x0000ff03},
+{'l', 0xb5400000, 0xc17508f8},
+{'l', 0x4159101d, 0x00000000},
+{'l', 0x00000000, 0x417508f8},
+{'l', 0xc159101d, 0x00000000},
+{'@', 0x000000d0, 0x0000676d},/*        Ð        x-advance: 103.425781 */
+{'M', 0x42c2d33f, 0xc2480000},
+{'q', 0x00000000, 0x4173ea84},
+{0, 0xc0c072a0, 0x41d52598},
+{'q', 0xc0be35b0, 0x4135423d},
+{0, 0xc1876274, 0x418abdc3},
+{'9', 0x0030ffa9, 0x0030ff38},
+{'l', 0xc21f70c8, 0x00000000},
+{'l', 0xb6000000, 0xc2262762},
+{'l', 0xc11055ee, 0x00000000},
+{'l', 0xb3800000, 0xc17508f4},
+{'4', 0x00000048, 0xfeb30000},
+{'l', 0x420ea848, 0x00000000},
+{'q', 0x41c7292c, 0x00000000},
+{0, 0x421a2038, 0x41496608},
+{'9', 0x0064006d, 0x011f006d},
+{'m', 0xc1a62764, 0x00000000},
+{'q', 0x00000000, 0xc17bbf90},
+{0, 0xc102e8b8, 0xc1c07294},
+{'9', 0xffbeffbf, 0xffbeff43},
+{'l', 0xc169d89c, 0x00000000},
+{'l', 0x00000000, 0x41cc3222},
+{'l', 0x41c7292c, 0x00000000},
+{'l', 0x00000000, 0x417508f4},
+{'4', 0x0000ff39, 0x00cb0000},
+{'l', 0x418bdc32, 0x00000000},
+{'q', 0x4155b4d0, 0x00000000},
+{0, 0x41a8f378, 0xc11055ee},
+{'q', 0x40faa120, 0xc111745e},
+{0, 0x40faa120, 0xc1c699f5},
+{'@', 0x000000d1, 0x0000676d},/*        Ñ        x-advance: 103.425781 */
+{'M', 0x428b292d, 0x00000000},
+{'l', 0xc22bbf8e, 0xc297bf8d},
+{'9', 0x0058000a, 0x008e000a},
+{'l', 0x00000000, 0x42687293},
+{'l', 0xc19292cc, 0x00000000},
+{'4', 0xfcec0000, 0x000000bc},
+{'l', 0x422e4407, 0x429901ca},
+{'9', 0xffacfff6, 0xff67fff6},
+{'l', 0x00000000, 0xc2651745},
+{'4', 0x00000092, 0x03140000},
+{'6', 0x0000ff3f, 0xfca9ffcf},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194968, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3780, 0x417bbf88},
+{'q', 0xc07aa120, 0x40982b00},
+{0, 0xc131e6f0, 0x40982b00},
+{'@', 0x000000d2, 0x00006f66},/*        Ã’        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'9', 0xffb8003c, 0xff32003c},
+{'m', 0xc1b27626, 0xc2651745},
+{'l', 0xc1be35b6, 0xc1876278},
+{'l', 0x00000000, 0xc0407280},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b6a, 0x418e1910},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000d3, 0x00006f66},/*        Ó        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'9', 0xffb8003c, 0xff32003c},
+{'m', 0xc2228479, 0xc2651745},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa0, 0xc18e1910},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b4, 0x41876278},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000d4, 0x00006f66},/*        Ô        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'9', 0xffb8003c, 0xff32003c},
+{'m', 0xc04072a0, 0xc26d33eb},
+{'l', 0x00000000, 0x4001ca60},
+{'l', 0xc131e6e8, 0x00000000},
+{'l', 0xc1632208, 0xc128f378},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4128f378},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0x00000000, 0xc001ca60},
+{'l', 0x419055ef, 0xc19a67d0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc30, 0x419a67d0},
+{'@', 0x000000d5, 0x00006f66},/*        Õ        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'9', 0xffb8003c, 0xff32003c},
+{'m', 0xc18cfaa0, 0xc2651745},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194964, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3780, 0x417bbf88},
+{'q', 0xc07aa120, 0x40982b00},
+{0, 0xc131e6f0, 0x40982b00},
+{'@', 0x000000d6, 0x00006f66},/*        Ö        x-advance: 111.398438 */
+{'M', 0x42d2c4ec, 0xc246e191},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc1354238, 0x40c4ec50},
+{0, 0xc1d377f0, 0x40c4ec50},
+{'q', 0xc1b9bbf8, 0xb4000000},
+{0, 0xc211bbf8, 0xc15a2e8c},
+{'q', 0xc1525984, 0xc15b4cfa},
+{0, 0xc1525984, 0xc215ee19},
+{'q', 0xb5000000, 0xc1bda67e},
+{0, 0x41525982, 0xc213f8d7},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'q', 0x41bb69a0, 0x00000000},
+{0, 0x42124b30, 0x4156d340},
+{'9', 0x006b0069, 0x01260069},
+{'m', 0xc1a86440, 0x00000000},
+{'q', 0x00000000, 0xc17f1adc},
+{0, 0xc0f1ada0, 0xc1c7b862},
+{'q', 0xc0f1adb0, 0xc1117460},
+{0, 0xc1a982b0, 0xc1117460},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'q', 0x00000000, 0x4181ca4c},
+{0, 0x40f62760, 0x41ccc158},
+{'q', 0x40f86440, 0x4114cfaa},
+{0, 0x41a8f378, 0x4114cfaa},
+{'q', 0x415d89d8, 0x00000000},
+{0, 0x41aaa120, 0xc111745e},
+{'9', 0xffb8003c, 0xff32003c},
+{'m', 0xc19e5258, 0xc2651745},
+{'l', 0x00000000, 0xc17508f8},
+{'4', 0x0000006e, 0x007a0000},
+{'6', 0x0000ff92, 0x0000ff03},
+{'l', 0x00000000, 0xc17508f8},
+{'l', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0x417508f8},
+{'l', 0xc159101c, 0x00000000},
+{'@', 0x000000d7, 0x000053a2},/*        ×        x-advance: 83.632812 */
+{'M', 0x40c07293, 0xc1b660ac},
+{'l', 0x41c7292c, 0xc1c8479c},
+{'l', 0xc1c4ec4e, 0xc1c4ec4c},
+{'l', 0x4130c880, 0xc12e8ba8},
+{'l', 0x41c4ec4f, 0x41c3cde0},
+{'l', 0x41c4ec4e, 0xc1c4ec50},
+{'l', 0x4130c880, 0x4130c888},
+{'l', 0xc1c4ec4e, 0x41c60abc},
+{'l', 0x41c4ec4e, 0x41c3cddf},
+{'l', 0xc130c880, 0x4133055f},
+{'l', 0xc1c4ec4e, 0xc1c60abc},
+{'l', 0xc1c7292d, 0x41c8479a},
+{'l', 0xc130c880, 0xc130c880},
+{'@', 0x000000d8, 0x00006f66},/*        Ø        x-advance: 111.398438 */
+{'M', 0x412479bc, 0x40a35b4d},
+{'l', 0x412c4ec4, 0xc173ea84},
+{'q', 0xc172cc14, 0xc15c6b6a},
+{0, 0xc172cc14, 0xc21e525a},
+{'q', 0xb5000000, 0xc1bda67c},
+{0, 0x41525982, 0xc213f8d6},
+{'q', 0x41525982, 0xc1549660},
+{0, 0x42124b30, 0xc1549660},
+{'9', 0x0000006e, 0x002900c6},
+{'4', 0xffbf002d, 0x0000006b},
+{'l', 0xc11ee198, 0x41632200},
+{'q', 0x40faa120, 0x40d25980},
+{0, 0x413d1748, 0x41849660},
+{'q', 0x407f1ae0, 0x411ee190},
+{0, 0x407f1ae0, 0x41b423ce},
+{'q', 0x00000000, 0x41762764},
+{0, 0xc0c2af70, 0x41d880e5},
+{'q', 0xc0c2af70, 0x413ada68},
+{0, 0xc18b4cfc, 0x418f377f},
+{'q', 0xc13423c8, 0x40c4ec50},
+{0, 0xc1d40728, 0x40c4ec50},
+{'9', 0x0000ff8a, 0xffd5ff37},
+{'4', 0x0048ffce, 0x0000ff93},
+{'m', 0x42944072, 0xc25b4cfb},
+{'9', 0xff8f0000, 0xff4affd0},
+{'l', 0xc2175424, 0x4257f1ad},
+{'q', 0x40cba2e8, 0x40762764},
+{0, 0x416e5258, 0x40762764},
+{'q', 0x415ea848, 0x00000000},
+{0, 0x41ab3058, 0xc111745d},
+{'9', 0xffb7003c, 0xff32003c},
+{'m', 0xc2670c88, 0x00000000},
+{'9', 0x00720000, 0x00b9002e},
+{'l', 0x4216c4ed, 0xc256d340},
+{'q', 0xc0cddfd0, 0xc0644060},
+{0, 0xc169d8a0, 0xc0644060},
+{'q', 0xc15d89d8, 0x00000000},
+{0, 0xc1ab3056, 0x411055f0},
+{'q', 0xc0f1ada8, 0x410f3780},
+{0, 0xc0f1ada8, 0x41c8479a},
+{'@', 0x000000d9, 0x0000676d},/*        Ù        x-advance: 103.425781 */
+{'M', 0x424a3cde, 0x3fb3055f},
+{'q', 0xc1a2cc16, 0x00000000},
+{0, 0xc1f982b0, 0xc11ee191},
+{'9', 0xffb1ffaa, 0xff1dffaa},
+{'4', 0xfe140000, 0x000000a5},
+{'l', 0x00000000, 0x426fffff},
+{'q', 0x00000000, 0x413ada68},
+{0, 0x40b0c884, 0x418e1910},
+{'q', 0x40b30560, 0x40c07292},
+{0, 0x4182e8ba, 0x40c07292},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x4187f1ac, 0xc0c9660a},
+{'9', 0xffce002f, 0xff6f002f},
+{'4', 0xfe260000, 0x000000a5},
+{'l', 0x00000000, 0x42723cdd},
+{'q', 0x00000000, 0x4195ee19},
+{0, 0xc139bbf8, 0x41e8ba2e},
+{'9', 0x0052ffa4, 0x0052fefc},
+{'m', 0x4013b140, 0xc2d8c880},
+{'l', 0xc1be35b6, 0xc187627c},
+{'l', 0x00000000, 0xc0407280},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b68, 0x418e1910},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1740, 0x00000000},
+{'@', 0x000000da, 0x0000676d},/*        Ú        x-advance: 103.425781 */
+{'M', 0x424a3cde, 0x3fb3055f},
+{'q', 0xc1a2cc16, 0x00000000},
+{0, 0xc1f982b0, 0xc11ee191},
+{'9', 0xffb1ffaa, 0xff1dffaa},
+{'4', 0xfe140000, 0x000000a5},
+{'l', 0x00000000, 0x426fffff},
+{'q', 0x00000000, 0x413ada68},
+{0, 0x40b0c884, 0x418e1910},
+{'q', 0x40b30560, 0x40c07292},
+{0, 0x4182e8ba, 0x40c07292},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x4187f1ac, 0xc0c9660a},
+{'9', 0xffce002f, 0xff6f002f},
+{'4', 0xfe260000, 0x000000a5},
+{'l', 0x00000000, 0x42723cdd},
+{'q', 0x00000000, 0x4195ee19},
+{0, 0xc139bbf8, 0x41e8ba2e},
+{'9', 0x0052ffa4, 0x0052fefc},
+{'m', 0xc11292cc, 0xc2d8c880},
+{'l', 0x00000000, 0xc00abde0},
+{'l', 0x418cfaa0, 0xc18e1910},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b4, 0x41876278},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000db, 0x0000676d},/*        Û        x-advance: 103.425781 */
+{'M', 0x424a3cde, 0x3fb3055f},
+{'q', 0xc1a2cc16, 0x00000000},
+{0, 0xc1f982b0, 0xc11ee191},
+{'9', 0xffb1ffaa, 0xff1dffaa},
+{'4', 0xfe140000, 0x000000a5},
+{'l', 0x00000000, 0x426fffff},
+{'q', 0x00000000, 0x413ada68},
+{0, 0x40b0c884, 0x418e1910},
+{'q', 0x40b30560, 0x40c07292},
+{0, 0x4182e8ba, 0x40c07292},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x4187f1ac, 0xc0c9660a},
+{'9', 0xffce002f, 0xff6f002f},
+{'4', 0xfe260000, 0x000000a5},
+{'l', 0x00000000, 0x42723cdd},
+{'q', 0x00000000, 0x4195ee19},
+{0, 0xc139bbf8, 0x41e8ba2e},
+{'9', 0x0052ffa4, 0x0052fefc},
+{'m', 0x41d5b4d0, 0xc2dcd6d4},
+{'l', 0x00000000, 0x4001ca60},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc128f378},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4128f378},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0x00000000, 0xc001ca60},
+{'l', 0x419055ed, 0xc19a67d0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x418bdc32, 0x419a67d0},
+{'@', 0x000000dc, 0x0000676d},/*        Ü        x-advance: 103.425781 */
+{'M', 0x424a3cde, 0x3fb3055f},
+{'q', 0xc1a2cc16, 0x00000000},
+{0, 0xc1f982b0, 0xc11ee191},
+{'9', 0xffb1ffaa, 0xff1dffaa},
+{'4', 0xfe140000, 0x000000a5},
+{'l', 0x00000000, 0x426fffff},
+{'q', 0x00000000, 0x413ada68},
+{0, 0x40b0c884, 0x418e1910},
+{'q', 0x40b30560, 0x40c07292},
+{0, 0x4182e8ba, 0x40c07292},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x4187f1ac, 0xc0c9660a},
+{'9', 0xffce002f, 0xff6f002f},
+{'4', 0xfe260000, 0x000000a5},
+{'l', 0x00000000, 0x42723cdd},
+{'q', 0x00000000, 0x4195ee19},
+{0, 0xc139bbf8, 0x41e8ba2e},
+{'9', 0x0052ffa4, 0x0052fefc},
+{'m', 0x41211e70, 0xc2d8c880},
+{'l', 0x00000000, 0xc1750900},
+{'4', 0x0000006e, 0x007a0000},
+{'6', 0x0000ff92, 0x0000ff03},
+{'l', 0x00000000, 0xc17508f8},
+{'l', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0x417508f8},
+{'l', 0xc159101c, 0x00000000},
+{'@', 0x000000dd, 0x00005f86},/*        Ý        x-advance: 95.523438 */
+{'M', 0x42687293, 0xc221ada6},
+{'l', 0x00000000, 0x4221ada6},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x00000000, 0xc221ada6},
+{'l', 0xc20c6b6a, 0xc2687292},
+{'l', 0x41acddfd, 0x00000000},
+{'l', 0x41bd1745, 0x4226b699},
+{'4', 0xfeb300bf, 0x000000ac},
+{'6', 0x01d0fee8, 0xfdecff55},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa0, 0xc18e1910},
+{'l', 0x419055f0, 0x00000000},
+{'l', 0x00000000, 0x40407280},
+{'l', 0xc1be35b6, 0x41876278},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000de, 0x00005f86},/*        Þ        x-advance: 95.523438 */
+{'M', 0x42b5423d, 0xc24e2762},
+{'q', 0x00000000, 0x4115ee18},
+{0, 0xc08880f0, 0x41849660},
+{'q', 0xc0864400, 0x40e67d50},
+{0, 0xc1460ab8, 0x4133055e},
+{'9', 0x001fffc0, 0x001fff66},
+{'l', 0xc1c3cde0, 0x00000000},
+{'l', 0x00000000, 0x419e5259},
+{'l', 0xc1a508f3, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x000000a5, 0x00820000},
+{'l', 0x41bd1746, 0x00000000},
+{'q', 0x418e1910, 0x00000000},
+{0, 0x41da2e8c, 0x40ff1ae0},
+{'9', 0x003f004c, 0x00b5004c},
+{'m', 0xc1a62764, 0x3e8f3780},
+{'8', 0xa0dcc300, 0xde93dedc},
+{'4', 0x0000ff56, 0x01090000},
+{'l', 0x41af1ada, 0x00000000},
+{'8', 0xdd680043, 0x9d25dd25},
+{'@', 0x000000df, 0x0000577b},/*        ß        x-advance: 87.480469 */
+{'M', 0x42a6da68, 0xc1ae8ba3},
+{'q', 0x00000000, 0x4135423d},
+{0, 0xc0e203a0, 0x418a2e8c},
+{'q', 0xc0dfc6b0, 0x40be35b4},
+{0, 0xc19ffffe, 0x40be35b4},
+{'9', 0x0000ffaf, 0xffe8ff6e},
+{'l', 0x00000000, 0xc1667d51},
+{'8', 0x16410c1b, 0x0a400a26},
+{'8', 0xed42002d, 0xcd14ed14},
+{'8', 0xcbebe300, 0xc5b7e7eb},
+{'q', 0xc13d1744, 0xc0f3ea80},
+{0, 0xc13d1744, 0xc19292cc},
+{'8', 0xc80fe200, 0xca2fe60f},
+{'8', 0xcc30e222, 0xd00dea0d},
+{'8', 0xc6e6dc00, 0xebb6ebe7},
+{'q', 0xc0e67d50, 0x00000000},
+{0, 0xc12faa10, 0x408f3780},
+{'9', 0x0023ffe2, 0x0072ffe2},
+{'4', 0x02360000, 0x0000ff63},
+{'l', 0x00000000, 0xc28cd6d3},
+{'q', 0x00000000, 0xc182e8bc},
+{0, 0x410e1910, 0xc1c699f4},
+{'q', 0x410f377e, 0xc10880e8},
+{0, 0x41cddfc6, 0xc10880e8},
+{'q', 0x41667d50, 0x00000000},
+{0, 0x41b5d176, 0x40c96610},
+{'q', 0x41052598, 0x40c96600},
+{0, 0x41052598, 0x4189101c},
+{'8', 0x36f71e00, 0x2aea17f8},
+{'8', 0x22e213f3, 0x1be20ff0},
+{'8', 0x18e90cf3, 0x16f80bf8},
+{'8', 0x1a0b0d00, 0x40520c0b},
+{'q', 0x413bf8d8, 0x410bdc30},
+{0, 0x413bf8d8, 0x41ab3055},
+{'@', 0x000000e0, 0x00004fa6},/*        à        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfe83ffb7},
+{'l', 0xc1be35b5, 0xc19a67d4},
+{'l', 0x00000000, 0xc04072a0},
+{'l', 0x419055ef, 0x00000000},
+{'l', 0x418c6b68, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000e1, 0x00004fa6},/*        á        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfe83ff44},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa1, 0xc1a11e70},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b4, 0x419a67d4},
+{'l', 0xc13e35b6, 0x00000000},
+{'@', 0x000000e2, 0x00004fa6},/*        â        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfe73007d},
+{'l', 0x00000000, 0x3ffaa100},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc156d340},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157a, 0x4156d340},
+{'l', 0xc133055f, 0x00000000},
+{'l', 0x00000000, 0xbffaa100},
+{'l', 0x419055ee, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc32, 0x41b1e6f0},
+{'@', 0x000000e3, 0x00004fa6},/*        ã        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfe830003},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194965, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c84, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3778, 0x417bbf90},
+{'q', 0xc07aa120, 0x40982af0},
+{0, 0xc131e6f0, 0x40982af0},
+{'@', 0x000000e4, 0x00004fa6},/*        ä        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfe7affe6},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x00000000, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c8, 0x00000000},
+{'@', 0x000000e5, 0x00004fa6},/*        å        x-advance: 79.648438 */
+{'M', 0x41d76276, 0x3fb3055f},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0be35b5},
+{'q', 0xc0c4ec51, 0xc0c07293},
+{0, 0xc0c4ec51, 0xc186d33f},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f3ea85, 0xc18ea848},
+{'9', 0xffd0003d, 0xffce00b1},
+{'4', 0xfffe0082, 0xffe20000},
+{'8', 0xa9ecc500, 0xe3bde3ec},
+{'8', 0x14c000d5, 0x41e713ec},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3ff1ada8, 0xc130c884},
+{0, 0x41211e70, 0xc185b4d2},
+{'q', 0x41040728, 0xc0b77f10},
+{0, 0x41b39495, 0xc0b77f10},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b0c882, 0x40e20390},
+{'9', 0x0038003e, 0x00a0003e},
+{'l', 0x00000000, 0x41dc6b69},
+{'8', 0x460b3200, 0x1326130b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x412a11e7},
+{'8', 0x06e703f3, 0x04ea02f5},
+{'8', 0x02e801f5, 0x01e301f4},
+{'8', 0xe3a900c5, 0xabdfe3e5},
+{'l', 0xbed6d380, 0x35800000},
+{'9', 0x0077ffbe, 0x0077ff39},
+{'m', 0x41b6efe4, 0xc211bbf9},
+{'l', 0xc1211e70, 0x3e0f3800},
+{'8', 0x0cb302ca, 0x1ddd09ea},
+{'8', 0x35f514f5, 0x40132b00},
+{'8', 0x14351414, 0xec430024},
+{'8', 0xc930ec1e, 0xb511dd11},
+{'6', 0xffe20000, 0xfdf80038},
+{'8', 0x64d73a00, 0x299c29d8},
+{'8', 0xd79b00c5, 0x9cd8d7d8},
+{'8', 0x9c29c600, 0xd764d729},
+{'8', 0x2964003a, 0x64292929},
+{'m', 0xc10e1910, 0x00000000},
+{'8', 0xcfece400, 0xecceecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x33141f00, 0x14311414},
+{'8', 0xec32001d, 0xce14ec14},
+{'@', 0x000000e6, 0x00007f57},/*        æ        x-advance: 127.339844 */
+{'M', 0x42af3ea8, 0x3fb3055f},
+{'q', 0xc1ad6d34, 0x00000000},
+{0, 0xc1f2cc14, 0xc1801ca4},
+{'q', 0xc114cfac, 0x41801ca4},
+{0, 0xc1e70c89, 0x41801ca4},
+{'q', 0xc13423cc, 0xb4000000},
+{0, 0xc18c6b69, 0xc0c07293},
+{'q', 0xc0c7292d, 0xc0c07293},
+{0, 0xc0c7292d, 0xc1864407},
+{'q', 0x00000000, 0xc139bbf8},
+{0, 0x40f86441, 0xc18d89d8},
+{'9', 0xffcf003e, 0xffcc00b8},
+{'4', 0xfffe0086, 0xffe20000},
+{'8', 0xa8eac400, 0xe4b9e4ea},
+{'8', 0x14bc00d1, 0x40e614eb},
+{'l', 0xc1a3ea84, 0xbf7aa100},
+{'q', 0x3fe8ba30, 0xc12faa14},
+{0, 0x41211e6e, 0xc185b4d2},
+{'q', 0x4105259a, 0xc0b77f10},
+{0, 0x41b6efe3, 0xc0b77f10},
+{'q', 0x4172cc18, 0x00000000},
+{0, 0x41ba4b30, 0x40ef70c0},
+{'q', 0x41117460, 0xc0ef70c0},
+{0, 0x41bd1748, 0xc0ef70c0},
+{'q', 0x41825980, 0x00000000},
+{0, 0x41c7292c, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x000a0000, 0x0000fe7c},
+{'q', 0x00000000, 0x41235b4c},
+{0, 0x40840720, 0x417dfc6a},
+{'8', 0x2d5c2d21, 0xb8690053},
+{'l', 0x41944070, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0xc253bf8d, 0xc15b4cfb},
+{'8', 0xeb470026, 0xc632eb20},
+{'9', 0xffdc0012, 0xffb40012},
+{'4', 0xffe70000, 0x0001ffab},
+{'8', 0x0cae02c6, 0x1ddc09e8},
+{'8', 0x35f414f4, 0x40142b00},
+{'9', 0x00140015, 0x00140037},
+{'m', 0x4253bf8d, 0xc25182ae},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf710, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'@', 0x000000e7, 0x00004fa6},/*        ç        x-advance: 79.648438 */
+{'M', 0x42262762, 0x3fb3055f},
+{'q', 0xc1899f53, 0x00000000},
+{0, 0xc1d49660, 0xc1235b4d},
+{'q', 0xc115ee18, 0xc12479bb},
+{0, 0xc115ee18, 0xc1e4cfaa},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x41170c87, 0xc1e94966},
+{'q', 0x41170c89, 0xc127d508},
+{0, 0x41d64406, 0xc127d508},
+{'q', 0x4155b4d0, 0x00000000},
+{0, 0x41b0c882, 0x40d6d340},
+{'9', 0x00350045, 0x00940057},
+{'l', 0xc19e525a, 0x3f7aa100},
+{'8', 0xb7dfd2fa, 0xe5b4e5e6},
+{'q', 0xc172cc16, 0x00000000},
+{0, 0xc172cc16, 0x41cb13b2},
+{'q', 0x00000000, 0x41d13b12},
+{0, 0x417745d2, 0x41d13b12},
+{'8', 0xe54a002c, 0xac25e41e},
+{'l', 0x419dc322, 0x3f68ba20},
+{'8', 0x6ed43ef8, 0x4ba230dd},
+{'9', 0x001affc6, 0x001aff7c},
+{'m', 0x415c6b6c, 0x41708f38},
+{'q', 0x00000000, 0x40d25980},
+{0, 0xc0ae8ba8, 0x411ee190},
+{'q', 0xc0ae8ba0, 0x4056d340},
+{0, 0xc17bbf8c, 0x4056d340},
+{'9', 0x0000ffe7, 0xfffdffc8},
+{'l', 0x00000000, 0xc104072a},
+{'8', 0x032e0313, 0xda4c004c},
+{'8', 0xe3f1ed00, 0xf7ccf7f1},
+{'9', 0x0000ffeb, 0x0001ffe3},
+{'4', 0xffa00022, 0x00000050},
+{'l', 0xc013b140, 0x40b77f1b},
+{'8', 0x194d0234, 0x3b191619},
+{'@', 0x000000e8, 0x00004fa6},/*        è        x-advance: 79.648438 */
+{'M', 0x4223ea84, 0x3fb3055f},
+{'q', 0xc18880e4, 0x00000000},
+{0, 0xc1d1ca4a, 0xc1211e6f},
+{'q', 0xc11292cc, 0xc1223cdd},
+{0, 0xc11292cc, 0xc1ec157a},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x4114cfa9, 0xc1e67d50},
+{'q', 0x4114cfab, 0xc1211e70},
+{0, 0x41d2e8ba, 0xc1211e70},
+{'q', 0x41825984, 0x00000000},
+{0, 0x41c7292e, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x00040000, 0x0000fe7c},
+{'q', 0xb6000000, 0x4130c880},
+{0, 0x4081ca48, 0x4185b4cf},
+{'8', 0x2c5d2c21, 0xb8690053},
+{'l', 0x41944072, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0x00000000, 0xc2842af6},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf70c, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'m', 0x40377f20, 0xc19055f0},
+{'l', 0xc1be35b5, 0xc19a67d4},
+{'l', 0x00000000, 0xc04072a0},
+{'l', 0x419055ef, 0x00000000},
+{'l', 0x418c6b68, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000e9, 0x00004fa6},/*        é        x-advance: 79.648438 */
+{'M', 0x4223ea84, 0x3fb3055f},
+{'q', 0xc18880e4, 0x00000000},
+{0, 0xc1d1ca4a, 0xc1211e6f},
+{'q', 0xc11292cc, 0xc1223cdd},
+{0, 0xc11292cc, 0xc1ec157a},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x4114cfa9, 0xc1e67d50},
+{'q', 0x4114cfab, 0xc1211e70},
+{0, 0x41d2e8ba, 0xc1211e70},
+{'q', 0x41825984, 0x00000000},
+{0, 0x41c7292e, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x00040000, 0x0000fe7c},
+{'q', 0xb6000000, 0x4130c880},
+{0, 0x4081ca48, 0x4185b4cf},
+{'8', 0x2c5d2c21, 0xb8690053},
+{'l', 0x41944072, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0x00000000, 0xc2842af6},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf70c, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'m', 0xc13bf8d6, 0xc19055f0},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa1, 0xc1a11e70},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b4, 0x419a67d4},
+{'l', 0xc13e35b6, 0x00000000},
+{'@', 0x000000ea, 0x00004fa6},/*        ê        x-advance: 79.648438 */
+{'M', 0x4223ea84, 0x3fb3055f},
+{'q', 0xc18880e4, 0x00000000},
+{0, 0xc1d1ca4a, 0xc1211e6f},
+{'q', 0xc11292cc, 0xc1223cdd},
+{0, 0xc11292cc, 0xc1ec157a},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x4114cfa9, 0xc1e67d50},
+{'q', 0x4114cfab, 0xc1211e70},
+{0, 0x41d2e8ba, 0xc1211e70},
+{'q', 0x41825984, 0x00000000},
+{0, 0x41c7292e, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x00040000, 0x0000fe7c},
+{'q', 0xb6000000, 0x4130c880},
+{0, 0x4081ca48, 0x4185b4cf},
+{'8', 0x2c5d2c21, 0xb8690053},
+{'l', 0x41944072, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0x00000000, 0xc2842af6},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf70c, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'m', 0x41d13b14, 0xc1a00000},
+{'l', 0x00000000, 0x3ffaa100},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc156d340},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157a, 0x4156d340},
+{'l', 0xc133055f, 0x00000000},
+{'l', 0x00000000, 0xbffaa100},
+{'l', 0x419055ee, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc32, 0x41b1e6f0},
+{'@', 0x000000eb, 0x00004fa6},/*        ë        x-advance: 79.648438 */
+{'M', 0x4223ea84, 0x3fb3055f},
+{'q', 0xc18880e4, 0x00000000},
+{0, 0xc1d1ca4a, 0xc1211e6f},
+{'q', 0xc11292cc, 0xc1223cdd},
+{0, 0xc11292cc, 0xc1ec157a},
+{'q', 0xb5000000, 0xc195ee1a},
+{0, 0x4114cfa9, 0xc1e67d50},
+{'q', 0x4114cfab, 0xc1211e70},
+{0, 0x41d2e8ba, 0xc1211e70},
+{'q', 0x41825984, 0x00000000},
+{0, 0x41c7292e, 0x412d6d30},
+{'9', 0x00560044, 0x00fc0044},
+{'4', 0x00040000, 0x0000fe7c},
+{'q', 0xb6000000, 0x4130c880},
+{0, 0x4081ca48, 0x4185b4cf},
+{'8', 0x2c5d2c21, 0xb8690053},
+{'l', 0x41944072, 0x3fcddfc0},
+{'9', 0x00a4ffc0, 0x00a4fefb},
+{'m', 0x00000000, 0xc2842af6},
+{'8', 0x26ab00c9, 0x6be126e3},
+{'l', 0x41eaf70c, 0x00000000},
+{'8', 0x93ddb7fc, 0xdcaedce2},
+{'m', 0x40f1ada8, 0xc1994968},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x00000000, 0xc17508f0},
+{'l', 0x416f70ca, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70ca, 0x00000000},
+{'@', 0x000000ec, 0x000027ca},/*        ì        x-advance: 39.789062 */
+{'M', 0x41223cde, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd6b0049},
+{'l', 0xc1be35b5, 0xc19a67d4},
+{'l', 0x35000000, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x418c6b6a, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1746, 0x00000000},
+{'@', 0x000000ed, 0x000027ca},/*        í        x-advance: 39.789062 */
+{'M', 0x41223cde, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd6bffef},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa2, 0xc1a11e70},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b5, 0x419a67d4},
+{'l', 0xc13e35b5, 0x00000000},
+{'@', 0x000000ee, 0x000027ca},/*        î        x-advance: 39.789062 */
+{'M', 0x41223cde, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd5b011c},
+{'l', 0xb6800000, 0x3ffaa100},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632202, 0xc156d340},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4156d340},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0xb5000000, 0xbffaa100},
+{'l', 0x419055ee, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc32, 0x41b1e6f0},
+{'@', 0x000000ef, 0x000027ca},/*        ï        x-advance: 39.789062 */
+{'M', 0x41223cde, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd62008b},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x34800000, 0xc17508f0},
+{'l', 0x416f70c9, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c9, 0x00000000},
+{'@', 0x000000f0, 0x0000577b},/*        ð        x-advance: 87.480469 */
+{'M', 0x426f70c8, 0xc2b1101d},
+{'9', 0x00b300b0, 0x019500b0},
+{'l', 0x00000000, 0x3e8f3780},
+{'q', 0x00000000, 0x41920395},
+{0, 0xc1223cd8, 0x41e44073},
+{'q', 0xc1211e70, 0x412479bc},
+{0, 0xc1e1745e, 0x412479bc},
+{'q', 0xc18c6b69, 0xb4000000},
+{0, 0xc1de1910, 0xc114cfaa},
+{'q', 0xc1235b4c, 0xc114cfaa},
+{0, 0xc1235b4c, 0xc1cba2e8},
+{'q', 0xb5000000, 0xc181ca4c},
+{0, 0x41211e6e, 0xc1cb13b2},
+{'q', 0x41223cde, 0xc11292c8},
+{0, 0x41e1745d, 0xc11292c8},
+{'q', 0x40eaf710, 0x00000000},
+{0, 0x413660ac, 0x400f3780},
+{'9', 0xffb4ffdd, 0xff7dffad},
+{'4', 0x0044ff5d, 0xff9a0000},
+{'l', 0x4139bbf6, 0xc09ca4b0},
+{'9', 0xffd9ffcf, 0xff9eff70},
+{'l', 0x41a3ea85, 0x00000000},
+{'9', 0x001a0035, 0x00340059},
+{'4', 0xffc10095, 0x00690000},
+{'6', 0x001bffbd, 0x01b9000b},
+{'q', 0x00000000, 0xc1330560},
+{0, 0xc08cfaa0, 0xc1813b14},
+{'q', 0xc08cfaa0, 0xc0a11e68},
+{0, 0xc14cc158, 0xc0a11e68},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41a982ae},
+{'q', 0x00000000, 0x4125982c},
+{0, 0x408abdc4, 0x417dfc6c},
+{'8', 0x2b652b22, 0xd86b0045},
+{'q', 0x4095ee18, 0xc0a11e70},
+{0, 0x4095ee18, 0xc1825983},
+{'@', 0x000000f1, 0x0000577b},/*        ñ        x-advance: 87.480469 */
+{'M', 0x426c157b, 0x00000000},
+{'l', 0x00000000, 0xc229ca4b},
+{'q', 0x00000000, 0xc19f70c8},
+{0, 0xc157f1ac, 0xc19f70c8},
+{'q', 0xc0e44070, 0x00000000},
+{0, 0xc1389d88, 0x40c4ec50},
+{'9', 0x0030ffde, 0x007dffde},
+{'4', 0x01440000, 0x0000ff63},
+{'l', 0x00000000, 0xc26af70c},
+{'8', 0xb1ffd000, 0xc9fee1ff},
+{'l', 0x4195ee19, 0x00000000},
+{'8', 0x39040a01, 0x3f022d02},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x407f1ae0, 0xc10abdc0},
+{0, 0x41200000, 0xc1496608},
+{'q', 0x40c07290, 0xc07aa120},
+{0, 0x41655ee0, 0xc07aa120},
+{'q', 0x41407298, 0x00000000},
+{0, 0x4193b13c, 0x40ed33f0},
+{'9', 0x003b0033, 0x00ad0033},
+{'4', 0x01800000, 0x0000ff64},
+{'m', 0xc01ca4b0, 0xc2a5745d},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194966, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3780, 0x417bbf90},
+{'q', 0xc07aa120, 0x40982af0},
+{0, 0xc131e6f0, 0x40982af0},
+{'@', 0x000000f2, 0x0000577b},/*        ò        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'9', 0x00000090, 0xff320090},
+{'m', 0xc169d89c, 0xc2334cfb},
+{'l', 0xc1be35b5, 0xc19a67d4},
+{'l', 0x00000000, 0xc04072a0},
+{'l', 0x419055ed, 0x00000000},
+{'l', 0x418c6b6a, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000f3, 0x0000577b},/*        ó        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'9', 0x00000090, 0xff320090},
+{'m', 0xc1e67d50, 0xc2334cfb},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa0, 0xc1a11e70},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b4, 0x419a67d4},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000f4, 0x0000577b},/*        ô        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'9', 0x00000090, 0xff320090},
+{'m', 0x4101ca4c, 0xc23b2203},
+{'l', 0x00000000, 0x3ffaa100},
+{'l', 0xc131e6f0, 0x00000000},
+{'l', 0xc1632204, 0xc156d340},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4156d340},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0x00000000, 0xbffaa100},
+{'l', 0x419055ed, 0xc1b1e6f0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x418bdc32, 0x41b1e6f0},
+{'@', 0x000000f5, 0x0000577b},/*        õ        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'9', 0x00000090, 0xff320090},
+{'m', 0xc0c07290, 0xc2334cfb},
+{'8', 0xf6cf00e8, 0xe9d0f6e8},
+{'8', 0xe8d4f3e9, 0xf6dbf6ec},
+{'8', 0x0cdd00ea, 0x37ed0cf5},
+{'l', 0xc1194966, 0x00000000},
+{'8', 0xa211c104, 0xce27e10d},
+{'8', 0xed44ed19, 0x0a320019},
+{'8', 0x18300a19, 0x172b0c17},
+{'8', 0x0a240a14, 0xf3220016},
+{'9', 0xfff3000c, 0xffc90014},
+{'l', 0x41170c84, 0x00000000},
+{'q', 0xbefaa100, 0x412faa10},
+{0, 0xc08f3780, 0x417bbf90},
+{'q', 0xc07aa110, 0x40982af0},
+{0, 0xc131e6ec, 0x40982af0},
+{'@', 0x000000f6, 0x0000577b},/*        ö        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'q', 0xc18d89d9, 0xb4000000},
+{0, 0xc1de1911, 0xc127d509},
+{'q', 0xc1211e6e, 0xc127d509},
+{0, 0xc1211e6e, 0xc1e67d50},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'q', 0x41944072, 0x00000000},
+{0, 0x41e20394, 0x41223ce0},
+{'9', 0x0050004e, 0x00e8004e},
+{'m', 0xc1a479ba, 0x00000000},
+{'q', 0x00000000, 0xc157f1b0},
+{0, 0xc08cfaa0, 0xc19ca4b4},
+{'q', 0xc08cfaa0, 0xc0c2af70},
+{0, 0xc14cc158, 0xc0c2af70},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'q', 0x00000000, 0x414a8478},
+{0, 0x408abdc4, 0x419a67d4},
+{'q', 0x408cfaa0, 0x40d25982},
+{0, 0x414a8478, 0x40d25982},
+{'9', 0x00000090, 0xff320090},
+{'m', 0xc1200000, 0xc237c6b7},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x00000000, 0xc17508f0},
+{'l', 0x416f70c6, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c6, 0x00000000},
+{'@', 0x000000f7, 0x00004e99},/*        ÷        x-advance: 78.597656 */
+{'M', 0x405b4cfa, 0xc21f292d},
+{'l', 0x00000000, 0xc17aa11c},
+{'4', 0x0000023e, 0x007d0000},
+{'6', 0x0000fdc2, 0x00df00db},
+{'l', 0x00000000, 0xc1825983},
+{'4', 0x00000085, 0x00820000},
+{'6', 0x0000ff7b, 0xfe460000},
+{'l', 0x00000000, 0xc1825984},
+{'l', 0x41852599, 0x00000000},
+{'l', 0x00000000, 0x41825984},
+{'l', 0xc1852599, 0x00000000},
+{'@', 0x000000f8, 0x0000577b},/*        ø        x-advance: 87.480469 */
+{'M', 0x42a3c6b6, 0xc2179bbf},
+{'q', 0x00000000, 0x41932203},
+{0, 0xc1235b48, 0x41e70c87},
+{'q', 0xc1235b4c, 0x4126b69a},
+{0, 0xc1e20394, 0x4126b69a},
+{'9', 0x0000ff95, 0xffcfff4b},
+{'4', 0x0045ffc1, 0x0000ff9a},
+{'l', 0x415c6b69, 0xc1708f38},
+{'q', 0xc1040728, 0xc1235b4c},
+{0, 0xc1040728, 0xc1d5b4ce},
+{'q', 0xb5000000, 0xc1920396},
+{0, 0x41211e6e, 0xc1e55ee2},
+{'q', 0x41211e70, 0xc127d508},
+{0, 0x41e1745d, 0xc127d508},
+{'9', 0x0000006f, 0x002e00b8},
+{'4', 0xffc10038, 0x00000066},
+{'l', 0xc14ddfc8, 0x41667d50},
+{'9', 0x004f003f, 0x00d7003f},
+{'m', 0xc1a479ba, 0x00000000},
+{'9', 0xffcc0000, 0xffa6fff8},
+{'l', 0xc1e3b13b, 0x4200abdc},
+{'q', 0x408abdc4, 0x40a11e72},
+{0, 0x41377f1a, 0x40a11e72},
+{'9', 0x00000090, 0xff320090},
+{'m', 0xc20c6b6a, 0x00000000},
+{'9', 0x00330000, 0x005b0009},
+{'l', 0x41e3b13c, 0xc200f378},
+{'q', 0xc0864408, 0xc09a67d8},
+{0, 0xc13bf8d8, 0xc09a67d8},
+{'q', 0xc18f377f, 0x00000000},
+{0, 0xc18f377f, 0x41cd5090},
+{'@', 0x000000f9, 0x0000577b},/*        ù        x-advance: 87.480469 */
+{'M', 0x41e44072, 0xc2975424},
+{'l', 0x00000000, 0x4229ca4c},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0x4156d340, 0x419f70c8},
+{'q', 0x40e44070, 0xb5800000},
+{0, 0x41377f1c, 0xc0c2af70},
+{'9', 0xffcf0023, 0xff830023},
+{'4', 0xfebc0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'9', 0x004d0000, 0x00870004},
+{'l', 0xc195ee18, 0x00000000},
+{'9', 0xffb0fffa, 0xff88fffa},
+{'l', 0xbeb30500, 0x00000000},
+{'q', 0xc07aa120, 0x41099f54},
+{0, 0xc1200000, 0x4148479b},
+{'q', 0xc0c07298, 0x407aa120},
+{0, 0xc1655ee4, 0x407aa120},
+{'q', 0xc1407292, 0xb4000000},
+{0, 0xc193b13a, 0xc0eaf70d},
+{'9', 0xffc5ffcd, 0xff53ffcd},
+{'4', 0xfe800000, 0x0000009d},
+{'m', 0x41708f38, 0xc0e20390},
+{'l', 0xc1be35b5, 0xc19a67d4},
+{'l', 0x00000000, 0xc04072a0},
+{'l', 0x419055ef, 0x00000000},
+{'l', 0x418c6b68, 0x41a11e70},
+{'l', 0x00000000, 0x400abdc0},
+{'l', 0xc13d1744, 0x00000000},
+{'@', 0x000000fa, 0x0000577b},/*        ú        x-advance: 87.480469 */
+{'M', 0x41e44072, 0xc2975424},
+{'l', 0x00000000, 0x4229ca4c},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0x4156d340, 0x419f70c8},
+{'q', 0x40e44070, 0xb5800000},
+{0, 0x41377f1c, 0xc0c2af70},
+{'9', 0xffcf0023, 0xff830023},
+{'4', 0xfebc0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'9', 0x004d0000, 0x00870004},
+{'l', 0xc195ee18, 0x00000000},
+{'9', 0xffb0fffa, 0xff88fffa},
+{'l', 0xbeb30500, 0x00000000},
+{'q', 0xc07aa120, 0x41099f54},
+{0, 0xc1200000, 0x4148479b},
+{'q', 0xc0c07298, 0x407aa120},
+{0, 0xc1655ee4, 0x407aa120},
+{'q', 0xc1407292, 0xb4000000},
+{0, 0xc193b13a, 0xc0eaf70d},
+{'9', 0xffc5ffcd, 0xff53ffcd},
+{'4', 0xfe800000, 0x0000009d},
+{'m', 0x40762760, 0xc0e20390},
+{'l', 0x00000000, 0xc00abdc0},
+{'l', 0x418cfaa2, 0xc1a11e70},
+{'l', 0x419055ec, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b2, 0x419a67d4},
+{'l', 0xc13e35b8, 0x00000000},
+{'@', 0x000000fb, 0x0000577b},/*        û        x-advance: 87.480469 */
+{'M', 0x41e44072, 0xc2975424},
+{'l', 0x00000000, 0x4229ca4c},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0x4156d340, 0x419f70c8},
+{'q', 0x40e44070, 0xb5800000},
+{0, 0x41377f1c, 0xc0c2af70},
+{'9', 0xffcf0023, 0xff830023},
+{'4', 0xfebc0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'9', 0x004d0000, 0x00870004},
+{'l', 0xc195ee18, 0x00000000},
+{'9', 0xffb0fffa, 0xff88fffa},
+{'l', 0xbeb30500, 0x00000000},
+{'q', 0xc07aa120, 0x41099f54},
+{0, 0xc1200000, 0x4148479b},
+{'q', 0xc0c07298, 0x407aa120},
+{0, 0xc1655ee4, 0x407aa120},
+{'q', 0xc1407292, 0xb4000000},
+{0, 0xc193b13a, 0xc0eaf70d},
+{'9', 0xffc5ffcd, 0xff53ffcd},
+{'4', 0xfe800000, 0x0000009d},
+{'m', 0x42228479, 0xc11055e8},
+{'l', 0x00000000, 0x3ffaa100},
+{'l', 0xc131e6ec, 0x00000000},
+{'l', 0xc1632204, 0xc156d340},
+{'l', 0xbe8f3780, 0x00000000},
+{'l', 0xc16c157c, 0x4156d340},
+{'l', 0xc133055e, 0x00000000},
+{'l', 0x00000000, 0xbffaa100},
+{'l', 0x419055ef, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x418bdc30, 0x41b1e6f0},
+{'@', 0x000000fc, 0x0000577b},/*        ü        x-advance: 87.480469 */
+{'M', 0x41e44072, 0xc2975424},
+{'l', 0x00000000, 0x4229ca4c},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0x4156d340, 0x419f70c8},
+{'q', 0x40e44070, 0xb5800000},
+{0, 0x41377f1c, 0xc0c2af70},
+{'9', 0xffcf0023, 0xff830023},
+{'4', 0xfebc0000, 0x0000009d},
+{'l', 0x00000000, 0x426af70d},
+{'9', 0x004d0000, 0x00870004},
+{'l', 0xc195ee18, 0x00000000},
+{'9', 0xffb0fffa, 0xff88fffa},
+{'l', 0xbeb30500, 0x00000000},
+{'q', 0xc07aa120, 0x41099f54},
+{0, 0xc1200000, 0x4148479b},
+{'q', 0xc0c07298, 0x407aa120},
+{0, 0xc1655ee4, 0x407aa120},
+{'q', 0xc1407292, 0xb4000000},
+{0, 0xc193b13a, 0xc0eaf70d},
+{'9', 0xffc5ffcd, 0xff53ffcd},
+{'4', 0xfe800000, 0x0000009d},
+{'m', 0x41b5423e, 0xc102e8b8},
+{'l', 0x00000000, 0xc17508f0},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x00000000, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c8, 0x00000000},
+{'@', 0x000000fd, 0x00004fa6},/*        ý        x-advance: 79.648438 */
+{'M', 0x419e5259, 0x41edc322},
+{'9', 0x0000ffc8, 0xfff9ff9d},
+{'l', 0x00000000, 0xc15fc6b6},
+{'8', 0x0436041d, 0xf6370021},
+{'8', 0xdd27f616, 0xad27e811},
+{'4', 0xfda9ff11, 0x000000a6},
+{'l', 0x413e35b4, 0x420dd175},
+{'9', 0x003c0016, 0x00ba0038},
+{'l', 0x3fdfc6c0, 0xc0d49660},
+{'l', 0x40917458, 0xc18377f1},
+{'4', 0xfee30059, 0x000000a4},
+{'l', 0xc1ef70c8, 0x429f4cfb},
+{'q', 0xc0c07298, 0x4168ba2c},
+{0, 0xc148479c, 0x41a11e6e},
+{'9', 0x002cffcd, 0x002cff7b},
+{'m', 0x4111745e, 0xc2e0e526},
+{'l', 0x00000000, 0xc00abda0},
+{'l', 0x418cfaa0, 0xc1a11e70},
+{'l', 0x419055f0, 0x00000000},
+{'l', 0x00000000, 0x404072a0},
+{'l', 0xc1be35b6, 0x419a67d4},
+{'l', 0xc13e35b4, 0x00000000},
+{'@', 0x000000fe, 0x0000577b},/*        þ        x-advance: 87.480469 */
+{'M', 0x41200000, 0xc2cf8d6d},
+{'l', 0x419d33ea, 0x00000000},
+{'4', 0x01020000, 0x005dfffe},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x40d49660, 0xc15ea844},
+{0, 0x41c19102, 0xc15ea844},
+{'q', 0x4155b4d0, 0x00000000},
+{0, 0x41a479bc, 0x411dc320},
+{'q', 0x40e67d50, 0x411ca4b4},
+{0, 0x40e67d50, 0x41db4cfa},
+{'q', 0x00000000, 0x418fc6b7},
+{0, 0xc0f3ea80, 0x41df377f},
+{'q', 0xc0f1adb0, 0x411dc322},
+{0, 0xc1ab3056, 0x411dc322},
+{'8', 0xe59100c1, 0xb0b8e5d2},
+{'l', 0xbed6d340, 0x00000000},
+{'9', 0x00100003, 0x00650003},
+{'4', 0x00e80000, 0x0000ff63},
+{'6', 0xfbd50000, 0x021b0198},
+{'q', 0x00000000, 0xc1407298},
+{0, 0xc07aa120, 0xc18ea84a},
+{'8', 0xd2a3d2e2, 0x33a000c1},
+{'q', 0xc0840728, 0x40cba2e8},
+{0, 0xc0840728, 0x418e1910},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40840728, 0x418cfaa1},
+{'q', 0x40864408, 0x40c4ec4e},
+{0, 0x413e35b4, 0x40c4ec4e},
+{'q', 0x417bbf90, 0x00000000},
+{0, 0x417bbf90, 0xc1c2af70},
+{'@', 0x000000ff, 0x00004fa6},/*        ÿ        x-advance: 79.648438 */
+{'M', 0x419e5259, 0x41edc322},
+{'9', 0x0000ffc8, 0xfff9ff9d},
+{'l', 0x00000000, 0xc15fc6b6},
+{'8', 0x0436041d, 0xf6370021},
+{'8', 0xdd27f616, 0xad27e811},
+{'4', 0xfda9ff11, 0x000000a6},
+{'l', 0x413e35b4, 0x420dd175},
+{'9', 0x003c0016, 0x00ba0038},
+{'l', 0x3fdfc6c0, 0xc0d49660},
+{'l', 0x40917458, 0xc18377f1},
+{'4', 0xfee30059, 0x000000a4},
+{'l', 0xc1ef70c8, 0x429f4cfb},
+{'q', 0xc0c07298, 0x4168ba2c},
+{0, 0xc148479c, 0x41a11e6e},
+{'9', 0x002cffcd, 0x002cff7b},
+{'m', 0x41e44073, 0xc2e32204},
+{'l', 0x00000000, 0xc17508e8},
+{'4', 0x00000079, 0x007a0000},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x00000000, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0x00000000, 0x417508f0},
+{'l', 0xc16f70c8, 0x00000000},
+{'@', 0x00000141, 0x0000577b},/*        Ł        x-advance: 87.480469 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2071ada},
+{'l', 0xc1194966, 0x4091745c},
+{'l', 0x00000000, 0xc17bbf8e},
+{'l', 0x41194966, 0xc093b138},
+{'l', 0x00000000, 0xc243cddf},
+{'l', 0x41a508f3, 0x00000000},
+{'l', 0x00000000, 0x421c5d16},
+{'l', 0x41abbf8e, 0xc12479b8},
+{'l', 0x00000000, 0x417982ac},
+{'l', 0xc1abbf8e, 0x412479bc},
+{'l', 0x00000000, 0x41dd89d8},
+{'l', 0x425377f1, 0x00000000},
+{'l', 0x00000000, 0x41813b14},
+{'l', 0xc292fe35, 0x00000000},
+{'@', 0x000003c0, 0x00006da6},/*        π        x-advance: 109.648438 */
+{'M', 0x42ad6d34, 0xc27982af},
+{'l', 0x00000000, 0x4224c158},
+{'8', 0x370f2800, 0x0f2a0f0f},
+{'9', 0x00000015, 0xfffa0036},
+{'l', 0x3fb30580, 0x414ddfc7},
+{'q', 0xc0ed33f0, 0x3fd6d33f},
+{0, 0xc17982b0, 0x3fd6d33f},
+{'q', 0xc11dc320, 0x00000000},
+{0, 0xc16af710, 0xc0a5982b},
+{'9', 0xffd7ffda, 0xff8affda},
+{'4', 0xfea20000, 0x0000ff35},
+{'l', 0x00000000, 0x410abdc4},
+{'q', 0x00000000, 0x417cddfc},
+{0, 0xbfbbf8c0, 0x41e44071},
+{'9', 0x0065fff5, 0x00c9ffdb},
+{'l', 0xc1a08f38, 0x00000000},
+{'q', 0x4081ca48, 0xc182e8ba},
+{0, 0x40b0c880, 0xc1e1745d},
+{'9', 0xffa2000c, 0xff39000c},
+{'l', 0x00000000, 0xc113b138},
+{'9', 0x0000ff88, 0x0014ff63},
+{'l', 0xb4800000, 0xc15d89d4},
+{'8', 0xf52df910, 0xfc37fc1d},
+{'l', 0x42b4479b, 0x00000000},
+{'l', 0x00000000, 0x41549664},
+{'l', 0xc198ba2c, 0x00000000},
+{'@', 0x0000201c, 0x0000479b},/*        “        x-advance: 71.605469 */
+{'M', 0x4221f542, 0xc2687293},
+{'l', 0x00000000, 0xc15a2e8c},
+{'q', 0x00000000, 0xc10abdc0},
+{0, 0x3ff1ada0, 0xc1708f38},
+{'9', 0xffce000f, 0xffa3002e},
+{'l', 0x414ba2e8, 0x00000000},
+{'8', 0x5aca2bde, 0x56ed2eed},
+{'4', 0x00000047, 0x00920000},
+{'6', 0x0000ff5f, 0x0000ff11},
+{'l', 0x00000000, 0xc15a2e8c},
+{'q', 0x00000000, 0xc1076278},
+{0, 0x3fe8ba30, 0xc16e5258},
+{'9', 0xffcc000e, 0xffa1002d},
+{'l', 0x414cc158, 0x00000000},
+{'8', 0x5aca2bde, 0x56ed2eed},
+{'l', 0x410e1910, 0x00000000},
+{'l', 0x00000000, 0x41920392},
+{'l', 0xc1a08f37, 0x00000000},
+{'@', 0x0000201d, 0x0000479b},/*        ”        x-advance: 71.605469 */
+{'M', 0x4273ea84, 0xc2aa35b5},
+{'q', 0x00000000, 0x41076278},
+{0, 0xbfe8ba20, 0x416f70c8},
+{'9', 0x0033fff3, 0x0060ffd2},
+{'l', 0xc14ddfc8, 0x00000000},
+{'9', 0xffa3004a, 0xff4f004a},
+{'l', 0xc10e1910, 0x00000000},
+{'4', 0xff6f0000, 0x000000a0},
+{'6', 0x006b0000, 0x0000ff10},
+{'q', 0x00000000, 0x410bdc38},
+{0, 0xbfdfc6b0, 0x41708f38},
+{'9', 0x0031fff3, 0x005fffd2},
+{'l', 0xc14ba2e8, 0x00000000},
+{'9', 0xffa30049, 0xff4f0049},
+{'l', 0xc10e1910, 0x00000000},
+{'l', 0x00000000, 0xc191745c},
+{'l', 0x41a08f37, 0x00000000},
+{'l', 0x00000000, 0x4156d338},
+{'@', 0x00002022, 0x00003223},/*        •        x-advance: 50.136719 */
+{'M', 0x42361910, 0xc23d1746},
+{'q', 0x00000000, 0x41076278},
+{0, 0xc0c2af70, 0x4168ba30},
+{'q', 0xc0c2af70, 0x40c2af70},
+{0, 0xc168ba2e, 0x40c2af70},
+{'q', 0xc1052598, 0x00000000},
+{0, 0xc1655ee2, 0xc0c07290},
+{'q', 0xc0c07293, 0xc0c2af70},
+{0, 0xc0c07293, 0xc169d8a0},
+{'q', 0x00000000, 0xc10880e4},
+{0, 0x40be35b5, 0xc1679bc0},
+{'q', 0x40c07292, 0xc0c07290},
+{0, 0x41667d51, 0xc0c07290},
+{'q', 0x410880e6, 0x00000000},
+{0, 0x4168ba2e, 0x40c07290},
+{'q', 0x40c2af70, 0x40be35b8},
+{0, 0x40c2af70, 0x41679bc0},
+{'@', 0x00002026, 0x00008f37},/*        …        x-advance: 143.214844 */
+{'M', 0x417bbf8d, 0x00000000},
+{'l', 0x00000000, 0xc1aaa11e},
+{'4', 0x000000a1, 0x00aa0000},
+{'6', 0x0000ff5f, 0x000002d8},
+{'l', 0x00000000, 0xc1aaa11e},
+{'4', 0x000000a1, 0x00aa0000},
+{'6', 0x0000ff5f, 0x0000fe96},
+{'l', 0x00000000, 0xc1aaa11e},
+{'l', 0x41a00000, 0x00000000},
+{'l', 0x00000000, 0x41aaa11e},
+{'l', 0xc1a00000, 0x00000000},
+{'@', 0x000020ac, 0x00004fa6},/*        €        x-advance: 79.648438 */
+{'M', 0x42380e52, 0xc15ea847},
+{'8', 0xe7400028, 0xb91de718},
+{'l', 0x419af70c, 0x3f8f3780},
+{'q', 0xc00abdc0, 0x41525982},
+{0, 0xc1235b50, 0x419e5259},
+{'q', 0xc0ff1ad0, 0x40d25984},
+{0, 0xc1a982ae, 0x40d25984},
+{'q', 0xc17cddfc, 0xb4000000},
+{0, 0xc1c7292c, 0xc114cfaa},
+{'9', 0xffb6ffb8, 0xff22ffa8},
+{'0', 0xad1600b8, 0xe4ff002b},
+{'0', 0x00bfe101, 0x0030ad16},
+{'q', 0x408cfaa0, 0xc2100e53},
+{0, 0x42109d8a, 0xc2100e53},
+{'q', 0x414ba2e4, 0x00000000},
+{0, 0x41a59828, 0x40d25980},
+{'9', 0x0034003f, 0x00940050},
+{'l', 0xc19ca4b2, 0x3f8f3780},
+{'8', 0xc0e3d7fb, 0xeac0eae9},
+{'q', 0xc0dd89d8, 0x00000000},
+{0, 0xc12a11e4, 0x409ee190},
+{'9', 0x0027ffe3, 0x007dffdb},
+{'l', 0x41b6efe3, 0x00000000},
+{'l', 0xc001ca40, 0x4126b698},
+{'l', 0xc1a982b0, 0x00000000},
+{'l', 0xbe0f3780, 0x407aa120},
+{'l', 0x3e56d300, 0x40644070},
+{'4', 0x000000be, 0x0053fff0},
+{'l', 0xc1aa11e8, 0x00000000},
+{'q', 0x3ffaa120, 0x41adfc6c},
+{0, 0x4180abdc, 0x41adfc6c},
+{'@', 0x00002122, 0x00008f37},/*        â„¢        x-advance: 143.214844 */
+{'M', 0x42941ca5, 0xc256d33e},
+{'l', 0xc139bbfc, 0x00000000},
+{'4', 0xfe9a0000, 0x0000008a},
+{'l', 0x411b8648, 0x41a86440},
+{'9', 0x001b000c, 0x00590024},
+{'l', 0x408f3770, 0xc1330558},
+{'l', 0x41211e70, 0xc1a86440},
+{'l', 0x4187f1b0, 0x00000000},
+{'4', 0x01660000, 0x0000ffa4},
+{'l', 0x00000000, 0xc1be35b4},
+{'9', 0xfff80000, 0xffa00004},
+{'l', 0xc0064420, 0x40a7d510},
+{'l', 0xc04ddfc0, 0x40f3ea80},
+{'l', 0xc12c4ec8, 0x41b77f1c},
+{'4', 0x0000ffb7, 0xff49ffad},
+{'l', 0xc0ac4ed0, 0xc14ddfc8},
+{'9', 0x00500003, 0x00600003},
+{'6', 0x00be0000, 0xfee8fee3},
+{'l', 0x00000000, 0x420c6b6a},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc20c6b6a},
+{'l', 0xc187f1ae, 0x00000000},
+{'l', 0x00000000, 0xc11b8640},
+{'l', 0x423c880e, 0x00000000},
+{'l', 0x36800000, 0x411b8640},
+{'l', 0xc18c6b6a, 0x00000000},
+{'@', 0x00002190, 0x00008f37},/*        ←        x-advance: 143.214844 */
+{'M', 0x42334cfa, 0xc20b055f},
+{'9', 0x0025001f, 0x006e0042},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffadffb9, 0xff84ff69},
+{'l', 0x00000000, 0xc0211e70},
+{'9', 0xffd80050, 0xff840097},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x0048ffde, 0x006effbe},
+{'l', 0x428a525a, 0x00000000},
+{'l', 0x00000000, 0x40c07290},
+{'l', 0xc28a525a, 0x00000000},
+{'@', 0x00002191, 0x0000479b},/*        ↑        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc281ca4b},
+{'9', 0x001fffdb, 0x0042ff92},
+{'l', 0x00000000, 0xc0a11e70},
+{'9', 0xffb90053, 0xff69007c},
+{'l', 0x40211e60, 0x00000000},
+{'9', 0x00500028, 0x0097007c},
+{'l', 0x00000000, 0x40a11e70},
+{'9', 0xffdeffb8, 0xffbeff92},
+{'l', 0x00000000, 0x428a5259},
+{'l', 0xc0c07290, 0x36200000},
+{'l', 0x00000000, 0xc28a5259},
+{'@', 0x00002192, 0x00008f37},/*        →        x-advance: 143.214844 */
+{'M', 0x42c4c881, 0xc22313b1},
+{'9', 0xffdbffe1, 0xff92ffbe},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x00530047, 0x007c0097},
+{'l', 0x00000000, 0x40211e70},
+{'9', 0x0028ffb0, 0x007cff69},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffb80022, 0xff920042},
+{'l', 0xc28a525a, 0x00000000},
+{'l', 0x36000000, 0xc0c07290},
+{'l', 0x428a525a, 0x00000000},
+{'@', 0x00002193, 0x0000479b},/*        ↓        x-advance: 71.605469 */
+{'M', 0x421b3ea8, 0xc135423d},
+{'9', 0xffe10025, 0xffbe006e},
+{'l', 0x00000000, 0x40a11e6e},
+{'9', 0x0047ffad, 0x0097ff84},
+{'l', 0xc0211e60, 0xb5000000},
+{'9', 0xffb0ffd8, 0xff69ff84},
+{'l', 0x00000000, 0xc0a11e6c},
+{'9', 0x00220048, 0x0042006e},
+{'l', 0x00000000, 0xc28a5259},
+{'l', 0x40c07290, 0x00000000},
+{'l', 0x00000000, 0x428a5259},
+{'@', 0x00002212, 0x000053a2},/*        −        x-advance: 83.632812 */
+{'M', 0x40be35b5, 0xc21f292d},
+{'l', 0x00000000, 0xc17aa11c},
+{'l', 0x428fa2e9, 0x00000000},
+{'l', 0x00000000, 0x417aa11c},
+{'l', 0xc28fa2e9, 0x00000000},
+{'@', 0x00002248, 0x00004e99},/*        ≈        x-advance: 78.597656 */
+{'M', 0x4263b13b, 0xc1994966},
+{'8', 0xf4ae00d7, 0xe6aef4d8},
+{'q', 0xc11055ee, 0xc0496608},
+{0, 0xc17745d0, 0xc0496608},
+{'8', 0x0cb700d9, 0x24bb0bdf},
+{'l', 0xb4800000, 0xc16e5258},
+{'q', 0x40fcddfc, 0xc0bbf8d8},
+{0, 0x41979bc0, 0xc0bbf8d8},
+{'8', 0x0c5b002e, 0x1b570c2c},
+{'8', 0x154c1139, 0x03230313},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x22bc18dd, 0x0ab00ae0},
+{'m', 0x00000000, 0xc206d33f},
+{'8', 0xf5ae00d7, 0xe6aef5d8},
+{'q', 0xc113b13a, 0xc0525980},
+{0, 0xc17745d0, 0xc0525980},
+{'8', 0x0bba00db, 0x26b80adf},
+{'l', 0xb4800000, 0xc16e525c},
+{'q', 0x40f62762, 0xc0bbf8d0},
+{0, 0x41979bc0, 0xc0bbf8d0},
+{'q', 0x406d33e8, 0x00000000},
+{0, 0x4100abdc, 0x3f68ba00},
+{'q', 0x408abdc0, 0x3f56d380},
+{0, 0x41644074, 0x40864410},
+{'q', 0x41076274, 0x40407280},
+{0, 0x415fc6b4, 0x40407280},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x23bc19dd, 0x09b009df},
+{'@', 0x000025bc, 0x00008dbf},/*        â–¼        x-advance: 141.746094 */
+{'M', 0x42e1745d, 0xc2a3c6b6},
+{'l', 0xc22745d2, 0x42a78d6d},
+{'l', 0xc227d508, 0xc2a78d6d},
+{'l', 0x42a78d6d, 0x00000000},
+{'@', 0x00002660, 0x00004c15},/*        â™         x-advance: 76.082031 */
+{'M', 0x42182af7, 0xc2ac2af7},
+{'q', 0x3fdfc6c0, 0x40d6d340},
+{0, 0x40a35b50, 0x414a8478},
+{'q', 0x4056d330, 0x40bbf8e0},
+{0, 0x415ea844, 0x417982b0},
+{'8', 0x6b62464e, 0x4c142413},
+{'8', 0x59dc3500, 0x23ab23dc},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18f377e, 0xc155b4d0},
+{'q', 0x3e56d300, 0x4131e6f0},
+{0, 0x403bf8d0, 0x41876276},
+{'q', 0x40330560, 0x40b9bbfa},
+{0, 0x41076278, 0x4111745e},
+{'9', 0x001a002d, 0x001f0077},
+{'4', 0x00140004, 0x0000fe45},
+{'l', 0x3ed6d380, 0xc025982b},
+{'q', 0x410abdc2, 0x00000000},
+{0, 0x416af70c, 0xc056d33f},
+{'q', 0x40c07294, 0xc05b4cfa},
+{0, 0x411055f0, 0xc1170c88},
+{'9', 0xffd00018, 0xff7f0018},
+{'l', 0x00000000, 0xbf7aa120},
+{'q', 0xc0c96608, 0x4155b4d0},
+{0, 0xc191745c, 0x4155b4d0},
+{'8', 0xddaa00cf, 0xa9dcdddc},
+{'8', 0xa918cf00, 0xad50da19},
+{'q', 0x411b8642, 0xc1052598},
+{0, 0x41655ee0, 0xc16d33e8},
+{'q', 0x4093b138, 0xc0d01cb0},
+{0, 0x40cddfc8, 0xc173ea88},
+{'@', 0x00002663, 0x00005dfc},/*        ♣        x-advance: 93.984375 */
+{'M', 0x429901ca, 0x00000000},
+{'4', 0x0000fe29, 0xffed0004},
+{'8', 0xe26cf14b, 0xd03bf121},
+{'8', 0xb629df1a, 0xac0fd70f},
+{'l', 0xbe0f3700, 0xc0525980},
+{'8', 0x64af43e1, 0x219d21cf},
+{'8', 0xebb100d5, 0xc8c9ebdd},
+{'8', 0xb2eddded, 0x9428c000},
+{'8', 0xd45cd428, 0x1c5a0022},
+{'8', 0xc6e2dceb, 0xd7faecfa},
+{'8', 0x932dbd00, 0xd76cd72d},
+{'8', 0x2c6d0040, 0x682c2c2c},
+{'8', 0x66da3000, 0xe837ea2e},
+{'8', 0xfc22fc0c, 0x2b60003a},
+{'8', 0x6b282a28, 0x6fd54000},
+{'8', 0x2d942dd5, 0xf3c000e1},
+{'8', 0xdcc5f3df, 0xafc4eae6},
+{'q', 0x3eb30580, 0x410cfaa0},
+{0, 0x4001ca50, 0x41632204},
+{'8', 0x4c2c2a0d, 0x3042211e},
+{'q', 0x408f3788, 0x3fe8ba30},
+{0, 0x4147292c, 0x40525983},
+{'l', 0x3f0f3780, 0x401ca4b3},
+{'@', 0x00002665, 0x00005508},/*        ♥        x-advance: 85.031250 */
+{'M', 0x422aa11e, 0x3fcddfc7},
+{'q', 0xbfc4ec40, 0xc0c07293},
+{0, 0xc0982af8, 0xc1460abe},
+{'9', 0xffceffe7, 0xff4aff85},
+{'l', 0xc0c96608, 0xc1099f54},
+{'8', 0xa5c7c9d7, 0xb7f1dcf1},
+{'8', 0x9f26c500, 0xda5fda27},
+{'8', 0x1f580030, 0x633d1f28},
+{'8', 0x9d3abe13, 0xdf58df27},
+{'8', 0x265d0036, 0x5c282628},
+{'q', 0x00000000, 0x40c07290},
+{0, 0xc044ec60, 0x414a8478},
+{'q', 0xc044ec40, 0x40d49660},
+{0, 0xc12d6d34, 0x4181ca4a},
+{'q', 0xc11ca4b0, 0x4148479e},
+{0, 0xc1655ee0, 0x41a00001},
+{'q', 0xc08f3780, 0x40ed33ea},
+{0, 0xc0dfc6b8, 0x418377f1},
+{'@', 0x00002666, 0x00004913},/*        ♦        x-advance: 73.074219 */
+{'M', 0x42112cc1, 0xc2ab0c88},
+{'q', 0x40a11e70, 0x410bdc30},
+{0, 0x41644074, 0x41ab3058},
+{'q', 0x4114cfa8, 0x41496608},
+{0, 0x418ea848, 0x41b157b6},
+{'q', 0xc0982af8, 0x409ca4b8},
+{0, 0xc17745d4, 0x41994966},
+{'q', 0xc12b3054, 0x41632204},
+{0, 0xc1840728, 0x41c45d17},
+{'q', 0xc0259830, 0xc09ee190},
+{0, 0xc111745e, 0xc160e525},
+{'q', 0xc0cddfc8, 0xc11292cb},
+{0, 0xc139bbf9, 0xc17cddfb},
+{'q', 0xc0a5982a, 0xc0d6d344},
+{0, 0xc131e6f0, 0xc15d89da},
+{'q', 0x4101ca4c, 0xc1194964},
+{0, 0x4189101c, 0xc1acddfc},
+{'q', 0x41117460, 0xc1419104},
+{0, 0x4168ba30, 0xc1afaa12},
+{'@', 0x0000fb01, 0x0000577b},/*        fi        x-advance: 87.480469 */
+{'M', 0x42044ec5, 0xc27982af},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b4, 0x00000000},
+{'l', 0x35800000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba2, 0xc173ea88},
+{'q', 0x40ae8ba4, 0xc09ee190},
+{0, 0x41849661, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'4', 0x00000077, 0x006a0000},
+{'6', 0x0000ff89, 0x01f300c4},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd360000},
+{'l', 0x00000000, 0xc1679bc0},
+{'l', 0x419d33ec, 0x00000000},
+{'l', 0x00000000, 0x41679bc0},
+{'l', 0xc19d33ec, 0x00000000},
+{'@', 0x0000fb02, 0x0000577b},/*        fl        x-advance: 87.480469 */
+{'M', 0x42044ec5, 0xc27982af},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b4, 0x00000000},
+{'l', 0x35800000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba2, 0xc173ea88},
+{'q', 0x40ae8ba4, 0xc09ee190},
+{0, 0x41849661, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'4', 0x00000077, 0x006a0000},
+{'6', 0x0000ff89, 0x01f300c5},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x419ca4b4, 0x00000000},
+{'l', 0x00000000, 0x42cf8d6d},
+{'l', 0xc19ca4b4, 0x00000000},
+{'@', 0x0000fb03, 0x00007df1},/*        ffi        x-advance: 125.941406 */
+{'M', 0x428f13b1, 0xc27982af},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b2, 0x00000000},
+{'l', 0x00000000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba0, 0xc173ea88},
+{'q', 0x40ae8ba0, 0xc09ee190},
+{0, 0x41849662, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'4', 0x00000077, 0x006a0000},
+{'6', 0x0000ff89, 0x01f300c4},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x0000009d, 0x025d0000},
+{'6', 0x0000ff63, 0xfd360000},
+{'l', 0x00000000, 0xc1679bc0},
+{'4', 0x0000009d, 0x00730000},
+{'6', 0x0000ff63, 0x00d7fe08},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b4, 0x00000000},
+{'l', 0x35800000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba2, 0xc173ea88},
+{'q', 0x40ae8ba4, 0xc09ee190},
+{0, 0x41849661, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'l', 0x416e5258, 0x00000000},
+{'l', 0x00000000, 0x41549664},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x0000fb04, 0x00007df1},/*        ffl        x-advance: 125.941406 */
+{'M', 0x428f13b1, 0xc27982af},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b2, 0x00000000},
+{'l', 0x00000000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba0, 0xc173ea88},
+{'q', 0x40ae8ba0, 0xc09ee190},
+{0, 0x41849662, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'4', 0x00000077, 0x006a0000},
+{'6', 0x0000ff89, 0x01f300c5},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'4', 0x0000009c, 0x033e0000},
+{'6', 0x0000ff64, 0xfe0dfe07},
+{'l', 0x00000000, 0x427982af},
+{'l', 0xc19ca4b4, 0x00000000},
+{'l', 0x35800000, 0xc27982af},
+{'0', 0x960000a8, 0xc1000058},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x40ae8ba2, 0xc173ea88},
+{'q', 0x40ae8ba4, 0xc09ee190},
+{0, 0x41849661, 0xc09ee190},
+{'9', 0x0000002c, 0x00080063},
+{'l', 0x00000000, 0x414a8478},
+{'8', 0xfbd3fbea, 0x10c700d8},
+{'9', 0x000ffff0, 0x0037fff0},
+{'l', 0x00000000, 0x40be35b0},
+{'l', 0x416e5258, 0x00000000},
+{'l', 0x00000000, 0x41549664},
+{'l', 0xc16e5258, 0x00000000},
+};
+#define ctx_font_Arimo_Bold_name "Arimo Bold"
+#endif
diff --git a/usermodule/uctx/fonts/Arimo-BoldItalic.h b/usermodule/uctx/fonts/Arimo-BoldItalic.h
new file mode 100644
index 0000000000000000000000000000000000000000..ec7810a2b309593ed4f59333b193677cf1bc9339
--- /dev/null
+++ b/usermodule/uctx/fonts/Arimo-BoldItalic.h
@@ -0,0 +1,5258 @@
+#ifndef CTX_FONT_Arimo_BoldItalic
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Arimo_BoldItalic[]={
+{15, 0x0000a008, 0x0000147f},/* length:5247 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x00000013, 0x00000003},/* Arimo Bold Italic*/
+{32, 0x6d697241, 0x6f42206f},
+{'l', 0x74492064, 0x63696c61},
+{0, 0x00000000, 0x00000000},
+{')', 0x00000013, 0x00000003},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x00000021, 0x00002fb1},/*        !        x-advance: 47.691406 */
+{'M', 0x41eca4b3, 0xc1ee5259},
+{'l', 0xc180abdc, 0x00000000},
+{'4', 0xfddb0059, 0x000000a4},
+{'6', 0x0225ff83, 0x00eeff40},
+{'l', 0x4068ba30, 0xc1970c88},
+{'l', 0x41a11e6f, 0x00000000},
+{'l', 0xc068ba30, 0x41970c88},
+{'l', 0xc1a11e6f, 0x00000000},
+{'@', 0x00000022, 0x000043e6},/*        "        x-advance: 67.898438 */
+{'M', 0x4271ada6, 0xc27b3056},
+{'l', 0xc17508f4, 0x00000000},
+{'4', 0xfee30028, 0x00000099},
+{'6', 0x011dffb9, 0x0000ff12},
+{'l', 0xc17508f3, 0x00000000},
+{'l', 0x40a11e6e, 0xc20eefe2},
+{'l', 0x4198ba2f, 0x00000000},
+{'l', 0xc10cfaa2, 0x420eefe2},
+{'@', 0x00000023, 0x00004fa6},/*        #        x-advance: 79.648438 */
+{'M', 0x42835424, 0xc2711e6f},
+{'l', 0xc09a67d8, 0x41b9bbfa},
+{'l', 0x41708f34, 0x00000000},
+{'l', 0x00000000, 0x4126b698},
+{'l', 0xc1899f52, 0x00000000},
+{'l', 0xc0b77f20, 0x41d52598},
+{'l', 0xc12e8ba0, 0x00000000},
+{'l', 0x40b30558, 0xc1d52598},
+{'l', 0xc1abbf8c, 0x00000000},
+{'l', 0xc0b30560, 0x41d52598},
+{'l', 0xc12b3056, 0x00000000},
+{'l', 0x40b0c880, 0xc1d52598},
+{'l', 0xc12d6d34, 0x00000000},
+{'l', 0x35000000, 0xc126b698},
+{'l', 0x41525984, 0x00000000},
+{'l', 0x409ca4b0, 0xc1b9bbfa},
+{'l', 0xc1679bbf, 0x00000000},
+{'l', 0x00000000, 0xc125982c},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x40bbf8d4, 0xc1d76274},
+{'l', 0x412b3056, 0x00000000},
+{'l', 0xc0b77f18, 0x41d76274},
+{'l', 0x41abbf8c, 0x00000000},
+{'l', 0x40bbf8d8, 0xc1d76274},
+{'l', 0x412e8ba4, 0x00000000},
+{'l', 0xc0bbf8d0, 0x41d76274},
+{'4', 0x0000005b, 0x00520000},
+{'6', 0x0000ff92, 0x0000feff},
+{'l', 0xc0a11e6c, 0x41b9bbfa},
+{'l', 0x41acddfd, 0x00000000},
+{'l', 0x409ca4b0, 0xc1b9bbfa},
+{'l', 0xc1abbf8e, 0x00000000},
+{'@', 0x00000024, 0x00004fa6},/*        $        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc2049661},
+{'q', 0x00000000, 0x416e525c},
+{0, 0xc11dc320, 0x41b77f1c},
+{'9', 0x003fffb2, 0x0045ff14},
+{'4', 0x0060ffee, 0x0000ffc2},
+{'l', 0x400f3780, 0xc143cde0},
+{'q', 0xc144ec4f, 0x34000000},
+{0, 0xc1a1ada6, 0xc0d01ca4},
+{'9', 0xffccffc1, 0xff75ffbb},
+{'l', 0x419292cc, 0xc03bf8d0},
+{'9', 0x00630007, 0x0063006c},
+{'l', 0x40a35b48, 0xc1d9101c},
+{'q', 0xc1496608, 0xc0496610},
+{0, 0xc19af70b, 0xc11ca4b4},
+{'q', 0xc0d9101e, 0xc0d49660},
+{0, 0xc0d9101e, 0xc1801ca6},
+{'q', 0x00000000, 0xc1099f50},
+{0, 0x408abdc2, 0xc16e5258},
+{'q', 0x408cfaa0, 0xc0cba2e0},
+{0, 0x41513b14, 0xc11ee190},
+{'9', 0xffe40045, 0xffe4009c},
+{'4', 0xffba000d, 0x0002003d},
+{'l', 0xbff1ada0, 0x41117460},
+{'q', 0x41354238, 0x00000000},
+{0, 0x41932204, 0x40b0c880},
+{'9', 0x002c0039, 0x00790040},
+{'l', 0xc1920394, 0x407f1ae0},
+{'8', 0xbfe2d5f9, 0xeac9eaea},
+{'l', 0xc095ee18, 0x41c57b86},
+{'q', 0x4169d8a0, 0x405fc6b0},
+{0, 0x41abbf8c, 0x411b8644},
+{'9', 0x00310037, 0x007d0037},
+{'m', 0xc1970c88, 0x408880e8},
+{'8', 0xbfe8d500, 0xddb3eae8},
+{'l', 0xc0a35b50, 0x41ca847a},
+{'8', 0xe5670040, 0xb627e527},
+{'m', 0xc1dea848, 0xc225dfc6},
+{'8', 0x2d111b00, 0x22441112},
+{'l', 0x4095ee20, 0xc1b92cc2},
+{'8', 0x1da700c9, 0x4bde1dde},
+{'@', 0x00000025, 0x00007f57},/*        %        x-advance: 127.339844 */
+{'M', 0x42cb7f1b, 0xc276b69a},
+{'q', 0x4127d508, 0x00000000},
+{0, 0x41801ca4, 0x40b30560},
+{'q', 0x40b30560, 0x40b0c880},
+{0, 0x40b30560, 0x417f1adc},
+{'q', 0x00000000, 0x40b77f18},
+{0, 0xbfe8ba40, 0x4147292c},
+{'q', 0xc001ca40, 0x41194966},
+{0, 0xc0c96610, 0x417dfc6a},
+{'8', 0x4caf32de, 0x1a981ad2},
+{'q', 0xc11ee190, 0xb4000000},
+{0, 0xc17508f0, 0xc0bbf8d7},
+{'q', 0xc0aa11f0, 0xc0bbf8d7},
+{0, 0xc0aa11f0, 0xc1825983},
+{'q', 0x00000000, 0xc0c7292c},
+{0, 0x3fd6d340, 0xc142af70},
+{'9', 0xff1d002e, 0xff1d00e5},
+{'m', 0xc27e4408, 0xc216c4ec},
+{'q', 0x4127d50c, 0x00000000},
+{0, 0x41801ca6, 0x40b30560},
+{'q', 0x40b30560, 0x40b0c880},
+{0, 0x40b30560, 0x417f1ad8},
+{'q', 0x00000000, 0x40b77f20},
+{0, 0xbfe8ba40, 0x41472930},
+{'q', 0xc001ca50, 0x41194964},
+{0, 0xc0c96608, 0x417dfc68},
+{'8', 0x4caf32de, 0x1a981ad2},
+{'q', 0xc11ee192, 0x00000000},
+{0, 0xc17508f3, 0xc0bbf8d8},
+{'q', 0xc0aa11e8, 0xc0bbf8d8},
+{0, 0xc0aa11e8, 0xc1825982},
+{'q', 0x00000000, 0xc0c72930},
+{0, 0x3fd6d340, 0xc142af70},
+{'9', 0xff1d002e, 0xff1d00e5},
+{'m', 0xc0864400, 0x42c6bdc3},
+{'l', 0xc15c6b6c, 0x00000000},
+{'4', 0xfcec025f, 0x0000006f},
+{'6', 0x0314fda0, 0xfe68021d},
+{'8', 0x21bc00d5, 0x67d921e7},
+{'8', 0x6ef245f2, 0x4f304f00},
+{'8', 0xdd47002c, 0x9329dc1b},
+{'8', 0x980fc40f, 0xb3cbb300},
+{'m', 0xc27e4407, 0xc216c4ec},
+{'8', 0x21bc00d5, 0x67d921e7},
+{'8', 0x6ef245f2, 0x4f304f00},
+{'8', 0xdd47002c, 0x9329dc1b},
+{'8', 0x980fc40f, 0xb3cbb300},
+{'@', 0x00000026, 0x0000676d},/*        &        x-advance: 103.425781 */
+{'M', 0x405b4cfa, 0xc1c60abe},
+{'q', 0x00000000, 0xc1acddfc},
+{0, 0x41ee5259, 0xc1ffaa12},
+{'8', 0xc2f3e6f8, 0xc0fbddfb},
+{'q', 0x00000000, 0xc1407298},
+{0, 0x40ff1ad8, 0xc19a67d8},
+{'q', 0x4100abdc, 0xc0e8ba20},
+{0, 0x41afaa12, 0xc0e8ba20},
+{'q', 0x4131e6f4, 0x00000000},
+{0, 0x418a2e8e, 0x40982af0},
+{'8', 0x69312531, 0x5ae73200},
+{'q', 0xc0496600, 0x409ca4b0},
+{0, 0xc11292c8, 0x411055ec},
+{'q', 0xc0be35c0, 0x4081ca48},
+{0, 0xc1a2cc16, 0x411ee190},
+{'8', 0x6a2d4218, 0x4f322715},
+{'9', 0xffb1004a, 0xff340082},
+{'l', 0x41513b18, 0x40b9bc00},
+{'q', 0xc0496620, 0x40e8ba28},
+{0, 0xc1064408, 0x4173ea84},
+{'8', 0x6ea83fd7, 0x23662329},
+{'9', 0x00000023, 0xfff8003e},
+{'l', 0xc02e8ba0, 0x41632203},
+{'q', 0xc093b130, 0x3fc4ec4f},
+{0, 0xc11b8640, 0x3fc4ec4f},
+{'q', 0xc142af70, 0x00000000},
+{0, 0xc1aaa11e, 0xc102e8ba},
+{'8', 0x2bbc1ed9, 0x13bd0ce3},
+{'q', 0xc09a67d8, 0x3f56d33e},
+{0, 0xc12d6d34, 0x3f56d33e},
+{'q', 0xc160e526, 0x00000000},
+{0, 0xc1ac4ec4, 0xc0d6d33f},
+{'9', 0xffcaffc5, 0xff65ffc5},
+{'m', 0x41f86441, 0x414ddfc7},
+{'8', 0xf4450023, 0xe13bf422},
+{'q', 0xc10abdc0, 0xc1377f1a},
+{0, 0xc15fc6b4, 0xc1d5b4cf},
+{'8', 0x44a01fbb, 0x53e624e6},
+{'8', 0x4d1d2f00, 0x1d4c1d1d},
+{'m', 0x4142af70, 0xc273a2e9},
+{'8', 0x510b2d00, 0xd16be24f},
+{'8', 0xd929ef1b, 0xce0eeb0e},
+{'8', 0xd5ede400, 0xf1cef1ee},
+{'8', 0x1eb400d1, 0x54e41ee4},
+{'@', 0x00000027, 0x0000220e},/*        '        x-advance: 34.054688 */
+{'M', 0x41e94966, 0xc27b3056},
+{'l', 0xc17508f4, 0x00000000},
+{'l', 0x40a35b4c, 0xc20eefe2},
+{'l', 0x41982af7, 0x00000000},
+{'l', 0xc10cfaa0, 0x420eefe2},
+{'@', 0x00000028, 0x00002fb1},/*        (        x-advance: 47.691406 */
+{'M', 0x427479bc, 0xc2cf8d6d},
+{'q', 0xc21292cc, 0x420bdc32},
+{0, 0xc21292cc, 0x42a86440},
+{'9', 0x00df0000, 0x018a0052},
+{'l', 0xc199d89e, 0x00000000},
+{'q', 0xc125982a, 0xc1b0c881},
+{0, 0xc125982a, 0xc249ada6},
+{'q', 0xb5000000, 0xc1cb13b2},
+{0, 0x4113b13a, 0xc23a4b31},
+{'q', 0x4113b13c, 0xc1a982b0},
+{0, 0x41d880e6, 0xc2120394},
+{'l', 0x419d33ea, 0x00000000},
+{'@', 0x00000029, 0x00002fb1},/*        )        x-advance: 47.691406 */
+{'M', 0xc149660b, 0x41edc322},
+{'q', 0x4212da68, 0xc20f7f1b},
+{0, 0x4212da68, 0xc2ac9660},
+{'q', 0x00000000, 0xc13e35bc},
+{0, 0xc0330560, 0xc1c45d1a},
+{'9', 0xff9bffea, 0xff4bffc4},
+{'l', 0x41944073, 0x00000000},
+{'q', 0x413423cc, 0x41b30560},
+{0, 0x413423cc, 0x42414966},
+{'q', 0x00000000, 0x41d1ca4b},
+{0, 0xc115ee18, 0x423fe35b},
+{'q', 0xc115ee18, 0x41adfc6b},
+{0, 0xc1d880e5, 0x4214cfaa},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000002a, 0x000037bb},/*        *        x-advance: 55.730469 */
+{'M', 0x42208f37, 0xc29ebdc3},
+{'l', 0x418377f2, 0xc0e8ba30},
+{'l', 0x40982af8, 0x415c6b68},
+{'l', 0xc18bdc32, 0x408880f0},
+{'l', 0x41501ca4, 0x416e5258},
+{'l', 0xc14ddfc4, 0x41076274},
+{'l', 0xc1235b50, 0xc18cfaa0},
+{'l', 0xc126b698, 0x418cfaa0},
+{'l', 0xc1501ca5, 0xc1099f54},
+{'l', 0x41549661, 0xc16c1578},
+{'l', 0xc18bdc32, 0xc08880f0},
+{'l', 0x40982af6, 0xc15c6b68},
+{'l', 0x4185b4d0, 0x40e8ba30},
+{'l', 0xbfa11e80, 0xc1994964},
+{'l', 0x41708f38, 0x00000000},
+{'l', 0xbfa11e80, 0x41994964},
+{'@', 0x0000002b, 0x000053a2},/*        +        x-advance: 83.632812 */
+{'M', 0x4251ca4b, 0xc21f292d},
+{'l', 0x00000000, 0x41e44073},
+{'l', 0xc17cddfc, 0x00000000},
+{'l', 0x00000000, 0xc1e44073},
+{'l', 0xc1df377f, 0x00000000},
+{'l', 0x00000000, 0xc17aa11c},
+{'l', 0x41df377f, 0x00000000},
+{'l', 0x00000000, 0xc1e44074},
+{'l', 0x417cddfc, 0x00000000},
+{'l', 0x00000000, 0x41e44074},
+{'l', 0x41e0e526, 0x00000000},
+{'l', 0x00000000, 0x417aa11c},
+{'l', 0xc1e0e526, 0x00000000},
+{'@', 0x0000002c, 0x000027ca},/*        ,        x-advance: 39.789062 */
+{'M', 0x41389d8a, 0x41b157b8},
+{'l', 0xc14efe36, 0x00000000},
+{'8', 0xa648d52b, 0xa924d21d},
+{'l', 0xc11055ee, 0x00000000},
+{'4', 0xff560021, 0x000000a1},
+{'l', 0xc0525980, 0x4185b4cf},
+{'q', 0xbfcddfc0, 0x41064408},
+{0, 0xc093b13c, 0x416d33eb},
+{'q', 0xc0407290, 0x40cba2ea},
+{0, 0xc101ca4a, 0x413f5423},
+{'@', 0x0000002d, 0x00002fb1},/*        -        x-advance: 47.691406 */
+{'M', 0x407aa11e, 0xc1e4cfaa},
+{'l', 0x40525982, 0xc18880e4},
+{'l', 0x4211745d, 0x00000000},
+{'l', 0xc0525980, 0x418880e4},
+{'l', 0xc211745d, 0x00000000},
+{'@', 0x0000002e, 0x000027ca},/*        .        x-advance: 39.789062 */
+{'M', 0x404ddfc7, 0x00000000},
+{'l', 0x40840728, 0xc1aaa11e},
+{'l', 0x41a1ada6, 0x00000000},
+{'l', 0xc0840728, 0x41aaa11e},
+{'l', 0xc1a1ada6, 0x00000000},
+{'@', 0x0000002f, 0x000027ca},/*        /        x-advance: 39.789062 */
+{'M', 0xc0aa11e7, 0x40377f1b},
+{'l', 0x42243220, 0xc2d54966},
+{'l', 0x41852598, 0x00000000},
+{'l', 0xc22313b1, 0x42d54966},
+{'l', 0xc1876276, 0xb5a00000},
+{'@', 0x00000030, 0x00004fa6},/*        0        x-advance: 79.648438 */
+{'M', 0x424a847a, 0xc2c80000},
+{'q', 0x41dcfaa0, 0x00000000},
+{0, 0x41dcfaa0, 0x42025982},
+{'q', 0x00000000, 0x4100abe0},
+{0, 0xc02a11e0, 0x41a745d4},
+{'q', 0xc1211e70, 0x423f9bbf},
+{0, 0xc228abdc, 0x423f9bbf},
+{'q', 0xc15fc6b8, 0xb4000000},
+{0, 0xc1a62763, 0xc102e8ba},
+{'q', 0xc0d6d33f, 0xc1040729},
+{0, 0xc0d6d33f, 0xc1c7b864},
+{'q', 0x00000000, 0xc11b8646},
+{0, 0x4044ec4e, 0xc1c07293},
+{'q', 0x4049660c, 0xc1655ee4},
+{0, 0x410abdc4, 0xc1c19102},
+{'q', 0x40b0c880, 0xc11dc320},
+{0, 0x415a2e8a, 0xc16e5258},
+{'9', 0xffd80040, 0xffd8009a},
+{'m', 0xc17dfc6c, 0x42abe35b},
+{'q', 0x4102e8b8, 0x36400000},
+{0, 0x41513b14, 0xc0ef70c4},
+{'q', 0x409ee190, 0xc0f1ada4},
+{0, 0x4101ca48, 0xc1c22039},
+{'q', 0x404ddfd0, 0xc185b4d0},
+{0, 0x404ddfd0, 0xc1b423ce},
+{'q', 0x00000000, 0xc1825984},
+{0, 0xc12a11e8, 0xc1825984},
+{'8', 0x1ab200d0, 0x55ce1ae3},
+{'q', 0xc0259828, 0x40e8ba38},
+{0, 0xc09ee190, 0x41acddfe},
+{'q', 0xc0182af0, 0x41644070},
+{0, 0xc0182af0, 0x41a08f37},
+{'q', 0x00000000, 0x416f70c9},
+{0, 0x411b8644, 0x416f70c9},
+{'@', 0x00000031, 0x00004fa6},/*        1        x-advance: 79.648438 */
+{'M', 0x4013b13b, 0x00000000},
+{'l', 0x40407293, 0xc1813b14},
+{'l', 0x41c33ea8, 0x00000000},
+{'l', 0x4148479c, 0xc280cfaa},
+{'l', 0xc1d52598, 0x416f70c8},
+{'l', 0x40525980, 0xc1876274},
+{'l', 0x41dd89d8, 0xc1801ca4},
+{'l', 0x41970c88, 0x00000000},
+{'l', 0xc180abdc, 0x42a4c157},
+{'l', 0x41b4b304, 0x00000000},
+{'l', 0xc044ec40, 0x41813b14},
+{'l', 0xc2852598, 0x00000000},
+{'@', 0x00000032, 0x00004fa6},/*        2        x-advance: 79.648438 */
+{'M', 0xc00f377f, 0x00000000},
+{'l', 0x4025982b, 0xc15a2e8b},
+{'8', 0xa93fd11b, 0xb54dd923},
+{'q', 0x40aa11e8, 0xc0917458},
+{0, 0x418fc6b6, 0xc155b4cc},
+{'q', 0x4125982c, 0xc0e8ba30},
+{0, 0x41620398, 0xc130c884},
+{'8', 0xc32ee21e, 0xbe10e110},
+{'8', 0xb0a6b000, 0x18b100cf},
+{'9', 0x0018ffe2, 0x004effd3},
+{'l', 0xc194cfaa, 0xc0840730},
+{'q', 0x406d33f0, 0xc1484798},
+{0, 0x414a847a, 0xc193b13c},
+{'q', 0x410f377e, 0xc0be35b0},
+{0, 0x41b77f1b, 0xc0be35b0},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b3055e, 0x40c4ec50},
+{'q', 0x40f86440, 0x40c2af70},
+{0, 0x40f86440, 0x4190e524},
+{'8', 0x66e93500, 0x5eb930e9},
+{'q', 0xc0bbf8d0, 0x40b54240},
+{0, 0xc198ba2c, 0x4168ba30},
+{'q', 0xc113b13c, 0x40c96608},
+{0, 0xc16c157c, 0x4130c880},
+{'9', 0x0026ffd5, 0x004affbc},
+{'l', 0x4236efe2, 0x00000000},
+{'l', 0xc044ec40, 0x41813b14},
+{'l', 0xc289c322, 0x00000000},
+{'@', 0x00000033, 0x00004fa6},/*        3        x-advance: 79.648438 */
+{'M', 0x4215a67d, 0xc267e35b},
+{'q', 0x4126b69c, 0x00000000},
+{0, 0x41786440, 0xc081ca50},
+{'8', 0xa529e029, 0xc1ebd800},
+{'q', 0xc02a11e0, 0xc03bf8e0},
+{0, 0xc1040728, 0xc03bf8e0},
+{'9', 0x0000ff98, 0x0066ff7c},
+{'l', 0xc1955ee2, 0xc068ba40},
+{'q', 0x40e44074, 0xc1c7292c},
+{0, 0x42100e52, 0xc1c7292c},
+{'q', 0x41632204, 0x00000000},
+{0, 0x41b157ba, 0x40cba2f0},
+{'q', 0x40ff1ad0, 0x40cba2e0},
+{0, 0x40ff1ad0, 0x418d89d8},
+{'q', 0x00000000, 0x412e8ba0},
+{0, 0xc0d91010, 0x418c6b68},
+{'9', 0x0035ffca, 0x003dff6d},
+{'l', 0xbd8f3800, 0x3e8f3780},
+{'q', 0x41170c88, 0x3fbbf8c0},
+{0, 0x41655ee0, 0x40dfc6b0},
+{'q', 0x409ee190, 0x40ae8ba8},
+{0, 0x409ee190, 0x41632206},
+{'q', 0x00000000, 0x410abdc2},
+{0, 0xc0917460, 0x417cddfc},
+{'q', 0xc0917458, 0x40e20393},
+{0, 0xc14cc154, 0x412faa11},
+{'q', 0xc1040728, 0x40762764},
+{0, 0xc1979bc0, 0x40762764},
+{'q', 0xc17cddfc, 0xb4000000},
+{0, 0xc1c57b86, 0xc0d01ca5},
+{'9', 0xffccffba, 0xff69ffb1},
+{'l', 0x419dc322, 0xc02a11e8},
+{'8', 0x4a233206, 0x175b171d},
+{'8', 0xe15a003a, 0xaa21e121},
+{'9', 0xff980000, 0xff98ff85},
+{'l', 0xc0ef70cc, 0x00000000},
+{'l', 0x4044ec58, 0xc17dfc6c},
+{'l', 0x40a35b48, 0x00000000},
+{'@', 0x00000034, 0x00004fa6},/*        4        x-advance: 79.648438 */
+{'M', 0x427479bc, 0xc1a00000},
+{'l', 0xc071adb0, 0x41a00000},
+{'l', 0xc195ee18, 0x00000000},
+{'l', 0x4071ada0, 0xc1a00000},
+{'l', 0xc233055e, 0x00000000},
+{'l', 0x40377f14, 0xc1679bc0},
+{'l', 0x42488f38, 0xc2801ca4},
+{'l', 0x41cefe34, 0x00000000},
+{'l', 0xc1472928, 0x427f6275},
+{'4', 0x00000069, 0x0075ffe9},
+{'6', 0x0000ff97, 0xfdfeffd7},
+{'9', 0x002bffe7, 0x005fffbf},
+{'4', 0x012eff13, 0x000000d9},
+{'l', 0x40e44070, 0xc21292cd},
+{'q', 0x3fa11e60, 0xc0c96600},
+{0, 0x405fc6b0, 0xc1501ca0},
+{'@', 0x00000035, 0x00004fa6},/*        5        x-advance: 79.648438 */
+{'M', 0x41b0c881, 0xc2c5101c},
+{'l', 0x426cec4e, 0x00000000},
+{'4', 0x0081ffe8, 0x0000feb4},
+{'l', 0xc0c2af6c, 0x41bada6a},
+{'8', 0xef17f80a, 0xf01ff80d},
+{'8', 0xf527f911, 0xfc30fc15},
+{'q', 0x413ada68, 0x00000000},
+{0, 0x4195ee1a, 0x40fcddf8},
+{'q', 0x40e44070, 0x40fcddf8},
+{0, 0x40e44070, 0x41a982b0},
+{'q', 0x00000000, 0x413423cc},
+{0, 0xc09ee190, 0x419ee190},
+{'q', 0xc09ca4b0, 0x410880e5},
+{0, 0xc1620394, 0x41525982},
+{'q', 0xc113b13c, 0x4093b13c},
+{0, 0xc1aaa11e, 0x4093b13c},
+{'q', 0xc15ea84a, 0xb4000000},
+{0, 0xc1b27628, 0xc0c4ec4f},
+{'9', 0xffcfffbe, 0xff6effae},
+{'l', 0x419e5259, 0xc0496610},
+{'8', 0x4924340a, 0x144f141a},
+{'q', 0x410bdc30, 0x00000000},
+{0, 0x415b4cf8, 0xc0aa11e8},
+{'q', 0x40a11e70, 0xc0ac4ec4},
+{0, 0x40a11e70, 0xc1644074},
+{'8', 0xa5e5c600, 0xe0b3e0e5},
+{'9', 0x0000ffbc, 0x0032ff8f},
+{'l', 0xc1994966, 0x00000000},
+{'l', 0x41632204, 0xc25dd173},
+{'@', 0x00000036, 0x00004fa6},/*        6        x-advance: 79.648438 */
+{'M', 0x42151746, 0x3fb3055f},
+{'q', 0xc16af70e, 0x00000000},
+{0, 0xc1b5423e, 0xc114cfaa},
+{'q', 0xc0ff1ad7, 0xc114cfaa},
+{0, 0xc0ff1ad7, 0xc1d13b13},
+{'q', 0x00000000, 0xc1967d52},
+{0, 0x40b9bbf9, 0xc207f1ad},
+{'q', 0x40bbf8d6, 0xc173ea88},
+{0, 0x41825982, 0xc1bc8810},
+{'q', 0x4127d50c, 0xc1064408},
+{0, 0x41bada68, 0xc1064408},
+{'q', 0x41496608, 0x00000000},
+{0, 0x419e5258, 0x40bbf8e0},
+{'9', 0x002e003a, 0x00860044},
+{'l', 0xc194cfaa, 0x40377f20},
+{'8', 0xc4e4d8f9, 0xedc7edec},
+{'q', 0xc100abdc, 0x00000000},
+{0, 0xc15fc6b8, 0x4100abe0},
+{'q', 0xc0be35b0, 0x4100abd8},
+{0, 0xc10abdc2, 0x41c22038},
+{'8', 0xc04ad81d, 0xe767e72d},
+{'q', 0x41377f1c, 0x00000000},
+{0, 0x419055ee, 0x40dfc6b0},
+{'q', 0x40d49660, 0x40dfc6b8},
+{0, 0x40d49660, 0x41994966},
+{'q', 0x00000000, 0x4128f378},
+{0, 0xc09ca4b0, 0x419c157c},
+{'q', 0xc09ca4b0, 0x410f377f},
+{0, 0xc15a2e8c, 0x4160e526},
+{'9', 0x0028ffbb, 0x0028ff64},
+{'m', 0xc1377f1c, 0xc1fb3056},
+{'8', 0x5d1b3a00, 0x224e221b},
+{'q', 0x40ef70c8, 0x00000000},
+{0, 0x413e35b8, 0xc0b5423c},
+{'q', 0x408f3778, 0xc0b77f1c},
+{0, 0x408f3778, 0xc173ea84},
+{'8', 0xade6ca00, 0xe3b8e3e6},
+{'8', 0x13bb00db, 0x35cf13e1},
+{'q', 0xc00f3780, 0x408abdc0},
+{0, 0xc00f3780, 0x411dc320},
+{'@', 0x00000037, 0x00004fa6},/*        7        x-advance: 79.648438 */
+{'M', 0x41525983, 0xc2c5101c},
+{'4', 0x00000240, 0x007cffe8},
+{'l', 0xc1354240, 0x41591020},
+{'q', 0xc190e524, 0x41ab3056},
+{0, 0xc1d13b12, 0x42124b30},
+{'9', 0x0079ffc0, 0x0106ffa3},
+{'l', 0xc1a6b69a, 0x00000000},
+{'q', 0x401ca4b4, 0xc14ba2e9},
+{0, 0x40e67d50, 0xc1bb699f},
+{'q', 0x409a67d8, 0xc12c4ec6},
+{0, 0x4135423e, 0xc1a479bd},
+{'q', 0x40d25984, 0xc11ca4b0},
+{0, 0x4169d89e, 0xc198ba2e},
+{'9', 0xffb60040, 0xff660089},
+{'l', 0xc251ca4b, 0x00000000},
+{'l', 0x4049660c, 0xc1813b10},
+{'@', 0x00000038, 0x00004fa6},/*        8        x-advance: 79.648438 */
+{'M', 0x4245c322, 0xc2c7dc32},
+{'q', 0x415ea848, 0x00000000},
+{0, 0x41afaa10, 0x40cddfc0},
+{'q', 0x4100abe0, 0x40cba2f0},
+{0, 0x4100abe0, 0x41899f54},
+{'q', 0x00000000, 0x411ca4b8},
+{0, 0xc0c07290, 0x4182e8bc},
+{'9', 0x0034ffd1, 0x003fff80},
+{'l', 0xbd8f3600, 0x3e8f3780},
+{'8', 0x3f5f123e, 0x6b212d21},
+{'q', 0x00000000, 0x4168ba2e},
+{0, 0xc126b69c, 0x41b89d8a},
+{'q', 0xc1259828, 0x410880e4},
+{0, 0xc1e3b13a, 0x410880e4},
+{'q', 0xc1786442, 0xb4000000},
+{0, 0xc1c07293, 0xc0dfc6b7},
+{'q', 0xc10880e5, 0xc0e20395},
+{0, 0xc10880e5, 0xc19ca4b3},
+{'q', 0xb4800000, 0xc12479ba},
+{0, 0x40d25982, 0xc189101d},
+{'9', 0xffca0035, 0xffb70094},
+{'l', 0x00000000, 0xbe8f3780},
+{'8', 0xbdb2eacd, 0x96e6d3e6},
+{'q', 0x00000000, 0xc1460ac0},
+{0, 0x41194967, 0xc19af710},
+{'9', 0xffc9004c, 0xffc900cf},
+{'m', 0xc1235b4c, 0x425cb305},
+{'8', 0x279c00c0, 0x6bdd27dd},
+{'8', 0x521d3500, 0x1d531d1e},
+{'8', 0xd861003c, 0x9424d824},
+{'8', 0xafe3cb00, 0xe4afe4e3},
+{'m', 0x40c2af70, 0xc15fc6b4},
+{'8', 0xdf520034, 0xa41edf1e},
+{'8', 0xa3a0a300, 0x1fad00cb},
+{'8', 0x57e21ee2, 0x4a193000},
+{'q', 0x40496600, 0x404ddfd0},
+{0, 0x410e1910, 0x404ddfd0},
+{'@', 0x00000039, 0x00004fa6},/*        9        x-advance: 79.648438 */
+{'M', 0x4264880e, 0xc236a847},
+{'8', 0x3fb32bdc, 0x149d14d7},
+{'q', 0xc13423ce, 0x00000000},
+{0, 0xc18fc6b6, 0xc0ef70c8},
+{'q', 0xc0d6d340, 0xc0ef70c8},
+{0, 0xc0d6d340, 0xc19e525a},
+{'q', 0x00000000, 0xc126b69c},
+{0, 0x409ee190, 0xc198ba2e},
+{'q', 0x409ee190, 0xc10bdc30},
+{0, 0x415b4cfa, 0xc1591020},
+{'q', 0x410cfaa2, 0xc09ca4b0},
+{0, 0x419b8645, 0xc09ca4b0},
+{'q', 0x415fc6b4, 0x00000000},
+{0, 0x41b27628, 0x411055f0},
+{'q', 0x41052598, 0x410f3780},
+{0, 0x41052598, 0x41c07294},
+{'q', 0x00000000, 0x41407290},
+{0, 0xc05b4d00, 0x41cc321e},
+{'q', 0xc056d340, 0x4156d340},
+{0, 0xc1170c88, 0x41b9bbf9},
+{'q', 0xc0c2af70, 0x411b8644},
+{0, 0xc1655ee4, 0x416af70c},
+{'q', 0xc1040728, 0x409ca4b4},
+{0, 0xc19292cc, 0x409ca4b4},
+{'q', 0xc14ba2e8, 0xb4000000},
+{0, 0xc1a3ea84, 0xc0c07293},
+{'9', 0xffd0ffc2, 0xff77ffb3},
+{'l', 0x41994966, 0xc056d340},
+{'q', 0x4001ca48, 0x412faa12},
+{0, 0x4144ec50, 0x412faa12},
+{'9', 0x00000082, 0xff0400b2},
+{'m', 0x402a11f0, 0xc1c7292e},
+{'8', 0xb0e5d000, 0xe1b9e1e5},
+{'q', 0xc0ff1ad8, 0x00000000},
+{0, 0xc1496608, 0x40bbf8e0},
+{'q', 0xc093b140, 0x40bbf8d0},
+{0, 0xc093b140, 0x417cddfc},
+{'8', 0x4d1a2f00, 0x1d491d1a},
+{'q', 0x40ff1ad8, 0x00000000},
+{0, 0x4148479c, 0xc0b30560},
+{'q', 0x40917460, 0xc0b30560},
+{0, 0x40917460, 0xc17508f4},
+{'@', 0x0000003a, 0x00002fb1},/*        :        x-advance: 47.691406 */
+{'M', 0x418377f2, 0xc2525983},
+{'l', 0x40762760, 0xc19dc322},
+{'4', 0x000000a1, 0x009dffe2},
+{'6', 0x0000ff5f, 0x01a4ffaf},
+{'l', 0x40762764, 0xc19d33ea},
+{'l', 0x41a11e6e, 0x00000000},
+{'l', 0xc0762760, 0x419d33ea},
+{'l', 0xc1a11e6f, 0x00000000},
+{'@', 0x0000003b, 0x00002fb1},/*        ;        x-advance: 47.691406 */
+{'M', 0x41679bbf, 0x41b157b8},
+{'l', 0xc14ddfc6, 0x00000000},
+{'8', 0xa648d52b, 0xa924d21d},
+{'l', 0xc11055ee, 0x00000000},
+{'4', 0xff63001e, 0x000000a1},
+{'l', 0xc03bf8d8, 0x41708f36},
+{'q', 0xbfcddfc0, 0x41064408},
+{0, 0xc093b138, 0x416c157c},
+{'9', 0x0032ffe9, 0x0060ffbf},
+{'m', 0x3ffaa128, 0xc29582b0},
+{'l', 0x40762760, 0xc19dc320},
+{'l', 0x41a11e6e, 0x00000000},
+{'l', 0xc0762760, 0x419dc322},
+{'l', 0xc1a11e6e, 0x00000000},
+{'@', 0x0000003c, 0x000053a2},/*        <        x-advance: 83.632812 */
+{'M', 0x410abdc3, 0xc21055ee},
+{'l', 0x00000000, 0xc1b423ce},
+{'l', 0x428fa2e9, 0xc1dabdc2},
+{'l', 0x00000000, 0x417f1ad8},
+{'l', 0xc26901ca, 0x41b5d174},
+{'l', 0x426901ca, 0x41b5423d},
+{'l', 0x00000000, 0x417dfc6c},
+{'l', 0xc28fa2e9, 0xc1dabdc3},
+{'@', 0x0000003d, 0x000053a2},/*        =        x-advance: 83.632812 */
+{'M', 0x41099f54, 0xc26b8644},
+{'l', 0x00000000, 0xc17982b0},
+{'4', 0x0000023e, 0x007c0000},
+{'6', 0x0000fdc2, 0x01340000},
+{'l', 0x00000000, 0xc17745d4},
+{'l', 0x428fa2e8, 0x00000000},
+{'l', 0x37000000, 0x417745d2},
+{'l', 0xc28fa2e8, 0x00000000},
+{'@', 0x0000003e, 0x000053a2},/*        >        x-advance: 83.632812 */
+{'M', 0x410abdc3, 0xc10bdc32},
+{'l', 0x00000000, 0xc17dfc6c},
+{'l', 0x4268ba2f, 0xc1b5423d},
+{'l', 0xc268ba2f, 0xc1b5d174},
+{'l', 0xb5800000, 0xc17f1ad8},
+{'l', 0x428fa2e9, 0x41dabdc2},
+{'l', 0x00000000, 0x41b423ce},
+{'l', 0xc28fa2e9, 0x41dabdc3},
+{'@', 0x0000003f, 0x0000577b},/*        ?        x-advance: 87.480469 */
+{'M', 0x42506440, 0xc2c80000},
+{'q', 0x416f70c8, 0x00000000},
+{0, 0x41bda67c, 0x40d25980},
+{'q', 0x410bdc38, 0x40d25980},
+{0, 0x410bdc38, 0x41920394},
+{'8', 0x5aeb3200, 0x49c627ec},
+{'q', 0xc0982b00, 0x40864408},
+{0, 0xc17bbf90, 0x412479bc},
+{'8', 0x2bc51cd5, 0x20e70ff1},
+{'9', 0x0011fff7, 0x0028fff4},
+{'l', 0xc1955ee1, 0x00000000},
+{'8', 0xb619d507, 0xc62ce011},
+{'8', 0xbd5de61b, 0xd63fe826},
+{'8', 0xdd28ee19, 0xde15ef0f},
+{'8', 0xd906ef06, 0xc6e6dd00},
+{'q', 0xc056d340, 0xc03bf8e0},
+{0, 0xc126b69c, 0xc03bf8e0},
+{'9', 0x0000ff82, 0x006bff64},
+{'l', 0xc194cfaa, 0xc0330560},
+{'9', 0xff2b0041, 0xff2b0139},
+{'m', 0xc1f3ea84, 0x42c80000},
+{'l', 0x4068ba30, 0xc1970c88},
+{'l', 0x41a1ada6, 0x00000000},
+{'l', 0xc068ba30, 0x41970c88},
+{'l', 0xc1a1ada6, 0x00000000},
+{'@', 0x00000040, 0x00008ba6},/*        @        x-advance: 139.648438 */
+{'M', 0x4305a2e9, 0xc2533056},
+{'q', 0x00000000, 0x414ba2e8},
+{0, 0xc08f3780, 0x41b9bbf9},
+{'q', 0xc08cfab0, 0x4127d50a},
+{0, 0xc143cde8, 0x418377f2},
+{'q', 0xc0faa120, 0x40bbf8d6},
+{0, 0xc1876274, 0x40bbf8d6},
+{'8', 0xe7b100cd, 0xb9e5e7e5},
+{'9', 0xffec0000, 0xffdb0003},
+{'l', 0xbed6d300, 0x00000000},
+{'q', 0xc05fc6c0, 0x40eaf70c},
+{0, 0xc126b698, 0x41407292},
+{'q', 0xc0db4d00, 0x4095ee1a},
+{0, 0xc160e528, 0x4095ee1a},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18880e6, 0xc0e20394},
+{'q', 0xc0c07290, 0xc0e44072},
+{0, 0xc0c07290, 0xc19ee192},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0x408f3780, 0xc1ab3056},
+{'q', 0x40917460, 0xc1200000},
+{0, 0x4148479c, 0xc17aa120},
+{'q', 0x4100abd8, 0xc0b77f10},
+{0, 0x418fc6b8, 0xc0b77f10},
+{'9', 0x0000006d, 0x00610093},
+{'l', 0x3ed6d400, 0x00000000},
+{'4', 0xffab0015, 0x00000057},
+{'l', 0xc102e8b8, 0x420d89d8},
+{'q', 0xc0259840, 0x41407294},
+{0, 0xc0259840, 0x41864408},
+{'8', 0x270c1b00, 0x0b1e0b0d},
+{'8', 0xda55002c, 0x9840d928},
+{'q', 0x40407280, 0xc102e8bc},
+{0, 0x40407280, 0xc18fc6b6},
+{'q', 0x00000000, 0xc143cde0},
+{0, 0xc0ac4ec0, 0xc1acddfc},
+{'q', 0xc0aa11e0, 0xc1170c88},
+{0, 0xc1762760, 0xc168ba30},
+{'q', 0xc1211e70, 0xc0a35b50},
+{0, 0xc1bb69a0, 0xc0a35b50},
+{'q', 0xc1864406, 0x00000000},
+{0, 0xc1eca4b2, 0x40eaf710},
+{'q', 0xc14cc158, 0x40eaf710},
+{0, 0xc1a11e70, 0x41a982b0},
+{'q', 0xc0e8ba2c, 0x415d89d8},
+{0, 0xc0e8ba2c, 0x41f86440},
+{'q', 0x00000000, 0x415a2e8a},
+{0, 0x40b0c880, 0x41bfe35a},
+{'q', 0x40b3055c, 0x412479bd},
+{0, 0x417aa11e, 0x417982b0},
+{'q', 0x41211e70, 0x40a7d50a},
+{0, 0x41bd1746, 0x40a7d50a},
+{'9', 0x000000a4, 0xffaa0149},
+{'l', 0x408abdc0, 0x410880e5},
+{'q', 0xc13bf8d8, 0x40d49660},
+{0, 0xc1b80e54, 0x41182af8},
+{'q', 0xc1330558, 0x40377f18},
+{0, 0xc1b80e50, 0x40377f18},
+{'q', 0xc184072a, 0x00000000},
+{0, 0xc1e8ba30, 0xc0d49662},
+{'q', 0xc148479a, 0xc0d6d33e},
+{0, 0xc19ca4b2, 0xc19a67d5},
+{'q', 0xc0dfc6b6, 0xc14a8479},
+{0, 0xc0dfc6b6, 0xc1e79bbe},
+{'q', 0x00000000, 0xc19e525a},
+{0, 0x410cfaa1, 0xc20f3780},
+{'q', 0x410e1910, 0xc1801ca4},
+{0, 0x41c3cddf, 0xc1c699f4},
+{'q', 0x417982b0, 0xc10cfaa0},
+{0, 0x420b9496, 0xc10cfaa0},
+{'q', 0x4187f1b0, 0x00000000},
+{0, 0x41eb8644, 0x40cba2e0},
+{'q', 0x41472930, 0x40c96610},
+{0, 0x41979bc0, 0x418ea848},
+{'9', 0x005c0034, 0x00d60034},
+{'m', 0xc234faa2, 0x3e8f3780},
+{'8', 0xaadfcb00, 0xdfabdfdf},
+{'8', 0x23a200cc, 0x63c022d7},
+{'q', 0xc0377f20, 0x40ff1ad8},
+{0, 0xc0377f20, 0x418377f2},
+{'8', 0x641a3f00, 0x2453241b},
+{'8', 0xe9470024, 0xbd3ee923},
+{'8', 0x9b29d41b, 0xa60fc70f},
+{'@', 0x00000041, 0x0000676d},/*        A        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'q', 0xbfa11e80, 0xc1170c88},
+{0, 0xbfa11e80, 0xc130c880},
+{'@', 0x00000042, 0x0000676d},/*        B        x-advance: 103.425781 */
+{'M', 0x41ad6d34, 0xc2c5101c},
+{'l', 0x42235b4d, 0x00000000},
+{'q', 0x418c6b6a, 0x00000000},
+{0, 0x41d49662, 0x40b9bbf0},
+{'q', 0x411055e8, 0x40b77f20},
+{0, 0x411055e8, 0x4187f1ac},
+{'q', 0x00000000, 0x41194968},
+{0, 0xc0b9bbf0, 0x417bbf90},
+{'q', 0xc0b77f20, 0x40c2af70},
+{0, 0xc186d340, 0x41064408},
+{'q', 0x41182af8, 0x3fcddfc0},
+{0, 0x416d33e8, 0x40ed33e8},
+{'q', 0x40ac4ed0, 0x40b77f20},
+{0, 0x40ac4ed0, 0x4160e526},
+{'q', 0x00000000, 0x416c157c},
+{0, 0xc12faa18, 0x41b39496},
+{'9', 0x003dffa9, 0x003dfefa},
+{'4', 0x0000fe76, 0xfcec0099},
+{'m', 0x408cfaa0, 0x42a66efe},
+{'l', 0x41b77f1a, 0xb6400000},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41a23cde, 0xc05fc6b4},
+{'8', 0xa32de42d, 0xb3dace00},
+{'9', 0xffe6ffda, 0xffe6ff84},
+{'4', 0x0000ff48, 0x00e2ffd4},
+{'m', 0x41076278, 0xc22dfc6b},
+{'l', 0x41a479ba, 0x00000000},
+{'q', 0x4143cde4, 0x00000000},
+{0, 0x418abdc2, 0xc04ddfd0},
+{'8', 0xac29e729, 0xc0e1d400},
+{'9', 0xffecffe1, 0xffecff96},
+{'l', 0xc1a86440, 0x00000000},
+{'l', 0xc095ee18, 0x41c33ea8},
+{'@', 0x00000043, 0x0000676d},/*        C        x-advance: 103.425781 */
+{'M', 0x41e055ee, 0xc220479c},
+{'q', 0x00000000, 0x41419104},
+{0, 0x40be35b8, 0x4195ee1a},
+{'q', 0x40c07290, 0x40d25982},
+{0, 0x4189101c, 0x40d25982},
+{'9', 0x00000094, 0xff7000e9},
+{'l', 0x417dfc70, 0x4102e8ba},
+{'q', 0xc16af710, 0x41d01ca5},
+{0, 0xc23a0395, 0x41d01ca5},
+{'q', 0xc155b4d0, 0xb4000000},
+{0, 0xc1b89d8a, 0xc0a11e6f},
+{'q', 0xc11a67d4, 0xc0a11e6f},
+{0, 0xc16af70c, 0xc1655ee0},
+{'q', 0xc09ee192, 0xc115ee1a},
+{0, 0xc09ee192, 0xc1ae8ba4},
+{'q', 0x00000000, 0xc18cfaa0},
+{0, 0x40eaf70c, 0xc1fbbf8e},
+{'q', 0x40eaf70e, 0xc15ea848},
+{0, 0x41a3ea86, 0xc1aaa11c},
+{'q', 0x415377f0, 0xc0ed33f0},
+{0, 0x41effffe, 0xc0ed33f0},
+{'q', 0x4180abdc, 0x00000000},
+{0, 0x41d2e8bc, 0x40dd89e0},
+{'9', 0x00360052, 0x00a3006f},
+{'l', 0xc1994968, 0x409ee190},
+{'8', 0xa2c2c5f0, 0xde91ded3},
+{'q', 0xc1876274, 0x00000000},
+{0, 0xc1d49660, 0x413bf8d8},
+{'q', 0xc1194964, 0x413bf8d4},
+{0, 0xc1194964, 0x41ffaa10},
+{'@', 0x00000044, 0x0000676d},/*        D        x-advance: 103.425781 */
+{'M', 0x424d508f, 0xc2c5101c},
+{'q', 0x41ba4b32, 0x00000000},
+{0, 0x420ea847, 0x412d6d30},
+{'q', 0x41460ac0, 0x412d6d30},
+{0, 0x41460ac0, 0x41fa11e6},
+{'q', 0x00000000, 0x4184072a},
+{0, 0xc0dd89e0, 0x41e94967},
+{'q', 0xc0dd89d0, 0x414a8479},
+{0, 0xc1a08f34, 0x41a00000},
+{'9', 0x003aff97, 0x003aff15},
+{'4', 0x0000febd, 0xfcec0099},
+{'6', 0x000000ed, 0x0294ff38},
+{'l', 0x4180abdd, 0xb6000000},
+{'q', 0x4133055c, 0x00000000},
+{0, 0x419e5258, 0xc0982af8},
+{'q', 0x410abdc8, 0xc09a67d4},
+{0, 0x41549660, 0xc15d89da},
+{'q', 0x4095ee20, 0xc11055ec},
+{0, 0x4095ee20, 0xc1a7d508},
+{'q', 0x00000000, 0xc15377f0},
+{0, 0xc0ed33f0, 0xc1a11e70},
+{'9', 0xffc9ffc6, 0xffc9ff57},
+{'l', 0xc144ec50, 0x00000000},
+{'l', 0xc14efe36, 0x42854966},
+{'@', 0x00000045, 0x00005f86},/*        E        x-advance: 95.523438 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0xc09a67d8, 0x41c60abc},
+{'l', 0x42525982, 0x00000000},
+{'l', 0xc044ec40, 0x417f1adc},
+{'l', 0xc2525982, 0x00000000},
+{'l', 0xc0a11e74, 0x41cf8d6d},
+{'l', 0x426ee190, 0x00000000},
+{'l', 0xc0496600, 0x417f1ada},
+{'l', 0xc2a08f38, 0x00000000},
+{'@', 0x00000046, 0x0000577b},/*        F        x-advance: 87.480469 */
+{'M', 0x421ca4b3, 0xc2a52cc1},
+{'l', 0xc0be35b8, 0x41f3ea84},
+{'l', 0x423ada68, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc23ada68, 0x00000000},
+{'l', 0xc0e20398, 0x42109d8a},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x4289e6f0, 0x00000000},
+{'l', 0xc044ec60, 0x417f1ad8},
+{'l', 0xc2414965, 0x00000000},
+{'@', 0x00000047, 0x00006f66},/*        G        x-advance: 111.398438 */
+{'M', 0x424efe36, 0x3faa11e7},
+{'q', 0xc1a7d50a, 0x00000000},
+{0, 0xc20377f2, 0xc130c881},
+{'q', 0xc13e35b5, 0xc131e6f0},
+{0, 0xc13e35b5, 0xc1f86440},
+{'q', 0x00000000, 0xc18bdc32},
+{0, 0x40e8ba2e, 0xc1f86442},
+{'q', 0x40eaf70c, 0xc1591018},
+{0, 0x41a5982b, 0xc1a6b698},
+{'q', 0x4156d340, 0xc0eaf710},
+{0, 0x41f745d0, 0xc0eaf710},
+{'q', 0x417f1ae0, 0x00000000},
+{0, 0x41d52598, 0x40e67d50},
+{'9', 0x00390056, 0x00a10073},
+{'l', 0xc19dc320, 0x40ae8ba0},
+{'q', 0xc001ca60, 0xc0fcde00},
+{0, 0xc0faa120, 0xc143cde0},
+{'q', 0xc0b9bc00, 0xc08abdc0},
+{0, 0xc16af710, 0xc08abdc0},
+{'q', 0xc131e6ec, 0x00000000},
+{0, 0xc19c157a, 0x40a7d500},
+{'q', 0xc1064408, 0x40a7d510},
+{0, 0xc14ddfc8, 0x416e525c},
+{'q', 0xc08f377c, 0x411a67d8},
+{0, 0xc08f377c, 0x41b1e6f0},
+{'q', 0x00000000, 0x4147292e},
+{0, 0x40d49664, 0x419ca4b3},
+{'q', 0x40d6d338, 0x40e20396},
+{0, 0x41970c88, 0x40e20396},
+{'q', 0x40f1ada0, 0x00000000},
+{0, 0x416af708, 0xbfe8ba38},
+{'9', 0xfff20039, 0xffd90061},
+{'l', 0x404ddfe0, 0xc17f1ada},
+{'l', 0xc1bf5426, 0x00000000},
+{'4', 0xff8c0015, 0x00000157},
+{'l', 0xc0eaf700, 0x421ee191},
+{'q', 0xc12e8ba8, 0x40ef70c9},
+{0, 0xc1ae8ba4, 0x4128f378},
+{'q', 0xc12e8ba0, 0x40407294},
+{0, 0xc1c2af70, 0x40407294},
+{'@', 0x00000048, 0x0000676d},/*        H        x-advance: 103.425781 */
+{'M', 0x4285b4d0, 0x00000000},
+{'l', 0x41040728, 0xc228f378},
+{'l', 0xc22f1adb, 0x00000000},
+{'l', 0xc1040728, 0x4228f378},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0xc0f3ea88, 0x421cec4e},
+{'l', 0x422f1adb, 0x00000000},
+{'l', 0x40f3ea80, 0xc21cec4e},
+{'l', 0x419ee190, 0x00000000},
+{'l', 0xc1994964, 0x42c5101c},
+{'l', 0xc19ee190, 0x00000000},
+{'@', 0x00000049, 0x000027ca},/*        I        x-advance: 39.789062 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0xc1994966, 0x42c5101c},
+{'l', 0xc1a479bc, 0x00000000},
+{'@', 0x0000004a, 0x00004fa6},/*        J        x-advance: 79.648438 */
+{'M', 0x42064407, 0x3fb3055f},
+{'q', 0xc1549660, 0x00000000},
+{0, 0xc1aa11e6, 0xc0d6d33f},
+{'9', 0xffcbffc1, 0xff57ffac},
+{'l', 0x41955ee2, 0xc081ca4c},
+{'q', 0x404ddfc0, 0x417cddfd},
+{0, 0x41679bbc, 0x417cddfd},
+{'8', 0xf332001e, 0xda22f314},
+{'9', 0xffe8000d, 0xffb40017},
+{'l', 0x41200000, 0xc24e6eff},
+{'l', 0xc19d33ea, 0x00000000},
+{'4', 0xff7f0018, 0x00000141},
+{'l', 0xc157f1b0, 0x4289e6ef},
+{'q', 0xc0496600, 0x41813b15},
+{0, 0xc1389d88, 0x41bc880f},
+{'q', 0xc1064404, 0x40ed33ec},
+{0, 0xc1bbf8d6, 0x40ed33ec},
+{'@', 0x0000004b, 0x0000676d},/*        K        x-advance: 103.425781 */
+{'M', 0x428b292d, 0x00000000},
+{'l', 0xc1c699f6, 0xc233055f},
+{'l', 0xc16c157c, 0x41099f54},
+{'l', 0xc0e20394, 0x42109d8a},
+{'l', 0xc1a35b4d, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0xc111745c, 0x4232bdc2},
+{'l', 0x42549661, 0xc232bdc2},
+{'l', 0x41ce6efc, 0x00000000},
+{'l', 0xc250f378, 0x422c4ec4},
+{'l', 0x420211e8, 0x425dd174},
+{'l', 0xc1b660ac, 0x00000000},
+{'@', 0x0000004c, 0x0000577b},/*        L        x-advance: 87.480469 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0xc1801ca5, 0x42a52cc1},
+{'l', 0x425377f2, 0xb6000000},
+{'l', 0xc0496620, 0x417f1ada},
+{'l', 0xc292da68, 0x00000000},
+{'@', 0x0000004d, 0x0000774c},/*        M        x-advance: 119.296875 */
+{'M', 0x42a8abdc, 0x00000000},
+{'l', 0x41407290, 0xc27745d1},
+{'9', 0xffb8000e, 0xff4c0029},
+{'l', 0xc09a67d0, 0x4128f378},
+{'9', 0x0061ffd4, 0x0085ffc1},
+{'4', 0x01c8ff1a, 0x0000ff8b},
+{'l', 0xc0d25980, 0xc2651746},
+{'q', 0xc00abdd0, 0xc1a2cc14},
+{0, 0xc0330560, 0xc1d880e4},
+{'9', 0x0088fff1, 0x00b2ffe8},
+{'l', 0xc1407294, 0x42781ca5},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x000000dc, 0x01b80031},
+{'l', 0x3fdfc6c0, 0x419a67d6},
+{'q', 0x40211e70, 0xc0b30560},
+{0, 0x4095ee18, 0xc1223ce0},
+{'9', 0xffdc0011, 0xfdfe0103},
+{'l', 0x41dbdc34, 0x00000000},
+{'l', 0xc1994968, 0x42c5101c},
+{'l', 0xc19292cc, 0x00000000},
+{'@', 0x0000004e, 0x0000676d},/*        N        x-advance: 103.425781 */
+{'M', 0x427745d1, 0x00000000},
+{'l', 0xc1d13b12, 0xc29e2e8c},
+{'9', 0x005afff4, 0x0085ffeb},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x000000c3, 0x027e00d2},
+{'l', 0x3f56d380, 0xc0b77f20},
+{'9', 0xffd20006, 0xff9f0010},
+{'l', 0x4142af70, 0xc2778d6c},
+{'l', 0x419292cc, 0x00000000},
+{'l', 0xc1994964, 0x42c5101c},
+{'l', 0xc1c7292e, 0x00000000},
+{'@', 0x0000004f, 0x00006f66},/*        O        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'q', 0xc0c2af70, 0xc0d91020},
+{0, 0xc18d89d8, 0xc0d91020},
+{'@', 0x00000050, 0x00005f86},/*        P        x-advance: 95.523438 */
+{'M', 0x426dc322, 0xc2c5101c},
+{'q', 0x41899f54, 0x00000000},
+{0, 0x41d5b4d0, 0x40faa110},
+{'q', 0x41194968, 0x40faa120},
+{0, 0x41194968, 0x41ad6d34},
+{'q', 0x00000000, 0x417bbf90},
+{0, 0xc12c4ec8, 0x41c8479c},
+{'9', 0x004affab, 0x004aff1b},
+{'l', 0xc1d2e8ba, 0x00000000},
+{'l', 0xc0db4cf8, 0x420abdc3},
+{'4', 0x0000ff5c, 0xfcec0098},
+{'6', 0x0000012e, 0x017fff2c},
+{'l', 0x41a1ada8, 0x00000000},
+{'q', 0x412d6d30, 0x00000000},
+{0, 0x4181ca4a, 0xc081ca48},
+{'8', 0x962be02b, 0xaaddc700},
+{'9', 0xffe2ffdd, 0xffe2ff9a},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0xc0c72930, 0x41ffaa10},
+{'@', 0x00000051, 0x00006f66},/*        Q        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x40ed33f0},
+{0, 0xbfb30580, 0x41620398},
+{'q', 0xbff1ad80, 0x41170c88},
+{0, 0xc0be35b0, 0x418a2e8b},
+{'8', 0x6db23ee1, 0x4d952ed2},
+{'q', 0xc0f1ada0, 0x4071ada4},
+{0, 0xc1852598, 0x40a7d508},
+{'8', 0x4f23360a, 0x184b1819},
+{'9', 0x0000002c, 0xfff90053},
+{'l', 0xc0496600, 0x415a2e8b},
+{'q', 0xc0a11e70, 0x3fdfc6b0},
+{0, 0xc13d1748, 0x3fdfc6b0},
+{'q', 0xc15c6b6c, 0x00000000},
+{0, 0xc1aa11e8, 0xc0d25980},
+{'q', 0xc0ed33e8, 0xc0d25984},
+{0, 0xc11055ec, 0xc1a62763},
+{'q', 0xc1040728, 0xbfaa11e0},
+{0, 0xc169d89e, 0xc09a67d3},
+{'8', 0xbaabe4ce, 0x9fcdd6de},
+{'q', 0xc00abdc4, 0xc0db4cfc},
+{0, 0xc00abdc4, 0xc16e525a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'q', 0xc0c2af70, 0xc0d91020},
+{0, 0xc18d89d8, 0xc0d91020},
+{'@', 0x00000052, 0x0000676d},/*        R        x-advance: 103.425781 */
+{'M', 0x428d423d, 0x00000000},
+{'l', 0xc180abde, 0xc2155ee1},
+{'l', 0xc1c19101, 0x00000000},
+{'l', 0xc0e67d50, 0x42155ee1},
+{'4', 0x0000ff5b, 0xfcec0099},
+{'l', 0x42361910, 0x00000000},
+{'q', 0x4131e6f0, 0x00000000},
+{0, 0x41982af8, 0x405b4ce0},
+{'q', 0x40ff1ad0, 0x405b4d00},
+{0, 0x41419100, 0x411ca4b8},
+{'q', 0x40840720, 0x40cba2e0},
+{0, 0x40840720, 0x416f70c8},
+{'q', 0x00000000, 0x41389d88},
+{0, 0xc0f3ea80, 0x419ca4b2},
+{'9', 0x0040ffc4, 0x0050ff5c},
+{'4', 0x01460099, 0x0000ff4a},
+{'m', 0xc11a67d8, 0xc255b4d0},
+{'q', 0x41223ce0, 0x00000000},
+{0, 0x417508f8, 0xc081ca48},
+{'8', 0xa329df29, 0xb1ddcc00},
+{'9', 0xffe5ffdd, 0xffe5ff9d},
+{'l', 0xc1cba2ea, 0x00000000},
+{'l', 0xc0b54240, 0x41e8ba2c},
+{'l', 0x41dbdc32, 0x00000000},
+{'@', 0x00000053, 0x00005f86},/*        S        x-advance: 95.523438 */
+{'M', 0x4227d509, 0x3fb3055f},
+{'q', 0xc1955ee2, 0x00000000},
+{0, 0xc1e3b13c, 0xc0d25983},
+{'9', 0xffcbffb2, 0xff5effa3},
+{'l', 0x41a1ada6, 0xc05b4cf8},
+{'q', 0x3fbbf8d0, 0x40f86440},
+{0, 0x40d01ca4, 0x4135423c},
+{'q', 0x40a35b4c, 0x40644074},
+{0, 0x416e525a, 0x40644074},
+{'q', 0x41c101c8, 0x00000000},
+{0, 0x41c101c8, 0xc15ea847},
+{'q', 0x00000000, 0xc0b30560},
+{0, 0xc0864400, 0xc10cfaa0},
+{'q', 0xc0864408, 0xc0525990},
+{0, 0xc1852598, 0xc0cddfc8},
+{'q', 0xc14ddfc8, 0xc05b4d00},
+{0, 0xc198ba2f, 0xc0e44078},
+{'8', 0xb8b5e3cf, 0x97e7d5e7},
+{'q', 0x00000000, 0xc1460ac0},
+{0, 0x412faa13, 0xc19f70c8},
+{'q', 0x412faa10, 0xc0f1adb0},
+{0, 0x41e8ba2e, 0xc0f1adb0},
+{'q', 0x41852598, 0x00000000},
+{0, 0x41d5b4d0, 0x40c2af70},
+{'9', 0x00300050, 0x008c0063},
+{'l', 0xc1a11e70, 0x4095ee20},
+{'8', 0xb0cbcef4, 0xe296e2d8},
+{'8', 0x1a9300bb, 0x47d919d9},
+{'8', 0x2c0e1a00, 0x202a120e},
+{'q', 0x405fc6c0, 0x3fd6d340},
+{0, 0x415d89d8, 0x408f3780},
+{'q', 0x4131e6f4, 0x4044ec50},
+{0, 0x418377f2, 0x40b9bbf8},
+{'8', 0x3043152a, 0x3d271a19},
+{'q', 0x3fd6d340, 0x408abdc0},
+{0, 0x3fd6d340, 0x411ffffe},
+{'q', 0x00000000, 0x4171ada7},
+{0, 0xc139bbf8, 0x41b89d8a},
+{'q', 0xc139bbf8, 0x40fcddfc},
+{0, 0xc20880e5, 0x40fcddfc},
+{'@', 0x00000054, 0x0000577b},/*        T        x-advance: 87.480469 */
+{'M', 0x427a5983, 0xc2a52cc1},
+{'l', 0xc180abde, 0x42a52cc1},
+{'l', 0xc1a508f2, 0x00000000},
+{'l', 0x4180abdc, 0xc2a52cc1},
+{'l', 0xc1fe8ba3, 0x00000000},
+{'l', 0x4044ec50, 0xc17f1ad8},
+{'l', 0x42a8abdc, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc1ff1ada, 0x00000000},
+{'@', 0x00000055, 0x0000676d},/*        U        x-advance: 103.425781 */
+{'M', 0x42407293, 0xc16c157b},
+{'q', 0x41389d88, 0x00000000},
+{0, 0x418bdc32, 0xc0aa11e6},
+{'9', 0xffd60030, 0xff720043},
+{'4', 0xfe1b005d, 0x000000a5},
+{'l', 0xc13f5420, 0x4275dfc6},
+{'q', 0xc0762760, 0x419d33e9},
+{0, 0xc1762760, 0x41e8ba2e},
+{'q', 0xc1389d90, 0x4115ee18},
+{0, 0xc2001ca5, 0x4115ee18},
+{'q', 0xc193b13c, 0xb4000000},
+{0, 0xc1e4cfab, 0xc102e8ba},
+{'q', 0xc1211e6e, 0xc1040729},
+{0, 0xc1211e6e, 0xc1bada68},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0052, 0x000000a5},
+{'l', 0xc12b3058, 0x426292cb},
+{'8', 0x60f630f6, 0x59283900},
+{'q', 0x40a35b50, 0x407aa11c},
+{0, 0x4160e528, 0x407aa11c},
+{'@', 0x00000056, 0x00005f86},/*        V        x-advance: 95.523438 */
+{'M', 0x424e2762, 0x00000000},
+{'l', 0xc1bda67d, 0x00000000},
+{'4', 0xfcecff82, 0x000000aa},
+{'l', 0x40ff1ad8, 0x427d2597},
+{'q', 0x3f8f3780, 0x412479bc},
+{0, 0x3fc4ec60, 0x4194cfaa},
+{'q', 0x40525980, 0xc0ed33ec},
+{0, 0x40a7d508, 0xc13ada68},
+{'9', 0xffde0010, 0xfdcf011f},
+{'l', 0x41ac4ec4, 0x00000000},
+{'l', 0xc257f1ae, 0x42c5101c},
+{'@', 0x00000057, 0x0000872c},/*        W        x-advance: 135.171875 */
+{'M', 0x42c989d8, 0x00000000},
+{'l', 0xc1c3cddc, 0x00000000},
+{'4', 0xfe3afff1, 0xff85fffe},
+{'l', 0xbd8f3400, 0xc0bbf8d0},
+{'q', 0xc0864410, 0x41330558},
+{0, 0xc0cddfd0, 0x4185b4ce},
+{'9', 0x002cffef, 0x01eaff30},
+{'l', 0xc1c699f4, 0x00000000},
+{'4', 0xfcecffcf, 0x0000009c},
+{'l', 0x40211e80, 0x4263f8d6},
+{'9', 0x005d0003, 0x00c10003},
+{'l', 0x407f1ad0, 0xc1211e6e},
+{'l', 0x40aa11e8, 0xc14efe38},
+{'4', 0xfe2f00c6, 0x000000b0},
+{'l', 0x403bf8e0, 0x42a260ab},
+{'q', 0x3ff1ad80, 0xc0a35b48},
+{0, 0x40ae8ba0, 0xc1644070},
+{'9', 0xffb7001d, 0xfde900da},
+{'l', 0x41a2cc14, 0x00000000},
+{'l', 0xc2327628, 0x42c5101c},
+{'@', 0x00000058, 0x00005f86},/*        X        x-advance: 95.523438 */
+{'M', 0x41762762, 0xc2c5101c},
+{'l', 0x41acddfd, 0x00000000},
+{'l', 0x417aa11c, 0x4203bf8c},
+{'l', 0x41e0e524, 0xc203bf8c},
+{'l', 0x41af1adc, 0x00000000},
+{'l', 0xc227d509, 0x423d5ee0},
+{'l', 0x41cd508e, 0x424cc158},
+{'l', 0xc1abbf8c, 0x00000000},
+{'l', 0xc18d89d8, 0xc214cfaa},
+{'l', 0xc1fe8ba3, 0x4214cfaa},
+{'l', 0xc1afaa12, 0x00000000},
+{'l', 0x423660ac, 0xc24ddfc7},
+{'l', 0xc1bd1747, 0xc23c4071},
+{'@', 0x00000059, 0x00005f86},/*        Y        x-advance: 95.523438 */
+{'M', 0x424a847a, 0x00000000},
+{'l', 0xc1a479bd, 0x00000000},
+{'l', 0x40faa11c, 0xc221ada6},
+{'l', 0xc1cefe34, 0xc2687292},
+{'l', 0x41a35b4c, 0x00000000},
+{'l', 0x4190e526, 0x42293b13},
+{'l', 0x42049660, 0xc2293b13},
+{'l', 0x41b4b308, 0x00000000},
+{'l', 0xc23f5425, 0x42687292},
+{'l', 0xc0faa118, 0x4221ada6},
+{'@', 0x0000005a, 0x0000577b},/*        Z        x-advance: 87.480469 */
+{'M', 0x42975424, 0x00000000},
+{'l', 0xc29e0abe, 0x00000000},
+{'l', 0x40330560, 0xc169d89d},
+{'l', 0x4281a67d, 0xc2878644},
+{'l', 0xc239745c, 0x00000000},
+{'l', 0x40496600, 0xc1813b10},
+{'l', 0x428dd174, 0x00000000},
+{'l', 0xc0330560, 0x41655ee0},
+{'l', 0xc28211e6, 0x4288157b},
+{'l', 0x425abdc2, 0x00000000},
+{'l', 0xc0496600, 0x41813b14},
+{'@', 0x0000005b, 0x00002fb1},/*        [        x-advance: 47.691406 */
+{'M', 0xc071ada6, 0x41edc322},
+{'l', 0x41cefe36, 0xc3057f1b},
+{'l', 0x42179bc0, 0x37000000},
+{'l', 0xc0259830, 0x41549660},
+{'l', 0xc19a67d4, 0x00000000},
+{'l', 0xc1a62763, 0x42d5b4d0},
+{'l', 0x419a67d5, 0xb6800000},
+{'l', 0xc0259830, 0x4155b4d0},
+{'l', 0xc2175423, 0x00000000},
+{'@', 0x0000005c, 0x000027ca},/*       \         x-advance: 39.789062 */
+{'M', 0x41a1ada6, 0x40377f1b},
+{'l', 0xc147292c, 0xc2d56d34},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x414cc158, 0x42d56d34},
+{'l', 0xc187f1ae, 0xb5a00000},
+{'@', 0x0000005d, 0x00002fb1},/*        ]        x-advance: 47.691406 */
+{'M', 0xc142af71, 0x41edc322},
+{'l', 0x4025982c, 0xc155b4d0},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0x41a62763, 0xc2d5b4d0},
+{'l', 0xc19b8644, 0x37000000},
+{'l', 0x40259828, 0xc1549660},
+{'l', 0x42179bc0, 0x00000000},
+{'l', 0xc1cf8d6d, 0x43057f1b},
+{'l', 0xc2175424, 0xb6800000},
+{'@', 0x0000005e, 0x000053a2},/*        ^        x-advance: 83.632812 */
+{'M', 0x42868ba3, 0xc20fc6b6},
+{'l', 0xc1b660ac, 0xc2525984},
+{'l', 0xc1b5423d, 0x42525984},
+{'l', 0xc17dfc6c, 0x00000000},
+{'l', 0x41dabdc3, 0xc27a5982},
+{'l', 0x41b423ce, 0x00000000},
+{'l', 0x41dbdc32, 0x427a5982},
+{'l', 0xc1801ca4, 0x00000000},
+{'@', 0x0000005f, 0x00004fa6},/*        _        x-advance: 79.648438 */
+{'M', 0xc1064407, 0x418bdc32},
+{'l', 0x00000000, 0xc0ae8ba2},
+{'l', 0x42a49d8a, 0x00000000},
+{'l', 0x00000000, 0x40ae8ba2},
+{'l', 0xc2a49d8a, 0x00000000},
+{'@', 0x00000060, 0x00002fb1},/*        `        x-advance: 47.691406 */
+{'M', 0x4226b69a, 0xc2a5745d},
+{'l', 0xc1abbf8e, 0xc19a67d4},
+{'l', 0x3f0f3780, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d300, 0x400abdc0},
+{'l', 0xc125982c, 0x00000000},
+{'@', 0x00000061, 0x00004fa6},/*        a        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'l', 0x3fc4ec60, 0xc0cddfc4},
+{'@', 0x00000062, 0x0000577b},/*        b        x-advance: 87.480469 */
+{'M', 0x426f292d, 0xc29a2039},
+{'q', 0x4131e6ec, 0x00000000},
+{0, 0x418abdc2, 0x40d49660},
+{'9', 0x00340031, 0x00900031},
+{'l', 0x00000000, 0x3f7aa140},
+{'q', 0x00000000, 0x41525984},
+{0, 0xc08abdc0, 0x41d49660},
+{'q', 0xc08abdd0, 0x4155b4d0},
+{0, 0xc143cde0, 0x419e525a},
+{'q', 0xc0faa120, 0x40cba2e8},
+{0, 0xc1a00002, 0x40cba2e8},
+{'q', 0xc10bdc30, 0xb4000000},
+{0, 0xc1632200, 0xc068ba2f},
+{'9', 0xffe3ffd5, 0xffafffc4},
+{'l', 0xbe56d300, 0x00000000},
+{'9', 0x0029fff8, 0x003efff1},
+{'4', 0x0025fff5, 0x0000ff69},
+{'8', 0xd30bf802, 0xb210db08},
+{'4', 0xfd3f0089, 0x0000009d},
+{'l', 0xc0bbf8d8, 0x41eee190},
+{'9', 0x0024fff9, 0x0050ffef},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x407aa120, 0xc0bbf8d0},
+{0, 0x41223ce0, 0xc1182af8},
+{'9', 0xffe30032, 0xffe30076},
+{'m', 0xc1064408, 0x415a2e8c},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1620394, 0x40c4ec48},
+{'q', 0xc0a7d508, 0x40c4ec50},
+{0, 0xc0f3ea88, 0x41944074},
+{'8', 0x55f734f7, 0x5d1d3b00},
+{'8', 0x2152211d, 0xde580038},
+{'q', 0x407f1ae0, 0xc08cfaa0},
+{0, 0x40d49660, 0xc16d33ea},
+{'q', 0x402a11e0, 0xc127d50a},
+{0, 0x402a11e0, 0xc18a2e8b},
+{'8', 0xa8ecc600, 0xe2b9e2ed},
+{'@', 0x00000063, 0x00004fa6},/*        c        x-advance: 79.648438 */
+{'M', 0x4215ee19, 0xc1419102},
+{'8', 0xe34c002e, 0xa930e31e},
+{'l', 0x41979bbe, 0x405fc6b8},
+{'q', 0xc0ef70c0, 0x41c45d17},
+{0, 0xc20ea847, 0x41c45d17},
+{'q', 0xc1762762, 0xb4000000},
+{0, 0xc1bda67d, 0xc0faa11f},
+{'q', 0xc104072a, 0xc0fcddfb},
+{0, 0xc104072a, 0xc1af1ada},
+{'q', 0x35000000, 0xc15a2e8c},
+{0, 0x40b0c882, 0xc1ccc158},
+{'q', 0x40b0c880, 0xc13f5420},
+{0, 0x416af70d, 0xc18c6b68},
+{'q', 0x4113b13a, 0xc0b30560},
+{0, 0x41b77f1b, 0xc0b30560},
+{'q', 0x415377f0, 0x00000000},
+{0, 0x41a8f376, 0x40d6d340},
+{'9', 0x0035003f, 0x00940047},
+{'l', 0xc19ee190, 0x3fcddfc0},
+{'8', 0x96a396fa, 0x29a300c5},
+{'q', 0xc086440c, 0x40a35b50},
+{0, 0xc0f3ea88, 0x4191745e},
+{'q', 0xbfcddfc0, 0x4100abdc},
+{0, 0xbfcddfc0, 0x413bf8d6},
+{'q', 0x00000000, 0x4182e8ba},
+{0, 0x4147292c, 0x4182e8ba},
+{'@', 0x00000064, 0x0000577b},/*        d        x-advance: 87.480469 */
+{'M', 0x425182af, 0xc133055f},
+{'q', 0xc09ee190, 0x40d01ca5},
+{0, 0xc12c4ec4, 0x41194966},
+{'q', 0xc0b77f18, 0x4044ec50},
+{0, 0xc1632204, 0x4044ec50},
+{'q', 0xc12c4ec4, 0xb4000000},
+{0, 0xc18880e4, 0xc0e44073},
+{'q', 0xc0c9660d, 0xc0e44073},
+{0, 0xc0c9660d, 0xc198ba2f},
+{'q', 0x00000000, 0xc155b4d0},
+{0, 0x408f377f, 0xc1d13b14},
+{'q', 0x408f3780, 0xc14cc154},
+{0, 0x4148479b, 0xc19b8642},
+{'q', 0x4101ca4c, 0xc0d6d340},
+{0, 0x419c157c, 0xc0d6d340},
+{'9', 0x0000008f, 0x006e00af},
+{'l', 0x3eb30500, 0x00000000},
+{'8', 0xdf04f501, 0xc70aea03},
+{'4', 0xff17002e, 0x0000009a},
+{'l', 0xc1852598, 0x42af3ea8},
+{'9', 0x003efff5, 0x0081fff0},
+{'l', 0xc19d33ec, 0x00000000},
+{'9', 0xffdd0000, 0xffa70008},
+{'6', 0x0000fffe, 0xfffaff7e},
+{'8', 0xed4d002d, 0xc537ed20},
+{'8', 0x9c24d816, 0x970dc40d},
+{'8', 0x9fe6bd00, 0xe2b2e2e6},
+{'q', 0xc0e44070, 0x00000000},
+{0, 0xc13ada68, 0x409a67d8},
+{'q', 0xc08f377c, 0x409a67d8},
+{0, 0xc0db4cf8, 0x41620394},
+{'q', 0xc0182af8, 0x4114cfa8},
+{0, 0xc0182af8, 0x41899f54},
+{'q', 0x00000000, 0x417745d1},
+{0, 0x4133055e, 0x417745d1},
+{'@', 0x00000065, 0x00004fa6},/*        e        x-advance: 79.648438 */
+{'M', 0x41c8479c, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d4, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x4189101c, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca4, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc16, 0x408abdc4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1ba4b30, 0xc100abdc},
+{'q', 0xc1064408, 0xc101ca4b},
+{0, 0xc1064408, 0xc1b4b305},
+{'q', 0x35000000, 0xc1679bc2},
+{0, 0x40a11e70, 0xc1ca8479},
+{'q', 0x40a11e6e, 0xc12e8ba4},
+{0, 0x41644072, 0xc185b4d2},
+{'q', 0x4114cfaa, 0xc0b9bbf0},
+{0, 0x41abbf8d, 0xc0b9bbf0},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423ce, 0x40f1ada0},
+{'q', 0x40ff1ae0, 0x40ef70c8},
+{0, 0x40ff1ae0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xff980103},
+{'l', 0x3e56d300, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'l', 0x41f11e6f, 0x00000000},
+{'@', 0x00000066, 0x00002fb1},/*        f        x-advance: 47.691406 */
+{'M', 0x4213b13b, 0xc27982af},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064408, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d4965c, 0xc095ee20},
+{0, 0x41955ee1, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e70, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'l', 0x416e5258, 0x00000000},
+{'l', 0xc0259830, 0x41549664},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x00000067, 0x0000577b},/*        g        x-advance: 87.480469 */
+{'M', 0x41f11e6f, 0x41edc322},
+{'q', 0xc15ea848, 0x00000000},
+{0, 0xc1ab3056, 0xc09a67d4},
+{'9', 0xffdaffc5, 0xff89ffb7},
+{'l', 0x419e525a, 0xc0064408},
+{'8', 0x4769470f, 0xdf5f003d},
+{'q', 0x408880e8, 0xc084072a},
+{0, 0x40d49660, 0xc1679bc0},
+{'9', 0xffcb000b, 0xff9f0011},
+{'l', 0xbe0f3700, 0x00000000},
+{'8', 0x47c231dd, 0x21c515e6},
+{'q', 0xc0840728, 0x3fbbf8d8},
+{0, 0xc1182af8, 0x3fbbf8d8},
+{'q', 0xc12d6d34, 0xb3800000},
+{0, 0xc18abdc3, 0xc0dfc6b7},
+{'q', 0xc0cddfc7, 0xc0dfc6b5},
+{0, 0xc0cddfc7, 0xc193b13b},
+{'q', 0x00000000, 0xc160e526},
+{0, 0x408cfaa1, 0xc1d76275},
+{'q', 0x408f377e, 0xc14efe34},
+{0, 0x4143cddf, 0xc1982af6},
+{'q', 0x40faa120, 0xc0c4ec50},
+{0, 0x419e5259, 0xc0c4ec50},
+{'q', 0x4104072c, 0x00000000},
+{0, 0x41632204, 0x407aa120},
+{'9', 0x001f002f, 0x0055003e},
+{'l', 0x3e0f3700, 0x00000000},
+{'8', 0xc60df003, 0xd20dd60a},
+{'l', 0x41944074, 0x00000000},
+{'4', 0x002efff6, 0x0051fff0},
+{'l', 0xc1389d88, 0x426bcde0},
+{'q', 0xc0525980, 0x41825982},
+{0, 0xc14ba2ec, 0x41bada67},
+{'9', 0x0038ffb5, 0x0038ff27},
+{'m', 0x41e82af7, 0xc29b6276},
+{'8', 0xa5e3c600, 0xdfafdfe3},
+{'8', 0x11ba00d6, 0x3ad211e5},
+{'8', 0x69e127ed, 0x69f440f4},
+{'8', 0x6f606f00, 0xdb5a0031},
+{'q', 0x40a35b50, 0xc095ee18},
+{0, 0x40faa120, 0xc14ba2e8},
+{'q', 0x40330560, 0xc101ca4a},
+{0, 0x40330560, 0xc1864407},
+{'@', 0x00000068, 0x0000577b},/*        h        x-advance: 87.480469 */
+{'M', 0x42281ca5, 0xc2cf8d6d},
+{'4', 0x00e2ffd4, 0x0065ffeb},
+{'l', 0x3e56d400, 0x00000000},
+{'q', 0x40a7d508, 0xc0e8ba30},
+{0, 0x41389d88, 0xc12c4ec8},
+{'q', 0x40cba2e8, 0xc05fc6a0},
+{0, 0x4168ba30, 0xc05fc6a0},
+{'q', 0x412a11e8, 0x00000000},
+{0, 0x41801ca4, 0x40a35b50},
+{'q', 0x40ac4ec0, 0x40a35b40},
+{0, 0x40ac4ec0, 0x416c1578},
+{'8', 0x2cfd0d00, 0x2ef91efd},
+{'4', 0x016dffb9, 0x0000ff64},
+{'l', 0x41040728, 0xc2266efe},
+{'8', 0xa40ebb0e, 0xb8abb800},
+{'q', 0xc0e20390, 0x00000000},
+{0, 0xc1513b14, 0x40b77f18},
+{'9', 0x002dffd0, 0x0070ffc4},
+{'l', 0xc104072a, 0x422982af},
+{'l', 0xc19dc322, 0x00000000},
+{'l', 0x41a00000, 0xc2cf8d6d},
+{'l', 0x419ca4b4, 0x00000000},
+{'@', 0x00000069, 0x000027ca},/*        i        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd36008a},
+{'l', 0x40377f18, 0xc1679bc0},
+{'l', 0x419d33eb, 0x00000000},
+{'l', 0xc0377f20, 0x41679bc0},
+{'l', 0xc19d33ea, 0x00000000},
+{'@', 0x0000006a, 0x000027ca},/*        j        x-advance: 39.789062 */
+{'M', 0xc071ada6, 0x41edc322},
+{'9', 0x0000ffcb, 0xfff6ffa4},
+{'4', 0xff970014, 0x00020020},
+{'8', 0xed360025, 0xb91bed11},
+{'4', 0xfd82007c, 0x0000009d},
+{'l', 0xc1840728, 0x42a93b14},
+{'q', 0xc001ca50, 0x41211e6e},
+{0, 0xc102e8ba, 0x417745d0},
+{'9', 0x002affd0, 0x002aff82},
+{'m', 0x41bc880e, 0xc2ee0abe},
+{'l', 0x40330560, 0xc1679bb8},
+{'l', 0x419d33eb, 0x00000000},
+{'l', 0xc0330560, 0x41679bc0},
+{'l', 0xc19d33eb, 0x00000000},
+{'@', 0x0000006b, 0x00004fa6},/*        k        x-advance: 79.648438 */
+{'M', 0x424ba2e9, 0x00000000},
+{'l', 0xc1525984, 0xc20b055f},
+{'l', 0xc11ca4b4, 0x40a7d50c},
+{'l', 0xc0be35b4, 0x41ec157b},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x41a11e6f, 0xc2cf8d6d},
+{'l', 0x419d33eb, 0x00000000},
+{'l', 0xc13ada68, 0x426dc322},
+{'l', 0x420211e7, 0xc1faa120},
+{'l', 0x41b423ce, 0x00000000},
+{'l', 0xc2044ec5, 0x41ec157c},
+{'l', 0x4199d89e, 0x42389d8a},
+{'l', 0xc1a6b69a, 0x00000000},
+{'@', 0x0000006c, 0x000027ca},/*        l        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x41a11e6f, 0xc2cf8d6d},
+{'l', 0x419d33eb, 0x00000000},
+{'l', 0xc1a1ada7, 0x42cf8d6d},
+{'l', 0xc19ca4b3, 0x00000000},
+{'@', 0x0000006d, 0x00007f57},/*        m        x-advance: 127.339844 */
+{'M', 0x42b8e525, 0xc27982af},
+{'q', 0xc0cba2e0, 0x00000000},
+{0, 0xc130c880, 0x40ac4ec0},
+{'9', 0x002bffdb, 0x0074ffcc},
+{'4', 0x0153ffbe, 0x0000ff64},
+{'l', 0x41099f54, 0xc2319f54},
+{'8', 0xb409ce09, 0xbdbabd00},
+{'q', 0xc0c4ec50, 0x00000000},
+{0, 0xc12faa14, 0x40aa11e8},
+{'9', 0x0029ffda, 0x0076ffcb},
+{'4', 0x0151ffbe, 0x0000ff63},
+{'l', 0x4139bbf9, 0xc26e0abe},
+{'9', 0xffcb000b, 0xff7f0015},
+{'l', 0x41982af7, 0x00000000},
+{'8', 0x2bfa0600, 0x3bf724fb},
+{'l', 0x3e56d300, 0x00000000},
+{'8', 0xa754c02b, 0xe863e829},
+{'8', 0x216d0045, 0x60302128},
+{'8', 0x9d5abb2c, 0xe26be22e},
+{'q', 0x411a67d8, 0x00000000},
+{0, 0x416c1580, 0x40a35b50},
+{'q', 0x40a59820, 0x40a35b40},
+{0, 0x40a59820, 0x416c1578},
+{'9', 0x00230000, 0x005bfff5},
+{'4', 0x016dffb9, 0x0000ff64},
+{'l', 0x410880e8, 0xc22f6276},
+{'9', 0xffce000a, 0xffb3000a},
+{'l', 0x00000000, 0xbeb30580},
+{'q', 0xbe56d400, 0xc1076274},
+{0, 0xc10cfaa8, 0xc1076274},
+{'@', 0x0000006e, 0x0000577b},/*        n        x-advance: 87.480469 */
+{'M', 0x424e6efe, 0x00000000},
+{'l', 0x41040728, 0xc2266efe},
+{'8', 0xa40ebb0e, 0xb8abb800},
+{'q', 0xc0e20390, 0x00000000},
+{0, 0xc1513b14, 0x40b77f18},
+{'9', 0x002dffd0, 0x0070ffc4},
+{'4', 0x0153ffbe, 0x0000ff63},
+{'l', 0x4139bbf9, 0xc26e0abe},
+{'9', 0xffd40008, 0xff7f0015},
+{'l', 0x4195ee18, 0x00000000},
+{'8', 0x2efb0500, 0x38f929fb},
+{'l', 0x3e56d400, 0x00000000},
+{'q', 0x40a7d508, 0xc0e8ba30},
+{0, 0x41389d88, 0xc12c4ec8},
+{'q', 0x40cba2e8, 0xc05fc6a0},
+{0, 0x4168ba30, 0xc05fc6a0},
+{'q', 0x412a11e8, 0x00000000},
+{0, 0x41801ca4, 0x40a35b50},
+{'q', 0x40ac4ec0, 0x40a35b40},
+{0, 0x40ac4ec0, 0x416c1578},
+{'8', 0x2cfd0d00, 0x2ef91efd},
+{'l', 0xc10e1910, 0x4236a847},
+{'l', 0xc19c157c, 0x00000000},
+{'@', 0x0000006f, 0x0000577b},/*        o        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'q', 0x402a11e0, 0xc100abdc},
+{0, 0x40496610, 0xc19292cc},
+{'@', 0x00000070, 0x0000577b},/*        p        x-advance: 87.480469 */
+{'M', 0x4209e6f0, 0xc27f6276},
+{'q', 0x40a11e70, 0xc0dfc6b0},
+{0, 0x412c4ec4, 0xc1211e70},
+{'q', 0x40b9bbf8, 0xc0496600},
+{0, 0x4160e524, 0xc0496600},
+{'q', 0x4131e6f0, 0x00000000},
+{0, 0x418abdc4, 0x40d49660},
+{'q', 0x40c72930, 0x40d25980},
+{0, 0x40c72930, 0x4190e524},
+{'q', 0x00000000, 0x41620398},
+{0, 0xc08abdc0, 0x41dc6b6a},
+{'q', 0xc08abdd0, 0x4155b4d0},
+{0, 0xc143cde0, 0x419e525a},
+{'q', 0xc0faa128, 0x40cba2e8},
+{0, 0xc1a00002, 0x40cba2e8},
+{'q', 0xc10bdc30, 0xb4000000},
+{0, 0xc1632204, 0xc068ba2f},
+{'9', 0xffe3ffd5, 0xffafffc3},
+{'l', 0xbe0f3780, 0x00000000},
+{'9', 0x0022fffd, 0x0069ffef},
+{'l', 0xc0b3055c, 0x41e82af7},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4187f1ad, 0xc2aff1ae},
+{'4', 0xffc3000b, 0xffb3000a},
+{'l', 0x4199d89d, 0x00000000},
+{'8', 0x2bfc0700, 0x32f823fd},
+{'6', 0x00000002, 0x00030083},
+{'q', 0xc10cfaa4, 0x00000000},
+{0, 0xc1620398, 0x40c4ec48},
+{'q', 0xc0a7d504, 0x40c4ec50},
+{0, 0xc0f3ea80, 0x41944074},
+{'8', 0x55f734f7, 0x5d1d3b00},
+{'8', 0x2152211d, 0xdd5a0039},
+{'q', 0x40840728, 0xc08f377c},
+{0, 0x40d01ca8, 0xc1667d50},
+{'q', 0x40182af0, 0xc11ee192},
+{0, 0x40182af0, 0xc18c6b69},
+{'8', 0xa8ebc500, 0xe2bce2eb},
+{'@', 0x00000071, 0x0000577b},/*        q        x-advance: 87.480469 */
+{'M', 0x427b3056, 0xc27c9660},
+{'9', 0xffbc000d, 0xff9c001a},
+{'l', 0x41970c88, 0x00000000},
+{'q', 0xbf0f3780, 0x3ff1adc0},
+{0, 0xc0064400, 0x4114cfb0},
+{'9', 0x003bfff4, 0x0300ff6b},
+{'l', 0xc19d33e8, 0x36800000},
+{'4', 0xff0f002f, 0xffa90014},
+{'l', 0xbe8f3780, 0x00000000},
+{'8', 0x4ea736d7, 0x189118d2},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc18880e4, 0xc0db4cfb},
+{'q', 0xc0cba2eb, 0xc0db4cfb},
+{0, 0xc0cba2eb, 0xc1979bc0},
+{'q', 0x00000000, 0xc15b4cfa},
+{0, 0x408f377f, 0xc1d40729},
+{'q', 0x408f3780, 0xc14cc158},
+{0, 0x4149660a, 0xc19c157a},
+{'q', 0x4101ca4c, 0xc0d6d340},
+{0, 0x419af70d, 0xc0d6d340},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x4160e524, 0x404ddfc0},
+{'9', 0x00190027, 0x0055003e},
+{'6', 0x00000002, 0x0198ff2c},
+{'q', 0x410e1910, 0x35800000},
+{0, 0x41620398, 0xc0c4ec4c},
+{'q', 0x40a7d508, 0xc0c7292c},
+{0, 0x40ef70c8, 0xc1955ee1},
+{'q', 0x3f8f3780, 0xc0c4ec50},
+{0, 0x3f8f3780, 0xc12b3058},
+{'q', 0x00000000, 0xc180abdc},
+{0, 0xc142af74, 0xc180abdc},
+{'8', 0x249e00c3, 0x6fc723dc},
+{'q', 0xc01ca4b0, 0x41182af4},
+{0, 0xc01ca4b0, 0x4190e525},
+{'8', 0x58163a00, 0x1e441e16},
+{'@', 0x00000072, 0x000037bb},/*        r        x-advance: 55.730469 */
+{'M', 0x426c157b, 0xc26e99f5},
+{'q', 0xc09a67d0, 0xbf864400},
+{0, 0xc0ff1ad8, 0xbf864400},
+{'q', 0xc1099f54, 0x00000000},
+{0, 0xc160e524, 0x40c2af70},
+{'9', 0x0030ffd5, 0x0095ffc2},
+{'4', 0x011fffc8, 0x0000ff63},
+{'l', 0x413423ce, 0xc2682af7},
+{'9', 0xffbd000d, 0xff740017},
+{'l', 0x4195ee1a, 0x00000000},
+{'4', 0x0060fff4, 0x001bfffc},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0x9850b628, 0xe25be227},
+{'q', 0x40525980, 0x00000000},
+{0, 0x40e67d50, 0x3f7aa100},
+{'l', 0xc04ddfd0, 0x418377f2},
+{'@', 0x00000073, 0x00004fa6},/*        s        x-advance: 79.648438 */
+{'M', 0x428bdc32, 0xc1bada68},
+{'q', 0x00000000, 0x4142af71},
+{0, 0xc11055ec, 0x4193b13b},
+{'q', 0xc10f3780, 0x40c9660c},
+{0, 0xc1d13b14, 0x40c9660c},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1b157b8, 0xc09ee191},
+{'9', 0xffd9ffc0, 0xff85ffa9},
+{'l', 0x418c6b6a, 0xc0211e70},
+{'8', 0x3c2b290b, 0x125c121f},
+{'8', 0xed5c003c, 0xc81fed1f},
+{'8', 0xd4e9e300, 0xe09bf1ea},
+{'q', 0xc15ea846, 0xc0496608},
+{0, 0xc19d33ea, 0xc10abdc2},
+{'q', 0xc0b5423c, 0xc0b30560},
+{0, 0xc0b5423c, 0xc1667d50},
+{'q', 0x00000000, 0xc1330560},
+{0, 0x410bdc32, 0xc189101c},
+{'q', 0x410cfaa0, 0xc0be35c0},
+{0, 0x41c8d6d4, 0xc0be35c0},
+{'q', 0x41667d50, 0x00000000},
+{0, 0x41abbf8c, 0x409ee1a0},
+{'9', 0x00270038, 0x00790045},
+{'l', 0xc18c6b68, 0x4001ca50},
+{'8', 0xc9dcdaf7, 0xefb6efe5},
+{'q', 0xc1655ee0, 0x00000000},
+{0, 0xc1655ee0, 0x41064408},
+{'8', 0x1e0b1200, 0x151f0c0b},
+{'q', 0x40259820, 0x3f8f3780},
+{0, 0x4147292c, 0x405b4d00},
+{'q', 0x414ba2e8, 0x40377f20},
+{0, 0x418fc6b4, 0x4102e8bc},
+{'q', 0x40a7d510, 0x40aa11e0},
+{0, 0x40a7d510, 0x415fc6b4},
+{'@', 0x00000074, 0x00002fb1},/*        t        x-advance: 47.691406 */
+{'M', 0x41d25983, 0x3f8f377f},
+{'8', 0xe09500bb, 0xa3dadfda},
+{'9', 0xffd90000, 0xffa90008},
+{'l', 0x40e44072, 0xc2132203},
+{'l', 0xc125982a, 0x00000000},
+{'l', 0x40259828, 0xc1549664},
+{'l', 0x4135423c, 0x00000000},
+{'l', 0x41194966, 0xc18e1910},
+{'l', 0x4144ec4e, 0x00000000},
+{'l', 0xc056d340, 0x418e1910},
+{'l', 0x41620398, 0x00000000},
+{'4', 0x006affed, 0x0000ff8e},
+{'l', 0xc0e8ba30, 0x4215a67d},
+{'8', 0x31fa1ffa, 0x260c1900},
+{'8', 0x0c230c0d, 0xf93c0011},
+{'l', 0xc00f3780, 0x414ba2e9},
+{'q', 0xc0b54240, 0x3fd6d33f},
+{0, 0xc14ddfc6, 0x3fd6d33f},
+{'@', 0x00000075, 0x0000577b},/*        u        x-advance: 87.480469 */
+{'M', 0x420f377f, 0xc2975424},
+{'l', 0xc104072a, 0x42266eff},
+{'8', 0x5cf244f2, 0x48554800},
+{'q', 0x40e20398, 0x00000000},
+{0, 0x41501ca4, 0xc0b5423e},
+{'9', 0xffd30030, 0xff8f003c},
+{'4', 0xfead0042, 0x0000009d},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x002cfff8, 0x0081ffeb},
+{'l', 0xc195ee1a, 0x00000000},
+{'8', 0xd205fb00, 0xc808d705},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0aa11e8, 0x40ef70c9},
+{0, 0xc13ada68, 0x412e8ba3},
+{'q', 0xc0c96610, 0x4056d340},
+{0, 0xc1667d52, 0x4056d340},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc1801ca4, 0xc0a35b4d},
+{'q', 0xc0ac4ec7, 0xc0a35b4d},
+{0, 0xc0ac4ec7, 0xc16c157a},
+{'8', 0xd403f300, 0xd207e103},
+{'l', 0x410e1911, 0xc236a848},
+{'l', 0x419c157b, 0x00000000},
+{'@', 0x00000076, 0x00004fa6},/*        v        x-advance: 79.648438 */
+{'M', 0x422dfc6b, 0x00000000},
+{'l', 0xc1bbf8d6, 0x00000000},
+{'4', 0xfda3ff9e, 0x000000a1},
+{'l', 0x409ee198, 0x42293b14},
+{'8', 0x4d071002, 0x49053c05},
+{'9', 0xffb00022, 0xff6c0044},
+{'l', 0x41b0c882, 0xc22a11e7},
+{'l', 0x41a8f378, 0x00000000},
+{'l', 0xc22aa11f, 0x42975424},
+{'@', 0x00000077, 0x00006f66},/*        w        x-advance: 111.398438 */
+{'M', 0x42a8cfaa, 0x00000000},
+{'4', 0x0000ff5a, 0xfe8fffe8},
+{'l', 0xbeb30580, 0xc180abdc},
+{'9', 0x004fffe3, 0x0081ffcb},
+{'l', 0xc1a8f378, 0x42380e52},
+{'l', 0xc1a62762, 0x00000000},
+{'l', 0xc09a67d8, 0xc2975424},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x3f7aa120, 0x4242af72},
+{'l', 0x00000000, 0x411292c8},
+{'l', 0x3ff1ada0, 0xc0982af4},
+{'l', 0x4068ba30, 0xc1099f54},
+{'l', 0x41a479bd, 0xc231e6f0},
+{'l', 0x41a8643e, 0x00000000},
+{'l', 0x403bf8e0, 0x4231e6f0},
+{'l', 0x3eb30500, 0x4155b4d0},
+{'l', 0x406d3400, 0xc113b13a},
+{'l', 0x41a2cc14, 0xc24267d6},
+{'l', 0x4194cfac, 0x00000000},
+{'l', 0xc20a7628, 0x42975424},
+{'@', 0x00000078, 0x00004fa6},/*        x        x-advance: 79.648438 */
+{'M', 0x424a847a, 0x00000000},
+{'l', 0xc1501ca8, 0xc1d64407},
+{'l', 0xc1b6efe2, 0x41d64407},
+{'l', 0xc1a86441, 0x00000000},
+{'l', 0x420e1910, 0xc21d33ea},
+{'l', 0xc19c157b, 0xc211745e},
+{'l', 0x41a35b4d, 0x00000000},
+{'l', 0x41419102, 0x41c2203a},
+{'l', 0x41a5982a, 0xc1c2203a},
+{'l', 0x41ac4ec6, 0x00000000},
+{'l', 0xc2071adb, 0x4212da68},
+{'l', 0x41a479be, 0x421bcde0},
+{'l', 0xc1a508f4, 0x00000000},
+{'@', 0x00000079, 0x00004fa6},/*        y        x-advance: 79.648438 */
+{'M', 0x40c4ec4f, 0x41edc322},
+{'9', 0x0000ffca, 0xfff6ffa0},
+{'l', 0x402a11e7, 0xc15b4cfb},
+{'8', 0x05300516, 0xe74c002b},
+{'9', 0xffe70021, 0xffad0042},
+{'l', 0x3ffaa120, 0xc056d33f},
+{'4', 0xfdb1ff8a, 0x000000a2},
+{'l', 0x409ee190, 0x420b055f},
+{'8', 0x630b1103, 0x57075208},
+{'l', 0x3f982ae0, 0xc0259828},
+{'l', 0x411b8644, 0xc1a3ea85},
+{'4', 0xfee80090, 0x000000a7},
+{'l', 0xc236efe4, 0x429f4cfb},
+{'q', 0xc0ef70c8, 0x413ada66},
+{0, 0xc143cdde, 0x418377f1},
+{'8', 0x38b226db, 0x11a411d8},
+{'@', 0x0000007a, 0x0000479b},/*        z        x-advance: 71.605469 */
+{'M', 0xbf33055f, 0x00000000},
+{'l', 0x402a11e7, 0xc15ea847},
+{'l', 0x422b77f1, 0xc23e35b5},
+{'l', 0xc1f62762, 0x00000000},
+{'l', 0x40330568, 0xc1632204},
+{'l', 0x42571ada, 0x00000000},
+{'l', 0xc02e8ba0, 0x4160e528},
+{'l', 0xc22aa11f, 0x423d1746},
+{'l', 0x4213699f, 0xb5800000},
+{'l', 0xc0330560, 0x41655ee1},
+{'l', 0xc26fffff, 0x00000000},
+{'@', 0x0000007b, 0x000037bb},/*        {        x-advance: 55.730469 */
+{'M', 0x41d9101c, 0x41edc322},
+{'8', 0xdf9700be, 0xa5dadeda},
+{'9', 0xffe80000, 0xffc80006},
+{'l', 0x408880e4, 0xc1ac4ec4},
+{'8', 0xda03ed03, 0xa895aa00},
+{'l', 0x402a11e6, 0xc156d340},
+{'9', 0xfffe0081, 0xff820099},
+{'l', 0x4095ee18, 0xc1bd1746},
+{'q', 0x4001ca50, 0xc1235b50},
+{0, 0x40faa124, 0xc1762760},
+{'9', 0xffd7002e, 0xffd70085},
+{'4', 0x0000006c, 0x006affec},
+{'l', 0xc0aa11e8, 0x00000000},
+{'8', 0x1abb00d3, 0x58dc19e8},
+{'l', 0xc0864408, 0x41ad6d34},
+{'8', 0x5acf34f6, 0x30a324d9},
+{'l', 0xbd8f3700, 0x3e8f3780},
+{'8', 0x27420a29, 0x45191b19},
+{'9', 0x00100000, 0x001dfffe},
+{'l', 0xc091745c, 0x41bada67},
+{'8', 0x2afb17fb, 0x2c121d00},
+{'9', 0x000e0012, 0x000e0031},
+{'l', 0x40b30560, 0x00000000},
+{'l', 0xc0259830, 0x4155b4d0},
+{'l', 0xc14cc158, 0x00000000},
+{'@', 0x0000007c, 0x00002811},/*        |        x-advance: 40.066406 */
+{'M', 0x4155b4d0, 0x41edc322},
+{'l', 0x00000000, 0xc3057f1b},
+{'l', 0x419292cc, 0x37000000},
+{'l', 0x00000000, 0x43057f1b},
+{'l', 0xc19292cc, 0xb6800000},
+{'@', 0x0000007d, 0x000037bb},/*        }        x-advance: 55.730469 */
+{'M', 0x41df377f, 0xc2cfb13b},
+{'8', 0x22680042, 0x5a262126},
+{'9', 0x00190000, 0x0038fffa},
+{'l', 0xc08880e8, 0x41ac4ec6},
+{'8', 0x26fd12fd, 0x41192b00},
+{'9', 0x0015001a, 0x00160051},
+{'l', 0xc02a11e0, 0x4156d33e},
+{'8', 0x219901be, 0x5ecf1fdb},
+{'l', 0xc095ee18, 0x41bc880e},
+{'q', 0xc00abdc0, 0x412a11e7},
+{0, 0xc101ca4c, 0x417aa11f},
+{'9', 0x0027ffd2, 0x0027ff7e},
+{'4', 0x0000ff94, 0xff960014},
+{'l', 0x40aa11e6, 0x00000000},
+{'8', 0xe745002d, 0xa824e618},
+{'l', 0x40864406, 0xc1ad6d34},
+{'8', 0xa631cb0a, 0xd05ddb27},
+{'l', 0x3d8f3800, 0xbe56d300},
+{'8', 0xd9bef6d7, 0xbae8e3e8},
+{'9', 0xfff00000, 0xffe30002},
+{'l', 0x40917460, 0xc1ba4b30},
+{'8', 0xd505e705, 0xd4eee300},
+{'9', 0xfff2ffee, 0xfff2ffcf},
+{'l', 0xc0b3055c, 0x00000000},
+{'l', 0x40259828, 0xc155b4d0},
+{'l', 0x414cc158, 0x00000000},
+{'@', 0x0000007e, 0x000053a2},/*        ~        x-advance: 83.632812 */
+{'M', 0x4278abdc, 0xc21055ee},
+{'8', 0xf5ae00d7, 0xe6aef5d8},
+{'q', 0xc1170c88, 0xc0525980},
+{0, 0xc17745d0, 0xc0525980},
+{'8', 0x0cb700d9, 0x24bb0bdf},
+{'l', 0x00000000, 0xc16e525c},
+{'q', 0x40fcddfe, 0xc0bbf8d0},
+{0, 0x41979bc0, 0xc0bbf8d0},
+{'8', 0x0c57002c, 0x1a540c2b},
+{'q', 0x4115ee18, 0x40525980},
+{0, 0x416d33e8, 0x40525980},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x22bc18dd, 0x0ab00ae0},
+{'@', 0x000000a0, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x000000a1, 0x00002fb1},/*        ¡        x-advance: 47.691406 */
+{'M', 0x3fb3055f, 0x41b6efe3},
+{'l', 0x41786440, 0xc28933ea},
+{'4', 0x00000080, 0x0224ffa8},
+{'6', 0x0000ff5c, 0xfd83007e},
+{'l', 0x406d33e8, 0xc1970c8c},
+{'l', 0x41a11e6f, 0x00000000},
+{'l', 0xc06d33f0, 0x41970c8a},
+{'l', 0xc1a11e6e, 0x00000000},
+{'@', 0x000000a2, 0x00004fa6},/*        ¢        x-advance: 79.648438 */
+{'M', 0x42199102, 0xc1b77f1b},
+{'8', 0xe34c002e, 0xa930e31e},
+{'l', 0x41979bc2, 0x405fc6b0},
+{'q', 0xc068ba40, 0x413d1748},
+{0, 0xc13bf8d8, 0x418e1911},
+{'9', 0x002fffc0, 0x0035ff5e},
+{'4', 0x005dffef, 0x0000ffa6},
+{'l', 0x400f3780, 0xc142af71},
+{'q', 0xc1389d8a, 0xbfe8ba30},
+{0, 0xc18f377e, 0xc115ee18},
+{'q', 0xc0c9660d, 0xc0f1ada8},
+{0, 0xc0c9660d, 0xc19e525a},
+{'q', 0x00000000, 0xc0eaf708},
+{0, 0x3fa11e70, 0xc148479c},
+{'q', 0x407aa11e, 0xc18880e4},
+{0, 0x41549660, 0xc1d13b14},
+{'9', 0xffb7004a, 0xffb100c6},
+{'4', 0xffaa0011, 0x0000005a},
+{'l', 0xc00f3780, 0x413423c8},
+{'q', 0x411ee18c, 0x3fcddfc0},
+{0, 0x417dfc6c, 0x4101ca50},
+{'9', 0x0034002f, 0x00840035},
+{'l', 0xc19ee192, 0x3fcddfc0},
+{'8', 0x96a396fa, 0x29a300c5},
+{'q', 0xc0864404, 0x40a35b50},
+{0, 0xc0f3ea84, 0x4191745c},
+{'q', 0xbfcddfc0, 0x4100abdc},
+{0, 0xbfcddfc0, 0x413bf8d8},
+{'q', 0x00000000, 0x4182e8b9},
+{0, 0x4147292e, 0x4182e8b9},
+{'@', 0x000000a3, 0x00004fa6},/*        £        x-advance: 79.648438 */
+{'M', 0x429a67d5, 0xc1cb13b1},
+{'q', 0xc03bf8e0, 0x4148479b},
+{0, 0xc12e8ba0, 0x41979bbf},
+{'9', 0x0033ffc1, 0x0033ff61},
+{'4', 0x0000fe71, 0xff8e0015},
+{'8', 0xc654eb34, 0xa02bdb1f},
+{'0', 0x0098bc0d, 0x0063a111},
+{'l', 0x40644078, 0xc191745e},
+{'q', 0x402e8ba0, 0xc1679bc0},
+{0, 0x4126b69a, 0xc1a86440},
+{'q', 0x40f62760, 0xc0d49660},
+{0, 0x41abbf8c, 0xc0d49660},
+{'q', 0x4144ec54, 0x00000000},
+{0, 0x419ca4b2, 0x40b30560},
+{'9', 0x002c003a, 0x007b0044},
+{'l', 0xc189101c, 0x4056d340},
+{'8', 0xbde1d2f8, 0xecc2ecea},
+{'8', 0x19bd00d5, 0x54de19e9},
+{'l', 0xc06d33e0, 0x4195ee1a},
+{'l', 0x41a00000, 0x00000000},
+{'4', 0x005fffee, 0x0000ff60},
+{'l', 0xbff1ada0, 0x410cfaa0},
+{'9', 0x006dffe9, 0x0095ff7f},
+{'l', 0x41e44071, 0x00000000},
+{'8', 0xe7560035, 0xae2ee721},
+{'l', 0x417bbf8c, 0x402e8ba0},
+{'@', 0x000000a4, 0x00004fa6},/*        ¤        x-advance: 79.648438 */
+{'M', 0x4126b69a, 0xc23f5424},
+{'9', 0xffbd0000, 0xff850021},
+{'4', 0xffb6ffb6, 0xffa90057},
+{'l', 0x411292cc, 0x4114cfb0},
+{'q', 0x40e20394, 0xc0840730},
+{0, 0x41762762, 0xc0840730},
+{'9', 0x00000043, 0x0021007a},
+{'4', 0xffb5004b, 0x00580058},
+{'l', 0xc1182af8, 0x41170c88},
+{'q', 0x40864410, 0x40dd89d8},
+{0, 0x40864410, 0x417508f0},
+{'9', 0x00420000, 0x0079ffe0},
+{'4', 0x004a004a, 0x0059ffa8},
+{'l', 0xc114cfac, 0xc1170c87},
+{'q', 0xc0dfc6b8, 0x40840728},
+{0, 0xc17745d0, 0x40840728},
+{'9', 0x0000ffbc, 0xffe1ff85},
+{'4', 0x004cffb5, 0xffa8ffa9},
+{'l', 0x41170c87, 0xc1194966},
+{'9', 0xffc9ffe0, 0xff86ffe0},
+{'m', 0x417cddfc, 0xbe0f3700},
+{'8', 0x52223000, 0x22522222},
+{'8', 0xde51002f, 0xae22de22},
+{'8', 0xaeded000, 0xdeaedede},
+{'8', 0x22ae00d0, 0x52de22de},
+{'@', 0x000000a5, 0x00004fa6},/*        ¥        x-advance: 79.648438 */
+{'M', 0x425eefe3, 0xc2414966},
+{'l', 0x419a67d6, 0x00000000},
+{'l', 0xbffaa140, 0x41235b4c},
+{'l', 0xc1bd1744, 0x00000000},
+{'l', 0xc00f3780, 0x4135423e},
+{'l', 0x41bd1744, 0x00000000},
+{'l', 0xbffaa100, 0x412479bc},
+{'l', 0xc1bd1746, 0x00000000},
+{'l', 0xc04ddfc0, 0x41840729},
+{'l', 0xc1982af8, 0x00000000},
+{'l', 0x404ddfc8, 0xc1840729},
+{'l', 0xc1bbf8d7, 0x00000000},
+{'l', 0x3ffaa124, 0xc12479bc},
+{'l', 0x41bc880e, 0x00000000},
+{'l', 0x400f3780, 0xc135423e},
+{'l', 0xc1bc880e, 0x00000000},
+{'l', 0x3ffaa120, 0xc1235b4c},
+{'l', 0x419a67d5, 0x00000000},
+{'l', 0xc17aa11e, 0xc248d6d2},
+{'l', 0x419ee190, 0x00000000},
+{'l', 0x412c4ec8, 0x4226b699},
+{'l', 0x41da2e8a, 0xc226b699},
+{'l', 0x41a479bc, 0x00000000},
+{'l', 0xc20cfaa1, 0x4248d6d2},
+{'@', 0x000000a6, 0x00002811},/*        ¦        x-advance: 40.066406 */
+{'M', 0x4156d33e, 0x41edc322},
+{'l', 0x00000000, 0xc25182b0},
+{'4', 0x00000092, 0x01a30000},
+{'6', 0x0000ff6e, 0xfd770000},
+{'l', 0x00000000, 0xc2513b13},
+{'l', 0x419292cc, 0x00000000},
+{'l', 0x00000000, 0x42513b13},
+{'l', 0xc19292cc, 0x00000000},
+{'@', 0x000000a7, 0x00004fa6},/*        §        x-advance: 79.648438 */
+{'M', 0x4248d6d3, 0xc2c79496},
+{'q', 0x41644074, 0x00000000},
+{0, 0x41af1ada, 0x409ca4b0},
+{'9', 0x0027003d, 0x00720041},
+{'l', 0xc18880e4, 0x3fdfc6c0},
+{'8', 0xcadadafa, 0xefb3efe1},
+{'q', 0xc17f1ad8, 0x00000000},
+{0, 0xc17f1ad8, 0x4114cfb0},
+{'8', 0x240e1500, 0x1b280f0e},
+{'q', 0x404ddfd0, 0x3fb30580},
+{0, 0x412d6d34, 0x404ddfc0},
+{'q', 0x41c7b864, 0x40b77f20},
+{0, 0x41c7b864, 0x41a508f4},
+{'8', 0x67e03e00, 0x409628e0},
+{'8', 0x34361323, 0x4a132013},
+{'q', 0x00000000, 0x414ba2e9},
+{0, 0xc11b8644, 0x419af70c},
+{'q', 0xc11a67d8, 0x40d25986},
+{0, 0xc1dea848, 0x40d25986},
+{'q', 0xc1762763, 0x00000000},
+{0, 0xc1bada68, 0xc09a67d6},
+{'9', 0xffd9ffc1, 0xff86ffb6},
+{'l', 0x418880e5, 0xc0259828},
+{'8', 0x42282e07, 0x145b1420},
+{'q', 0x41182af6, 0x00000000},
+{0, 0x41679bbe, 0xc033055e},
+{'8', 0xc127ea27, 0xd4f2e600},
+{'q', 0xbfdfc6c0, 0xc00abdc0},
+{0, 0xc0a11e70, 0xc068ba2c},
+{'q', 0xc04ddfc0, 0xbfbbf8e0},
+{0, 0xc1620394, 0xc07f1ad8},
+{'q', 0xc1b39496, 0xc09ee194},
+{0, 0xc1b39496, 0xc1a8f379},
+{'q', 0x35000000, 0xc169d89c},
+{0, 0x41979bc0, 0xc19a67d4},
+{'8', 0xc9c4ebd9, 0xb3ecdeec},
+{'q', 0x00000000, 0xc1389d90},
+{0, 0x41099f55, 0xc1899f54},
+{'9', 0xffd30044, 0xffd300d1},
+{'m', 0xc12479bc, 0x4234faa1},
+{'8', 0x19a503c7, 0x3cde15de},
+{'8', 0x280d1700, 0x1c26100d},
+{'8', 0x1b5a0b18, 0xe75ffb3e},
+{'8', 0xc921ec21, 0xc4e2da00},
+{'q', 0xc071adb0, 0xc0330560},
+{0, 0xc1644074, 0xc0a59828},
+{'@', 0x000000a8, 0x00002fb1},/*        ¨        x-advance: 47.691406 */
+{'M', 0x421ee191, 0xc2a7b13b},
+{'l', 0x40407290, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d8, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e525a, 0x00000000},
+{'@', 0x000000a9, 0x00006986},/*        ©        x-advance: 105.523438 */
+{'M', 0x42d2e8ba, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1744, 0xc0e20395},
+{0, 0xc1932203, 0xc1955ee1},
+{'q', 0xc0d01ca5, 0xc13ada66},
+{0, 0xc0d01ca5, 0xc1c7292d},
+{'q', 0x00000000, 0xc157f1ac},
+{0, 0x40d9101d, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca847c, 0x40db4d00},
+{'q', 0x413d1740, 0x40d91020},
+{0, 0x41944070, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0faa120, 0x00000000},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0xc0b77f20, 0xc1a982b0},
+{'q', 0xc0b77f10, 0xc11dc320},
+{0, 0xc17aa118, 0xc17982b0},
+{'q', 0xc11ee190, 0xc0b77f10},
+{0, 0xc1aaa120, 0xc0b77f10},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc1a62762, 0x40ae8ba0},
+{'q', 0xc11ca4b2, 0x40ae8ba0},
+{0, 0xc17cddfc, 0x41762760},
+{'q', 0xc0be35b4, 0x411dc324},
+{0, 0xc0be35b4, 0x41ad6d34},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40b5423c, 0x41aaa11f},
+{'q', 0x40b77f1c, 0x411ee190},
+{0, 0x41786440, 0x417aa11d},
+{'q', 0x411dc324, 0x40b77f1c},
+{0, 0x41aaa11e, 0x40b77f1c},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41ab3058, 0xc0b77f1c},
+{'q', 0x411ee190, 0xc0b77f1a},
+{0, 0x417982a8, 0xc17aa11d},
+{'9', 0xffb1002d, 0xff56002d},
+{'m', 0xc22745d1, 0x41ec157c},
+{'q', 0xc157f1ac, 0x00000000},
+{0, 0xc1a745d2, 0xc0f86440},
+{'q', 0xc0eaf70c, 0xc0f86440},
+{0, 0xc0eaf70c, 0xc1af1ada},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x40e44074, 0xc1acddfe},
+{'q', 0x40e44070, 0xc0ed33e0},
+{0, 0x41a3ea84, 0xc0ed33e0},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x4172cc14, 0x407aa120},
+{'9', 0x001f0031, 0x0060004c},
+{'l', 0xc12e8ba0, 0x40377f20},
+{'8', 0xcbd7def2, 0xedbfede6},
+{'q', 0xc0f3ea88, 0x00000000},
+{0, 0xc1389d88, 0x409ca4b0},
+{'q', 0xc0762770, 0x409ca4b0},
+{0, 0xc0762770, 0x41644074},
+{'q', 0x00000000, 0x41170c88},
+{0, 0x40840730, 0x4169d89c},
+{'8', 0x295c2921, 0xec410024},
+{'9', 0xffec001c, 0xffc5002c},
+{'l', 0x41330560, 0x40525990},
+{'q', 0xc081ca50, 0x410bdc30},
+{0, 0xc1223ce0, 0x414a8478},
+{'q', 0xc0c2af70, 0x407aa120},
+{0, 0xc16c157c, 0x407aa120},
+{'@', 0x000000aa, 0x00003501},/*        ª        x-advance: 53.003906 */
+{'M', 0x423dee19, 0xc242f70c},
+{'8', 0xf2c700dc, 0xd8edf2ed},
+{'4', 0xffea0001, 0x0000ffff},
+{'8', 0x41c430e1, 0x10b810e3},
+{'8', 0xe2af00cf, 0xb2e2e2e2},
+{'q', 0x00000000, 0xc102e8bc},
+{0, 0x40b9bbfa, 0xc148479c},
+{'9', 0xffde002e, 0xffdc0097},
+{'4', 0xffff0044, 0xfff20002},
+{'8', 0xde05ec05, 0xd3d3d300},
+{'8', 0x0cce00df, 0x26e90cf0},
+{'l', 0xc13f5425, 0xbfaa11c0},
+{'q', 0x3fb30568, 0xc0c4ec50},
+{0, 0x40d25982, 0xc11b8648},
+{'q', 0x40a5982c, 0xc068ba20},
+{0, 0x416d33ea, 0xc068ba20},
+{'8', 0x1a6e004b, 0x50231923},
+{'q', 0x00000000, 0x3f68ba00},
+{0, 0xbe0f3800, 0x4001ca40},
+{'9', 0x0008ffff, 0x00a9ffde},
+{'l', 0xbeb30580, 0x40525990},
+{'8', 0x181d1800, 0xfd160009},
+{'l', 0xbf330540, 0x40e44078},
+{'9', 0x0006ffed, 0x0006ffc2},
+{'m', 0xc1040728, 0xc1b9bbf8},
+{'l', 0xc0db4d00, 0x3e0f3600},
+{'8', 0x11bd01d5, 0x2de80fe8},
+{'8', 0x290d1c00, 0x0c230c0e},
+{'8', 0xea35001d, 0xc222ea18},
+{'l', 0x3f8f3780, 0xc0864400},
+{'@', 0x000000ab, 0x00004fa6},/*        «        x-advance: 79.648438 */
+{'M', 0x4193b13b, 0xc11b8644},
+{'l', 0xc156d33e, 0xc1c9f542},
+{'l', 0x3f7aa118, 0xc09ee190},
+{'l', 0x41b4b305, 0xc1cd5090},
+{'l', 0x4185b4d0, 0x00000000},
+{'l', 0xbed6d380, 0x40377f20},
+{'l', 0xc1b80e52, 0x41ccc158},
+{'4', 0x00c50069, 0x0015fffe},
+{'6', 0x0000ff7f, 0x00000100},
+{'l', 0xc156d340, 0xc1c9f542},
+{'l', 0x3f7aa140, 0xc09ee190},
+{'l', 0x41b4b306, 0xc1cd5090},
+{'l', 0x4185b4d0, 0x00000000},
+{'l', 0xbed6d400, 0x40377f20},
+{'l', 0xc1b80e50, 0x41ccc158},
+{'l', 0x41525980, 0x41c57b86},
+{'l', 0xbeb30500, 0x402e8ba0},
+{'l', 0xc181ca4c, 0x00000000},
+{'@', 0x000000ac, 0x000053a2},/*        ¬        x-advance: 83.632812 */
+{'M', 0x4275982b, 0xc11dc322},
+{'l', 0x00000000, 0xc1ef70c9},
+{'l', 0xc2609d8a, 0x00000000},
+{'l', 0x35000000, 0xc17aa11c},
+{'l', 0x428fa2e8, 0x00000000},
+{'l', 0x00000000, 0x423660ac},
+{'l', 0xc17aa11c, 0xb6000000},
+{'@', 0x000000ad, 0x00002fb1},/*        ­        x-advance: 47.691406 */
+{'M', 0x407aa11e, 0xc1e4cfaa},
+{'l', 0x40525982, 0xc18880e4},
+{'l', 0x4211745d, 0x00000000},
+{'l', 0xc0525980, 0x418880e4},
+{'l', 0xc211745d, 0x00000000},
+{'@', 0x000000ae, 0x00006986},/*        ®        x-advance: 105.523438 */
+{'M', 0x42d2e8ba, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1744, 0xc0e20395},
+{0, 0xc1932203, 0xc1955ee1},
+{'q', 0xc0d01ca5, 0xc13ada66},
+{0, 0xc0d01ca5, 0xc1c7292d},
+{'q', 0x00000000, 0xc157f1ac},
+{0, 0x40d9101d, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca847c, 0x40db4d00},
+{'q', 0x413d1740, 0x40d91020},
+{0, 0x41944070, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0faa120, 0x00000000},
+{'q', 0x00000000, 0xc13660ac},
+{0, 0xc0b77f20, 0xc1a982b0},
+{'q', 0xc0b77f10, 0xc11dc320},
+{0, 0xc17aa118, 0xc17982b0},
+{'q', 0xc11ee190, 0xc0b77f10},
+{0, 0xc1aaa120, 0xc0b77f10},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc1a62762, 0x40ae8ba0},
+{'q', 0xc11ca4b2, 0x40ae8ba0},
+{0, 0xc17cddfc, 0x41762760},
+{'q', 0xc0be35b4, 0x411dc324},
+{0, 0xc0be35b4, 0x41ad6d34},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40b5423c, 0x41aaa11f},
+{'q', 0x40b77f1c, 0x411ee190},
+{0, 0x41786440, 0x417aa11d},
+{'q', 0x411dc324, 0x40b77f1c},
+{0, 0x41aaa11e, 0x40b77f1c},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41ab3058, 0xc0b77f1c},
+{'q', 0x411ee190, 0xc0b77f1a},
+{0, 0x417982a8, 0xc17aa11d},
+{'9', 0xffb1002d, 0xff56002d},
+{'m', 0xc1f7d508, 0x41e55ee2},
+{'l', 0xc147292c, 0xc1af1ada},
+{'l', 0xc102e8bc, 0x00000000},
+{'l', 0x00000000, 0x41af1ada},
+{'4', 0x0000ff9d, 0xfe390000},
+{'l', 0x41b89d8a, 0x00000000},
+{'q', 0x412b3058, 0x00000000},
+{0, 0x41801ca4, 0x40917460},
+{'8', 0x632a232a, 0x55e63400},
+{'9', 0x0021ffe6, 0x002effba},
+{'4', 0x00bb0077, 0x0000ff90},
+{'m', 0xbfa11e80, 0xc21fb864},
+{'8', 0xd0ebe100, 0xf0c5f0ec},
+{'4', 0x0000ffb6, 0x00890000},
+{'l', 0x41211e70, 0x00000000},
+{'8', 0xed370024, 0xcc13ec13},
+{'@', 0x000000af, 0x00004f17},/*        ¯        x-advance: 79.089844 */
+{'M', 0x42a08f37, 0xc2cb13b1},
+{'l', 0xc2a2efe3, 0x00000000},
+{'l', 0x35900000, 0xc0d25980},
+{'l', 0x42a2efe3, 0x00000000},
+{'l', 0x00000000, 0x40d25980},
+{'@', 0x000000b0, 0x00003945},/*        °        x-advance: 57.269531 */
+{'M', 0x42682af7, 0xc29b3ea8},
+{'q', 0x00000000, 0x41117458},
+{0, 0xc0d25980, 0x417982ac},
+{'q', 0xc0d01ca8, 0x40cddfc8},
+{0, 0xc17dfc6c, 0x40cddfc8},
+{'q', 0xc113b13c, 0x00000000},
+{0, 0xc17cddfe, 0xc0cba2e8},
+{'q', 0xc0d25980, 0xc0cba2e8},
+{0, 0xc0d25980, 0xc17aa11c},
+{'8', 0xa817d000, 0xc140d818},
+{'q', 0x40a5982c, 0xc03bf8c0},
+{0, 0x4135423e, 0xc03bf8c0},
+{'q', 0x41170c88, 0x00000000},
+{0, 0x417f1ad8, 0x40d01ca0},
+{'9', 0x00330034, 0x007c0034},
+{'m', 0xc130c880, 0x00000000},
+{'8', 0xbee6d900, 0xe6c0e6e7},
+{'8', 0x1bbe00d9, 0x41e61ae6},
+{'8', 0x421b2600, 0x1b411b1b},
+{'8', 0xe5400025, 0xbe1ae51a},
+{'@', 0x000000b1, 0x00004e99},/*        ±        x-advance: 78.597656 */
+{'M', 0x4247292d, 0xc245c322},
+{'l', 0x00000000, 0x41bec4ec},
+{'l', 0xc17aa120, 0x00000000},
+{'l', 0x00000000, 0xc1bec4ec},
+{'l', 0xc1e055ee, 0x00000000},
+{'l', 0x35000000, 0xc17982b0},
+{'l', 0x41e055ee, 0x00000000},
+{'l', 0x00000000, 0xc1be35b4},
+{'l', 0x417aa120, 0x00000000},
+{'l', 0x00000000, 0x41be35b4},
+{'4', 0x000000e0, 0x007c0000},
+{'6', 0x0000ff20, 0x018bfea3},
+{'l', 0x35000000, 0xc17982af},
+{'l', 0x428fa2e9, 0x00000000},
+{'l', 0x00000000, 0x417982af},
+{'l', 0xc28fa2e9, 0x00000000},
+{'@', 0x000000b2, 0x00002fb1},/*        ²        x-advance: 47.691406 */
+{'M', 0x409ee191, 0xc242af71},
+{'l', 0x3fd6d340, 0xc1064404},
+{'8', 0xc03add16, 0xc161e323},
+{'8', 0xcd48e533, 0xcc15e815},
+{'8', 0xe6f4f000, 0xf5e1f5f4},
+{'9', 0x0000ffcf, 0x0036ffc1},
+{'l', 0xc135423c, 0xc0182ae0},
+{'8', 0xb037c911, 0xe76be726},
+{'8', 0x1c650040, 0x4c241b24},
+{'8', 0x3af32100, 0x2cdd18f3},
+{'8', 0x22d013eb, 0x1dcc0fe6},
+{'8', 0x1bd10de7, 0x1ede0deb},
+{'l', 0x41c33ea9, 0x00000000},
+{'l', 0xbfdfc6c0, 0x41200000},
+{'l', 0xc21dc322, 0x00000000},
+{'@', 0x000000b3, 0x00002fb1},/*        ³        x-advance: 47.691406 */
+{'M', 0x420abdc3, 0xc27ff1ad},
+{'9', 0xffd10000, 0xffd1ffc2},
+{'4', 0x0000ffda, 0xffba000d},
+{'l', 0x40864408, 0x00000000},
+{'8', 0xf3370022, 0xd915f315},
+{'8', 0xd2d2d200, 0x34c000ce},
+{'l', 0xc13660ab, 0xbfd6d340},
+{'q', 0x3fe8ba28, 0xc0db4cf0},
+{0, 0x40d6d33e, 0xc1223cd8},
+{'q', 0x409ca4b4, 0xc0525980},
+{0, 0x41620394, 0xc0525980},
+{'8', 0x19660042, 0x4a241824},
+{'8', 0x44e42700, 0x20b71ce5},
+{'l', 0xbd8f3800, 0x3e0f3800},
+{'8', 0x1c390623, 0x38151515},
+{'q', 0x00000000, 0x40e20398},
+{0, 0xc0be35b8, 0x413660ac},
+{'q', 0xc0be35b8, 0x408abdc0},
+{0, 0xc180abdc, 0x408abdc0},
+{'9', 0x0000ff77, 0xff92ff68},
+{'l', 0x414a8478, 0xbfdfc6c0},
+{'8', 0x373c3709, 0xf22b0019},
+{'q', 0x4013b140, 0xbff1ada0},
+{0, 0x4013b140, 0xc0ae8ba0},
+{'@', 0x000000b4, 0x00002fb1},/*        ´        x-advance: 47.691406 */
+{'M', 0x418ea848, 0xc2a5745d},
+{'l', 0x3ed6d300, 0xc00abdc0},
+{'l', 0x418a2e8c, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000b5, 0x00005284},/*        µ        x-advance: 82.515625 */
+{'M', 0x4274c158, 0x3fb3055f},
+{'8', 0xefb900cf, 0xc3ebeeeb},
+{'4', 0xfff50000, 0xfff50001},
+{'l', 0xbe8f3780, 0x00000000},
+{'8', 0x4ccb30e9, 0x1ab61ae3},
+{'8', 0xf3ca00df, 0xdce3f3eb},
+{'l', 0xbed6d340, 0x00000000},
+{'l', 0xbf8f3780, 0x4100abdc},
+{'l', 0xc0a35b4c, 0x41d49661},
+{'l', 0xc19ca4b3, 0x00000000},
+{'4', 0xfcb500a2, 0x0000009d},
+{'l', 0xc104072a, 0x42293b14},
+{'8', 0x42f921fa, 0x5c455c00},
+{'q', 0x40b54240, 0x00000000},
+{0, 0x411dc324, 0xc0b3055e},
+{'9', 0xffd40021, 0xff7f0030},
+{'4', 0xfebd003e, 0x0000009d},
+{'l', 0xc12479c0, 0x4253bf8e},
+{'8', 0x24fb19fb, 0x261b2600},
+{'9', 0x0000000c, 0xfffd0019},
+{'l', 0xbf8f3780, 0x4157f1ad},
+{'q', 0xc0ed33f0, 0x3fdfc6b7},
+{0, 0xc1525980, 0x3fdfc6b7},
+{'@', 0x000000b6, 0x00004fa6},/*        ¶        x-advance: 79.648438 */
+{'M', 0x42885d17, 0xc2b1101d},
+{'l', 0x00000000, 0x42d5fc6c},
+{'l', 0xc12e8ba0, 0xb6000000},
+{'l', 0x00000000, 0xc2d5fc6c},
+{'l', 0xc15a2e8c, 0x00000000},
+{'4', 0x03570000, 0x0000ffaa},
+{'l', 0x00000000, 0xc285fc6b},
+{'q', 0xc13d1746, 0xb6800000},
+{0, 0xc194cfaa, 0xc0cddfd0},
+{'q', 0xc0d9101e, 0xc0d01ca8},
+{0, 0xc0d9101e, 0xc1932204},
+{'q', 0x00000000, 0xc13d1748},
+{0, 0x40db4cfa, 0xc193b13c},
+{'9', 0xffcb0037, 0xffcb0098},
+{'l', 0x422ff1ae, 0x00000000},
+{'l', 0x00000000, 0x411ffff8},
+{'l', 0xc11292d0, 0x00000000},
+{'@', 0x000000b7, 0x00002fb1},/*        ·        x-advance: 47.691406 */
+{'M', 0x415377f2, 0xc214880e},
+{'l', 0x40840728, 0xc1aaa11e},
+{'l', 0x41a11e6f, 0x00000000},
+{'l', 0xc0840728, 0x41aaa11e},
+{'l', 0xc1a11e6f, 0x00000000},
+{'@', 0x000000b8, 0x00002fb1},/*        ¸        x-advance: 47.691406 */
+{'M', 0x4159101c, 0x41edc322},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x4001ca4a, 0xc102e8ba},
+{'8', 0x032d0317, 0xf742002d},
+{'8', 0xdf14f614, 0xddc3dd00},
+{'0', 0x01f100f3, 0x004ea136},
+{'l', 0xc056d338, 0x40b9bbf9},
+{'8', 0x133f0027, 0x36181118},
+{'q', 0x00000000, 0x40d9101e},
+{0, 0xc0bbf8d4, 0x412c4ec5},
+{'q', 0xc0bbf8d8, 0x407aa120},
+{0, 0xc1920395, 0x407aa120},
+{'@', 0x000000b9, 0x00002fb1},/*        ¹        x-advance: 47.691406 */
+{'M', 0x40db4cfa, 0xc241d89d},
+{'l', 0x3fcddfc8, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x40cba2e8, 0xc202e8b9},
+{'l', 0xc159101c, 0x40f1ada0},
+{'l', 0x3fd6d340, 0xc10880e8},
+{'l', 0x41620394, 0xc102e8b8},
+{'l', 0x4143cde0, 0x00000000},
+{'l', 0xc101ca4c, 0x42278d6d},
+{'l', 0x413e35b4, 0x00000000},
+{'l', 0xbfcddfc0, 0x41076278},
+{'l', 0xc215ee19, 0x00000000},
+{'@', 0x000000ba, 0x0000344e},/*        º        x-advance: 52.304688 */
+{'M', 0x42679bbf, 0xc29fb864},
+{'q', 0x00000000, 0x41632200},
+{0, 0xc102e8b8, 0x41b77f1a},
+{'q', 0xc101ca4c, 0x410bdc34},
+{0, 0xc1a8f378, 0x410bdc34},
+{'q', 0xc11ee192, 0x00000000},
+{0, 0xc17bbf8d, 0xc0ae8ba8},
+{'q', 0xc0b77f1c, 0xc0b0c880},
+{0, 0xc0b77f1c, 0xc16e525c},
+{'q', 0x00000000, 0xc15c6b68},
+{0, 0x40ff1ada, 0xc1b157b8},
+{'q', 0x40ff1adc, 0xc1076270},
+{0, 0x41a745d1, 0xc1076270},
+{'q', 0x412b3058, 0x00000000},
+{0, 0x41825984, 0x40a59820},
+{'9', 0x0028002c, 0x0071002c},
+{'m', 0xc1632200, 0x3f7aa100},
+{'8', 0xc2efd800, 0xeacdeaef},
+{'8', 0x0ad000e3, 0x20df0aed},
+{'8', 0x39ec15f3, 0x3ff922f9},
+{'8', 0x43112c00, 0x16331611},
+{'8', 0xfa2a001b, 0xec19fa0e},
+{'8', 0xe113f30b, 0xd50def07},
+{'q', 0x3f44ec40, 0xc04ddfc0},
+{0, 0x3f8f3780, 0xc1052598},
+{'@', 0x000000bb, 0x00004fa6},/*        »        x-advance: 79.648438 */
+{'M', 0x41ec157b, 0xc2833056},
+{'l', 0x4156d33e, 0x41c9f542},
+{'l', 0xbf7aa100, 0x409ee190},
+{'l', 0xc1b4b306, 0x41cd5090},
+{'l', 0xc185b4cf, 0x00000000},
+{'l', 0x3ed6d338, 0xc0377f1c},
+{'l', 0x41b80e52, 0xc1ccc156},
+{'4', 0xff3bff97, 0xffeb0002},
+{'6', 0x00000081, 0x00000100},
+{'l', 0x4156d340, 0x41c9f542},
+{'l', 0xbf7aa100, 0x409ee190},
+{'l', 0xc1b4b306, 0x41cd5090},
+{'l', 0xc185b4d0, 0x00000000},
+{'l', 0x3ed6d380, 0xc0377f1c},
+{'l', 0x41b80e52, 0xc1ccc156},
+{'l', 0xc1525984, 0xc1c57b86},
+{'l', 0x3eb30580, 0xc02e8bb0},
+{'l', 0x4181ca4a, 0x00000000},
+{'@', 0x000000bc, 0x00007770},/*        ¼        x-advance: 119.437500 */
+{'M', 0x40db4cfa, 0xc241d89d},
+{'l', 0x3fcddfc8, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x40cba2e8, 0xc202e8b9},
+{'l', 0xc159101c, 0x40f1ada0},
+{'l', 0x3fd6d340, 0xc10880e8},
+{'l', 0x41620394, 0xc102e8b8},
+{'l', 0x4143cde0, 0x00000000},
+{'l', 0xc101ca4c, 0x42278d6d},
+{'4', 0x0000005f, 0x0043fff4},
+{'6', 0x0000fed5, 0x018300b9},
+{'l', 0xc15c6b6a, 0x00000000},
+{'4', 0xfcec025f, 0x0000006f},
+{'6', 0x0314fda0, 0xffb2022a},
+{'l', 0xbff1ad80, 0x411ca4b3},
+{'l', 0xc14cc158, 0x32000000},
+{'l', 0x3ff1ad80, 0xc11ca4b3},
+{'l', 0xc1c22038, 0x00000000},
+{'l', 0x3ffaa100, 0xc125982a},
+{'l', 0x41dcfaa4, 0xc1f1ada6},
+{'l', 0x417508f0, 0x00000000},
+{'l', 0xc0bbf8d0, 0x41f479bb},
+{'4', 0x00000039, 0x0050fff1},
+{'6', 0x0000ffc7, 0xffb0ff39},
+{'4', 0x00000071, 0xff590022},
+{'l', 0xbf982b00, 0x3fc4ec40},
+{'q', 0xc0259820, 0x4068ba30},
+{0, 0xc09a67d0, 0x40c07298},
+{'l', 0xc1472930, 0x4155b4ce},
+{'@', 0x000000bd, 0x00007770},/*        ½        x-advance: 119.437500 */
+{'M', 0x40db4cfa, 0xc241d89d},
+{'l', 0x3fcddfc8, 0xc1076278},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0x40cba2e8, 0xc202e8b9},
+{'l', 0xc159101c, 0x40f1ada0},
+{'l', 0x3fd6d340, 0xc10880e8},
+{'l', 0x41620394, 0xc102e8b8},
+{'l', 0x4143cde0, 0x00000000},
+{'l', 0xc101ca4c, 0x42278d6d},
+{'4', 0x0000005f, 0x0043fff4},
+{'6', 0x0000fed5, 0x018300b9},
+{'l', 0xc15c6b6a, 0x00000000},
+{'4', 0xfcec025f, 0x0000006f},
+{'6', 0x0314fda0, 0x00000122},
+{'l', 0x3fd6d340, 0xc1064407},
+{'8', 0xc03add16, 0xc161e323},
+{'8', 0xcd48e533, 0xcc15e815},
+{'8', 0xe6f4f000, 0xf5e1f5f4},
+{'9', 0x0000ffcf, 0x0036ffc1},
+{'l', 0xc1354238, 0xc0182b00},
+{'8', 0xb037c911, 0xe76be726},
+{'8', 0x1c650040, 0x4c241b24},
+{'8', 0x3af32100, 0x2cdd18f3},
+{'8', 0x22d013eb, 0x1dcc0fe6},
+{'8', 0x1bd10de7, 0x1ede0deb},
+{'l', 0x41c33ea8, 0x00000000},
+{'l', 0xbfdfc6c0, 0x41200000},
+{'l', 0xc21dc322, 0x32000000},
+{'@', 0x000000be, 0x00007770},/*        ¾        x-advance: 119.437500 */
+{'M', 0x420ea848, 0xc27ff1ad},
+{'9', 0xffd10000, 0xffd1ffc2},
+{'4', 0x0000ffda, 0xffba000d},
+{'l', 0x40864408, 0x00000000},
+{'8', 0xf3370022, 0xd915f315},
+{'8', 0xd2d2d200, 0x34c000ce},
+{'l', 0xc13660ac, 0xbfd6d340},
+{'q', 0x3fe8ba30, 0xc0db4cf0},
+{0, 0x40d6d340, 0xc1223cd8},
+{'q', 0x409ca4b4, 0xc0525980},
+{0, 0x41620396, 0xc0525980},
+{'8', 0x19660042, 0x4a241824},
+{'8', 0x44e42700, 0x20b71ce5},
+{'l', 0xbd8f3800, 0x3e0f3800},
+{'8', 0x1c390623, 0x38151515},
+{'q', 0x00000000, 0x40e20398},
+{0, 0xc0be35b0, 0x413660ac},
+{'q', 0xc0be35b8, 0x408abdc0},
+{0, 0xc180abdd, 0x408abdc0},
+{'9', 0x0000ff77, 0xff92ff68},
+{'l', 0x414a8478, 0xbfdfc6c0},
+{'8', 0x373c3709, 0xf22b0019},
+{'9', 0xfff10012, 0xffd50012},
+{'m', 0xc0b54240, 0x427ff1ad},
+{'l', 0xc15c6b6a, 0x00000000},
+{'4', 0xfcec025f, 0x0000006f},
+{'6', 0x0314fda0, 0xffb2022a},
+{'l', 0xbff1ad80, 0x411ca4b3},
+{'l', 0xc14cc158, 0x32000000},
+{'l', 0x3ff1ad80, 0xc11ca4b3},
+{'l', 0xc1c22038, 0x00000000},
+{'l', 0x3ffaa100, 0xc125982a},
+{'l', 0x41dcfaa4, 0xc1f1ada6},
+{'l', 0x417508f0, 0x00000000},
+{'l', 0xc0bbf8d0, 0x41f479bb},
+{'4', 0x00000039, 0x0050fff1},
+{'6', 0x0000ffc7, 0xffb0ff39},
+{'4', 0x00000071, 0xff590022},
+{'l', 0xbf982b00, 0x3fc4ec40},
+{'q', 0xc0259820, 0x4068ba30},
+{0, 0xc09a67d0, 0x40c07298},
+{'l', 0xc1472930, 0x4155b4ce},
+{'@', 0x000000bf, 0x0000577b},/*        ¿        x-advance: 87.480469 */
+{'M', 0x4209101d, 0x41c2af71},
+{'q', 0xc16f70ca, 0x00000000},
+{0, 0xc1bda67e, 0xc0d25984},
+{'q', 0xc10bdc32, 0xc0d25982},
+{0, 0xc10bdc32, 0xc1920394},
+{'8', 0xa614ce00, 0xb73bd915},
+{'q', 0x40982af8, 0xc08880e8},
+{0, 0x417bbf8c, 0xc125982c},
+{'8', 0xd33de22e, 0xe118f10f},
+{'9', 0xffef0009, 0xffd9000c},
+{'l', 0x41955ee0, 0x00000000},
+{'8', 0x4be72bf9, 0x3ad41fef},
+{'8', 0x42a419e6, 0x2ac018da},
+{'8', 0x23d812e7, 0x22eb10f1},
+{'8', 0x27fa11fa, 0x3a1a2300},
+{'q', 0x4056d340, 0x40377f1a},
+{0, 0x4126b69c, 0x40377f1a},
+{'9', 0x0000007e, 0xff95009c},
+{'l', 0x4194cfac, 0x40330561},
+{'9', 0x00d5ffbf, 0x00d5fec7},
+{'m', 0x41f3ea82, 0xc2c80000},
+{'l', 0xc068ba20, 0x41970c8a},
+{'l', 0xc1a1ada6, 0x00000000},
+{'l', 0x4068ba30, 0xc1970c8a},
+{'l', 0x41a1ada4, 0x00000000},
+{'@', 0x000000c0, 0x0000676d},/*        À        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0x40ae8ba8, 0xc1bd1744},
+{'l', 0xc1aa11e8, 0xc18377f4},
+{'l', 0x3f211e80, 0xc0407280},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x41632200, 0x418a2e8c},
+{'l', 0xbefaa100, 0x400abdc0},
+{'l', 0xc11b8640, 0x00000000},
+{'@', 0x000000c1, 0x0000676d},/*        Á        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0xc0faa118, 0xc1bd1744},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c88, 0xc18a2e8c},
+{'l', 0x41955ee0, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1ac, 0x418377f4},
+{'l', 0xc126b698, 0x00000000},
+{'@', 0x000000c2, 0x0000676d},/*        Â        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0x41e67d52, 0xc1cd5090},
+{'0', 0x00ad10fe, 0x00feac9f},
+{'l', 0xc1864408, 0x4128f378},
+{'l', 0xc13d1748, 0x00000000},
+{'l', 0x3eb30580, 0xc001ca60},
+{'l', 0x41adfc6c, 0xc19a67d0},
+{'l', 0x41801ca2, 0x00000000},
+{'l', 0x415b4d00, 0x419a67d0},
+{'@', 0x000000c3, 0x0000676d},/*        Ã        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0x4155b4d4, 0xc1bd1744},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af8, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada8, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea80, 0x417cddf8},
+{'q', 0xc09a67d0, 0x4095ee20},
+{0, 0xc13f5420, 0x4095ee20},
+{'@', 0x000000c4, 0x0000676d},/*        Ä        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0x41377f1c, 0xc1bd1744},
+{'l', 0x404072a0, 0xc17508f8},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d0, 0xc17508f8},
+{'l', 0x416f70cc, 0x00000000},
+{'l', 0xc04072a0, 0x417508f8},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x000000c5, 0x0000676d},/*        Ã…        x-advance: 103.425781 */
+{'M', 0x4291508f, 0x00000000},
+{'l', 0xc0762760, 0xc1c9660b},
+{'l', 0xc21635b4, 0x00000000},
+{'l', 0xc15a2e8e, 0x41c9660b},
+{'l', 0xc1a479bc, 0x00000000},
+{'l', 0x425c23ce, 0xc2c5101c},
+{'4', 0x000000c2, 0x03140085},
+{'6', 0x0000ff5d, 0xfd66ffa5},
+{'9', 0x0023fff5, 0x0076ffca},
+{'4', 0x00deff8a, 0x000000dc},
+{'l', 0xc095ee18, 0xc1fcddfe},
+{'9', 0xffb5fff6, 0xffa8fff6},
+{'m', 0x41aa11e6, 0xc1c19100},
+{'8', 0x64d73a00, 0x299c29d8},
+{'8', 0xd79b00c5, 0x9cd8d7d8},
+{'8', 0x9c29c600, 0xd764d729},
+{'8', 0x2964003a, 0x64292929},
+{'m', 0xc10e1910, 0x00000000},
+{'8', 0xcfece400, 0xecceecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x33141f00, 0x14311414},
+{'8', 0xec32001d, 0xce14ec14},
+{'@', 0x000000c6, 0x00008f37},/*        Æ        x-advance: 143.214844 */
+{'M', 0x426a2039, 0x00000000},
+{'l', 0x409ca4b0, 0xc1c9660b},
+{'l', 0xc1fbbf8c, 0x00000000},
+{'l', 0xc1876276, 0x41c9660b},
+{'l', 0xc1ae8ba3, 0x00000000},
+{'l', 0x4286f70c, 0xc2c5101c},
+{'l', 0x42ac2af8, 0x00000000},
+{'l', 0xc0496600, 0x417dfc68},
+{'l', 0xc244157c, 0x00000000},
+{'l', 0xc09a67e0, 0x41c699f4},
+{'l', 0x4232bdc4, 0x00000000},
+{'l', 0xc0407280, 0x417745d4},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc0a35b50, 0x41d40728},
+{'4', 0x0000019f, 0x007effe8},
+{'6', 0x0000fdc1, 0xfd660081},
+{'l', 0xc08880e0, 0x00000000},
+{'l', 0xc1182af4, 0x4169d8a0},
+{'l', 0xc1967d52, 0x41e055ee},
+{'l', 0x41c2af70, 0x00000000},
+{'l', 0x41040728, 0xc22aa11f},
+{'@', 0x000000c7, 0x0000676d},/*        Ç        x-advance: 103.425781 */
+{'M', 0x41d5b4d0, 0xc220479c},
+{'q', 0x00000000, 0x41419104},
+{0, 0x40be35b0, 0x4195ee1a},
+{'q', 0x40c07298, 0x40d25982},
+{0, 0x4189101e, 0x40d25982},
+{'9', 0x00000094, 0xff7000e9},
+{'l', 0x417dfc68, 0x4102e8ba},
+{'q', 0xc16af708, 0x41d01ca5},
+{0, 0xc23a0394, 0x41d01ca5},
+{'q', 0xc155b4d0, 0xb4000000},
+{0, 0xc1b89d8a, 0xc0a11e6f},
+{'q', 0xc11a67d6, 0xc0a11e6f},
+{0, 0xc16af70d, 0xc1655ee0},
+{'q', 0xc09ee191, 0xc115ee1a},
+{0, 0xc09ee191, 0xc1ae8ba4},
+{'q', 0x00000000, 0xc18cfaa0},
+{0, 0x40eaf70d, 0xc1fbbf8e},
+{'q', 0x40eaf70a, 0xc15ea848},
+{0, 0x41a3ea84, 0xc1aaa11c},
+{'q', 0x415377f4, 0xc0ed33f0},
+{0, 0x41f00000, 0xc0ed33f0},
+{'q', 0x4180abde, 0x00000000},
+{0, 0x41d2e8ba, 0x40dd89e0},
+{'9', 0x00360052, 0x00a3006f},
+{'l', 0xc1994964, 0x409ee190},
+{'8', 0xa2c2c5f0, 0xde91ded3},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d49660, 0x413bf8d8},
+{'9', 0x005dffb4, 0x00ffffb4},
+{'m', 0x413423cc, 0x428b9496},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x4001ca50, 0xc102e8ba},
+{'8', 0x032d0317, 0xf742002d},
+{'8', 0xdf14f614, 0xddc3dd00},
+{'0', 0x01f100f3, 0x004ea136},
+{'l', 0xc056d340, 0x40b9bbf9},
+{'8', 0x133f0027, 0x36181118},
+{'q', 0x00000000, 0x40d9101e},
+{0, 0xc0bbf8d8, 0x412c4ec5},
+{'q', 0xc0bbf8d0, 0x407aa120},
+{0, 0xc1920394, 0x407aa120},
+{'@', 0x000000c8, 0x00005f86},/*        È        x-advance: 95.523438 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0xc09a67d8, 0x41c60abc},
+{'l', 0x42525982, 0x00000000},
+{'l', 0xc044ec40, 0x417f1adc},
+{'l', 0xc2525982, 0x00000000},
+{'l', 0xc0a11e74, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007fffe7},
+{'6', 0x0000fd7e, 0xfca901cc},
+{'l', 0xc1aa11e6, 0xc18377f4},
+{'l', 0x3f211e80, 0xc0407280},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x41632200, 0x418a2e8c},
+{'l', 0xbefaa100, 0x400abdc0},
+{'l', 0xc11b8644, 0x00000000},
+{'@', 0x000000c9, 0x00005f86},/*        É        x-advance: 95.523438 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0xc09a67d8, 0x41c60abc},
+{'l', 0x42525982, 0x00000000},
+{'l', 0xc044ec40, 0x417f1adc},
+{'l', 0xc2525982, 0x00000000},
+{'l', 0xc0a11e74, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007fffe7},
+{'6', 0x0000fd7e, 0xfca9017b},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c88, 0xc18a2e8c},
+{'l', 0x41955ee4, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1ae, 0x418377f4},
+{'l', 0xc126b69c, 0x00000000},
+{'@', 0x000000ca, 0x00005f86},/*        Ê        x-advance: 95.523438 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0xc09a67d8, 0x41c60abc},
+{'l', 0x42525982, 0x00000000},
+{'l', 0xc044ec40, 0x417f1adc},
+{'l', 0xc2525982, 0x00000000},
+{'l', 0xc0a11e74, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007fffe7},
+{'6', 0x0000fd7e, 0xfc9802a9},
+{'0', 0x00ad10fe, 0x00feac9f},
+{'l', 0xc1864408, 0x4128f378},
+{'l', 0xc13d1744, 0x00000000},
+{'l', 0x3eb30500, 0xc001ca60},
+{'l', 0x41adfc6c, 0xc19a67d0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x415b4cf8, 0x419a67d0},
+{'@', 0x000000cb, 0x00005f86},/*        Ë        x-advance: 95.523438 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'l', 0x429af70c, 0x00000000},
+{'l', 0xc044ec40, 0x417f1ad8},
+{'l', 0xc263699f, 0x00000000},
+{'l', 0xc09a67d8, 0x41c60abc},
+{'l', 0x42525982, 0x00000000},
+{'l', 0xc044ec40, 0x417f1adc},
+{'l', 0xc2525982, 0x00000000},
+{'l', 0xc0a11e74, 0x41cf8d6d},
+{'4', 0x000001dd, 0x007fffe7},
+{'6', 0x0000fd7e, 0xfca90218},
+{'l', 0x40407280, 0xc17508f8},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8e0, 0xc17508f8},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f8},
+{'l', 0xc16e525c, 0x00000000},
+{'@', 0x000000cc, 0x000027ca},/*        Ì        x-advance: 39.789062 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'4', 0x000000a5, 0x0314ff67},
+{'6', 0x0000ff5c, 0xfca900f9},
+{'l', 0xc1aa11e8, 0xc18377f4},
+{'l', 0x3f211e80, 0xc0407280},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x41632204, 0x418a2e8c},
+{'l', 0xbefaa100, 0x400abdc0},
+{'l', 0xc11b8644, 0x00000000},
+{'@', 0x000000cd, 0x000027ca},/*        Í        x-advance: 39.789062 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'4', 0x000000a5, 0x0314ff67},
+{'6', 0x0000ff5c, 0xfca900a2},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c88, 0xc18a2e8c},
+{'l', 0x41955ee2, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1ae, 0x418377f4},
+{'l', 0xc126b698, 0x00000000},
+{'@', 0x000000ce, 0x000027ca},/*        ÃŽ        x-advance: 39.789062 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'4', 0x000000a5, 0x0314ff67},
+{'6', 0x0000ff5c, 0xfc9801c5},
+{'0', 0x00ad10fe, 0x00feac9f},
+{'l', 0xc1864406, 0x4128f378},
+{'l', 0xc13d1746, 0x00000000},
+{'l', 0x3eb30560, 0xc001ca60},
+{'l', 0x41adfc6c, 0xc19a67d0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x415b4cfc, 0x419a67d0},
+{'@', 0x000000cf, 0x000027ca},/*        Ï        x-advance: 39.789062 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x4198ba2e, 0xc2c5101c},
+{'4', 0x000000a5, 0x0314ff67},
+{'6', 0x0000ff5c, 0xfca90132},
+{'l', 0x40407290, 0xc17508f8},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d4, 0xc17508f8},
+{'l', 0x416f70c9, 0x00000000},
+{'l', 0xc0407290, 0x417508f8},
+{'l', 0xc16e525a, 0x00000000},
+{'@', 0x000000d0, 0x0000676d},/*        Ð        x-advance: 103.425781 */
+{'M', 0x424d508f, 0xc2c5101c},
+{'q', 0x41ba4b32, 0x00000000},
+{0, 0x420ea847, 0x412d6d30},
+{'q', 0x41460ac0, 0x412d6d30},
+{0, 0x41460ac0, 0x41fa11e6},
+{'q', 0x00000000, 0x4184072a},
+{0, 0xc0dd89e0, 0x41e94967},
+{'q', 0xc0dd89d0, 0x414a8479},
+{0, 0xc1a08f34, 0x41a00000},
+{'9', 0x003aff97, 0x003aff15},
+{'l', 0xc221ada6, 0x00000000},
+{'l', 0x4100abdc, 0xc2262762},
+{'l', 0xc10f377f, 0x00000000},
+{'l', 0x403bf8d6, 0xc17508f4},
+{'4', 0x00000048, 0xfeb30040},
+{'6', 0x000000ed, 0x014dff77},
+{'l', 0x41c7b864, 0x00000000},
+{'l', 0xc044ec50, 0x417508f4},
+{'4', 0x0000ff3a, 0x00ccffd9},
+{'l', 0x4180abdd, 0x00000000},
+{'q', 0x4133055c, 0x00000000},
+{0, 0x419e5258, 0xc0982af8},
+{'q', 0x410abdc8, 0xc09a67d4},
+{0, 0x41549660, 0xc15d89da},
+{'q', 0x4095ee20, 0xc11055ec},
+{0, 0x4095ee20, 0xc1a7d508},
+{'q', 0x00000000, 0xc15377f0},
+{0, 0xc0ed33f0, 0xc1a11e70},
+{'9', 0xffc9ffc6, 0xffc9ff57},
+{'l', 0xc144ec50, 0x00000000},
+{'l', 0xc0a11e70, 0x41cddfc6},
+{'@', 0x000000d1, 0x0000676d},/*        Ñ        x-advance: 103.425781 */
+{'M', 0x427745d1, 0x00000000},
+{'l', 0xc1d13b12, 0xc29e2e8c},
+{'9', 0x005afff4, 0x0085ffeb},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x000000c3, 0x027e00d2},
+{'l', 0x3f56d380, 0xc0b77f20},
+{'9', 0xffd20006, 0xff9f0010},
+{'l', 0x4142af70, 0xc2778d6c},
+{'4', 0x00000092, 0x0314ff67},
+{'6', 0x0000ff39, 0xfca90078},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af8, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada8, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea80, 0x417cddf8},
+{'q', 0xc09a67d0, 0x4095ee20},
+{0, 0xc13f5428, 0x4095ee20},
+{'@', 0x000000d2, 0x00006f66},/*        Ã’        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'9', 0xffcaffd0, 0xffcaff73},
+{'m', 0x40a59830, 0xc1ba4b30},
+{'l', 0xc1aa11e8, 0xc18377f4},
+{'l', 0x3f211e40, 0xc0407280},
+{'l', 0x4185259a, 0x00000000},
+{'l', 0x41632200, 0x418a2e8c},
+{'l', 0xbefaa100, 0x400abdc0},
+{'l', 0xc11b8640, 0x00000000},
+{'@', 0x000000d3, 0x00006f66},/*        Ó        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'9', 0xffcaffd0, 0xffcaff73},
+{'m', 0xc07f1ae0, 0xc1ba4b30},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c88, 0xc18a2e8c},
+{'l', 0x41955ee4, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1b0, 0x418377f4},
+{'l', 0xc126b698, 0x00000000},
+{'@', 0x000000d4, 0x00006f66},/*        Ô        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'9', 0xffcaffd0, 0xffcaff73},
+{'m', 0x41e1745c, 0xc1ca847c},
+{'0', 0x00ad10fe, 0x00feac9f},
+{'l', 0xc1864408, 0x4128f378},
+{'l', 0xc13d1744, 0x00000000},
+{'l', 0x3eb30580, 0xc001ca60},
+{'l', 0x41adfc6a, 0xc19a67d0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x415b4cf8, 0x419a67d0},
+{'@', 0x000000d5, 0x00006f66},/*        Õ        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'9', 0xffcaffd0, 0xffcaff73},
+{'m', 0x41786440, 0xc1ba4b30},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af8, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada8, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea90, 0x417cddf8},
+{'q', 0xc09a67d0, 0x4095ee20},
+{0, 0xc13f5420, 0x4095ee20},
+{'@', 0x000000d6, 0x00006f66},/*        Ö        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x41a3ea84, 0x00000000},
+{0, 0x42013b14, 0x412e8ba0},
+{'q', 0x413d1748, 0x412d6d38},
+{0, 0x413d1748, 0x41eca4b4},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'q', 0xc157f1b0, 0xb4000000},
+{0, 0xc1bbf8d7, 0xc0a11e6f},
+{'q', 0xc11ee190, 0xc0a11e6f},
+{0, 0xc172cc15, 0xc1667d50},
+{'q', 0xc0a5982c, 0xc1170c88},
+{0, 0xc0a5982c, 0xc1b0394a},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'q', 0x00000000, 0x414ddfc8},
+{0, 0x40c96610, 0x419af70d},
+{'q', 0x40c96608, 0x40cddfc8},
+{0, 0x418c6b68, 0x40cddfc8},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc0c4ec50, 0xc198ba2c},
+{'9', 0xffcaffd0, 0xffcaff73},
+{'m', 0x413bf8d8, 0xc1ba4b30},
+{'l', 0x40407280, 0xc17508f8},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8e0, 0xc17508f8},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f8},
+{'l', 0xc16e525c, 0x00000000},
+{'@', 0x000000d7, 0x000053a2},/*        ×        x-advance: 83.632812 */
+{'M', 0x410cfaa1, 0xc1b660ac},
+{'l', 0x41c7292e, 0xc1c8479c},
+{'l', 0xc1c4ec50, 0xc1c4ec4c},
+{'l', 0x4130c882, 0xc12e8ba8},
+{'l', 0x41c4ec4f, 0x41c3cde0},
+{'l', 0x41c4ec4e, 0xc1c4ec50},
+{'l', 0x4130c880, 0x4130c888},
+{'l', 0xc1c4ec4e, 0x41c60abc},
+{'l', 0x41c4ec4e, 0x41c3cddf},
+{'l', 0xc130c880, 0x4133055f},
+{'l', 0xc1c4ec4e, 0xc1c60abc},
+{'l', 0xc1c7292d, 0x41c8479a},
+{'l', 0xc130c881, 0xc130c880},
+{'@', 0x000000d8, 0x00006f66},/*        Ø        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'9', 0x00000084, 0x003a00dd},
+{'4', 0xffb20049, 0x00000071},
+{'l', 0xc17982b0, 0x4185b4d0},
+{'q', 0x410abdc8, 0x41259828},
+{0, 0x410abdc8, 0x41d25980},
+{'q', 0x00000000, 0x418a2e8c},
+{0, 0xc0ed33f0, 0x41fc4ec6},
+{'q', 0xc0eaf710, 0x41632203},
+{0, 0xc1a479bc, 0x41ae8ba2},
+{'q', 0xc15377f0, 0x40f1ada8},
+{0, 0xc1f1ada6, 0x40f1ada8},
+{'9', 0x0000ff84, 0xffceff32},
+{'4', 0x0045ffc0, 0x0000ff8d},
+{'l', 0x41655ee1, 0xc1762762},
+{'q', 0xc11ca4b3, 0xc130c880},
+{0, 0xc11ca4b3, 0xc1e32204},
+{'q', 0x00000000, 0xc18377f0},
+{0, 0x40eaf70c, 0xc1f508f4},
+{'q', 0x40ed33ea, 0xc1644070},
+{0, 0x41a3ea86, 0xc1adfc68},
+{'9', 0xffc40068, 0xffc400f0},
+{'m', 0xbf7aa100, 0x41825984},
+{'q', 0xc135423c, 0x00000000},
+{0, 0xc19a67d6, 0x40a7d500},
+{'q', 0xc0ff1ad8, 0x40a7d510},
+{0, 0xc144ec4c, 0x417cde00},
+{'q', 0xc08abdc8, 0x4128f378},
+{0, 0xc08abdc8, 0x41b03948},
+{'9', 0x00430000, 0x00710015},
+{'l', 0x42438644, 0xc2513b14},
+{'9', 0xffd9ffd0, 0xffd9ff83},
+{'m', 0x41bec4ec, 0x41cefe34},
+{'9', 0xffc90000, 0xff9ffff0},
+{'l', 0xc2407294, 0x424e6efe},
+{'q', 0x40b0c888, 0x4068ba38},
+{0, 0x41632204, 0x4068ba38},
+{'q', 0x413423d0, 0x00000000},
+{0, 0x4199d89e, 0xc0a7d508},
+{'q', 0x40ff1ae0, 0xc0a7d50c},
+{0, 0x4144ec50, 0xc17982b2},
+{'q', 0x408cfaa0, 0xc1259828},
+{0, 0x408cfaa0, 0xc1b157b8},
+{'@', 0x000000d9, 0x0000676d},/*        Ù        x-advance: 103.425781 */
+{'M', 0x42407293, 0xc16c157b},
+{'q', 0x41389d88, 0x00000000},
+{0, 0x418bdc32, 0xc0aa11e6},
+{'9', 0xffd60030, 0xff720043},
+{'4', 0xfe1b005d, 0x000000a5},
+{'l', 0xc13f5420, 0x4275dfc6},
+{'q', 0xc0762760, 0x419d33e9},
+{0, 0xc1762760, 0x41e8ba2e},
+{'q', 0xc1389d90, 0x4115ee18},
+{0, 0xc2001ca5, 0x4115ee18},
+{'q', 0xc193b13c, 0xb4000000},
+{0, 0xc1e4cfab, 0xc102e8ba},
+{'q', 0xc1211e6e, 0xc1040729},
+{0, 0xc1211e6e, 0xc1bada68},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0052, 0x000000a5},
+{'l', 0xc12b3058, 0x426292cb},
+{'8', 0x60f630f6, 0x59283900},
+{'9', 0x001f0028, 0x001f0070},
+{'m', 0x4185b4ce, 0xc2b879bc},
+{'l', 0xc1aa11e6, 0xc18377f4},
+{'l', 0x3f211e80, 0xc0407280},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x41632204, 0x418a2e8c},
+{'l', 0xbefaa100, 0x400abdc0},
+{'l', 0xc11b8648, 0x00000000},
+{'@', 0x000000da, 0x0000676d},/*        Ú        x-advance: 103.425781 */
+{'M', 0x42407293, 0xc16c157b},
+{'q', 0x41389d88, 0x00000000},
+{0, 0x418bdc32, 0xc0aa11e6},
+{'9', 0xffd60030, 0xff720043},
+{'4', 0xfe1b005d, 0x000000a5},
+{'l', 0xc13f5420, 0x4275dfc6},
+{'q', 0xc0762760, 0x419d33e9},
+{0, 0xc1762760, 0x41e8ba2e},
+{'q', 0xc1389d90, 0x4115ee18},
+{0, 0xc2001ca5, 0x4115ee18},
+{'q', 0xc193b13c, 0xb4000000},
+{0, 0xc1e4cfab, 0xc102e8ba},
+{'q', 0xc1211e6e, 0xc1040729},
+{0, 0xc1211e6e, 0xc1bada68},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0052, 0x000000a5},
+{'l', 0xc12b3058, 0x426292cb},
+{'8', 0x60f630f6, 0x59283900},
+{'9', 0x001f0028, 0x001f0070},
+{'m', 0x40e20390, 0xc2b879bc},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c8a, 0xc18a2e8c},
+{'l', 0x41955ee0, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1ac, 0x418377f4},
+{'l', 0xc126b69c, 0x00000000},
+{'@', 0x000000db, 0x0000676d},/*        Û        x-advance: 103.425781 */
+{'M', 0x42407293, 0xc16c157b},
+{'q', 0x41389d88, 0x00000000},
+{0, 0x418bdc32, 0xc0aa11e6},
+{'9', 0xffd60030, 0xff720043},
+{'4', 0xfe1b005d, 0x000000a5},
+{'l', 0xc13f5420, 0x4275dfc6},
+{'q', 0xc0762760, 0x419d33e9},
+{0, 0xc1762760, 0x41e8ba2e},
+{'q', 0xc1389d90, 0x4115ee18},
+{0, 0xc2001ca5, 0x4115ee18},
+{'q', 0xc193b13c, 0xb4000000},
+{0, 0xc1e4cfab, 0xc102e8ba},
+{'q', 0xc1211e6e, 0xc1040729},
+{0, 0xc1211e6e, 0xc1bada68},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0052, 0x000000a5},
+{'l', 0xc12b3058, 0x426292cb},
+{'8', 0x60f630f6, 0x59283900},
+{'9', 0x001f0028, 0x001f0070},
+{'m', 0x4228643f, 0xc2bc880f},
+{'0', 0x00ad10fe, 0x00feac9f},
+{'l', 0xc1864406, 0x4128f378},
+{'l', 0xc13d1744, 0x00000000},
+{'l', 0x3eb30500, 0xc001ca60},
+{'l', 0x41adfc6c, 0xc19a67d0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x415b4cf8, 0x419a67d0},
+{'@', 0x000000dc, 0x0000676d},/*        Ü        x-advance: 103.425781 */
+{'M', 0x42407293, 0xc16c157b},
+{'q', 0x41389d88, 0x00000000},
+{0, 0x418bdc32, 0xc0aa11e6},
+{'9', 0xffd60030, 0xff720043},
+{'4', 0xfe1b005d, 0x000000a5},
+{'l', 0xc13f5420, 0x4275dfc6},
+{'q', 0xc0762760, 0x419d33e9},
+{0, 0xc1762760, 0x41e8ba2e},
+{'q', 0xc1389d90, 0x4115ee18},
+{0, 0xc2001ca5, 0x4115ee18},
+{'q', 0xc193b13c, 0xb4000000},
+{0, 0xc1e4cfab, 0xc102e8ba},
+{'q', 0xc1211e6e, 0xc1040729},
+{0, 0xc1211e6e, 0xc1bada68},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0052, 0x000000a5},
+{'l', 0xc12b3058, 0x426292cb},
+{'8', 0x60f630f6, 0x59283900},
+{'9', 0x001f0028, 0x001f0070},
+{'m', 0x41c101ca, 0xc2b879bc},
+{'l', 0x40407280, 0xc17508f8},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d0, 0xc17508f8},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f8},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x000000dd, 0x00005f86},/*        Ý        x-advance: 95.523438 */
+{'M', 0x424a847a, 0x00000000},
+{'l', 0xc1a479bd, 0x00000000},
+{'l', 0x40faa11c, 0xc221ada6},
+{'l', 0xc1cefe34, 0xc2687292},
+{'l', 0x41a35b4c, 0x00000000},
+{'l', 0x4190e526, 0x42293b13},
+{'l', 0x42049660, 0xc2293b13},
+{'4', 0x000000b4, 0x01d0fe82},
+{'6', 0x0143ffc2, 0xfca9fffc},
+{'l', 0x3efaa100, 0xc00abdc0},
+{'l', 0x41970c88, 0xc18a2e8c},
+{'l', 0x41955ee0, 0x00000000},
+{'l', 0xbf211e80, 0x40407280},
+{'l', 0xc1d7f1ac, 0x418377f4},
+{'l', 0xc126b698, 0x00000000},
+{'@', 0x000000de, 0x00005f86},/*        Þ        x-advance: 95.523438 */
+{'M', 0x41b92cc1, 0x00000000},
+{'l', 0xc1a508f3, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x000000a5, 0x007dffe8},
+{'l', 0x41899f54, 0x00000000},
+{'q', 0x41899f52, 0x00000000},
+{0, 0x41d5b4ce, 0x40faa120},
+{'q', 0x41194968, 0x40faa120},
+{0, 0x41194968, 0x41ad6d34},
+{'q', 0x00000000, 0x417bbf8c},
+{0, 0xc12c4ec8, 0x41c8479c},
+{'9', 0x004affab, 0x004aff1b},
+{'4', 0x0000ff2d, 0x0097ffe3},
+{'m', 0x40d9101c, 0xc20b4cfb},
+{'l', 0x41a1ada6, 0x00000000},
+{'q', 0x412d6d34, 0x00000000},
+{0, 0x4181ca4a, 0xc081ca48},
+{'8', 0x962be02b, 0xaaddc700},
+{'9', 0xffe2ffdd, 0xffe2ff9a},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0xc0c72930, 0x41ffaa12},
+{'@', 0x000000df, 0x0000577b},/*        ß        x-advance: 87.480469 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x415fc6b7, 0xc28fa2e9},
+{'q', 0x405fc6b0, 0xc1849660},
+{0, 0x41525982, 0xc1c22038},
+{'q', 0x411b8642, 0xc0f62760},
+{0, 0x41d13b13, 0xc0f62760},
+{'q', 0x414a847c, 0x00000000},
+{0, 0x419f70ca, 0x40ac4ec0},
+{'q', 0x40eaf700, 0x40ac4ed0},
+{0, 0x40eaf700, 0x416c1580},
+{'q', 0x00000000, 0x41389d88},
+{0, 0xc1200000, 0x41982af4},
+{'8', 0x35c023d0, 0x26f011f0},
+{'8', 0x280f1600, 0x2f37110f},
+{'q', 0x410cfaa0, 0x40d25988},
+{0, 0x410cfaa0, 0x418f3780},
+{'q', 0x00000000, 0x413ada67},
+{0, 0xc0f86440, 0x4194cfaa},
+{'q', 0xc0f62760, 0x40dd89d8},
+{0, 0xc1a35b4e, 0x40dd89d8},
+{'9', 0x0000ff8f, 0xffe1ff4d},
+{'l', 0x40982af8, 0xc1501ca4},
+{'8', 0x1a46142b, 0x0536051a},
+{'8', 0xe943002c, 0xc117e917},
+{'8', 0xcef1e400, 0xcfcceaf1},
+{'8', 0xcacce7dd, 0xbdf0e3f0},
+{'8', 0xbc13da00, 0xc13fe213},
+{'8', 0xc43edf2b, 0xc513e513},
+{'8', 0xd2ece300, 0xf0c5f0ec},
+{'8', 0x239a00c0, 0x6dcd23dc},
+{'l', 0xc15c6b6a, 0x428ecc15},
+{'l', 0xc19d33eb, 0x00000000},
+{'@', 0x000000e0, 0x00004fa6},/*        à        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfe84fffa},
+{'l', 0xc1abbf8e, 0xc19a67d4},
+{'l', 0x3f0f3780, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d380, 0x400abdc0},
+{'l', 0xc1259828, 0x00000000},
+{'@', 0x000000e1, 0x00004fa6},/*        á        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfe84ffa2},
+{'l', 0x3ed6d380, 0xc00abdc0},
+{'l', 0x418a2e8c, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b50, 0x00000000},
+{'@', 0x000000e2, 0x00004fa6},/*        â        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfe7400bd},
+{'0', 0x00ad0ffe, 0x00fe95a4},
+{'l', 0xc18abdc4, 0x4156d340},
+{'l', 0xc13d1746, 0x00000000},
+{'l', 0x3eb30580, 0xbffaa100},
+{'l', 0x41b3055f, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x41525984, 0x41b1e6f0},
+{'@', 0x000000e3, 0x00004fa6},/*        ã        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfe840041},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af6, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada8, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea80, 0x417cddf8},
+{'q', 0xc09a67d0, 0x4095ee20},
+{0, 0xc13f5424, 0x4095ee20},
+{'@', 0x000000e4, 0x00004fa6},/*        ä        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfe7b0028},
+{'l', 0x404072a0, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d8, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e525a, 0x00000000},
+{'@', 0x000000e5, 0x00004fa6},/*        å        x-advance: 79.648438 */
+{'M', 0x427982af, 0x3f33055f},
+{'8', 0xe9aa00c9, 0xc2e2e9e2},
+{'9', 0xffec0000, 0xffdd0002},
+{'l', 0xbed6d300, 0x00000000},
+{'8', 0x64a448d2, 0x1a911ad3},
+{'q', 0xc11ca4b2, 0xb4000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'q', 0xb3800000, 0xc14efe34},
+{0, 0x410e1910, 0xc19c157c},
+{'9', 0xffcb0047, 0xffc900e7},
+{'l', 0x4155b4d0, 0xbe56d400},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064408, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a982b0, 0x40a35b50},
+{'q', 0x40d91020, 0x40a35b40},
+{0, 0x40d91020, 0x4178643c},
+{'9', 0x00140000, 0x0057fff3},
+{'l', 0xc09ee190, 0x41c57b86},
+{'8', 0x28fc19fc, 0x14050d00},
+{'8', 0x0a0c0705, 0x040e0307},
+{'8', 0x000b0007, 0xfd220010},
+{'l', 0xbf7aa100, 0x412d6d34},
+{'8', 0x0ad108e9, 0x01cf01e8},
+{'m', 0xc14a8478, 0xc20f7f1a},
+{'l', 0xc135423c, 0x00000000},
+{'8', 0x1a9901bf, 0x48db19db},
+{'8', 0x3d152700, 0x153b1516},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcd000c, 0xfdf9008b},
+{'8', 0x64d73a00, 0x299c29d8},
+{'8', 0xd79b00c5, 0x9cd8d7d8},
+{'8', 0x9c29c600, 0xd764d729},
+{'8', 0x2964003a, 0x64292929},
+{'m', 0xc10e1910, 0x00000000},
+{'8', 0xcfece400, 0xecceecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x33141f00, 0x14311414},
+{'8', 0xec32001d, 0xce14ec14},
+{'@', 0x000000e6, 0x00007f57},/*        æ        x-advance: 127.339844 */
+{'M', 0x428fa2e9, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d0, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x41891020, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca8, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc14, 0x408abdc4},
+{'q', 0xc1a62764, 0xb4000000},
+{0, 0xc1dc6b6a, 0xc17508f3},
+{'8', 0x47c12ce4, 0x26b41ade},
+{'q', 0xc0a35b50, 0x3fc4ec4f},
+{0, 0xc156d340, 0x3fc4ec4f},
+{'q', 0xc11ca4b3, 0x00000000},
+{0, 0xc17aa11e, 0xc0b9bbf9},
+{'q', 0xc0b9bbf8, 0xc0bbf8d7},
+{0, 0xc0b9bbf8, 0xc1708f38},
+{'9', 0xff2b0000, 0xff2b012e},
+{'l', 0x4155b4cc, 0x00000000},
+{'8', 0xb70bcb0b, 0xb9b9b900},
+{'8', 0x14b200cc, 0x3add14e7},
+{'l', 0xc1932204, 0xc00abdc0},
+{'q', 0x40182af8, 0xc1211e70},
+{0, 0x412b3056, 0xc17508f8},
+{'q', 0x41064406, 0xc0a7d500},
+{0, 0x41b1e6ef, 0xc0a7d500},
+{'q', 0x41679bc0, 0x00000000},
+{0, 0x41a7d508, 0x40fcde00},
+{'q', 0x411ca4b8, 0xc0fcde00},
+{0, 0x41bf5424, 0xc0fcde00},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423d0, 0x40f1ada0},
+{'q', 0x40ff1ad0, 0x40ef70c8},
+{0, 0x40ff1ad0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xfff3ff62},
+{'l', 0xc13423d0, 0x00000000},
+{'8', 0x199d00c1, 0x48dd19dd},
+{'8', 0x3e132800, 0x15371513},
+{'8', 0xdd54002e, 0xa135dc26},
+{'6', 0xffcf000c, 0xffa501a2},
+{'l', 0x3e56d400, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'l', 0x41f11e70, 0x00000000},
+{'@', 0x000000e7, 0x00004fa6},/*        ç        x-advance: 79.648438 */
+{'M', 0x4215ee19, 0xc1419102},
+{'8', 0xe34c002e, 0xa930e31e},
+{'l', 0x41979bbe, 0x405fc6b8},
+{'q', 0xc0ef70c0, 0x41c45d17},
+{0, 0xc20ea847, 0x41c45d17},
+{'q', 0xc1762762, 0xb4000000},
+{0, 0xc1bda67d, 0xc0faa11f},
+{'q', 0xc104072a, 0xc0fcddfb},
+{0, 0xc104072a, 0xc1af1ada},
+{'q', 0x35000000, 0xc15a2e8c},
+{0, 0x40b0c882, 0xc1ccc158},
+{'q', 0x40b0c880, 0xc13f5420},
+{0, 0x416af70d, 0xc18c6b68},
+{'q', 0x4113b13a, 0xc0b30560},
+{0, 0x41b77f1b, 0xc0b30560},
+{'q', 0x415377f0, 0x00000000},
+{0, 0x41a8f376, 0x40d6d340},
+{'9', 0x0035003f, 0x00940047},
+{'l', 0xc19ee190, 0x3fcddfc0},
+{'8', 0x96a396fa, 0x29a300c5},
+{'q', 0xc086440c, 0x40a35b50},
+{0, 0xc0f3ea88, 0x4191745e},
+{'q', 0xbfcddfc0, 0x4100abdc},
+{0, 0xbfcddfc0, 0x413bf8d6},
+{'9', 0x00820000, 0x00820063},
+{'m', 0xc127d50a, 0x422745d2},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x4001ca48, 0xc102e8ba},
+{'8', 0x032d0317, 0xf742002d},
+{'8', 0xdf14f614, 0xddc3dd00},
+{'0', 0x01f100f3, 0x004ea136},
+{'l', 0xc056d340, 0x40b9bbf9},
+{'8', 0x133f0027, 0x36181118},
+{'q', 0x00000000, 0x40d9101e},
+{0, 0xc0bbf8d8, 0x412c4ec5},
+{'q', 0xc0bbf8d8, 0x407aa120},
+{0, 0xc1920395, 0x407aa120},
+{'@', 0x000000e8, 0x00004fa6},/*        è        x-advance: 79.648438 */
+{'M', 0x41c8479c, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d4, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x4189101c, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca4, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc16, 0x408abdc4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1ba4b30, 0xc100abdc},
+{'q', 0xc1064408, 0xc101ca4b},
+{0, 0xc1064408, 0xc1b4b305},
+{'q', 0x35000000, 0xc1679bc2},
+{0, 0x40a11e70, 0xc1ca8479},
+{'q', 0x40a11e6e, 0xc12e8ba4},
+{0, 0x41644072, 0xc185b4d2},
+{'q', 0x4114cfaa, 0xc0b9bbf0},
+{0, 0x41abbf8d, 0xc0b9bbf0},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423ce, 0x40f1ada0},
+{'q', 0x40ff1ae0, 0x40ef70c8},
+{0, 0x40ff1ae0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xff980103},
+{'l', 0x3e56d300, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'6', 0x000000f1, 0xfedeffc5},
+{'l', 0xc1abbf8e, 0xc19a67d4},
+{'l', 0x3f0f3780, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d300, 0x400abdc0},
+{'l', 0xc125982c, 0x00000000},
+{'@', 0x000000e9, 0x00004fa6},/*        é        x-advance: 79.648438 */
+{'M', 0x41c8479c, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d4, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x4189101c, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca4, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc16, 0x408abdc4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1ba4b30, 0xc100abdc},
+{'q', 0xc1064408, 0xc101ca4b},
+{0, 0xc1064408, 0xc1b4b305},
+{'q', 0x35000000, 0xc1679bc2},
+{0, 0x40a11e70, 0xc1ca8479},
+{'q', 0x40a11e6e, 0xc12e8ba4},
+{0, 0x41644072, 0xc185b4d2},
+{'q', 0x4114cfaa, 0xc0b9bbf0},
+{0, 0x41abbf8d, 0xc0b9bbf0},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423ce, 0x40f1ada0},
+{'q', 0x40ff1ae0, 0x40ef70c8},
+{0, 0x40ff1ae0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xff980103},
+{'l', 0x3e56d300, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'6', 0x000000f1, 0xfedeff5a},
+{'l', 0x3ed6d300, 0xc00abdc0},
+{'l', 0x418a2e8c, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000ea, 0x00004fa6},/*        ê        x-advance: 79.648438 */
+{'M', 0x41c8479c, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d4, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x4189101c, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca4, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc16, 0x408abdc4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1ba4b30, 0xc100abdc},
+{'q', 0xc1064408, 0xc101ca4b},
+{0, 0xc1064408, 0xc1b4b305},
+{'q', 0x35000000, 0xc1679bc2},
+{0, 0x40a11e70, 0xc1ca8479},
+{'q', 0x40a11e6e, 0xc12e8ba4},
+{0, 0x41644072, 0xc185b4d2},
+{'q', 0x4114cfaa, 0xc0b9bbf0},
+{0, 0x41abbf8d, 0xc0b9bbf0},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423ce, 0x40f1ada0},
+{'q', 0x40ff1ae0, 0x40ef70c8},
+{0, 0x40ff1ae0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xff980103},
+{'l', 0x3e56d300, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'6', 0x000000f1, 0xfece007e},
+{'0', 0x00ad0ffe, 0x00fe95a4},
+{'l', 0xc18abdc4, 0x4156d340},
+{'l', 0xc13d1746, 0x00000000},
+{'l', 0x3eb30580, 0xbffaa100},
+{'l', 0x41b3055f, 0xc1b1e6f0},
+{'l', 0x41801ca4, 0x00000000},
+{'l', 0x41525984, 0x41b1e6f0},
+{'@', 0x000000eb, 0x00004fa6},/*        ë        x-advance: 79.648438 */
+{'M', 0x41c8479c, 0xc2052598},
+{'8', 0x31fd15fd, 0x5b193b00},
+{'q', 0x40525980, 0x407aa11c},
+{0, 0x411a67d4, 0x407aa11c},
+{'9', 0x00000052, 0xffa20077},
+{'l', 0x4189101c, 0x40a5982c},
+{'q', 0xc0a7d510, 0x4131e6ef},
+{0, 0xc1501ca4, 0x417745d0},
+{'q', 0xc0f86440, 0x408abdc4},
+{0, 0xc1a2cc16, 0x408abdc4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1ba4b30, 0xc100abdc},
+{'q', 0xc1064408, 0xc101ca4b},
+{0, 0xc1064408, 0xc1b4b305},
+{'q', 0x35000000, 0xc1679bc2},
+{0, 0x40a11e70, 0xc1ca8479},
+{'q', 0x40a11e6e, 0xc12e8ba4},
+{0, 0x41644072, 0xc185b4d2},
+{'q', 0x4114cfaa, 0xc0b9bbf0},
+{0, 0x41abbf8d, 0xc0b9bbf0},
+{'q', 0x4169d8a0, 0x00000000},
+{0, 0x41b423ce, 0x40f1ada0},
+{'q', 0x40ff1ae0, 0x40ef70c8},
+{0, 0x40ff1ae0, 0x41a982b0},
+{'9', 0x00370000, 0x0078fff3},
+{'6', 0x0000fe79, 0xff980103},
+{'l', 0x3e56d300, 0xc07aa120},
+{'8', 0xa9e5c500, 0xe5b8e5e5},
+{'8', 0x25a600cb, 0x6ccc24dc},
+{'6', 0x000000f1, 0xfed5fff1},
+{'l', 0x40407290, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d0, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x000000ec, 0x000027ca},/*        ì        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd6b00ce},
+{'l', 0xc1abbf8e, 0xc19a67d4},
+{'l', 0x3f0f3790, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d300, 0x400abdc0},
+{'l', 0xc125982c, 0x00000000},
+{'@', 0x000000ed, 0x000027ca},/*        í        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd6b007c},
+{'l', 0x3ed6d340, 0xc00abdc0},
+{'l', 0x418a2e8b, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000ee, 0x000027ca},/*        î        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd5b019a},
+{'0', 0x00ad0ffe, 0x00fe95a4},
+{'l', 0xc18abdc3, 0x4156d340},
+{'l', 0xc13d1745, 0x00000000},
+{'l', 0x3eb30558, 0xbffaa100},
+{'l', 0x41b3055f, 0xc1b1e6f0},
+{'l', 0x41801ca5, 0x00000000},
+{'l', 0x41525980, 0x41b1e6f0},
+{'@', 0x000000ef, 0x000027ca},/*        ï        x-advance: 39.789062 */
+{'M', 0x401ca4b3, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd62010b},
+{'l', 0x404072a0, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d8, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e525a, 0x00000000},
+{'@', 0x000000f0, 0x0000577b},/*        ð        x-advance: 87.480469 */
+{'M', 0x4238e525, 0xc2b6847a},
+{'9', 0xffbdffbb, 0xff9cff84},
+{'l', 0x41a3ea85, 0x00000000},
+{'9', 0x00150028, 0x0034004e},
+{'4', 0xffc400a5, 0x0062ffef},
+{'l', 0xc1223ce0, 0x4071ada0},
+{'q', 0x40d49660, 0x41099f50},
+{0, 0x411a67d8, 0x418cfaa0},
+{'q', 0x40407280, 0x410f3780},
+{0, 0x40407280, 0x41a1ada6},
+{'q', 0x00000000, 0x41c60abe},
+{0, 0xc13f5420, 0x421a203a},
+{'q', 0xc13f5424, 0x415c6b68},
+{0, 0xc2049661, 0x415c6b68},
+{'q', 0xc17508f2, 0xb4000000},
+{0, 0xc1c07292, 0xc100abdc},
+{'q', 0xc10bdc32, 0xc101ca4b},
+{0, 0xc10bdc32, 0xc1b03949},
+{'q', 0xb5000000, 0xc19055ef},
+{0, 0x4131e6ef, 0xc1e70c89},
+{'q', 0x4131e6f1, 0xc12e8ba4},
+{0, 0x41f1ada6, 0xc12e8ba4},
+{'8', 0x0a470022, 0x183a0a25},
+{'9', 0xffb2ffef, 0xff6dffbb},
+{'4', 0x003eff66, 0xff9c0012},
+{'6', 0xffe10053, 0x0121ffff},
+{'q', 0xc11a67d4, 0x00000000},
+{0, 0xc1786440, 0x40f1ada8},
+{'q', 0xc0bbf8d4, 0x40f1ada8},
+{0, 0xc0bbf8d4, 0x419ee191},
+{'8', 0x5b1e3900, 0x2152211e},
+{'8', 0xe1580030, 0xa83fe028},
+{'q', 0x40377f10, 0xc0e20394},
+{0, 0x40377f10, 0xc17508f2},
+{'8', 0xb6e3d100, 0xe6a9e6e3},
+{'@', 0x000000f1, 0x0000577b},/*        ñ        x-advance: 87.480469 */
+{'M', 0x424e6efe, 0x00000000},
+{'l', 0x41040728, 0xc2266efe},
+{'8', 0xa40ebb0e, 0xb8abb800},
+{'q', 0xc0e20390, 0x00000000},
+{0, 0xc1513b14, 0x40b77f18},
+{'9', 0x002dffd0, 0x0070ffc4},
+{'4', 0x0153ffbe, 0x0000ff63},
+{'l', 0x4139bbf9, 0xc26e0abe},
+{'9', 0xffd40008, 0xff7f0015},
+{'l', 0x4195ee18, 0x00000000},
+{'8', 0x2efb0500, 0x38f929fb},
+{'l', 0x3e56d400, 0x00000000},
+{'q', 0x40a7d508, 0xc0e8ba30},
+{0, 0x41389d88, 0xc12c4ec8},
+{'q', 0x40cba2e8, 0xc05fc6a0},
+{0, 0x4168ba30, 0xc05fc6a0},
+{'q', 0x412a11e8, 0x00000000},
+{0, 0x41801ca4, 0x40a35b50},
+{'q', 0x40ac4ec0, 0x40a35b40},
+{0, 0x40ac4ec0, 0x416c1578},
+{'8', 0x2cfd0d00, 0x2ef91efd},
+{'4', 0x016dffb9, 0x0000ff64},
+{'m', 0x414a8478, 0xc2a5745d},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af6, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada4, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea80, 0x417cddf8},
+{'q', 0xc09a67e0, 0x4095ee20},
+{0, 0xc13f5428, 0x4095ee20},
+{'@', 0x000000f2, 0x0000577b},/*        ò        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'9', 0xffc00015, 0xff6e0019},
+{'m', 0xc12a11e8, 0xc211bbf9},
+{'l', 0xc1abbf8e, 0xc19a67d4},
+{'l', 0x3f0f3780, 0xc04072a0},
+{'l', 0x419055ee, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d300, 0x400abdc0},
+{'l', 0xc125982c, 0x00000000},
+{'@', 0x000000f3, 0x0000577b},/*        ó        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'9', 0xffc00015, 0xff6e0019},
+{'m', 0xc1982af8, 0xc211bbf9},
+{'l', 0x3ed6d380, 0xc00abdc0},
+{'l', 0x418a2e8a, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000f4, 0x0000577b},/*        ô        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'9', 0xffc00015, 0xff6e0019},
+{'m', 0x416c1578, 0xc2199101},
+{'0', 0x00ad0ffe, 0x00fe95a4},
+{'l', 0xc18abdc2, 0x4156d340},
+{'l', 0xc13d1746, 0x00000000},
+{'l', 0x3eb30540, 0xbffaa100},
+{'l', 0x41b3055e, 0xc1b1e6f0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x41525980, 0x41b1e6f0},
+{'@', 0x000000f5, 0x0000577b},/*        õ        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'9', 0xffc00015, 0xff6e0019},
+{'m', 0x3d8f3600, 0xc211bbf9},
+{'8', 0xf6d100e8, 0xe9d5f6ea},
+{'8', 0xe8d9f3ec, 0xf6ddf6ed},
+{'8', 0x0ed900e9, 0x36e30df1},
+{'l', 0xc1182af6, 0x00000000},
+{'q', 0x402e8ba0, 0xc130c880},
+{0, 0x40f1ada4, 0xc17bbf90},
+{'8', 0xda60da27, 0x0a300019},
+{'8', 0x182c0a17, 0x17270c14},
+{'8', 0x0a220a12, 0xf1270018},
+{'9', 0xfff1000f, 0xffcb001d},
+{'l', 0x41170c88, 0x00000000},
+{'q', 0xc02e8ba0, 0x4130c880},
+{0, 0xc0f3ea80, 0x417cddf8},
+{'q', 0xc09a67d0, 0x4095ee20},
+{0, 0xc13f5424, 0x4095ee20},
+{'@', 0x000000f6, 0x0000577b},/*        ö        x-advance: 87.480469 */
+{'M', 0x42a5bbf9, 0xc23f0c88},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'q', 0xc173ea84, 0xb4000000},
+{0, 0xc1c101ca, 0xc102e8ba},
+{'q', 0xc10e1910, 0xc1040729},
+{0, 0xc10e1910, 0xc1b423ce},
+{'q', 0x35000000, 0xc160e526},
+{0, 0x40b0c882, 0xc1c7292d},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'q', 0x418377f2, 0x00000000},
+{0, 0x41c8479a, 0x40f62760},
+{'9', 0x003c0044, 0x00ac0044},
+{'m', 0xc1a479bc, 0x3fbbf8e0},
+{'q', 0x00000000, 0xc18a2e8c},
+{0, 0xc168ba30, 0xc18a2e8c},
+{'8', 0x219b00c1, 0x66c621db},
+{'q', 0xc02a11e0, 0x410880e4},
+{0, 0xc02a11e0, 0x418377f1},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x4168ba2c, 0x4190e526},
+{'8', 0xe163003e, 0xa039e124},
+{'9', 0xffc00015, 0xff6e0019},
+{'m', 0xc013b140, 0xc21635b5},
+{'l', 0x40407290, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d0, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x000000f7, 0x00004e99},/*        ÷        x-advance: 78.597656 */
+{'M', 0x409a67d5, 0xc21f292d},
+{'l', 0x00000000, 0xc17aa11c},
+{'4', 0x0000023e, 0x007d0000},
+{'6', 0x0000fdc2, 0x00df00db},
+{'l', 0x00000000, 0xc1825983},
+{'4', 0x00000085, 0x00820000},
+{'6', 0x0000ff7b, 0xfe460000},
+{'l', 0x00000000, 0xc1825984},
+{'l', 0x41852598, 0x00000000},
+{'l', 0x00000000, 0x41825984},
+{'l', 0xc1852598, 0x00000000},
+{'@', 0x000000f8, 0x0000577b},/*        ø        x-advance: 87.480469 */
+{'M', 0x403bf8d7, 0x402a11e7},
+{'l', 0x411292cc, 0xc12a11e7},
+{'q', 0xc0f62763, 0xc0ff1ada},
+{0, 0xc0f62763, 0xc1aaa11e},
+{'q', 0x00000000, 0xc160e528},
+{0, 0x40b0c881, 0xc1c7292e},
+{'q', 0x40b3055e, 0xc12d6d34},
+{0, 0x417dfc6b, 0xc1864406},
+{'q', 0x412479bc, 0xc0c07290},
+{0, 0x41bb69a0, 0xc0c07290},
+{'9', 0x00000058, 0x001e0098},
+{'4', 0xffda0021, 0x00000069},
+{'l', 0xc115ee20, 0x412e8ba0},
+{'q', 0x40d01cb0, 0x40eaf708},
+{0, 0x40d01cb0, 0x419af70c},
+{'q', 0x00000000, 0x41679bc0},
+{0, 0xc0b77f20, 0x41cddfc7},
+{'q', 0xc0b54240, 0x413423cd},
+{0, 0xc1813b14, 0x418abdc3},
+{'q', 0xc126b698, 0x40c2af70},
+{0, 0xc1bc880e, 0x40c2af70},
+{'9', 0x0000ffb3, 0xffe5ff78},
+{'4', 0x0025ffe0, 0x0000ff96},
+{'m', 0x41b0c881, 0xc2033056},
+{'9', 0x001b0000, 0x00340004},
+{'l', 0x41fe8ba2, 0xc213699f},
+{'8', 0xe8b3e8e5, 0x219b00c1},
+{'q', 0xc095ee1c, 0x40864408},
+{0, 0xc0eaf710, 0x414cc158},
+{'9', 0x0044ffeb, 0x0083ffeb},
+{'m', 0x42151746, 0xc1813b13},
+{'9', 0xffef0000, 0xffdffffe},
+{'l', 0xc1f86441, 0x421055ee},
+{'8', 0x1344131b, 0xe163003e},
+{'q', 0x4093b138, 0xc07f1ad8},
+{0, 0x40e67d50, 0xc1407292},
+{'q', 0x402a11e0, 0xc100abdc},
+{0, 0x40496610, 0xc19292cc},
+{'@', 0x000000f9, 0x0000577b},/*        ù        x-advance: 87.480469 */
+{'M', 0x420f377f, 0xc2975424},
+{'l', 0xc104072a, 0x42266eff},
+{'8', 0x5cf244f2, 0x48554800},
+{'q', 0x40e20398, 0x00000000},
+{0, 0x41501ca4, 0xc0b5423e},
+{'9', 0xffd30030, 0xff8f003c},
+{'4', 0xfead0042, 0x0000009d},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x002cfff8, 0x0081ffeb},
+{'l', 0xc195ee1a, 0x00000000},
+{'8', 0xd205fb00, 0xc808d705},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0aa11e8, 0x40ef70c9},
+{0, 0xc13ada68, 0x412e8ba3},
+{'q', 0xc0c96610, 0x4056d340},
+{0, 0xc1667d52, 0x4056d340},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc1801ca4, 0xc0a35b4d},
+{'q', 0xc0ac4ec7, 0xc0a35b4d},
+{0, 0xc0ac4ec7, 0xc16c157a},
+{'8', 0xd403f300, 0xd207e103},
+{'4', 0xfe930047, 0x0000009c},
+{'m', 0x417745d0, 0xc0e20390},
+{'l', 0xc1abbf8d, 0xc19a67d4},
+{'l', 0x3f0f3780, 0xc04072a0},
+{'l', 0x419055ef, 0x00000000},
+{'l', 0x415a2e8c, 0x41a11e70},
+{'l', 0xbed6d380, 0x400abdc0},
+{'l', 0xc125982c, 0x00000000},
+{'@', 0x000000fa, 0x0000577b},/*        ú        x-advance: 87.480469 */
+{'M', 0x420f377f, 0xc2975424},
+{'l', 0xc104072a, 0x42266eff},
+{'8', 0x5cf244f2, 0x48554800},
+{'q', 0x40e20398, 0x00000000},
+{0, 0x41501ca4, 0xc0b5423e},
+{'9', 0xffd30030, 0xff8f003c},
+{'4', 0xfead0042, 0x0000009d},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x002cfff8, 0x0081ffeb},
+{'l', 0xc195ee1a, 0x00000000},
+{'8', 0xd205fb00, 0xc808d705},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0aa11e8, 0x40ef70c9},
+{0, 0xc13ada68, 0x412e8ba3},
+{'q', 0xc0c96610, 0x4056d340},
+{0, 0xc1667d52, 0x4056d340},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc1801ca4, 0xc0a35b4d},
+{'q', 0xc0ac4ec7, 0xc0a35b4d},
+{0, 0xc0ac4ec7, 0xc16c157a},
+{'8', 0xd403f300, 0xd207e103},
+{'4', 0xfe930047, 0x0000009c},
+{'m', 0x40cddfc8, 0xc0e20390},
+{'l', 0x3ed6d300, 0xc00abdc0},
+{'l', 0x418a2e8c, 0xc1a11e70},
+{'l', 0x419af70c, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25982, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000fb, 0x0000577b},/*        û        x-advance: 87.480469 */
+{'M', 0x420f377f, 0xc2975424},
+{'l', 0xc104072a, 0x42266eff},
+{'8', 0x5cf244f2, 0x48554800},
+{'q', 0x40e20398, 0x00000000},
+{0, 0x41501ca4, 0xc0b5423e},
+{'9', 0xffd30030, 0xff8f003c},
+{'4', 0xfead0042, 0x0000009d},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x002cfff8, 0x0081ffeb},
+{'l', 0xc195ee1a, 0x00000000},
+{'8', 0xd205fb00, 0xc808d705},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0aa11e8, 0x40ef70c9},
+{0, 0xc13ada68, 0x412e8ba3},
+{'q', 0xc0c96610, 0x4056d340},
+{0, 0xc1667d52, 0x4056d340},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc1801ca4, 0xc0a35b4d},
+{'q', 0xc0ac4ec7, 0xc0a35b4d},
+{0, 0xc0ac4ec7, 0xc16c157a},
+{'8', 0xd403f300, 0xd207e103},
+{'4', 0xfe930047, 0x0000009c},
+{'m', 0x42278d6d, 0xc11055e8},
+{'0', 0x00ad0ffe, 0x00fe95a4},
+{'l', 0xc18abdc4, 0x4156d340},
+{'l', 0xc13d1744, 0x00000000},
+{'l', 0x3eb30580, 0xbffaa100},
+{'l', 0x41b3055e, 0xc1b1e6f0},
+{'l', 0x41801ca6, 0x00000000},
+{'l', 0x41525980, 0x41b1e6f0},
+{'@', 0x000000fc, 0x0000577b},/*        ü        x-advance: 87.480469 */
+{'M', 0x420f377f, 0xc2975424},
+{'l', 0xc104072a, 0x42266eff},
+{'8', 0x5cf244f2, 0x48554800},
+{'q', 0x40e20398, 0x00000000},
+{0, 0x41501ca4, 0xc0b5423e},
+{'9', 0xffd30030, 0xff8f003c},
+{'4', 0xfead0042, 0x0000009d},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x002cfff8, 0x0081ffeb},
+{'l', 0xc195ee1a, 0x00000000},
+{'8', 0xd205fb00, 0xc808d705},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0aa11e8, 0x40ef70c9},
+{0, 0xc13ada68, 0x412e8ba3},
+{'q', 0xc0c96610, 0x4056d340},
+{0, 0xc1667d52, 0x4056d340},
+{'q', 0xc12a11e6, 0xb4000000},
+{0, 0xc1801ca4, 0xc0a35b4d},
+{'q', 0xc0ac4ec7, 0xc0a35b4d},
+{0, 0xc0ac4ec7, 0xc16c157a},
+{'8', 0xd403f300, 0xd207e103},
+{'4', 0xfe930047, 0x0000009c},
+{'m', 0x41bec4ec, 0xc102e8b8},
+{'l', 0x40407290, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8e0, 0xc17508f0},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f0},
+{'l', 0xc16e525c, 0x00000000},
+{'@', 0x000000fd, 0x00004fa6},/*        ý        x-advance: 79.648438 */
+{'M', 0x40c4ec4f, 0x41edc322},
+{'9', 0x0000ffca, 0xfff6ffa0},
+{'l', 0x402a11e7, 0xc15b4cfb},
+{'8', 0x05300516, 0xe74c002b},
+{'9', 0xffe70021, 0xffad0042},
+{'l', 0x3ffaa120, 0xc056d33f},
+{'4', 0xfdb1ff8a, 0x000000a2},
+{'l', 0x409ee190, 0x420b055f},
+{'8', 0x630b1103, 0x57075208},
+{'l', 0x3f982ae0, 0xc0259828},
+{'l', 0x411b8644, 0xc1a3ea85},
+{'4', 0xfee80090, 0x000000a7},
+{'l', 0xc236efe4, 0x429f4cfb},
+{'q', 0xc0ef70c8, 0x413ada66},
+{0, 0xc143cdde, 0x418377f1},
+{'8', 0x38b226db, 0x11a411d8},
+{'m', 0x41f5982a, 0xc2e0e526},
+{'l', 0x3ed6d380, 0xc00abda0},
+{'l', 0x418a2e8a, 0xc1a11e70},
+{'l', 0x419af70e, 0x00000000},
+{'l', 0xbf0f3780, 0x404072a0},
+{'l', 0xc1d25984, 0x419a67d4},
+{'l', 0xc1235b4c, 0x00000000},
+{'@', 0x000000fe, 0x0000577b},/*        þ        x-advance: 87.480469 */
+{'M', 0x42083949, 0xc27f6276},
+{'l', 0x3ed6d380, 0x00000000},
+{'q', 0x40a11e70, 0xc0dfc6b0},
+{0, 0x412c4ec4, 0xc1211e70},
+{'q', 0x40b9bbf8, 0xc0496600},
+{0, 0x4160e524, 0xc0496600},
+{'q', 0x4131e6f0, 0x00000000},
+{0, 0x418abdc4, 0x40d49660},
+{'q', 0x40c72930, 0x40d25980},
+{0, 0x40c72930, 0x4190e524},
+{'q', 0x00000000, 0x41620398},
+{0, 0xc08abdc0, 0x41dc6b6a},
+{'q', 0xc08abdd0, 0x4155b4d0},
+{0, 0xc143cde0, 0x419e525a},
+{'q', 0xc0faa128, 0x40cba2e8},
+{0, 0xc1a00002, 0x40cba2e8},
+{'q', 0xc10bdc30, 0xb4000000},
+{0, 0xc1632204, 0xc068ba2f},
+{'9', 0xffe3ffd5, 0xffafffc3},
+{'l', 0xbe0f3780, 0x00000000},
+{'l', 0xbf7aa120, 0x40c9660b},
+{'l', 0xbfa11e70, 0x40db4cfb},
+{'l', 0xc0b5423c, 0x41e82af7},
+{'l', 0xc19ca4b3, 0x00000000},
+{'4', 0xfbd500ce, 0x0000009d},
+{'l', 0xc0b9bbf8, 0x41eee190},
+{'9', 0x0033fff6, 0x0050ffed},
+{'m', 0x4186d340, 0x3ed6d380},
+{'q', 0xc10cfaa4, 0x00000000},
+{0, 0xc1620398, 0x40c4ec48},
+{'q', 0xc0a7d504, 0x40c4ec50},
+{0, 0xc0f3ea80, 0x41944074},
+{'8', 0x55f734f7, 0x5d1d3b00},
+{'8', 0x2152211d, 0xdd5a0039},
+{'q', 0x40840728, 0xc08f377c},
+{0, 0x40d01ca8, 0xc1667d50},
+{'q', 0x40182af0, 0xc11ee192},
+{0, 0x40182af0, 0xc18c6b69},
+{'8', 0xa8ebc500, 0xe2bce2eb},
+{'@', 0x000000ff, 0x00004fa6},/*        ÿ        x-advance: 79.648438 */
+{'M', 0x40ed33ea, 0x41edc322},
+{'9', 0x0000ffca, 0xfff6ffa0},
+{'l', 0x402a11e9, 0xc15b4cfb},
+{'8', 0x05300516, 0xe74c002b},
+{'9', 0xffe70021, 0xffad0042},
+{'l', 0x3ffaa120, 0xc056d33f},
+{'4', 0xfdb1ff8a, 0x000000a2},
+{'l', 0x409ee190, 0x420b055f},
+{'8', 0x630b1103, 0x57075208},
+{'l', 0x3f982b00, 0xc0259828},
+{'l', 0x411b8644, 0xc1a3ea85},
+{'4', 0xfee80090, 0x000000a7},
+{'l', 0xc236efe4, 0x429f4cfb},
+{'q', 0xc0ef70c8, 0x413ada66},
+{0, 0xc143cde0, 0x418377f1},
+{'8', 0x38b226db, 0x11a411d8},
+{'m', 0x4244157c, 0xc2e2b69a},
+{'l', 0x40407290, 0xc17508f0},
+{'4', 0x00000079, 0x007affe8},
+{'6', 0x0000ff87, 0x0000ff0e},
+{'l', 0x403bf8d0, 0xc17508f8},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc0407290, 0x417508f8},
+{'l', 0xc16e5258, 0x00000000},
+{'@', 0x00000141, 0x0000577b},/*        Ł        x-advance: 87.480469 */
+{'M', 0x40211e6f, 0x00000000},
+{'l', 0x40d01ca4, 0xc206d33f},
+{'l', 0xc125982b, 0x408f3784},
+{'l', 0x4044ec4f, 0xc17bbf8e},
+{'l', 0x4125982b, 0xc0917460},
+{'l', 0x41182af6, 0xc244157a},
+{'l', 0x41a508f4, 0x00000000},
+{'l', 0xc0f3ea88, 0x421cec4e},
+{'l', 0x41bbf8d8, 0xc126b698},
+{'l', 0xc04072a0, 0x417982ac},
+{'l', 0xc1bbf8d6, 0x4126b698},
+{'l', 0xc0ac4ec4, 0x41de1911},
+{'l', 0x425377f2, 0x00000000},
+{'l', 0xc0496620, 0x417f1ada},
+{'l', 0xc292da68, 0x00000000},
+{'@', 0x000003c0, 0x000065f5},/*        π        x-advance: 101.957031 */
+{'M', 0x422f1ada, 0xc27982af},
+{'l', 0xbfd6d340, 0x410abdc4},
+{'q', 0xc0259820, 0x4157f1ac},
+{0, 0xc0d25980, 0x41d1ca4a},
+{'9', 0x0065ffe1, 0x00dbffaa},
+{'l', 0xc1a08f38, 0x00000000},
+{'q', 0x40cba2ea, 0xc1620394},
+{0, 0x4111745d, 0xc1ab3056},
+{'q', 0x402e8ba4, 0xc0eaf70c},
+{0, 0x40a11e6e, 0xc172cc14},
+{'9', 0xffc20012, 0xff7c001f},
+{'l', 0x3fe8ba30, 0xc113b138},
+{'8', 0x06ae00d4, 0x0dcc06db},
+{'l', 0x402e8ba4, 0xc15d89d4},
+{'8', 0xf52ef910, 0xfc3afc1e},
+{'l', 0x429f4cfb, 0x00000000},
+{'4', 0x006affec, 0x0000ff7e},
+{'l', 0xc0f86440, 0x421d7b86},
+{'8', 0x20fd12fd, 0x34323400},
+{'9', 0x00000010, 0xfffb002d},
+{'4', 0xffff000c, 0x0066ffef},
+{'8', 0x0acb05ec, 0x04c304df},
+{'8', 0xde9d00c0, 0x9ddedede},
+{'9', 0xffde0000, 0xffbd0006},
+{'l', 0x40ef70c8, 0xc21aaf70},
+{'l', 0xc1a8f378, 0xb6800000},
+{'@', 0x0000201c, 0x0000479b},/*        “        x-advance: 71.605469 */
+{'M', 0x422c9661, 0xc2687293},
+{'l', 0x402a11e0, 0xc15a2e8c},
+{'q', 0x3fcddfc0, 0xc102e8b8},
+{0, 0x4093b138, 0xc169d898},
+{'9', 0xffcc0018, 0xff9f0043},
+{'l', 0x414ba2e8, 0x00000000},
+{'8', 0x59b92ad6, 0x57dc2ee4},
+{'4', 0x00000047, 0x0092ffe4},
+{'6', 0x0000ff5f, 0x0000ff11},
+{'l', 0x402a11e4, 0xc15a2e8c},
+{'q', 0x3fd6d348, 0xc1099f50},
+{0, 0x40982af6, 0xc16f70c8},
+{'9', 0xffcd0018, 0xffa20040},
+{'l', 0x414cc15a, 0x00000000},
+{'8', 0x59b92ad6, 0x57dc2ee4},
+{'l', 0x410e1910, 0x00000000},
+{'l', 0xc0644070, 0x41920392},
+{'l', 0xc1a08f37, 0x00000000},
+{'@', 0x0000201d, 0x0000479b},/*        ”        x-advance: 71.605469 */
+{'M', 0x41cf8d6d, 0xc2687293},
+{'l', 0xc14ba2e8, 0x00000000},
+{'9', 0xffa3005b, 0xff4f006b},
+{'l', 0xc10e1910, 0x00000000},
+{'4', 0xff6f001c, 0x000000a0},
+{'l', 0xc02a11f0, 0x4156d338},
+{'q', 0xbfcddfc0, 0x41076278},
+{0, 0xc0917458, 0x416d33f0},
+{'9', 0x0032ffe9, 0x0061ffbe},
+{'m', 0x41f08f37, 0x00000000},
+{'l', 0xc14ddfc4, 0x00000000},
+{'9', 0xffa5005b, 0xff4f006d},
+{'l', 0xc10e1910, 0x00000000},
+{'4', 0xff6f001c, 0x000000a0},
+{'l', 0xc02a11e0, 0x4156d338},
+{'q', 0xbfd6d340, 0x410cfaa0},
+{0, 0xc09a67d0, 0x4172cc18},
+{'q', 0xc044ec60, 0x40cba2e8},
+{0, 0xc100abe0, 0x413d1744},
+{'@', 0x00002022, 0x00003223},/*        •        x-advance: 50.136719 */
+{'M', 0x423d1746, 0xc23d1746},
+{'q', 0x00000000, 0x41076278},
+{0, 0xc0c2af70, 0x4168ba30},
+{'q', 0xc0c2af70, 0x40c2af70},
+{0, 0xc168ba30, 0x40c2af70},
+{'q', 0xc1052598, 0x00000000},
+{0, 0xc1655ee1, 0xc0c07290},
+{'q', 0xc0c07293, 0xc0c2af70},
+{0, 0xc0c07293, 0xc169d8a0},
+{'q', 0x00000000, 0xc10880e4},
+{0, 0x40be35b5, 0xc1679bc0},
+{'q', 0x40c07290, 0xc0c07290},
+{0, 0x41667d50, 0xc0c07290},
+{'q', 0x410880e4, 0x00000000},
+{0, 0x4168ba30, 0x40c07290},
+{'q', 0x40c2af70, 0x40be35b8},
+{0, 0x40c2af70, 0x41679bc0},
+{'@', 0x00002026, 0x00008f37},/*        …        x-advance: 143.214844 */
+{'M', 0x4114cfaa, 0x00000000},
+{'l', 0x40840728, 0xc1aaa11e},
+{'4', 0x000000a1, 0x00aaffdf},
+{'6', 0x0000ff5f, 0x0000016d},
+{'l', 0x40840728, 0xc1aaa11e},
+{'4', 0x000000a1, 0x00aaffdf},
+{'6', 0x0000ff5f, 0x0000016b},
+{'l', 0x40840730, 0xc1aaa11e},
+{'l', 0x41a1ada4, 0x00000000},
+{'l', 0xc0840720, 0x41aaa11e},
+{'l', 0xc1a1ada8, 0x00000000},
+{'@', 0x000020ac, 0x00004fa6},/*        €        x-advance: 79.648438 */
+{'M', 0x42609d8a, 0xc2a93b14},
+{'q', 0xc0ef70c8, 0x00000000},
+{0, 0xc13e35b4, 0x40a59830},
+{'9', 0x0029ffdd, 0x007bffc9},
+{'4', 0x000000a5, 0x0053fff0},
+{'l', 0xc1a86440, 0x00000000},
+{'9', 0x001dfff9, 0x003bfff6},
+{'l', 0x41ad6d34, 0x00000000},
+{'4', 0x0053fff0, 0x0000ff56},
+{'l', 0xbe56d380, 0x409a67d8},
+{'8', 0x66184500, 0x20432018},
+{'9', 0x0000004b, 0xffb9006b},
+{'l', 0x4187f1ac, 0x40330560},
+{'q', 0xc0644060, 0x412a11e6},
+{0, 0xc13423cc, 0x41801ca4},
+{'q', 0xc0f62760, 0x40aa11e8},
+{0, 0xc1994966, 0x40aa11e8},
+{'q', 0xc17cddfc, 0xb4000000},
+{0, 0xc1bd1746, 0xc115ee19},
+{'9', 0xffb6ffc2, 0xff24ffc2},
+{'4', 0x0000ffb2, 0xffad0011},
+{'l', 0x410e1910, 0x00000000},
+{'9', 0xffda0005, 0xffc5000a},
+{'4', 0x0000ffba, 0xffad0011},
+{'l', 0x4115ee1a, 0x00000000},
+{'q', 0x40a59828, 0xc1920396},
+{0, 0x417745d2, 0xc1d9101e},
+{'q', 0x41259828, 0xc10e1910},
+{0, 0x41d5b4ce, 0xc10e1910},
+{'9', 0x000000c1, 0x00a700cc},
+{'l', 0xc18fc6b4, 0x40525980},
+{'8', 0xcbe7dcfa, 0xefc4efee},
+{'@', 0x00002122, 0x00008f37},/*        â„¢        x-advance: 143.214844 */
+{'M', 0x429c80e5, 0xc256d33e},
+{'l', 0xc139bbf8, 0x00000000},
+{'4', 0xfe9a0000, 0x0000008a},
+{'l', 0x411b8640, 0x41a86440},
+{'9', 0x001b000c, 0x00590024},
+{'l', 0x3fcddfc0, 0xc08880e0},
+{'l', 0x40377f20, 0xc0dd89d0},
+{'l', 0x41211e70, 0xc1a86440},
+{'l', 0x4187f1ac, 0x00000000},
+{'4', 0x01660000, 0x0000ffa4},
+{'l', 0x00000000, 0xc1be35b4},
+{'9', 0xfff80000, 0xffa00004},
+{'l', 0xc0064400, 0x40a7d510},
+{'l', 0xc04ddfc0, 0x40f3ea80},
+{'l', 0xc12c4ec8, 0x41b77f1c},
+{'4', 0x0000ffb7, 0xff49ffad},
+{'l', 0xc0ac4ec0, 0xc14ddfc8},
+{'9', 0x00500003, 0x00600003},
+{'6', 0x00be0000, 0xfee8fee3},
+{'l', 0x00000000, 0x420c6b6a},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x00000000, 0xc20c6b6a},
+{'l', 0xc187f1ad, 0x00000000},
+{'l', 0x00000000, 0xc11b8640},
+{'l', 0x423c880e, 0x00000000},
+{'l', 0x00000000, 0x411b8640},
+{'l', 0xc18c6b6a, 0x00000000},
+{'@', 0x00002190, 0x00008f37},/*        ←        x-advance: 143.214844 */
+{'M', 0x42334cfa, 0xc20b055f},
+{'9', 0x0025001f, 0x006e0042},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffadffb9, 0xff84ff69},
+{'l', 0x00000000, 0xc0211e70},
+{'9', 0xffd80050, 0xff840097},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x0048ffde, 0x006effbe},
+{'l', 0x428a525a, 0x00000000},
+{'l', 0x00000000, 0x40c07290},
+{'l', 0xc28a525a, 0x00000000},
+{'@', 0x00002191, 0x0000479b},/*        ↑        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc281ca4b},
+{'9', 0x001fffdb, 0x0042ff92},
+{'l', 0x00000000, 0xc0a11e70},
+{'9', 0xffb90053, 0xff69007c},
+{'l', 0x40211e60, 0x00000000},
+{'9', 0x00500028, 0x0097007c},
+{'l', 0x00000000, 0x40a11e70},
+{'9', 0xffdeffb8, 0xffbeff92},
+{'l', 0x00000000, 0x428a5259},
+{'l', 0xc0c07290, 0x36200000},
+{'l', 0x00000000, 0xc28a5259},
+{'@', 0x00002192, 0x00008f37},/*        →        x-advance: 143.214844 */
+{'M', 0x42c4c881, 0xc22313b1},
+{'9', 0xffdbffe1, 0xff92ffbe},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x00530047, 0x007c0097},
+{'l', 0x00000000, 0x40211e70},
+{'9', 0x0028ffb0, 0x007cff69},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffb80022, 0xff920042},
+{'l', 0xc28a525a, 0x00000000},
+{'l', 0x36000000, 0xc0c07290},
+{'l', 0x428a525a, 0x00000000},
+{'@', 0x00002193, 0x0000479b},/*        ↓        x-advance: 71.605469 */
+{'M', 0x421b3ea8, 0xc135423d},
+{'9', 0xffe10025, 0xffbe006e},
+{'l', 0x00000000, 0x40a11e6e},
+{'9', 0x0047ffad, 0x0097ff84},
+{'l', 0xc0211e60, 0xb5000000},
+{'9', 0xffb0ffd8, 0xff69ff84},
+{'l', 0x00000000, 0xc0a11e6c},
+{'9', 0x00220048, 0x0042006e},
+{'l', 0x00000000, 0xc28a5259},
+{'l', 0x40c07290, 0x00000000},
+{'l', 0x00000000, 0x428a5259},
+{'@', 0x00002212, 0x000053a2},/*        −        x-advance: 83.632812 */
+{'M', 0x410bdc32, 0xc21f292d},
+{'l', 0x00000000, 0xc17aa11c},
+{'l', 0x428fa2e9, 0x00000000},
+{'l', 0x00000000, 0x417aa11c},
+{'l', 0xc28fa2e9, 0x00000000},
+{'@', 0x00002248, 0x00004e99},/*        ≈        x-advance: 78.597656 */
+{'M', 0x426aaf71, 0xc1994966},
+{'q', 0xc1076278, 0x00000000},
+{0, 0xc1a508f4, 0xc09ca4b4},
+{'q', 0xc11055ee, 0xc0496608},
+{0, 0xc17745d2, 0xc0496608},
+{'8', 0x0cb700d9, 0x24bb0bdf},
+{'l', 0xb5000000, 0xc16e5258},
+{'q', 0x40fcddfd, 0xc0bbf8d8},
+{0, 0x41979bbf, 0xc0bbf8d8},
+{'8', 0x0c5b002e, 0x1b570c2c},
+{'8', 0x154c1139, 0x03230313},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x22bc18dd, 0x0ab00ae0},
+{'m', 0x00000000, 0xc206d33f},
+{'8', 0xf5ae00d7, 0xe6aef5d8},
+{'q', 0xc113b13c, 0xc0525980},
+{0, 0xc17745d2, 0xc0525980},
+{'8', 0x0bba00db, 0x26b80adf},
+{'l', 0x35000000, 0xc16e525c},
+{'q', 0x40f62763, 0xc0bbf8d0},
+{0, 0x41979bbf, 0xc0bbf8d0},
+{'8', 0x0c57002c, 0x1a540c2b},
+{'q', 0x411a67d4, 0x404ddfc0},
+{0, 0x416d33ec, 0x404ddfc0},
+{'9', 0x0000004a, 0xffcd008a},
+{'l', 0x00000000, 0x417508f4},
+{'8', 0x23bc19dd, 0x09b009df},
+{'@', 0x000025bc, 0x00008dbf},/*        â–¼        x-advance: 141.746094 */
+{'M', 0x42e1745d, 0xc2a3c6b6},
+{'l', 0xc22745d2, 0x42a78d6d},
+{'l', 0xc227d508, 0xc2a78d6d},
+{'l', 0x42a78d6d, 0x00000000},
+{'@', 0x00002660, 0x00004c15},/*        â™         x-advance: 76.082031 */
+{'M', 0x42182af7, 0xc2ac2af7},
+{'q', 0x3fdfc6c0, 0x40d6d340},
+{0, 0x40a35b50, 0x414a8478},
+{'q', 0x4056d330, 0x40bbf8e0},
+{0, 0x415ea844, 0x417982b0},
+{'8', 0x6b62464e, 0x4c142413},
+{'8', 0x59dc3500, 0x23ab23dc},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18f377e, 0xc155b4d0},
+{'q', 0x3e56d300, 0x4131e6f0},
+{0, 0x403bf8d0, 0x41876276},
+{'q', 0x40330560, 0x40b9bbfa},
+{0, 0x41076278, 0x4111745e},
+{'9', 0x001a002d, 0x001f0077},
+{'4', 0x00140004, 0x0000fe45},
+{'l', 0x3ed6d380, 0xc025982b},
+{'q', 0x410abdc2, 0x00000000},
+{0, 0x416af70c, 0xc056d33f},
+{'q', 0x40c07294, 0xc05b4cfa},
+{0, 0x411055f0, 0xc1170c88},
+{'9', 0xffd00018, 0xff7f0018},
+{'l', 0x00000000, 0xbf7aa120},
+{'q', 0xc0c96608, 0x4155b4d0},
+{0, 0xc191745c, 0x4155b4d0},
+{'8', 0xddaa00cf, 0xa9dcdddc},
+{'8', 0xa918cf00, 0xad50da19},
+{'q', 0x411b8642, 0xc1052598},
+{0, 0x41655ee0, 0xc16d33e8},
+{'q', 0x4093b138, 0xc0d01cb0},
+{0, 0x40cddfc8, 0xc173ea88},
+{'@', 0x00002663, 0x00005dfc},/*        ♣        x-advance: 93.984375 */
+{'M', 0x429901ca, 0x00000000},
+{'4', 0x0000fe29, 0xffed0004},
+{'8', 0xe26cf14b, 0xd03bf121},
+{'8', 0xb629df1a, 0xac0fd70f},
+{'l', 0xbe0f3700, 0xc0525980},
+{'8', 0x64af43e1, 0x219d21cf},
+{'8', 0xebb100d5, 0xc8c9ebdd},
+{'8', 0xb2eddded, 0x9428c000},
+{'8', 0xd45cd428, 0x1c5a0022},
+{'8', 0xc6e2dceb, 0xd7faecfa},
+{'8', 0x932dbd00, 0xd76cd72d},
+{'8', 0x2c6d0040, 0x682c2c2c},
+{'8', 0x66da3000, 0xe837ea2e},
+{'8', 0xfc22fc0c, 0x2b60003a},
+{'8', 0x6b282a28, 0x6fd54000},
+{'8', 0x2d942dd5, 0xf3c000e1},
+{'8', 0xdcc5f3df, 0xafc4eae6},
+{'q', 0x3eb30580, 0x410cfaa0},
+{0, 0x4001ca50, 0x41632204},
+{'8', 0x4c2c2a0d, 0x3042211e},
+{'q', 0x408f3788, 0x3fe8ba30},
+{0, 0x4147292c, 0x40525983},
+{'l', 0x3f0f3780, 0x401ca4b3},
+{'@', 0x00002665, 0x00005508},/*        ♥        x-advance: 85.031250 */
+{'M', 0x422aa11e, 0x3fcddfc7},
+{'q', 0xbfc4ec40, 0xc0c07293},
+{0, 0xc0982af8, 0xc1460abe},
+{'9', 0xffceffe7, 0xff4aff85},
+{'l', 0xc0c96608, 0xc1099f54},
+{'8', 0xa5c7c9d7, 0xb7f1dcf1},
+{'8', 0x9f26c500, 0xda5fda27},
+{'8', 0x1f580030, 0x633d1f28},
+{'8', 0x9d3abe13, 0xdf58df27},
+{'8', 0x265d0036, 0x5c282628},
+{'q', 0x00000000, 0x40c07290},
+{0, 0xc044ec60, 0x414a8478},
+{'q', 0xc044ec40, 0x40d49660},
+{0, 0xc12d6d34, 0x4181ca4a},
+{'q', 0xc11ca4b0, 0x4148479e},
+{0, 0xc1655ee0, 0x41a00001},
+{'q', 0xc08f3780, 0x40ed33ea},
+{0, 0xc0dfc6b8, 0x418377f1},
+{'@', 0x00002666, 0x00004913},/*        ♦        x-advance: 73.074219 */
+{'M', 0x42112cc1, 0xc2ab0c88},
+{'q', 0x40a11e70, 0x410bdc30},
+{0, 0x41644074, 0x41ab3058},
+{'q', 0x4114cfa8, 0x41496608},
+{0, 0x418ea848, 0x41b157b6},
+{'q', 0xc0982af8, 0x409ca4b8},
+{0, 0xc17745d4, 0x41994966},
+{'q', 0xc12b3054, 0x41632204},
+{0, 0xc1840728, 0x41c45d17},
+{'q', 0xc0259830, 0xc09ee190},
+{0, 0xc111745e, 0xc160e525},
+{'q', 0xc0cddfc8, 0xc11292cb},
+{0, 0xc139bbf9, 0xc17cddfb},
+{'q', 0xc0a5982a, 0xc0d6d344},
+{0, 0xc131e6f0, 0xc15d89da},
+{'q', 0x4101ca4c, 0xc1194964},
+{0, 0x4189101c, 0xc1acddfc},
+{'q', 0x41117460, 0xc1419104},
+{0, 0x4168ba30, 0xc1afaa12},
+{'@', 0x0000fb01, 0x0000577b},/*        fi        x-advance: 87.480469 */
+{'M', 0x4213b13b, 0xc27982af},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064408, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d4965c, 0xc095ee20},
+{0, 0x41955ee1, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e70, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x01f30069},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd36008a},
+{'l', 0x40377f00, 0xc1679bc0},
+{'l', 0x419d33ec, 0x00000000},
+{'l', 0xc0377f20, 0x41679bc0},
+{'l', 0xc19d33e8, 0x00000000},
+{'@', 0x0000fb02, 0x0000577b},/*        fl        x-advance: 87.480469 */
+{'M', 0x4213b13b, 0xc27982af},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064408, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d4965c, 0xc095ee20},
+{0, 0x41955ee1, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e70, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x01f30069},
+{'l', 0x41a11e6e, 0xc2cf8d6d},
+{'l', 0x419d33ec, 0x00000000},
+{'l', 0xc1a1ada8, 0x42cf8d6d},
+{'l', 0xc19ca4b2, 0x00000000},
+{'@', 0x0000fb03, 0x00007d74},/*        ffi        x-advance: 125.453125 */
+{'M', 0x4213b13b, 0xc27982af},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064408, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d4965c, 0xc095ee20},
+{0, 0x41955ee1, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e70, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x00000136},
+{'l', 0xc142af74, 0x427982af},
+{'l', 0xc19ca4b2, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064400, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d49660, 0xc095ee20},
+{0, 0x41955ee0, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e80, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x01f30063},
+{'l', 0x416af710, 0xc2975424},
+{'4', 0x0000009d, 0x025dff8a},
+{'6', 0x0000ff64, 0xfd36008a},
+{'l', 0x40377f20, 0xc1679bc0},
+{'l', 0x419d33ec, 0x00000000},
+{'l', 0xc0377f20, 0x41679bc0},
+{'l', 0xc19d33ec, 0x00000000},
+{'@', 0x0000fb04, 0x00007d50},/*        ffl        x-advance: 125.312500 */
+{'M', 0x4213b13b, 0xc27982af},
+{'l', 0xc142af70, 0x427982af},
+{'l', 0xc19ca4b3, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064408, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d4965c, 0xc095ee20},
+{0, 0x41955ee1, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e70, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x00000136},
+{'l', 0xc142af74, 0x427982af},
+{'l', 0xc19ca4b2, 0x00000000},
+{'l', 0x4142af70, 0xc27982af},
+{'0', 0x961400a8, 0xc10c0058},
+{'q', 0x40064400, 0xc12d6d38},
+{0, 0x410abdc4, 0xc1786440},
+{'q', 0x40d49660, 0xc095ee20},
+{0, 0x41955ee0, 0xc095ee20},
+{'9', 0x00000028, 0x00090056},
+{'l', 0xc0211e80, 0x414a8478},
+{'8', 0xfde8fffa, 0xfee3feef},
+{'8', 0x11ca00db, 0x36e811f0},
+{'l', 0xbf8f3780, 0x40be35b0},
+{'4', 0x00000077, 0x006affec},
+{'6', 0x0000ff89, 0x01f30061},
+{'l', 0x41a11e6c, 0xc2cf8d6d},
+{'l', 0x419d33ec, 0x00000000},
+{'l', 0xc1a1ada8, 0x42cf8d6d},
+{'l', 0xc19ca4b0, 0x00000000},
+};
+#define ctx_font_Arimo_BoldItalic_name "Arimo Bold Italic"
+#endif
diff --git a/usermodule/uctx/fonts/Arimo-Italic.h b/usermodule/uctx/fonts/Arimo-Italic.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf6676837e61cbd585380f22cccd2662ec372455
--- /dev/null
+++ b/usermodule/uctx/fonts/Arimo-Italic.h
@@ -0,0 +1,5313 @@
+#ifndef CTX_FONT_Arimo_Italic
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Arimo_Italic[]={
+{15, 0x0000a008, 0x000014b6},/* length:5302 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000e, 0x00000002},/* Arimo Italic*/
+{32, 0x6d697241, 0x7449206f},
+{'a', 0x0063696c, 0x00000000},
+{')', 0x0000000e, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x00000021, 0x000027ca},/*        !        x-advance: 39.789062 */
+{'M', 0x41b80e52, 0xc1de1910},
+{'l', 0xc125982a, 0x00000000},
+{'4', 0xfdca0060, 0x0000006d},
+{'6', 0x0236ff85, 0x00deff74},
+{'l', 0x40330560, 0xc160e525},
+{'l', 0x4159101c, 0x00000000},
+{'l', 0xc0330560, 0x4160e525},
+{'l', 0xc159101c, 0x00000000},
+{'@', 0x00000022, 0x000032d6},/*        "        x-advance: 50.835938 */
+{'M', 0x4242f70c, 0xc2871ada},
+{'l', 0xc11ee190, 0x00000000},
+{'4', 0xff090023, 0x00000066},
+{'6', 0x00f7ffc5, 0x0000ff32},
+{'l', 0xc11dc322, 0x00000000},
+{'l', 0x408cfaa0, 0xc1f7d508},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0xc0ed33e8, 0x41f7d508},
+{'@', 0x00000023, 0x00004fa6},/*        #        x-advance: 79.648438 */
+{'M', 0x428182af, 0xc2778d6d},
+{'l', 0xc0ae8ba0, 0x41ce6efe},
+{'l', 0x4191745c, 0x00000000},
+{'l', 0x00000000, 0x40f1ada8},
+{'l', 0xc19e5258, 0x00000000},
+{'l', 0xc0c4ec50, 0x41e44072},
+{'l', 0xc0f62760, 0x00000000},
+{'l', 0x40c07290, 0xc1e44072},
+{'l', 0xc1cb13b0, 0x00000000},
+{'l', 0xc0bbf8d8, 0x41e44072},
+{'l', 0xc0f62762, 0x00000000},
+{'l', 0x40bbf8d6, 0xc1e44072},
+{'l', 0xc160e525, 0x00000000},
+{'l', 0xb4800000, 0xc0f1ada8},
+{'l', 0x417bbf8d, 0x00000000},
+{'l', 0x40ae8ba4, 0xc1ce6efe},
+{'l', 0xc18cfaa1, 0x00000000},
+{'l', 0xb5000000, 0xc0f1ada8},
+{'l', 0x41994966, 0x00000000},
+{'l', 0x40c7292c, 0xc1e44074},
+{'l', 0x40f62760, 0x00000000},
+{'l', 0xc0c4ec50, 0x41e44074},
+{'l', 0x41cb13b2, 0x00000000},
+{'l', 0x40c4ec48, 0xc1e44074},
+{'l', 0x40f62760, 0x00000000},
+{'l', 0xc0c4ec40, 0x41e44074},
+{'4', 0x00000076, 0x003c0000},
+{'6', 0x0000ff7e, 0x0000fef9},
+{'l', 0xc0b30564, 0x41ce6efe},
+{'l', 0x41ca8479, 0x00000000},
+{'l', 0x40ae8ba8, 0xc1ce6efe},
+{'l', 0xc1c9660b, 0x00000000},
+{'@', 0x00000024, 0x00004fa6},/*        $        x-advance: 79.648438 */
+{'M', 0x4295ee19, 0xc1edc322},
+{'q', 0x00000000, 0x414efe36},
+{0, 0xc11a67d8, 0x41a2cc16},
+{'9', 0x003affb4, 0x003fff24},
+{'4', 0x005affef, 0x0000ffc1},
+{'l', 0x400f3780, 0xc13660ac},
+{'q', 0xc160e526, 0xbf7aa11c},
+{0, 0xc1abbf8e, 0xc0e8ba2e},
+{'9', 0xffceffc6, 0xff75ffb7},
+{'l', 0x413660ac, 0xc0259828},
+{'q', 0x3fdfc6b8, 0x4100abdc},
+{0, 0x40d9101c, 0x4142af70},
+{'9', 0x00210028, 0x00260073},
+{'l', 0x40d6d33c, 0xc209e6f0},
+{'q', 0xc126b69a, 0xc0377f20},
+{0, 0xc1786440, 0xc0c07290},
+{'8', 0xc3c3e7d8, 0xa8ebdceb},
+{'8', 0x9424c200, 0xb965d224},
+{'9', 0xffe70041, 0xffe70093},
+{'4', 0xffb7000d, 0x0000003f},
+{'l', 0xbff1ada0, 0x41194968},
+{'q', 0x412e8ba0, 0x3faa11c0},
+{0, 0x418abdc4, 0x40d25980},
+{'9', 0x00290034, 0x006e0042},
+{'l', 0xc12e8ba8, 0x40496600},
+{'9', 0xffa3ffe7, 0xff94ff7b},
+{'l', 0xc0c07290, 0x41f6b698},
+{'q', 0x415b4cfc, 0x406d33f0},
+{0, 0x41a1ada8, 0x41223ce0},
+{'9', 0x00330034, 0x007d0034},
+{'m', 0xc14efe34, 0x3f56d340},
+{'8', 0xb9e4d500, 0xce9de4e5},
+{'l', 0xc0c96608, 0x420182b0},
+{'9', 0xfff700b1, 0xff7800b1},
+{'m', 0xc21292cc, 0xc2293b14},
+{'8', 0x3d192500, 0x2e611819},
+{'l', 0x40b54240, 0xc1e82af8},
+{'q', 0xc1223ce0, 0x3eb30600},
+{0, 0xc17982b0, 0x408abdc0},
+{'q', 0xc0ac4ec4, 0x407f1ae0},
+{0, 0xc0ac4ec4, 0x41330560},
+{'@', 0x00000025, 0x00007f57},/*        %        x-advance: 127.339844 */
+{'M', 0x42187293, 0xc2c6bdc3},
+{'q', 0x410bdc30, 0x00000000},
+{0, 0x4156d33c, 0x40b0c880},
+{'q', 0x4095ee18, 0x40b0c880},
+{0, 0x4095ee18, 0x41801ca4},
+{'q', 0x00000000, 0x40ed33f0},
+{0, 0xbff1ada0, 0x41786440},
+{'8', 0x6fd340f1, 0x46b92ee2},
+{'8', 0x17a617d8, 0xd39500bb},
+{'q', 0xc0982af6, 0xc0b9bbf8},
+{0, 0xc0982af6, 0xc18377f2},
+{'q', 0x00000000, 0xc12479c0},
+{0, 0x404ddfc4, 0xc1a1ada8},
+{'q', 0x40525988, 0xc1200000},
+{0, 0x41170c88, 0xc172cc10},
+{'9', 0xffd70031, 0xffd70079},
+{'m', 0x4281ee18, 0x4215ee19},
+{'q', 0x410bdc38, 0x00000000},
+{0, 0x4156d340, 0x40b0c880},
+{'q', 0x4095ee20, 0x40b0c880},
+{0, 0x4095ee20, 0x41801ca4},
+{'q', 0x00000000, 0x40ed33f0},
+{0, 0xbff1adc0, 0x41786442},
+{'8', 0x6fd340f1, 0x46b92ee2},
+{'8', 0x17a617d8, 0xd39500bb},
+{'q', 0xc0982af0, 0xc0b9bbf9},
+{0, 0xc0982af0, 0xc18377f1},
+{'q', 0x00000000, 0xc12479bc},
+{0, 0x404ddfc0, 0xc1a1ada6},
+{'q', 0x40525980, 0xc1200000},
+{0, 0x41170c88, 0xc172cc18},
+{'9', 0xffd70031, 0xffd70079},
+{'m', 0xc292b69a, 0x42778d6d},
+{'l', 0xc1389d86, 0x00000000},
+{'4', 0xfcec0297, 0x0000005d},
+{'6', 0x0314fd68, 0xfe4e024a},
+{'8', 0x11c300db, 0x36d711e8},
+{'8', 0x60e224ef, 0x66f53bf5},
+{'8', 0x6a466a00, 0xdb4e002f},
+{'q', 0x40762760, 0xc095ee1a},
+{0, 0x40be35b0, 0xc15ea847},
+{'q', 0x40064400, 0xc113b13a},
+{0, 0x40064400, 0xc17f1ada},
+{'9', 0xff9b0000, 0xff9bffbd},
+{'m', 0xc281ee18, 0xc215ee1a},
+{'8', 0x11c300db, 0x36d711e8},
+{'8', 0x60e224ef, 0x66f53bf5},
+{'8', 0x6a466a00, 0xdb4e002f},
+{'q', 0x40762770, 0xc095ee18},
+{0, 0x40be35b8, 0xc15ea844},
+{'q', 0x40064400, 0xc113b140},
+{0, 0x40064400, 0xc17f1ae0},
+{'q', 0x00000000, 0xc14ba2e8},
+{0, 0xc1076274, 0xc14ba2e8},
+{'@', 0x00000026, 0x00005f86},/*        &        x-advance: 95.523438 */
+{'M', 0x42ae8ba3, 0xc23f5424},
+{'q', 0xc11b8648, 0x41b0394a},
+{0, 0xc1a2cc18, 0x42052598},
+{'8', 0x21321516, 0x0b360b1c},
+{'9', 0x00000021, 0xfff8003e},
+{'l', 0xbf68ba80, 0x41170c88},
+{'q', 0xc0864400, 0x3fc4ec4f},
+{0, 0xc10bdc30, 0x3fc4ec4f},
+{'q', 0xc126b698, 0x00000000},
+{0, 0xc1979bbe, 0xc10880e5},
+{'q', 0xc1472930, 0x4111745d},
+{0, 0xc1e3b13c, 0x4111745d},
+{'q', 0xc15377f0, 0xb4000000},
+{0, 0xc1a6b69a, 0xc0dfc6b7},
+{'q', 0xc0f3ea82, 0xc0e20395},
+{0, 0xc0f3ea82, 0xc1979bbf},
+{'q', 0xb4800000, 0xc12faa12},
+{0, 0x40d01ca4, 0xc190e525},
+{'q', 0x40d01ca4, 0xc0e67d50},
+{0, 0x41bbf8d8, 0xc15b4cfc},
+{'q', 0xbffaa130, 0xc1052594},
+{0, 0xbffaa130, 0xc180abda},
+{'q', 0x00000000, 0xc1419108},
+{0, 0x40f1ada4, 0xc19af710},
+{'q', 0x40f3ea88, 0xc0e8ba20},
+{0, 0x41a2cc16, 0xc0e8ba20},
+{'q', 0x411a67d8, 0x00000000},
+{0, 0x417aa120, 0x40a11e60},
+{'q', 0x40c2af70, 0x40a11e70},
+{0, 0x40c2af70, 0x41549668},
+{'q', 0x00000000, 0x4101ca48},
+{0, 0xc0b77f20, 0x41620390},
+{'9', 0x0030ffd3, 0x005eff5e},
+{'l', 0xc10bdc34, 0x405fc6b0},
+{'q', 0x40aa11e8, 0x417aa11c},
+{0, 0x4173ea84, 0x41ea67d5},
+{'q', 0x40864410, 0xc0982af8},
+{0, 0x4102e8b8, 0xc135423e},
+{'9', 0xffcc001f, 0xff6e004b},
+{'6', 0x001e0049, 0x0140fe43},
+{'q', 0x413660ac, 0x00000000},
+{0, 0x41a86440, 0xc0e20394},
+{'q', 0xc0a35b48, 0xc0c9660c},
+{0, 0xc11ca4b0, 0xc16d33ea},
+{'q', 0xc095ee20, 0xc1099f54},
+{0, 0xc0f86440, 0xc18c6b6a},
+{'q', 0xc13bf8d8, 0x4093b138},
+{0, 0xc182e8bb, 0x411b8644},
+{'8', 0x65dc28dc, 0x63263e00},
+{'9', 0x00240026, 0x00240065},
+{'m', 0x411ca4b4, 0xc28211e7},
+{'8', 0x630a2b00, 0xe252f02c},
+{'8', 0xe043f226, 0xd82def1d},
+{'8', 0xc910ea10, 0xc5e7dc00},
+{'8', 0xe9bee9e7, 0x26a000c2},
+{'q', 0xc08880e0, 0x4095ee10},
+{0, 0xc08880e0, 0x41513b10},
+{'@', 0x00000027, 0x00001b57},/*        '        x-advance: 27.339844 */
+{'M', 0x41bfe35b, 0xc2871ada},
+{'l', 0xc11dc322, 0x00000000},
+{'l', 0x408cfaa0, 0xc1f7d508},
+{'l', 0x414ddfc8, 0x00000000},
+{'l', 0xc0ed33ec, 0x41f7d508},
+{'@', 0x00000028, 0x00002fb1},/*        (        x-advance: 47.691406 */
+{'M', 0x426f292d, 0xc2cf8d6d},
+{'q', 0xc221ada7, 0x420e60ac},
+{0, 0xc221ada7, 0x42aae8ba},
+{'9', 0x00d90000, 0x017f0073},
+{'l', 0xc142af70, 0x00000000},
+{'q', 0xc16f70c9, 0xc1a5982a},
+{0, 0xc16f70c9, 0xc2445d17},
+{'q', 0x00000000, 0xc1d01ca4},
+{0, 0x4127d509, 0xc23dee18},
+{'q', 0x4127d508, 0xc1abbf90},
+{0, 0x41f35b4c, 0xc21369a0},
+{'l', 0x4142af74, 0x00000000},
+{'@', 0x00000029, 0x00002fb1},/*        )        x-advance: 47.691406 */
+{'M', 0xc15ea847, 0x41ed33ea},
+{'q', 0x4221ada6, 0xc20e60ac},
+{0, 0x4221ada6, 0xc2aae8ba},
+{'9', 0xff270000, 0xfe81ff8d},
+{'l', 0x4142af71, 0x00000000},
+{'q', 0x416f70c8, 0x41a5982c},
+{0, 0x416f70c8, 0x42445d17},
+{'q', 0x00000000, 0x41d01ca5},
+{0, 0xc127d50a, 0x423dee19},
+{'q', 0xc127d508, 0x41abbf8d},
+{0, 0xc1f35b4c, 0x4213699f},
+{'l', 0xc142af71, 0x00000000},
+{'@', 0x0000002a, 0x000037bb},/*        *        x-advance: 55.730469 */
+{'M', 0x4217e35b, 0xc29bcde0},
+{'l', 0x4193b13c, 0xc0e67d50},
+{'l', 0x40496600, 0x4113b140},
+{'l', 0xc19dc322, 0x40a35b40},
+{'l', 0x414efe38, 0x418bdc34},
+{'l', 0xc1052598, 0x40a11e70},
+{'l', 0xc127d508, 0xc19055f0},
+{'l', 0xc12e8ba4, 0x418f3780},
+{'l', 0xc1052599, 0xc0a11e70},
+{'l', 0x415377f1, 0xc18abdc4},
+{'l', 0xc19ca4b2, 0xc0a35b40},
+{'l', 0x40496608, 0xc115ee18},
+{'l', 0x41955ee1, 0x40ef70c0},
+{'l', 0xbf56d340, 0xc1a62760},
+{'l', 0x41182af8, 0x00000000},
+{'l', 0xbf68ba40, 0x41a508f0},
+{'@', 0x0000002b, 0x000053a2},/*        +        x-advance: 83.632812 */
+{'M', 0x4244157b, 0xc22a11e7},
+{'l', 0x00000000, 0x41ef70c8},
+{'l', 0xc12479bc, 0x35800000},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0xc1ed33ea, 0x00000000},
+{'l', 0x35800000, 0xc1235b4c},
+{'l', 0x41ed33ea, 0x00000000},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0x412479bc, 0x00000000},
+{'l', 0x00000000, 0x41ef70c8},
+{'l', 0x41ed33ea, 0x00000000},
+{'l', 0x00000000, 0x41235b4c},
+{'l', 0xc1ed33ea, 0x00000000},
+{'@', 0x0000002c, 0x000027ca},/*        ,        x-advance: 39.789062 */
+{'M', 0x4133055f, 0x419292cc},
+{'l', 0xc1099f54, 0x00000000},
+{'9', 0xffb40043, 0xff6e0051},
+{'l', 0xc0c4ec4f, 0x00000000},
+{'4', 0xff860017, 0x0000006d},
+{'l', 0xc00f3780, 0x413bf8d6},
+{'8', 0x5fe435f6, 0x50cf29ee},
+{'@', 0x0000002d, 0x00002fb1},/*        -        x-advance: 47.691406 */
+{'M', 0x40eaf70c, 0xc201ca4b},
+{'l', 0x400abdc4, 0xc1330560},
+{'l', 0x420bdc32, 0x00000000},
+{'l', 0xc00abdc0, 0x41330560},
+{'l', 0xc20bdc32, 0x00000000},
+{'@', 0x0000002e, 0x000027ca},/*        .        x-advance: 39.789062 */
+{'M', 0x40b3055f, 0x00000000},
+{'l', 0x40407292, 0xc17508f3},
+{'l', 0x415a2e8c, 0x00000000},
+{'l', 0xc0407298, 0x417508f3},
+{'l', 0xc15a2e8a, 0x00000000},
+{'@', 0x0000002f, 0x000027ca},/*        /        x-advance: 39.789062 */
+{'M', 0xc101ca4b, 0x3fb3055f},
+{'l', 0x4244a4b3, 0xc2d25982},
+{'l', 0x4130c880, 0x00000000},
+{'l', 0xc243cddf, 0x42d25982},
+{'l', 0xc13423cf, 0x36780000},
+{'@', 0x00000030, 0x00004fa6},/*        0        x-advance: 79.648438 */
+{'M', 0x424cc158, 0xc2c80000},
+{'q', 0x414cc154, 0x00000000},
+{0, 0x41a00000, 0x41099f58},
+{'q', 0x40e8ba30, 0x41099f50},
+{0, 0x40e8ba30, 0x41bfe358},
+{'q', 0x00000000, 0x418f3780},
+{0, 0xc0ae8bb0, 0x420abdc4},
+{'q', 0xc0ae8ba0, 0x4185b4cf},
+{0, 0xc17745cc, 0x41cba2e8},
+{'q', 0xc1200000, 0x410abdc4},
+{0, 0xc1c2203a, 0x410abdc4},
+{'q', 0xc14a847a, 0xb4000000},
+{0, 0xc19ee191, 0xc11055ee},
+{'q', 0xc0e67d4f, 0xc11055ee},
+{0, 0xc0e67d4f, 0xc1c7292d},
+{'q', 0x00000000, 0xc1496608},
+{0, 0x4044ec4e, 0xc1ccc158},
+{'q', 0x4049660c, 0xc1501ca4},
+{0, 0x410abdc2, 0xc1b423ce},
+{'q', 0x40b30560, 0xc1182af8},
+{0, 0x415c6b6a, 0xc1667d50},
+{'9', 0xffd90042, 0xffd9009b},
+{'m', 0xc186d340, 0x42b63cde},
+{'q', 0x4128f378, 0x00000000},
+{0, 0x41899f54, 0xc0ed33ec},
+{'q', 0x40d6d340, 0xc0ed33e8},
+{0, 0x412b3058, 0xc1b80e51},
+{'q', 0x407f1ae0, 0xc17aa120},
+{0, 0x407f1ae0, 0xc1e5ee18},
+{'q', 0x00000000, 0xc12d6d38},
+{0, 0xc0864408, 0xc1825984},
+{'q', 0xc0840730, 0xc0ae8ba0},
+{0, 0xc13ada68, 0xc0ae8ba0},
+{'q', 0xc128f378, 0x00000000},
+{0, 0xc18a2e8c, 0x40ed33e0},
+{'q', 0xc0d49660, 0x40ed33f0},
+{0, 0xc12a11e8, 0x41b89d8c},
+{'q', 0xc07f1ad8, 0x417982ac},
+{0, 0xc07f1ad8, 0x41e55ee1},
+{'q', 0x00000000, 0x412d6d34},
+{0, 0x40840728, 0x41825982},
+{'q', 0x40864408, 0x40ae8ba4},
+{0, 0x413bf8d6, 0x40ae8ba4},
+{'@', 0x00000031, 0x00004fa6},/*        1        x-advance: 79.648438 */
+{'M', 0x406d33ea, 0x00000000},
+{'l', 0x40064408, 0xc12b3056},
+{'l', 0x41c8d6d3, 0x00000000},
+{'l', 0x4168ba2e, 0xc295a67d},
+{'l', 0xc1c9f542, 0x417982b0},
+{'l', 0x401ca4b8, 0xc1496608},
+{'l', 0x41d2e8b9, 0xc1801ca4},
+{'l', 0x4139bbfc, 0x00000000},
+{'l', 0xc18880e6, 0x42afaa11},
+{'l', 0x41bfe35a, 0x36000000},
+{'l', 0xc0064400, 0x412b3056},
+{'l', 0xc276fe35, 0x00000000},
+{'@', 0x00000032, 0x00004fa6},/*        2        x-advance: 79.648438 */
+{'M', 0xbf56d33e, 0x00000000},
+{'l', 0x3fd6d33e, 0xc10e1910},
+{'8', 0xa444cc1e, 0xb74fd826},
+{'8', 0xc453df29, 0xcc52e52b},
+{'8', 0xce4ae728, 0xcb3de723},
+{'8', 0xc229e41a, 0xb40fde0f},
+{'8', 0xa8ddca00, 0xdea3dede},
+{'8', 0x219600c4, 0x63be21d3},
+{'l', 0xc13e35b5, 0xc0259840},
+{'q', 0x4071ada4, 0xc13e35b0},
+{0, 0x4147292d, 0xc190e524},
+{'q', 0x410abdc4, 0xc0c96610},
+{0, 0x41adfc6c, 0xc0c96610},
+{'q', 0x414ba2e8, 0x00000000},
+{0, 0x41a508f4, 0x40db4d00},
+{'q', 0x40ff1ad0, 0x40db4cf0},
+{0, 0x40ff1ad0, 0x418e1910},
+{'q', 0x00000000, 0x40ed33e0},
+{0, 0xc0644060, 0x41632200},
+{'q', 0xc0644080, 0x40d91020},
+{0, 0xc12c4ec8, 0x41501ca8},
+{'q', 0xc0e44070, 0x40c72928},
+{0, 0xc1ac4ec4, 0x417508f0},
+{'q', 0xc12479bc, 0x40d01ca8},
+{0, 0xc1852598, 0x413d1748},
+{'9', 0x002affce, 0x0052ffb4},
+{'l', 0x424b5b4c, 0x00000000},
+{'l', 0xc001ca40, 0x412b3056},
+{'l', 0xc2825982, 0x00000000},
+{'@', 0x00000033, 0x00004fa6},/*        3        x-advance: 79.648438 */
+{'M', 0x421e5259, 0xc25e60ac},
+{'q', 0x414cc158, 0x00000000},
+{0, 0x4198ba30, 0xc0a35b48},
+{'q', 0x40cba2e8, 0xc0a35b48},
+{0, 0x40cba2e8, 0xc16e525c},
+{'8', 0xaedecc00, 0xe2a6e2df},
+{'q', 0xc1052598, 0x00000000},
+{0, 0xc1655ee4, 0x408880e0},
+{'9', 0x0022ffd1, 0x0060ffbe},
+{'l', 0xc147292c, 0xbf7aa100},
+{'q', 0x4081ca4c, 0xc1501ca8},
+{0, 0x4155b4d0, 0xc19a67d4},
+{'q', 0x4115ee18, 0xc0cba2f0},
+{0, 0x41b39496, 0xc0cba2f0},
+{'q', 0x41513b14, 0x00000000},
+{0, 0x41a508f2, 0x40cddfd0},
+{'q', 0x40f1adb0, 0x40cddfc0},
+{0, 0x40f1adb0, 0x418cfaa0},
+{'q', 0x00000000, 0x412b3058},
+{0, 0xc0d91020, 0x418bdc32},
+{'9', 0x0035ffcb, 0x0042ff69},
+{'l', 0xbd8f3600, 0x3e8f3780},
+{'q', 0x411292cc, 0x3fe8ba20},
+{0, 0x41644074, 0x40eaf708},
+{'q', 0x40a35b40, 0x40ae8ba8},
+{0, 0x40a35b40, 0x4160e526},
+{'q', 0x00000000, 0x410bdc32},
+{0, 0xc08880e0, 0x417982af},
+{'q', 0xc0864408, 0x40d9101d},
+{0, 0xc143cde0, 0x4128f378},
+{'q', 0xc0ff1ad8, 0x406d33ec},
+{0, 0xc1955ee2, 0x406d33ec},
+{'q', 0xc10f377e, 0xb4000000},
+{0, 0xc17cddfa, 0xc044ec4f},
+{'8', 0xbba5e8ca, 0x96cfd3dd},
+{'l', 0x41377f1a, 0xc056d338},
+{'q', 0x40064408, 0x4101ca4a},
+{0, 0x4104072a, 0x41513b13},
+{'q', 0x40c4ec4c, 0x409ca4b2},
+{0, 0x416c157c, 0x409ca4b2},
+{'q', 0x411dc320, 0x00000000},
+{0, 0x41762760, 0xc0a5982a},
+{'q', 0x40b30560, 0xc0a7d50a},
+{0, 0x40b30560, 0xc160e525},
+{'q', 0x00000000, 0xc0faa120},
+{0, 0xc0a7d508, 0xc1419104},
+{'9', 0xffdeffd7, 0xffdeff8e},
+{'l', 0xc10abdc2, 0x00000000},
+{'l', 0x40064408, 0xc12e8ba4},
+{'l', 0x40db4cf8, 0x00000000},
+{'@', 0x00000034, 0x00004fa6},/*        4        x-advance: 79.648438 */
+{'M', 0x426ca4b3, 0xc1b27627},
+{'l', 0xc08abdc8, 0x41b27627},
+{'l', 0xc1496608, 0x00000000},
+{'l', 0x408abdc0, 0xc1b27627},
+{'l', 0xc236a847, 0x00000000},
+{'l', 0x3ff1ad9e, 0xc11ca4b2},
+{'l', 0x42651746, 0xc284ddfc},
+{'l', 0x415ea848, 0x00000000},
+{'l', 0xc14ddfc8, 0x42849660},
+{'4', 0x00000069, 0x004ffff1},
+{'6', 0x0000ff97, 0xfe2cfff5},
+{'l', 0xc2278d6d, 0x4242af70},
+{'l', 0x4202a11e, 0x00000000},
+{'l', 0x4113b13c, 0xc242af70},
+{'@', 0x00000035, 0x00004fa6},/*        5        x-advance: 79.648438 */
+{'M', 0x41bfe35b, 0xc2c5101c},
+{'l', 0x42600e52, 0x00000000},
+{'4', 0x0055fff0, 0x0000fe9c},
+{'l', 0xc0ff1adc, 0x41fa11e8},
+{'8', 0xdc44e91b, 0xf356f328},
+{'q', 0x414ddfc8, 0x00000000},
+{0, 0x41a62764, 0x40ef70c8},
+{'q', 0x40fcde00, 0x40ed33e8},
+{0, 0x40fcde00, 0x419ffffe},
+{'q', 0x00000000, 0x41899f55},
+{0, 0xc1211e74, 0x41d7f1ae},
+{'q', 0xc1211e6c, 0x411ca4b4},
+{0, 0xc1e0e524, 0x411ca4b4},
+{'9', 0x0000ff31, 0xff48ff00},
+{'l', 0x413660ad, 0xc0407298},
+{'8', 0x5f3d3f11, 0x1e6d1e2c},
+{'q', 0x4139bbf8, 0x00000000},
+{0, 0x418f3780, 0xc0d01ca4},
+{'q', 0x40c96608, 0xc0d25984},
+{0, 0x40c96608, 0xc194cfab},
+{'8', 0x94dabc00, 0xd899d8da},
+{'9', 0x0000ffa5, 0x0038ff63},
+{'l', 0xc144ec4e, 0x00000000},
+{'l', 0x4159101c, 0xc2540728},
+{'@', 0x00000036, 0x00004fa6},/*        6        x-advance: 79.648438 */
+{'M', 0x42155ee1, 0x3fb3055f},
+{'q', 0xc157f1ac, 0x00000000},
+{0, 0xc1ab3055, 0xc115ee19},
+{'q', 0xc0fcddfc, 0xc115ee19},
+{0, 0xc0fcddfc, 0xc1c3cde0},
+{'q', 0x00000000, 0xc186d33e},
+{0, 0x40b9bbf8, 0xc2052599},
+{'q', 0x40bbf8d8, 0xc1840728},
+{0, 0x41801ca5, 0xc1cb13b0},
+{'q', 0x41223cde, 0xc10e1910},
+{0, 0x41bada67, 0xc10e1910},
+{'q', 0x4127d508, 0x00000000},
+{0, 0x41899f54, 0x40a11e70},
+{'9', 0x00270036, 0x00730049},
+{'l', 0xc139bc00, 0x40211e60},
+{'8', 0xbbd3d3f3, 0xe8b3e8e1},
+{'q', 0xc1377f18, 0x00000000},
+{0, 0xc19c157a, 0x41235b48},
+{'q', 0xc100abde, 0x41235b50},
+{0, 0xc13ada6a, 0x41e67d52},
+{'q', 0x40864408, 0xc0c96608},
+{0, 0x4128f37a, 0xc1194968},
+{'q', 0x40cddfc0, 0xc056d330},
+{0, 0x41655ee0, 0xc056d330},
+{'q', 0x41407294, 0x00000000},
+{0, 0x419b8642, 0x40eaf708},
+{'q', 0x40ed33f0, 0x40eaf710},
+{0, 0x40ed33f0, 0x4198ba2e},
+{'q', 0x00000000, 0x412a11e8},
+{0, 0xc095ee10, 0x419d33eb},
+{'q', 0xc093b140, 0x410f377f},
+{0, 0xc14ddfcc, 0x415fc6b6},
+{'9', 0x0028ffbf, 0x0028ff6e},
+{'m', 0xc1899f53, 0xc1f6b69a},
+{'q', 0x00000000, 0x411292cc},
+{0, 0x40982af8, 0x416f70c9},
+{'q', 0x40982af4, 0x40b77f1a},
+{0, 0x414ba2e6, 0x40b77f1a},
+{'q', 0x411b8644, 0x00000000},
+{0, 0x41813b14, 0xc0faa120},
+{'q', 0x40cddfc8, 0xc0fcddfc},
+{0, 0x40cddfc8, 0xc19f70c7},
+{'8', 0x9bdfc000, 0xdaa1dadf},
+{'8', 0x18a000cc, 0x43bb17d5},
+{'q', 0xc04ddfc8, 0x40ae8ba8},
+{0, 0xc04ddfc8, 0x41525984},
+{'@', 0x00000037, 0x00004fa6},/*        7        x-advance: 79.648438 */
+{'M', 0x41f35b4d, 0x00000000},
+{'l', 0xc1525982, 0x00000000},
+{'q', 0x40377f18, 0xc1644072},
+{0, 0x410abdc2, 0xc1d9101c},
+{'q', 0x40bbf8d8, 0xc14ddfc8},
+{0, 0x4168ba2e, 0xc1cc3220},
+{'9', 0xff9b0045, 0xfee700e3},
+{'l', 0xc25880e6, 0x00000000},
+{'4', 0xffab0010, 0x00000219},
+{'l', 0xbffaa140, 0x41235b48},
+{'q', 0xc17982b0, 0x419292cc},
+{0, 0xc1ac4ec4, 0x41d01ca4},
+{'q', 0xc0be35b8, 0x40f62768},
+{0, 0xc12b3058, 0x416f70cc},
+{'q', 0xc0982af8, 0x40e8ba28},
+{0, 0xc1076274, 0x416c1578},
+{'q', 0xc06d33f0, 0x40ed33ec},
+{0, 0xc0d01ca8, 0x41786442},
+{'q', 0xc02e8ba0, 0x4101ca4b},
+{0, 0xc08f377c, 0x418880e5},
+{'@', 0x00000038, 0x00004fa6},/*        8        x-advance: 79.648438 */
+{'M', 0x4244ec4f, 0xc2c7dc32},
+{'q', 0x4155b4d0, 0x00000000},
+{0, 0x41abbf8e, 0x40cddfc0},
+{'q', 0x4101ca48, 0x40cba2f0},
+{0, 0x4101ca48, 0x41899f54},
+{'q', 0x00000000, 0x411ca4b8},
+{0, 0xc0c2af70, 0x4185259a},
+{'9', 0x0036ffd0, 0x0043ff7e},
+{'l', 0xbd8f3800, 0x3e8f3780},
+{'8', 0x3d5d123d, 0x68212b21},
+{'q', 0x00000000, 0x4168ba2e},
+{0, 0xc11ee190, 0x41b89d8a},
+{'q', 0xc11ee194, 0x410880e4},
+{0, 0xc1dabdc4, 0x410880e4},
+{'q', 0xc16e525a, 0xb4000000},
+{0, 0xc1b89d8a, 0xc0e20395},
+{'q', 0xc101ca4a, 0xc0e20395},
+{0, 0xc101ca4a, 0xc19c157c},
+{'q', 0xb5000000, 0xc127d50a},
+{0, 0x40cba2e8, 0xc18d89d9},
+{'9', 0xffc60032, 0xffb00094},
+{'l', 0x00000000, 0xbe8f3780},
+{'8', 0xc1b2ebce, 0x9ce5d6e5},
+{'q', 0x00000000, 0xc1460ac0},
+{0, 0x4111745e, 0xc19af710},
+{'9', 0xffc90048, 0xffc900c6},
+{'m', 0xc11a67d8, 0x4253bf8d},
+{'q', 0xc12e8ba2, 0x00000000},
+{0, 0xc1876275, 0x40b9bbf8},
+{'q', 0xc0be35b4, 0x40b9bbf8},
+{0, 0xc0be35b4, 0x41825983},
+{'q', 0x00000000, 0x40faa120},
+{0, 0x40a59828, 0x4144ec4f},
+{'q', 0x40a5982c, 0x408cfaa2},
+{0, 0x41667d50, 0x408cfaa2},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x4185b4d0, 0xc0c07292},
+{'q', 0x40cddfc8, 0xc0c07292},
+{0, 0x40cddfc8, 0xc1825982},
+{'q', 0x00000000, 0xc0f86440},
+{0, 0xc0ac4ec8, 0xc1419104},
+{'9', 0xffddffd6, 0xffddff8d},
+{'m', 0x40cddfc8, 0xc11b8644},
+{'q', 0x4115ee18, 0x00000000},
+{0, 0x4168ba30, 0xc09ee190},
+{'q', 0x40a7d500, 0xc0a11e70},
+{0, 0x40a7d500, 0xc1655ee0},
+{'8', 0xabdcca00, 0xe295e2dc},
+{'q', 0xc114cfac, 0x00000000},
+{0, 0xc168ba30, 0x4095ee20},
+{'8', 0x6cd725d7, 0x5b263900},
+{'q', 0x409a67d8, 0x40840728},
+{0, 0x41549660, 0x40840728},
+{'@', 0x00000039, 0x00004fa6},/*        9        x-advance: 79.648438 */
+{'M', 0x427b3056, 0xc23f5424},
+{'q', 0xc115ee18, 0x41632204},
+{0, 0xc1bda67e, 0x41632204},
+{'q', 0xc1040728, 0x00000000},
+{0, 0xc168ba2e, 0xc0644070},
+{'q', 0xc0c9660c, 0xc068ba30},
+{0, 0xc11b8644, 0xc1211e70},
+{'q', 0xc05b4cf8, 0xc0cddfc0},
+{0, 0xc05b4cf8, 0xc1655ee0},
+{'q', 0x00000000, 0xc12a11e8},
+{0, 0x4093b13c, 0xc19b8644},
+{'q', 0x4093b138, 0xc10e1910},
+{0, 0x414efe34, 0xc15ea848},
+{'q', 0x41064406, 0xc0a11e70},
+{0, 0x4195ee19, 0xc0a11e70},
+{'q', 0x415b4cfc, 0x00000000},
+{0, 0x41aaa120, 0x410e1910},
+{'q', 0x40f62760, 0x410e1910},
+{0, 0x40f62760, 0x41c19104},
+{'q', 0x00000000, 0x412d6d30},
+{0, 0xc02a11e0, 0x41b5423a},
+{'q', 0xc0259840, 0x413bf8d8},
+{0, 0xc0dfc6c0, 0x41a3ea85},
+{'q', 0xc08cfaa0, 0x410bdc33},
+{0, 0xc1200000, 0x41667d51},
+{'8', 0x41a02cd4, 0x149614cc},
+{'9', 0x0000ff54, 0xff66ff2a},
+{'l', 0x4130c880, 0xc0496610},
+{'8', 0x492e2f0d, 0x19531921},
+{'q', 0x4130c880, 0x00000000},
+{0, 0x41967d50, 0xc1211e6e},
+{'9', 0xffaf003e, 0xff18005d},
+{'m', 0x3ff1ad80, 0xc1ba4b30},
+{'8', 0x94dabd00, 0xd89dd8da},
+{'q', 0xc125982c, 0x00000000},
+{0, 0xc1864407, 0x40f1ada0},
+{'q', 0xc0cddfc4, 0x40f1adb0},
+{0, 0xc0cddfc4, 0x41a62762},
+{'8', 0x69234400, 0x255f2523},
+{'8', 0xe4620034, 0xb446e42e},
+{'q', 0x40407280, 0xc0be35b8},
+{0, 0x40407280, 0xc1679bc0},
+{'@', 0x0000003a, 0x000027ca},/*        :        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x40377f1a, 0xc1679bbf},
+{'4', 0x0000006d, 0x0073ffea},
+{'6', 0x0000ff93, 0xfe17005f},
+{'l', 0x40377f18, 0xc1679bc0},
+{'l', 0x415a2e8a, 0x00000000},
+{'l', 0xc0377f18, 0x41679bc0},
+{'l', 0xc15a2e8a, 0x00000000},
+{'@', 0x0000003b, 0x000027ca},/*        ;        x-advance: 39.789062 */
+{'M', 0x413423ce, 0x419292cc},
+{'l', 0xc1099f54, 0x00000000},
+{'9', 0xffb40043, 0xff6e0051},
+{'l', 0xc0c4ec4f, 0x00000000},
+{'4', 0xff8d0016, 0x0000006d},
+{'l', 0xc0064408, 0x412e8ba2},
+{'8', 0x5fe435f6, 0x50cf29ee},
+{'m', 0x40e8ba2c, 0xc29f055f},
+{'l', 0x40330560, 0xc1679bc0},
+{'l', 0x415a2e8c, 0x00000000},
+{'l', 0xc0330560, 0x41679bc0},
+{'l', 0xc15a2e8c, 0x00000000},
+{'@', 0x0000003c, 0x000053a2},/*        <        x-advance: 83.632812 */
+{'M', 0x411292cc, 0xc21fb864},
+{'l', 0x00000000, 0xc1655ee0},
+{'l', 0x428b292c, 0xc1e9d8a0},
+{'l', 0x00000000, 0x412c4ec8},
+{'l', 0xc2700000, 0x41ccc158},
+{'l', 0x42700000, 0x41cd508f},
+{'l', 0x00000000, 0x412b3055},
+{'l', 0xc28b292c, 0xc1e94966},
+{'@', 0x0000003d, 0x000053a2},/*        =        x-advance: 83.632812 */
+{'M', 0x4111745d, 0xc1c07293},
+{'l', 0x00000000, 0xc125982a},
+{'4', 0x0000022c, 0x00520000},
+{'6', 0x0000fdd4, 0xfee20000},
+{'l', 0x00000000, 0xc1259830},
+{'l', 0x428b292c, 0x00000000},
+{'l', 0x00000000, 0x41259830},
+{'l', 0xc28b292c, 0x00000000},
+{'@', 0x0000003e, 0x000053a2},/*        >        x-advance: 83.632812 */
+{'M', 0x411292cc, 0xc12c4ec5},
+{'l', 0x00000000, 0xc12b3055},
+{'l', 0x426fffff, 0xc1cd508f},
+{'l', 0xc26fffff, 0xc1ccc158},
+{'l', 0x00000000, 0xc12c4ec8},
+{'l', 0x428b292c, 0x41e9d8a0},
+{'l', 0x00000000, 0x41655ee0},
+{'l', 0xc28b292c, 0x41e94966},
+{'@', 0x0000003f, 0x00004fa6},/*        ?        x-advance: 79.648438 */
+{'M', 0x4244157b, 0xc2c80000},
+{'q', 0x415c6b6c, 0x00000000},
+{0, 0x41afaa12, 0x40dfc6c0},
+{'q', 0x41040728, 0x40dfc6b0},
+{0, 0x41040728, 0x418fc6b4},
+{'8', 0x5cef3600, 0x42d426f0},
+{'8', 0x30c41be6, 0x28bd14df},
+{'8', 0x479e28b9, 0x45dd1fe5},
+{'l', 0xc143cdde, 0x00000000},
+{'8', 0xb31ad407, 0xc530df13},
+{'8', 0xbc68e61d, 0xc855df3b},
+{'8', 0xcd26e919, 0xc10ce50c},
+{'8', 0xa8d8ca00, 0xdf97dfd8},
+{'q', 0xc11ca4b4, 0x00000000},
+{0, 0xc1813b14, 0x409ca4b0},
+{'9', 0x0027ffce, 0x006bffb8},
+{'l', 0xc1389d8a, 0xc0330560},
+{'q', 0x408cfaa0, 0xc15a2e88},
+{0, 0x415ea848, 0xc1a11e70},
+{'9', 0xffcc004c, 0xffcc00bf},
+{'m', 0xc1e0e525, 0x42c80000},
+{'l', 0x402e8ba8, 0xc160e525},
+{'l', 0x415a2e8c, 0x00000000},
+{'l', 0xc02e8ba0, 0x4160e525},
+{'l', 0xc15a2e8e, 0x00000000},
+{'@', 0x00000040, 0x00009162},/*        @        x-advance: 145.382812 */
+{'M', 0x4307508f, 0xc2533056},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0xc081ca40, 0x41bc880f},
+{'q', 0xc07f1ae0, 0x4127d508},
+{0, 0xc1330560, 0x4181ca4a},
+{'q', 0xc0e44070, 0x40b77f1e},
+{0, 0xc1801ca4, 0x40b77f1e},
+{'8', 0xe7aa00c8, 0xb7e3e7e3},
+{'4', 0xffd90001, 0x0000fffd},
+{'q', 0xc093b140, 0x41099f55},
+{0, 0xc1377f18, 0x414efe36},
+{'q', 0xc0d91020, 0x408880e6},
+{0, 0xc16af710, 0x408880e6},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18880e4, 0xc0e44072},
+{'q', 0xc0c07298, 0xc0e44074},
+{0, 0xc0c07298, 0xc19e525a},
+{'q', 0x00000000, 0xc1377f18},
+{0, 0x408f3780, 0xc1aaa11e},
+{'q', 0x40917460, 0xc11dc320},
+{0, 0x414a847c, 0xc17aa120},
+{'q', 0x4101ca48, 0xc0b9bbf0},
+{0, 0x418fc6b4, 0xc0b9bbf0},
+{'9', 0x0000007a, 0x006500a8},
+{'l', 0x3ed6d300, 0x00000000},
+{'4', 0xffa70015, 0x00000057},
+{'l', 0xc101ca48, 0x420d89d8},
+{'q', 0xc0259840, 0x41377f1c},
+{0, 0xc0259840, 0x418d89d9},
+{'8', 0x342d3400, 0xda52002c},
+{'q', 0x40982af0, 0xc09a67d8},
+{0, 0x40ef70c0, 0xc1549662},
+{'q', 0x402e8ba0, 0xc1076274},
+{0, 0x402e8ba0, 0xc195ee18},
+{'q', 0x00000000, 0xc14847a0},
+{0, 0xc0ac4ec0, 0xc1b157b8},
+{'q', 0xc0ac4ec0, 0xc11b8648},
+{0, 0xc1786440, 0xc16e5258},
+{'q', 0xc1223ce0, 0xc0a7d510},
+{0, 0xc1bda67c, 0xc0a7d510},
+{'q', 0xc1876278, 0x00000000},
+{0, 0xc1ef70ca, 0x40ef70d0},
+{'q', 0xc1501ca4, 0x40ef70c0},
+{0, 0xc1a35b4c, 0x41acddfc},
+{'q', 0xc0ed33ec, 0x4160e524},
+{0, 0xc0ed33ec, 0x41fc4ec4},
+{'q', 0x00000000, 0x4157f1ac},
+{0, 0x40ae8ba4, 0x41bec4ec},
+{'q', 0x40b0c880, 0x412479bb},
+{0, 0x417dfc6c, 0x417cddfc},
+{'q', 0x4126b698, 0x40b0c880},
+{0, 0x41c2203a, 0x40b0c880},
+{'9', 0x000000af, 0xffa60151},
+{'l', 0x40762760, 0x40faa11e},
+{'q', 0xc1223ce0, 0x40c2af70},
+{0, 0xc1b0394c, 0x4114cfaa},
+{'q', 0xc13d1740, 0x40496608},
+{0, 0xc1bfe358, 0x40496608},
+{'q', 0xc1864408, 0x00000000},
+{0, 0xc1eaf70e, 0xc0d4965e},
+{'q', 0xc148479c, 0xc0d49661},
+{0, 0xc19a67d5, 0xc1982af7},
+{'q', 0xc0d9101c, 0xc1460abd},
+{0, 0xc0d9101c, 0xc1e3b13a},
+{'q', 0x00000000, 0xc19ca4b4},
+{0, 0x410abdc4, 0xc20e60ac},
+{'q', 0x410bdc32, 0xc1801ca4},
+{0, 0x41c19102, 0xc1c7292c},
+{'q', 0x417745d0, 0xc10f3780},
+{0, 0x420a7627, 0xc10f3780},
+{'q', 0x4186d340, 0x00000000},
+{0, 0x41e8ba30, 0x40cba2e0},
+{'q', 0x4143cde0, 0x40c96610},
+{0, 0x41955ee0, 0x418ea848},
+{'9', 0x005c0034, 0x00d60034},
+{'m', 0xc22982ae, 0x3f0f3780},
+{'8', 0xa5dcc700, 0xdd9edddc},
+{'8', 0x239c00c8, 0x63bc23d5},
+{'q', 0xc0496600, 0x40ff1ad8},
+{0, 0xc0496600, 0x41876276},
+{'8', 0x691a4300, 0x2652261a},
+{'8', 0xe855002c, 0xbd47e828},
+{'8', 0x9e2fd51e, 0xa110c910},
+{'@', 0x00000041, 0x00005f86},/*        A        x-advance: 95.523438 */
+{'M', 0x42946440, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864406, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba40, 0x3fe8ba40},
+{0, 0xc0259830, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'l', 0x4213699e, 0x00000000},
+{'l', 0xc0e44070, 0xc21aaf71},
+{'l', 0xbfe8ba20, 0xc128f378},
+{'@', 0x00000042, 0x00005f86},/*        B        x-advance: 95.523438 */
+{'M', 0x41bbf8d7, 0xc2c5101c},
+{'l', 0x420ea848, 0x00000000},
+{'q', 0x4169d898, 0x00000000},
+{0, 0x41b80e50, 0x40c2af70},
+{'q', 0x41076278, 0x40c07290},
+{0, 0x41076278, 0x418377f0},
+{'q', 0x00000000, 0x419f70c8},
+{0, 0xc1bda680, 0x41c07292},
+{'q', 0x411a67d8, 0x3fcddfc0},
+{0, 0x416f70c8, 0x40eaf710},
+{'q', 0x40aa11f0, 0x40b54238},
+{0, 0x40aa11f0, 0x415ea846},
+{'q', 0x00000000, 0x416e525a},
+{0, 0xc12e8ba0, 0x41b660ac},
+{'9', 0x003fffa9, 0x003fff0e},
+{'4', 0x0000feb4, 0xfcec0098},
+{'m', 0xc06d33f0, 0x42afaa11},
+{'l', 0x41cddfc7, 0x36000000},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41abbf8c, 0xc0a35b4c},
+{'q', 0x40db4d00, 0xc0a5982c},
+{0, 0x40db4d00, 0xc171ada6},
+{'q', 0x00000000, 0xc0ef70cc},
+{0, 0xc0b30560, 0xc13660ae},
+{'9', 0xffe1ffd4, 0xffe1ff81},
+{'4', 0x0000ff34, 0x011cffc9},
+{'m', 0x410f3780, 0xc237c6b7},
+{'l', 0x41b92cc1, 0x00000000},
+{'q', 0x41c699f6, 0x00000000},
+{0, 0x41c699f6, 0xc19055ec},
+{'9', 0xff970000, 0xff97ff6b},
+{'l', 0xc1b92cc0, 0x00000000},
+{'l', 0xc0c2af74, 0x41f982b0},
+{'@', 0x00000043, 0x0000676d},/*        C        x-advance: 103.425781 */
+{'M', 0x42bdee19, 0xc1bc880e},
+{'q', 0xc10cfaa0, 0x41525982},
+{0, 0xc1a00000, 0x4198ba2e},
+{'q', 0xc1330560, 0x40bbf8d8},
+{0, 0xc1d01ca4, 0x40bbf8d8},
+{'q', 0xc14a847c, 0xb4000000},
+{0, 0xc1b0394a, 0xc0a11e6f},
+{'q', 0xc114cfaa, 0xc0a35b4d},
+{0, 0xc1632203, 0xc1679bbe},
+{'q', 0xc09a67d6, 0xc115ee1a},
+{0, 0xc09a67d6, 0xc1ad6d35},
+{'q', 0x00000000, 0xc1899f54},
+{0, 0x40eaf70c, 0xc1f8f376},
+{'q', 0x40eaf70c, 0xc15ea848},
+{0, 0x41a2cc16, 0xc1abbf90},
+{'q', 0x41513b14, 0xc0f3ea80},
+{0, 0x41e94964, 0xc0f3ea80},
+{'q', 0x4172cc18, 0x00000000},
+{0, 0x41ccc158, 0x40cba2f0},
+{'9', 0x00320053, 0x008e006e},
+{'l', 0xc1496608, 0x40762760},
+{'q', 0xc0211e60, 0xc0faa120},
+{0, 0xc11ca4b0, 0xc1472930},
+{'q', 0xc0e67d50, 0xc093b140},
+{0, 0xc18e1910, 0xc093b140},
+{'q', 0xc14ddfc8, 0x00000000},
+{0, 0xc1b5423e, 0x40c72930},
+{'q', 0xc11ca4b4, 0x40c4ec50},
+{0, 0xc1708f38, 0x418b4cfc},
+{'q', 0xc0a7d508, 0x41330560},
+{0, 0xc0a7d508, 0x41cefe36},
+{'q', 0x00000000, 0x415fc6b4},
+{0, 0x40f3ea84, 0x41b0c880},
+{'q', 0x40f3ea84, 0x4100abdc},
+{0, 0x41a8f377, 0x4100abdc},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x419a67d4, 0xc0a35b4c},
+{'q', 0x410f3780, 0xc0a5982c},
+{0, 0x417cde00, 0xc173ea84},
+{'l', 0x41200000, 0x40c7292c},
+{'@', 0x00000044, 0x0000676d},/*        D        x-advance: 103.425781 */
+{'M', 0x42501ca5, 0xc2c5101c},
+{'q', 0x41ae8ba2, 0x00000000},
+{0, 0x4209101d, 0x41389d88},
+{'q', 0x41484798, 0x41377f18},
+{0, 0x41484798, 0x41fd6d32},
+{'q', 0x00000000, 0x4184072a},
+{0, 0xc0e67d50, 0x41e70c88},
+{'q', 0xc0e67d50, 0x41460abf},
+{0, 0xc1a62764, 0x419b8644},
+{'9', 0x0037ff95, 0x0037ff0b},
+{'4', 0x0000fee2, 0xfcec0098},
+{'6', 0x000000e4, 0x02befeff},
+{'l', 0x419ee190, 0x36000000},
+{'q', 0x415a2e8c, 0x00000000},
+{0, 0x41c07292, 0xc0ac4ec4},
+{'q', 0x4126b698, 0xc0ae8ba4},
+{0, 0x417f1ae0, 0xc17982b0},
+{'q', 0x40b30550, 0xc1235b4c},
+{0, 0x40b30550, 0xc1be35b4},
+{'q', 0x00000000, 0xc17508f8},
+{0, 0xc10cfaa0, 0xc1bec4ec},
+{'9', 0xffbcffba, 0xffbcff3b},
+{'l', 0xc1876276, 0x00000000},
+{'l', 0xc1708f3a, 0x429a4407},
+{'@', 0x00000045, 0x00005f86},/*        E        x-advance: 95.523438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4292b69a, 0x00000000},
+{'l', 0xc0064420, 0x412e8ba0},
+{'l', 0xc26fffff, 0x00000000},
+{'l', 0xc0c4ec50, 0x41fcddfc},
+{'l', 0x425f377f, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc25f3780, 0x00000000},
+{'l', 0xc0d4965c, 0x420957b8},
+{'l', 0x427b77f2, 0x35800000},
+{'l', 0xc0064400, 0x412e8ba3},
+{'l', 0xc2987293, 0x00000000},
+{'@', 0x00000046, 0x0000577b},/*        F        x-advance: 87.480469 */
+{'M', 0x420b055f, 0xc2af3ea8},
+{'l', 0xc0e44074, 0x421292cc},
+{'l', 0x425ea848, 0x00000000},
+{'l', 0xc00abdc0, 0x4130c880},
+{'l', 0xc25ea848, 0x00000000},
+{'l', 0xc0f62760, 0x421fb864},
+{'l', 0xc155b4d0, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x428d660a, 0x00000000},
+{'l', 0xc0064400, 0x412e8ba0},
+{'l', 0xc2655ee1, 0x00000000},
+{'@', 0x00000047, 0x00006f66},/*        G        x-advance: 111.398438 */
+{'M', 0x424f8d6d, 0x3fb3055f},
+{'q', 0xc1aaa11e, 0x00000000},
+{0, 0xc2044ec5, 0xc12e8ba3},
+{'q', 0xc13bf8d6, 0xc12e8ba3},
+{0, 0xc13bf8d6, 0xc1f479bc},
+{'q', 0x00000000, 0xc18b4cfa},
+{0, 0x40eaf70c, 0xc1f8f378},
+{'q', 0x40eaf70c, 0xc15c6b68},
+{0, 0x41a62762, 0xc1aa11e4},
+{'q', 0x4157f1b0, 0xc0f1adb0},
+{0, 0x41f6b69a, 0xc0f1adb0},
+{'q', 0x41786440, 0x00000000},
+{0, 0x41cba2e8, 0x40bbf8e0},
+{'9', 0x002e004f, 0x008a006e},
+{'l', 0xc157f1a8, 0x4071adc0},
+{'q', 0xc0259840, 0xc100abe0},
+{0, 0xc115ee18, 0xc1407298},
+{'q', 0xc0d91020, 0xc081ca50},
+{0, 0xc1899f54, 0xc081ca50},
+{'q', 0xc156d340, 0x00000000},
+{0, 0xc1bc8810, 0x40c072a0},
+{'q', 0xc1211e6e, 0x40c07290},
+{0, 0xc17745d0, 0x4189101c},
+{'q', 0xc0ac4ec8, 0x4130c880},
+{0, 0xc0ac4ec8, 0x41ccc156},
+{'q', 0x00000000, 0x416c157c},
+{0, 0x4104072a, 0x41b6efe4},
+{'q', 0x4104072a, 0x4100abdc},
+{0, 0x41ba4b31, 0x4100abdc},
+{'q', 0x411a67d4, 0x00000000},
+{0, 0x4193b13c, 0xc02e8ba4},
+{'9', 0xffea0046, 0xffbf007a},
+{'l', 0x40644060, 0xc18e1911},
+{'l', 0xc1eb8642, 0x00000000},
+{'4', 0xffa70011, 0x0000014d},
+{'l', 0xc0dfc6b0, 0x420a7627},
+{'q', 0xc11ca4b0, 0x41064406},
+{0, 0xc1a745d0, 0x4143cddf},
+{'q', 0xc130c888, 0x40762764},
+{0, 0xc1c33eaa, 0x40762764},
+{'@', 0x00000048, 0x0000676d},/*        H        x-advance: 103.425781 */
+{'M', 0x428ecc15, 0x00000000},
+{'l', 0x410e1910, 0xc236a847},
+{'l', 0xc2568ba2, 0x00000000},
+{'l', 0xc10e1910, 0x4236a847},
+{'l', 0xc155b4d0, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'l', 0x4155b4d0, 0x00000000},
+{'l', 0xc101ca4c, 0x4226b699},
+{'l', 0x42568ba2, 0x00000000},
+{'l', 0x4101ca50, 0xc226b699},
+{'l', 0x41501ca0, 0x00000000},
+{'l', 0xc1994964, 0x42c5101c},
+{'l', 0xc1501ca8, 0x00000000},
+{'@', 0x00000049, 0x000027ca},/*        I        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'l', 0x4155b4ce, 0x00000000},
+{'l', 0xc1994965, 0x42c5101c},
+{'l', 0xc155b4d0, 0x00000000},
+{'@', 0x0000004a, 0x0000479b},/*        J        x-advance: 71.605469 */
+{'M', 0x41d52598, 0x3fb3055f},
+{'q', 0xc131e6f0, 0x00000000},
+{0, 0xc191745d, 0xc0d01ca5},
+{'9', 0xffccffc9, 0xff69ffba},
+{'l', 0x413bf8d7, 0xc013b140},
+{'8', 0x642c410c, 0x2257221f},
+{'q', 0x40eaf70c, 0x00000000},
+{0, 0x413e35b6, 0xc0a11e6e},
+{'9', 0xffd80024, 0xff7e0035},
+{'l', 0x412faa10, 0xc263699f},
+{'l', 0xc1a2cc14, 0x00000000},
+{'4', 0xffa90010, 0x0000010d},
+{'l', 0xc157f1ac, 0x4289e6ef},
+{'q', 0xc04072a0, 0x417aa121},
+{0, 0xc12faa14, 0x41bada69},
+{'q', 0xc0ff1ad8, 0x40f3ea84},
+{0, 0xc1acddfc, 0x40f3ea84},
+{'@', 0x0000004b, 0x00005f86},/*        K        x-advance: 95.523438 */
+{'M', 0x428eefe3, 0x00000000},
+{'l', 0xc2040729, 0xc23c880e},
+{'l', 0xc154965e, 0x411055ec},
+{'l', 0xc0ed33ec, 0x42187293},
+{'l', 0xc155b4d0, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4155b4ce, 0x00000000},
+{'l', 0xc1182af6, 0x42414965},
+{'l', 0x411ca4b2, 0xc11055f0},
+{'l', 0x423a0394, 0xc21d33e9},
+{'l', 0x4189101c, 0x00000000},
+{'l', 0xc251ca4a, 0x42303948},
+{'l', 0x421bcde0, 0x4259e6f0},
+{'l', 0xc17cde00, 0x00000000},
+{'@', 0x0000004c, 0x00004fa6},/*        L        x-advance: 79.648438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4155b4ce, 0x00000000},
+{'l', 0xc187f1ad, 0x42af3ea8},
+{'l', 0x4247292e, 0xb6400000},
+{'l', 0xc0064420, 0x412e8ba3},
+{'l', 0xc27c9660, 0x00000000},
+{'@', 0x0000004d, 0x0000774c},/*        M        x-advance: 119.296875 */
+{'M', 0x42b05d17, 0x00000000},
+{'l', 0x41496608, 0xc281ca4b},
+{'q', 0x40211e80, 0xc14efe38},
+{0, 0x40917460, 0xc1a7d508},
+{'9', 0x0069ffce, 0x009cffaf},
+{'4', 0x0212fece, 0x0000ffbb},
+{'l', 0xc14efe34, 0xc2849661},
+{'q', 0xbed6d300, 0xc001ca40},
+{0, 0xc0377f20, 0xc19ca4b0},
+{'q', 0xbf211e60, 0x40864400},
+{0, 0xc0064400, 0x41525980},
+{'9', 0x0047fff5, 0x0245ff91},
+{'l', 0xc13e35b6, 0x00000000},
+{'4', 0xfcec0098, 0x00000084},
+{'l', 0x415377f0, 0x4288a4b2},
+{'9', 0x00150004, 0x00720011},
+{'l', 0x40e8ba30, 0xc16e5259},
+{'l', 0x421aaf70, 0xc2878644},
+{'l', 0x418f3780, 0x00000000},
+{'l', 0xc198ba30, 0x42c5101c},
+{'l', 0xc1407290, 0x00000000},
+{'@', 0x0000004e, 0x0000676d},/*        N        x-advance: 103.425781 */
+{'M', 0x428a0abe, 0x00000000},
+{'l', 0xc214880f, 0xc2a93b14},
+{'9', 0x005ffff4, 0x0095ffe9},
+{'l', 0xc14a8478, 0x4283e35b},
+{'l', 0xc13e35b6, 0x00000000},
+{'4', 0xfcec0098, 0x00000076},
+{'l', 0x42155ee2, 0x42a9ee18},
+{'9', 0xff97000e, 0xff620019},
+{'l', 0x414a8478, 0xc28235b4},
+{'l', 0x41407298, 0x00000000},
+{'l', 0xc198ba30, 0x42c5101c},
+{'l', 0xc1762760, 0x00000000},
+{'@', 0x0000004f, 0x00006f66},/*        O        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'q', 0xc0f1ada0, 0xc0f86440},
+{0, 0xc1abbf8c, 0xc0f86440},
+{'@', 0x00000050, 0x00005f86},/*        P        x-advance: 95.523438 */
+{'M', 0x426e5259, 0xc2c5101c},
+{'q', 0x41813b16, 0x00000000},
+{0, 0x41ccc15a, 0x40e8ba20},
+{'q', 0x41170c88, 0x40e8ba30},
+{0, 0x41170c88, 0x419f70c8},
+{'q', 0x00000000, 0x41762768},
+{0, 0xc12b3058, 0x41c19104},
+{'9', 0x0045ffab, 0x0045ff18},
+{'l', 0xc1ed33e9, 0x00000000},
+{'l', 0xc0ed33ec, 0x42199102},
+{'4', 0x0000ff96, 0xfcec0098},
+{'6', 0x00000120, 0x018cfefe},
+{'l', 0x41d880e4, 0x00000000},
+{'q', 0x41d5b4d0, 0x00000000},
+{0, 0x41d5b4d0, 0xc1adfc6c},
+{'q', 0x00000000, 0xc1052598},
+{0, 0xc0b0c880, 0xc14ba2e8},
+{'9', 0xffddffd4, 0xffddff7e},
+{'l', 0xc1c33ea8, 0x00000000},
+{'l', 0xc0f1adac, 0x421b8644},
+{'@', 0x00000051, 0x00006f66},/*        Q        x-advance: 111.398438 */
+{'M', 0x4281ca4b, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423d0, 0x412faa18},
+{0, 0x413423d0, 0x41ec157c},
+{'q', 0xbeb30600, 0x418880e6},
+{0, 0xc0d25980, 0x41ef70c9},
+{'q', 0xc0c72930, 0x414ddfc6},
+{0, 0xc18a2e8c, 0x41a5982b},
+{'q', 0xc12faa18, 0x40faa11e},
+{0, 0xc1cb13b2, 0x411b8644},
+{'8', 0x63254309, 0x1e531e1b},
+{'9', 0x00000020, 0xfff90044},
+{'l', 0xbfa11e80, 0x4115ee18},
+{'q', 0xc0aa11e0, 0x3fc4ec50},
+{0, 0xc13d1748, 0x3fc4ec50},
+{'q', 0xc128f374, 0x00000000},
+{0, 0xc181ca4a, 0xc0c07294},
+{'q', 0xc0b54240, 0xc0c07292},
+{0, 0xc0e8ba30, 0xc19ee191},
+{'q', 0xc18d89d8, 0xbf982af0},
+{0, 0xc1dcfaa0, 0xc1407292},
+{'q', 0xc11ee192, 0xc12d6d34},
+{0, 0xc11ee192, 0xc1e9d89e},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f4, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b4, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8644, 0x40c72920},
+{0, 0xc16e5258, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70cc, 0x40f3ea84},
+{0, 0x41ad6d35, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb69a0, 0xc0c07292},
+{'q', 0x411b8640, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ec0, 0xc1419100},
+{0, 0x40ac4ec0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea80, 0xc1b1e6ee},
+{'q', 0xc0f1adb0, 0xc0f86440},
+{0, 0xc1abbf90, 0xc0f86440},
+{'@', 0x00000052, 0x0000676d},/*        R        x-advance: 103.425781 */
+{'M', 0x4292fe36, 0x00000000},
+{'l', 0xc187f1b0, 0xc223a2e9},
+{'l', 0xc1f6b699, 0x00000000},
+{'l', 0xc0fcddfc, 0x4223a2e9},
+{'4', 0x0000ff96, 0xfcec0098},
+{'l', 0x422b3056, 0x00000000},
+{'q', 0x416f70c8, 0x00000000},
+{0, 0x41bec4ec, 0x40e44070},
+{'q', 0x410e1910, 0x40e44070},
+{0, 0x410e1910, 0x4195ee18},
+{'q', 0x00000000, 0x41525980},
+{0, 0xc0f1adb0, 0x41a6b69a},
+{'9', 0x003dffc4, 0x004dff4e},
+{'4', 0x01500095, 0x0000ff8d},
+{'m', 0xc1591020, 0xc24ddfc7},
+{'q', 0x414a8478, 0x00000000},
+{0, 0x4198ba30, 0xc0a7d508},
+{'q', 0x40cddfc0, 0xc0aa11e8},
+{0, 0x40cddfc0, 0xc16e5258},
+{'q', 0x00000000, 0xc0faa120},
+{0, 0xc0a7d500, 0xc1407290},
+{'9', 0xffdfffd7, 0xffdfff84},
+{'l', 0xc1eee18e, 0x00000000},
+{'l', 0xc0e20398, 0x4211745d},
+{'l', 0x4200abdc, 0x00000000},
+{'@', 0x00000053, 0x00005f86},/*        S        x-advance: 95.523438 */
+{'M', 0x422c4ec5, 0x3fb3055f},
+{'q', 0xc18b4cfb, 0x00000000},
+{0, 0xc1d880e5, 0xc0c4ec4f},
+{'9', 0xffcfffb4, 0xff69ffa1},
+{'l', 0x41460abe, 0xc0259828},
+{'q', 0x3ff1ada0, 0x411055ee},
+{0, 0x41064406, 0x41513b13},
+{'q', 0x40d01ca4, 0x4081ca4c},
+{0, 0x4199d89d, 0x4081ca4c},
+{'q', 0x417508f4, 0x00000000},
+{0, 0x41b3055e, 0xc091745c},
+{'q', 0x40e203a0, 0xc093b13a},
+{0, 0x40e203a0, 0xc160e525},
+{'8', 0xc5f0db00, 0xd8c9eaf0},
+{'q', 0xc09ca4b8, 0xc013b140},
+{0, 0xc186d340, 0xc0b54238},
+{'q', 0xc13f5424, 0xc0525990},
+{0, 0xc18f377f, 0xc0d6d340},
+{'8', 0xbdb9e5d2, 0xa3e8d9e8},
+{'q', 0x00000000, 0xc14ba2e8},
+{0, 0x412b3054, 0xc19f70c8},
+{'q', 0x412c4ec4, 0xc0e8ba30},
+{0, 0x41e8ba2e, 0xc0e8ba30},
+{'q', 0x41762760, 0x00000000},
+{0, 0x41c57b88, 0x40aa11f0},
+{'9', 0x002a004a, 0x007c005d},
+{'l', 0xc1419108, 0x40644060},
+{'q', 0xc013b120, 0xc0eaf710},
+{0, 0xc1052598, 0xc12d6d30},
+{'q', 0xc0be35b0, 0xc05fc6c0},
+{0, 0xc1801ca2, 0xc05fc6c0},
+{'q', 0xc1d25983, 0x00000000},
+{0, 0xc1d25983, 0x41840728},
+{'8', 0x360d2100, 0x252e150e},
+{'q', 0x40840728, 0x3ffaa120},
+{0, 0x41825982, 0x40a7d508},
+{'q', 0x415a2e8c, 0x4071ada0},
+{0, 0x419ca4b2, 0x40e8ba30},
+{'8', 0x44491b30, 0x62192719},
+{'q', 0x00000000, 0x41667d50},
+{0, 0xc12d6d30, 0x41b157b8},
+{'q', 0xc12d6d38, 0x40f86440},
+{0, 0xc204ddfd, 0x40f86440},
+{'@', 0x00000054, 0x0000577b},/*        T        x-advance: 87.480469 */
+{'M', 0x42700000, 0xc2af3ea8},
+{'l', 0xc18880e6, 0x42af3ea8},
+{'l', 0xc1549660, 0x00000000},
+{'l', 0x418880e6, 0xc2af3ea8},
+{'l', 0xc2076276, 0x00000000},
+{'l', 0x40064400, 0xc12e8ba0},
+{'l', 0x42a1f542, 0x00000000},
+{'l', 0xc0064400, 0x412e8ba0},
+{'l', 0xc2076276, 0x00000000},
+{'@', 0x00000055, 0x0000676d},/*        U        x-advance: 103.425781 */
+{'M', 0x4236efe3, 0x3fb3055f},
+{'q', 0xc1825982, 0x00000000},
+{0, 0xc1cd508f, 0xc1064407},
+{'q', 0xc115ee18, 0xc1076276},
+{0, 0xc115ee18, 0xc1b92cc2},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0053, 0x0000006a},
+{'l', 0xc135423e, 0x426bcddf},
+{'q', 0xbf982af0, 0x40c2af70},
+{0, 0xbf982af0, 0x411ffffe},
+{'q', 0x00000000, 0x41182af8},
+{0, 0x40c2af70, 0x416d33eb},
+{'q', 0x40c4ec50, 0x40aa11e6},
+{0, 0x4189101c, 0x40aa11e6},
+{'9', 0x000000d6, 0xff1d0101},
+{'4', 0xfe1b005d, 0x0000006a},
+{'l', 0xc13e35b0, 0x4275dfc6},
+{'q', 0xc071ada0, 0x4198ba2e},
+{0, 0xc1786440, 0x41e67d50},
+{'q', 0xc13bf8d8, 0x411a67d4},
+{0, 0xc1f7d50a, 0x411a67d4},
+{'@', 0x00000056, 0x00005f86},/*        V        x-advance: 95.523438 */
+{'M', 0x423d5ee1, 0x00000000},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0xc1a8f377, 0xc2c5101c},
+{'l', 0x4159101c, 0x00000000},
+{'l', 0x415d89da, 0x428abdc2},
+{'l', 0x401ca4b0, 0x418b4cfc},
+{'l', 0x4114cfa8, 0xc18b4cfa},
+{'l', 0x42223cde, 0xc28abdc2},
+{'l', 0x4168ba30, 0x00000000},
+{'l', 0xc26d33eb, 0x42c5101c},
+{'@', 0x00000057, 0x0000872c},/*        W        x-advance: 135.171875 */
+{'M', 0x42c4a4b3, 0x00000000},
+{'4', 0x0000ff84, 0xfe0cffd9},
+{'q', 0xbf7aa100, 0xc199d89e},
+{0, 0xbf8f3780, 0xc1b5423a},
+{'9', 0x006fffd6, 0x00b5ffb5},
+{'l', 0xc1ea67d6, 0x427a5983},
+{'l', 0xc17982ae, 0x00000000},
+{'4', 0xfcecffb1, 0x0000006e},
+{'l', 0x40b0c880, 0x427a5982},
+{'q', 0x3f56d340, 0x412d6d32},
+{0, 0x3f8f3780, 0x41c19100},
+{'q', 0x40b0c880, 0xc1525982},
+{0, 0x4111745c, 0xc1a8f378},
+{'9', 0xffc1001d, 0xfdf300f8},
+{'4', 0x00000066, 0x01ea0029},
+{'9', 0x00560007, 0x00cb0009},
+{'l', 0x3f8f3780, 0xc01ca4ac},
+{'q', 0x4056d340, 0xc100abdd},
+{0, 0x40ae8ba0, 0xc14ddfc7},
+{'9', 0xffda0010, 0xfdc5010d},
+{'l', 0x4160e520, 0x00000000},
+{'l', 0xc2407292, 0x42c5101c},
+{'@', 0x00000058, 0x00005f86},/*        X        x-advance: 95.523438 */
+{'M', 0x428bb864, 0x00000000},
+{'l', 0xc1a982ae, 0xc22982af},
+{'l', 0xc21292cc, 0x422982af},
+{'l', 0xc16c157d, 0x00000000},
+{'l', 0x4236efe3, 0xc250abdc},
+{'l', 0xc1be35b5, 0xc239745c},
+{'l', 0x415ea84a, 0x00000000},
+{'l', 0x41970c88, 0x421a2038},
+{'l', 0x4204ddfb, 0xc21a2038},
+{'l', 0x416c1580, 0x00000000},
+{'l', 0xc227d509, 0x423d1745},
+{'l', 0x41cddfc6, 0x424d08f3},
+{'l', 0xc15ea848, 0x00000000},
+{'@', 0x00000059, 0x00005f86},/*        Y        x-advance: 95.523438 */
+{'M', 0x423bf8d7, 0x00000000},
+{'l', 0xc1549660, 0x00000000},
+{'l', 0x4100abdc, 0xc2235b4d},
+{'l', 0xc1d6d340, 0xc266c4eb},
+{'l', 0x415b4cfc, 0x00000000},
+{'l', 0x41ab3056, 0x423c880d},
+{'l', 0x421ca4b2, 0xc23c880d},
+{'l', 0x416f70c8, 0x00000000},
+{'l', 0xc244ec4e, 0x4266c4eb},
+{'l', 0xc0fcddf8, 0x42235b4d},
+{'@', 0x0000005a, 0x0000577b},/*        Z        x-advance: 87.480469 */
+{'M', 0x42975424, 0x00000000},
+{'l', 0xc29cec4f, 0x00000000},
+{'l', 0x3ff1ada9, 0xc1200000},
+{'l', 0x4293699f, 0xc29b3ea8},
+{'l', 0xc255fc6c, 0x00000000},
+{'l', 0x40064410, 0xc12e8ba0},
+{'l', 0x428c23ce, 0x00000000},
+{'l', 0xbff1adc0, 0x411b8640},
+{'l', 0xc29369a0, 0x429bcde0},
+{'l', 0x42778d6e, 0xb6400000},
+{'l', 0xc0064400, 0x412e8ba3},
+{'@', 0x0000005b, 0x000027ca},/*        [        x-advance: 39.789062 */
+{'M', 0xc02e8ba3, 0x41edc322},
+{'l', 0x41cefe35, 0xc3057f1b},
+{'l', 0x41e3b13b, 0x37000000},
+{'l', 0xbfdfc6c0, 0x411055f0},
+{'l', 0xc1825982, 0x00000000},
+{'l', 0xc1b39496, 0x42e6e8ba},
+{'l', 0x41825982, 0xb6000000},
+{'l', 0xbfdfc6b0, 0x411055ee},
+{'l', 0xc1e32203, 0x00000000},
+{'@', 0x0000005c, 0x000027ca},/*       \         x-advance: 39.789062 */
+{'M', 0x41b3055f, 0x3fb3055f},
+{'l', 0xc142af71, 0xc2d25982},
+{'l', 0x4125982b, 0x00000000},
+{'l', 0x4147292c, 0x42d25982},
+{'l', 0xc12a11e6, 0x36780000},
+{'@', 0x0000005d, 0x000027ca},/*        ]        x-advance: 39.789062 */
+{'M', 0xc13d1746, 0x41edc322},
+{'l', 0x3fdfc6b8, 0xc11055ee},
+{'l', 0x4181ca4b, 0x00000000},
+{'l', 0x41b39496, 0xc2e6e8ba},
+{'l', 0xc1825982, 0x00000000},
+{'l', 0x3fdfc6a8, 0xc11055f0},
+{'l', 0x41e3b13c, 0x00000000},
+{'l', 0xc1cf8d6d, 0x43057f1b},
+{'l', 0xc1e32204, 0xb6800000},
+{'@', 0x0000005e, 0x00004333},/*        ^        x-advance: 67.199219 */
+{'M', 0x4264880e, 0xc23c4072},
+{'l', 0xc1acddfc, 0xc231101c},
+{'l', 0xc1ab3056, 0x4231101c},
+{'l', 0xc135423c, 0x00000000},
+{'l', 0x41cddfc6, 0xc24ddfc6},
+{'l', 0x41632204, 0x00000000},
+{'l', 0x41cefe34, 0x424ddfc6},
+{'l', 0xc1377f18, 0x00000000},
+{'@', 0x0000005f, 0x00004fa6},/*        _        x-advance: 79.648438 */
+{'M', 0xc133055f, 0x418bdc32},
+{'l', 0x00000000, 0xc0aa11e6},
+{'l', 0x42a4c158, 0x00000000},
+{'l', 0x00000000, 0x40aa11e6},
+{'l', 0xc2a4c158, 0x00000000},
+{'@', 0x00000060, 0x00002fb1},/*        `        x-advance: 47.691406 */
+{'M', 0x41e67d50, 0xc2a7f8d7},
+{'l', 0xc19dc322, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x413423cc, 0x41a08f38},
+{'l', 0xbe56d300, 0x3fb30540},
+{'l', 0xc0c4ec50, 0x00000000},
+{'@', 0x00000061, 0x00004fa6},/*        a        x-advance: 79.648438 */
+{'M', 0x4281a67d, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bc00, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72930, 0x405fc6b8},
+{0, 0xc1708f38, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af70, 0xc0bbf8d7},
+{0, 0xc0c2af70, 0xc16f70c8},
+{'q', 0xb4800000, 0xc14efe34},
+{0, 0x4113b13b, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4a, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496610, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa120, 0xc095ee10},
+{0, 0x41a7d508, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c8a, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59820, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa100, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040728, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'q', 0x40644070, 0xc095ee1c},
+{0, 0x4095ee18, 0xc1211e70},
+{'l', 0x3ff1ada0, 0xc10bdc32},
+{'@', 0x00000062, 0x00004fa6},/*        b        x-advance: 79.648438 */
+{'M', 0x42501ca5, 0xc29a2039},
+{'q', 0x412faa10, 0x00000000},
+{0, 0x418880e6, 0x40d49660},
+{'q', 0x40c4ec40, 0x40d25980},
+{0, 0x40c4ec40, 0x4190e524},
+{'q', 0x00000000, 0x41632204},
+{0, 0xc08abdc0, 0x41dc6b6a},
+{'q', 0xc08880e0, 0x41549661},
+{0, 0xc1419100, 0x419dc322},
+{'q', 0xc0f86440, 0x40cddfc8},
+{0, 0xc19ee190, 0x40cddfc8},
+{'8', 0xe39100bc, 0xafc4e3d5},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x3bf314fd, 0x28f626f7},
+{'l', 0xc1419101, 0x00000000},
+{'8', 0xd30af802, 0xb210db08},
+{'4', 0xfd3f0089, 0x00000064},
+{'l', 0xc0b9bbf8, 0x41eca4b4},
+{'9', 0x0019fffc, 0x004effed},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0xb356cb28, 0xe86fe82d},
+{'m', 0xc068ba30, 0x411b8640},
+{'8', 0x16a100c9, 0x44be16d9},
+{'q', 0xc05b4cf8, 0x40b54238},
+{0, 0xc0ac4ec4, 0x41644070},
+{'q', 0xbffaa120, 0x410880e4},
+{0, 0xbffaa120, 0x417508f4},
+{'8', 0x6d234500, 0x26632623},
+{'q', 0x410abdc4, 0x00000000},
+{0, 0x415b4cfc, 0xc0a7d50a},
+{'q', 0x40a11e70, 0xc0aa11e6},
+{0, 0x40fcde00, 0xc1864406},
+{'q', 0x40377f10, 0xc1389d8c},
+{0, 0x40377f10, 0xc1a11e70},
+{'8', 0x99e6bc00, 0xdeaddee6},
+{'@', 0x00000063, 0x0000479b},/*        c        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc10880e5},
+{'9', 0x00000072, 0xff8000a1},
+{'l', 0x412e8ba4, 0x405b4cf8},
+{'q', 0xc1076278, 0x41b4b305},
+{0, 0xc1fb3056, 0x41b4b305},
+{'q', 0xc156d340, 0xb4000000},
+{0, 0xc1a508f4, 0xc0f3ea85},
+{'q', 0xc0e67d4f, 0xc0f3ea83},
+{0, 0xc0e67d4f, 0xc1ab3056},
+{'q', 0x00000000, 0xc15fc6b6},
+{0, 0x40a11e6f, 0xc1d01ca5},
+{'q', 0x40a35b4c, 0xc1407294},
+{0, 0x4156d33e, 0xc18d89da},
+{'q', 0x41064408, 0xc0b77f10},
+{0, 0x41a479bd, 0xc0b77f10},
+{'q', 0x413d1744, 0x00000000},
+{0, 0x41955ee0, 0x40be35b0},
+{'9', 0x002f0037, 0x0082003c},
+{'l', 0xc1460ac0, 0x3fdfc6a0},
+{'8', 0xaddfcafd, 0xe3afe3e2},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1644072, 0x40982af8},
+{'q', 0xc0ae8ba4, 0x4095ee18},
+{0, 0xc1076276, 0x416f70c8},
+{'q', 0xc0407290, 0x412479bc},
+{0, 0xc0407290, 0x41a23cde},
+{'q', 0x00000000, 0x41955ee2},
+{0, 0x4173ea84, 0x41955ee2},
+{'@', 0x00000064, 0x00004fa6},/*        d        x-advance: 79.648438 */
+{'M', 0x41e055ee, 0x3fbbf8d7},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0d25983},
+{'q', 0xc0c2af73, 0xc0d49661},
+{0, 0xc0c2af73, 0xc191745d},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x408880e5, 0xc1dbdc32},
+{'q', 0x408abdc2, 0xc155b4cc},
+{0, 0x41419101, 0xc19e525a},
+{'q', 0x40faa120, 0xc0cddfc0},
+{0, 0x419f70c9, 0xc0cddfc0},
+{'8', 0x1d6f0044, 0x513d1d2b},
+{'l', 0x3eb30500, 0x00000000},
+{'l', 0x3ffaa140, 0xc1354240},
+{'4', 0xff16002d, 0x00000064},
+{'l', 0xc189101c, 0x42b05d17},
+{'9', 0x004efff0, 0x007cffeb},
+{'l', 0xc1407294, 0x00000000},
+{'9', 0xffe40000, 0xffa7000b},
+{'l', 0xbeb30580, 0x00000000},
+{'8', 0x4daa35d8, 0x189118d3},
+{'m', 0x4068ba30, 0xc11b8644},
+{'8', 0xea5e0037, 0xbc43ea27},
+{'q', 0x405b4d00, 0xc0b77f1c},
+{0, 0x40ac4ec8, 0xc1644072},
+{'q', 0x3ffaa120, 0xc1099f54},
+{0, 0x3ffaa120, 0xc1762764},
+{'8', 0x94ddbb00, 0xd99ed9dd},
+{'q', 0xc10880e4, 0x00000000},
+{0, 0xc157f1ae, 0x40a35b48},
+{'q', 0xc09ee190, 0x40a11e70},
+{0, 0xc0ff1ad8, 0x41849662},
+{'q', 0xc0407298, 0x41377f18},
+{0, 0xc0407298, 0x41a3ea84},
+{'8', 0x671a4400, 0x2253221a},
+{'@', 0x00000065, 0x00004fa6},/*        e        x-advance: 79.648438 */
+{'M', 0x418f377f, 0xc20cb305},
+{'q', 0xbed6d340, 0x401ca4b0},
+{0, 0xbf211e60, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x4093b138, 0x41644071},
+{'q', 0x4095ee1c, 0x409ee192},
+{0, 0x4160e524, 0x409ee192},
+{'8', 0xe6620036, 0xb744e62c},
+{'l', 0x411a67d4, 0x408cfaa0},
+{'q', 0xc0a35b48, 0x411292cd},
+{0, 0xc1501ca4, 0x4155b4d0},
+{'q', 0xc0faa120, 0x40864408},
+{0, 0xc1982af6, 0x40864408},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1af1ada, 0xc0f86441},
+{'q', 0xc0f86443, 0xc0faa11d},
+{0, 0xc0f86443, 0xc1afaa12},
+{'q', 0x00000000, 0xc160e524},
+{0, 0x409ee191, 0xc1c9660a},
+{'q', 0x409ee190, 0xc133055c},
+{0, 0x415fc6b7, 0xc18abdc2},
+{'q', 0x411055ee, 0xc0c72930},
+{0, 0x41a23cdd, 0xc0c72930},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b27626, 0x40e67d50},
+{'q', 0x40ff1ae0, 0x40e67d50},
+{0, 0x40ff1ae0, 0x41a2cc14},
+{'9', 0x003a0000, 0x0072fff3},
+{'6', 0x0000fe4a, 0xffb3015d},
+{'l', 0x3e8f3780, 0xc0a11e70},
+{'8', 0x96dcbb00, 0xdc99dcdd},
+{'q', 0xc115ee18, 0x00000000},
+{0, 0xc17cddfc, 0x40c07290},
+{'q', 0xc0cba2e8, 0x40be35b8},
+{0, 0xc10f377e, 0x41876278},
+{'l', 0x4227d508, 0x00000000},
+{'@', 0x00000066, 0x000027ca},/*        f        x-advance: 39.789062 */
+{'M', 0x41f2cc15, 0xc28501ca},
+{'l', 0xc14efe34, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x414efe36, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa11e0, 0x40d91010},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0xbfe8ba40, 0x411292d0},
+{'l', 0xc16c157a, 0x00000000},
+{'@', 0x00000067, 0x00004fa6},/*        g        x-advance: 79.648438 */
+{'M', 0x41de1910, 0x41edc322},
+{'9', 0x0000ff43, 0xff74ff25},
+{'l', 0x413660ac, 0xc03bf8d8},
+{'q', 0x401ca4b0, 0x412faa12},
+{0, 0x4182e8ba, 0x412faa12},
+{'q', 0x411ee190, 0x00000000},
+{0, 0x41762764, 0xc0a35b4e},
+{'9', 0xffd7002b, 0xff79003d},
+{'4', 0xff9f0013, 0x0000ffff},
+{'8', 0x47c331de, 0x21c515e6},
+{'q', 0xc0840728, 0x3fbbf8d8},
+{0, 0xc1182af6, 0x3fbbf8d8},
+{'q', 0xc12b3056, 0xb3800000},
+{0, 0xc18a2e8b, 0xc0dfc6b7},
+{'q', 0xc0d01ca5, 0xc0e20393},
+{0, 0xc0d01ca5, 0xc1955ee1},
+{'q', 0x00000000, 0xc114cfaa},
+{0, 0x4025982a, 0xc1a08f37},
+{'q', 0x402a11e8, 0xc12c4ec4},
+{0, 0x40e67d50, 0xc18f3780},
+{'q', 0x4091745c, 0xc0e44078},
+{0, 0x4130c882, 0xc127d504},
+{'q', 0x40d01ca4, 0xc05b4d00},
+{0, 0x41762762, 0xc05b4d00},
+{'q', 0x41076274, 0x00000000},
+{0, 0x41644070, 0x407f1ae0},
+{'9', 0x001f002e, 0x0052003c},
+{'l', 0x3e0f3800, 0x00000000},
+{'8', 0xc50dec03, 0xd40cd90a},
+{'l', 0x413f5428, 0x00000000},
+{'4', 0x002dfff6, 0x004ffff0},
+{'l', 0xc13423d0, 0x42675424},
+{'q', 0xc056d330, 0x41876276},
+{0, 0xc1407290, 0x41c33ea8},
+{'9', 0x003bffbb, 0x003bff41},
+{'m', 0xc11a67d6, 0xc25f377f},
+{'8', 0x671d4300, 0x2356231d},
+{'q', 0x40f1ada0, 0x00000000},
+{0, 0x415b4cf8, 0xc0ae8ba2},
+{'q', 0x40c4ec50, 0xc0b0c882},
+{0, 0x41182af8, 0xc171ada7},
+{'q', 0x405b4d00, 0xc1194966},
+{0, 0x405b4d00, 0xc19f70c9},
+{'8', 0x94ddbb00, 0xd99ed9dd},
+{'8', 0x14ad00ce, 0x40c814df},
+{'q', 0xc0377f20, 0x40b0c880},
+{0, 0xc09a67d8, 0x416c157c},
+{'q', 0xbffaa120, 0x411292cc},
+{0, 0xbffaa120, 0x41813b14},
+{'@', 0x00000068, 0x00004fa6},/*        h        x-advance: 79.648438 */
+{'M', 0x41d64407, 0xc27ae8ba},
+{'8', 0xa85cc02e, 0xe76fe72e},
+{'q', 0x41259828, 0x00000000},
+{0, 0x41786440, 0x40a35b50},
+{'q', 0x40a7d500, 0x40a35b40},
+{0, 0x40a7d500, 0x416c1578},
+{'9', 0x00230000, 0x005bfff5},
+{'4', 0x016dffb9, 0x0000ff9b},
+{'l', 0x410cfaa0, 0xc2346b69},
+{'8', 0xad0acf0a, 0xa39ca300},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1786440, 0x40d6d340},
+{'9', 0x0035ffcb, 0x0091ffb9},
+{'l', 0xc1040729, 0x422982af},
+{'l', 0xc148479b, 0x00000000},
+{'4', 0xfcc200a1, 0x00000064},
+{'l', 0xc0a7d50c, 0x41d7f1ac},
+{'q', 0xbfa11e70, 0x40dfc6c0},
+{0, 0xc0525980, 0x4160e528},
+{'l', 0x3e56d300, 0x00000000},
+{'@', 0x00000069, 0x00001fd1},/*        i        x-advance: 31.816406 */
+{'M', 0x4013b13b, 0x00000000},
+{'l', 0x416af70d, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd23008e},
+{'0', 0x0064a013, 0x009c60ed},
+{'@', 0x0000006a, 0x00001fd1},/*        j        x-advance: 31.816406 */
+{'M', 0xc0dfc6b6, 0x41edc322},
+{'9', 0x0000ffe1, 0xfff9ffb8},
+{'l', 0x3fcddfd0, 0xc1182af8},
+{'8', 0x042e041d, 0xe9310021},
+{'9', 0xffe90010, 0xffb6001a},
+{'4', 0xfd670081, 0x00000064},
+{'l', 0xc1849660, 0x42aa11e7},
+{'q', 0xc00abdc4, 0x4130c882},
+{0, 0xc0e20395, 0x417bbf8e},
+{'9', 0x0024ffd9, 0x0024ff98},
+{'m', 0x41d99f53, 0xc2f2efe4},
+{'0', 0x0064a012, 0x009c60ee},
+{'@', 0x0000006b, 0x0000479b},/*        k        x-advance: 71.605469 */
+{'M', 0x4249ada6, 0x00000000},
+{'l', 0xc195ee18, 0xc20c6b6a},
+{'l', 0xc13bf8d8, 0x410abdc4},
+{'l', 0xc0a11e6e, 0x41d377f2},
+{'l', 0xc148479b, 0x00000000},
+{'l', 0x41a11e6f, 0xc2cf8d6d},
+{'l', 0x4149660c, 0x00000000},
+{'l', 0xc148479e, 0x42804072},
+{'l', 0x41644072, 0xc154965c},
+{'l', 0x41c9f542, 0xc1b5d176},
+{'l', 0x41786440, 0x00000000},
+{'l', 0xc2144072, 0x420211e7},
+{'l', 0x41bbf8d8, 0x422c9661},
+{'l', 0xc15a2e90, 0x00000000},
+{'@', 0x0000006c, 0x00001fd1},/*        l        x-advance: 31.816406 */
+{'M', 0x4013b13b, 0x00000000},
+{'l', 0x41a11e6f, 0xc2cf8d6d},
+{'l', 0x4149660c, 0x00000000},
+{'l', 0xc1a1ada7, 0x42cf8d6d},
+{'l', 0xc148479b, 0x00000000},
+{'@', 0x0000006d, 0x0000774c},/*        m        x-advance: 119.296875 */
+{'M', 0x42389d8a, 0x00000000},
+{'l', 0x410abdc0, 0xc23157b8},
+{'8', 0x9f0dbb0d, 0xc1ebd700},
+{'q', 0xc02a11f0, 0xc0330560},
+{0, 0xc10abdc4, 0xc0330560},
+{'q', 0xc101ca4c, 0x00000000},
+{0, 0xc1632204, 0x40dd89d8},
+{'9', 0x0037ffd0, 0x0090ffc1},
+{'4', 0x0151ffbe, 0x0000ff9c},
+{'l', 0x4139bbf8, 0xc26e0abe},
+{'9', 0xffcb000b, 0xff7f0015},
+{'l', 0x413e35b4, 0x00000000},
+{'8', 0x2bfa0600, 0x3bf724fb},
+{'l', 0x3e56d300, 0x00000000},
+{'8', 0xa851c128, 0xe762e729},
+{'8', 0x216b0043, 0x602f2127},
+{'8', 0x9b5bb82e, 0xe467e42d},
+{'q', 0x41170c88, 0x00000000},
+{0, 0x41679bc0, 0x40a35b50},
+{'q', 0x40a35b50, 0x40a35b40},
+{0, 0x40a35b50, 0x416c1578},
+{'9', 0x00230000, 0x005bfff5},
+{'4', 0x016dffb9, 0x0000ff9d},
+{'l', 0x410abdc0, 0xc23157b8},
+{'8', 0x9f0dbb0d, 0xc1ebd700},
+{'q', 0xc02a11e0, 0xc0330560},
+{0, 0xc10abdc0, 0xc0330560},
+{'q', 0xc101ca50, 0x00000000},
+{0, 0xc1620398, 0x40db4d00},
+{'9', 0x0036ffd0, 0x008fffc1},
+{'l', 0xc104072c, 0x4229ca4b},
+{'l', 0xc147292c, 0x00000000},
+{'@', 0x0000006e, 0x00004fa6},/*        n        x-advance: 79.648438 */
+{'M', 0x42488f37, 0x00000000},
+{'l', 0x410cfaa4, 0xc2346b69},
+{'8', 0xad0acf0a, 0xa39ca300},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1786440, 0x40d6d340},
+{'9', 0x0035ffcb, 0x0091ffb9},
+{'4', 0x0153ffbe, 0x0000ff9c},
+{'l', 0x4139bbf8, 0xc26e0abe},
+{'9', 0xffcb000b, 0xff7f0015},
+{'l', 0x413e35b4, 0x00000000},
+{'8', 0x2bfa0600, 0x3bf724fb},
+{'l', 0x3e56d300, 0x00000000},
+{'8', 0xa85cc02e, 0xe76fe72e},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x41786444, 0x40a35b50},
+{'q', 0x40a7d500, 0x40a35b40},
+{0, 0x40a7d500, 0x416c1578},
+{'9', 0x00230000, 0x005bfff5},
+{'l', 0xc10e1910, 0x4236a847},
+{'l', 0xc14a847c, 0x00000000},
+{'@', 0x0000006f, 0x00004fa6},/*        o        x-advance: 79.648438 */
+{'M', 0x429635b5, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59828, 0x40d9101b},
+{0, 0xc14ba2e8, 0x41235b4c},
+{'q', 0xc0f1ada0, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfa, 0xb4000000},
+{0, 0xc1ad6d33, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc2, 0xc0b54230},
+{0, 0x41abbf8d, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39498, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca8, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc2, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc16, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'q', 0x40064410, 0xc0ff1adc},
+{0, 0x401ca4b0, 0xc1864407},
+{'@', 0x00000070, 0x00004fa6},/*        p        x-advance: 79.648438 */
+{'M', 0x421af70c, 0x3fb3055f},
+{'q', 0xc1099f52, 0x00000000},
+{0, 0xc160e524, 0xc068ba2e},
+{'9', 0xffe3ffd5, 0xffafffc4},
+{'l', 0xbeb30540, 0x35800000},
+{'q', 0x00000000, 0x3f44ec50},
+{0, 0xbf211e80, 0x4091745e},
+{'9', 0x001efffc, 0x012cffc7},
+{'4', 0x0000ff9c, 0xfd31008b},
+{'9', 0xffc2000c, 0xff850013},
+{'l', 0x413ada66, 0x00000000},
+{'8', 0x2efd0f00, 0x2bfb1efd},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0xb356cb28, 0xe86fe82d},
+{'q', 0x412faa14, 0x00000000},
+{0, 0x418880e6, 0x40d49660},
+{'q', 0x40c4ec50, 0x40d25980},
+{0, 0x40c4ec50, 0x4190e524},
+{'q', 0x00000000, 0x41632204},
+{0, 0xc08abdc0, 0x41dc6b6a},
+{'q', 0xc08880f0, 0x41549661},
+{0, 0xc1419104, 0x419dc322},
+{'9', 0x0033ffc2, 0x0033ff62},
+{'m', 0x41170c88, 0xc2897b86},
+{'8', 0x16a100c9, 0x44be16d9},
+{'q', 0xc05b4cf8, 0x40b54238},
+{0, 0xc0ac4ec4, 0x41644070},
+{'q', 0xbffaa120, 0x410880e4},
+{0, 0xbffaa120, 0x417508f4},
+{'8', 0x6d234500, 0x26632623},
+{'q', 0x410abdc4, 0x00000000},
+{0, 0x415b4cfc, 0xc0a7d50a},
+{'q', 0x40a11e70, 0xc0aa11e6},
+{0, 0x40fcddf8, 0xc1864406},
+{'q', 0x40377f20, 0xc1389d8c},
+{0, 0x40377f20, 0xc1a11e70},
+{'8', 0x99e6bc00, 0xdeaddee6},
+{'@', 0x00000071, 0x00004fa6},/*        q        x-advance: 79.648438 */
+{'M', 0x41e055ee, 0x3fbbf8d7},
+{'q', 0xc12faa12, 0x00000000},
+{0, 0xc189101c, 0xc0d25983},
+{'q', 0xc0c2af73, 0xc0d49661},
+{0, 0xc0c2af73, 0xc191745d},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x408880e5, 0xc1dbdc32},
+{'q', 0x408abdc2, 0xc155b4cc},
+{0, 0x41419101, 0xc19e525a},
+{'q', 0x40faa120, 0xc0cddfc0},
+{0, 0x419f70c9, 0xc0cddfc0},
+{'8', 0x1d6f0044, 0x513d1d2b},
+{'l', 0x3eb30500, 0x00000000},
+{'8', 0xbe0fe206, 0xd70cdd08},
+{'l', 0x41419100, 0x00000000},
+{'9', 0x002bfff4, 0x00a5ffdc},
+{'l', 0xc1852596, 0x42ab77f2},
+{'l', 0xc149660c, 0xb6800000},
+{'4', 0xff0b002f, 0xffaf0011},
+{'l', 0xbe8f3780, 0x00000000},
+{'8', 0x4daa35d8, 0x189118d3},
+{'m', 0x4068ba30, 0xc11b8644},
+{'8', 0xea5e0037, 0xbc43ea27},
+{'q', 0x405b4d00, 0xc0b77f1c},
+{0, 0x40ac4ec8, 0xc1644072},
+{'q', 0x3ffaa120, 0xc1099f54},
+{0, 0x3ffaa120, 0xc1762764},
+{'8', 0x94ddbb00, 0xd99ed9dd},
+{'q', 0xc10880e4, 0x00000000},
+{0, 0xc157f1ae, 0x40a35b48},
+{'q', 0xc09ee190, 0x40a11e70},
+{0, 0xc0ff1ad8, 0x41849662},
+{'q', 0xc0407298, 0x41377f18},
+{0, 0xc0407298, 0x41a3ea84},
+{'8', 0x671a4400, 0x2253221a},
+{'@', 0x00000072, 0x00002fb1},/*        r        x-advance: 47.691406 */
+{'M', 0x4248d6d3, 0xc2833056},
+{'8', 0xf9cef9e8, 0x3d9600c6},
+{'9', 0x003dffd2, 0x009affc1},
+{'l', 0xc0f62764, 0x421dc322},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x4135423c, 0xc2682af7},
+{'l', 0x3fdfc6b8, 0xc11a67d4},
+{'l', 0x3fa11e78, 0xc0ff1ae0},
+{'4', 0x0000005f, 0x007bffed},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0x9848b624, 0xe252e223},
+{'q', 0x404ddfc0, 0x00000000},
+{0, 0x40d49660, 0x3f7aa100},
+{'l', 0xc013b140, 0x4127d508},
+{'@', 0x00000073, 0x0000479b},/*        s        x-advance: 71.605469 */
+{'M', 0x427db4cf, 0xc1b157b8},
+{'q', 0x00000000, 0x4135423c},
+{0, 0xc10abdc0, 0x418bdc32},
+{'q', 0xc10abdc4, 0x40c2af70},
+{0, 0xc1c8479c, 0x40c2af70},
+{'q', 0xc142af70, 0xb4000000},
+{0, 0xc19af70c, 0xc081ca4c},
+{'9', 0xffdfffc7, 0xff99ffb0},
+{'l', 0x412479bc, 0xc07aa11c},
+{'8', 0x47393112, 0x16681627},
+{'q', 0x41200000, 0x00000000},
+{0, 0x4172cc14, 0xc056d340},
+{'8', 0xb129e529, 0xc7e4de00},
+{'q', 0xc0644070, 0xc03bf8d8},
+{0, 0xc171ada4, 0xc0d01ca8},
+{'8', 0xd395e9b9, 0xcccaeadd},
+{'q', 0xc0182af8, 0xc071ada0},
+{0, 0xc0182af8, 0xc10bdc30},
+{'q', 0x00000000, 0xc1223cdc},
+{0, 0x4101ca4a, 0xc17982b4},
+{'q', 0x4101ca4c, 0xc0b0c880},
+{0, 0x41b6efe4, 0xc0b0c880},
+{'9', 0x000000c6, 0x008e00de},
+{'l', 0xc13660a8, 0x3fdfc6a0},
+{'8', 0xc1d2d4f4, 0xeda5edde},
+{'8', 0x169600bb, 0x3edc15dc},
+{'8', 0x270b1700, 0x1d21100b},
+{'8', 0x25660c16, 0x2d6a1647},
+{'8', 0x36381624, 0x49141f14},
+{'@', 0x00000074, 0x000027ca},/*        t        x-advance: 39.789062 */
+{'M', 0x4199d89d, 0x3fb3055f},
+{'8', 0xe4b600d1, 0xb5e6e4e6},
+{'9', 0xffe20000, 0xffb80008},
+{'l', 0x410cfaa1, 0xc237377e},
+{'l', 0xc10bdc32, 0x00000000},
+{'l', 0x3fe8ba30, 0xc11292d0},
+{'l', 0x410e1910, 0x00000000},
+{'l', 0x40eaf70c, 0xc1876274},
+{'l', 0x41064406, 0x00000000},
+{'l', 0xc0525980, 0x41876274},
+{'l', 0x415fc6b8, 0x00000000},
+{'4', 0x0049fff2, 0x0000ff91},
+{'l', 0xc10bdc32, 0x42346b69},
+{'8', 0x35fa21fa, 0x31323100},
+{'9', 0x00000017, 0xfff90037},
+{'l', 0xbfaa11e0, 0x4114cfaa},
+{'q', 0xc0dd89d8, 0x3fd6d33f},
+{0, 0xc1419102, 0x3fd6d33f},
+{'@', 0x00000075, 0x00004fa6},/*        u        x-advance: 79.648438 */
+{'M', 0x41e82af7, 0xc2975424},
+{'l', 0xc10cfaa2, 0x42346b6a},
+{'8', 0x53f631f6, 0x5d645d00},
+{'q', 0x410cfaa2, 0x00000000},
+{0, 0x41786442, 0xc0d6d33e},
+{'9', 0xffcb0035, 0xff6f0047},
+{'4', 0xfead0042, 0x00000064},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x0035fff5, 0x0081ffeb},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xd505fa00, 0xc40adb06},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x59a340d2, 0x189218d2},
+{'q', 0xc125982a, 0xb4000000},
+{0, 0xc17982af, 0xc0a35b4d},
+{'q', 0xc0a5982b, 0xc0a35b4d},
+{0, 0xc0a5982b, 0xc16c157a},
+{'9', 0xffdd0000, 0xffa5000b},
+{'l', 0x410e1910, 0xc236a848},
+{'l', 0x414a847a, 0x00000000},
+{'@', 0x00000076, 0x0000479b},/*        v        x-advance: 71.605469 */
+{'M', 0x420dd174, 0x00000000},
+{'l', 0xc16e5258, 0x00000000},
+{'4', 0xfda3ff9b, 0x00000068},
+{'l', 0x40e20394, 0x4244ec4f},
+{'9', 0x00260005, 0x0066000a},
+{'4', 0x001d0002, 0xffe3000e},
+{'9', 0xffcc0019, 0xff9b0034},
+{'l', 0x41d6d33e, 0xc2457b86},
+{'l', 0x415b4d00, 0x00000000},
+{'l', 0xc22c072a, 0x42975424},
+{'@', 0x00000077, 0x0000676d},/*        w        x-advance: 103.425781 */
+{'M', 0x42955ee1, 0x00000000},
+{'4', 0x0000ff8c, 0xfe7affec},
+{'l', 0xbed6d380, 0xc1840728},
+{'q', 0xc0064400, 0x40a7d500},
+{0, 0xc071ada0, 0x4113b138},
+{'9', 0x001ffff3, 0x01c0ff37},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0xc0cddfc6, 0xc2975424},
+{'l', 0x4147292d, 0x00000000},
+{'l', 0x40330560, 0x424d982c},
+{'l', 0x3efaa100, 0x415d89d6},
+{'l', 0x40b5423c, 0xc1549660},
+{'4', 0xfe6100be, 0x0000006b},
+{'l', 0x4044ec60, 0x424fd50a},
+{'q', 0x3ed6d300, 0x40f1ada0},
+{0, 0x3ed6d300, 0x4154965e},
+{'9', 0xffd40012, 0xfdf700eb},
+{'l', 0x4144ec50, 0x00000000},
+{'l', 0xc211bbfa, 0x42975424},
+{'@', 0x00000078, 0x0000479b},/*        x        x-advance: 71.605469 */
+{'M', 0x42457b86, 0x00000000},
+{'l', 0xc169d89c, 0xc1f86440},
+{'l', 0xc1d49661, 0x41f86440},
+{'l', 0xc15ea848, 0x00000000},
+{'l', 0x42099f54, 0xc21b8644},
+{'l', 0xc193b13a, 0xc2132204},
+{'l', 0x415377f0, 0x00000000},
+{'l', 0x4157f1ae, 0x41eb8646},
+{'l', 0x41c3cde0, 0xc1eb8646},
+{'l', 0x41667d4c, 0x00000000},
+{'l', 0xc2033055, 0x421292cd},
+{'l', 0x419d33ea, 0x421c157b},
+{'l', 0xc1549660, 0x00000000},
+{'@', 0x00000079, 0x0000479b},/*        y        x-advance: 71.605469 */
+{'M', 0x3f8f377f, 0x41edc322},
+{'9', 0x0000ffd8, 0xfff9ffb7},
+{'l', 0x400abdc2, 0xc115ee1a},
+{'8', 0x042b0419, 0xdd5d0035},
+{'9', 0xffdd0028, 0xff980050},
+{'l', 0x3ff1ada0, 0xc0525984},
+{'4', 0xfdaaff87, 0x00000066},
+{'l', 0x40faa120, 0x422745d2},
+{'8', 0x5f0f2c08, 0x41073207},
+{'q', 0x3f330540, 0xbfc4ec50},
+{0, 0x3fe8ba20, 0xc071ada8},
+{'9', 0xffef0008, 0xfe2f00fd},
+{'4', 0x0000006f, 0x025dfea2},
+{'q', 0xc0f86444, 0x4157f1ad},
+{0, 0xc148479c, 0x41979bbf},
+{'8', 0x40b22bdb, 0x15a415d8},
+{'@', 0x0000007a, 0x0000479b},/*        z        x-advance: 71.605469 */
+{'M', 0xbf56d33e, 0x00000000},
+{'l', 0x3fcddfc6, 0xc1194966},
+{'l', 0x424f8d6d, 0xc261745c},
+{'l', 0xc21e5259, 0x00000000},
+{'l', 0x3fdfc6b0, 0xc11b8648},
+{'l', 0x425b4cfc, 0x00000000},
+{'l', 0xbfd6d340, 0x41194968},
+{'l', 0xc24f8d6e, 0x4261745d},
+{'l', 0x422db4d0, 0x00000000},
+{'l', 0xbfdfc6c0, 0x411b8644},
+{'l', 0xc26a67d5, 0x00000000},
+{'@', 0x0000007b, 0x00002fd5},/*        {        x-advance: 47.832031 */
+{'M', 0x41ccc158, 0x41edc322},
+{'8', 0xdc9d00c2, 0x9adcdbdc},
+{'9', 0xffde0000, 0xffbf0005},
+{'l', 0x407aa120, 0xc1a08f38},
+{'8', 0xd505e805, 0xbee6d200},
+{'9', 0xffecffe7, 0xffeaffb7},
+{'l', 0x3fdfc6b6, 0xc10e1910},
+{'8', 0xde61fe3d, 0x9f30e023},
+{'l', 0x409ca4b4, 0xc1ca847a},
+{'q', 0x3ffaa120, 0xc1200000},
+{0, 0x40e67d50, 0xc173ea80},
+{'9', 0xffd7002a, 0xffd70079},
+{'4', 0x0000004b, 0x0048fff3},
+{'l', 0xc08cfaa0, 0x00000000},
+{'8', 0x1ab300cf, 0x5dd81ae6},
+{'l', 0xc09a67d0, 0x41c7292c},
+{'8', 0x5bd135f6, 0x31a825dc},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x253c0926, 0x47161b16},
+{'9', 0x000f0000, 0x0021fffd},
+{'l', 0xc08880e4, 0x41b27627},
+{'8', 0x24fb0dfe, 0x1ffe16ff},
+{'l', 0x00000000, 0x3ed6d340},
+{'8', 0x32131f00, 0x133e1313},
+{'l', 0x4056d338, 0x00000000},
+{'l', 0xbfdfc6a0, 0x411055ee},
+{'l', 0xc0d6d340, 0x00000000},
+{'@', 0x0000007c, 0x00002533},/*        |        x-advance: 37.199219 */
+{'M', 0x416e5259, 0x41fdfc6b},
+{'l', 0x00000000, 0xc3078644},
+{'l', 0x4139bbf9, 0x00000000},
+{'l', 0x00000000, 0x43078644},
+{'l', 0xc139bbf9, 0xb6000000},
+{'@', 0x0000007d, 0x00002fd5},/*        }        x-advance: 47.832031 */
+{'M', 0x41ac4ec5, 0xc2cf8d6d},
+{'8', 0x2562003e, 0x66242424},
+{'9', 0x00220000, 0x0041fffb},
+{'l', 0xc07aa120, 0x41a08f36},
+{'8', 0x2bfb18fb, 0x43192e00},
+{'9', 0x0014001a, 0x00160049},
+{'l', 0xbfdfc6a0, 0x410e1910},
+{'8', 0x229f02c3, 0x61d01fdd},
+{'l', 0xc09ca4b4, 0x41ca847a},
+{'q', 0xbffaa120, 0x411ffffe},
+{0, 0xc0e8ba2e, 0x4173ea84},
+{'9', 0x0029ffd7, 0x0029ff87},
+{'4', 0x0000ffb5, 0xffb8000d},
+{'l', 0x408cfaa1, 0x00000000},
+{'8', 0xe64c0031, 0xa328e61b},
+{'l', 0x409a67d4, 0xc1c7292c},
+{'8', 0xa62ecb0a, 0xce58da24},
+{'l', 0x00000000, 0xbe0f3800},
+{'8', 0xdbc3f7da, 0xb9eae5ea},
+{'9', 0xfff10000, 0xffdf0003},
+{'l', 0x408880e8, 0xc1b27626},
+{'8', 0xdd04f302, 0xe002ea02},
+{'l', 0x00000000, 0xbed6d300},
+{'8', 0xceede100, 0xedc2eded},
+{'l', 0xc056d340, 0x00000000},
+{'l', 0x3fdfc6b0, 0xc11055f0},
+{'l', 0x40d6d340, 0x00000000},
+{'@', 0x0000007e, 0x000053a2},/*        ~        x-advance: 83.632812 */
+{'M', 0x427479bc, 0xc21aaf71},
+{'8', 0xf4b100da, 0xe6aff4d8},
+{'q', 0xc11055ec, 0xc0496610},
+{0, 0xc172cc14, 0xc0496610},
+{'8', 0x0bbb00db, 0x25bc0be0},
+{'l', 0x00000000, 0xc1200000},
+{'q', 0x40f86442, 0xc0bbf8d8},
+{0, 0x41932204, 0xc0bbf8d8},
+{'q', 0x40e44070, 0x00000000},
+{0, 0x418377f2, 0x404ddfd0},
+{'8', 0x226a1c52, 0x052c0518},
+{'9', 0x00000048, 0xffcd0088},
+{'l', 0x00000000, 0x4126b698},
+{'8', 0x22be17df, 0x0ab10ae1},
+{'@', 0x000000a0, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x000000a1, 0x00002fb1},/*        ¡        x-advance: 47.691406 */
+{'M', 0x419ee191, 0xc23fe35b},
+{'l', 0x4125982a, 0x00000000},
+{'4', 0x0236ffa0, 0x0000ff93},
+{'6', 0xfdca007b, 0xff22008c},
+{'l', 0xc0330560, 0x4160e528},
+{'l', 0xc159101c, 0x00000000},
+{'l', 0x40330560, 0xc160e528},
+{'l', 0x4159101c, 0x00000000},
+{'@', 0x000000a2, 0x00004fa6},/*        ¢        x-advance: 79.648438 */
+{'M', 0x421ca4b3, 0xc19b8644},
+{'9', 0x00000072, 0xff8000a1},
+{'l', 0x412e8ba0, 0x405b4d00},
+{'9', 0x00acffc0, 0x00b4ff17},
+{'4', 0x005dffef, 0x0000ffbb},
+{'l', 0x40182b00, 0xc1419102},
+{'q', 0xc126b69c, 0xbfc4ec50},
+{0, 0xc1801ca5, 0xc10f377f},
+{'q', 0xc0b0c882, 0xc0ef70c8},
+{0, 0xc0b0c882, 0xc19d33ea},
+{'q', 0x00000000, 0xc1182af8},
+{0, 0x402a11e4, 0xc1982af8},
+{'q', 0x402a11e8, 0xc1194964},
+{0, 0x40e67d50, 0xc1813b12},
+{'q', 0x40917460, 0xc0d25980},
+{0, 0x4130c882, 0xc1223ce0},
+{'9', 0xffe30034, 0xffe0007e},
+{'4', 0xffab000f, 0x00000045},
+{'l', 0xc001ca50, 0x4130c880},
+{'q', 0x411292cc, 0x3faa11c0},
+{0, 0x41644074, 0x40e20390},
+{'9', 0x002d0029, 0x0075002d},
+{'l', 0xc1460abc, 0x3fdfc6e0},
+{'8', 0xaddfcafd, 0xe3afe3e2},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1644070, 0x40982af0},
+{'q', 0xc0ae8ba8, 0x4095ee20},
+{0, 0xc1076278, 0x416f70c8},
+{'q', 0xc0407290, 0x412479bc},
+{0, 0xc0407290, 0x41a23cde},
+{'q', 0x00000000, 0x41955ee2},
+{0, 0x4173ea84, 0x41955ee2},
+{'@', 0x000000a3, 0x00004fa6},/*        £        x-advance: 79.648438 */
+{'M', 0x42965983, 0xc1ad6d34},
+{'q', 0xc0259840, 0x412a11e7},
+{0, 0xc1194968, 0x41813b14},
+{'9', 0x002cffc9, 0x002cff75},
+{'4', 0x0000fe79, 0xffaa0010},
+{'q', 0x40d9101c, 0xc04ddfc4},
+{0, 0x412d6d34, 0xc10abdc3},
+{'9', 0xffd40021, 0xff8f002e},
+{'0', 0x0098b00f, 0x0068b80d},
+{'l', 0x40762760, 0xc19ca4b4},
+{'q', 0x40330560, 0xc1655ee0},
+{0, 0x412a11e6, 0xc1a7d508},
+{'q', 0x40fcde00, 0xc0d6d340},
+{0, 0x41a86440, 0xc0d6d340},
+{'q', 0x41259830, 0x00000000},
+{0, 0x4187f1b0, 0x408cfaa0},
+{'9', 0x00220035, 0x005d0042},
+{'l', 0xc1377f20, 0x405fc6c0},
+{'8', 0xcad6ddf5, 0xedb8ede1},
+{'8', 0x209d00c1, 0x65d01fdd},
+{'l', 0xc07aa120, 0x41a11e70},
+{'l', 0x41e44072, 0x00000000},
+{'4', 0x0048fff3, 0x0000ff1c},
+{'l', 0xbff1ada0, 0x412479bc},
+{'8', 0x6ed23ef5, 0x47ac30de},
+{'l', 0x4201ca4b, 0x00000000},
+{'8', 0xe95d0039, 0xb332e824},
+{'l', 0x4128f378, 0x3fd6d340},
+{'@', 0x000000a4, 0x00004fa6},/*        ¤        x-advance: 79.648438 */
+{'M', 0x41389d8a, 0xc23f5424},
+{'9', 0xffb30000, 0xff74002b},
+{'4', 0xffc9ffc9, 0xffc7003a},
+{'l', 0x40dd89d8, 0x40e203a0},
+{'q', 0x40ff1ad8, 0xc0b77f20},
+{0, 0x418e1910, 0xc0b77f20},
+{'9', 0x0000004c, 0x002c008c},
+{'4', 0xffca0036, 0x003a003a},
+{'l', 0xc0d6d330, 0x40d6d340},
+{'q', 0x40b30550, 0x4102e8b8},
+{0, 0x40b30550, 0x418cfaa0},
+{'9', 0x004d0000, 0x008cffd3},
+{'4', 0x00370037, 0x003affc7},
+{'l', 0xc0e20390, 0xc0e20396},
+{'q', 0xc0ff1ae0, 0x40ae8ba4},
+{0, 0xc18c6b6a, 0x40ae8ba4},
+{'9', 0x0000ffb0, 0xffd4ff74},
+{'4', 0x003affc6, 0xffc6ffc7},
+{'l', 0x40e44074, 0xc0e44070},
+{'9', 0xffc1ffd5, 0xff74ffd5},
+{'m', 0x412c4ec4, 0xbe0f3700},
+{'8', 0x6e2d3f00, 0x2e6f2e2d},
+{'8', 0xd36e003f, 0x912ed32e},
+{'8', 0x92d2c000, 0xd292d2d3},
+{'8', 0x2e9100bf, 0x6ed32ed3},
+{'@', 0x000000a5, 0x00004fa6},/*        ¥        x-advance: 79.648438 */
+{'M', 0x42506440, 0xc2465259},
+{'l', 0x41b39498, 0x00000000},
+{'l', 0xbfd6d340, 0x410bdc30},
+{'l', 0xc1d64408, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec6},
+{'l', 0x41d64408, 0x00000000},
+{'l', 0xbfdfc6c0, 0x410e1910},
+{'l', 0xc1d64408, 0x00000000},
+{'l', 0xc0840728, 0x41a982af},
+{'l', 0xc147292e, 0x00000000},
+{'l', 0x40840728, 0xc1a982af},
+{'l', 0xc1d52598, 0x00000000},
+{'l', 0x3fdfc6bc, 0xc10e1910},
+{'l', 0x41d52598, 0x00000000},
+{'l', 0x400f3778, 0xc12c4ec6},
+{'l', 0xc1d64406, 0x00000000},
+{'l', 0x3fd6d338, 0xc10bdc30},
+{'l', 0x41b3055e, 0x00000000},
+{'l', 0xc19f70c8, 0xc243cddf},
+{'l', 0x4157f1ae, 0x00000000},
+{'l', 0x41899f53, 0x4234faa0},
+{'l', 0x420bdc33, 0xc234faa0},
+{'l', 0x41655ee0, 0x00000000},
+{'l', 0xc21c157c, 0x4243cddf},
+{'@', 0x000000a6, 0x00002533},/*        ¦        x-advance: 37.199219 */
+{'M', 0x416e5259, 0x41fe8ba3},
+{'l', 0x00000000, 0xc259e6f0},
+{'4', 0x0000005c, 0x01b30000},
+{'6', 0x0000ffa4, 0xfd760000},
+{'l', 0x00000000, 0xc2599f54},
+{'l', 0x4139bbf9, 0x00000000},
+{'l', 0x00000000, 0x42599f54},
+{'l', 0xc139bbf9, 0x00000000},
+{'@', 0x000000a7, 0x00004fa6},/*        §        x-advance: 79.648438 */
+{'M', 0x428d423d, 0xc23c4072},
+{'q', 0x00000000, 0x417aa11c},
+{0, 0xc1994966, 0x419f70c8},
+{'q', 0x4113b138, 0x40b9bbf8},
+{0, 0x4113b138, 0x417982ae},
+{'q', 0x00000000, 0x4135423d},
+{0, 0xc10abdc0, 0x418bdc32},
+{'q', 0xc10abdc4, 0x40c2af72},
+{0, 0xc1c9f543, 0x40c2af72},
+{'q', 0xc13f5424, 0x00000000},
+{0, 0xc1994966, 0xc081ca4c},
+{'9', 0xffdfffc7, 0xff99ffb0},
+{'l', 0x412479bc, 0xc07aa11c},
+{'8', 0x47393112, 0x16681627},
+{'q', 0x41200002, 0x00000000},
+{0, 0x4172cc16, 0xc056d33f},
+{'8', 0xb129e529, 0xc5e3dd00},
+{'q', 0xc06d33f0, 0xc044ec48},
+{0, 0xc16e525a, 0xc0d01ca4},
+{'q', 0xc1b5d174, 0xc0dfc6b4},
+{0, 0xc1b5d174, 0xc1b5d173},
+{'q', 0xb5800000, 0xc0f62768},
+{0, 0x409ca4b2, 0xc14ba2ec},
+{'q', 0x409ee192, 0xc0a11e68},
+{0, 0x41667d51, 0xc0e44068},
+{'q', 0xc115ee1a, 0xc0be35c0},
+{0, 0xc115ee1a, 0xc17bbf90},
+{'q', 0x00000000, 0xc1223ce0},
+{0, 0x4102e8ba, 0xc17982b0},
+{'q', 0x4102e8bc, 0xc0b0c880},
+{0, 0x41bada68, 0xc0b0c880},
+{'9', 0x000000c1, 0x008e00da},
+{'l', 0xc13660a8, 0x3fdfc6c0},
+{'q', 0xc0377f20, 0xc126b6a0},
+{0, 0xc182e8ba, 0xc126b6a0},
+{'q', 0xc1970c89, 0x00000000},
+{0, 0xc1970c89, 0x413660b0},
+{'q', 0x00000000, 0x40762760},
+{0, 0x406d33e8, 0x40db4d00},
+{'q', 0x4071adb0, 0x40407280},
+{0, 0x4169d8a0, 0x40d01ca0},
+{'q', 0x414ba2e8, 0x407f1ae0},
+{0, 0x418f377e, 0x41194964},
+{'9', 0x002c0029, 0x00690029},
+{'m', 0xc24d5090, 0xbf864420},
+{'q', 0x36000000, 0x409a67d8},
+{0, 0x408880e8, 0x410880e8},
+{'q', 0x408abdc4, 0x4068ba30},
+{0, 0x416e5258, 0x40db4cf8},
+{'q', 0x4113b13c, 0xbeb30580},
+{0, 0x4168ba30, 0xc0762760},
+{'8', 0xb32be42b, 0xcff0e400},
+{'8', 0xdbd3ebf1, 0xda96f0e2},
+{'8', 0x219803bf, 0x4dd91ed9},
+{'@', 0x000000a8, 0x00002fb1},/*        ¨        x-advance: 47.691406 */
+{'M', 0x41194966, 0xc2aa7d50},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33f, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000a9, 0x00006986},/*        ©        x-advance: 105.523438 */
+{'M', 0x42d30c88, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1746, 0xc0e20395},
+{0, 0xc1932204, 0xc1955ee1},
+{'q', 0xc0d01ca3, 0xc13ada66},
+{0, 0xc0d01ca3, 0xc1c7292d},
+{'q', 0x00000000, 0xc157f1ac},
+{0, 0x40d9101d, 0xc1c9f540},
+{'q', 0x40d9101a, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0cddfd0, 0x00000000},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0xc0be35b0, 0xc1af1adc},
+{'q', 0xc0bbf8d0, 0xc1235b48},
+{0, 0xc1813b14, 0xc180abdc},
+{'q', 0xc1235b48, 0xc0be35b0},
+{0, 0xc1b03948, 0xc0be35b0},
+{'q', 0xc13bf8d8, 0x00000000},
+{0, 0xc1afaa12, 0x40be35b0},
+{'q', 0xc1235b4c, 0x40bbf8e0},
+{0, 0xc180abdc, 0x4180abdc},
+{'q', 0xc0bbf8d6, 0x41235b50},
+{0, 0xc0bbf8d6, 0x41af1adc},
+{'q', 0x00000000, 0x413d1748},
+{0, 0x40bbf8d6, 0x41b0394a},
+{'q', 0x40be35b4, 0x41235b4c},
+{0, 0x4180abdc, 0x4180abdc},
+{'q', 0x41223ce0, 0x40bbf8d5},
+{0, 0x41afaa12, 0x40bbf8d5},
+{'q', 0x413e35b8, 0x00000000},
+{0, 0x41b0c880, 0xc0bbf8d7},
+{'q', 0x412479c0, 0xc0be35b6},
+{0, 0x41813b14, 0xc180abdc},
+{'9', 0xffaf002e, 0xff50002e},
+{'m', 0xc22d6d33, 0x41ef70c9},
+{'q', 0xc1525980, 0x00000000},
+{0, 0xc1a35b4c, 0xc0fcddfc},
+{'q', 0xc0e8ba30, 0xc0fcde00},
+{0, 0xc0e8ba30, 0xc1b157b8},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x40dfc6b8, 0xc1af1ada},
+{'q', 0x40dfc6b8, 0xc0f86440},
+{0, 0x41a1ada6, 0xc0f86440},
+{'9', 0x00000088, 0x007400be},
+{'l', 0xc0ff1ae0, 0x4013b140},
+{'8', 0xc7cedaef, 0xedb6ede0},
+{'q', 0xc10e1910, 0x00000000},
+{0, 0xc15a2e88, 0x40b54230},
+{'q', 0xc095ee20, 0x40b30560},
+{0, 0xc095ee20, 0x4185259a},
+{'q', 0x00000000, 0x412d6d34},
+{0, 0x409ee198, 0x4186d33e},
+{'8', 0x2f6d2f27, 0xec4b002b},
+{'9', 0xffeb0020, 0xffbe0036},
+{'l', 0x4100abe0, 0x401ca4b0},
+{'q', 0xc08abdc0, 0x41076276},
+{0, 0xc12479c0, 0x41419102},
+{'q', 0xc0bbf8d0, 0x4068ba30},
+{0, 0xc160e524, 0x4068ba30},
+{'@', 0x000000aa, 0x00003501},/*        ª        x-advance: 53.003906 */
+{'M', 0x424a3cde, 0xc237c6b6},
+{'8', 0xf0c700dc, 0xd4edf0ed},
+{'4', 0xffea0002, 0x0000fffe},
+{'8', 0x43b72fdc, 0x13b013dc},
+{'8', 0xe1a600c8, 0xacdfe1df},
+{'9', 0xff750000, 0xff7200cb},
+{'l', 0x4148479c, 0xbe8f3700},
+{'8', 0xc10ace0a, 0xc7b9c700},
+{'9', 0x0000ffab, 0x004bff9a},
+{'l', 0xc113b13b, 0xbf982b00},
+{'q', 0x4081ca4a, 0xc17508f8},
+{0, 0x41b1e6f0, 0xc17508f8},
+{'8', 0x1e6d0047, 0x51271d27},
+{'9', 0x00150000, 0x002efffb},
+{'l', 0xc06d33e0, 0x4199d89c},
+{'8', 0x1dfd11fd, 0x1e1a1e00},
+{'9', 0x0000000b, 0xfffc0018},
+{'l', 0xbf864400, 0x40e8ba30},
+{'9', 0x0007ffec, 0x0007ffd6},
+{'m', 0xc0f3ea88, 0xc1cd5090},
+{'l', 0xc11b8644, 0x3e8f3700},
+{'8', 0x179d01bc, 0x3fe215e2},
+{'8', 0x29101a00, 0x0f2c0f10},
+{'8', 0xde5a0031, 0xae32dd28},
+{'l', 0x3f330540, 0xc068ba20},
+{'@', 0x000000ab, 0x00004fa6},/*        «        x-advance: 79.648438 */
+{'M', 0x4264cfaa, 0xc11dc322},
+{'l', 0xc1955ee2, 0xc1cc3221},
+{'l', 0x3f56d340, 0xc08cfaa0},
+{'l', 0x41e55ee0, 0xc1cf8d6e},
+{'l', 0x4130c888, 0x00000000},
+{'l', 0xbed6d400, 0x40259840},
+{'l', 0xc1e55ee0, 0x41d01ca4},
+{'4', 0x00cd0095, 0x000cfffe},
+{'6', 0x0000ffa7, 0x0000fef6},
+{'l', 0xc1944072, 0xc1cc3221},
+{'l', 0x3f56d338, 0xc08cfaa0},
+{'l', 0x41e44072, 0xc1cf8d6e},
+{'l', 0x412faa10, 0x00000000},
+{'l', 0xbed6d300, 0x402a11f0},
+{'l', 0xc1e3b13b, 0x41d01ca6},
+{'l', 0x41944073, 0x41cd508e},
+{'l', 0xbeb30580, 0x3fc4ec50},
+{'l', 0xc131e6f0, 0x00000000},
+{'@', 0x000000ac, 0x000053a2},/*        ¬        x-advance: 83.632812 */
+{'M', 0x4284ddfc, 0xc149660b},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0xc26dc321, 0x00000000},
+{'l', 0xb5800000, 0xc1235b4c},
+{'l', 0x428b292d, 0x00000000},
+{'l', 0x00000000, 0x42208f37},
+{'l', 0xc1223ce0, 0x35800000},
+{'@', 0x000000ad, 0x00002fb1},/*        ­        x-advance: 47.691406 */
+{'M', 0x40eaf70c, 0xc201ca4b},
+{'l', 0x400abdc4, 0xc1330560},
+{'l', 0x420bdc32, 0x00000000},
+{'l', 0xc00abdc0, 0x41330560},
+{'l', 0xc20bdc32, 0x00000000},
+{'@', 0x000000ae, 0x00006986},/*        ®        x-advance: 105.523438 */
+{'M', 0x42d30c88, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1746, 0xc0e20395},
+{0, 0xc1932204, 0xc1955ee1},
+{'q', 0xc0d01ca3, 0xc13ada66},
+{0, 0xc0d01ca3, 0xc1c7292d},
+{'q', 0x00000000, 0xc157f1ac},
+{0, 0x40d9101d, 0xc1c9f540},
+{'q', 0x40d9101a, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0cddfd0, 0x00000000},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0xc0be35b0, 0xc1af1adc},
+{'q', 0xc0bbf8d0, 0xc1235b48},
+{0, 0xc1813b14, 0xc180abdc},
+{'q', 0xc1235b48, 0xc0be35b0},
+{0, 0xc1b03948, 0xc0be35b0},
+{'q', 0xc13bf8d8, 0x00000000},
+{0, 0xc1afaa12, 0x40be35b0},
+{'q', 0xc1235b4c, 0x40bbf8e0},
+{0, 0xc180abdc, 0x4180abdc},
+{'q', 0xc0bbf8d6, 0x41235b50},
+{0, 0xc0bbf8d6, 0x41af1adc},
+{'q', 0x00000000, 0x413d1748},
+{0, 0x40bbf8d6, 0x41b0394a},
+{'q', 0x40be35b4, 0x41235b4c},
+{0, 0x4180abdc, 0x4180abdc},
+{'q', 0x41223ce0, 0x40bbf8d5},
+{0, 0x41afaa12, 0x40bbf8d5},
+{'q', 0x413e35b8, 0x00000000},
+{0, 0x41b0c880, 0xc0bbf8d7},
+{'q', 0x412479c0, 0xc0be35b6},
+{0, 0x41813b14, 0xc180abdc},
+{'9', 0xffaf002e, 0xff50002e},
+{'m', 0xc1f08f34, 0x41e9d89e},
+{'l', 0xc15ea84c, 0xc1bbf8d8},
+{'l', 0xc13423cc, 0x00000000},
+{'l', 0x00000000, 0x41bbf8d8},
+{'4', 0x0000ffb9, 0xfe300000},
+{'l', 0x41abbf8e, 0x00000000},
+{'q', 0x411ee18c, 0x00000000},
+{0, 0x4172cc14, 0x408cfaa0},
+{'8', 0x612a232a, 0x5be33900},
+{'9', 0x0022ffe3, 0x002cffb4},
+{'4', 0x00c3007b, 0x0000ffaf},
+{'m', 0xbf7aa180, 0xc225982b},
+{'8', 0xc6e6da00, 0xecb9ece6},
+{'4', 0x0000ffa1, 0x00a80000},
+{'l', 0x414ba2e8, 0x00000000},
+{'8', 0xe944002c, 0xbe17e817},
+{'@', 0x000000af, 0x00004f17},/*        ¯        x-advance: 79.089844 */
+{'M', 0x42a08f37, 0xc2d235b5},
+{'l', 0xc2a2efe3, 0x00000000},
+{'l', 0x35900000, 0xc102e8b8},
+{'l', 0x42a2efe3, 0x00000000},
+{'l', 0x00000000, 0x4102e8b8},
+{'@', 0x000000b0, 0x00003945},/*        °        x-advance: 57.269531 */
+{'M', 0x42576276, 0xc2a023ce},
+{'q', 0x00000000, 0x41052598},
+{0, 0xc0be35b8, 0x41620398},
+{'q', 0xc0bbf8d0, 0x40b9bbf8},
+{0, 0xc1620394, 0x40b9bbf8},
+{'q', 0xc1040728, 0x00000000},
+{0, 0xc1632202, 0xc0bbf8d8},
+{'q', 0xc0bbf8d8, 0xc0bbf8d0},
+{0, 0xc0bbf8d8, 0xc160e528},
+{'q', 0x00000000, 0xc102e8b8},
+{0, 0x40b9bbf8, 0xc160e520},
+{'q', 0x40bbf8d8, 0xc0bbf8e0},
+{0, 0x41644072, 0xc0bbf8e0},
+{'q', 0x41064408, 0x00000000},
+{0, 0x41632204, 0x40b9bc00},
+{'9', 0x002e002e, 0x0071002e},
+{'m', 0xc0f3ea88, 0x00000000},
+{'8', 0xb9e3d600, 0xe3bae3e4},
+{'8', 0x1db900d7, 0x47e41de4},
+{'8', 0x471d2900, 0x1d461d1d},
+{'8', 0xe3460029, 0xb91de31d},
+{'@', 0x000000b1, 0x00004e99},/*        ±        x-advance: 78.597656 */
+{'M', 0x4231e6f0, 0xc23e35b5},
+{'l', 0x00000000, 0x41dcfaa2},
+{'l', 0xc12479bc, 0x00000000},
+{'l', 0x00000000, 0xc1dcfaa2},
+{'l', 0xc1ed33eb, 0x00000000},
+{'l', 0x35000000, 0xc1223cdc},
+{'l', 0x41ed33eb, 0x00000000},
+{'l', 0x00000000, 0xc1dc6b68},
+{'l', 0x412479bc, 0x00000000},
+{'l', 0x00000000, 0x41dc6b68},
+{'4', 0x000000ed, 0x00510000},
+{'6', 0x0000ff13, 0x017cfec1},
+{'l', 0xb5c00000, 0xc1223cde},
+{'l', 0x428b292c, 0x00000000},
+{'l', 0x00000000, 0x41223cde},
+{'l', 0xc28b292c, 0x00000000},
+{'@', 0x000000b2, 0x00002fb1},/*        ²        x-advance: 47.691406 */
+{'M', 0x40064407, 0xc21d7b86},
+{'l', 0x3fa11e6e, 0xc0e67d50},
+{'8', 0xd026e610, 0xd72fea15},
+{'8', 0xca53ed19, 0xc25fd549},
+{'8', 0xd922ed16, 0xd10ceb0c},
+{'8', 0xd0ede400, 0xecc9eced},
+{'8', 0x15bd00d9, 0x39dd15e5},
+{'l', 0xc10bdc31, 0xbf864400},
+{'q', 0x4001ca48, 0xc0ff1ae0},
+{0, 0x40f3ea82, 0xc1419100},
+{'q', 0x40b54240, 0xc0840730},
+{0, 0x41679bc0, 0xc0840730},
+{'8', 0x216a0042, 0x56282128},
+{'8', 0x44ef2600, 0x39d21ef0},
+{'8', 0x4a911ae3, 0x35ae1fca},
+{'9', 0x0015ffe5, 0x002bffd6},
+{'l', 0x41faa11e, 0x00000000},
+{'l', 0xbfb30560, 0x40fcde00},
+{'l', 0xc2281ca5, 0x00000000},
+{'@', 0x000000b3, 0x00002fb1},/*        ³        x-advance: 47.691406 */
+{'M', 0x41b9bbf9, 0xc292b69a},
+{'l', 0x407f1ad8, 0x00000000},
+{'8', 0xea530036, 0xc11de91d},
+{'8', 0xd4eee600, 0xefceefee},
+{'8', 0x13bf00da, 0x37db13e6},
+{'l', 0xc10bdc31, 0xbfdfc6c0},
+{'q', 0x4095ee18, 0xc171ada8},
+{0, 0x41b27628, 0xc171ada8},
+{'8', 0x1f65003e, 0x51271f27},
+{'9', 0x00640000, 0x007cff87},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x22420728, 0x40191a19},
+{'q', 0x00000000, 0x41076274},
+{0, 0xc0c72928, 0x4159101c},
+{'q', 0xc0c72930, 0x40a11e70},
+{0, 0xc182e8ba, 0x40a11e70},
+{'9', 0x0000ff6e, 0xff7eff5a},
+{'l', 0x411055ef, 0xbf8f3780},
+{'8', 0x3c1e2805, 0x14431419},
+{'8', 0xe84a0030, 0xbd1ae71a},
+{'8', 0xd0e8e200, 0xeebdeee8},
+{'l', 0xc08880e8, 0x00000000},
+{'l', 0x3fbbf8e0, 0xc0f3ea80},
+{'@', 0x000000b4, 0x00002fb1},/*        ´        x-advance: 47.691406 */
+{'M', 0x4143cde0, 0xc2a7f8d7},
+{'l', 0x3e56d340, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc18, 0x00000000},
+{'l', 0xbeb30580, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000b5, 0x00005284},/*        µ        x-advance: 82.515625 */
+{'M', 0xbd8f377f, 0x41edc322},
+{'4', 0xfcb500a3, 0x00000065},
+{'l', 0xc115ee1a, 0x423fe35c},
+{'8', 0x38fa23fa, 0x625a6200},
+{'q', 0x40faa118, 0x00000000},
+{0, 0x4159101c, 0xc0d49660},
+{'9', 0xffcb002e, 0xff70003e},
+{'4', 0xfeab0042, 0x00000064},
+{'l', 0xc12faa10, 0x4261bbfa},
+{'8', 0x2dfb16fb, 0x281f2800},
+{'9', 0x00000006, 0xfffc001f},
+{'l', 0xbfc4ec40, 0x411055ee},
+{'8', 0x0bbc0bd8, 0xe6c600d7},
+{'9', 0xffe5ffef, 0xffb2ffef},
+{'l', 0xbe0f3800, 0x00000000},
+{'q', 0xc11055ec, 0x415377f2},
+{0, 0xc1acddfc, 0x415377f2},
+{'8', 0xf5c500de, 0xe0daf5e7},
+{'l', 0xc0d25980, 0x42076276},
+{'l', 0xc149660b, 0x00000000},
+{'@', 0x000000b6, 0x00004cec},/*        ¶        x-advance: 76.921875 */
+{'M', 0x42849661, 0xc2b6cc15},
+{'l', 0x00000000, 0x42dbb864},
+{'l', 0xc0faa128, 0xb6000000},
+{'l', 0x00000000, 0xc2dbb864},
+{'l', 0xc172cc14, 0x00000000},
+{'4', 0x036e0000, 0x0000ffc1},
+{'l', 0x00000000, 0xc285fc6b},
+{'q', 0xc13bf8d8, 0xb6800000},
+{0, 0xc1944073, 0xc0cddfd0},
+{'q', 0xc0d9101e, 0xc0d01ca8},
+{0, 0xc0d9101e, 0xc1932204},
+{'q', 0x00000000, 0xc13d1748},
+{0, 0x40db4cfa, 0xc193b13c},
+{'9', 0xffcb0037, 0xffcb0098},
+{'l', 0x421d7b86, 0x00000000},
+{'l', 0x00000000, 0x40e44070},
+{'l', 0xc11055e8, 0x00000000},
+{'@', 0x000000b7, 0x00002fb1},/*        ·        x-advance: 47.691406 */
+{'M', 0x417745d1, 0xc1f982af},
+{'l', 0x40407294, 0xc1762762},
+{'l', 0x415a2e8a, 0x00000000},
+{'l', 0xc0407290, 0x41762762},
+{'l', 0xc15a2e8b, 0x00000000},
+{'@', 0x000000b8, 0x00002fb1},/*        ¸        x-advance: 47.691406 */
+{'M', 0x41b1e6f0, 0x40d6d33e},
+{'8', 0x1643022d, 0x35161416},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0xc1a982af, 0x4157f1ae},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x3fbbf8d8, 0xc0cba2e8},
+{'8', 0x0331031a, 0xf4470032},
+{'8', 0xdb15f415, 0xd8bed800},
+{'9', 0x0000ffe8, 0x0001ffe0},
+{'l', 0x40e20394, 0xc142af71},
+{'l', 0x40ef70c8, 0x00000000},
+{'l', 0xc0840728, 0x40d6d33e},
+{'@', 0x000000b9, 0x00002fb1},/*        ¹        x-advance: 47.691406 */
+{'M', 0x408880e5, 0xc21d7b86},
+{'l', 0x3fb30560, 0xc0ef70c8},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x41040728, 0xc22a5983},
+{'l', 0xc1801ca4, 0x411a67d8},
+{'l', 0x3fe8ba28, 0xc11292d0},
+{'l', 0x41849660, 0xc1194960},
+{'l', 0x41099f54, 0x00000000},
+{'l', 0xc1211e6e, 0x424eb699},
+{'l', 0x41708f36, 0x00000000},
+{'l', 0xbfbbf8c0, 0x40ef70c8},
+{'l', 0xc21b8644, 0x00000000},
+{'@', 0x000000ba, 0x0000344e},/*        º        x-advance: 52.304688 */
+{'M', 0x41e1745d, 0xc2361910},
+{'q', 0xc1223cde, 0x00000000},
+{0, 0xc17aa11e, 0xc0ae8ba0},
+{'q', 0xc0ae8ba4, 0xc0b0c880},
+{0, 0xc0ae8ba4, 0xc17745d0},
+{'q', 0x00000000, 0xc0840730},
+{0, 0x3f68ba30, 0xc10f3780},
+{'q', 0x40982af8, 0xc1c60ac0},
+{0, 0x41e32204, 0xc1c60ac0},
+{'q', 0x41223cdc, 0x00000000},
+{0, 0x417982b0, 0x40b0c880},
+{'q', 0x40b0c880, 0x40ae8bb0},
+{0, 0x40b0c880, 0x41762768},
+{'q', 0x00000000, 0x40840720},
+{0, 0xbf68ba40, 0x410f3780},
+{'9', 0x00c6ffda, 0x00c6ff1d},
+{'m', 0x40f62764, 0xc23c880e},
+{'8', 0x1aad00cb, 0x53d11ae2},
+{'8', 0x69ef39ef, 0x64596400},
+{'8', 0xe5550036, 0xa930e51e},
+{'8', 0x9611c511, 0xb7e8cc00},
+{'q', 0xc0407290, 0xc02e8ba0},
+{0, 0xc1076274, 0xc02e8ba0},
+{'@', 0x000000bb, 0x00004fa6},/*        »        x-advance: 79.648438 */
+{'M', 0x41389d8a, 0xc11dc322},
+{'l', 0xc133055f, 0x00000000},
+{'l', 0x3efaa11c, 0xc02e8ba4},
+{'l', 0x41e55ee1, 0xc1cd508e},
+{'l', 0xc193b13a, 0xc1d01ca4},
+{'l', 0x3e8f3760, 0xbfbbf900},
+{'l', 0x4130c881, 0x00000000},
+{'4', 0x00cf0093, 0x0023fffa},
+{'6', 0x00ccff1d, 0x00000109},
+{'l', 0xc130c87c, 0x00000000},
+{'l', 0x3efaa100, 0xc02e8ba4},
+{'l', 0x41e55ee0, 0xc1cd508e},
+{'l', 0xc193b13a, 0xc1d01ca4},
+{'l', 0x3e8f3780, 0xbfbbf900},
+{'l', 0x412e8ba4, 0x00000000},
+{'l', 0x4194cfa8, 0x41cf8d6e},
+{'l', 0xbf56d300, 0x408cfaa0},
+{'l', 0xc1e4cfaa, 0x41cc3221},
+{'@', 0x000000bc, 0x00007770},/*        ¼        x-advance: 119.437500 */
+{'M', 0x40d6d33e, 0xc21d7b86},
+{'l', 0x3fb30560, 0xc0ef70c8},
+{'l', 0x416c157b, 0x00000000},
+{'l', 0x4104072a, 0xc22a5983},
+{'l', 0xc1801ca5, 0x411a67d8},
+{'l', 0x3fe8ba30, 0xc11292d0},
+{'l', 0x41849660, 0xc1194960},
+{'l', 0x41099f54, 0x00000000},
+{'l', 0xc1211e6c, 0x424eb699},
+{'4', 0x00000078, 0x003bfff5},
+{'6', 0x0000fec9, 0x013a00b9},
+{'l', 0xc12b3056, 0x00000000},
+{'4', 0xfcec0283, 0x00000056},
+{'6', 0x0314fd7d, 0xff9c0235},
+{'l', 0xc01ca4c0, 0x4147292d},
+{'l', 0xc11292c8, 0x32000000},
+{'l', 0x401ca4a0, 0xc147292d},
+{'l', 0xc1e292ca, 0x00000000},
+{'l', 0x3fbbf8e0, 0xc0f86440},
+{'l', 0x42076276, 0xc21bcde0},
+{'l', 0x413423d0, 0x00000000},
+{'l', 0xc0f1adb0, 0x421b3ea8},
+{'4', 0x00000045, 0x003ffff4},
+{'6', 0x0000ffbb, 0xfed5fff3},
+{'l', 0xc0f1ada0, 0x41170c88},
+{'l', 0xc189101c, 0x41a08f37},
+{'l', 0x41967d50, 0x00000000},
+{'l', 0x408cfaa0, 0xc1b423cd},
+{'l', 0x3fbbf8c0, 0xc0dfc6b8},
+{'@', 0x000000bd, 0x00007770},/*        ½        x-advance: 119.437500 */
+{'M', 0x40525983, 0xc21d7b86},
+{'l', 0x3fb3055e, 0xc0ef70c8},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x41040728, 0xc22a5983},
+{'l', 0xc1801ca4, 0x411a67d8},
+{'l', 0x3fe8ba28, 0xc11292d0},
+{'l', 0x41849660, 0xc1194960},
+{'l', 0x41099f58, 0x00000000},
+{'l', 0xc1211e70, 0x424eb699},
+{'4', 0x00000078, 0x003bfff5},
+{'6', 0x0000fec9, 0x013a00b8},
+{'l', 0xc12b3056, 0x00000000},
+{'4', 0xfcec0283, 0x00000056},
+{'6', 0x0314fd7d, 0x00000139},
+{'l', 0x3fa11e80, 0xc0e67d50},
+{'8', 0xd026e610, 0xd72fea15},
+{'8', 0xca53ed19, 0xc25fd549},
+{'8', 0xd922ed16, 0xd10ceb0c},
+{'8', 0xd0ede400, 0xecc9eced},
+{'8', 0x15bd00d9, 0x39dd15e5},
+{'l', 0xc10bdc30, 0xbf864400},
+{'q', 0x4001ca40, 0xc0ff1ad8},
+{0, 0x40f3ea80, 0xc1419100},
+{'q', 0x40b54240, 0xc0840730},
+{0, 0x41679bc0, 0xc0840730},
+{'8', 0x216a0042, 0x56282128},
+{'8', 0x44ef2600, 0x39d21ef0},
+{'8', 0x4a911ae3, 0x35ae1fca},
+{'9', 0x0015ffe5, 0x002bffd6},
+{'l', 0x41faa120, 0x00000000},
+{'l', 0xbfb30580, 0x40fcddfc},
+{'l', 0xc2281ca4, 0x32000000},
+{'@', 0x000000be, 0x00007770},/*        ¾        x-advance: 119.437500 */
+{'M', 0x41e82af7, 0xc292b69a},
+{'l', 0x407f1ad8, 0x00000000},
+{'8', 0xea530036, 0xc11de91d},
+{'8', 0xd4eee600, 0xefceefee},
+{'8', 0x13bf00da, 0x37db13e6},
+{'l', 0xc10bdc32, 0xbfdfc6c0},
+{'q', 0x4095ee18, 0xc171ada8},
+{0, 0x41b27627, 0xc171ada8},
+{'8', 0x1f65003e, 0x51271f27},
+{'9', 0x00640000, 0x007cff87},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x22420728, 0x40191a19},
+{'q', 0x00000000, 0x41076274},
+{0, 0xc0c72930, 0x4159101c},
+{'q', 0xc0c72930, 0x40a11e70},
+{0, 0xc182e8ba, 0x40a11e70},
+{'9', 0x0000ff6e, 0xff7eff5a},
+{'l', 0x411055ec, 0xbf8f3780},
+{'8', 0x3c1e2805, 0x14431419},
+{'8', 0xe84a0030, 0xbd1ae71a},
+{'8', 0xd0e8e200, 0xeebdeee8},
+{'4', 0x0000ffde, 0xffc4000b},
+{'m', 0x3f56d340, 0x4292b69a},
+{'l', 0xc12b3056, 0x00000000},
+{'4', 0xfcec0283, 0x00000056},
+{'6', 0x0314fd7d, 0xff9c0235},
+{'l', 0xc01ca4c0, 0x4147292d},
+{'l', 0xc11292c8, 0x32000000},
+{'l', 0x401ca4a0, 0xc147292d},
+{'l', 0xc1e292ca, 0x00000000},
+{'l', 0x3fbbf8e0, 0xc0f86440},
+{'l', 0x42076276, 0xc21bcde0},
+{'l', 0x413423d0, 0x00000000},
+{'l', 0xc0f1adb0, 0x421b3ea8},
+{'4', 0x00000045, 0x003ffff4},
+{'6', 0x0000ffbb, 0xfed5fff3},
+{'l', 0xc0f1ada0, 0x41170c88},
+{'l', 0xc189101c, 0x41a08f37},
+{'l', 0x41967d50, 0x00000000},
+{'l', 0x408cfaa0, 0xc1b423cd},
+{'l', 0x3fbbf8c0, 0xc0dfc6b8},
+{'@', 0x000000bf, 0x0000577b},/*        ¿        x-advance: 87.480469 */
+{'M', 0x420b055f, 0x41c22039},
+{'q', 0xc15c6b6a, 0x00000000},
+{0, 0xc1b0394a, 0xc0dfc6b4},
+{'q', 0xc102e8ba, 0xc0dfc6b8},
+{0, 0xc102e8ba, 0xc18fc6b7},
+{'8', 0xa410ca00, 0xbe2cda11},
+{'8', 0xcf3ce41b, 0xd843eb22},
+{'8', 0xb962d847, 0xbb23e11b},
+{'l', 0x4143cde0, 0x00000000},
+{'8', 0x4ee62cf9, 0x3bcf21ed},
+{'8', 0x44981ae3, 0x38ac21c6},
+{'8', 0x32d916e7, 0x40f41bf4},
+{'8', 0x58283600, 0x21692128},
+{'q', 0x411ca4b4, 0x00000000},
+{0, 0x41813b14, 0xc09ca4b4},
+{'9', 0xffd90032, 0xff950048},
+{'l', 0x41389d88, 0x4033055d},
+{'q', 0xc08cfaa0, 0x415a2e8c},
+{0, 0xc15ea848, 0x41a1ada6},
+{'9', 0x0034ffb5, 0x0034ff41},
+{'m', 0x41e0e524, 0xc2c80000},
+{'l', 0xc02e8ba0, 0x4160e528},
+{'l', 0xc15a2e8c, 0x00000000},
+{'l', 0x402e8bb0, 0xc160e528},
+{'l', 0x415a2e88, 0x00000000},
+{'@', 0x000000c0, 0x00005f86},/*        À        x-advance: 95.523438 */
+{'M', 0x4296e8ba, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864407, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba00, 0x3fe8ba40},
+{0, 0xc0259820, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff6c0035},
+{'l', 0xc1a3ea84, 0xc172cc18},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x41419104, 0x417cddf8},
+{'l', 0xbe56d400, 0x3fb30580},
+{'l', 0xc0c72930, 0x00000000},
+{'@', 0x000000c1, 0x00005f86},/*        Á        x-advance: 95.523438 */
+{'M', 0x4296e8ba, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864407, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba00, 0x3fe8ba40},
+{0, 0xc0259820, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff6cffc6},
+{'l', 0x3e56d300, 0xbfb30580},
+{'l', 0x41920394, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1c4ec50, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000c2, 0x00005f86},/*        Â        x-advance: 95.523438 */
+{'M', 0x4296e8ba, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864407, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba00, 0x3fe8ba40},
+{0, 0xc0259820, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff6100c3},
+{'0', 0x00cb0bfe, 0x00ffb395},
+{'l', 0xc190e526, 0x411b8648},
+{'l', 0xc0fcddf8, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30580},
+{'l', 0x419ca4b2, 0xc1864408},
+{'l', 0x41644078, 0x00000000},
+{'l', 0x41460ab8, 0x41864408},
+{'@', 0x000000c3, 0x00005f86},/*        Ã        x-advance: 95.523438 */
+{'M', 0x4296e8ba, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864407, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba00, 0x3fe8ba40},
+{0, 0xc0259820, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff6c0069},
+{'8', 0xf5d400e9, 0xe8d8f5eb},
+{'8', 0xe7dcf3ed, 0xf5def5ef},
+{'8', 0x10d500e7, 0x37e110ef},
+{'l', 0xc0dfc6b8, 0x00000000},
+{'q', 0x40525980, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af710},
+{'8', 0xe050e022, 0x0b2d0018},
+{'8', 0x19280b15, 0x18240d13},
+{'8', 0x0b220b11, 0xb8490032},
+{'l', 0x40e44070, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496600, 0x4001ca60},
+{0, 0xc0ef70d0, 0x4001ca60},
+{'@', 0x000000c4, 0x00005f86},/*        Ä        x-advance: 95.523438 */
+{'M', 0x4296e8ba, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864407, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba00, 0x3fe8ba40},
+{0, 0xc0259820, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff6cff79},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000c5, 0x00005f86},/*        Ã…        x-advance: 95.523438 */
+{'M', 0x42946440, 0x00000000},
+{'l', 0xc0a7d500, 0xc1e67d50},
+{'l', 0xc232bdc4, 0x00000000},
+{'l', 0xc1864406, 0x41e67d50},
+{'l', 0xc168ba2e, 0x00000000},
+{'l', 0x426d33ea, 0xc2c5101c},
+{'4', 0x00000079, 0x031400a3},
+{'6', 0x0000ff93, 0xfd3dff7f},
+{'q', 0xbf68ba40, 0x3fe8ba40},
+{0, 0xc0259830, 0x409a67e0},
+{'9', 0x0018fff3, 0x0163ff36},
+{'4', 0x00000126, 0xfecbffc7},
+{'6', 0xffacfff2, 0xff630097},
+{'8', 0x5fd93700, 0x27a127d9},
+{'8', 0xd9a100c9, 0xa1d9d9d9},
+{'8', 0xa127c800, 0xd95fd927},
+{'8', 0x275f0037, 0x5f282728},
+{'m', 0xc0f1ada0, 0x00000000},
+{'8', 0xcbebe000, 0xebcbebeb},
+{'8', 0x16ca00df, 0x34eb15eb},
+{'8', 0x35151e00, 0x16361615},
+{'8', 0xea350020, 0xca15ea15},
+{'@', 0x000000c6, 0x00008f37},/*        Æ        x-advance: 143.214844 */
+{'M', 0x4271660b, 0x00000000},
+{'l', 0x40b54238, 0xc1e67d50},
+{'l', 0xc217e35b, 0x00000000},
+{'l', 0xc19c157c, 0x41e67d50},
+{'l', 0xc1632202, 0x00000000},
+{'l', 0x42862039, 0xc2c5101c},
+{'l', 0x42a64b31, 0x00000000},
+{'l', 0xc0064400, 0x412e8ba0},
+{'l', 0xc24eb69c, 0x00000000},
+{'l', 0xc0c4ec40, 0x41fcddfc},
+{'l', 0x423dee18, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc23dee1a, 0x00000000},
+{'l', 0xc0d49660, 0x420957b8},
+{'4', 0x000001b4, 0x0057ffef},
+{'6', 0x0000fde1, 0xfd3e0089},
+{'l', 0xc128f378, 0x00000000},
+{'l', 0xc1182af4, 0x4171ada8},
+{'l', 0xc1b423ce, 0x4207aa11},
+{'l', 0x42044ec4, 0x00000000},
+{'l', 0x41182af8, 0xc244157b},
+{'@', 0x000000c7, 0x0000676d},/*        Ç        x-advance: 103.425781 */
+{'M', 0x42bdee19, 0xc1bc880e},
+{'q', 0xc10cfaa0, 0x41525982},
+{0, 0xc1a00000, 0x4198ba2e},
+{'q', 0xc1330560, 0x40bbf8d8},
+{0, 0xc1d01ca4, 0x40bbf8d8},
+{'q', 0xc14a847c, 0xb4000000},
+{0, 0xc1b0394a, 0xc0a11e6f},
+{'q', 0xc114cfaa, 0xc0a35b4d},
+{0, 0xc1632203, 0xc1679bbe},
+{'q', 0xc09a67d6, 0xc115ee1a},
+{0, 0xc09a67d6, 0xc1ad6d35},
+{'q', 0x00000000, 0xc1899f54},
+{0, 0x40eaf70c, 0xc1f8f376},
+{'q', 0x40eaf70c, 0xc15ea848},
+{0, 0x41a2cc16, 0xc1abbf90},
+{'q', 0x41513b14, 0xc0f3ea80},
+{0, 0x41e94964, 0xc0f3ea80},
+{'q', 0x4172cc18, 0x00000000},
+{0, 0x41ccc158, 0x40cba2f0},
+{'9', 0x00320053, 0x008e006e},
+{'l', 0xc1496608, 0x40762760},
+{'q', 0xc0211e60, 0xc0faa120},
+{0, 0xc11ca4b0, 0xc1472930},
+{'q', 0xc0e67d50, 0xc093b140},
+{0, 0xc18e1910, 0xc093b140},
+{'q', 0xc14ddfc8, 0x00000000},
+{0, 0xc1b5423e, 0x40c72930},
+{'q', 0xc11ca4b4, 0x40c4ec50},
+{0, 0xc1708f38, 0x418b4cfc},
+{'q', 0xc0a7d508, 0x41330560},
+{0, 0xc0a7d508, 0x41cefe36},
+{'q', 0x00000000, 0x415fc6b4},
+{0, 0x40f3ea84, 0x41b0c880},
+{'q', 0x40f3ea84, 0x4100abdc},
+{0, 0x41a8f377, 0x4100abdc},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x419a67d4, 0xc0a35b4c},
+{'9', 0xffd70047, 0xff87007e},
+{'6', 0x00310050, 0x00f2fe95},
+{'8', 0x1643022d, 0x35161416},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0xc1a982b0, 0x4157f1ae},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x3fbbf8e0, 0xc0cba2e8},
+{'8', 0x0331031a, 0xf4470032},
+{'8', 0xdb15f415, 0xd8bed800},
+{'9', 0x0000ffe8, 0x0001ffe0},
+{'l', 0x40e20398, 0xc142af71},
+{'l', 0x40ef70c8, 0x00000000},
+{'l', 0xc0840728, 0x40d6d33e},
+{'@', 0x000000c8, 0x00005f86},/*        È        x-advance: 95.523438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4292b69a, 0x00000000},
+{'l', 0xc0064420, 0x412e8ba0},
+{'l', 0xc26fffff, 0x00000000},
+{'l', 0xc0c4ec50, 0x41fcddfc},
+{'l', 0x425f377f, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc25f3780, 0x00000000},
+{'l', 0xc0d4965c, 0x420957b8},
+{'4', 0x000001f6, 0x0057fff0},
+{'6', 0x0000fd9f, 0xfca901e8},
+{'l', 0xc1a3ea84, 0xc172cc18},
+{'l', 0x3eb30500, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x41419100, 0x417cddf8},
+{'l', 0xbe56d200, 0x3fb30580},
+{'l', 0xc0c72930, 0x00000000},
+{'@', 0x000000c9, 0x00005f86},/*        É        x-advance: 95.523438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4292b69a, 0x00000000},
+{'l', 0xc0064420, 0x412e8ba0},
+{'l', 0xc26fffff, 0x00000000},
+{'l', 0xc0c4ec50, 0x41fcddfc},
+{'l', 0x425f377f, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc25f3780, 0x00000000},
+{'l', 0xc0d4965c, 0x420957b8},
+{'4', 0x000001f6, 0x0057fff0},
+{'6', 0x0000fd9f, 0xfca90173},
+{'l', 0x3e56d300, 0xbfb30580},
+{'l', 0x41920394, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1c4ec50, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000ca, 0x00005f86},/*        Ê        x-advance: 95.523438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4292b69a, 0x00000000},
+{'l', 0xc0064420, 0x412e8ba0},
+{'l', 0xc26fffff, 0x00000000},
+{'l', 0xc0c4ec50, 0x41fcddfc},
+{'l', 0x425f377f, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc25f3780, 0x00000000},
+{'l', 0xc0d4965c, 0x420957b8},
+{'4', 0x000001f6, 0x0057fff0},
+{'6', 0x0000fd9f, 0xfc9d027f},
+{'0', 0x00cb0bfe, 0x00ffb395},
+{'l', 0xc190e526, 0x411b8648},
+{'l', 0xc0fcddf8, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30580},
+{'l', 0x419ca4b2, 0xc1864408},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x41460ac0, 0x41864408},
+{'@', 0x000000cb, 0x00005f86},/*        Ë        x-advance: 95.523438 */
+{'M', 0x408cfaa1, 0x00000000},
+{'l', 0x4198ba2f, 0xc2c5101c},
+{'l', 0x4292b69a, 0x00000000},
+{'l', 0xc0064420, 0x412e8ba0},
+{'l', 0xc26fffff, 0x00000000},
+{'l', 0xc0c4ec50, 0x41fcddfc},
+{'l', 0x425f377f, 0x00000000},
+{'l', 0xc0064400, 0x412c4ec4},
+{'l', 0xc25f3780, 0x00000000},
+{'l', 0xc0d4965c, 0x420957b8},
+{'4', 0x000001f6, 0x0057fff0},
+{'6', 0x0000fd9f, 0xfca90128},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000cc, 0x000027ca},/*        Ì        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x0000006a, 0x0314ff67},
+{'6', 0x0000ff96, 0xfca900ec},
+{'l', 0xc1a3ea84, 0xc172cc18},
+{'l', 0x3eb30540, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x41419102, 0x417cddf8},
+{'l', 0xbe56d300, 0x3fb30580},
+{'l', 0xc0c72930, 0x00000000},
+{'@', 0x000000cd, 0x000027ca},/*        Í        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x0000006a, 0x0314ff67},
+{'6', 0x0000ff96, 0xfca9009e},
+{'l', 0x3e56d380, 0xbfb30580},
+{'l', 0x41920395, 0xc17cddf8},
+{'l', 0x41679bbc, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1c4ec50, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000ce, 0x000027ca},/*        ÃŽ        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x0000006a, 0x0314ff67},
+{'6', 0x0000ff96, 0xfc9d018e},
+{'0', 0x00cb0bfe, 0x00ffb395},
+{'l', 0xc190e526, 0x411b8648},
+{'l', 0xc0fcddfc, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30580},
+{'l', 0x419ca4b3, 0xc1864408},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x41460abc, 0x41864408},
+{'@', 0x000000cf, 0x000027ca},/*        Ï        x-advance: 39.789062 */
+{'M', 0x40b5423d, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x0000006a, 0x0314ff67},
+{'6', 0x0000ff96, 0xfca9003b},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000d0, 0x0000676d},/*        Ð        x-advance: 103.425781 */
+{'M', 0x4255b4d0, 0xc2c5101c},
+{'q', 0x41ae8ba0, 0x00000000},
+{0, 0x4209101c, 0x41389d88},
+{'q', 0x41484798, 0x41377f18},
+{0, 0x41484798, 0x41fd6d32},
+{'q', 0x00000000, 0x4182e8ba},
+{0, 0xc0dd89d0, 0x41e70c88},
+{'q', 0xc0db4d00, 0x4147292e},
+{0, 0xc1a1ada8, 0x419b8644},
+{'9', 0x0037ff96, 0x0037ff0e},
+{'l', 0xc2199102, 0x00000000},
+{'l', 0x410bdc33, 0xc234faa1},
+{'l', 0xc12c4ec5, 0x00000000},
+{'l', 0x40064406, 0xc12c4ec4},
+{'4', 0x00000056, 0xfeac0042},
+{'6', 0x000000ef, 0x0154ff3a},
+{'l', 0x41e32204, 0x00000000},
+{'l', 0xc0064410, 0x412c4ec4},
+{'4', 0x0000ff1d, 0x0114ffcb},
+{'l', 0x41aa11e7, 0xb6000000},
+{'q', 0x415a2e8c, 0x00000000},
+{0, 0x41c07294, 0xc0ac4ec4},
+{'q', 0x4126b698, 0xc0ae8ba4},
+{0, 0x417f1ad8, 0xc17982b0},
+{'q', 0x40b30560, 0xc1235b4c},
+{0, 0x40b30560, 0xc1be35b4},
+{'q', 0x00000000, 0xc17508f8},
+{0, 0xc10cfaa0, 0xc1bec4ec},
+{'9', 0xffbcffba, 0xffbcff3b},
+{'l', 0xc19292cc, 0x00000000},
+{'l', 0xc0c72930, 0x41fe8ba4},
+{'@', 0x000000d1, 0x0000676d},/*        Ñ        x-advance: 103.425781 */
+{'M', 0x428a0abe, 0x00000000},
+{'l', 0xc214880f, 0xc2a93b14},
+{'9', 0x005ffff4, 0x0095ffe9},
+{'l', 0xc14a8478, 0x4283e35b},
+{'l', 0xc13e35b6, 0x00000000},
+{'4', 0xfcec0098, 0x00000076},
+{'l', 0x42155ee2, 0x42a9ee18},
+{'9', 0xff97000e, 0xff620019},
+{'l', 0x414a8478, 0xc28235b4},
+{'4', 0x00000060, 0x0314ff68},
+{'6', 0x0000ff85, 0xfca90036},
+{'8', 0xf5d400e9, 0xe8d8f5eb},
+{'8', 0xe7dcf3ed, 0xf5def5ef},
+{'8', 0x10d500e7, 0x37e110ef},
+{'l', 0xc0dfc6b8, 0x00000000},
+{'q', 0x40525980, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af710},
+{'8', 0xe050e022, 0x0b2d0018},
+{'8', 0x19280b15, 0x18240d13},
+{'8', 0x0b220b11, 0xb8490032},
+{'l', 0x40e44070, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496600, 0x4001ca60},
+{0, 0xc0ef70d0, 0x4001ca60},
+{'@', 0x000000d2, 0x00006f66},/*        Ã’        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'9', 0xffc2ffc4, 0xffc2ff55},
+{'m', 0x40377f20, 0xc18e1910},
+{'l', 0xc1a3ea86, 0xc172cc18},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x41419100, 0x417cddf8},
+{'l', 0xbe56d200, 0x3fb30580},
+{'l', 0xc0c72930, 0x00000000},
+{'@', 0x000000d3, 0x00006f66},/*        Ó        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'9', 0xffc2ffc4, 0xffc2ff55},
+{'m', 0xc0faa120, 0xc18e1910},
+{'l', 0x3e56d300, 0xbfb30580},
+{'l', 0x41920396, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0xbeb30600, 0x4001ca40},
+{'l', 0xc1c4ec4c, 0x4172cc18},
+{'l', 0xc0ff1ae0, 0x00000000},
+{'@', 0x000000d4, 0x00006f66},/*        Ô        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'9', 0xffc2ffc4, 0xffc2ff55},
+{'m', 0x41bbf8d8, 0xc1994968},
+{'0', 0x00cb0bfe, 0x00ffb395},
+{'l', 0xc190e528, 0x411b8648},
+{'l', 0xc0fcddf8, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30580},
+{'l', 0x419ca4b2, 0xc1864408},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x41460ac0, 0x41864408},
+{'@', 0x000000d5, 0x00006f66},/*        Õ        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'9', 0xffc2ffc4, 0xffc2ff55},
+{'m', 0x41679bc0, 0xc18e1910},
+{'8', 0xf5d400e9, 0xe8d8f5eb},
+{'8', 0xe7dcf3ed, 0xf5def5ef},
+{'8', 0x10d500e7, 0x37e110ef},
+{'l', 0xc0dfc6b8, 0x00000000},
+{'q', 0x40525980, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af710},
+{'8', 0xe050e022, 0x0b2d0018},
+{'8', 0x19280b15, 0x18240d13},
+{'8', 0x0b220b11, 0xb8490032},
+{'l', 0x40e44070, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496600, 0x4001ca60},
+{0, 0xc0ef70c0, 0x4001ca60},
+{'@', 0x000000d6, 0x00006f66},/*        Ö        x-advance: 111.398438 */
+{'M', 0x42833056, 0xc2c80000},
+{'q', 0x419af70c, 0x00000000},
+{0, 0x41f479bc, 0x412faa10},
+{'q', 0x413423c8, 0x412faa18},
+{0, 0x413423c8, 0x41ec157c},
+{'q', 0xbeb30500, 0x4195ee1a},
+{0, 0xc0faa110, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157e, 0x40ed33ec},
+{'q', 0xc19ee190, 0xb4000000},
+{0, 0xc1f6b699, 0xc12faa12},
+{'q', 0xc12faa12, 0xc130c880},
+{0, 0xc12faa12, 0xc1f3ea85},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f3, 0xc1acddfc},
+{'9', 0xffc40069, 0xffc400ee},
+{'m', 0xbf211e80, 0x412c4ec8},
+{'q', 0xc15fc6b8, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8646, 0x40c72920},
+{0, 0xc16e525a, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'q', 0x00000000, 0x4169d89c},
+{0, 0x40ed33e8, 0x41b27627},
+{'q', 0x40ef70c8, 0x40f3ea84},
+{0, 0x41ad6d34, 0x40f3ea84},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb699e, 0xc0c07292},
+{'q', 0x411b8648, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ed0, 0xc1419100},
+{0, 0x40ac4ed0, 0xc1ccc158},
+{'q', 0x00000000, 0xc1679bbc},
+{0, 0xc0f3ea90, 0xc1b1e6ee},
+{'9', 0xffc2ffc4, 0xffc2ff55},
+{'m', 0xc1944072, 0xc18e1910},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000d7, 0x000053a2},/*        ×        x-advance: 83.632812 */
+{'M', 0x41407293, 0xc1b89d8a},
+{'l', 0x41c60abc, 0xc1c60abe},
+{'l', 0xc1c4ec4e, 0xc1c4ec4c},
+{'l', 0x40e8ba30, 0xc0e67d60},
+{'l', 0x41c3cde0, 0x41c57b88},
+{'l', 0x41c3cde0, 0xc1c45d18},
+{'l', 0x40eaf710, 0x40eaf710},
+{'l', 0xc1c3cde2, 0x41c2af70},
+{'l', 0x41c4ec4e, 0x41c4ec4f},
+{'l', 0xc0e44070, 0x40eaf70e},
+{'l', 0xc1c57b86, 0xc1c57b86},
+{'l', 0xc1c7292c, 0x41c699f6},
+{'l', 0xc0e44072, 0xc0eaf710},
+{'@', 0x000000d8, 0x00006f66},/*        Ø        x-advance: 111.398438 */
+{'M', 0x42c7055f, 0xc2a8880e},
+{'q', 0x40e67d50, 0x41223ce0},
+{0, 0x40e67d50, 0x41c60abc},
+{'q', 0xbeb30600, 0x4195ee1a},
+{0, 0xc0faa120, 0x4201ca4c},
+{'q', 0xc0ef70d0, 0x415a2e8a},
+{0, 0xc1a3ea84, 0x41a8643f},
+{'q', 0xc1501ca8, 0x40ed33ec},
+{0, 0xc1ec157c, 0x40ed33ec},
+{'9', 0x0000ff74, 0xffbbff1e},
+{'4', 0x0057ffa6, 0x0000ff97},
+{'l', 0x4191745d, 0xc18e1910},
+{'q', 0xc0e67d50, 0xc126b69a},
+{0, 0xc0e67d50, 0xc1d01ca5},
+{'q', 0x00000000, 0xc185b4ce},
+{0, 0x40eaf70c, 0xc1f5982c},
+{'q', 0x40ed33ec, 0xc160e520},
+{0, 0x41a508f4, 0xc1acddfc},
+{'q', 0x415377f0, 0xc0f3ea80},
+{0, 0x41eee190, 0xc0f3ea80},
+{'9', 0x0000008a, 0x004700e2},
+{'4', 0xffa5005d, 0x0000006b},
+{'6', 0x0092ff6b, 0xffd9fee7},
+{'q', 0xc15fc6b4, 0x00000000},
+{0, 0xc1be35b4, 0x40c72930},
+{'q', 0xc11b8644, 0x40c72920},
+{0, 0xc16e5258, 0x4194cfa8},
+{'q', 0xc0a5982c, 0x41460abc},
+{0, 0xc0a5982c, 0x41c8479c},
+{'9', 0x004c0000, 0x00810019},
+{'l', 0x42735b4d, 0xc26dc322},
+{'9', 0xffccffc4, 0xffccff5f},
+{'m', 0x41e8ba30, 0x41effffe},
+{'9', 0xffb60000, 0xff82ffe7},
+{'l', 0xc2735b4e, 0x426d33eb},
+{'q', 0x40eaf710, 0x40cba2e8},
+{0, 0x41a1ada8, 0x40cba2e8},
+{'q', 0x415c6b68, 0x00000000},
+{0, 0x41bb69a0, 0xc0c07292},
+{'q', 0x411b8640, 0xc0c2af72},
+{0, 0x41708f38, 0xc191745e},
+{'q', 0x40ac4ec0, 0xc1419100},
+{0, 0x40ac4ec0, 0xc1ccc158},
+{'@', 0x000000d9, 0x0000676d},/*        Ù        x-advance: 103.425781 */
+{'M', 0x4236efe3, 0x3fb3055f},
+{'q', 0xc1825982, 0x00000000},
+{0, 0xc1cd508f, 0xc1064407},
+{'q', 0xc115ee18, 0xc1076276},
+{0, 0xc115ee18, 0xc1b92cc2},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0053, 0x0000006a},
+{'l', 0xc135423e, 0x426bcddf},
+{'q', 0xbf982af0, 0x40c2af70},
+{0, 0xbf982af0, 0x411ffffe},
+{'q', 0x00000000, 0x41182af8},
+{0, 0x40c2af70, 0x416d33eb},
+{'q', 0x40c4ec50, 0x40aa11e6},
+{0, 0x4189101c, 0x40aa11e6},
+{'9', 0x000000d6, 0xff1d0101},
+{'4', 0xfe1b005d, 0x0000006a},
+{'l', 0xc13e35b0, 0x4275dfc6},
+{'q', 0xc071ada0, 0x4198ba2e},
+{0, 0xc1786440, 0x41e67d50},
+{'9', 0x004dffa3, 0x004dff09},
+{'m', 0x41b77f1a, 0xc2d8c880},
+{'l', 0xc1a3ea84, 0xc172cc20},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x41419104, 0x417cddf8},
+{'l', 0xbe56d400, 0x3fb30580},
+{'l', 0xc0c72930, 0x00000000},
+{'@', 0x000000da, 0x0000676d},/*        Ú        x-advance: 103.425781 */
+{'M', 0x4236efe3, 0x3fb3055f},
+{'q', 0xc1825982, 0x00000000},
+{0, 0xc1cd508f, 0xc1064407},
+{'q', 0xc115ee18, 0xc1076276},
+{0, 0xc115ee18, 0xc1b92cc2},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0053, 0x0000006a},
+{'l', 0xc135423e, 0x426bcddf},
+{'q', 0xbf982af0, 0x40c2af70},
+{0, 0xbf982af0, 0x411ffffe},
+{'q', 0x00000000, 0x41182af8},
+{0, 0x40c2af70, 0x416d33eb},
+{'q', 0x40c4ec50, 0x40aa11e6},
+{0, 0x4189101c, 0x40aa11e6},
+{'9', 0x000000d6, 0xff1d0101},
+{'4', 0xfe1b005d, 0x0000006a},
+{'l', 0xc13e35b0, 0x4275dfc6},
+{'q', 0xc071ada0, 0x4198ba2e},
+{0, 0xc1786440, 0x41e67d50},
+{'9', 0x004dffa3, 0x004dff09},
+{'m', 0x410880e4, 0xc2d8c880},
+{'l', 0x3e56d400, 0xbfb305c0},
+{'l', 0x41920394, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1c4ec50, 0x4172cc18},
+{'l', 0xc0ff1ae0, 0x00000000},
+{'@', 0x000000db, 0x0000676d},/*        Û        x-advance: 103.425781 */
+{'M', 0x4236efe3, 0x3fb3055f},
+{'q', 0xc1825982, 0x00000000},
+{0, 0xc1cd508f, 0xc1064407},
+{'q', 0xc115ee18, 0xc1076276},
+{0, 0xc115ee18, 0xc1b92cc2},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0053, 0x0000006a},
+{'l', 0xc135423e, 0x426bcddf},
+{'q', 0xbf982af0, 0x40c2af70},
+{0, 0xbf982af0, 0x411ffffe},
+{'q', 0x00000000, 0x41182af8},
+{0, 0x40c2af70, 0x416d33eb},
+{'q', 0x40c4ec50, 0x40aa11e6},
+{0, 0x4189101c, 0x40aa11e6},
+{'9', 0x000000d6, 0xff1d0101},
+{'4', 0xfe1b005d, 0x0000006a},
+{'l', 0xc13e35b0, 0x4275dfc6},
+{'q', 0xc071ada0, 0x4198ba2e},
+{0, 0xc1786440, 0x41e67d50},
+{'9', 0x004dffa3, 0x004dff09},
+{'m', 0x42266eff, 0xc2db9496},
+{'0', 0x00cb0bfe, 0x00ffb395},
+{'l', 0xc190e528, 0x411b8648},
+{'l', 0xc0fcddf8, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30580},
+{'l', 0x419ca4b2, 0xc1864408},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x41460ac0, 0x41864408},
+{'@', 0x000000dc, 0x0000676d},/*        Ü        x-advance: 103.425781 */
+{'M', 0x4236efe3, 0x3fb3055f},
+{'q', 0xc1825982, 0x00000000},
+{0, 0xc1cd508f, 0xc1064407},
+{'q', 0xc115ee18, 0xc1076276},
+{0, 0xc115ee18, 0xc1b92cc2},
+{'8', 0xc603e800, 0xc908de04},
+{'4', 0xfe4f0053, 0x0000006a},
+{'l', 0xc135423e, 0x426bcddf},
+{'q', 0xbf982af0, 0x40c2af70},
+{0, 0xbf982af0, 0x411ffffe},
+{'q', 0x00000000, 0x41182af8},
+{0, 0x40c2af70, 0x416d33eb},
+{'q', 0x40c4ec50, 0x40aa11e6},
+{0, 0x4189101c, 0x40aa11e6},
+{'9', 0x000000d6, 0xff1d0101},
+{'4', 0xfe1b005d, 0x0000006a},
+{'l', 0xc13e35b0, 0x4275dfc6},
+{'q', 0xc071ada0, 0x4198ba2e},
+{0, 0xc1786440, 0x41e67d50},
+{'9', 0x004dffa3, 0x004dff09},
+{'m', 0xbfb30560, 0xc2d8c880},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d340, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000dd, 0x00005f86},/*        Ý        x-advance: 95.523438 */
+{'M', 0x423bf8d7, 0x00000000},
+{'l', 0xc1549660, 0x00000000},
+{'l', 0x4100abdc, 0xc2235b4d},
+{'l', 0xc1d6d340, 0xc266c4eb},
+{'l', 0x415b4cfc, 0x00000000},
+{'l', 0x41ab3056, 0x423c880d},
+{'l', 0x421ca4b2, 0xc23c880d},
+{'4', 0x00000077, 0x01cdfe77},
+{'6', 0x0146ffc1, 0xfca90010},
+{'l', 0x3e56d300, 0xbfb30580},
+{'l', 0x41920394, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1c4ec50, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000de, 0x00005f86},/*        Þ        x-advance: 95.523438 */
+{'M', 0x418e1910, 0x00000000},
+{'l', 0xc155b4d0, 0x00000000},
+{'l', 0x41994966, 0xc2c5101c},
+{'4', 0x0000006a, 0x008cffe5},
+{'l', 0x41b6efe4, 0x00000000},
+{'q', 0x41849662, 0x00000000},
+{0, 0x41ce6efe, 0x40e44070},
+{'q', 0x4113b138, 0x40e44070},
+{0, 0x4113b138, 0x41a08f38},
+{'q', 0x00000000, 0x41762760},
+{0, 0xc12b3050, 0x41c19101},
+{'9', 0x0045ffab, 0x0045ff18},
+{'4', 0x0000ff13, 0x00a6ffdf},
+{'m', 0x40c9660c, 0xc1faa11e},
+{'l', 0x41d880e5, 0x00000000},
+{'q', 0x41d5b4d0, 0x00000000},
+{0, 0x41d5b4d0, 0xc1adfc6c},
+{'q', 0x00000000, 0xc1052598},
+{0, 0xc0b0c880, 0xc14ba2e4},
+{'9', 0xffddffd4, 0xffddff7e},
+{'l', 0xc1c33ea8, 0x00000000},
+{'l', 0xc0f1ada4, 0x421b8645},
+{'@', 0x000000df, 0x0000577b},/*        ß        x-advance: 87.480469 */
+{'M', 0x40182af7, 0x00000000},
+{'l', 0x415fc6b6, 0xc28fa2e9},
+{'q', 0x40525980, 0xc1849660},
+{0, 0x41460abe, 0xc1c22038},
+{'q', 0x411292ca, 0xc0f62760},
+{0, 0x41c45d17, 0xc0f62760},
+{'q', 0x41460ac0, 0x00000000},
+{0, 0x419e5258, 0x40b54240},
+{'q', 0x40ef70d0, 0x40b54240},
+{0, 0x40ef70d0, 0x41679bc0},
+{'q', 0x00000000, 0x4128f378},
+{0, 0xc12d6d38, 0x418f377c},
+{'8', 0x35ba24cb, 0x25f011f0},
+{'8', 0x2e111600, 0x403d1711},
+{'q', 0x411ca4b8, 0x411292cc},
+{0, 0x411ca4b8, 0x41979bbf},
+{'q', 0x00000000, 0x4131e6f0},
+{0, 0xc0f1adb0, 0x418abdc3},
+{'q', 0xc0f1ada8, 0x40c7292e},
+{0, 0xc1a86440, 0x40c7292e},
+{'8', 0xf8a300d0, 0xebb8f8d3},
+{'l', 0x407aa120, 0xc1200000},
+{'q', 0x4101ca4c, 0x4071ada8},
+{0, 0x41899f54, 0x4071ada8},
+{'8', 0xe55e003d, 0xb221e521},
+{'8', 0xc5efe100, 0xbfc5e3ef},
+{'8', 0xc0c5ddd8, 0xc2eee2ee},
+{'8', 0xb615d600, 0xc740e115},
+{'8', 0xcd41e62d, 0xc713e713},
+{'8', 0xc1dfda00, 0xe8a6e8df},
+{'q', 0xc1223cdc, 0x00000000},
+{0, 0xc17dfc6c, 0x40b30560},
+{'9', 0x002cffd3, 0x0087ffc1},
+{'l', 0xc15d89d8, 0x428ecc15},
+{'l', 0xc149660a, 0x00000000},
+{'@', 0x000000e0, 0x00004fa6},/*        à        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe8cffde},
+{'l', 0xc19dc322, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x413423cc, 0x41a08f38},
+{'l', 0xbe56d300, 0x3fb30540},
+{'l', 0xc0c4ec50, 0x00000000},
+{'@', 0x000000e1, 0x00004fa6},/*        á        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe8cff67},
+{'l', 0x3e56d300, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc14, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000e2, 0x00004fa6},/*        â        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe81006b},
+{'0', 0x00cd0bfe, 0x00ffa298},
+{'l', 0xc1944072, 0x413d1740},
+{'l', 0xc101ca4c, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30540},
+{'l', 0x41a00000, 0xc1970c88},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x413f5424, 0x41970c88},
+{'@', 0x000000e3, 0x00004fa6},/*        ã        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe8c000f},
+{'8', 0xf6d400e9, 0xead8f6eb},
+{'8', 0xeadcf4ed, 0xf6ddf6ef},
+{'9', 0x0000ffc9, 0x0042ffb1},
+{'l', 0xc0c9660c, 0x00000000},
+{'q', 0x40525988, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af708},
+{'8', 0xe050e022, 0x0a2d0018},
+{'8', 0x16280a15, 0x16240c13},
+{'8', 0x0a220a11, 0xbe4e0038},
+{'l', 0x40cddfc0, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496600, 0x4001ca40},
+{0, 0xc0ef70c0, 0x4001ca40},
+{'@', 0x000000e4, 0x00004fa6},/*        ä        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe82ff1a},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33f, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000e5, 0x00004fa6},/*        å        x-advance: 79.648438 */
+{'M', 0x42827d50, 0x3f33055f},
+{'8', 0xebb400cc, 0xc0e9ebe9},
+{'4', 0xffdd0002, 0x0000fffd},
+{'q', 0xc0b9bbf8, 0x410cfaa0},
+{0, 0xc1407294, 0x41460abd},
+{'q', 0xc0c72928, 0x405fc6b8},
+{0, 0xc1708f36, 0x405fc6b8},
+{'q', 0xc11ca4b3, 0xb4000000},
+{0, 0xc17f1ada, 0xc0bbf8d7},
+{'q', 0xc0c2af71, 0xc0bbf8d7},
+{0, 0xc0c2af71, 0xc16f70c8},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x4113b13c, 0xc19ca4b2},
+{'9', 0xffcb004a, 0xffc900ec},
+{'l', 0x4181ca4c, 0xbe56d400},
+{'8', 0xb90aca0a, 0xb6e3ce00},
+{'8', 0xe8aee8e3, 0x189c00be},
+{'9', 0x0017ffde, 0x0048ffcf},
+{'l', 0xc147292c, 0xc001ca50},
+{'q', 0x40496608, 0xc12479bc},
+{0, 0x412e8ba4, 0xc16e525c},
+{'q', 0x40faa11c, 0xc095ee10},
+{0, 0x41a7d509, 0xc095ee10},
+{'q', 0x413f5424, 0x00000000},
+{0, 0x41970c88, 0x40b30560},
+{'q', 0x40dfc6b0, 0x40b30560},
+{0, 0x40dfc6b0, 0x41708f34},
+{'9', 0x00230000, 0x0057fff6},
+{'l', 0xc0a59830, 0x41d377f1},
+{'8', 0x31fa1afa, 0x282d2800},
+{'9', 0x0000000f, 0xfffd0021},
+{'l', 0xbf7aa180, 0x40faa11e},
+{'9', 0x0008ffdc, 0x0008ffb9},
+{'m', 0xc1040724, 0xc218ba2e},
+{'l', 0xc15ea848, 0x3e8f3700},
+{'8', 0x0c9801be, 0x1ac50ada},
+{'8', 0x28df0fec, 0x3af518f5},
+{'8', 0x441a2900, 0x1a461a1b},
+{'8', 0xea610036, 0xc448e92b},
+{'9', 0xffdb001c, 0xffb00025},
+{'6', 0xffbb000f, 0xfe180059},
+{'8', 0x5fd93700, 0x27a127d9},
+{'8', 0xd9a100c9, 0xa1d9d9d9},
+{'8', 0xa127c800, 0xd95fd927},
+{'8', 0x275f0037, 0x5f282728},
+{'m', 0xc0f1ada0, 0x00000000},
+{'8', 0xcbebe000, 0xebcbebeb},
+{'8', 0x16ca00df, 0x34eb15eb},
+{'8', 0x35151e00, 0x16361615},
+{'8', 0xea350020, 0xca15ea15},
+{'@', 0x000000e6, 0x00007f57},/*        æ        x-advance: 127.339844 */
+{'M', 0x428a5259, 0xc20cb305},
+{'q', 0xbed6d300, 0x401ca4b0},
+{0, 0xbf211e00, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x408880e0, 0x41644071},
+{'8', 0x27662722, 0xe7570030},
+{'9', 0xffe70027, 0xffb60040},
+{'l', 0x411a67d0, 0x408cfaa0},
+{'q', 0xc09ee190, 0x4113b13c},
+{0, 0xc1460ac0, 0x4156d33f},
+{'q', 0xc0ed33e0, 0x4084072a},
+{0, 0xc18ea844, 0x4084072a},
+{'q', 0xc128f378, 0xb4000000},
+{0, 0xc1899f54, 0xc09ca4b3},
+{'q', 0xc0d49668, 0xc09ca4b3},
+{0, 0xc1117460, 0xc15d89d8},
+{'q', 0xc0d91020, 0x411b8644},
+{0, 0xc172cc14, 0x41644072},
+{'q', 0xc1064408, 0x408f3780},
+{0, 0xc19292cd, 0x408f3780},
+{'8', 0xeba300cb, 0xc5c3ebd9},
+{'q', 0xc02a11e7, 0xc09a67d4},
+{0, 0xc02a11e7, 0xc12c4ec5},
+{'q', 0x00000000, 0xc14efe34},
+{0, 0x41170c88, 0xc19c157c},
+{'9', 0xffcb004c, 0xffc900f2},
+{'l', 0x41852598, 0xbe56d400},
+{'q', 0x3faa11e0, 0xc0db4cf8},
+{0, 0x3faa11e0, 0xc10e1910},
+{'q', 0x00000000, 0xc1472928},
+{0, 0xc168ba30, 0xc1472928},
+{'8', 0x179700bb, 0x48cd17dd},
+{'l', 0xc147292e, 0xc001ca50},
+{'q', 0x40525988, 0xc12479bc},
+{0, 0x4135423e, 0xc16e525c},
+{'q', 0x4101ca4c, 0xc095ee10},
+{0, 0x41adfc6a, 0xc095ee10},
+{'q', 0x41786444, 0x00000000},
+{0, 0x41b5d174, 0x4130c880},
+{'q', 0x410abdc8, 0xc130c880},
+{0, 0x41c101cc, 0xc130c880},
+{'q', 0x415a2e88, 0x00000000},
+{0, 0x41a982b0, 0x40e8ba30},
+{'q', 0x40f1ada0, 0x40e8ba28},
+{0, 0x40f1ada0, 0x41a23cdc},
+{'8', 0x3dfc1a00, 0x35f822fd},
+{'6', 0x0000fe66, 0xffefff9f},
+{'l', 0xc1667d50, 0x3e8f3780},
+{'q', 0xc12479bc, 0x3e8f3780},
+{0, 0xc17f1ada, 0x400abdc0},
+{'8', 0x2dbe0fd4, 0x49eb1deb},
+{'8', 0x44192b00, 0x1945191a},
+{'8', 0xe8680038, 0xbd50e730},
+{'9', 0xffd50020, 0xffa50029},
+{'6', 0xffcf0009, 0xffc501a3},
+{'l', 0x3e8f3800, 0xc0a11e70},
+{'8', 0x96dfbb00, 0xdca1dcdf},
+{'q', 0xc1099f50, 0x00000000},
+{0, 0xc1679bb8, 0x40be35b8},
+{'q', 0xc0bbf8e0, 0x40be35b0},
+{0, 0xc1040730, 0x4187f1ae},
+{'l', 0x4219d89e, 0x00000000},
+{'@', 0x000000e7, 0x0000479b},/*        ç        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc10880e5},
+{'9', 0x00000072, 0xff8000a1},
+{'l', 0x412e8ba4, 0x405b4cf8},
+{'q', 0xc1076278, 0x41b4b305},
+{0, 0xc1fb3056, 0x41b4b305},
+{'q', 0xc156d340, 0xb4000000},
+{0, 0xc1a508f4, 0xc0f3ea85},
+{'q', 0xc0e67d4f, 0xc0f3ea83},
+{0, 0xc0e67d4f, 0xc1ab3056},
+{'q', 0x00000000, 0xc15fc6b6},
+{0, 0x40a11e6f, 0xc1d01ca5},
+{'q', 0x40a35b4c, 0xc1407294},
+{0, 0x4156d33e, 0xc18d89da},
+{'q', 0x41064408, 0xc0b77f10},
+{0, 0x41a479bd, 0xc0b77f10},
+{'q', 0x413d1744, 0x00000000},
+{0, 0x41955ee0, 0x40be35b0},
+{'9', 0x002f0037, 0x0082003c},
+{'l', 0xc1460ac0, 0x3fdfc6a0},
+{'8', 0xaddfcafd, 0xe3afe3e2},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1644072, 0x40982af8},
+{'q', 0xc0ae8ba4, 0x4095ee18},
+{0, 0xc1076276, 0x416f70c8},
+{'q', 0xc0407290, 0x412479bc},
+{0, 0xc0407290, 0x41a23cde},
+{'9', 0x00950000, 0x00950079},
+{'m', 0xbf982b00, 0x4173ea83},
+{'8', 0x1643022d, 0x35161416},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0xc1a982af, 0x4157f1ae},
+{'9', 0x0000ffe5, 0xfffdffc5},
+{'l', 0x3fbbf8d8, 0xc0cba2e8},
+{'8', 0x0331031a, 0xf4470032},
+{'8', 0xdb15f415, 0xd8bed800},
+{'9', 0x0000ffe8, 0x0001ffe0},
+{'l', 0x40e20394, 0xc142af71},
+{'l', 0x40ef70c8, 0x00000000},
+{'l', 0xc0840728, 0x40d6d33e},
+{'@', 0x000000e8, 0x00004fa6},/*        è        x-advance: 79.648438 */
+{'M', 0x418f377f, 0xc20cb305},
+{'q', 0xbed6d340, 0x401ca4b0},
+{0, 0xbf211e60, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x4093b138, 0x41644071},
+{'q', 0x4095ee1c, 0x409ee192},
+{0, 0x4160e524, 0x409ee192},
+{'8', 0xe6620036, 0xb744e62c},
+{'l', 0x411a67d4, 0x408cfaa0},
+{'q', 0xc0a35b48, 0x411292cd},
+{0, 0xc1501ca4, 0x4155b4d0},
+{'q', 0xc0faa120, 0x40864408},
+{0, 0xc1982af6, 0x40864408},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1af1ada, 0xc0f86441},
+{'q', 0xc0f86443, 0xc0faa11d},
+{0, 0xc0f86443, 0xc1afaa12},
+{'q', 0x00000000, 0xc160e524},
+{0, 0x409ee191, 0xc1c9660a},
+{'q', 0x409ee190, 0xc133055c},
+{0, 0x415fc6b7, 0xc18abdc2},
+{'q', 0x411055ee, 0xc0c72930},
+{0, 0x41a23cdd, 0xc0c72930},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b27626, 0x40e67d50},
+{'q', 0x40ff1ae0, 0x40e67d50},
+{0, 0x40ff1ae0, 0x41a2cc14},
+{'9', 0x003a0000, 0x0072fff3},
+{'6', 0x0000fe4a, 0xffb3015d},
+{'l', 0x3e8f3780, 0xc0a11e70},
+{'8', 0x96dcbb00, 0xdc99dcdd},
+{'q', 0xc115ee18, 0x00000000},
+{0, 0xc17cddfc, 0x40c07290},
+{'9', 0x002fffce, 0x0087ffb9},
+{'6', 0x0000014f, 0xfec7ffa1},
+{'l', 0xc19dc322, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x413423cc, 0x41a08f38},
+{'l', 0xbe56d300, 0x3fb30540},
+{'l', 0xc0c4ec50, 0x00000000},
+{'@', 0x000000e9, 0x00004fa6},/*        é        x-advance: 79.648438 */
+{'M', 0x418f377f, 0xc20cb305},
+{'q', 0xbed6d340, 0x401ca4b0},
+{0, 0xbf211e60, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x4093b138, 0x41644071},
+{'q', 0x4095ee1c, 0x409ee192},
+{0, 0x4160e524, 0x409ee192},
+{'8', 0xe6620036, 0xb744e62c},
+{'l', 0x411a67d4, 0x408cfaa0},
+{'q', 0xc0a35b48, 0x411292cd},
+{0, 0xc1501ca4, 0x4155b4d0},
+{'q', 0xc0faa120, 0x40864408},
+{0, 0xc1982af6, 0x40864408},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1af1ada, 0xc0f86441},
+{'q', 0xc0f86443, 0xc0faa11d},
+{0, 0xc0f86443, 0xc1afaa12},
+{'q', 0x00000000, 0xc160e524},
+{0, 0x409ee191, 0xc1c9660a},
+{'q', 0x409ee190, 0xc133055c},
+{0, 0x415fc6b7, 0xc18abdc2},
+{'q', 0x411055ee, 0xc0c72930},
+{0, 0x41a23cdd, 0xc0c72930},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b27626, 0x40e67d50},
+{'q', 0x40ff1ae0, 0x40e67d50},
+{0, 0x40ff1ae0, 0x41a2cc14},
+{'9', 0x003a0000, 0x0072fff3},
+{'6', 0x0000fe4a, 0xffb3015d},
+{'l', 0x3e8f3780, 0xc0a11e70},
+{'8', 0x96dcbb00, 0xdc99dcdd},
+{'q', 0xc115ee18, 0x00000000},
+{0, 0xc17cddfc, 0x40c07290},
+{'9', 0x002fffce, 0x0087ffb9},
+{'6', 0x0000014f, 0xfec7ff3e},
+{'l', 0x3e56d300, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc14, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000ea, 0x00004fa6},/*        ê        x-advance: 79.648438 */
+{'M', 0x418f377f, 0xc20cb305},
+{'q', 0xbed6d340, 0x401ca4b0},
+{0, 0xbf211e60, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x4093b138, 0x41644071},
+{'q', 0x4095ee1c, 0x409ee192},
+{0, 0x4160e524, 0x409ee192},
+{'8', 0xe6620036, 0xb744e62c},
+{'l', 0x411a67d4, 0x408cfaa0},
+{'q', 0xc0a35b48, 0x411292cd},
+{0, 0xc1501ca4, 0x4155b4d0},
+{'q', 0xc0faa120, 0x40864408},
+{0, 0xc1982af6, 0x40864408},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1af1ada, 0xc0f86441},
+{'q', 0xc0f86443, 0xc0faa11d},
+{0, 0xc0f86443, 0xc1afaa12},
+{'q', 0x00000000, 0xc160e524},
+{0, 0x409ee191, 0xc1c9660a},
+{'q', 0x409ee190, 0xc133055c},
+{0, 0x415fc6b7, 0xc18abdc2},
+{'q', 0x411055ee, 0xc0c72930},
+{0, 0x41a23cdd, 0xc0c72930},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b27626, 0x40e67d50},
+{'q', 0x40ff1ae0, 0x40e67d50},
+{0, 0x40ff1ae0, 0x41a2cc14},
+{'9', 0x003a0000, 0x0072fff3},
+{'6', 0x0000fe4a, 0xffb3015d},
+{'l', 0x3e8f3780, 0xc0a11e70},
+{'8', 0x96dcbb00, 0xdc99dcdd},
+{'q', 0xc115ee18, 0x00000000},
+{0, 0xc17cddfc, 0x40c07290},
+{'9', 0x002fffce, 0x0087ffb9},
+{'6', 0x0000014f, 0xfebc0043},
+{'0', 0x00cd0bfe, 0x00ffa298},
+{'l', 0xc1944073, 0x413d1740},
+{'l', 0xc101ca4c, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30540},
+{'l', 0x41a00001, 0xc1970c88},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x413f5424, 0x41970c88},
+{'@', 0x000000eb, 0x00004fa6},/*        ë        x-advance: 79.648438 */
+{'M', 0x418f377f, 0xc20cb305},
+{'q', 0xbed6d340, 0x401ca4b0},
+{0, 0xbf211e60, 0x40fcddfc},
+{'q', 0x00000000, 0x4114cfaa},
+{0, 0x4093b138, 0x41644071},
+{'q', 0x4095ee1c, 0x409ee192},
+{0, 0x4160e524, 0x409ee192},
+{'8', 0xe6620036, 0xb744e62c},
+{'l', 0x411a67d4, 0x408cfaa0},
+{'q', 0xc0a35b48, 0x411292cd},
+{0, 0xc1501ca4, 0x4155b4d0},
+{'q', 0xc0faa120, 0x40864408},
+{0, 0xc1982af6, 0x40864408},
+{'q', 0xc160e526, 0xb4000000},
+{0, 0xc1af1ada, 0xc0f86441},
+{'q', 0xc0f86443, 0xc0faa11d},
+{0, 0xc0f86443, 0xc1afaa12},
+{'q', 0x00000000, 0xc160e524},
+{0, 0x409ee191, 0xc1c9660a},
+{'q', 0x409ee190, 0xc133055c},
+{0, 0x415fc6b7, 0xc18abdc2},
+{'q', 0x411055ee, 0xc0c72930},
+{0, 0x41a23cdd, 0xc0c72930},
+{'q', 0x41655ee4, 0x00000000},
+{0, 0x41b27626, 0x40e67d50},
+{'q', 0x40ff1ae0, 0x40e67d50},
+{0, 0x40ff1ae0, 0x41a2cc14},
+{'9', 0x003a0000, 0x0072fff3},
+{'6', 0x0000fe4a, 0xffb3015d},
+{'l', 0x3e8f3780, 0xc0a11e70},
+{'8', 0x96dcbb00, 0xdc99dcdd},
+{'q', 0xc115ee18, 0x00000000},
+{0, 0xc17cddfc, 0x40c07290},
+{'9', 0x002fffce, 0x0087ffb9},
+{'6', 0x0000014f, 0xfebdfee8},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000ec, 0x000027ca},/*        ì        x-advance: 39.789062 */
+{'M', 0x40c7292d, 0x00000000},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd6100b2},
+{'l', 0xc19dc322, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x413423cc, 0x41a08f38},
+{'l', 0xbe56d300, 0x3fb30540},
+{'l', 0xc0c4ec50, 0x00000000},
+{'@', 0x000000ed, 0x000027ca},/*        í        x-advance: 39.789062 */
+{'M', 0x40c7292d, 0x00000000},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd610060},
+{'l', 0x3e56d300, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc18, 0x00000000},
+{'l', 0xbeb30580, 0x4001ca40},
+{'l', 0xc1d13b13, 0x419b8644},
+{'l', 0xc0d25984, 0x00000000},
+{'@', 0x000000ee, 0x000027ca},/*        î        x-advance: 39.789062 */
+{'M', 0x40c7292d, 0x00000000},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd550162},
+{'0', 0x00cd0bfe, 0x00ffa298},
+{'l', 0xc1944072, 0x413d1740},
+{'l', 0xc101ca4c, 0x00000000},
+{'l', 0x3e8f3770, 0xbfb30540},
+{'l', 0x41a00000, 0xc1970c88},
+{'l', 0x41644072, 0x00000000},
+{'l', 0x413f5424, 0x41970c88},
+{'@', 0x000000ef, 0x000027ca},/*        ï        x-advance: 39.789062 */
+{'M', 0x40c7292d, 0x00000000},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd570016},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000f0, 0x00004fa6},/*        ð        x-advance: 79.648438 */
+{'M', 0x422ed33f, 0xc2b9bbf9},
+{'9', 0xffceffcb, 0xffa9ff93},
+{'l', 0x4144ec4e, 0x00000000},
+{'9', 0x0015002b, 0x00390057},
+{'4', 0xffc70093, 0x003cfff6},
+{'l', 0xc13d1744, 0x4095ee20},
+{'q', 0x4102e8bc, 0x411b8640},
+{0, 0x413ada6c, 0x419b8644},
+{'q', 0x405fc6a0, 0x411b8644},
+{0, 0x405fc6a0, 0x41a982ae},
+{'q', 0x00000000, 0x416af710},
+{0, 0xc0917460, 0x41dabdc4},
+{'q', 0xc08f3780, 0x414a8479},
+{0, 0xc14ddfc4, 0x41955ee1},
+{'q', 0xc1064408, 0x40be35b6},
+{0, 0xc1afaa12, 0x40be35b6},
+{'q', 0xc15ea846, 0xb4000000},
+{0, 0xc1ae8ba2, 0xc0fcddfc},
+{'q', 0xc0faa11f, 0xc0fcddfc},
+{0, 0xc0faa11f, 0xc1aaa11e},
+{'q', 0x00000000, 0xc1330560},
+{0, 0x408f377f, 0xc1a62764},
+{'q', 0x4091745c, 0xc11a67d4},
+{0, 0x414cc158, 0xc168ba2c},
+{'q', 0x41040728, 0xc09ee198},
+{0, 0x41a2cc16, 0xc09ee198},
+{'8', 0x1054002c, 0x293c1028},
+{'q', 0xbfaa11e0, 0xc0fcde00},
+{0, 0xc08f3780, 0xc16c1578},
+{'9', 0xffcaffe8, 0xffa5ffc7},
+{'4', 0x003fff68, 0xffbd000b},
+{'6', 0xffd80064, 0x010dfff4},
+{'8', 0x1f9300bd, 0x61c01fd6},
+{'q', 0xc0330558, 0x4102e8bc},
+{0, 0xc0330558, 0x417f1adc},
+{'8', 0x6f234800, 0x27642723},
+{'8', 0xed580034, 0xc63ced24},
+{'8', 0x9a27d919, 0x930ec10e},
+{'8', 0xc6eee200, 0xd5cee5ef},
+{'q', 0xc0840728, 0xc001ca50},
+{0, 0xc113b13c, 0xc001ca50},
+{'@', 0x000000f1, 0x00004fa6},/*        ñ        x-advance: 79.648438 */
+{'M', 0x42488f37, 0x00000000},
+{'l', 0x410cfaa4, 0xc2346b69},
+{'8', 0xad0acf0a, 0xa39ca300},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1786440, 0x40d6d340},
+{'9', 0x0035ffcb, 0x0091ffb9},
+{'4', 0x0153ffbe, 0x0000ff9c},
+{'l', 0x4139bbf8, 0xc26e0abe},
+{'9', 0xffcb000b, 0xff7f0015},
+{'l', 0x413e35b4, 0x00000000},
+{'8', 0x2bfa0600, 0x3bf724fb},
+{'l', 0x3e56d300, 0x00000000},
+{'8', 0xa85cc02e, 0xe76fe72e},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x41786444, 0x40a35b50},
+{'q', 0x40a7d500, 0x40a35b40},
+{0, 0x40a7d500, 0x416c1578},
+{'9', 0x00230000, 0x005bfff5},
+{'4', 0x016dffb9, 0x0000ff9b},
+{'m', 0x410e1910, 0xc2a7f8d7},
+{'8', 0xf6d400e9, 0xead8f6eb},
+{'8', 0xeadcf4ed, 0xf6ddf6ef},
+{'9', 0x0000ffc9, 0x0042ffb1},
+{'l', 0xc0c96608, 0x00000000},
+{'q', 0x40525980, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af708},
+{'8', 0xe050e022, 0x0a2d0018},
+{'8', 0x16280a15, 0x16240c13},
+{'8', 0x0a220a11, 0xbe4e0038},
+{'l', 0x40cddfc0, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496600, 0x4001ca40},
+{0, 0xc0ef70c8, 0x4001ca40},
+{'@', 0x000000f2, 0x00004fa6},/*        ò        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59820, 0x40d9101b},
+{0, 0xc14ba2e4, 0x41235b4c},
+{'q', 0xc0f1ada8, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfc, 0xb4000000},
+{0, 0xc1ad6d34, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39496, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca4, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc4, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'9', 0xffc10010, 0xff7a0013},
+{'m', 0xc142af70, 0xc210e526},
+{'l', 0xc19dc323, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bbe, 0x00000000},
+{'l', 0x413423d0, 0x41a08f38},
+{'l', 0xbe56d400, 0x3fb30540},
+{'l', 0xc0c4ec48, 0x00000000},
+{'@', 0x000000f3, 0x00004fa6},/*        ó        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59820, 0x40d9101b},
+{0, 0xc14ba2e4, 0x41235b4c},
+{'q', 0xc0f1ada8, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfc, 0xb4000000},
+{0, 0xc1ad6d34, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39496, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca4, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc4, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'9', 0xffc10010, 0xff7a0013},
+{'m', 0xc1c9f542, 0xc210e526},
+{'l', 0x3e56d300, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc14, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000f4, 0x00004fa6},/*        ô        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59820, 0x40d9101b},
+{0, 0xc14ba2e4, 0x41235b4c},
+{'q', 0xc0f1ada8, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfc, 0xb4000000},
+{0, 0xc1ad6d34, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39496, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca4, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc4, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'9', 0xffc10010, 0xff7a0013},
+{'m', 0x4100abdc, 0xc2167d50},
+{'0', 0x00cd0bfe, 0x00ffa298},
+{'l', 0xc1944072, 0x413d1740},
+{'l', 0xc101ca4a, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30540},
+{'l', 0x419fffff, 0xc1970c88},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x413f5424, 0x41970c88},
+{'@', 0x000000f5, 0x00004fa6},/*        õ        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59820, 0x40d9101b},
+{0, 0xc14ba2e4, 0x41235b4c},
+{'q', 0xc0f1ada8, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfc, 0xb4000000},
+{0, 0xc1ad6d34, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39496, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca4, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc4, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'9', 0xffc10010, 0xff7a0013},
+{'m', 0xc0b30560, 0xc210e526},
+{'8', 0xf6d400e9, 0xead8f6eb},
+{'8', 0xeadcf4ed, 0xf6ddf6ef},
+{'9', 0x0000ffc9, 0x0042ffb1},
+{'l', 0xc0c96608, 0x00000000},
+{'q', 0x40525980, 0xc12a11e8},
+{0, 0x40ef70c8, 0xc16af708},
+{'8', 0xe050e022, 0x0a2d0018},
+{'8', 0x16280a15, 0x16240c13},
+{'8', 0x0a220a11, 0xbe4e0038},
+{'l', 0x40cddfd0, 0x00000000},
+{'8', 0x59db3ced, 0x2cd51bef},
+{'q', 0xc0496610, 0x4001ca40},
+{0, 0xc0ef70c8, 0x4001ca40},
+{'@', 0x000000f6, 0x00004fa6},/*        ö        x-advance: 79.648438 */
+{'M', 0x42970c88, 0xc23f0c88},
+{'q', 0x00000000, 0x4111745c},
+{0, 0xc0330560, 0x41979bc0},
+{'q', 0xc0330560, 0x411ca4b2},
+{0, 0xc100abe0, 0x41852598},
+{'q', 0xc0a59820, 0x40d9101b},
+{0, 0xc14ba2e4, 0x41235b4c},
+{'q', 0xc0f1ada8, 0x4056d340},
+{0, 0xc1899f54, 0x4056d340},
+{'q', 0xc15b4cfc, 0xb4000000},
+{0, 0xc1ad6d34, 0xc1040729},
+{'q', 0xc0ff1adb, 0xc1040729},
+{0, 0xc0ff1adb, 0xc1b39496},
+{'q', 0x3e8f3780, 0xc1644074},
+{0, 0x40a5982b, 0xc1ca847a},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101c, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'q', 0x416af70c, 0x00000000},
+{0, 0x41b39496, 0x40f62760},
+{'9', 0x003c003e, 0x00ac003e},
+{'m', 0xc1501ca4, 0x00000000},
+{'q', 0x00000000, 0xc1a00000},
+{0, 0xc18abdc4, 0xc1a00000},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b5423c, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'q', 0xc0496608, 0x411dc320},
+{0, 0xc0496608, 0x4198ba2e},
+{'q', 0x00000000, 0x4125982a},
+{0, 0x408f3780, 0x417cddfb},
+{'8', 0x2b682b23, 0xed5c0039},
+{'8', 0xc43ded23, 0x972ad71a},
+{'9', 0xffc10010, 0xff7a0013},
+{'m', 0xc20cfaa2, 0xc215ee18},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33f, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000f7, 0x00004e99},/*        ÷        x-advance: 78.597656 */
+{'M', 0x40b77f1b, 0xc22a11e7},
+{'l', 0x00000000, 0xc1235b4c},
+{'4', 0x0000022c, 0x00510000},
+{'6', 0x0000fdd4, 0x00d700e7},
+{'0', 0x005d9a00, 0x00a36600},
+{'m', 0x00000000, 0xc24d982a},
+{'0', 0x005d9a00, 0x00a36600},
+{'@', 0x000000f8, 0x0000577b},/*        ø        x-advance: 87.480469 */
+{'M', 0x4160e525, 0xc1223cde},
+{'q', 0xc0aa11e6, 0xc0f3ea84},
+{0, 0xc0aa11e6, 0xc1994966},
+{'q', 0x3e8f3780, 0xc1644072},
+{0, 0x40a5982a, 0xc1ca8479},
+{'q', 0x409ca4b2, 0xc130c884},
+{0, 0x4159101d, 0xc185b4d2},
+{'q', 0x410abdc4, 0xc0b54230},
+{0, 0x41abbf8e, 0xc0b54230},
+{'9', 0x0000005a, 0x00250095},
+{'4', 0xffd30027, 0x0000005d},
+{'l', 0xc1235b48, 0x413d1740},
+{'q', 0x40a59820, 0x40e67d58},
+{0, 0x40a59820, 0x4193b13c},
+{'q', 0x00000000, 0x40ed33e8},
+{0, 0xbfe8ba00, 0x4171ada8},
+{'q', 0xc0f62760, 0x4206d33e},
+{0, 0xc21bcde0, 0x4206d33e},
+{'9', 0x0000ffaa, 0xffd9ff70},
+{'4', 0x0034ffd4, 0x0000ffa3},
+{'6', 0xff9a0057, 0xff69003c},
+{'9', 0x00280000, 0x00470008},
+{'l', 0x42170c88, 0xc22f6277},
+{'q', 0xc08cfaa0, 0xc06d33e0},
+{0, 0xc13ada68, 0xc06d33e0},
+{'q', 0xc1170c88, 0x00000000},
+{0, 0xc172cc14, 0x409ca4b8},
+{'q', 0xc0b54240, 0x409a67d0},
+{0, 0xc10cfaa2, 0x416af70c},
+{'9', 0x004effe7, 0x0098ffe7},
+{'m', 0x4231e6f0, 0xc1955ee2},
+{'9', 0xffdc0000, 0xffbffff9},
+{'l', 0xc2170c89, 0x422f6276},
+{'q', 0x408cfaa4, 0x4076275c},
+{0, 0x413bf8d8, 0x4076275c},
+{'q', 0x41182af8, 0x00000000},
+{0, 0x416e5258, 0xc093b13c},
+{'q', 0x40ae8ba8, 0xc095ee1a},
+{0, 0x410880e8, 0xc1620393},
+{'q', 0x40496610, 0xc1182af6},
+{0, 0x40644070, 0xc1a62763},
+{'@', 0x000000f9, 0x00004fa6},/*        ù        x-advance: 79.648438 */
+{'M', 0x41e82af7, 0xc2975424},
+{'l', 0xc10cfaa2, 0x42346b6a},
+{'8', 0x53f631f6, 0x5d645d00},
+{'q', 0x410cfaa2, 0x00000000},
+{0, 0x41786442, 0xc0d6d33e},
+{'9', 0xffcb0035, 0xff6f0047},
+{'4', 0xfead0042, 0x00000064},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x0035fff5, 0x0081ffeb},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xd505fa00, 0xc40adb06},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x59a340d2, 0x189218d2},
+{'q', 0xc125982a, 0xb4000000},
+{0, 0xc17982af, 0xc0a35b4d},
+{'q', 0xc0a5982b, 0xc0a35b4d},
+{0, 0xc0a5982b, 0xc16c157a},
+{'9', 0xffdd0000, 0xffa5000b},
+{'4', 0xfe930047, 0x00000065},
+{'m', 0x41b27627, 0xc1052598},
+{'l', 0xc19dc322, 0xc19b8644},
+{'l', 0x3eb30580, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x413423cc, 0x41a08f38},
+{'l', 0xbe56d300, 0x3fb30540},
+{'l', 0xc0c4ec50, 0x00000000},
+{'@', 0x000000fa, 0x00004fa6},/*        ú        x-advance: 79.648438 */
+{'M', 0x41e82af7, 0xc2975424},
+{'l', 0xc10cfaa2, 0x42346b6a},
+{'8', 0x53f631f6, 0x5d645d00},
+{'q', 0x410cfaa2, 0x00000000},
+{0, 0x41786442, 0xc0d6d33e},
+{'9', 0xffcb0035, 0xff6f0047},
+{'4', 0xfead0042, 0x00000064},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x0035fff5, 0x0081ffeb},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xd505fa00, 0xc40adb06},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x59a340d2, 0x189218d2},
+{'q', 0xc125982a, 0xb4000000},
+{0, 0xc17982af, 0xc0a35b4d},
+{'q', 0xc0a5982b, 0xc0a35b4d},
+{0, 0xc0a5982b, 0xc16c157a},
+{'9', 0xffdd0000, 0xffa5000b},
+{'4', 0xfe930047, 0x00000065},
+{'m', 0x410cfaa2, 0xc1052598},
+{'l', 0x3e56d300, 0xbfb30540},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc14, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000fb, 0x00004fa6},/*        û        x-advance: 79.648438 */
+{'M', 0x41e82af7, 0xc2975424},
+{'l', 0xc10cfaa2, 0x42346b6a},
+{'8', 0x53f631f6, 0x5d645d00},
+{'q', 0x410cfaa2, 0x00000000},
+{0, 0x41786442, 0xc0d6d33e},
+{'9', 0xffcb0035, 0xff6f0047},
+{'4', 0xfead0042, 0x00000064},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x0035fff5, 0x0081ffeb},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xd505fa00, 0xc40adb06},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x59a340d2, 0x189218d2},
+{'q', 0xc125982a, 0xb4000000},
+{0, 0xc17982af, 0xc0a35b4d},
+{'q', 0xc0a5982b, 0xc0a35b4d},
+{0, 0xc0a5982b, 0xc16c157a},
+{'9', 0xffdd0000, 0xffa5000b},
+{'4', 0xfe930047, 0x00000065},
+{'m', 0x422982ae, 0xc11b8640},
+{'0', 0x00cd0bfe, 0x00ffa298},
+{'l', 0xc1944072, 0x413d1740},
+{'l', 0xc101ca4a, 0x00000000},
+{'l', 0x3e8f3780, 0xbfb30540},
+{'l', 0x419fffff, 0xc1970c88},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x413f5420, 0x41970c88},
+{'@', 0x000000fc, 0x00004fa6},/*        ü        x-advance: 79.648438 */
+{'M', 0x41e82af7, 0xc2975424},
+{'l', 0xc10cfaa2, 0x42346b6a},
+{'8', 0x53f631f6, 0x5d645d00},
+{'q', 0x410cfaa2, 0x00000000},
+{0, 0x41786442, 0xc0d6d33e},
+{'9', 0xffcb0035, 0xff6f0047},
+{'4', 0xfead0042, 0x00000064},
+{'l', 0xc139bbf8, 0x426e0abe},
+{'9', 0x0035fff5, 0x0081ffeb},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xd505fa00, 0xc40adb06},
+{'l', 0xbe56d300, 0x00000000},
+{'8', 0x59a340d2, 0x189218d2},
+{'q', 0xc125982a, 0xb4000000},
+{0, 0xc17982af, 0xc0a35b4d},
+{'q', 0xc0a5982b, 0xc0a35b4d},
+{0, 0xc0a5982b, 0xc16c157a},
+{'9', 0xffdd0000, 0xffa5000b},
+{'4', 0xfe930047, 0x00000065},
+{'m', 0xbeb30580, 0xc1194960},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33f, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x000000fd, 0x0000479b},/*        ý        x-advance: 71.605469 */
+{'M', 0x3f8f377f, 0x41edc322},
+{'9', 0x0000ffd8, 0xfff9ffb7},
+{'l', 0x400abdc2, 0xc115ee1a},
+{'8', 0x042b0419, 0xdd5d0035},
+{'9', 0xffdd0028, 0xff980050},
+{'l', 0x3ff1ada0, 0xc0525984},
+{'4', 0xfdaaff87, 0x00000066},
+{'l', 0x40faa120, 0x422745d2},
+{'8', 0x5f0f2c08, 0x41073207},
+{'q', 0x3f330540, 0xbfc4ec50},
+{0, 0x3fe8ba20, 0xc071ada8},
+{'9', 0xffef0008, 0xfe2f00fd},
+{'4', 0x0000006f, 0x025dfea2},
+{'q', 0xc0f86444, 0x4157f1ad},
+{0, 0xc148479c, 0x41979bbf},
+{'8', 0x40b22bdb, 0x15a415d8},
+{'m', 0x42083949, 0xc2e369a0},
+{'l', 0x3e56d400, 0xbfb30500},
+{'l', 0x418d89d8, 0xc1a08f38},
+{'l', 0x4172cc14, 0x00000000},
+{'l', 0xbeb30500, 0x4001ca40},
+{'l', 0xc1d13b14, 0x419b8644},
+{'l', 0xc0d25988, 0x00000000},
+{'@', 0x000000fe, 0x00004fa6},/*        þ        x-advance: 79.648438 */
+{'M', 0x421af70c, 0x3fb3055f},
+{'q', 0xc1099f52, 0x00000000},
+{0, 0xc160e524, 0xc068ba2e},
+{'9', 0xffe3ffd5, 0xffafffc4},
+{'l', 0xbeb30540, 0x35800000},
+{'9', 0x0030fffb, 0x0064fff0},
+{'l', 0xc0b77f1a, 0x41eca4b3},
+{'l', 0xc148479c, 0x00000000},
+{'4', 0xfbd500cf, 0x00000064},
+{'l', 0xc0b9bbf8, 0x41eca4b4},
+{'9', 0x0019fffc, 0x004effed},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0xb356cb28, 0xe86fe82d},
+{'q', 0x412faa14, 0x00000000},
+{0, 0x418880e6, 0x40d49660},
+{'q', 0x40c4ec50, 0x40d25980},
+{0, 0x40c4ec50, 0x4190e524},
+{'q', 0x00000000, 0x41632204},
+{0, 0xc08abdc0, 0x41dc6b6a},
+{'q', 0xc08880f0, 0x41549661},
+{0, 0xc1419104, 0x419dc322},
+{'9', 0x0033ffc2, 0x0033ff62},
+{'m', 0x41170c88, 0xc2897b86},
+{'8', 0x16a100c9, 0x44be16d9},
+{'q', 0xc05b4cf8, 0x40b54238},
+{0, 0xc0ac4ec4, 0x41644070},
+{'q', 0xbffaa120, 0x410880e4},
+{0, 0xbffaa120, 0x417508f4},
+{'8', 0x6d234500, 0x26632623},
+{'q', 0x410abdc4, 0x00000000},
+{0, 0x415b4cfc, 0xc0a7d50a},
+{'q', 0x40a11e70, 0xc0aa11e6},
+{0, 0x40fcddf8, 0xc1864406},
+{'q', 0x40377f20, 0xc1389d8c},
+{0, 0x40377f20, 0xc1a11e70},
+{'8', 0x99e6bc00, 0xdeaddee6},
+{'@', 0x000000ff, 0x0000479b},/*        ÿ        x-advance: 71.605469 */
+{'M', 0x3f8f377f, 0x41edc322},
+{'9', 0x0000ffd8, 0xfff9ffb7},
+{'l', 0x400abdc2, 0xc115ee1a},
+{'8', 0x042b0419, 0xdd5d0035},
+{'9', 0xffdd0028, 0xff980050},
+{'l', 0x3ff1ada0, 0xc0525984},
+{'4', 0xfdaaff87, 0x00000066},
+{'l', 0x40faa120, 0x422745d2},
+{'8', 0x5f0f2c08, 0x41073207},
+{'q', 0x3f330540, 0xbfc4ec50},
+{0, 0x3fe8ba20, 0xc071ada8},
+{'9', 0xffef0008, 0xfe2f00fd},
+{'4', 0x0000006f, 0x025dfea2},
+{'q', 0xc0f86444, 0x4157f1ad},
+{0, 0xc148479c, 0x41979bbf},
+{'8', 0x40b22bdb, 0x15a415d8},
+{'m', 0x41bd1746, 0xc2e5ee18},
+{'0', 0x00619a13, 0x009f66ed},
+{'m', 0x41d6d33e, 0x00000000},
+{'0', 0x00609a13, 0x00a066ed},
+{'@', 0x00000141, 0x00004fa6},/*        Ł        x-advance: 79.648438 */
+{'M', 0x419dc322, 0xc12e8ba3},
+{'l', 0x4247292d, 0x00000000},
+{'l', 0xc00abdc0, 0x412e8ba3},
+{'l', 0xc27c9661, 0x00000000},
+{'l', 0x40eaf70c, 0xc2167d50},
+{'l', 0xc13660ac, 0x40be35b0},
+{'l', 0x4001ca4b, 0xc130c880},
+{'l', 0x41389d89, 0xc0be35b8},
+{'l', 0x411a67d6, 0xc24770c7},
+{'l', 0x4155b4d0, 0x00000000},
+{'l', 0xc102e8bc, 0x4228abdb},
+{'l', 0x41ab3056, 0xc125982c},
+{'l', 0xc00abdc0, 0x412faa14},
+{'l', 0xc1ab3056, 0x4126b698},
+{'l', 0xc0d49660, 0x42099f54},
+{'@', 0x000003c0, 0x00005ff1},/*        π        x-advance: 95.941406 */
+{'M', 0x428c6b6a, 0xc1632203},
+{'8', 0x2d282d00, 0xf8350013},
+{'l', 0xbf864400, 0x4115ee19},
+{'8', 0x0caa0cd2, 0x959c009c},
+{'9', 0xffea0000, 0xffca0005},
+{'4', 0xfe840049, 0x0000ff20},
+{'q', 0xc0496610, 0x4182e8ba},
+{0, 0xc0c96610, 0x41dd89d8},
+{'q', 0xc044ec48, 0x4135423c},
+{0, 0xc0d01ca0, 0x41a86440},
+{'9', 0x004dffe6, 0x008effc9},
+{'l', 0xc1525982, 0x00000000},
+{'q', 0x40c7292e, 0xc15d89d8},
+{0, 0x41377f1c, 0xc1f1ada6},
+{'9', 0xff7d002a, 0xff0b0040},
+{'l', 0x3f864400, 0xc0b30558},
+{'8', 0x06a900d3, 0x0dc706d7},
+{'l', 0x3ff1ada8, 0xc11b8640},
+{'8', 0xf52cfa0f, 0xfb3cfb1e},
+{'l', 0x42946440, 0x00000000},
+{'4', 0x0049fff2, 0x0000ff7e},
+{'l', 0xc113b138, 0x423f9bbf},
+{'q', 0xbefaa100, 0x401ca4b0},
+{0, 0xbefaa100, 0x408cfaa2},
+{'@', 0x0000201c, 0x00002fb1},/*        “        x-advance: 47.691406 */
+{'M', 0x42064407, 0xc2852598},
+{'l', 0x3ffaa120, 0xc1235b50},
+{'8', 0xa31bcc0a, 0xb131d712},
+{'l', 0x410880e4, 0x00000000},
+{'9', 0x004cffbd, 0x0092ffaf},
+{'4', 0x00000031, 0x006dffeb},
+{'6', 0x0000ff94, 0x0000ff47},
+{'l', 0x3ffaa118, 0xc1235b50},
+{'8', 0xa21ccb0a, 0xb132d813},
+{'l', 0x41076276, 0x00000000},
+{'9', 0x004bffbd, 0x0092ffaf},
+{'l', 0x40c7292c, 0x00000000},
+{'l', 0xc02a11e8, 0x415a2e90},
+{'l', 0xc15a2e8b, 0x00000000},
+{'@', 0x0000201d, 0x00002fb1},/*        ”        x-advance: 47.691406 */
+{'M', 0x4191745d, 0xc2852598},
+{'l', 0xc1099f54, 0x00000000},
+{'9', 0xffb40043, 0xff6e0051},
+{'0', 0x931500cf, 0x51f1006d},
+{'8', 0x5fe435f6, 0x4fcf29ee},
+{'m', 0x41b89d89, 0x00000000},
+{'l', 0xc1076274, 0x00000000},
+{'9', 0xffb40043, 0xff6e0051},
+{'0', 0x931500cf, 0x51f1006c},
+{'8', 0x5ce534f6, 0x51ce28ef},
+{'@', 0x00002022, 0x00003223},/*        •        x-advance: 50.136719 */
+{'M', 0x423660ac, 0xc23ec4ec},
+{'8', 0x6fd24100, 0x2d922dd2},
+{'8', 0xd39500c2, 0x91d3d3d3},
+{'8', 0x942dc000, 0xd46bd42d},
+{'8', 0x2c6e0040, 0x6c2e2c2e},
+{'@', 0x00002026, 0x00008f37},/*        …        x-advance: 143.214844 */
+{'M', 0x41501ca5, 0x00000000},
+{'l', 0x40407294, 0xc17508f3},
+{'4', 0x0000006d, 0x007affe8},
+{'6', 0x0000ff93, 0x000002d6},
+{'l', 0x404072a0, 0xc17508f3},
+{'4', 0x0000006c, 0x007affe8},
+{'6', 0x0000ff94, 0x0000fe97},
+{'l', 0x40407290, 0xc17508f3},
+{'l', 0x4156d340, 0x00000000},
+{'l', 0xc04072a0, 0x417508f3},
+{'l', 0xc156d33c, 0x00000000},
+{'@', 0x000020ac, 0x00004fa6},/*        €        x-advance: 79.648438 */
+{'M', 0x42644072, 0xc2b370c8},
+{'8', 0x15a200c7, 0x40bc14db},
+{'9', 0x002bffe2, 0x0073ffcd},
+{'4', 0x00000103, 0x0047ffdc},
+{'l', 0xc1f08f37, 0x00000000},
+{'9', 0x0035fff6, 0x005bfff3},
+{'4', 0x00000103, 0x0048ffdc},
+{'l', 0xc1e20395, 0x00000000},
+{'q', 0x3e0f3780, 0x414ddfc8},
+{0, 0x40982af8, 0x419d33ec},
+{'8', 0x356a3525, 0xe360003b},
+{'9', 0xffe30025, 0xffad003c},
+{'l', 0x412a11e8, 0x4056d340},
+{'q', 0xc0864400, 0x41235b4c},
+{0, 0xc1419100, 0x41786440},
+{'q', 0xc0faa120, 0x40a7d508},
+{0, 0xc1979bc0, 0x40a7d508},
+{'q', 0xc15ea848, 0xb4000000},
+{0, 0xc1ae8ba3, 0xc1182af7},
+{'9', 0xffb4ffc1, 0xff2affbf},
+{'4', 0x0000ffa1, 0xffb80023},
+{'l', 0x40faa11d, 0x00000000},
+{'8', 0xc707e502, 0xde07e205},
+{'4', 0x0000ffaf, 0xffb90024},
+{'l', 0x40fcddfe, 0x00000000},
+{'q', 0x40ae8ba0, 0xc18fc6b4},
+{0, 0x417bbf8e, 0xc1d5b4d0},
+{'q', 0x41259828, 0xc10bdc30},
+{0, 0x41c57b86, 0xc10cfaa0},
+{'q', 0x41377f1c, 0x00000000},
+{0, 0x4194cfaa, 0x40ae8ba0},
+{'9', 0x002b0039, 0x007e0049},
+{'l', 0xc13f5420, 0x401ca4a0},
+{'q', 0xc071ada0, 0xc1525980},
+{0, 0xc181ca4c, 0xc156d338},
+{'l', 0xbf211e80, 0x00000000},
+{'@', 0x00002122, 0x00008f37},/*        â„¢        x-advance: 143.214844 */
+{'M', 0x42ec80e5, 0xc23157b8},
+{'l', 0x00000000, 0xc22d2598},
+{'l', 0xbf0f3780, 0x3fc4ec40},
+{'l', 0xc1876278, 0x4226fe36},
+{'l', 0xc0f1ada0, 0x00000000},
+{'l', 0xc13660a8, 0xc1e70c88},
+{'l', 0xc0ac4ed0, 0xc1667d50},
+{'l', 0xbe0f3600, 0x40211e60},
+{'l', 0x00000000, 0x422313b2},
+{'l', 0xc10f3780, 0x00000000},
+{'l', 0x00000000, 0xc258c880},
+{'l', 0x41549660, 0x00000000},
+{'l', 0x417982b0, 0x421d7b85},
+{'l', 0x3f864400, 0x403bf8e0},
+{'l', 0x40a59820, 0xc156d344},
+{'l', 0x413bf8d8, 0xc1e70c84},
+{'4', 0x00000066, 0x01b10000},
+{'6', 0x0000ffba, 0xfe8dfd91},
+{'l', 0x36800000, 0x4239bbf8},
+{'l', 0xc115ee1a, 0x00000000},
+{'l', 0x00000000, 0xc239bbf8},
+{'l', 0xc18ea848, 0x00000000},
+{'l', 0x35800000, 0xc0f86440},
+{'l', 0x4235d174, 0x00000000},
+{'l', 0x00000000, 0x40f86440},
+{'l', 0xc1920394, 0x00000000},
+{'@', 0x00002190, 0x00008f37},/*        ←        x-advance: 143.214844 */
+{'M', 0x42334cfa, 0xc20b055f},
+{'9', 0x0025001f, 0x006e0042},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffadffb9, 0xff84ff69},
+{'l', 0x00000000, 0xc0211e70},
+{'9', 0xffd80050, 0xff840097},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x0048ffde, 0x006effbe},
+{'l', 0x428a525a, 0x00000000},
+{'l', 0x00000000, 0x40c07290},
+{'l', 0xc28a525a, 0x00000000},
+{'@', 0x00002191, 0x0000479b},/*        ↑        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc281ca4b},
+{'9', 0x001fffdb, 0x0042ff92},
+{'l', 0x00000000, 0xc0a11e70},
+{'9', 0xffb90053, 0xff69007c},
+{'l', 0x40211e60, 0x00000000},
+{'9', 0x00500028, 0x0097007c},
+{'l', 0x00000000, 0x40a11e70},
+{'9', 0xffdeffb8, 0xffbeff92},
+{'l', 0x00000000, 0x428a5259},
+{'l', 0xc0c07290, 0x36200000},
+{'l', 0x00000000, 0xc28a5259},
+{'@', 0x00002192, 0x00008f37},/*        →        x-advance: 143.214844 */
+{'M', 0x42c4c881, 0xc22313b1},
+{'9', 0xffdbffe1, 0xff92ffbe},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x00530047, 0x007c0097},
+{'l', 0x00000000, 0x40211e70},
+{'9', 0x0028ffb0, 0x007cff69},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffb80022, 0xff920042},
+{'l', 0xc28a525a, 0x00000000},
+{'l', 0x36000000, 0xc0c07290},
+{'l', 0x428a525a, 0x00000000},
+{'@', 0x00002193, 0x0000479b},/*        ↓        x-advance: 71.605469 */
+{'M', 0x421b3ea8, 0xc135423d},
+{'9', 0xffe10025, 0xffbe006e},
+{'l', 0x00000000, 0x40a11e6e},
+{'9', 0x0047ffad, 0x0097ff84},
+{'l', 0xc0211e60, 0xb5000000},
+{'9', 0xffb0ffd8, 0xff69ff84},
+{'l', 0x00000000, 0xc0a11e6c},
+{'9', 0x00220048, 0x0042006e},
+{'l', 0x00000000, 0xc28a5259},
+{'l', 0x40c07290, 0x00000000},
+{'l', 0x00000000, 0x428a5259},
+{'@', 0x00002212, 0x000053a2},/*        −        x-advance: 83.632812 */
+{'M', 0x411292cc, 0xc22a11e7},
+{'l', 0x00000000, 0xc1235b4c},
+{'l', 0x428b292c, 0x00000000},
+{'l', 0x00000000, 0x41235b4c},
+{'l', 0xc28b292c, 0x00000000},
+{'@', 0x00002248, 0x00004e99},/*        ≈        x-advance: 78.597656 */
+{'M', 0x42679bbf, 0xc2540729},
+{'8', 0xf5b100da, 0xe6aff4d8},
+{'q', 0xc114cfac, 0xc0496600},
+{0, 0xc172cc16, 0xc0496600},
+{'8', 0x0abd00dd, 0x26b90ae1},
+{'l', 0xb5000000, 0xc1211e70},
+{'q', 0x40ff1adb, 0xc0bbf8e0},
+{0, 0x41932203, 0xc0bbf8e0},
+{'q', 0x40e67d50, 0x00000000},
+{0, 0x418377f1, 0x405259a0},
+{'8', 0x1f5c163c, 0x083a081f},
+{'9', 0x00000048, 0xffcc0088},
+{'l', 0x00000000, 0x4126b69c},
+{'8', 0x22be17df, 0x0ab10ae1},
+{'m', 0x00000000, 0x41ec157b},
+{'8', 0xf4b100da, 0xe6aff4d8},
+{'q', 0xc114cfac, 0xc0525988},
+{0, 0xc172cc16, 0xc0525988},
+{'8', 0x0bbb00db, 0x25bc0be0},
+{'l', 0x35000000, 0xc11dc324},
+{'q', 0x40f86441, 0xc0bbf8d0},
+{0, 0x41932203, 0xc0bbf8d0},
+{'q', 0x40e44074, 0x00000000},
+{0, 0x418377f1, 0x404ddfc0},
+{'8', 0x226a1c52, 0x052c0518},
+{'9', 0x00000048, 0xffcd0088},
+{'l', 0x00000000, 0x412479be},
+{'8', 0x23be19df, 0x0ab20ae0},
+{'@', 0x000025bc, 0x00008dbf},/*        â–¼        x-advance: 141.746094 */
+{'M', 0x42e1745d, 0xc2a3c6b6},
+{'l', 0xc22745d2, 0x42a78d6d},
+{'l', 0xc227d508, 0xc2a78d6d},
+{'l', 0x42a78d6d, 0x00000000},
+{'@', 0x00002660, 0x00004c15},/*        â™         x-advance: 76.082031 */
+{'M', 0x42182af7, 0xc2ac2af7},
+{'q', 0x3fdfc6c0, 0x40d6d340},
+{0, 0x40a35b50, 0x414a8478},
+{'q', 0x4056d330, 0x40bbf8e0},
+{0, 0x415ea844, 0x417982b0},
+{'8', 0x6b62464e, 0x4c142413},
+{'8', 0x59dc3500, 0x23ab23dc},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18f377e, 0xc155b4d0},
+{'q', 0x3e56d300, 0x4131e6f0},
+{0, 0x403bf8d0, 0x41876276},
+{'q', 0x40330560, 0x40b9bbfa},
+{0, 0x41076278, 0x4111745e},
+{'9', 0x001a002d, 0x001f0077},
+{'4', 0x00140004, 0x0000fe45},
+{'l', 0x3ed6d380, 0xc025982b},
+{'q', 0x410abdc2, 0x00000000},
+{0, 0x416af70c, 0xc056d33f},
+{'q', 0x40c07294, 0xc05b4cfa},
+{0, 0x411055f0, 0xc1170c88},
+{'9', 0xffd00018, 0xff7f0018},
+{'l', 0x00000000, 0xbf7aa120},
+{'q', 0xc0c96608, 0x4155b4d0},
+{0, 0xc191745c, 0x4155b4d0},
+{'8', 0xddaa00cf, 0xa9dcdddc},
+{'8', 0xa918cf00, 0xad50da19},
+{'q', 0x411b8642, 0xc1052598},
+{0, 0x41655ee0, 0xc16d33e8},
+{'q', 0x4093b138, 0xc0d01cb0},
+{0, 0x40cddfc8, 0xc173ea88},
+{'@', 0x00002663, 0x00005dfc},/*        ♣        x-advance: 93.984375 */
+{'M', 0x429901ca, 0x00000000},
+{'4', 0x0000fe29, 0xffed0004},
+{'8', 0xe26cf14b, 0xd03bf121},
+{'8', 0xb629df1a, 0xac0fd70f},
+{'l', 0xbe0f3700, 0xc0525980},
+{'8', 0x64af43e1, 0x219d21cf},
+{'8', 0xebb100d5, 0xc8c9ebdd},
+{'8', 0xb2eddded, 0x9428c000},
+{'8', 0xd45cd428, 0x1c5a0022},
+{'8', 0xc6e2dceb, 0xd7faecfa},
+{'8', 0x932dbd00, 0xd76cd72d},
+{'8', 0x2c6d0040, 0x682c2c2c},
+{'8', 0x66da3000, 0xe837ea2e},
+{'8', 0xfc22fc0c, 0x2b60003a},
+{'8', 0x6b282a28, 0x6fd54000},
+{'8', 0x2d942dd5, 0xf3c000e1},
+{'8', 0xdcc5f3df, 0xafc4eae6},
+{'q', 0x3eb30580, 0x410cfaa0},
+{0, 0x4001ca50, 0x41632204},
+{'8', 0x4c2c2a0d, 0x3042211e},
+{'q', 0x408f3788, 0x3fe8ba30},
+{0, 0x4147292c, 0x40525983},
+{'l', 0x3f0f3780, 0x401ca4b3},
+{'@', 0x00002665, 0x00005508},/*        ♥        x-advance: 85.031250 */
+{'M', 0x422aa11e, 0x3fcddfc7},
+{'q', 0xbfc4ec40, 0xc0c07293},
+{0, 0xc0982af8, 0xc1460abe},
+{'9', 0xffceffe7, 0xff4aff85},
+{'l', 0xc0c96608, 0xc1099f54},
+{'8', 0xa5c7c9d7, 0xb7f1dcf1},
+{'8', 0x9f26c500, 0xda5fda27},
+{'8', 0x1f580030, 0x633d1f28},
+{'8', 0x9d3abe13, 0xdf58df27},
+{'8', 0x265d0036, 0x5c282628},
+{'q', 0x00000000, 0x40c07290},
+{0, 0xc044ec60, 0x414a8478},
+{'q', 0xc044ec40, 0x40d49660},
+{0, 0xc12d6d34, 0x4181ca4a},
+{'q', 0xc11ca4b0, 0x4148479e},
+{0, 0xc1655ee0, 0x41a00001},
+{'q', 0xc08f3780, 0x40ed33ea},
+{0, 0xc0dfc6b8, 0x418377f1},
+{'@', 0x00002666, 0x00004913},/*        ♦        x-advance: 73.074219 */
+{'M', 0x42112cc1, 0xc2ab0c88},
+{'q', 0x40a11e70, 0x410bdc30},
+{0, 0x41644074, 0x41ab3058},
+{'q', 0x4114cfa8, 0x41496608},
+{0, 0x418ea848, 0x41b157b6},
+{'q', 0xc0982af8, 0x409ca4b8},
+{0, 0xc17745d4, 0x41994966},
+{'q', 0xc12b3054, 0x41632204},
+{0, 0xc1840728, 0x41c45d17},
+{'q', 0xc0259830, 0xc09ee190},
+{0, 0xc111745e, 0xc160e525},
+{'q', 0xc0cddfc8, 0xc11292cb},
+{0, 0xc139bbf9, 0xc17cddfb},
+{'q', 0xc0a5982a, 0xc0d6d344},
+{0, 0xc131e6f0, 0xc15d89da},
+{'q', 0x4101ca4c, 0xc1194964},
+{0, 0x4189101c, 0xc1acddfc},
+{'q', 0x41117460, 0xc1419104},
+{0, 0x4168ba30, 0xc1afaa12},
+{'@', 0x0000fb01, 0x0000479b},/*        fi        x-advance: 71.605469 */
+{'M', 0x41f2cc15, 0xc28501ca},
+{'l', 0xc14efe34, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x414efe36, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa11e0, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x0214005d},
+{'l', 0x416af70c, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd23008e},
+{'0', 0x0064a013, 0x009c60ed},
+{'@', 0x0000fb02, 0x0000479b},/*        fl        x-advance: 71.605469 */
+{'M', 0x41f2cc15, 0xc28501ca},
+{'l', 0xc14efe34, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x414efe36, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa11e0, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x0214005d},
+{'l', 0x41a11e70, 0xc2cf8d6d},
+{'l', 0x41496608, 0x00000000},
+{'l', 0xc1a1ada6, 0x42cf8d6d},
+{'l', 0xc148479c, 0x00000000},
+{'@', 0x0000fb03, 0x00006a92},/*        ffi        x-advance: 106.570312 */
+{'M', 0x4282a11e, 0xc28501ca},
+{'l', 0xc14efe34, 0x428501ca},
+{'l', 0xc1496608, 0x00000000},
+{'l', 0x414efe34, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa1200, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x0000fee9},
+{'l', 0xc14efe32, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x414efe36, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa11e0, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x02140175},
+{'l', 0x416af710, 0xc2975424},
+{'4', 0x00000064, 0x025dff8a},
+{'6', 0x0000ff9c, 0xfd23008e},
+{'0', 0x0064a013, 0x009c60ed},
+{'@', 0x0000fb04, 0x000069df},/*        ffl        x-advance: 105.871094 */
+{'M', 0x4282a11e, 0xc28501ca},
+{'l', 0xc14efe34, 0x428501ca},
+{'l', 0xc1496608, 0x00000000},
+{'l', 0x414efe34, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa1200, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x0000fee9},
+{'l', 0xc14efe32, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x414efe36, 0xc28501ca},
+{'0', 0xb70e00ab, 0xbc0c0055},
+{'8', 0xa321c20c, 0xd237e115},
+{'8', 0xf058f022, 0x06450029},
+{'4', 0x004cfff2, 0xfffdffe7},
+{'l', 0xc04ddfc0, 0xbe0f3800},
+{'8', 0x12ca00dd, 0x49e311ee},
+{'l', 0xbfaa11e0, 0x40d91010},
+{'4', 0x00000076, 0x0049fff2},
+{'6', 0x0000ff8a, 0x02140176},
+{'l', 0x41a11e70, 0xc2cf8d6d},
+{'l', 0x41496608, 0x00000000},
+{'l', 0xc1a1ada8, 0x42cf8d6d},
+{'l', 0xc1484798, 0x00000000},
+};
+#define ctx_font_Arimo_Italic_name "Arimo Italic"
+#endif
diff --git a/usermodule/uctx/fonts/Arimo-Regular.h b/usermodule/uctx/fonts/Arimo-Regular.h
new file mode 100644
index 0000000000000000000000000000000000000000..ca6501bd85fb126cfe1aa23ab0c5c871e20fe093
--- /dev/null
+++ b/usermodule/uctx/fonts/Arimo-Regular.h
@@ -0,0 +1,5241 @@
+#ifndef CTX_FONT_Arimo_Regular
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Arimo_Regular[]={
+{15, 0x0000a008, 0x0000146e},/* length:5230 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000f, 0x00000002},/* Arimo Regular*/
+{32, 0x6d697241, 0x6552206f},
+{'g', 0x72616c75, 0x00000000},
+{')', 0x0000000f, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x00000021, 0x000027ca},/*        !        x-advance: 39.789062 */
+{'M', 0x41c8d6d3, 0xc1de1910},
+{'l', 0xc125982b, 0x00000000},
+{'4', 0xfdcafff3, 0x0000006d},
+{'6', 0x0236fff3, 0x00deff9f},
+{'l', 0x00000000, 0xc160e525},
+{'l', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0x4160e525},
+{'l', 0xc159101c, 0x00000000},
+{'@', 0x00000022, 0x000032d6},/*        "        x-advance: 50.835938 */
+{'M', 0x422cddfc, 0xc2871ada},
+{'l', 0xc11ee190, 0x00000000},
+{'4', 0xff09fff5, 0x00000066},
+{'6', 0x00f7fff4, 0x0000ff32},
+{'l', 0xc11dc323, 0x00000000},
+{'l', 0xbfbbf8d4, 0xc1f7d508},
+{'l', 0x414ddfc6, 0x00000000},
+{'l', 0xbfc4ec40, 0x41f7d508},
+{'@', 0x00000023, 0x00004fa6},/*        #        x-advance: 79.648438 */
+{'M', 0x427aa11e, 0xc2778d6d},
+{'l', 0xc0ae8ba0, 0x41ce6efe},
+{'l', 0x4191745c, 0x00000000},
+{'l', 0x00000000, 0x40f1ada8},
+{'l', 0xc19e5258, 0x00000000},
+{'l', 0xc0c4ec50, 0x41e44072},
+{'l', 0xc0f62760, 0x00000000},
+{'l', 0x40c07290, 0xc1e44072},
+{'l', 0xc1cb13b1, 0x00000000},
+{'l', 0xc0bbf8d8, 0x41e44072},
+{'l', 0xc0f62762, 0x00000000},
+{'l', 0x40bbf8d6, 0xc1e44072},
+{'l', 0xc160e525, 0x00000000},
+{'l', 0xb3800000, 0xc0f1ada8},
+{'l', 0x417bbf8d, 0x00000000},
+{'l', 0x40ae8ba4, 0xc1ce6efe},
+{'l', 0xc18cfaa1, 0x00000000},
+{'l', 0xb5000000, 0xc0f1ada8},
+{'l', 0x41994966, 0x00000000},
+{'l', 0x40c7292c, 0xc1e44074},
+{'l', 0x40f62764, 0x00000000},
+{'l', 0xc0c4ec50, 0x41e44074},
+{'l', 0x41cb13b0, 0x00000000},
+{'l', 0x40c4ec50, 0xc1e44074},
+{'l', 0x40f62760, 0x00000000},
+{'l', 0xc0c4ec50, 0x41e44074},
+{'4', 0x00000076, 0x003c0000},
+{'6', 0x0000ff7e, 0x0000fef9},
+{'l', 0xc0b30560, 0x41ce6efe},
+{'l', 0x41ca847a, 0x00000000},
+{'l', 0x40ae8ba0, 0xc1ce6efe},
+{'l', 0xc1c9660a, 0x00000000},
+{'@', 0x00000024, 0x00004fa6},/*        $        x-advance: 79.648438 */
+{'M', 0x4210e525, 0xbfb3055f},
+{'9', 0xfff6ff12, 0xff38feeb},
+{'l', 0x413e35b6, 0xc0259828},
+{'q', 0x3fdfc6b8, 0x41052598},
+{0, 0x40e8ba30, 0x4148479a},
+{'9', 0x0021002c, 0x0026007c},
+{'l', 0x00000000, 0xc20abdc3},
+{'q', 0xc1460abc, 0xc044ec50},
+{0, 0xc189101c, 0xc0b0c880},
+{'8', 0xd4c4eddb, 0xcadfe7ea},
+{'q', 0xbfa11e6c, 0xc068ba20},
+{0, 0xbfa11e6c, 0xc10bdc30},
+{'q', 0x00000000, 0xc12d6d38},
+{0, 0x40faa11d, 0xc1876278},
+{'9', 0xffcf003f, 0xffca00b3},
+{'4', 0xffb70000, 0x00000045},
+{'l', 0x00000000, 0x411292c8},
+{'q', 0x41513b14, 0x3f211e80},
+{0, 0x41a1ada8, 0x40be35c0},
+{'9', 0x00290039, 0x00830050},
+{'l', 0xc142af74, 0x4013b140},
+{'8', 0xafd3ccf5, 0xdd9de3de},
+{'l', 0x00000000, 0x41f8f37a},
+{'q', 0x4148479c, 0x403bf8d0},
+{0, 0x418e1910, 0x40ac4ec0},
+{'8', 0x2c43132a, 0x3a251818},
+{'q', 0x3fcddfc0, 0x40864408},
+{0, 0x3fcddfc0, 0x411dc324},
+{'q', 0x00000000, 0x41389d88},
+{0, 0xc1076278, 0x41944072},
+{'9', 0x0037ffbd, 0x003eff41},
+{'4', 0x005a0000, 0x0000ffbb},
+{'6', 0xffa60000, 0xff2f00e8},
+{'8', 0xc5f2dc00, 0xdad7e9f2},
+{'9', 0xfff1ffe5, 0xffdcff96},
+{'l', 0x00000000, 0x4202e8ba},
+{'q', 0x411dc324, 0xbf211e70},
+{0, 0x4171ada8, 0xc095ee18},
+{'9', 0xffe0002a, 0xffa7002a},
+{'m', 0xc23d1745, 0xc236efe4},
+{'8', 0x370d2100, 0x2629160d},
+{'9', 0x000f001b, 0x001f005a},
+{'l', 0x00000000, 0xc1eb8642},
+{'q', 0xc191745c, 0x3f7aa100},
+{0, 0xc191745c, 0x415b4cf8},
+{'@', 0x00000025, 0x00007f57},/*        %        x-advance: 127.339844 */
+{'M', 0x42f479bc, 0xc1f2cc15},
+{'q', 0x00000000, 0x41708f37},
+{0, 0xc0b54240, 0x41b92cc1},
+{'q', 0xc0b54240, 0x4100abdc},
+{0, 0xc185b4d0, 0x4100abdc},
+{'q', 0xc12e8ba0, 0xb4000000},
+{0, 0xc1840728, 0xc0faa11e},
+{'q', 0xc0b0c880, 0xc0fcddfc},
+{0, 0xc0b0c880, 0xc1bada68},
+{'q', 0x00000000, 0xc17f1ad8},
+{0, 0x40aa11e0, 0xc1bda67c},
+{'q', 0x40ac4ed0, 0xc0faa120},
+{0, 0x4187f1b0, 0xc0faa120},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41864404, 0x4100abdc},
+{'9', 0x003f002a, 0x00bb002a},
+{'m', 0xc2bd5ee2, 0xc28a0abe},
+{'q', 0x4131e6f4, 0x00000000},
+{0, 0x4184072a, 0x40faa120},
+{'q', 0x40ac4ec8, 0x40faa120},
+{0, 0x40ac4ec8, 0x41bada68},
+{'q', 0x00000000, 0x4172cc14},
+{0, 0xc0b30560, 0x41bada68},
+{'q', 0xc0b0c880, 0x4102e8b8},
+{0, 0xc1849661, 0x4102e8b8},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1852598, 0xc101ca4c},
+{'q', 0xc0b0c87f, 0xc101ca4c},
+{0, 0xc0b0c87f, 0xc1bb699e},
+{'q', 0x00000000, 0xc17982b0},
+{0, 0x40ac4ec5, 0xc1bada68},
+{'9', 0xffc2002b, 0xffc20088},
+{'m', 0x4114cfac, 0x42c6bdc3},
+{'l', 0xc12d6d32, 0x00000000},
+{'4', 0xfcec0203, 0x00000057},
+{'6', 0x0314fdfc, 0xfddf0012},
+{'q', 0x00000000, 0xc144ec50},
+{0, 0xc02a11f0, 0xc18fc6b8},
+{'8', 0xd3b9d3eb, 0x2cb600cc},
+{'q', 0xc0330560, 0x40b0c880},
+{0, 0xc0330560, 0x419055f0},
+{'q', 0x00000000, 0x41419100},
+{0, 0x40330560, 0x418f377e},
+{'8', 0x2d492d16, 0xd2470030},
+{'9', 0xffd20016, 0xff720016},
+{'m', 0x4291745c, 0x42175424},
+{'q', 0x00000000, 0xc14847a0},
+{0, 0xc02e8ba0, 0xc190e526},
+{'8', 0xd3b8d3eb, 0x2cb700ce},
+{'q', 0xc0330560, 0x40b0c880},
+{0, 0xc0330560, 0x41920395},
+{'q', 0x00000000, 0x413f5424},
+{0, 0x402e8ba0, 0x418e1910},
+{'8', 0x2d492d16, 0xd2480031},
+{'q', 0x40377f00, 0xc0bbf8d4},
+{0, 0x40377f00, 0xc18d89d8},
+{'@', 0x00000026, 0x00005f86},/*        &        x-advance: 95.523438 */
+{'M', 0x42a6da68, 0x3f56d33e},
+{'q', 0xc1460ac0, 0x00000000},
+{0, 0xc1a6b69a, 0xc10e1910},
+{'q', 0xc0a7d510, 0x4091745d},
+{0, 0xc13f5424, 0x40dfc6b6},
+{'q', 0xc0d6d340, 0x401ca4b4},
+{0, 0xc160e528, 0x401ca4b4},
+{'q', 0xc1708f36, 0xb4000000},
+{0, 0xc1ba4b30, 0xc0e67d51},
+{'q', 0xc1040728, 0xc0e8ba2f},
+{0, 0xc1040728, 0xc1a11e6f},
+{'q', 0xb5000000, 0xc19b8643},
+{0, 0x41bfe35b, 0xc1efffff},
+{'8', 0xaee1deee, 0xaaf3d1f3},
+{'q', 0x00000000, 0xc127d508},
+{0, 0x40cba2e8, 0xc181ca4c},
+{'q', 0x40cddfc8, 0xc0b9bbf0},
+{0, 0x4191745c, 0xc0b9bbf0},
+{'q', 0x4128f378, 0x00000000},
+{0, 0x4187f1ae, 0x40aa11e0},
+{'q', 0x40d01ca0, 0x40aa11e0},
+{0, 0x40d01ca0, 0x4168ba30},
+{'q', 0x00000000, 0x41040728},
+{0, 0xc0cddfc0, 0x416af708},
+{'q', 0xc0cba2e8, 0x40cddfc8},
+{0, 0xc1b157b8, 0x414ba2ec},
+{'q', 0x40f86440, 0x41655ee0},
+{0, 0x41a3ea84, 0x41e67d50},
+{'9', 0xffa4003f, 0xff1b005f},
+{'l', 0x41223ce0, 0x40407290},
+{'q', 0xc08cfaa0, 0x418b4cfb},
+{0, 0xc16d33e8, 0x42033056},
+{'q', 0x40d6d340, 0x40db4cfc},
+{0, 0x4168ba30, 0x40db4cfc},
+{'9', 0x00000027, 0xfff80041},
+{'l', 0x00000000, 0x41170c88},
+{'9', 0x000cffe1, 0x000cffb2},
+{'m', 0xc1dea848, 0xc1801ca4},
+{'q', 0xc15d89d8, 0xc182e8bb},
+{0, 0xc1b27628, 0xc1ffaa12},
+{'q', 0xc1840729, 0x40dfc6b8},
+{0, 0xc1840729, 0x41a86440},
+{'q', 0x00000000, 0x41076276},
+{0, 0x40ac4ec4, 0x4156d33e},
+{'q', 0x40ae8ba4, 0x409ca4b4},
+{0, 0x416d33ec, 0x409ca4b4},
+{'8', 0xf14f0027, 0xd445f127},
+{'m', 0x40a59828, 0xc2801ca4},
+{'8', 0xbfe5d800, 0xe7b4e7e5},
+{'8', 0x1daf00cb, 0x4fe51ce5},
+{'q', 0x00000000, 0x40ff1ad0},
+{0, 0x40917460, 0x418880e4},
+{'8', 0xcd6be349, 0xd234eb22},
+{'q', 0x400f3780, 0xc0496600},
+{0, 0x400f3780, 0xc0dd89d0},
+{'@', 0x00000027, 0x00001b57},/*        '        x-advance: 27.339844 */
+{'M', 0x4194cfaa, 0xc2871ada},
+{'l', 0xc11dc322, 0x00000000},
+{'l', 0xbfbbf8d8, 0xc1f7d508},
+{'l', 0x414ddfc7, 0x00000000},
+{'l', 0xbfc4ec50, 0x41f7d508},
+{'@', 0x00000028, 0x00002fb1},/*        (        x-advance: 47.691406 */
+{'M', 0x410e1910, 0xc214cfaa},
+{'q', 0x00000000, 0xc1a1ada6},
+{0, 0x40c9660a, 0xc2112cc2},
+{'9', 0xff800032, 0xff0e009c},
+{'l', 0x4142af70, 0x00000000},
+{'q', 0xc1513b14, 0x4168ba30},
+{0, 0xc199d89d, 0x41f745d0},
+{'q', 0xc0c2af70, 0x4182e8bc},
+{0, 0xc0c2af70, 0x420f3780},
+{'q', 0x00000000, 0x419af70b},
+{0, 0x40c07290, 0x420ea847},
+{'9', 0x00820030, 0x00f8009a},
+{'l', 0xc142af70, 0x00000000},
+{'q', 0xc15377f2, 0xc1644072},
+{0, 0xc19c157c, 0xc1f2cc15},
+{'q', 0xc0c96608, 0xc1813b14},
+{0, 0xc0c96608, 0xc210e526},
+{'l', 0x00000000, 0xbe8f3700},
+{'@', 0x00000029, 0x00002fb1},/*        )        x-advance: 47.691406 */
+{'M', 0x421b3ea8, 0xc213b13b},
+{'q', 0x00000000, 0x41a1ada6},
+{0, 0xc0cba2e8, 0x42112cc1},
+{'9', 0x0080ffce, 0x00f2ff65},
+{'l', 0xc142af70, 0x00000000},
+{'q', 0x41525982, 0xc16af70c},
+{0, 0x4199d89d, 0xc1f745d1},
+{'q', 0x40c2af74, 0xc1825983},
+{0, 0x40c2af74, 0xc20f377e},
+{'q', 0x00000000, 0xc19c157c},
+{0, 0xc0c4ec50, 0xc20f3780},
+{'9', 0xff7effd0, 0xff09ff67},
+{'l', 0x4142af71, 0x00000000},
+{'q', 0x415377f1, 0x41644070},
+{0, 0x419c157c, 0x41f35b4c},
+{'q', 0x40c96608, 0x4180abdc},
+{0, 0x40c96608, 0x42109d8a},
+{'l', 0x00000000, 0x3e8f3780},
+{'@', 0x0000002a, 0x000037bb},/*        *        x-advance: 55.730469 */
+{'M', 0x41ff1ada, 0xc29bcde0},
+{'l', 0x4193b13c, 0xc0e67d50},
+{'l', 0x40496600, 0x4113b140},
+{'l', 0xc19dc322, 0x40a35b40},
+{'l', 0x414efe38, 0x418bdc34},
+{'l', 0xc1052598, 0x40a11e70},
+{'l', 0xc127d50a, 0xc19055f0},
+{'l', 0xc12e8ba2, 0x418f3780},
+{'l', 0xc1052599, 0xc0a11e70},
+{'l', 0x415377f1, 0xc18abdc4},
+{'l', 0xc19ca4b3, 0xc0a35b40},
+{'l', 0x4049660e, 0xc115ee18},
+{'l', 0x41955ee1, 0x40ef70c0},
+{'l', 0xbf56d340, 0xc1a62760},
+{'l', 0x41182af8, 0x00000000},
+{'l', 0xbf68ba40, 0x41a508f0},
+{'@', 0x0000002b, 0x000053a2},/*        +        x-advance: 83.632812 */
+{'M', 0x423bb13b, 0xc22a11e7},
+{'l', 0x00000000, 0x41ef70c8},
+{'l', 0xc12479bc, 0x35800000},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0xc1ed33ea, 0x00000000},
+{'l', 0xb5800000, 0xc1235b4c},
+{'l', 0x41ed33ea, 0x00000000},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0x412479bc, 0x00000000},
+{'l', 0x00000000, 0x41ef70c8},
+{'l', 0x41ed33ea, 0x00000000},
+{'l', 0x00000000, 0x41235b4c},
+{'l', 0xc1ed33ea, 0x00000000},
+{'@', 0x0000002c, 0x000027ca},/*        ,        x-advance: 39.789062 */
+{'M', 0x41d76276, 0xc17508f3},
+{'l', 0x00000000, 0x413bf8d6},
+{'8', 0x63f63b00, 0x4cdf27f6},
+{'l', 0xc1099f53, 0x00000000},
+{'9', 0xffb40034, 0xff6e0034},
+{'l', 0xc0c4ec4e, 0x00000000},
+{'l', 0x00000000, 0xc17508f3},
+{'l', 0x415a2e8b, 0x00000000},
+{'@', 0x0000002d, 0x00002fb1},/*        -        x-advance: 47.691406 */
+{'M', 0x40cba2e9, 0xc201ca4b},
+{'l', 0x00000000, 0xc1330560},
+{'l', 0x420bdc32, 0x00000000},
+{'l', 0x00000000, 0x41330560},
+{'l', 0xc20bdc32, 0x00000000},
+{'@', 0x0000002e, 0x000027ca},/*        .        x-advance: 39.789062 */
+{'M', 0x41513b14, 0x00000000},
+{'l', 0x00000000, 0xc17508f3},
+{'l', 0x415a2e8c, 0x00000000},
+{'l', 0x00000000, 0x417508f3},
+{'l', 0xc15a2e8c, 0x00000000},
+{'@', 0x0000002f, 0x000027ca},/*        /        x-advance: 39.789062 */
+{'M', 0x00000000, 0x3fb3055f},
+{'l', 0x41e5ee19, 0xc2d25982},
+{'l', 0x4130c882, 0x00000000},
+{'l', 0xc1e3b13c, 0x42d25982},
+{'l', 0xc135423c, 0x36780000},
+{'@', 0x00000030, 0x00004fa6},/*        0        x-advance: 79.648438 */
+{'M', 0x42941ca5, 0xc24533ea},
+{'q', 0x00000000, 0x41c57b85},
+{0, 0xc10bdc38, 0x4216c4ec},
+{'q', 0xc10abdc0, 0x41501ca4},
+{0, 0xc1cd508e, 0x41501ca4},
+{'q', 0xc187f1ad, 0xb4000000},
+{0, 0xc1cc3220, 0xc14efe36},
+{'q', 0xc10880e4, 0xc14efe36},
+{0, 0xc10880e4, 0xc2170c88},
+{'q', 0xb5000000, 0xc1cb13b0},
+{0, 0x41040728, 0xc2182af8},
+{'q', 0x41052598, 0xc14a8478},
+{0, 0x41d1ca4c, 0xc14a8478},
+{'q', 0x418b4cfa, 0x00000000},
+{0, 0x41cd5090, 0x414cc158},
+{'9', 0x00660042, 0x012f0042},
+{'m', 0xc14cc15c, 0x00000000},
+{'q', 0x00000000, 0xc1aaa120},
+{0, 0xc09ee190, 0xc1f745d4},
+{'q', 0xc09ca4b0, 0xc1194960},
+{0, 0xc181ca4a, 0xc1194960},
+{'q', 0xc139bbfa, 0x00000000},
+{0, 0xc185b4d0, 0x41170c88},
+{'q', 0xc0a11e70, 0x41170c88},
+{0, 0xc0a11e70, 0x41f86440},
+{'q', 0x00000000, 0x41a7d508},
+{0, 0x40a35b4c, 0x41f5982a},
+{'q', 0x40a5982c, 0x411b8644},
+{0, 0x4182e8bb, 0x411b8644},
+{'q', 0x4131e6f0, 0x00000000},
+{0, 0x41825982, 0xc11ee190},
+{'q', 0x40a59828, 0xc11ee192},
+{0, 0x40a59828, 0xc1f3ea84},
+{'@', 0x00000031, 0x00004fa6},/*        1        x-advance: 79.648438 */
+{'M', 0x412e8ba3, 0x00000000},
+{'l', 0x00000000, 0xc12b3056},
+{'l', 0x41c8d6d2, 0x00000000},
+{'l', 0x00000000, 0xc2979bbf},
+{'l', 0xc1b1e6f0, 0x417dfc68},
+{'l', 0x35800000, 0xc13e35b0},
+{'l', 0x41ba4b30, 0xc1801ca4},
+{'l', 0x4139bbfc, 0x00000000},
+{'l', 0x00000000, 0x42afaa11},
+{'l', 0x41bfe35a, 0x36000000},
+{'l', 0x00000000, 0x412b3056},
+{'l', 0xc276fe35, 0x00000000},
+{'@', 0x00000032, 0x00004fa6},/*        2        x-advance: 79.648438 */
+{'M', 0x40e67d50, 0x00000000},
+{'l', 0x00000000, 0xc10e1910},
+{'q', 0x40644074, 0xc102e8ba},
+{0, 0x410abdc3, 0xc1667d50},
+{'8', 0xa656ce29, 0xb559d82d},
+{'8', 0xbb50de2c, 0xb839de23},
+{'8', 0xaa16da16, 0x9cdac000},
+{'8', 0xdd97ddda, 0x239600c0},
+{'9', 0x0022ffd7, 0x0061ffd0},
+{'l', 0xc14ddfc6, 0xbf982b00},
+{'q', 0x3fb30560, 0xc13d1748},
+{0, 0x41200000, 0xc1967d50},
+{'q', 0x410abdc4, 0xc0dfc6c0},
+{0, 0x41b1e6f0, 0xc0dfc6c0},
+{'q', 0x416e5258, 0x00000000},
+{0, 0x41b6efe2, 0x40e20390},
+{'q', 0x4100abdc, 0x40dfc6c0},
+{0, 0x4100abdc, 0x419f70cc},
+{'8', 0x5beb2d00, 0x5ac22dec},
+{'q', 0xc0a59828, 0x40b54240},
+{0, 0xc19e525a, 0x418c6b6a},
+{'8', 0x5f9a34c0, 0x51ca29da},
+{'l', 0x424d982a, 0x00000000},
+{'l', 0x00000000, 0x412b3056},
+{'l', 0xc2827d50, 0x00000000},
+{'@', 0x00000033, 0x00004fa6},/*        3        x-advance: 79.648438 */
+{'M', 0x4292b69a, 0xc1d99f54},
+{'q', 0x00000000, 0x415a2e8c},
+{0, 0xc10abdc8, 0x41a8f378},
+{'q', 0xc10abdc0, 0x40ef70c8},
+{0, 0xc1c60abc, 0x40ef70c8},
+{'q', 0xc16f70c8, 0xb4000000},
+{0, 0xc1bf5423, 0xc0d6d33f},
+{'9', 0xffcaffb9, 0xff60ffac},
+{'l', 0x41501ca4, 0xbf982af0},
+{'q', 0x40211e70, 0x418bdc32},
+{0, 0x41abbf8d, 0x418bdc32},
+{'q', 0x41182af8, 0x00000000},
+{0, 0x416e5258, 0xc095ee18},
+{'8', 0x912bdb2b, 0x9ccfc000},
+{'9', 0xffdcffcf, 0xffdcff72},
+{'4', 0x0000ffc7, 0xffa90000},
+{'l', 0x40db4cf8, 0x00000000},
+{'q', 0x4125982c, 0x00000000},
+{0, 0x41801ca6, 0xc08f3780},
+{'8', 0x9c2ddc2d, 0x9ddbc100},
+{'8', 0xdc92dcdc, 0x229500be},
+{'9', 0x0022ffd8, 0x0060ffd1},
+{'l', 0xc14a8479, 0xbf7aa100},
+{'q', 0x3fb30560, 0xc1419100},
+{0, 0x41200001, 0xc1970c88},
+{'q', 0x410abdc2, 0xc0d91020},
+{0, 0x41b1e6ef, 0xc0d91020},
+{'q', 0x416d33ec, 0x00000000},
+{0, 0x41b80e52, 0x40dd89e0},
+{'q', 0x4104072c, 0x40db4cf0},
+{0, 0x4104072c, 0x41994964},
+{'q', 0x00000000, 0x41170c88},
+{0, 0xc0aa11f0, 0x41762764},
+{'9', 0x002effd7, 0x003fff86},
+{'l', 0x00000000, 0x3e8f3780},
+{'q', 0x4130c880, 0x3f982b00},
+{0, 0x41899f54, 0x40ed33e8},
+{'q', 0x40c4ec50, 0x40c72930},
+{0, 0x40c4ec50, 0x417aa120},
+{'@', 0x00000034, 0x00004fa6},/*        4        x-advance: 79.648438 */
+{'M', 0x42766efe, 0xc1b27627},
+{'l', 0x00000000, 0x41b27627},
+{'l', 0xc13e35b4, 0x00000000},
+{'l', 0x00000000, 0xc1b27627},
+{'l', 0xc239bbf9, 0x00000000},
+{'l', 0x35400000, 0xc11ca4b2},
+{'l', 0x42346b6a, 0xc284ddfc},
+{'l', 0x415377f0, 0x00000000},
+{'l', 0x00000000, 0x42849660},
+{'4', 0x0000006e, 0x004f0000},
+{'6', 0x0000ff92, 0xffb1ffa1},
+{'l', 0x00000000, 0xc2506440},
+{'8', 0x28eb18f4, 0x1af10ff8},
+{'l', 0xc1b4b306, 0x4205b4cf},
+{'q', 0xbffaa120, 0x40377f20},
+{0, 0xc0f1ada6, 0x4125982c},
+{'l', 0x420b4cfb, 0x00000000},
+{'@', 0x00000035, 0x00004fa6},/*        5        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2006440},
+{'q', 0x00000000, 0x417982ae},
+{0, 0xc114cfa8, 0x41c45d16},
+{'q', 0xc113b13c, 0x410f3780},
+{0, 0xc1cd508e, 0x410f3780},
+{'q', 0xc15c6b6a, 0xb4000000},
+{0, 0xc1b1e6f0, 0xc0c07293},
+{'9', 0xffd0ffbd, 0xff75ffab},
+{'l', 0x414ba2e8, 0xbfbbf8e0},
+{'q', 0x407f1ad8, 0x4169d89e},
+{0, 0x41a3ea85, 0x4169d89e},
+{'q', 0x41223cdc, 0x00000000},
+{0, 0x417dfc68, 0xc0c2af70},
+{'q', 0x40b77f20, 0xc0c4ec50},
+{0, 0x40b77f20, 0xc186d33f},
+{'q', 0x00000000, 0xc114cfaa},
+{0, 0xc0b9bbf8, 0xc1708f36},
+{'q', 0xc0b77f20, 0xc0b77f20},
+{0, 0xc1786440, 0xc0b77f20},
+{'8', 0x0cb400d8, 0x2bba0cdd},
+{'l', 0xc144ec4e, 0x00000000},
+{'l', 0x40525984, 0xc2540728},
+{'l', 0x42600e53, 0x00000000},
+{'4', 0x00550000, 0x0000fe9c},
+{'l', 0xbff1adb0, 0x41fa11e8},
+{'q', 0x4102e8ba, 0xc0c96608},
+{0, 0x41a2cc15, 0xc0c96608},
+{'q', 0x4168ba30, 0x00000000},
+{0, 0x41b92cc2, 0x410880e4},
+{'q', 0x410abdc0, 0x410880e4},
+{0, 0x410abdc0, 0x41b1e6f0},
+{'@', 0x00000036, 0x00004fa6},/*        6        x-advance: 79.648438 */
+{'M', 0x4292b69a, 0xc200f378},
+{'q', 0x00000000, 0x417982b0},
+{0, 0xc1076278, 0x41c4ec4f},
+{'q', 0xc1076274, 0x411055ee},
+{0, 0xc1bada68, 0x411055ee},
+{'q', 0xc1852597, 0xb4000000},
+{0, 0xc1cba2e8, 0xc1460abe},
+{'q', 0xc10cfaa1, 0xc1460abe},
+{0, 0xc10cfaa1, 0xc2100e52},
+{'q', 0x00000000, 0xc1ccc158},
+{0, 0x411292cd, 0xc21d33ec},
+{'q', 0x411292cc, 0xc15b4cf8},
+{0, 0x41d0abdc, 0xc15b4cf8},
+{'9', 0x000000b2, 0x00a000e0},
+{'l', 0xc1407294, 0x400abdc0},
+{'q', 0xc06d33f0, 0xc1407290},
+{0, 0xc181ca4c, 0xc1407290},
+{'q', 0xc12c4ec4, 0x00000000},
+{0, 0xc185b4cf, 0x41211e70},
+{'q', 0xc0bbf8d8, 0x41200000},
+{0, 0xc0bbf8d8, 0x41e82af6},
+{'q', 0x405b4d00, 0xc0cba2e8},
+{0, 0x411a67d6, 0xc11a67d8},
+{'q', 0x40c72930, 0xc056d330},
+{0, 0x41644074, 0xc056d330},
+{'q', 0x415a2e88, 0x00000000},
+{0, 0x41acddfa, 0x410880e4},
+{'9', 0x00440040, 0x00b70040},
+{'m', 0xc14cc158, 0x3f0f3780},
+{'q', 0x00000000, 0xc12b3054},
+{0, 0xc0a7d508, 0xc1840728},
+{'q', 0xc0a7d508, 0xc0b9bbf8},
+{0, 0xc169d8a0, 0xc0b9bbf8},
+{'q', 0xc10cfaa0, 0x00000000},
+{0, 0xc1644070, 0x40a59828},
+{'q', 0xc0ac4ec8, 0x40a35b48},
+{0, 0xc0ac4ec8, 0x41620394},
+{'q', 0x00000000, 0x413660ac},
+{0, 0x40b30560, 0x41955ee1},
+{'q', 0x40b54240, 0x40e8ba30},
+{0, 0x41679bc0, 0x40e8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41644070, 0xc0c2af70},
+{'q', 0x40a59830, 0xc0c4ec50},
+{0, 0x40a59830, 0xc186d33f},
+{'@', 0x00000037, 0x00004fa6},/*        7        x-advance: 79.648438 */
+{'M', 0x4290e525, 0xc2b0a4b3},
+{'q', 0xc171ada4, 0x41b89d8c},
+{0, 0xc1aaa11c, 0x42109d8a},
+{'q', 0xc0c72930, 0x41513b14},
+{0, 0xc115ee18, 0x41ce6efe},
+{'9', 0x0065ffe8, 0x00d2ffe8},
+{'l', 0xc1525984, 0x00000000},
+{'q', 0x00000000, 0xc1970c88},
+{0, 0x40ff1ad8, 0xc21ee191},
+{'9', 0xff590040, 0xfe8000d6},
+{'l', 0xc253bf8e, 0x00000000},
+{'l', 0x36000000, 0xc12b3050},
+{'l', 0x428235b4, 0x00000000},
+{'l', 0x00000000, 0x41235b48},
+{'@', 0x00000038, 0x00004fa6},/*        8        x-advance: 79.648438 */
+{'M', 0x4292da68, 0xc1dbdc32},
+{'q', 0x00000000, 0x415a2e8c},
+{0, 0xc10abdc8, 0x41aa11e7},
+{'q', 0xc10abdc0, 0x40f3ea84},
+{0, 0xc1c7292c, 0x40f3ea84},
+{'q', 0xc17cddfa, 0xb4000000},
+{0, 0xc1c60abd, 0xc0ef70c9},
+{'q', 0xc10e1910, 0xc0ef70c7},
+{0, 0xc10e1910, 0xc1aa11e7},
+{'q', 0x35000000, 0xc11a67d6},
+{0, 0x40b0c882, 0xc181ca4b},
+{'9', 0xffcc002c, 0xffc10071},
+{'l', 0x00000000, 0xbe8f3780},
+{'q', 0xc100abdc, 0xbff1ada0},
+{0, 0xc14ba2e9, 0xc102e8bc},
+{'q', 0xc093b13c, 0xc0c96610},
+{0, 0xc093b13c, 0xc16c1578},
+{'q', 0x00000000, 0xc13423d0},
+{0, 0x41064407, 0xc1920394},
+{'q', 0x41076276, 0xc0dfc6c0},
+{0, 0x41b5423c, 0xc0dfc6c0},
+{'q', 0x4168ba30, 0x00000000},
+{0, 0x41b77f1c, 0x40db4d00},
+{'q', 0x41076274, 0x40db4cf0},
+{0, 0x41076274, 0x41944070},
+{'q', 0x00000000, 0x41076278},
+{0, 0xc095ee10, 0x416c1580},
+{'9', 0x0032ffdb, 0x003fff9a},
+{'l', 0x00000000, 0x3e8f3780},
+{'q', 0x41170c88, 0x3fc4ec60},
+{0, 0x416af70c, 0x4100abdc},
+{'9', 0x00330029, 0x00810029},
+{'m', 0xc1513b14, 0xbf982af0},
+{'q', 0x00000000, 0xc11292ce},
+{0, 0xc0ae8ba8, 0xc15c6b6a},
+{'q', 0xc0ae8ba0, 0xc095ee18},
+{0, 0xc17508f4, 0xc095ee18},
+{'q', 0xc1194964, 0x00000000},
+{0, 0xc16f70c6, 0x40a11e70},
+{'q', 0xc0ac4ec8, 0x409ee190},
+{0, 0xc0ac4ec8, 0x415b4cfa},
+{'q', 0x00000000, 0x41a2cc15},
+{0, 0x41a62763, 0x41a2cc15},
+{'q', 0x412479bc, 0x00000000},
+{0, 0x417508f4, 0xc09ca4b4},
+{'9', 0xffd90028, 0xff830028},
+{'m', 0xc01ca4c0, 0xc234faa2},
+{'q', 0x00000000, 0xc185b4d0},
+{0, 0xc19292cc, 0xc185b4d0},
+{'8', 0x219400b9, 0x64dc21dc},
+{'8', 0x67264300, 0x236c2326},
+{'8', 0xe06b0047, 0x9625df25},
+{'@', 0x00000039, 0x00004fa6},/*        9        x-advance: 79.648438 */
+{'M', 0x4291bbf9, 0xc24d08f3},
+{'q', 0x00000000, 0x41cb13b0},
+{0, 0xc114cfac, 0x421c157b},
+{'q', 0xc113b13c, 0x415a2e8c},
+{0, 0xc1d2e8ba, 0x415a2e8c},
+{'q', 0xc1389d8a, 0xb4000000},
+{0, 0xc1944073, 0xc09a67d5},
+{'9', 0xffd9ffc9, 0xff83ffb1},
+{'l', 0x41407292, 0xbff1ada0},
+{'q', 0x4071ada8, 0x4144ec4e},
+{0, 0x41852598, 0x4144ec4e},
+{'q', 0x412d6d34, 0x00000000},
+{0, 0x41864408, 0xc1211e6e},
+{'q', 0x40be35b0, 0xc1211e70},
+{0, 0x40c72928, 0xc1e5ee1a},
+{'q', 0xc0330560, 0x40c96610},
+{0, 0xc1194964, 0x41223ce0},
+{'q', 0xc0d91020, 0x4071ada0},
+{0, 0xc16e525c, 0x4071ada0},
+{'q', 0xc154965e, 0x00000000},
+{0, 0xc1aa11e6, 0xc111745c},
+{'q', 0xc0ff1ada, 0xc111745c},
+{0, 0xc0ff1ada, 0xc1c101cc},
+{'q', 0x00000000, 0xc17745d0},
+{0, 0x410abdc3, 0xc1c22038},
+{'q', 0x410abdc4, 0xc10e1910},
+{0, 0x41c101cb, 0xc10e1910},
+{'q', 0x418377f0, 0x00000000},
+{0, 0x41c7292c, 0x4142af70},
+{'9', 0x00610043, 0x01240043},
+{'m', 0xc15b4cfc, 0xc142af70},
+{'q', 0x00000000, 0xc13e35b4},
+{0, 0xc0ae8ba8, 0xc198ba2e},
+{'q', 0xc0ae8ba0, 0xc0e8ba30},
+{0, 0xc169d89c, 0xc0e8ba30},
+{'q', 0xc111745c, 0x00000000},
+{0, 0xc1655ee0, 0x40c72930},
+{'q', 0xc0a7d50c, 0x40c4ec40},
+{0, 0xc0a7d50c, 0x4185b4cc},
+{'q', 0x00000000, 0x412c4ec8},
+{0, 0x40a7d50c, 0x418880e6},
+{'q', 0x40a7d508, 0x40c72930},
+{0, 0x41632204, 0x40c72930},
+{'8', 0xed51002b, 0xc83aec25},
+{'q', 0x402e8ba0, 0xc0917458},
+{0, 0x402e8ba0, 0xc1259828},
+{'@', 0x0000003a, 0x000027ca},/*        :        x-advance: 39.789062 */
+{'M', 0x41513b14, 0x00000000},
+{'l', 0x00000000, 0xc1679bbf},
+{'4', 0x0000006d, 0x00730000},
+{'6', 0x0000ff93, 0xfe170000},
+{'l', 0x00000000, 0xc1679bc0},
+{'l', 0x415a2e8c, 0x00000000},
+{'l', 0x00000000, 0x41679bc0},
+{'l', 0xc15a2e8c, 0x00000000},
+{'@', 0x0000003b, 0x000027ca},/*        ;        x-advance: 39.789062 */
+{'M', 0x41d76276, 0xc1679bbf},
+{'l', 0x00000000, 0x412e8ba2},
+{'8', 0x63f63b00, 0x4cdf27f6},
+{'l', 0xc1099f53, 0x00000000},
+{'9', 0xffb40034, 0xff6e0034},
+{'4', 0x0000ffcf, 0xff8d0000},
+{'6', 0x0000006d, 0xfe8bff93},
+{'l', 0x00000000, 0xc1679bc0},
+{'l', 0x415a2e8b, 0x00000000},
+{'l', 0x00000000, 0x41679bc0},
+{'l', 0xc15a2e8b, 0x00000000},
+{'@', 0x0000003c, 0x000053a2},/*        <        x-advance: 83.632812 */
+{'M', 0x40e20394, 0xc21fb864},
+{'l', 0x00000000, 0xc1655ee0},
+{'l', 0x428b292d, 0xc1e9d8a0},
+{'l', 0x00000000, 0x412c4ec8},
+{'l', 0xc2700000, 0x41ccc158},
+{'l', 0x42700000, 0x41cd508f},
+{'l', 0x00000000, 0x412b3055},
+{'l', 0xc28b292d, 0xc1e94966},
+{'@', 0x0000003d, 0x000053a2},/*        =        x-advance: 83.632812 */
+{'M', 0x40dfc6b6, 0xc1c07293},
+{'l', 0x00000000, 0xc125982a},
+{'4', 0x0000022c, 0x00520000},
+{'6', 0x0000fdd4, 0xfee20000},
+{'l', 0x00000000, 0xc1259830},
+{'l', 0x428b292d, 0x00000000},
+{'l', 0x00000000, 0x41259830},
+{'l', 0xc28b292d, 0x00000000},
+{'@', 0x0000003e, 0x000053a2},/*        >        x-advance: 83.632812 */
+{'M', 0x40e20394, 0xc12c4ec5},
+{'l', 0x00000000, 0xc12b3055},
+{'l', 0x42700000, 0xc1cd508f},
+{'l', 0xc2700000, 0xc1ccc158},
+{'l', 0x36000000, 0xc12c4ec8},
+{'l', 0x428b292d, 0x41e9d8a0},
+{'l', 0x00000000, 0x41655ee0},
+{'l', 0xc28b292d, 0x41e94966},
+{'@', 0x0000003f, 0x00004fa6},/*        ?        x-advance: 79.648438 */
+{'M', 0x4294abdc, 0xc29055ee},
+{'8', 0x4af42900, 0x3cdd21f4},
+{'9', 0x001bffea, 0x0042ffb6},
+{'l', 0xc0b30558, 0x40840728},
+{'8', 0x3dc51dd8, 0x45ec1fed},
+{'l', 0xc143cde2, 0x00000000},
+{'8', 0xbd0bda01, 0xcd1ce30b},
+{'8', 0xd927ea11, 0xdf2cef15},
+{'8', 0xe12bf016, 0xdd26f015},
+{'8', 0xd41aed10, 0xc70ae80a},
+{'q', 0x00000000, 0xc0ff1ae0},
+{0, 0xc0ae8ba0, 0xc1496608},
+{'q', 0xc0ac4ec8, 0xc093b140},
+{0, 0xc172cc18, 0xc093b140},
+{'q', 0xc11ca4b2, 0x00000000},
+{0, 0xc178643e, 0x409ca4b0},
+{'9', 0x0027ffd3, 0x006bffcb},
+{'l', 0xc14ddfc6, 0xbf56d380},
+{'q', 0x3fe8ba28, 0xc15d89d8},
+{0, 0x412e8ba2, 0xc1aa11e4},
+{'q', 0x4111745e, 0xc0ed33f0},
+{0, 0x41c07293, 0xc0ed33f0},
+{'q', 0x417982b0, 0x00000000},
+{0, 0x41c45d16, 0x40ed33f0},
+{'9', 0x003a0047, 0x00a30047},
+{'m', 0xc22ed33e, 0x429055ee},
+{'l', 0xb6000000, 0xc160e525},
+{'l', 0x415a2e8e, 0x00000000},
+{'l', 0x00000000, 0x4160e525},
+{'l', 0xc15a2e8e, 0x00000000},
+{'@', 0x00000040, 0x00009162},/*        @        x-advance: 145.382812 */
+{'M', 0x430501ca, 0xc2533056},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0xc081ca40, 0x41bc880f},
+{'q', 0xc07f1ae0, 0x4127d508},
+{0, 0xc1330560, 0x4181ca4a},
+{'q', 0xc0e44070, 0x40b77f1e},
+{0, 0xc1801ca4, 0x40b77f1e},
+{'8', 0xe8ab00c9, 0xb7e2e8e2},
+{'4', 0xffd90001, 0x0000fffd},
+{'q', 0xc093b140, 0x41099f55},
+{0, 0xc1377f18, 0x414efe36},
+{'q', 0xc0d91020, 0x408880e6},
+{0, 0xc16af70c, 0x408880e6},
+{'q', 0xc12faa14, 0x00000000},
+{0, 0xc18880e6, 0xc0e44072},
+{'q', 0xc0c07290, 0xc0e44074},
+{0, 0xc0c07290, 0xc19e525a},
+{'q', 0x00000000, 0xc1377f18},
+{0, 0x408f3780, 0xc1aaa11e},
+{'q', 0x40917458, 0xc11dc320},
+{0, 0x414a8478, 0xc17aa120},
+{'q', 0x4101ca4c, 0xc0b9bbf0},
+{0, 0x418fc6b8, 0xc0b9bbf0},
+{'9', 0x0000007a, 0x006500a8},
+{'l', 0x3ed6d300, 0x00000000},
+{'4', 0xffa70015, 0x00000057},
+{'l', 0xc101ca48, 0x420d89d8},
+{'q', 0xc0259820, 0x41377f1c},
+{0, 0xc0259820, 0x418d89d9},
+{'8', 0x342d3400, 0xda52002c},
+{'q', 0x40982af0, 0xc09a67d8},
+{0, 0x40ef70c0, 0xc1549662},
+{'q', 0x402e8bc0, 0xc1076274},
+{0, 0x402e8bc0, 0xc195ee18},
+{'q', 0x00000000, 0xc14847a0},
+{0, 0xc0ac4ed0, 0xc1b157b8},
+{'q', 0xc0ac4ec0, 0xc11b8648},
+{0, 0xc1786440, 0xc16e5258},
+{'q', 0xc1223ce0, 0xc0a7d510},
+{0, 0xc1bda67c, 0xc0a7d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1ef70c8, 0x40ef70d0},
+{'q', 0xc1501ca8, 0x40ef70c0},
+{0, 0xc1a35b4e, 0x41acddfc},
+{'q', 0xc0ed33e8, 0x4160e524},
+{0, 0xc0ed33e8, 0x41fc4ec4},
+{'q', 0x00000000, 0x4157f1ac},
+{0, 0x40ae8ba4, 0x41bec4ec},
+{'q', 0x40b0c87c, 0x412479bb},
+{0, 0x417dfc6a, 0x417cddfc},
+{'q', 0x4126b69c, 0x40b0c880},
+{0, 0x41c2203a, 0x40b0c880},
+{'q', 0x41223ce0, 0x00000000},
+{0, 0x41a479bc, 0xc025982c},
+{'9', 0xffeb0053, 0xffbb00ac},
+{'l', 0x40762760, 0x40faa11e},
+{'q', 0xc1223ce0, 0x40c2af70},
+{0, 0xc1b03948, 0x4114cfaa},
+{'q', 0xc13d1748, 0x40496608},
+{0, 0xc1bfe35c, 0x40496608},
+{'q', 0xc186d340, 0x00000000},
+{0, 0xc1ec157c, 0xc0d4965e},
+{'q', 0xc149660a, 0xc0d6d33f},
+{0, 0xc19a67d5, 0xc1982af7},
+{'q', 0xc0d49660, 0xc1460abd},
+{0, 0xc0d49660, 0xc1e3b13a},
+{'q', 0x00000000, 0xc19ca4b4},
+{0, 0x410abdc2, 0xc20e60ac},
+{'q', 0x410bdc32, 0xc1801ca4},
+{0, 0x41c19102, 0xc1c7292c},
+{'q', 0x417745d0, 0xc10f3780},
+{0, 0x420a7627, 0xc10f3780},
+{'q', 0x4186d340, 0x00000000},
+{0, 0x41e8ba30, 0x40cba2e0},
+{'q', 0x4143cde0, 0x40c96610},
+{0, 0x41955ee0, 0x418ea848},
+{'9', 0x005c0034, 0x00d60034},
+{'m', 0xc22982ae, 0x3f0f3780},
+{'8', 0xa5dcc700, 0xdd9edddc},
+{'8', 0x239c00c8, 0x62bc23d5},
+{'q', 0xc0496610, 0x40faa120},
+{0, 0xc0496610, 0x4187f1ae},
+{'8', 0x691a4300, 0x2652261a},
+{'q', 0x410bdc34, 0x00000000},
+{0, 0x41801ca6, 0xc0eaf70c},
+{'q', 0x40e8ba30, 0xc0eaf70c},
+{0, 0x41211e70, 0xc19292cb},
+{'q', 0x3fcddfc0, 0xc0cddfc8},
+{0, 0x3fcddfc0, 0xc1223ce0},
+{'@', 0x00000041, 0x00005f86},/*        A        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'q', 0xbffaa100, 0xc09a67d0},
+{0, 0xc07aa110, 0xc12e8ba0},
+{'l', 0xbff1adc0, 0xc0b9bc00},
+{'@', 0x00000042, 0x00005f86},/*        B        x-advance: 95.523438 */
+{'M', 0x42aff1ae, 0xc1de1910},
+{'q', 0x00000000, 0x41525983},
+{0, 0xc1194968, 0x41a3ea84},
+{'9', 0x003affb4, 0x003aff2b},
+{'4', 0x0000fec0, 0xfcec0000},
+{'l', 0x420f377f, 0x00000000},
+{'q', 0x420abdc3, 0x00000000},
+{0, 0x420abdc3, 0x41bf5420},
+{'q', 0x00000000, 0x410bdc38},
+{0, 0xc09ca4b0, 0x416af710},
+{'q', 0xc09ca4c0, 0x40be35b8},
+{0, 0xc15d89dc, 0x40ff1ad8},
+{'q', 0x413bf8d4, 0x3fb30560},
+{0, 0x4190e526, 0x40fcde00},
+{'9', 0x00330032, 0x00820032},
+{'m', 0xc157f1b0, 0xbf864400},
+{'9', 0xff750000, 0xff75ff3d},
+{'4', 0x0000ff39, 0x011c0000},
+{'l', 0x41cf8d6d, 0xb6000000},
+{'q', 0x4143cde0, 0x00000000},
+{0, 0x418ea848, 0xc091745c},
+{'9', 0xffdc002c, 0xff94002c},
+{'m', 0xc0b54240, 0xc230c880},
+{'q', 0x00000000, 0xc0ff1ae0},
+{0, 0xc0ae8ba0, 0xc13660b0},
+{'9', 0xffe5ffd5, 0xffe5ff82},
+{'4', 0x0000ff4d, 0x00f90000},
+{'l', 0x41b39497, 0x00000000},
+{'q', 0x412b3054, 0x00000000},
+{0, 0x417f1ad8, 0xc07f1ae0},
+{'q', 0x40aa11e8, 0xc081ca40},
+{0, 0x40aa11e8, 0xc1460ab8},
+{'@', 0x00000043, 0x0000676d},/*        C        x-advance: 103.425781 */
+{'M', 0x425d89d8, 0xc2b22e8c},
+{'q', 0xc182e8ba, 0x00000000},
+{0, 0xc1cba2e8, 0x4128f378},
+{'q', 0xc111745c, 0x4127d510},
+{0, 0xc111745c, 0x41e67d52},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x41170c88, 0x41e94966},
+{'q', 0x41182af8, 0x412faa12},
+{0, 0x41cd508e, 0x412faa12},
+{'9', 0x000000a5, 0xff5d00f8},
+{'l', 0x412e8ba8, 0x40ae8ba0},
+{'q', 0xc0c2af80, 0x414ba2e9},
+{0, 0xc1891020, 0x419af70d},
+{'q', 0xc12faa10, 0x40d49660},
+{0, 0xc1cc321e, 0x40d49660},
+{'q', 0xc16e525c, 0xb4000000},
+{0, 0xc1ce6eff, 0xc0c4ec4f},
+{'q', 0xc12d6d34, 0xc0c7292d},
+{0, 0xc1849660, 0xc18d89d8},
+{'q', 0xc0b5423e, 0xc1389d8c},
+{0, 0xc0b5423e, 0xc1da2e8c},
+{'q', 0x00000000, 0xc1bc880e},
+{0, 0x414ba2e9, 0xc213b13b},
+{'q', 0x414ba2e8, 0xc155b4d0},
+{0, 0x420cfaa1, 0xc155b4d0},
+{'q', 0x417bbf8c, 0x00000000},
+{0, 0x41d25982, 0x40c4ec50},
+{'9', 0x00310054, 0x0092007c},
+{'l', 0xc14a8478, 0x40864410},
+{'q', 0xc05b4d00, 0xc1099f58},
+{0, 0xc130c880, 0xc1525988},
+{'q', 0xc0f1adb0, 0xc0917460},
+{0, 0xc18fc6b8, 0xc0917460},
+{'@', 0x00000044, 0x0000676d},/*        D        x-advance: 103.425781 */
+{'M', 0x42c12598, 0xc2491e6f},
+{'q', 0x00000000, 0x4173ea84},
+{0, 0xc0be35b0, 0x41d5b4d0},
+{'q', 0xc0be35c0, 0x413660ab},
+{0, 0xc186d340, 0x418bdc32},
+{'9', 0x0030ffa9, 0x0030ff37},
+{'4', 0x0000feda, 0xfcec0000},
+{'l', 0x42025982, 0x00000000},
+{'q', 0x41c8479c, 0x00000000},
+{0, 0x421a67d6, 0x41496608},
+{'9', 0x0064006d, 0x011d006d},
+{'m', 0xc156d340, 0x00000000},
+{'q', 0x00000000, 0xc19292ca},
+{0, 0xc1211e70, 0xc1df377e},
+{'9', 0xffb3ffb1, 0xffb3ff18},
+{'4', 0x0000ff69, 0x02690000},
+{'l', 0x41afaa11, 0x36000000},
+{'q', 0x412d6d34, 0x00000000},
+{0, 0x41982af8, 0xc0982af6},
+{'q', 0x41040728, 0xc0982af6},
+{0, 0x414a8478, 0xc15b4cfb},
+{'q', 0x408cfaa0, 0xc10f3780},
+{0, 0x408cfaa0, 0xc1a8f378},
+{'@', 0x00000045, 0x00005f86},/*        E        x-advance: 95.523438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429582af, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc275982a, 0x00000000},
+{'l', 0xb6000000, 0x41fcddfc},
+{'l', 0x4264cfaa, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc264cfaa, 0x00000000},
+{'l', 0xb6000000, 0x420957b8},
+{'l', 0x4280880e, 0x35800000},
+{'l', 0x00000000, 0x412e8ba3},
+{'l', 0xc29b3ea8, 0x00000000},
+{'@', 0x00000046, 0x0000577b},/*        F        x-advance: 87.480469 */
+{'M', 0x41c8d6d3, 0xc2af3ea8},
+{'l', 0x00000000, 0x421292cc},
+{'l', 0x425bdc32, 0x00000000},
+{'l', 0x00000000, 0x4130c880},
+{'l', 0xc25bdc32, 0x00000000},
+{'l', 0xb6000000, 0x421fb864},
+{'l', 0xc155b4cf, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x428c0000, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc26292cc, 0x00000000},
+{'@', 0x00000047, 0x00006f66},/*        G        x-advance: 111.398438 */
+{'M', 0x40e67d50, 0xc246e191},
+{'q', 0x00000000, 0xc1bfe35a},
+{0, 0x414ddfc6, 0xc214880f},
+{'q', 0x414ddfc6, 0xc1525980},
+{0, 0x42109d8a, 0xc1525980},
+{'q', 0x4182e8b8, 0x00000000},
+{0, 0x41d49660, 0x40b0c880},
+{'9', 0x002c0051, 0x008d007d},
+{'l', 0xc14ba2e8, 0x4071adc0},
+{'q', 0xc0864400, 0xc1064408},
+{0, 0xc139bbf8, 0xc143cde0},
+{'q', 0xc0eaf700, 0xc0762780},
+{0, 0xc19292ca, 0xc0762780},
+{'q', 0xc18880e6, 0x00000000},
+{0, 0xc1d0abdd, 0x41259830},
+{'q', 0xc11055ee, 0x412479b8},
+{0, 0xc11055ee, 0x41e82af6},
+{'q', 0x00000000, 0x41955ee2},
+{0, 0x41194966, 0x41ec157c},
+{'q', 0x41194966, 0x412c4ec4},
+{0, 0x41d40729, 0x412c4ec4},
+{'q', 0x411a67d4, 0x00000000},
+{0, 0x418fc6b6, 0xc03bf8d8},
+{'9', 0xffe90043, 0xffc1006c},
+{'l', 0x00000000, 0xc18e1911},
+{'l', 0xc1eb8644, 0x00000000},
+{'4', 0xffa70000, 0x0000014d},
+{'l', 0x00000000, 0x4207f1ad},
+{'q', 0xc0faa120, 0x40ff1adc},
+{0, 0xc199d8a0, 0x41460abe},
+{'q', 0xc1354238, 0x408abdc4},
+{0, 0xc1c4ec4e, 0x408abdc4},
+{'q', 0xc17745d0, 0xb4000000},
+{0, 0xc1d52598, 0xc0c4ec4f},
+{'q', 0xc133055e, 0xc0c4ec4f},
+{0, 0xc189101c, 0xc18d89d8},
+{'q', 0xc0bbf8d8, 0xc139bbf8},
+{0, 0xc0bbf8d8, 0xc1da2e8c},
+{'@', 0x00000048, 0x0000676d},/*        H        x-advance: 103.425781 */
+{'M', 0x429cc881, 0x00000000},
+{'l', 0x00000000, 0xc236a847},
+{'l', 0xc2552598, 0x00000000},
+{'l', 0xb6000000, 0x4236a847},
+{'l', 0xc155b4cf, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x4155b4cf, 0x00000000},
+{'l', 0x00000000, 0x4226b699},
+{'l', 0x42552598, 0x00000000},
+{'l', 0x00000000, 0xc226b699},
+{'l', 0x4155b4d0, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc155b4d0, 0x00000000},
+{'@', 0x00000049, 0x000027ca},/*        I        x-advance: 39.789062 */
+{'M', 0x415377f2, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x4155b4d0, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc155b4d0, 0x00000000},
+{'@', 0x0000004a, 0x0000479b},/*        J        x-advance: 71.605469 */
+{'M', 0x41ffaa12, 0x3fb3055f},
+{'9', 0x0000ff38, 0xff32ff13},
+{'l', 0x41513b13, 0xc00abdc0},
+{'8', 0x652d400a, 0x24582423},
+{'q', 0x40e8ba28, 0x00000000},
+{0, 0x41377f18, 0xc09ee190},
+{'9', 0xffd80021, 0xff8b0021},
+{'l', 0x00000000, 0xc26a2039},
+{'l', 0xc1979bbf, 0x00000000},
+{'4', 0xffa90000, 0x00000101},
+{'l', 0x00000000, 0x428a5259},
+{'q', 0x00000000, 0x41655ee1},
+{0, 0xc0f86440, 0x41b4b305},
+{'q', 0xc0f86440, 0x4102e8ba},
+{0, 0xc1aa11e6, 0x4102e8ba},
+{'@', 0x0000004b, 0x00005f86},/*        K        x-advance: 95.523438 */
+{'M', 0x429aaf71, 0x00000000},
+{'l', 0xc21d7b87, 0xc23e35b5},
+{'l', 0xc14ddfc6, 0x411ca4b4},
+{'l', 0x00000000, 0x42170c88},
+{'l', 0xc155b4cf, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x4155b4cf, 0x00000000},
+{'l', 0x00000000, 0x42457b85},
+{'l', 0x423dee18, 0xc2457b85},
+{'l', 0x417bbf90, 0x00000000},
+{'l', 0xc227d509, 0x422b3055},
+{'l', 0x423e35b5, 0x425eefe3},
+{'l', 0xc1849660, 0x00000000},
+{'@', 0x0000004c, 0x00004fa6},/*        L        x-advance: 79.648438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x4155b4cf, 0x00000000},
+{'l', 0x00000000, 0x42af3ea8},
+{'l', 0x4247292c, 0xb6400000},
+{'l', 0x00000000, 0x412e8ba3},
+{'l', 0xc27c9660, 0x00000000},
+{'@', 0x0000004d, 0x0000774c},/*        M        x-advance: 119.296875 */
+{'M', 0x42bf0c88, 0x00000000},
+{'l', 0x00000000, 0xc28377f2},
+{'q', 0x00000000, 0xc12e8ba0},
+{0, 0x3f211e80, 0xc1a7d508},
+{'9', 0x0064ffe5, 0x009cffcf},
+{'l', 0xc1cba2e8, 0x42864407},
+{'l', 0xc115ee1c, 0x00000000},
+{'l', 0xc1ce6efe, 0xc2864407},
+{'0', 0xc3eea1e1, 0x69023e01},
+{'l', 0x00000000, 0x428377f2},
+{'l', 0xc13e35b5, 0x00000000},
+{'4', 0xfcec0000, 0x0000008c},
+{'l', 0x41d1ca4a, 0x4288a4b2},
+{'8', 0x4715210b, 0x360d250a},
+{'8', 0xbd12ea04, 0xc713d30e},
+{'l', 0x41cddfc8, 0xc288a4b2},
+{'l', 0x4189101c, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc1407290, 0x00000000},
+{'@', 0x0000004e, 0x0000676d},/*        N        x-advance: 103.425781 */
+{'M', 0x42975424, 0x00000000},
+{'l', 0xc252e8ba, 0xc2a7d509},
+{'l', 0x3eb30500, 0x40d91020},
+{'l', 0x3eb30580, 0x413ada68},
+{'l', 0x00000000, 0x4282e8ba},
+{'l', 0xc13e35b5, 0x00000000},
+{'4', 0xfcec0000, 0x0000007c},
+{'l', 0x42552598, 0x42a8f377},
+{'9', 0xff93fffa, 0xff62fffa},
+{'l', 0x00000000, 0xc2813b13},
+{'l', 0x41407298, 0x00000000},
+{'l', 0x00000000, 0x42c5101c},
+{'l', 0xc180abdc, 0x00000000},
+{'@', 0x0000004f, 0x00006f66},/*        O        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'q', 0x411292c8, 0xc128f378},
+{0, 0x411292c8, 0xc1ee525a},
+{'@', 0x00000050, 0x00005f86},/*        P        x-advance: 95.523438 */
+{'M', 0x42aff1ae, 0xc289c322},
+{'q', 0x00000000, 0x415fc6b8},
+{0, 0xc11292d0, 0x41b1e6f0},
+{'9', 0x0042ffb8, 0x0042ff3a},
+{'l', 0xc1e79bbf, 0x00000000},
+{'l', 0x00000000, 0x42199102},
+{'4', 0x0000ff96, 0xfcec0000},
+{'l', 0x4225dfc6, 0x00000000},
+{'q', 0x41849660, 0x00000000},
+{0, 0x41cd5090, 0x40f86440},
+{'9', 0x003e0048, 0x00af0048},
+{'m', 0xc156d340, 0x3e0f3800},
+{'9', 0xff680000, 0xff68ff49},
+{'4', 0x0000ff2c, 0x01370000},
+{'l', 0x41d880e5, 0x00000000},
+{'q', 0x41b30560, 0x00000000},
+{0, 0x41b30560, 0xc19e5258},
+{'@', 0x00000051, 0x00006f66},/*        Q        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x41a6b69a},
+{0, 0xc127d508, 0x4209101d},
+{'q', 0xc127d510, 0x4156d33d},
+{0, 0xc1e94968, 0x417dfc6a},
+{'8', 0x653b4616, 0x1f5e1f25},
+{'9', 0x0000001e, 0xfff90040},
+{'l', 0x00000000, 0x4115ee18},
+{'q', 0xc0d01ca0, 0x3fc4ec50},
+{0, 0xc1472930, 0x3fc4ec50},
+{'q', 0xc128f378, 0x00000000},
+{0, 0xc18b4cfa, 0xc0be35b4},
+{'q', 0xc0d91018, 0xc0c07294},
+{0, 0xc131e6f0, 0xc1a00000},
+{'q', 0xc15d89d8, 0xbf330561},
+{0, 0xc1bf5423, 0xc0dfc6b7},
+{'q', 0xc1200000, 0xc0cba2e9},
+{0, 0xc17508f3, 0xc18cfaa1},
+{'q', 0xc0a7d50a, 0xc135423e},
+{0, 0xc0a7d50a, 0xc1d1ca4b},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'q', 0x411292c8, 0xc128f378},
+{0, 0x411292c8, 0xc1ee525a},
+{'@', 0x00000052, 0x0000676d},/*        R        x-advance: 103.425781 */
+{'M', 0x42a2cc15, 0x00000000},
+{'l', 0xc1ccc156, 0xc223a2e9},
+{'l', 0xc1f5982b, 0x00000000},
+{'l', 0x00000000, 0x4223a2e9},
+{'4', 0x0000ff96, 0xfcec0000},
+{'l', 0x4239745d, 0x00000000},
+{'q', 0x41852596, 0x00000000},
+{0, 0x41cd508e, 0x40ef70c0},
+{'q', 0x41117460, 0x40ed33f0},
+{0, 0x41117460, 0x41a5982c},
+{'q', 0x00000000, 0x412faa10},
+{0, 0xc0cddfd0, 0x4193b13a},
+{'9', 0x003bffce, 0x004bff74},
+{'4', 0x015300df, 0x0000ff85},
+{'m', 0xbffaa100, 0xc28c6b6a},
+{'q', 0x00000000, 0xc1099f50},
+{0, 0xc0bbf8e0, 0xc1513b10},
+{'9', 0xffdcffd2, 0xffdcff7a},
+{'4', 0x0000ff03, 0x01220000},
+{'l', 0x4200f378, 0x00000000},
+{'q', 0x4128f378, 0x00000000},
+{0, 0x41825980, 0xc09ca4b0},
+{'q', 0x40b9bc00, 0xc09ee190},
+{0, 0x40b9bc00, 0xc15d89dc},
+{'@', 0x00000053, 0x00005f86},/*        S        x-advance: 95.523438 */
+{'M', 0x42b1e6f0, 0xc1d99f54},
+{'q', 0x00000000, 0x415a2e8c},
+{0, 0xc12b3058, 0x41a8f378},
+{'q', 0xc12a11e8, 0x40ef70c8},
+{0, 0xc1f00000, 0x40ef70c8},
+{'9', 0x0000fee0, 0xff38feb3},
+{'l', 0x414efe34, 0xc0259828},
+{'q', 0x400f3780, 0x410e1910},
+{0, 0x41182af6, 0x41513b13},
+{'q', 0x40e8ba2c, 0x4084072a},
+{0, 0x419e5259, 0x4084072a},
+{'q', 0x414efe38, 0x00000000},
+{0, 0x419f70c8, 0xc08cfaa0},
+{'8', 0x9838dd38, 0xc2efda00},
+{'8', 0xd9cfe8ef, 0xe6b4f1e1},
+{'q', 0xc0b0c880, 0xbfaa11e0},
+{0, 0xc143cde0, 0xc0377f10},
+{'q', 0xc13ada68, 0xc0259830},
+{0, 0xc18e1911, 0xc0a59830},
+{'8', 0xd3b4ecd0, 0xc5d5e7e5},
+{'q', 0xbfe8ba30, 0xc08880e0},
+{0, 0xbfe8ba30, 0xc11ca4b0},
+{'q', 0x00000000, 0xc14a8480},
+{0, 0x411a67d4, 0xc19c157c},
+{'q', 0x411b8644, 0xc0db4d00},
+{0, 0x41de1910, 0xc0db4d00},
+{'q', 0x41864406, 0x00000000},
+{0, 0x41cd508e, 0x40a59830},
+{'9', 0x00280047, 0x008b0063},
+{'l', 0xc1525980, 0x4013b140},
+{'q', 0xc00abdc0, 0xc0faa120},
+{0, 0xc1040730, 0xc1354238},
+{'q', 0xc0c2af68, 0xc0644080},
+{0, 0xc186d33c, 0xc0644080},
+{'q', 0xc13d1748, 0x00000000},
+{0, 0xc19055ef, 0x407aa120},
+{'8', 0x5dcf1fcf, 0x3c132400},
+{'q', 0x401ca4b0, 0x403bf8e0},
+{0, 0x40dfc6b4, 0x40a11e70},
+{'q', 0x40917460, 0x4001ca50},
+{0, 0x4190e526, 0x40a11e70},
+{'8', 0x11480824, 0x14450824},
+{'8', 0x1b3d0b21, 0x2732101d},
+{'8', 0x37211715, 0x4a0c1f0c},
+{'@', 0x00000054, 0x0000577b},/*        T        x-advance: 87.480469 */
+{'M', 0x4249660b, 0xc2af3ea8},
+{'l', 0x00000000, 0x42af3ea8},
+{'l', 0xc1549664, 0x00000000},
+{'l', 0x00000000, 0xc2af3ea8},
+{'l', 0xc2076276, 0x00000000},
+{'l', 0x35e00000, 0xc12e8ba0},
+{'l', 0x42a1f542, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc2076275, 0x00000000},
+{'@', 0x00000055, 0x0000676d},/*        U        x-advance: 103.425781 */
+{'M', 0x424c79bc, 0x3fb3055f},
+{'q', 0xc1419104, 0x00000000},
+{0, 0xc1a8f378, 0xc08cfaa1},
+{'q', 0xc11055ee, 0xc08cfaa1},
+{0, 0xc15fc6b6, 0xc14cc158},
+{'9', 0xffbdffd9, 0xff60ffd9},
+{'4', 0xfe0b0000, 0x0000006a},
+{'l', 0x00000000, 0x42766efd},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0x40db4cfc, 0x41a3ea84},
+{'q', 0x40db4cfc, 0x40dfc6b8},
+{0, 0x419e5259, 0x40dfc6b8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a508f4, 0xc0e67d50},
+{'9', 0xffc6003b, 0xff57003b},
+{'4', 0xfe1b0000, 0x0000006a},
+{'l', 0x00000000, 0x4275dfc6},
+{'q', 0x00000000, 0x413f5422},
+{0, 0xc0a35b50, 0x41a508f2},
+{'q', 0xc0a11e70, 0x410abdc4},
+{0, 0xc1655ee0, 0x41549661},
+{'q', 0xc113b140, 0x4091745e},
+{0, 0xc1ae8ba4, 0x4091745e},
+{'@', 0x00000056, 0x00005f86},/*        V        x-advance: 95.523438 */
+{'M', 0x425abdc3, 0x00000000},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0xc220d6d3, 0xc2c5101c},
+{'l', 0x4160e524, 0x00000000},
+{'l', 0x41da2e8c, 0x428abdc2},
+{'l', 0x40bbf8d8, 0x418b4cfc},
+{'l', 0x40bbf8d0, 0xc18b4cfa},
+{'l', 0x41d9101c, 0xc28abdc2},
+{'l', 0x4160e528, 0x00000000},
+{'l', 0xc220d6d3, 0x42c5101c},
+{'@', 0x00000057, 0x0000872c},/*        W        x-advance: 135.171875 */
+{'M', 0x42d35424, 0x00000000},
+{'4', 0x0000ff81, 0xfe0cff78},
+{'q', 0xbfd6d340, 0xc0bbf8d8},
+{0, 0xc09ca4b0, 0xc1a8643e},
+{'q', 0xbfe8ba40, 0x4101ca48},
+{0, 0xc044ec60, 0x41591018},
+{'9', 0x002bfff6, 0x0230ff68},
+{'l', 0xc17f1adc, 0x00000000},
+{'4', 0xfcecff18, 0x0000006f},
+{'l', 0x418d89d9, 0x427a5982},
+{'q', 0x40496610, 0x413bf8d4},
+{0, 0x40b9bbf8, 0x41c19100},
+{'q', 0x3fd6d340, 0xc0f62760},
+{0, 0x40762760, 0xc1864406},
+{'9', 0xffb80011, 0xfdd0009b},
+{'4', 0x00000066, 0x01ea0089},
+{'9', 0x0078001f, 0x00cb0031},
+{'l', 0x3f211e00, 0xc01ca4ac},
+{'q', 0x3ff1adc0, 0xc100abdd},
+{0, 0x4044ec60, 0xc1513b13},
+{'9', 0xffd80009, 0xfdc6009d},
+{'l', 0x415ea850, 0x00000000},
+{'l', 0xc1e82af8, 0x42c5101c},
+{'@', 0x00000058, 0x00005f86},/*        X        x-advance: 95.523438 */
+{'M', 0x429b8644, 0x00000000},
+{'l', 0xc1eca4b4, 0xc22c4ec5},
+{'l', 0xc1f1ada6, 0x422c4ec5},
+{'l', 0xc16c157a, 0x00000000},
+{'l', 0x4215ee18, 0xc24cc158},
+{'l', 0xc20a7626, 0xc23d5ee0},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x41db4cfa, 0x421aaf70},
+{'l', 0x41d52598, 0xc21aaf70},
+{'l', 0x416c1578, 0x00000000},
+{'l', 0xc206d33e, 0x423b699e},
+{'l', 0x42124b30, 0x424eb69a},
+{'l', 0xc16c1578, 0x00000000},
+{'@', 0x00000059, 0x00005f86},/*        Y        x-advance: 95.523438 */
+{'M', 0x425957b8, 0xc2235b4d},
+{'l', 0x00000000, 0x42235b4d},
+{'l', 0xc1549660, 0x00000000},
+{'l', 0x00000000, 0xc2235b4d},
+{'l', 0xc2179bbf, 0xc266c4eb},
+{'l', 0x416af70c, 0x00000000},
+{'l', 0x41f00000, 0x423bb13a},
+{'l', 0x41eee190, 0xc23bb13a},
+{'l', 0x416af710, 0x00000000},
+{'l', 0xc2182af8, 0x4266c4eb},
+{'@', 0x0000005a, 0x0000577b},/*        Z        x-advance: 87.480469 */
+{'M', 0x42a60394, 0x00000000},
+{'l', 0xc29cec4e, 0x00000000},
+{'l', 0xb5c00000, 0xc1200000},
+{'l', 0x42700000, 0xc29b3ea8},
+{'l', 0xc25b9497, 0x00000000},
+{'l', 0x35800000, 0xc12e8ba0},
+{'l', 0x428c23cd, 0x00000000},
+{'l', 0x00000000, 0x411b8640},
+{'l', 0xc26fffff, 0x429bcde0},
+{'l', 0x427d2597, 0xb6400000},
+{'l', 0x00000000, 0x412e8ba3},
+{'@', 0x0000005b, 0x000027ca},/*        [        x-advance: 39.789062 */
+{'M', 0x41235b4d, 0x41edc322},
+{'l', 0x00000000, 0xc3057f1b},
+{'l', 0x41e3b13c, 0x37000000},
+{'l', 0x00000000, 0x411055f0},
+{'l', 0xc1825983, 0x00000000},
+{'l', 0x00000000, 0x42e6e8ba},
+{'l', 0x41825983, 0xb6000000},
+{'l', 0x00000000, 0x411055ee},
+{'l', 0xc1e3b13c, 0x00000000},
+{'@', 0x0000005c, 0x000027ca},/*       \         x-advance: 39.789062 */
+{'M', 0x41e3b13b, 0x3fb3055f},
+{'l', 0xc1e3b13b, 0xc2d25982},
+{'l', 0x4130c881, 0x00000000},
+{'l', 0x41e5ee1a, 0x42d25982},
+{'l', 0xc135423e, 0x36780000},
+{'@', 0x0000005d, 0x000027ca},/*        ]        x-advance: 39.789062 */
+{'M', 0x3f8f377f, 0x41edc322},
+{'l', 0x00000000, 0xc11055ee},
+{'l', 0x41825983, 0x00000000},
+{'l', 0x00000000, 0xc2e6e8ba},
+{'l', 0xc1825983, 0x00000000},
+{'l', 0xb4000000, 0xc11055f0},
+{'l', 0x41e3b13b, 0x00000000},
+{'l', 0x00000000, 0x43057f1b},
+{'l', 0xc1e3b13b, 0xb6800000},
+{'@', 0x0000005e, 0x00004333},/*        ^        x-advance: 67.199219 */
+{'M', 0x425c23ce, 0xc23c4072},
+{'l', 0xc1acddfc, 0xc231101c},
+{'l', 0xc1ab3056, 0x4231101c},
+{'l', 0xc135423e, 0x00000000},
+{'l', 0x41cddfc7, 0xc24ddfc6},
+{'l', 0x41632204, 0x00000000},
+{'l', 0x41cefe34, 0x424ddfc6},
+{'l', 0xc1377f18, 0x00000000},
+{'@', 0x0000005f, 0x00004fa6},/*        _        x-advance: 79.648438 */
+{'M', 0xc00abdc3, 0x41e3b13b},
+{'l', 0x00000000, 0xc111745e},
+{'l', 0x42a6da68, 0x00000000},
+{'l', 0x00000000, 0x4111745e},
+{'l', 0xc2a6da68, 0x00000000},
+{'@', 0x00000060, 0x00002fb1},/*        `        x-advance: 47.691406 */
+{'M', 0x41f3ea84, 0xc2a7f8d7},
+{'l', 0xc1b89d8a, 0xc19b8644},
+{'l', 0x35800000, 0xc001ca40},
+{'l', 0x41679bbf, 0x00000000},
+{'l', 0x4172cc14, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x00000061, 0x00004fa6},/*        a        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'q', 0x4056d340, 0x4056d340},
+{0, 0x41182af8, 0x4056d340},
+{'@', 0x00000062, 0x00004fa6},/*        b        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc218ba2e},
+{'q', 0x00000000, 0x421e5259},
+{0, 0xc1dea846, 0x421e5259},
+{'q', 0xc1099f54, 0xb4000000},
+{0, 0xc1655ee2, 0xc044ec4f},
+{'9', 0xffe7ffd3, 0xffb0ffb7},
+{'l', 0xbe0f3780, 0x00000000},
+{'8', 0x35fe1100, 0x28fd23fe},
+{'l', 0xc142af71, 0x00000000},
+{'9', 0xffe20003, 0xff840003},
+{'4', 0xfd3f0000, 0x00000064},
+{'l', 0x00000000, 0x41eca4b4},
+{'9', 0x00240000, 0x0055fffe},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x405fc6b8, 0xc0e8ba38},
+{0, 0x4113b13a, 0xc126b69c},
+{'q', 0x40b9bbfc, 0xc0496600},
+{0, 0x41655ee2, 0xc0496600},
+{'q', 0x41655ee0, 0x00000000},
+{0, 0x41a86442, 0x411a67d0},
+{'9', 0x004d0036, 0x00e90036},
+{'m', 0xc15377f0, 0x3ed6d300},
+{'q', 0x00000000, 0xc17dfc6c},
+{0, 0xc0864408, 0xc1b5d174},
+{'q', 0xc0864400, 0xc0db4d00},
+{0, 0xc15a2e88, 0xc0db4d00},
+{'q', 0xc12a11e8, 0x00000000},
+{0, 0xc1786442, 0x40e8ba30},
+{'q', 0xc09a67d4, 0x40e8ba30},
+{0, 0xc09a67d4, 0x41b89d8a},
+{'q', 0x00000000, 0x416e525a},
+{0, 0x40982af4, 0x41b0394a},
+{'q', 0x40982af8, 0x40e20394},
+{0, 0x417745d2, 0x40e20394},
+{'q', 0x41182af8, 0x00000000},
+{0, 0x415b4cfc, 0xc0dfc6b6},
+{'q', 0x408880e0, 0xc0e20396},
+{0, 0x408880e0, 0xc1b6efe4},
+{'@', 0x00000063, 0x0000479b},/*        c        x-advance: 71.605469 */
+{'M', 0x4199d89d, 0xc218ba2e},
+{'q', 0x00000000, 0x4171ada4},
+{0, 0x40982af8, 0x41b3055e},
+{'q', 0x40982af8, 0x40e8ba2e},
+{0, 0x41655ee2, 0x40e8ba2e},
+{'8', 0xe3590035, 0xa72ce324},
+{'l', 0x414ba2ec, 0x3f56d340},
+{'q', 0xbfbbf900, 0x412e8ba3},
+{0, 0xc114cfac, 0x418b4cfb},
+{'q', 0xc0faa120, 0x40d01ca4},
+{0, 0xc19ee190, 0x40d01ca4},
+{'q', 0xc17dfc6c, 0xb4000000},
+{0, 0xc1c2203a, 0xc1200000},
+{'q', 0xc1052598, 0xc1211e6e},
+{0, 0xc1052598, 0xc1ea67d4},
+{'q', 0x35000000, 0xc198ba30},
+{0, 0x41064407, 0xc1e8ba2e},
+{'q', 0x41064407, 0xc1211e70},
+{0, 0x41c07292, 0xc1211e70},
+{'q', 0x4139bbf8, 0x00000000},
+{0, 0x4199d89e, 0x40c07290},
+{'9', 0x0030003d, 0x0084004d},
+{'l', 0xc14efe38, 0x3f7aa140},
+{'8', 0xb0d9cef9, 0xe3a6e3e1},
+{'q', 0xc11ffffe, 0x00000000},
+{0, 0xc1679bbe, 0x40d49660},
+{'q', 0xc08f3780, 0x40d49660},
+{0, 0xc08f3780, 0x41b30560},
+{'@', 0x00000064, 0x00004fa6},/*        d        x-advance: 79.648438 */
+{'M', 0x4265a67d, 0xc142af71},
+{'q', 0xc05fc6b0, 0x40e8ba2f},
+{0, 0xc114cfa8, 0x4126b69a},
+{'q', 0xc0b77f20, 0x4049660c},
+{0, 0xc1644074, 0x4049660c},
+{'q', 0xc1655ee2, 0xb4000000},
+{0, 0xc1a8f378, 0xc11a67d5},
+{'q', 0xc0d6d33d, 0xc11a67d5},
+{0, 0xc0d6d33d, 0xc1e9d89e},
+{'q', 0x00000000, 0xc21e5259},
+{0, 0x41dea847, 0xc21e5259},
+{'q', 0x41099f54, 0x00000000},
+{0, 0x41655ee0, 0x40496600},
+{'9', 0x0019002d, 0x00500049},
+{'l', 0x3e0f3800, 0x00000000},
+{'l', 0xbe0f3800, 0xc1076278},
+{'4', 0xff050000, 0x00000064},
+{'l', 0x00000000, 0x42b05d17},
+{'9', 0x005e0000, 0x007c0003},
+{'l', 0xc1407290, 0x00000000},
+{'8', 0xd7fdf8ff, 0xc9ffe0ff},
+{'6', 0x0000fffe, 0xff33fecf},
+{'q', 0xb6000000, 0x417dfc6a},
+{0, 0x40864404, 0x41b5d174},
+{'q', 0x40864408, 0x40db4cf8},
+{0, 0x415a2e8a, 0x40db4cf8},
+{'q', 0x412b3058, 0x00000000},
+{0, 0x41786444, 0xc0ed33ea},
+{'q', 0x409a67d0, 0xc0ed33ea},
+{0, 0x409a67d0, 0xc1b80e52},
+{'q', 0x00000000, 0xc1708f38},
+{0, 0xc09a67d0, 0xc1b0394a},
+{'q', 0xc09a67d8, 0xc0dfc6b8},
+{0, 0xc1762764, 0xc0dfc6b8},
+{'q', 0xc1182af8, 0x00000000},
+{0, 0xc15c6b6a, 0x40e20398},
+{'q', 0xc0864408, 0x40dfc6b8},
+{0, 0xc0864408, 0x41b660ac},
+{'@', 0x00000065, 0x00004fa6},/*        e        x-advance: 79.648438 */
+{'M', 0x419a67d5, 0xc20cb305},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0x40ac4ec4, 0x41a08f37},
+{'q', 0x40ac4ec4, 0x40e20394},
+{0, 0x417bbf8c, 0x40e20394},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c884, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1864406, 0xb4000000},
+{0, 0xc1ccc157, 0xc1200000},
+{'q', 0xc10bdc32, 0xc1200000},
+{0, 0xc10bdc32, 0xc1edc322},
+{'q', 0x35000000, 0xc195ee18},
+{0, 0x410bdc32, 0xc1e5ee18},
+{'q', 0x410cfaa2, 0xc1200000},
+{0, 0x41c8d6d3, 0xc1200000},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe51},
+{'m', 0x4223ea85, 0xc11a67d4},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e70, 0xc0b0c880},
+{0, 0xc1679bc0, 0xc0b0c880},
+{'q', 0xc11292cc, 0x00000000},
+{0, 0xc168ba2e, 0x40c4ec50},
+{'q', 0xc0aa11e8, 0x40c2af70},
+{0, 0xc0b77f1c, 0x41864408},
+{'l', 0x42235b4d, 0x00000000},
+{'@', 0x00000066, 0x000027ca},/*        f        x-advance: 39.789062 */
+{'M', 0x41c9f542, 0xc28501ca},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x4091745c, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x00000000, 0x411292d0},
+{'l', 0xc16c157c, 0x00000000},
+{'@', 0x00000067, 0x00004fa6},/*        g        x-advance: 79.648438 */
+{'M', 0x42194966, 0x41edc322},
+{'q', 0xc1460abe, 0x00000000},
+{0, 0xc19dc322, 0xc09a67d4},
+{'9', 0xffd9ffc6, 0xff92ffb5},
+{'l', 0x414a847a, 0xbfe8ba30},
+{'8', 0x402c290a, 0x165a1622},
+{'9', 0x00000096, 0xff500096},
+{'4', 0xff9f0000, 0x0000ffff},
+{'q', 0xc0644070, 0x40e8ba2e},
+{0, 0xc11ca4b0, 0x412faa11},
+{'q', 0xc0c72930, 0x4068ba30},
+{0, 0xc168ba30, 0x4068ba30},
+{'q', 0xc15ea848, 0xb3800000},
+{0, 0xc1a3ea84, 0xc113b13b},
+{'q', 0xc0d01ca5, 0xc113b13b},
+{0, 0xc0d01ca5, 0xc1e82af6},
+{'q', 0x00000000, 0xc1a08f38},
+{0, 0x40dfc6b7, 0xc1eca4b4},
+{'q', 0x40e20392, 0xc1194968},
+{0, 0x41ab3056, 0xc1194968},
+{'8', 0x1d6f0040, 0x53491d2f},
+{'l', 0x3e0f3700, 0x00000000},
+{'8', 0xc602f000, 0xd304d702},
+{'l', 0x413f5424, 0x00000000},
+{'9', 0x001efffd, 0x007dfffd},
+{'l', 0x00000000, 0x42675424},
+{'9', 0x00ff0000, 0x00ffff03},
+{'m', 0x41994966, 0xc2871ada},
+{'q', 0x00000000, 0xc113b13c},
+{0, 0xc0211e70, 0xc17dfc6c},
+{'8', 0xafc7cbec, 0xe4aee4dc},
+{'q', 0xc11a67d6, 0x00000000},
+{0, 0xc160e526, 0x40dfc6b0},
+{'q', 0xc08cfaa0, 0x40dfc6b8},
+{0, 0xc08cfaa0, 0x41b5423c},
+{'q', 0x00000000, 0x41786442},
+{0, 0x40840728, 0x41b27628},
+{'q', 0x40840728, 0x40d9101c},
+{0, 0x41620396, 0x40d9101c},
+{'8', 0xe554002f, 0xb039e524},
+{'q', 0x40211e70, 0xc0d25980},
+{0, 0x40211e70, 0xc17982b0},
+{'@', 0x00000068, 0x00004fa6},/*        h        x-advance: 79.648438 */
+{'M', 0x41b157b8, 0xc27ae8ba},
+{'q', 0x4081ca4c, 0xc0ed33f0},
+{0, 0x411b8644, 0xc12d6d30},
+{'q', 0x40b77f18, 0xc05fc6c0},
+{0, 0x41679bc0, 0xc05fc6c0},
+{'q', 0x4144ec50, 0x00000000},
+{0, 0x4190e526, 0x40c4ec50},
+{'9', 0x0030002e, 0x00a3002e},
+{'4', 0x01930000, 0x0000ff9b},
+{'l', 0x00000000, 0xc23fe35b},
+{'8', 0xa2f5c100, 0xd3dae1f5},
+{'q', 0xc056d340, 0xbfe8ba40},
+{0, 0xc114cfac, 0xbfe8ba40},
+{'q', 0xc10e1910, 0x00000000},
+{0, 0xc1644072, 0x40c4ec50},
+{'9', 0x0031ffd6, 0x0084ffd6},
+{'l', 0x00000000, 0x42327627},
+{'l', 0xc149660b, 0x00000000},
+{'4', 0xfcc20000, 0x00000064},
+{'l', 0x00000000, 0x41d7f1ac},
+{'8', 0x46fe2200, 0x29fe24ff},
+{'l', 0x3e56d300, 0x00000000},
+{'@', 0x00000069, 0x00001fd1},/*        i        x-advance: 31.816406 */
+{'M', 0x41194966, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd230000},
+{'0', 0x0064a000, 0x009c6000},
+{'@', 0x0000006a, 0x00001fd1},/*        j        x-advance: 31.816406 */
+{'M', 0x41b157b8, 0x4115ee19},
+{'q', 0x00000000, 0x412b3055},
+{0, 0xc0864408, 0x41786441},
+{'8', 0x269c26df, 0xfbb900d5},
+{'4', 0xffb30000, 0x00030022},
+{'8', 0xec360026, 0xb20fec0f},
+{'4', 0xfd670000, 0x00000064},
+{'6', 0x02a80000, 0xfcd8ff9c},
+{'0', 0x0064a000, 0x009c6000},
+{'@', 0x0000006b, 0x0000479b},/*        k        x-advance: 71.605469 */
+{'M', 0x42644072, 0x00000000},
+{'l', 0xc1ccc157, 0xc20a2e8c},
+{'l', 0xc113b13a, 0x40f3ea88},
+{'l', 0x00000000, 0x41d76276},
+{'l', 0xc149660b, 0x00000000},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x4149660b, 0x00000000},
+{'l', 0x00000000, 0x4281a67d},
+{'l', 0x4204ddfc, 0xc212da68},
+{'l', 0x416c1580, 0x00000000},
+{'l', 0xc1f5982c, 0x420211e7},
+{'l', 0x42013b14, 0x422c9661},
+{'l', 0xc16c1580, 0x00000000},
+{'@', 0x0000006c, 0x00001fd1},/*        l        x-advance: 31.816406 */
+{'M', 0x411a67d5, 0x00000000},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x4149660b, 0x00000000},
+{'l', 0x00000000, 0x42cf8d6d},
+{'l', 0xc149660b, 0x00000000},
+{'@', 0x0000006d, 0x0000774c},/*        m        x-advance: 119.296875 */
+{'M', 0x4256d33e, 0x00000000},
+{'l', 0x00000000, 0xc23fe35b},
+{'q', 0x00000000, 0xc12faa14},
+{0, 0xc0407290, 0xc172cc14},
+{'8', 0xdfaadfe8, 0x319b00c0},
+{'9', 0x0031ffdb, 0x008affdb},
+{'4', 0x015e0000, 0x0000ff9c},
+{'l', 0x00000000, 0xc26e0abe},
+{'9', 0xff970000, 0xff7ffffd},
+{'l', 0x413e35b5, 0x00000000},
+{'8', 0x0f010200, 0x1c010c00},
+{'9', 0x000f0001, 0x003b0002},
+{'l', 0x3e56d300, 0x00000000},
+{'8', 0xa74ac020, 0xe766e729},
+{'8', 0x1b6c0044, 0x57371b28},
+{'l', 0x3e56d400, 0x00000000},
+{'8', 0xa94bc41f, 0xe66be62c},
+{'q', 0x41377f18, 0x00000000},
+{0, 0x41852598, 0x40c72930},
+{'9', 0x00310029, 0x00a30029},
+{'4', 0x01930000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23fe35b},
+{'q', 0x00000000, 0xc12faa14},
+{0, 0xc04072a0, 0xc172cc14},
+{'8', 0xdfaadfe8, 0x319a00be},
+{'9', 0x0030ffdc, 0x008affdc},
+{'l', 0x00000000, 0x422f6276},
+{'l', 0xc1472930, 0x00000000},
+{'@', 0x0000006e, 0x00004fa6},/*        n        x-advance: 79.648438 */
+{'M', 0x4266c4ec, 0x00000000},
+{'l', 0x00000000, 0xc23fe35b},
+{'8', 0xa4f5c500, 0xd1dbdff5},
+{'q', 0xc04ddfc0, 0xbfe8ba40},
+{0, 0xc1170c88, 0xbfe8ba40},
+{'q', 0xc111745c, 0x00000000},
+{0, 0xc1655ee0, 0x40c72930},
+{'9', 0x0031ffd7, 0x008affd7},
+{'4', 0x015e0000, 0x0000ff9c},
+{'l', 0x00000000, 0xc26e0abe},
+{'9', 0xff970000, 0xff7ffffd},
+{'l', 0x413e35b5, 0x00000000},
+{'8', 0x0f010200, 0x1c010c00},
+{'9', 0x000f0001, 0x003b0002},
+{'l', 0x3e56d300, 0x00000000},
+{'q', 0x408abdc4, 0xc0faa120},
+{0, 0x41200000, 0xc130c880},
+{'q', 0x40b77f18, 0xc0525980},
+{0, 0x41632204, 0xc0525980},
+{'q', 0x4147292c, 0x00000000},
+{0, 0x4191745e, 0x40c72930},
+{'9', 0x0031002e, 0x00a3002e},
+{'l', 0x00000000, 0x4249ada6},
+{'l', 0xc14a8478, 0x00000000},
+{'@', 0x0000006f, 0x00004fa6},/*        o        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'q', 0x409ca4b0, 0xc0e8ba2e},
+{0, 0x409ca4b0, 0xc1b5d174},
+{'@', 0x00000070, 0x00004fa6},/*        p        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc218ba2e},
+{'q', 0x00000000, 0x421e5259},
+{0, 0xc1dea846, 0x421e5259},
+{'9', 0x0000ff75, 0xff97ff45},
+{'l', 0xbeb30540, 0x00000000},
+{'9', 0x00040002, 0x005f0002},
+{'4', 0x00ec0000, 0x0000ff9c},
+{'l', 0x00000000, 0xc2b3dc32},
+{'9', 0xffa30000, 0xff85fffd},
+{'l', 0x4142af71, 0x00000000},
+{'8', 0x10010200, 0x29020d01},
+{'9', 0x001c0001, 0x00270001},
+{'l', 0x3e8f3780, 0x00000000},
+{'q', 0x4056d340, 0xc0dfc6b8},
+{0, 0x410e1910, 0xc1235b4c},
+{'q', 0x40b0c87c, 0xc0525980},
+{0, 0x4168ba2e, 0xc0525980},
+{'q', 0x415fc6b8, 0x00000000},
+{0, 0x41a745d2, 0x4115ee18},
+{'9', 0x004a0037, 0x00eb0037},
+{'m', 0xc15377f0, 0x3e8f3780},
+{'q', 0x00000000, 0xc17cddfc},
+{0, 0xc08880e0, 0xc1b4b306},
+{'8', 0xca94cade, 0x19a300c5},
+{'q', 0xc0864408, 0x40496600},
+{0, 0xc0cddfc8, 0x411dc320},
+{'q', 0xc00abdc0, 0x40d49660},
+{0, 0xc00abdc0, 0x418abdc2},
+{'q', 0x00000000, 0x416e525a},
+{0, 0x40982af4, 0x41afaa12},
+{'q', 0x40982af8, 0x40e20394},
+{0, 0x417745d2, 0x40e20394},
+{'q', 0x4115ee18, 0x00000000},
+{0, 0x415a2e8c, 0xc0db4cfa},
+{'q', 0x408abdc0, 0xc0dd89da},
+{0, 0x408abdc0, 0xc1b92cc0},
+{'@', 0x00000071, 0x00004fa6},/*        q        x-advance: 79.648438 */
+{'M', 0x42076276, 0x3fb3055f},
+{'q', 0xc1667d50, 0x00000000},
+{0, 0xc1a8f378, 0xc11b8644},
+{'q', 0xc0d6d33d, 0xc11b8644},
+{0, 0xc0d6d33d, 0xc1e94966},
+{'q', 0x00000000, 0xc21e5259},
+{0, 0x41dea847, 0xc21e5259},
+{'q', 0x41099f54, 0x00000000},
+{0, 0x41632204, 0x4044ec40},
+{'9', 0x0018002c, 0x0050004a},
+{'l', 0x3e0f3800, 0x00000000},
+{'8', 0xc702f000, 0xd404d702},
+{'l', 0x41419100, 0x00000000},
+{'9', 0x0021fffd, 0x00a5fffd},
+{'l', 0x00000000, 0x42ab77f2},
+{'l', 0xc149660c, 0xb6800000},
+{'4', 0xff0b0000, 0xffa50002},
+{'l', 0xbe0f3700, 0x00000000},
+{'q', 0xc071adb0, 0x40ef70c9},
+{0, 0xc114cfac, 0x412b3056},
+{'9', 0x0019ffd4, 0x0019ff8d},
+{'m', 0x41bc880e, 0xc2208f37},
+{'q', 0x00000000, 0xc16c157c},
+{0, 0xc09a67d0, 0xc1af1adc},
+{'q', 0xc09a67d8, 0xc0e44070},
+{0, 0xc1762764, 0xc0e44070},
+{'q', 0xc1194966, 0x00000000},
+{0, 0xc15c6b6a, 0x40e44070},
+{'q', 0xc0864408, 0x40e44078},
+{0, 0xc0864408, 0x41b5d176},
+{'q', 0x00000000, 0x417dfc6a},
+{0, 0x40864408, 0x41b5d174},
+{'q', 0x408880e4, 0x40db4cf8},
+{0, 0x415a2e8a, 0x40db4cf8},
+{'q', 0x412b3058, 0x00000000},
+{0, 0x41786444, 0xc0f3ea84},
+{'q', 0x409a67d0, 0xc0f3ea84},
+{0, 0x409a67d0, 0xc1b660ab},
+{'@', 0x00000072, 0x00002fb1},/*        r        x-advance: 47.691406 */
+{'M', 0x411ee191, 0x00000000},
+{'l', 0x00000000, 0xc2682af7},
+{'9', 0xffc10000, 0xff74fffd},
+{'l', 0x413e35b5, 0x00000000},
+{'9', 0x00660004, 0x007b0004},
+{'l', 0x3e8f3780, 0x00000000},
+{'8', 0x9637b318, 0xe458e41f},
+{'9', 0x00000014, 0x00050028},
+{'l', 0x00000000, 0x41389d88},
+{'8', 0xfbcbfbec, 0x36a100c2},
+{'9', 0x0035ffdf, 0x009affdf},
+{'l', 0x00000000, 0x421dc322},
+{'l', 0xc149660b, 0x00000000},
+{'@', 0x00000073, 0x0000479b},/*        s        x-advance: 71.605469 */
+{'M', 0x4284ddfc, 0xc1a745d1},
+{'q', 0x00000000, 0x412b3055},
+{0, 0xc101ca48, 0x41840729},
+{'q', 0xc100abdc, 0x40b9bbf8},
+{0, 0xc1b4b306, 0x40b9bbf8},
+{'q', 0xc1620394, 0xb4000000},
+{0, 0xc1ae8ba2, 0xc093b13c},
+{'9', 0xffdbffc4, 0xff8cffb1},
+{'l', 0x4131e6f0, 0xc00abdc0},
+{'8', 0x4735300c, 0x166f1628},
+{'8', 0xe96f004c, 0xba23e923},
+{'8', 0xc6e8dd00, 0xdcb1eae8},
+{'l', 0xc11055f0, 0xc0182af8},
+{'q', 0xc12d6d34, 0xc0330560},
+{0, 0xc17745d0, 0xc0ae8ba0},
+{'8', 0xccc7ebdc, 0xb5ece2ec},
+{'q', 0x00000000, 0xc125982c},
+{0, 0x40eaf70c, 0xc17bbf8c},
+{'q', 0x40ed33ea, 0xc0ae8bb0},
+{0, 0x41ac4ec6, 0xc0ae8bb0},
+{'q', 0x4148479c, 0x00000000},
+{0, 0x419ee190, 0x408cfab0},
+{'9', 0x0023003b, 0x0071004a},
+{'l', 0xc1354240, 0x3fb30560},
+{'8', 0xc3d3d8f8, 0xeb9febdc},
+{'8', 0x149c00bc, 0x3ee014e0},
+{'8', 0x2a0d1900, 0x1c27100d},
+{'q', 0x40525980, 0x3fbbf8e0},
+{0, 0x415d89d8, 0x4081ca48},
+{'q', 0x41200000, 0x40211e70},
+{0, 0x41667d50, 0x4095ee20},
+{'8', 0x25371023, 0x301f1414},
+{'q', 0x3fb30540, 0x4056d340},
+{0, 0x3fb30540, 0x40f62764},
+{'@', 0x00000074, 0x000027ca},/*        t        x-advance: 39.789062 */
+{'M', 0x421af70c, 0xbf0f377f},
+{'q', 0xc0c72928, 0x3fd6d33e},
+{0, 0xc14ba2e6, 0x3fd6d33e},
+{'9', 0x0000ff88, 0xff77ff88},
+{'l', 0x00000000, 0xc249f542},
+{'l', 0xc10bdc32, 0x00000000},
+{'l', 0xb4800000, 0xc11292d0},
+{'l', 0x4113b13b, 0x00000000},
+{'l', 0x406d33e8, 0xc1876274},
+{'l', 0x41064408, 0x00000000},
+{'l', 0x00000000, 0x41876274},
+{'l', 0x415fc6b6, 0x00000000},
+{'4', 0x00490000, 0x0000ff91},
+{'l', 0x00000000, 0x423f0c88},
+{'8', 0x3d0d2b00, 0x1131110e},
+{'q', 0x40211e78, 0x00000000},
+{0, 0x40e8ba2c, 0xbf7aa120},
+{'l', 0x00000000, 0x4114cfaa},
+{'@', 0x00000075, 0x00004fa6},/*        u        x-advance: 79.648438 */
+{'M', 0x41afaa12, 0xc2975424},
+{'l', 0x00000000, 0x423fe35c},
+{'8', 0x5c0b3b00, 0x2f25210b},
+{'q', 0x404ddfc8, 0x3fe8ba30},
+{0, 0x41170c8a, 0x3fe8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41655ee0, 0xc0c7292c},
+{'9', 0xffcf0029, 0xff760029},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x426e0abe},
+{'9', 0x00690000, 0x00810003},
+{'l', 0xc13e35b8, 0x00000000},
+{'8', 0xf1fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc4ffff},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc08abdc0, 0x40faa11f},
+{0, 0xc1211e70, 0x4131e6f0},
+{'q', 0xc0b54238, 0x404ddfc8},
+{0, 0xc1620394, 0x404ddfc8},
+{'q', 0xc147292c, 0xb4000000},
+{0, 0xc1920394, 0xc0c4ec4f},
+{'9', 0xffcfffd3, 0xff5dffd3},
+{'l', 0x00000000, 0xc249ada7},
+{'l', 0x414a847a, 0x00000000},
+{'@', 0x00000076, 0x0000479b},/*        v        x-advance: 71.605469 */
+{'M', 0x422b77f2, 0x00000000},
+{'l', 0xc16e525c, 0x00000000},
+{'4', 0xfda3ff25, 0x0000006b},
+{'l', 0x41852598, 0x4244ec4f},
+{'9', 0x00160007, 0x00840026},
+{'l', 0x401ca4b0, 0xc102e8ba},
+{'l', 0x402e8ba0, 0xc104072a},
+{'l', 0x41899f54, 0xc2457b86},
+{'l', 0x4155b4d0, 0x00000000},
+{'l', 0xc1e20394, 0x42975424},
+{'@', 0x00000077, 0x0000676d},/*        w        x-advance: 103.425781 */
+{'M', 0x42a43220, 0x00000000},
+{'4', 0x0000ff8c, 0xfe55ff97},
+{'l', 0xc0211e60, 0xc13d1744},
+{'q', 0xbf211e80, 0x40496600},
+{0, 0xbffaa120, 0x4111745c},
+{'9', 0x002efff6, 0x01c1ff8e},
+{'l', 0xc168ba2e, 0x00000000},
+{'4', 0xfda3ff57, 0x00000063},
+{'l', 0x414cc158, 0x424d982c},
+{'9', 0x000d0003, 0x006e0018},
+{'l', 0x3f982af0, 0xc0a5982a},
+{'l', 0x417cddfe, 0xc270479c},
+{'l', 0x4157f1ac, 0x00000000},
+{'l', 0x415377f4, 0x424fd50a},
+{'l', 0x404ddfc0, 0x4154965e},
+{'l', 0x400abdc0, 0xc11b8644},
+{'l', 0x41655ee0, 0xc25e1910},
+{'l', 0x4144ec50, 0x00000000},
+{'l', 0xc1ad6d34, 0x42975424},
+{'@', 0x00000078, 0x0000479b},/*        x        x-advance: 71.605469 */
+{'M', 0x42600e52, 0x00000000},
+{'l', 0xc1a2cc14, 0xc1f86440},
+{'l', 0xc1a3ea86, 0x41f86440},
+{'l', 0xc159101b, 0x00000000},
+{'l', 0x41d76276, 0xc21b8644},
+{'l', 0xc1cd508f, 0xc2132204},
+{'l', 0x415ea848, 0x00000000},
+{'l', 0x41970c89, 0x41eb8646},
+{'l', 0x4195ee18, 0xc1eb8646},
+{'l', 0x4160e528, 0x00000000},
+{'l', 0xc1cd5090, 0x421292cd},
+{'l', 0x41da2e8c, 0x421c157b},
+{'l', 0xc160e528, 0x00000000},
+{'@', 0x00000079, 0x0000479b},/*        y        x-advance: 71.605469 */
+{'M', 0x4155b4d0, 0x41edc322},
+{'9', 0x0000ffd7, 0xfffaffbb},
+{'l', 0x35000000, 0xc1170c88},
+{'q', 0x402a11e6, 0x3ed6d340},
+{0, 0x40bbf8d7, 0x3ed6d340},
+{'9', 0x0000005d, 0xff760094},
+{'l', 0x3f982af0, 0xc0407294},
+{'4', 0xfda6ff10, 0x0000006b},
+{'l', 0x417f1adb, 0x422745d2},
+{'8', 0x13060702, 0x48190a03},
+{'9', 0x003e0015, 0x00450016},
+{'l', 0x409ca4b8, 0xc15c6b6a},
+{'4', 0xfe7f0084, 0x0000006a},
+{'l', 0xc1e8ba30, 0x42975424},
+{'q', 0xc095ee18, 0x41419102},
+{0, 0xc10bdc34, 0x419055ee},
+{'8', 0x46b82ee0, 0x16a816d9},
+{'@', 0x0000007a, 0x0000479b},/*        z        x-advance: 71.605469 */
+{'M', 0x40b9bbf9, 0x00000000},
+{'l', 0x00000000, 0xc1194966},
+{'l', 0x42293b14, 0xc261745c},
+{'l', 0xc21fb864, 0x00000000},
+{'l', 0xb6000000, 0xc11b8648},
+{'l', 0x425b4cfa, 0x00000000},
+{'l', 0x36800000, 0x41194968},
+{'l', 0xc22982b0, 0x4261745d},
+{'l', 0x422f6277, 0x00000000},
+{'l', 0x00000000, 0x411b8644},
+{'l', 0xc26aaf71, 0x00000000},
+{'@', 0x0000007b, 0x00002fd5},/*        {        x-advance: 47.832031 */
+{'M', 0x420f7f1b, 0x41edc322},
+{'q', 0xc10e1912, 0x00000000},
+{0, 0xc15b4cfc, 0xc0ac4ec4},
+{'9', 0xffd5ffda, 0xff88ffda},
+{'l', 0x00000000, 0xc1c9f542},
+{'8', 0x9fe3bf00, 0xdda6e0e3},
+{'l', 0xb4800000, 0xc10e1910},
+{'8', 0xde5afe3c, 0x9f1de01d},
+{'l', 0x00000000, 0xc1ca847a},
+{'q', 0x00000000, 0xc11dc320},
+{0, 0x4093b138, 0xc172cc18},
+{'9', 0xffd60025, 0xffd6006e},
+{'4', 0x0000004b, 0x00480000},
+{'l', 0xc08cfaa0, 0x00000000},
+{'8', 0x1eb800ce, 0x5aeb1deb},
+{'l', 0x00000000, 0x41c7292c},
+{'8', 0x5be33400, 0x31b226e3},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x314e0b31, 0x5c1d261d},
+{'l', 0x00000000, 0x41c7b864},
+{'8', 0x5a153b00, 0x1e481e15},
+{'l', 0x408cfaa0, 0x00000000},
+{'l', 0x00000000, 0x411055ee},
+{'l', 0xc1170c88, 0x00000000},
+{'@', 0x0000007c, 0x00002533},/*        |        x-advance: 37.199219 */
+{'M', 0x414cc158, 0x41f2cc15},
+{'l', 0x00000000, 0xc3062039},
+{'l', 0x4139bbf8, 0x00000000},
+{'l', 0x00000000, 0x43062039},
+{'l', 0xc139bbf8, 0x36000000},
+{'@', 0x0000007d, 0x00002fd5},/*        }        x-advance: 47.832031 */
+{'M', 0x40d25983, 0x41a5982b},
+{'8', 0xe2480032, 0xa616e216},
+{'l', 0x00000000, 0xc1c7b864},
+{'8', 0xa41dca00, 0xcf4eda1d},
+{'l', 0x00000000, 0xbe0f3800},
+{'8', 0xd0b2f5d0, 0xa4e3dae3},
+{'l', 0x00000000, 0xc1c7292c},
+{'8', 0xa6eac400, 0xe2b8e2eb},
+{'4', 0x0000ffdf, 0xffb80000},
+{'l', 0x4113b13b, 0x00000000},
+{'q', 0x411292cb, 0x00000000},
+{0, 0x415c6b69, 0x40aa11e0},
+{'9', 0x002a0025, 0x00790025},
+{'l', 0x00000000, 0x41ca847a},
+{'8', 0x611d4000, 0x225b201d},
+{'l', 0x00000000, 0x410e1910},
+{'8', 0x22a402c2, 0x61e320e3},
+{'l', 0x00000000, 0x41c9f542},
+{'q', 0x00000000, 0x411a67d6},
+{0, 0xc09a67d4, 0x4171ada8},
+{'9', 0x002bffda, 0x002bff93},
+{'l', 0xc113b13b, 0x00000000},
+{'l', 0xb4800000, 0xc11055ee},
+{'l', 0x40864408, 0x00000000},
+{'@', 0x0000007e, 0x000053a2},/*        ~        x-advance: 83.632812 */
+{'M', 0x426c157b, 0xc21aaf71},
+{'8', 0xf4b100da, 0xe6aff4d8},
+{'q', 0xc11055f0, 0xc0496610},
+{0, 0xc172cc16, 0xc0496610},
+{'8', 0x0bbb00db, 0x25bc0be0},
+{'l', 0x35000000, 0xc1200000},
+{'q', 0x40f8643f, 0xc0bbf8d8},
+{0, 0x41932203, 0xc0bbf8d8},
+{'8', 0x0740001d, 0x216c0723},
+{'8', 0x10320611, 0x083a0821},
+{'9', 0x00000048, 0xffcd0088},
+{'l', 0x00000000, 0x4126b698},
+{'8', 0x22bf17e0, 0x0ab00ae0},
+{'@', 0x000000a0, 0x000027ca},/*                 x-advance: 39.789062 */
+{'@', 0x000000a1, 0x00002fb1},/*        ¡        x-advance: 47.691406 */
+{'M', 0x4194cfaa, 0xc23f9bbf},
+{'l', 0x4125982a, 0x00000000},
+{'4', 0x0236000d, 0x0000ff93},
+{'6', 0xfdca000d, 0xff220061},
+{'l', 0x00000000, 0x4160e528},
+{'l', 0xc159101c, 0x00000000},
+{'l', 0x00000000, 0xc160e528},
+{'l', 0x4159101c, 0x00000000},
+{'@', 0x000000a2, 0x00004fa6},/*        ¢        x-advance: 79.648438 */
+{'M', 0x4226b69a, 0xc19af70c},
+{'8', 0xe3590035, 0xa72ce324},
+{'l', 0x414ba2ec, 0x3f56d340},
+{'q', 0xbfaa1200, 0x41211e70},
+{0, 0xc0ff1ae0, 0x418377f2},
+{'9', 0x0032ffcb, 0x003aff79},
+{'4', 0x005d0000, 0x0000ffbb},
+{'l', 0x00000000, 0xc13bf8d7},
+{'q', 0xc15ea846, 0xbfa11e70},
+{0, 0xc1a8643f, 0xc133055e},
+{'q', 0xc0e44074, 0xc1200000},
+{0, 0xc0e44074, 0xc1dfc6b6},
+{'q', 0x00000000, 0xc18d89d8},
+{0, 0x40e44074, 0xc1dd89d8},
+{'9', 0xffb00039, 0xffa600a8},
+{'4', 0xffaa0000, 0x00000045},
+{'l', 0x00000000, 0x412d6d30},
+{'q', 0x41200000, 0x3f864400},
+{0, 0x41825984, 0x40db4d00},
+{'9', 0x002e0032, 0x007c0041},
+{'l', 0xc14efe38, 0x3f7aa100},
+{'8', 0xb0d9cef9, 0xe3a6e3e1},
+{'q', 0xc11ffffe, 0x00000000},
+{0, 0xc1679bbe, 0x40d49660},
+{'q', 0xc08f3780, 0x40d49660},
+{0, 0xc08f3780, 0x41b3055e},
+{'q', 0x00000000, 0x4171ada4},
+{0, 0x40982af8, 0x41b3055e},
+{'q', 0x40982af4, 0x40e8ba30},
+{0, 0x41655ee2, 0x40e8ba30},
+{'@', 0x000000a3, 0x00004fa6},/*        £        x-advance: 79.648438 */
+{'M', 0x429a67d5, 0xc1adfc6b},
+{'q', 0xbf982b00, 0x4127d508},
+{0, 0xc0eaf710, 0x41813b13},
+{'9', 0x002cffcf, 0x002cff7f},
+{'4', 0x0000fe7a, 0xffaa0000},
+{'q', 0x40c7292d, 0xc04ddfc4},
+{0, 0x4113b13a, 0xc10cfaa1},
+{'9', 0xffd40018, 0xff900018},
+{'0', 0x0098b000, 0x0068b800},
+{'l', 0x00000000, 0xc19ca4b4},
+{'q', 0x00000000, 0xc15a2e88},
+{0, 0x40e67d50, 0xc1a508f4},
+{'q', 0x40e67d50, 0xc0e20390},
+{0, 0x41a745d1, 0xc0e20390},
+{'q', 0x412479bc, 0x00000000},
+{0, 0x418a2e8c, 0x408880e0},
+{'9', 0x00210037, 0x005e004a},
+{'l', 0xc142af74, 0x407f1ae0},
+{'8', 0xc8d5ddf5, 0xebbaebe2},
+{'8', 0x20a100c1, 0x65e11fe1},
+{'l', 0x00000000, 0x41a11e70},
+{'l', 0x41e44072, 0x00000000},
+{'4', 0x00480000, 0x0000ff1c},
+{'l', 0x00000000, 0x410cfaa4},
+{'q', 0x00000000, 0x41052596},
+{0, 0xc04ddfc0, 0x416d33ea},
+{'9', 0x0034ffe7, 0x004affbc},
+{'l', 0x42071ada, 0x00000000},
+{'q', 0x4142af70, 0x00000000},
+{0, 0x41632200, 0xc144ec4e},
+{'l', 0x413660b0, 0x3fa11e70},
+{'@', 0x000000a4, 0x00004fa6},/*        ¤        x-advance: 79.648438 */
+{'M', 0x41194966, 0xc23f5424},
+{'9', 0xffb30000, 0xff74002b},
+{'4', 0xffc9ffc9, 0xffc7003a},
+{'l', 0x40dd89da, 0x40e203a0},
+{'q', 0x40ff1ad8, 0xc0b77f20},
+{0, 0x418e1910, 0xc0b77f20},
+{'9', 0x0000004c, 0x002c008c},
+{'4', 0xffca0036, 0x003a003a},
+{'l', 0xc0d6d340, 0x40d6d340},
+{'q', 0x40b30560, 0x4102e8b8},
+{0, 0x40b30560, 0x418cfaa0},
+{'9', 0x004d0000, 0x008cffd3},
+{'4', 0x00370037, 0x003affc7},
+{'l', 0xc0e20398, 0xc0e20396},
+{'q', 0xc0ff1ae0, 0x40ae8ba4},
+{0, 0xc18c6b6a, 0x40ae8ba4},
+{'9', 0x0000ffb0, 0xffd4ff74},
+{'4', 0x003affc6, 0xffc6ffc7},
+{'l', 0x40e44072, 0xc0e44070},
+{'9', 0xffc1ffd5, 0xff74ffd5},
+{'m', 0x412c4ec4, 0xbe0f3700},
+{'8', 0x6f2e4100, 0x2d6e2d2e},
+{'8', 0xd36e003f, 0x912ed32e},
+{'8', 0x91d2bf00, 0xd393d3d2},
+{'8', 0x2d9200c1, 0x6fd22dd2},
+{'@', 0x000000a5, 0x00004fa6},/*        ¥        x-advance: 79.648438 */
+{'M', 0x4249660b, 0xc2465259},
+{'l', 0x41b39496, 0x00000000},
+{'l', 0x00000000, 0x410bdc30},
+{'l', 0xc1d64408, 0x00000000},
+{'l', 0x00000000, 0x412c4ec6},
+{'l', 0x41d64408, 0x00000000},
+{'l', 0x00000000, 0x410e1910},
+{'l', 0xc1d64408, 0x00000000},
+{'l', 0x00000000, 0x41a982af},
+{'l', 0xc147292c, 0x00000000},
+{'l', 0x00000000, 0xc1a982af},
+{'l', 0xc1d52598, 0x00000000},
+{'l', 0x00000000, 0xc10e1910},
+{'l', 0x41d52598, 0x00000000},
+{'l', 0x3e0f3800, 0xc12c4ec6},
+{'l', 0xc1d64408, 0x00000000},
+{'l', 0x00000000, 0xc10bdc30},
+{'l', 0x41b3055f, 0x00000000},
+{'l', 0xc1eb8644, 0xc243cddf},
+{'l', 0x415ea847, 0x00000000},
+{'l', 0x41cf8d6e, 0x4234faa0},
+{'l', 0x41d1ca4a, 0xc234faa0},
+{'l', 0x415ea848, 0x00000000},
+{'l', 0xc1ec157a, 0x4243cddf},
+{'@', 0x000000a6, 0x00002533},/*        ¦        x-advance: 37.199219 */
+{'M', 0x414cc158, 0x41f2cc15},
+{'l', 0x00000000, 0xc259e6f0},
+{'4', 0x0000005c, 0x01b30000},
+{'6', 0x0000ffa4, 0xfd830000},
+{'l', 0x00000000, 0xc2599f54},
+{'l', 0x4139bbf8, 0x00000000},
+{'l', 0x00000000, 0x42599f54},
+{'l', 0xc139bbf8, 0x00000000},
+{'@', 0x000000a7, 0x00004fa6},/*        §        x-advance: 79.648438 */
+{'M', 0x422479bc, 0xc2cf8d6d},
+{'q', 0x41419100, 0x00000000},
+{0, 0x419c157c, 0x4095ee20},
+{'9', 0x0024003b, 0x006b004a},
+{'l', 0xc13423d0, 0x3fb30580},
+{'q', 0xbff1ada0, 0xc127d508},
+{0, 0xc18cfaa0, 0xc127d508},
+{'8', 0x169600bb, 0x3ddd15dd},
+{'8', 0x2e101a00, 0x222f1310},
+{'q', 0x407aa120, 0x3fe8ba00},
+{0, 0x41501ca4, 0x407f1ac0},
+{'q', 0x412479bc, 0x401ca4c0},
+{0, 0x417bbf8c, 0x40ac4ed0},
+{'8', 0x3743162b, 0x4e182118},
+{'8', 0x61df3700, 0x37a829df},
+{'8', 0x3f5a1a3e, 0x561c231c},
+{'q', 0x00000000, 0x4125982b},
+{0, 0xc101ca4c, 0x41825983},
+{'q', 0xc100abdc, 0x40bbf8d6},
+{0, 0xc1b5d174, 0x40bbf8d6},
+{'q', 0xc169d89e, 0x00000000},
+{0, 0xc1b27628, 0xc093b13c},
+{'9', 0xffdbffc4, 0xff8dffb0},
+{'l', 0x413423ce, 0xc00abdc4},
+{'q', 0x3fb30560, 0x40c9660a},
+{0, 0x40c4ec50, 0x411292cc},
+{'q', 0x40982af4, 0x40377f1b},
+{0, 0x416e525a, 0x40377f1b},
+{'q', 0x41182af4, 0x00000000},
+{0, 0x4168ba2c, 0xc044ec4f},
+{'8', 0xba28e828, 0xcbeee100},
+{'q', 0xc013b140, 0xc02e8ba0},
+{0, 0xc0d49660, 0xc0982af8},
+{'q', 0xc08880e8, 0xc001ca48},
+{0, 0xc16d33ec, 0xc093b13c},
+{'q', 0xc159101a, 0xc0496608},
+{0, 0xc19ca4b2, 0xc1099f54},
+{'8', 0x96d1d5d1, 0xa522cf00},
+{'8', 0xc65dd722, 0xc9abefcb},
+{'q', 0xc0762764, 0xc095ee20},
+{0, 0xc0762764, 0xc12b3058},
+{'q', 0x00000000, 0xc11b8648},
+{0, 0x40eaf70a, 0xc171ada8},
+{'9', 0xffd5003b, 0xffd500ac},
+{'m', 0x419b8644, 0x4265a67d},
+{'q', 0x00000000, 0xc0a11e70},
+{0, 0xc09ca4b8, 0xc10abdc4},
+{'q', 0xc09a67d0, 0xc068ba30},
+{0, 0xc189101c, 0xc0d01ca0},
+{'8', 0x219f03c4, 0x4cdd1ddd},
+{'8', 0x30101b00, 0x232f1410},
+{'8', 0x21670f1f, 0xe368ff42},
+{'q', 0x40982af8, 0xc0644070},
+{0, 0x40982af8, 0xc1182af8},
+{'@', 0x000000a8, 0x00002fb1},/*        ¨        x-advance: 47.691406 */
+{'M', 0x4049660b, 0xc2aa7d50},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000a9, 0x00006986},/*        ©        x-advance: 105.523438 */
+{'M', 0x42ce92cc, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1746, 0xc0e20395},
+{0, 0xc1932204, 0xc1955ee1},
+{'q', 0xc0d01ca2, 0xc13ada66},
+{0, 0xc0d01ca2, 0xc1c7292d},
+{'q', 0xb4800000, 0xc157f1ac},
+{0, 0x40d9101c, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0cddfc0, 0x00000000},
+{'q', 0x00000000, 0xc13d1744},
+{0, 0xc0bbf8e0, 0xc1af1adc},
+{'q', 0xc0bbf8d0, 0xc1223cd8},
+{0, 0xc1813b14, 0xc180abdc},
+{'q', 0xc1235b48, 0xc0be35b0},
+{0, 0xc1b0c880, 0xc0be35b0},
+{'q', 0xc13bf8d8, 0x00000000},
+{0, 0xc1afaa12, 0x40be35b0},
+{'q', 0xc1235b4c, 0x40bbf8e0},
+{0, 0xc180abdc, 0x4180abdc},
+{'q', 0xc0bbf8d6, 0x41235b50},
+{0, 0xc0bbf8d6, 0x41af1adc},
+{'q', 0x00000000, 0x413d1748},
+{0, 0x40bbf8d6, 0x41b0394a},
+{'q', 0x40be35b4, 0x41235b4c},
+{0, 0x4180abdc, 0x4180abdc},
+{'q', 0x41223ce0, 0x40bbf8d5},
+{0, 0x41afaa12, 0x40bbf8d5},
+{'q', 0x413d1748, 0x00000000},
+{0, 0x41b0c880, 0xc0bbf8d7},
+{'q', 0x412479c0, 0xc0bbf8d6},
+{0, 0x41813b14, 0xc180abdc},
+{'9', 0xffaf002e, 0xff50002e},
+{'m', 0xc2781ca5, 0xbe0f3700},
+{'q', 0x00000000, 0x412d6d34},
+{0, 0x409ee190, 0x4186d33e},
+{'q', 0x409ee190, 0x40be35b4},
+{0, 0x415b4cf8, 0x40be35b4},
+{'9', 0x00000058, 0xffa90082},
+{'l', 0x4100abe0, 0x401ca4b0},
+{'q', 0xc08abdc0, 0x41076276},
+{0, 0xc12479c0, 0x41419102},
+{'q', 0xc0bbf8d0, 0x4068ba30},
+{0, 0xc160e524, 0x4068ba30},
+{'q', 0xc1525980, 0x00000000},
+{0, 0xc1a35b4c, 0xc0fcddfc},
+{'q', 0xc0e8ba30, 0xc0fcde00},
+{0, 0xc0e8ba30, 0xc1b157b8},
+{'q', 0x00000000, 0xc1632204},
+{0, 0x40dfc6b8, 0xc1af1ada},
+{'q', 0x40dfc6b8, 0xc0f86440},
+{0, 0x41a1ada6, 0xc0f86440},
+{'9', 0x00000088, 0x007400be},
+{'l', 0xc0ff1ae0, 0x4013b140},
+{'8', 0xc7cedaef, 0xedb6ede0},
+{'q', 0xc10e1910, 0x00000000},
+{0, 0xc15a2e8c, 0x40b54230},
+{'q', 0xc095ee18, 0x40b30560},
+{0, 0xc095ee18, 0x4185259a},
+{'@', 0x000000aa, 0x00003501},/*        ª        x-advance: 53.003906 */
+{'M', 0x4191745d, 0xc2361910},
+{'8', 0xe0a100c4, 0xa6dde0dd},
+{'q', 0xb4800000, 0xc101ca4c},
+{0, 0x40ae8ba2, 0xc147292c},
+{'9', 0xffde002c, 0xffdd0082},
+{'4', 0xfffe0063, 0xffdf0000},
+{'8', 0xbeedd300, 0xecc0eced},
+{'8', 0x10c400db, 0x3ae510ea},
+{'l', 0xc126b69a, 0xbf330580},
+{'q', 0x3f8f3784, 0xc0ed33f0},
+{0, 0x40d49662, 0xc139bbf8},
+{'q', 0x40b3055e, 0xc0864410},
+{0, 0x4169d89d, 0xc0864410},
+{'q', 0x41223cde, 0x00000000},
+{0, 0x41762762, 0x408cfaa0},
+{'9', 0x0022002a, 0x0068002a},
+{'l', 0x00000000, 0x41ac4ec4},
+{'8', 0x2e072000, 0x0d1b0d07},
+{'9', 0x0000000a, 0xfffc0018},
+{'l', 0x00000000, 0x40e8ba30},
+{'8', 0x07d207e5, 0xebc100d8},
+{'9', 0xffebffea, 0xffc7ffe8},
+{'l', 0xbe8f3780, 0x00000000},
+{'9', 0x0052ffd8, 0x0052ff6f},
+{'m', 0x402e8ba0, 0xc0f86440},
+{'8', 0xdf550032, 0xb323df23},
+{'4', 0xffdc0000, 0x0002ffb3},
+{'8', 0x15a703be, 0x36e912e9},
+{'q', 0x00000000, 0x41076278},
+{0, 0x41099f53, 0x41076278},
+{'@', 0x000000ab, 0x00004fa6},/*        «        x-advance: 79.648438 */
+{'M', 0x4277d509, 0xc11dc322},
+{'l', 0xc1bd1746, 0xc1cc3221},
+{'l', 0x00000000, 0xc08cfaa0},
+{'l', 0x41bd1746, 0xc1cf8d6e},
+{'l', 0x413bf8d4, 0x00000000},
+{'l', 0x00000000, 0x400abdd0},
+{'l', 0xc1bd1744, 0x41d01ca4},
+{'4', 0x00cd00be, 0x00100000},
+{'6', 0x0000ffa1, 0x0000fefb},
+{'l', 0xc1bbf8d8, 0xc1cc3221},
+{'l', 0x35000000, 0xc08cfaa0},
+{'l', 0x41bbf8d7, 0xc1cf8d6e},
+{'l', 0x413ada66, 0x00000000},
+{'l', 0x00000000, 0x400abdd0},
+{'l', 0xc1bb699e, 0x41d01ca4},
+{'l', 0x41bc880e, 0x41cd5090},
+{'l', 0x00000000, 0x4001ca48},
+{'l', 0xc13d1746, 0x00000000},
+{'@', 0x000000ac, 0x000053a2},/*        ¬        x-advance: 83.632812 */
+{'M', 0x4284ddfc, 0xc149660b},
+{'l', 0x00000000, 0xc1ef70c8},
+{'l', 0xc26dc321, 0x00000000},
+{'l', 0xb5800000, 0xc1235b4c},
+{'l', 0x428b292d, 0x00000000},
+{'l', 0x00000000, 0x42208f37},
+{'l', 0xc1223ce0, 0x35800000},
+{'@', 0x000000ad, 0x00002fb1},/*        ­        x-advance: 47.691406 */
+{'M', 0x40cba2e9, 0xc201ca4b},
+{'l', 0x00000000, 0xc1330560},
+{'l', 0x420bdc32, 0x00000000},
+{'l', 0x00000000, 0x41330560},
+{'l', 0xc20bdc32, 0x00000000},
+{'@', 0x000000ae, 0x00006986},/*        ®        x-advance: 105.523438 */
+{'M', 0x42ce92cc, 0xc245c322},
+{'q', 0x00000000, 0x4157f1b0},
+{0, 0xc0d91020, 0x41ca847a},
+{'q', 0xc0d6d340, 0x413bf8d6},
+{0, 0xc1944070, 0x41944072},
+{'q', 0xc13bf8d8, 0x40d6d340},
+{0, 0xc1c9f544, 0x40d6d340},
+{'q', 0xc15c6b68, 0xb4000000},
+{0, 0xc1cd508f, 0xc0dfc6b7},
+{'q', 0xc13d1746, 0xc0e20395},
+{0, 0xc1932204, 0xc1955ee1},
+{'q', 0xc0d01ca2, 0xc13ada66},
+{0, 0xc0d01ca2, 0xc1c7292d},
+{'q', 0xb4800000, 0xc157f1ac},
+{0, 0x40d9101c, 0xc1c9f540},
+{'q', 0x40d9101c, 0xc13bf8d8},
+{0, 0x41944072, 0xc1944074},
+{'q', 0x413bf8d8, 0xc0d91020},
+{0, 0x41c9f542, 0xc0d91020},
+{'q', 0x41591020, 0x00000000},
+{0, 0x41ca8478, 0x40db4d00},
+{'q', 0x413d1748, 0x40d91020},
+{0, 0x41944074, 0x4193b13c},
+{'9', 0x005d0035, 0x00c90035},
+{'m', 0xc0cddfc0, 0x00000000},
+{'q', 0x00000000, 0xc13d1744},
+{0, 0xc0bbf8e0, 0xc1af1adc},
+{'q', 0xc0bbf8d0, 0xc1223cd8},
+{0, 0xc1813b14, 0xc180abdc},
+{'q', 0xc1235b48, 0xc0be35b0},
+{0, 0xc1b0c880, 0xc0be35b0},
+{'q', 0xc13bf8d8, 0x00000000},
+{0, 0xc1afaa12, 0x40be35b0},
+{'q', 0xc1235b4c, 0x40bbf8e0},
+{0, 0xc180abdc, 0x4180abdc},
+{'q', 0xc0bbf8d6, 0x41235b50},
+{0, 0xc0bbf8d6, 0x41af1adc},
+{'q', 0x00000000, 0x413d1748},
+{0, 0x40bbf8d6, 0x41b0394a},
+{'q', 0x40be35b4, 0x41235b4c},
+{0, 0x4180abdc, 0x4180abdc},
+{'q', 0x41223ce0, 0x40bbf8d5},
+{0, 0x41afaa12, 0x40bbf8d5},
+{'q', 0x413d1748, 0x00000000},
+{0, 0x41b0c880, 0xc0bbf8d7},
+{'q', 0x412479c0, 0xc0bbf8d6},
+{0, 0x41813b14, 0xc180abdc},
+{'9', 0xffaf002e, 0xff50002e},
+{'m', 0xc1f08f38, 0x41e9d89e},
+{'l', 0xc15ea848, 0xc1bbf8d8},
+{'l', 0xc13423d0, 0x00000000},
+{'l', 0x00000000, 0x41bbf8d8},
+{'4', 0x0000ffb9, 0xfe300000},
+{'l', 0x41abbf8e, 0x00000000},
+{'q', 0x411ee18c, 0x00000000},
+{0, 0x4172cc14, 0x408cfaa0},
+{'8', 0x612a232a, 0x5be33900},
+{'9', 0x0022ffe3, 0x002cffb4},
+{'4', 0x00c3007b, 0x0000ffaf},
+{'m', 0xbf7aa180, 0xc225982b},
+{'8', 0xc6e6da00, 0xecb9ece6},
+{'4', 0x0000ffa1, 0x00a80000},
+{'l', 0x414ba2e8, 0x00000000},
+{'8', 0xe944002c, 0xbe17e817},
+{'@', 0x000000af, 0x00004f17},/*        ¯        x-advance: 79.089844 */
+{'M', 0x42a08f37, 0xc2cb13b1},
+{'l', 0xc2a2efe3, 0x00000000},
+{'l', 0x35900000, 0xc0d25980},
+{'l', 0x42a2efe3, 0x00000000},
+{'l', 0x00000000, 0x40d25980},
+{'@', 0x000000b0, 0x00003945},/*        °        x-advance: 57.269531 */
+{'M', 0x4242af71, 0xc2a023ce},
+{'q', 0x00000000, 0x41052598},
+{0, 0xc0be35b8, 0x41620398},
+{'q', 0xc0bbf8d8, 0x40b9bbf8},
+{0, 0xc1620394, 0x40b9bbf8},
+{'q', 0xc104072a, 0x00000000},
+{0, 0xc1632204, 0xc0bbf8d8},
+{'q', 0xc0bbf8d6, 0xc0bbf8d0},
+{0, 0xc0bbf8d6, 0xc160e528},
+{'q', 0x00000000, 0xc102e8b8},
+{0, 0x40b9bbf8, 0xc160e520},
+{'q', 0x40bbf8d6, 0xc0bbf8e0},
+{0, 0x41644073, 0xc0bbf8e0},
+{'q', 0x41064408, 0x00000000},
+{0, 0x41632204, 0x40b9bc00},
+{'9', 0x002e002e, 0x0071002e},
+{'m', 0xc0f3ea88, 0x00000000},
+{'8', 0xb9e3d600, 0xe3bae3e4},
+{'8', 0x1db900d7, 0x47e41de4},
+{'8', 0x471d2900, 0x1d461d1d},
+{'8', 0xe3460029, 0xb91de31d},
+{'@', 0x000000b1, 0x00004e99},/*        ±        x-advance: 78.597656 */
+{'M', 0x4231e6f0, 0xc23e35b5},
+{'l', 0x00000000, 0x41dcfaa2},
+{'l', 0xc12479bc, 0x00000000},
+{'l', 0x00000000, 0xc1dcfaa2},
+{'l', 0xc1ed33eb, 0x00000000},
+{'l', 0x35000000, 0xc1223cdc},
+{'l', 0x41ed33eb, 0x00000000},
+{'l', 0x00000000, 0xc1dc6b68},
+{'l', 0x412479bc, 0x00000000},
+{'l', 0x00000000, 0x41dc6b68},
+{'4', 0x000000ed, 0x00510000},
+{'6', 0x0000ff13, 0x017cfec1},
+{'l', 0xb5c00000, 0xc1223cde},
+{'l', 0x428b292c, 0x00000000},
+{'l', 0x00000000, 0x41223cde},
+{'l', 0xc28b292c, 0x00000000},
+{'@', 0x000000b2, 0x00002fb1},/*        ²        x-advance: 47.691406 */
+{'M', 0x40407293, 0xc21d7b86},
+{'l', 0xbe0f3780, 0xc0e67d50},
+{'8', 0xb635da11, 0xb260dc24},
+{'8', 0xbb4eda36, 0xc118e118},
+{'8', 0xc9ecde00, 0xebc4ebed},
+{'8', 0x14c200da, 0x3ae314e8},
+{'l', 0xc114cfaa, 0xbf0f3780},
+{'q', 0x3f68ba28, 0xc0ef70d0},
+{0, 0x40d01ca4, 0xc1419100},
+{'q', 0x40b5423c, 0xc093b140},
+{0, 0x416af70d, 0xc093b140},
+{'q', 0x410e1910, 0x00000000},
+{0, 0x4160e524, 0x408abdc0},
+{'q', 0x40a7d508, 0x408880f0},
+{0, 0x40a7d508, 0x413f5428},
+{'q', 0x00000000, 0x412479b8},
+{0, 0xc1525982, 0x419f70c8},
+{'8', 0x4ca032bc, 0x32d919e5},
+{'l', 0x41f7d509, 0x00000000},
+{'l', 0x00000000, 0x40fcde00},
+{'l', 0xc227d509, 0x00000000},
+{'@', 0x000000b3, 0x00002fb1},/*        ³        x-advance: 47.691406 */
+{'M', 0x42339496, 0xc25e60ac},
+{'q', 0x00000000, 0x4101ca4c},
+{0, 0xc0ae8ba0, 0x4149660c},
+{'q', 0xc0ac4ec8, 0x408f3780},
+{0, 0xc17508f4, 0x408f3780},
+{'9', 0x0000ff60, 0xff82ff4f},
+{'l', 0x41182af8, 0xbf68ba40},
+{'8', 0x4c654c0a, 0xae590059},
+{'9', 0xffb40000, 0xffb4ff97},
+{'4', 0x0000ffde, 0xffc40000},
+{'l', 0x407f1ad8, 0x00000000},
+{'8', 0xec46002c, 0xc819ec19},
+{'8', 0xccecdf00, 0xedc4edec},
+{'8', 0x13c300da, 0x37e613e9},
+{'l', 0xc1170c88, 0xbf56d380},
+{'q', 0x3f68ba28, 0xc0f3ea80},
+{0, 0x40cba2e8, 0xc13d1748},
+{'q', 0x40b0c880, 0xc0864400},
+{0, 0x41667d50, 0xc0864400},
+{'q', 0x4111745e, 0x00000000},
+{0, 0x41644072, 0x40864400},
+{'8', 0x57292129, 0x48e82900},
+{'9', 0x001effe8, 0x0029ffb6},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x22500532, 0x4e1d1d1d},
+{'@', 0x000000b4, 0x00002fb1},/*        ´        x-advance: 47.691406 */
+{'M', 0x40a11e6f, 0xc2a7f8d7},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4172cc14, 0xc1a08f38},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d8a, 0x419b8644},
+{'l', 0xc0d25981, 0x00000000},
+{'@', 0x000000b5, 0x00005284},/*        µ        x-advance: 82.515625 */
+{'M', 0x411ca4b3, 0x41edc322},
+{'4', 0xfcb50000, 0x00000065},
+{'l', 0x00000000, 0x423fe35c},
+{'q', 0x00000000, 0x411a67d4},
+{0, 0x406d33f0, 0x4168ba2d},
+{'q', 0x4071ada0, 0x409a67d6},
+{0, 0x41419100, 0x409a67d6},
+{'q', 0x410f3780, 0x00000000},
+{0, 0x4160e528, 0xc0c2af70},
+{'9', 0xffd00028, 0xff750028},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x42644073},
+{'8', 0x3e0a2a00, 0x1321130a},
+{'9', 0x0000000d, 0xfffc001e},
+{'l', 0x00000000, 0x411055ee},
+{'8', 0x0bc10bdc, 0xe6b300ce},
+{'9', 0xffe6ffe6, 0xffaeffe3},
+{'l', 0xbe56d300, 0x00000000},
+{'q', 0xc0ed33e8, 0x4159101d},
+{0, 0xc1a745d2, 0x4159101d},
+{'8', 0xf5bc00db, 0xdfd1f5e2},
+{'l', 0x00000000, 0x42076276},
+{'l', 0xc149660b, 0x00000000},
+{'@', 0x000000b6, 0x00004cec},/*        ¶        x-advance: 76.921875 */
+{'M', 0x427745d1, 0xc2b6cc15},
+{'l', 0x00000000, 0x42dbb864},
+{'l', 0xc0faa120, 0xb6000000},
+{'l', 0x00000000, 0xc2dbb864},
+{'l', 0xc172cc14, 0x00000000},
+{'4', 0x036e0000, 0x0000ffc1},
+{'l', 0x00000000, 0xc285fc6b},
+{'q', 0xc13bf8d6, 0xb6800000},
+{0, 0xc1944072, 0xc0cddfd0},
+{'q', 0xc0d9101d, 0xc0d01ca8},
+{0, 0xc0d9101d, 0xc1932204},
+{'q', 0x00000000, 0xc13d1748},
+{0, 0x40db4cfb, 0xc193b13c},
+{'9', 0xffcb0037, 0xffcb0098},
+{'l', 0x421d7b86, 0x00000000},
+{'l', 0x00000000, 0x40e44070},
+{'l', 0xc11055ec, 0x00000000},
+{'@', 0x000000b7, 0x00002fb1},/*        ·        x-advance: 47.691406 */
+{'M', 0x4187f1ae, 0xc1f982af},
+{'l', 0x00000000, 0xc1762762},
+{'l', 0x415a2e8a, 0x00000000},
+{'l', 0x00000000, 0x41762762},
+{'l', 0xc15a2e8a, 0x00000000},
+{'@', 0x000000b8, 0x00002fb1},/*        ¸        x-advance: 47.691406 */
+{'M', 0x42071ada, 0x418d89d9},
+{'q', 0x00000000, 0x414a8478},
+{0, 0xc1994966, 0x414a8478},
+{'9', 0x0000ffe1, 0xfffeffce},
+{'l', 0x00000000, 0xc0db4cf8},
+{'8', 0x0330031b, 0xd3520052},
+{'8', 0xd5b6d500, 0x01e100e8},
+{'4', 0xff9b0024, 0x0000003b},
+{'l', 0xc02e8ba8, 0x40dfc6b6},
+{'8', 0x184e0134, 0x3c1a161a},
+{'@', 0x000000b9, 0x00002fb1},/*        ¹        x-advance: 47.691406 */
+{'M', 0x40b3055f, 0xc21d7b86},
+{'l', 0x00000000, 0xc0ef70c8},
+{'l', 0x416c157a, 0x00000000},
+{'l', 0x00000000, 0xc22d6d33},
+{'l', 0xc1620394, 0x411a67d0},
+{'l', 0x35000000, 0xc1064408},
+{'l', 0x416af70c, 0xc1194960},
+{'l', 0x41099f54, 0x00000000},
+{'l', 0x00000000, 0x424eb699},
+{'l', 0x41708f3a, 0x00000000},
+{'l', 0x00000000, 0x40ef70c8},
+{'l', 0xc21bcde0, 0x00000000},
+{'@', 0x000000ba, 0x0000344e},/*        º        x-advance: 52.304688 */
+{'M', 0x424a3cde, 0xc291bbf9},
+{'q', 0x00000000, 0x41525984},
+{0, 0xc0c4ec50, 0x41a23cde},
+{'q', 0xc0c4ec50, 0x40e20398},
+{0, 0xc1932203, 0x40e20398},
+{'q', 0xc13bf8d8, 0x00000000},
+{0, 0xc18fc6b7, 0xc0dfc6b8},
+{'q', 0xc0c4ec4e, 0xc0e20390},
+{0, 0xc0c4ec4e, 0xc1a2cc16},
+{'q', 0xb4800000, 0xc15377f0},
+{0, 0x40c7292c, 0xc1a1ada4},
+{'q', 0x40c7292c, 0xc0e203a0},
+{0, 0x4191745e, 0xc0e203a0},
+{'9', 0x000000c2, 0x00da00c2},
+{'m', 0xc126b69c, 0x00000000},
+{'q', 0x00000000, 0xc12c4ec0},
+{0, 0xc04ddfc0, 0xc17508f0},
+{'8', 0xdcaddce7, 0x26aa00c4},
+{'q', 0xc04ddfc4, 0x4095ee10},
+{0, 0xc04ddfc4, 0x4172cc10},
+{'q', 0x00000000, 0x41223ce0},
+{0, 0x40496608, 0x4171ada8},
+{'8', 0x27522719, 0xda57003e},
+{'q', 0x404ddfc0, 0xc09a67d8},
+{0, 0x404ddfc0, 0xc172cc18},
+{'@', 0x000000bb, 0x00004fa6},/*        »        x-advance: 79.648438 */
+{'M', 0x418d89d9, 0xc11dc322},
+{'l', 0xc13e35b6, 0x00000000},
+{'l', 0x35000000, 0xc001ca4c},
+{'l', 0x41bd1746, 0xc1cd5090},
+{'l', 0xc1bbf8d7, 0xc1d01ca4},
+{'l', 0x35000000, 0xc00abdd0},
+{'l', 0x413bf8d8, 0x00000000},
+{'4', 0x00cf00bb, 0x00230000},
+{'6', 0x00ccff45, 0x00000104},
+{'l', 0xc13bf8d4, 0x00000000},
+{'l', 0x00000000, 0xc001ca4c},
+{'l', 0x41bd1746, 0xc1cd5090},
+{'l', 0xc1bbf8d6, 0xc1d01ca4},
+{'l', 0x00000000, 0xc00abdd0},
+{'l', 0x4139bbf8, 0x00000000},
+{'l', 0x41bd1746, 0x41cf8d6e},
+{'l', 0x00000000, 0x408cfaa0},
+{'l', 0xc1bd1746, 0x41cc3221},
+{'@', 0x000000bc, 0x00007770},/*        ¼        x-advance: 119.437500 */
+{'M', 0x407aa11e, 0xc21d7b86},
+{'l', 0x00000000, 0xc0ef70c8},
+{'l', 0x416c157a, 0x00000000},
+{'l', 0x00000000, 0xc22d6d33},
+{'l', 0xc1620394, 0x411a67d0},
+{'l', 0x35000000, 0xc1064408},
+{'l', 0x416af70c, 0xc1194960},
+{'l', 0x41099f54, 0x00000000},
+{'l', 0x00000000, 0x424eb699},
+{'4', 0x00000078, 0x003b0000},
+{'6', 0x0000fec9, 0x013a00f4},
+{'l', 0xc125982c, 0x00000000},
+{'4', 0xfcec01ec, 0x00000051},
+{'6', 0x0314fe15, 0xff9c0235},
+{'l', 0x00000000, 0x4147292d},
+{'l', 0xc11292d0, 0x32800000},
+{'l', 0x00000000, 0xc147292d},
+{'l', 0xc1e32204, 0x00000000},
+{'l', 0x00000000, 0xc0f8643e},
+{'l', 0x41d7f1b0, 0xc21bcde0},
+{'l', 0x4128f378, 0x00000000},
+{'l', 0x00000000, 0x421b3ea8},
+{'4', 0x0000003e, 0x003f0000},
+{'6', 0x0000ffc2, 0xfed5ffb8},
+{'9', 0x0016fff5, 0x004bffd3},
+{'l', 0xc15ea848, 0x41a08f38},
+{'l', 0x419c157c, 0x00000000},
+{'l', 0x00000000, 0xc1c9660a},
+{'l', 0x3e0f3800, 0xc08abdc8},
+{'@', 0x000000bd, 0x00007770},/*        ½        x-advance: 119.437500 */
+{'M', 0x407aa11e, 0xc21d7b86},
+{'l', 0x00000000, 0xc0ef70c8},
+{'l', 0x416c157a, 0x00000000},
+{'l', 0x00000000, 0xc22d6d33},
+{'l', 0xc1620394, 0x411a67d0},
+{'l', 0x35000000, 0xc1064408},
+{'l', 0x416af70c, 0xc1194960},
+{'l', 0x41099f54, 0x00000000},
+{'l', 0x00000000, 0x424eb699},
+{'4', 0x00000078, 0x003b0000},
+{'6', 0x0000fec9, 0x013a00f4},
+{'l', 0xc125982c, 0x00000000},
+{'4', 0xfcec01ec, 0x00000051},
+{'6', 0x0314fe15, 0xffff0139},
+{'l', 0xbe0f3600, 0xc0e67d50},
+{'8', 0xb635da11, 0xb260dc24},
+{'8', 0xbb4eda36, 0xc118e118},
+{'8', 0xc9ecde00, 0xebc4ebed},
+{'8', 0x14c200da, 0x3ae314e8},
+{'l', 0xc114cfb0, 0xbf0f3780},
+{'q', 0x3f68ba80, 0xc0ef70c8},
+{0, 0x40d01cb0, 0xc1419100},
+{'q', 0x40b54230, 0xc093b138},
+{0, 0x416af708, 0xc093b138},
+{'q', 0x410e1910, 0x00000000},
+{0, 0x4160e528, 0x408abdc0},
+{'q', 0x40a7d500, 0x408880e8},
+{0, 0x40a7d500, 0x413f5424},
+{'q', 0x00000000, 0x412479bc},
+{0, 0xc1525980, 0x419f70c8},
+{'8', 0x4ca032bc, 0x32d919e5},
+{'l', 0x41f7d508, 0x00000000},
+{'l', 0x00000000, 0x40fcddfc},
+{'l', 0xc227d50a, 0x32800000},
+{'@', 0x000000be, 0x00007770},/*        ¾        x-advance: 119.437500 */
+{'M', 0x420f7f1b, 0x00000000},
+{'l', 0xc125982c, 0x00000000},
+{'4', 0xfcec01ec, 0x00000051},
+{'6', 0x0314fe15, 0xff9c0229},
+{'l', 0xb7000000, 0x4147292d},
+{'l', 0xc11292d0, 0x32800000},
+{'l', 0x00000000, 0xc147292d},
+{'l', 0xc1e32204, 0x00000000},
+{'l', 0x00000000, 0xc0f8643e},
+{'l', 0x41d7f1b0, 0xc21bcde0},
+{'l', 0x4128f378, 0x00000000},
+{'l', 0x00000000, 0x421b3ea8},
+{'4', 0x0000003e, 0x003f0000},
+{'6', 0x0000ffc2, 0xfed5ffb8},
+{'9', 0x0016fff5, 0x004bffd3},
+{'l', 0xc15ea848, 0x41a08f38},
+{'4', 0x0000009c, 0xff370000},
+{'6', 0xffde0001, 0xffd4fe81},
+{'q', 0x00000000, 0x4101ca4c},
+{0, 0xc0ae8ba8, 0x4149660c},
+{'q', 0xc0ac4ec0, 0x408f3780},
+{0, 0xc17508f2, 0x408f3780},
+{'9', 0x0000ff60, 0xff82ff4f},
+{'l', 0x41182af7, 0xbf68ba40},
+{'8', 0x4c654c0a, 0xae590059},
+{'9', 0xffb40000, 0xffb4ff97},
+{'4', 0x0000ffde, 0xffc40000},
+{'l', 0x407f1ae0, 0x00000000},
+{'8', 0xec46002c, 0xc819ec19},
+{'8', 0xccecdf00, 0xedc4edec},
+{'8', 0x13c300da, 0x37e613e9},
+{'l', 0xc1170c88, 0xbf56d380},
+{'q', 0x3f68ba30, 0xc0f3ea80},
+{0, 0x40cba2ea, 0xc13d1748},
+{'q', 0x40b0c880, 0xc0864400},
+{0, 0x41667d50, 0xc0864400},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41644074, 0x40864400},
+{'8', 0x57292129, 0x48e82900},
+{'9', 0x001effe8, 0x0029ffb6},
+{'l', 0x00000000, 0x3e0f3800},
+{'8', 0x22500532, 0x4e1d1d1d},
+{'@', 0x000000bf, 0x0000577b},/*        ¿        x-advance: 87.480469 */
+{'M', 0x411292cc, 0xc05fc6b6},
+{'8', 0xb60cd700, 0xc423df0c},
+{'9', 0xffe50016, 0xffbe004a},
+{'l', 0x40b5423c, 0xc084072c},
+{'8', 0xc43be327, 0xba14e013},
+{'l', 0x4143cde0, 0x00000000},
+{'8', 0x43f426ff, 0x33e51df6},
+{'8', 0x28d916ef, 0x21d411eb},
+{'8', 0x1fd40fea, 0x23da0feb},
+{'8', 0x2ce513f0, 0x39f618f6},
+{'q', 0x00000000, 0x40ff1ada},
+{0, 0x40ac4ec4, 0x4149660a},
+{'q', 0x40ae8ba4, 0x4093b13e},
+{0, 0x4173ea86, 0x4093b13e},
+{'q', 0x411ca4b4, 0x00000000},
+{0, 0x41786440, 0xc09ca4b4},
+{'9', 0xffd9002d, 0xff950035},
+{'l', 0x414ddfc8, 0x3f56d338},
+{'q', 0xbfe8ba40, 0x415d89d8},
+{0, 0xc12e8ba0, 0x41aa11e7},
+{'q', 0xc1117460, 0x40ed33ec},
+{0, 0xc1c07294, 0x40ed33ec},
+{'q', 0xc17982ae, 0x00000000},
+{0, 0xc1c45d17, 0xc0eaf70c},
+{'9', 0xffc5ffb9, 0xff5dffb9},
+{'m', 0x422ed33f, 0xc29055ee},
+{'l', 0x00000000, 0x4160e528},
+{'l', 0xc15a2e8c, 0x00000000},
+{'l', 0x00000000, 0xc160e528},
+{'l', 0x415a2e8c, 0x00000000},
+{'@', 0x000000c0, 0x00005f86},/*        À        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff6c0024},
+{'l', 0xc1ad6d34, 0xc172cc18},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x417cddf8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000c1, 0x00005f86},/*        Á        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff6cffb3},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4172cc18, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d36, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000c2, 0x00005f86},/*        Â        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff6100b8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0eaf708, 0x00000000},
+{'l', 0xc17508f4, 0xc11b8648},
+{'l', 0xbe0f3700, 0x00000000},
+{'l', 0xc181ca4c, 0x411b8648},
+{'l', 0xc0e8ba2c, 0x00000000},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4182e8b9, 0xc1864408},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x417aa11c, 0x41864408},
+{'@', 0x000000c3, 0x00005f86},/*        Ã        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff6c0057},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2e8, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc0, 0x00000000},
+{'q', 0xbf982ac0, 0x41259828},
+{0, 0xc095ee10, 0x4168ba28},
+{'q', 0xc05fc6c0, 0x40864410},
+{0, 0xc1170c88, 0x40864410},
+{'@', 0x000000c4, 0x00005f86},/*        Ä        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff6cff66},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000c5, 0x00005f86},/*        Ã…        x-advance: 95.523438 */
+{'M', 0x42a3377f, 0x00000000},
+{'l', 0xc13423d0, 0xc1e67d50},
+{'l', 0xc2339496, 0x00000000},
+{'l', 0xc135423c, 0x41e67d50},
+{'l', 0xc15d89d8, 0x00000000},
+{'l', 0x4220d6d3, 0xc2c5101c},
+{'4', 0x00000079, 0x0314013c},
+{'6', 0x0000ff93, 0xfd3dfef3},
+{'l', 0xbf211e40, 0x3ffaa140},
+{'9', 0x002efff3, 0x0077ffd7},
+{'4', 0x0103ff9c, 0x00000126},
+{'l', 0xc14a8478, 0xc20211e7},
+{'9', 0xffdafff1, 0xffa9ffe1},
+{'6', 0xffd2fff1, 0xff630087},
+{'8', 0x5fd93700, 0x27a127d9},
+{'8', 0xd9a100c9, 0xa1d9d9d9},
+{'8', 0xa127c800, 0xd95fd927},
+{'8', 0x275f0037, 0x5f282728},
+{'m', 0xc0f1ada8, 0x00000000},
+{'8', 0xcbebe100, 0xebcbebeb},
+{'8', 0x15cb00e1, 0x35eb15eb},
+{'8', 0x35151e00, 0x16361615},
+{'8', 0xea350020, 0xca15ea15},
+{'@', 0x000000c6, 0x00008f37},/*        Æ        x-advance: 143.214844 */
+{'M', 0x42878644, 0x00000000},
+{'l', 0x00000000, 0xc1e67d50},
+{'l', 0xc2194966, 0x00000000},
+{'l', 0xc15d89d9, 0x41e67d50},
+{'l', 0xc15ea847, 0x00000000},
+{'l', 0x423fe35b, 0xc2c5101c},
+{'l', 0x42a91746, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc2544ec4, 0x00000000},
+{'l', 0x00000000, 0x41fcddfc},
+{'l', 0x42438644, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc2438644, 0x00000000},
+{'l', 0x00000000, 0x420957b8},
+{'4', 0x000001bf, 0x00570000},
+{'6', 0x0000fdd6, 0xfd3e0000},
+{'l', 0xc128f378, 0x00000000},
+{'l', 0xbffaa120, 0x408cfaa0},
+{'l', 0xc1a745d2, 0x42327627},
+{'l', 0x4205b4d0, 0x00000000},
+{'l', 0x00000000, 0xc244157b},
+{'@', 0x000000c7, 0x0000676d},/*        Ç        x-advance: 103.425781 */
+{'M', 0x425d89d8, 0xc2b22e8c},
+{'q', 0xc182e8ba, 0x00000000},
+{0, 0xc1cba2e8, 0x4128f378},
+{'q', 0xc111745c, 0x4127d510},
+{0, 0xc111745c, 0x41e67d52},
+{'q', 0x00000000, 0x4190e526},
+{0, 0x41170c88, 0x41e94966},
+{'q', 0x41182af8, 0x412faa12},
+{0, 0x41cd508e, 0x412faa12},
+{'9', 0x000000a5, 0xff5d00f8},
+{'l', 0x412e8ba8, 0x40ae8ba0},
+{'q', 0xc0c2af80, 0x414ba2e9},
+{0, 0xc1891020, 0x419af70d},
+{'q', 0xc12faa10, 0x40d49660},
+{0, 0xc1cc321e, 0x40d49660},
+{'q', 0xc16e525c, 0xb4000000},
+{0, 0xc1ce6eff, 0xc0c4ec4f},
+{'q', 0xc12d6d34, 0xc0c7292d},
+{0, 0xc1849660, 0xc18d89d8},
+{'q', 0xc0b5423e, 0xc1389d8c},
+{0, 0xc0b5423e, 0xc1da2e8c},
+{'q', 0x00000000, 0xc1bc880e},
+{0, 0x414ba2e9, 0xc213b13b},
+{'q', 0x414ba2e8, 0xc155b4d0},
+{0, 0x420cfaa1, 0xc155b4d0},
+{'q', 0x417bbf8c, 0x00000000},
+{0, 0x41d25982, 0x40c4ec50},
+{'9', 0x00310054, 0x0092007c},
+{'l', 0xc14a8478, 0x40864410},
+{'q', 0xc05b4d00, 0xc1099f58},
+{0, 0xc130c880, 0xc1525988},
+{'9', 0xffdcffc4, 0xffdcff71},
+{'m', 0x4160e528, 0x42d59102},
+{'q', 0x00000000, 0x414a847a},
+{0, 0xc1994966, 0x414a847a},
+{'9', 0x0000ffe1, 0xfffeffce},
+{'l', 0x00000000, 0xc0db4cf8},
+{'8', 0x0330031b, 0xd3520052},
+{'8', 0xd5b6d500, 0x01e100e8},
+{'4', 0xff9b0024, 0x0000003b},
+{'l', 0xc02e8ba0, 0x40dfc6b6},
+{'8', 0x184e0134, 0x3c1a161a},
+{'@', 0x000000c8, 0x00005f86},/*        È        x-advance: 95.523438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429582af, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc275982a, 0x00000000},
+{'l', 0xb6000000, 0x41fcddfc},
+{'l', 0x4264cfaa, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc264cfaa, 0x00000000},
+{'l', 0xb6000000, 0x420957b8},
+{'4', 0x00000202, 0x00570000},
+{'6', 0x0000fd94, 0xfca9013d},
+{'l', 0xc1ad6d34, 0xc172cc18},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x417cddf8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000c9, 0x00005f86},/*        É        x-advance: 95.523438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429582af, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc275982a, 0x00000000},
+{'l', 0xb6000000, 0x41fcddfc},
+{'l', 0x4264cfaa, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc264cfaa, 0x00000000},
+{'l', 0xb6000000, 0x420957b8},
+{'4', 0x00000202, 0x00570000},
+{'6', 0x0000fd94, 0xfca900d6},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4172cc14, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d34, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000ca, 0x00005f86},/*        Ê        x-advance: 95.523438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429582af, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc275982a, 0x00000000},
+{'l', 0xb6000000, 0x41fcddfc},
+{'l', 0x4264cfaa, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc264cfaa, 0x00000000},
+{'l', 0xb6000000, 0x420957b8},
+{'4', 0x00000202, 0x00570000},
+{'6', 0x0000fd94, 0xfc9d01e6},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0eaf700, 0x00000000},
+{'l', 0xc17508f8, 0xc11b8648},
+{'l', 0xbe0f3700, 0x00000000},
+{'l', 0xc181ca4c, 0x411b8648},
+{'l', 0xc0e8ba2c, 0x00000000},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4182e8bb, 0xc1864408},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x417aa11c, 0x41864408},
+{'@', 0x000000cb, 0x00005f86},/*        Ë        x-advance: 95.523438 */
+{'M', 0x413bf8d7, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'l', 0x429582af, 0x00000000},
+{'l', 0x00000000, 0x412e8ba0},
+{'l', 0xc275982a, 0x00000000},
+{'l', 0xb6000000, 0x41fcddfc},
+{'l', 0x4264cfaa, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'l', 0xc264cfaa, 0x00000000},
+{'l', 0xb6000000, 0x420957b8},
+{'4', 0x00000202, 0x00570000},
+{'6', 0x0000fd94, 0xfca9008e},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b69, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000cc, 0x000027ca},/*        Ì        x-advance: 39.789062 */
+{'M', 0x415377f2, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x0000006a, 0x03140000},
+{'6', 0x0000ff96, 0xfca90048},
+{'l', 0xc1ad6d34, 0xc172cc18},
+{'l', 0x35700000, 0xc001ca40},
+{'l', 0x41679bbf, 0x00000000},
+{'l', 0x4172cc16, 0x417cddf8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0ff1adc, 0x00000000},
+{'@', 0x000000cd, 0x000027ca},/*        Í        x-advance: 39.789062 */
+{'M', 0x415377f2, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x0000006a, 0x03140000},
+{'6', 0x0000ff96, 0xfca9ffe6},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4172cc15, 0xc17cddf8},
+{'l', 0x41679bbe, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d33, 0x4172cc18},
+{'l', 0xc0ff1ada, 0x00000000},
+{'@', 0x000000ce, 0x000027ca},/*        ÃŽ        x-advance: 39.789062 */
+{'M', 0x415377f2, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x0000006a, 0x03140000},
+{'6', 0x0000ff96, 0xfc9d00ee},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f2, 0xc11b8648},
+{'l', 0xbe0f3780, 0x00000000},
+{'l', 0xc181ca4b, 0x411b8648},
+{'l', 0xc0e8ba30, 0x00000000},
+{'l', 0x34800000, 0xbfb30580},
+{'l', 0x4182e8ba, 0xc1864408},
+{'l', 0x41644072, 0x00000000},
+{'l', 0x417aa120, 0x41864408},
+{'@', 0x000000cf, 0x000027ca},/*        Ï        x-advance: 39.789062 */
+{'M', 0x415377f2, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x0000006a, 0x03140000},
+{'6', 0x0000ff96, 0xfca9ff9b},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000d0, 0x0000676d},/*        Ð        x-advance: 103.425781 */
+{'M', 0x3f7aa11e, 0xc2600e52},
+{'4', 0x00000056, 0xfeac0000},
+{'l', 0x42025982, 0x00000000},
+{'q', 0x41c8479c, 0x00000000},
+{0, 0x421a67d6, 0x41496608},
+{'q', 0x415a2e88, 0x41484798},
+{0, 0x415a2e88, 0x420ea847},
+{'q', 0x00000000, 0x4173ea84},
+{0, 0xc0be35b0, 0x41d5b4d0},
+{'q', 0xc0be35c0, 0x413660ab},
+{0, 0xc186d340, 0x418bdc32},
+{'9', 0x0030ffa9, 0x0030ff37},
+{'l', 0xc213699f, 0x00000000},
+{'4', 0xfe970000, 0x0000ffaa},
+{'6', 0xffaa0000, 0x002d0291},
+{'q', 0x00000000, 0xc19292ca},
+{0, 0xc1211e70, 0xc1df377e},
+{'9', 0xffb3ffb1, 0xffb3ff18},
+{'l', 0xc1979bbf, 0x00000000},
+{'l', 0x00000000, 0x41fe8ba4},
+{'l', 0x41e32203, 0x00000000},
+{'l', 0x00000000, 0x412c4ec4},
+{'4', 0x0000ff1d, 0x01140000},
+{'l', 0x41afaa11, 0xb6000000},
+{'q', 0x412d6d34, 0x00000000},
+{0, 0x41982af8, 0xc0982af6},
+{'q', 0x41040728, 0xc0982af6},
+{0, 0x414a8478, 0xc15b4cfb},
+{'q', 0x408cfaa0, 0xc10f3780},
+{0, 0x408cfaa0, 0xc1a8f378},
+{'@', 0x000000d1, 0x0000676d},/*        Ñ        x-advance: 103.425781 */
+{'M', 0x42975424, 0x00000000},
+{'l', 0xc252e8ba, 0xc2a7d509},
+{'l', 0x3eb30500, 0x40d91020},
+{'l', 0x3eb30580, 0x413ada68},
+{'l', 0x00000000, 0x4282e8ba},
+{'l', 0xc13e35b5, 0x00000000},
+{'4', 0xfcec0000, 0x0000007c},
+{'l', 0x42552598, 0x42a8f377},
+{'9', 0xff93fffa, 0xff62fffa},
+{'l', 0x00000000, 0xc2813b13},
+{'4', 0x00000060, 0x03140000},
+{'6', 0x0000ff80, 0xfca9ffa0},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2ec, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc0, 0x00000000},
+{'q', 0xbf982b00, 0x41259828},
+{0, 0xc095ee20, 0x4168ba28},
+{'q', 0xc05fc6a0, 0x40864410},
+{0, 0xc1170c84, 0x40864410},
+{'@', 0x000000d2, 0x00006f66},/*        Ã’        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc1f982ae, 0xc2651745},
+{'l', 0xc1ad6d34, 0xc172cc18},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x417cddf8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000d3, 0x00006f66},/*        Ó        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc23dee18, 0xc2651745},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4172cc14, 0xc17cddf8},
+{'l', 0x41679bbc, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d32, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000d4, 0x00006f66},/*        Ô        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc13d1740, 0xc26aaf71},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f4, 0xc11b8648},
+{'l', 0xbe0f3800, 0x00000000},
+{'l', 0xc181ca4a, 0x411b8648},
+{'l', 0xc0e8ba30, 0x00000000},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4182e8ba, 0xc1864408},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x417aa124, 0x41864408},
+{'@', 0x000000d5, 0x00006f66},/*        Õ        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc1c8d6d4, 0xc2651745},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2ec, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc0, 0x00000000},
+{'q', 0xbf982b00, 0x41259828},
+{0, 0xc095ee20, 0x4168ba28},
+{'q', 0xc05fc6a0, 0x40864410},
+{0, 0xc1170c88, 0x40864410},
+{'@', 0x000000d6, 0x00006f66},/*        Ö        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'q', 0xc172cc18, 0xb4000000},
+{0, 0xc1d1ca4c, 0xc0c4ec4f},
+{'q', 0xc12faa12, 0xc0c4ec4f},
+{0, 0xc1864406, 0xc18e1910},
+{'q', 0xc0b9bbfc, 0xc13ada68},
+{0, 0xc0b9bbfc, 0xc1d99f54},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'q', 0x41708f3c, 0x00000000},
+{0, 0x41d0abde, 0x40c07290},
+{'q', 0x4130c880, 0x40be35c0},
+{0, 0x4186d33c, 0x418abdc4},
+{'9', 0x005b002e, 0x00d7002e},
+{'m', 0xc15a2e90, 0x00000000},
+{'q', 0x00000000, 0xc1932202},
+{0, 0xc113b138, 0xc1e70c86},
+{'q', 0xc11292d0, 0xc127d510},
+{0, 0xc1cf8d6e, 0xc127d510},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'q', 0x00000000, 0x41944073},
+{0, 0x4114cfaa, 0x41eb8644},
+{'q', 0x4115ee18, 0x412d6d34},
+{0, 0x41cf8d6e, 0x412d6d34},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc25b4cfa, 0xc2651745},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000d7, 0x000053a2},/*        ×        x-advance: 83.632812 */
+{'M', 0x411ee191, 0xc1b89d8a},
+{'l', 0x41c60abe, 0xc1c60abe},
+{'l', 0xc1c4ec4e, 0xc1c4ec4c},
+{'l', 0x40e8ba2c, 0xc0e67d60},
+{'l', 0x41c3cddf, 0x41c57b88},
+{'l', 0x41c3cde2, 0xc1c45d18},
+{'l', 0x40eaf700, 0x40eaf710},
+{'l', 0xc1c3cdde, 0x41c2af70},
+{'l', 0x41c4ec4e, 0x41c4ec4f},
+{'l', 0xc0e44070, 0x40eaf70e},
+{'l', 0xc1c57b86, 0xc1c57b86},
+{'l', 0xc1c7292d, 0x41c699f6},
+{'l', 0xc0e44072, 0xc0eaf710},
+{'@', 0x000000d8, 0x00006f66},/*        Ø        x-advance: 111.398438 */
+{'M', 0x42d11746, 0xc246e191},
+{'q', 0x00000000, 0x417745d0},
+{0, 0xc0be35c0, 0x41d880e5},
+{'q', 0xc0bbf8d0, 0x4139bbf9},
+{0, 0xc1876274, 0x418ea848},
+{'q', 0xc130c880, 0x40c7292c},
+{0, 0xc1d0abdc, 0x40c7292c},
+{'9', 0x0000ff77, 0xffc2ff19},
+{'4', 0x0051ffbd, 0x0000ff96},
+{'l', 0x415fc6b6, 0xc186d33f},
+{'q', 0xc142af70, 0xc156d33e},
+{0, 0xc142af70, 0xc2124b30},
+{'q', 0x00000000, 0xc1bd1746},
+{0, 0x414efe36, 0xc213b13b},
+{'q', 0x414efe34, 0xc155b4d0},
+{0, 0x42100e52, 0xc155b4d0},
+{'9', 0x0000008a, 0x003d00e7},
+{'4', 0xffaf0043, 0x0000006b},
+{'l', 0xc160e528, 0x41876274},
+{'9', 0x006a0060, 0x011e0060},
+{'m', 0xc15a2e90, 0x00000000},
+{'9', 0xff830000, 0xff33ffca},
+{'l', 0xc246525a, 0x426e99f5},
+{'q', 0x410880e4, 0x40cba2e8},
+{0, 0x41a8f378, 0x40cba2e8},
+{'q', 0x418880e4, 0x00000000},
+{0, 0x41d13b14, 0xc127d508},
+{'9', 0xffac0049, 0xff120049},
+{'m', 0xc28d1e6f, 0x00000000},
+{'9', 0x00800000, 0x00d30038},
+{'l', 0x4245c323, 0xc26e99f6},
+{'q', 0xc10abdc8, 0xc0c4ec50},
+{0, 0xc1a8f37a, 0xc0c4ec50},
+{'q', 0xc1876276, 0x00000000},
+{0, 0xc1d13b13, 0x41259830},
+{'q', 0xc113b13c, 0x41259828},
+{0, 0xc113b13c, 0x41e82af6},
+{'@', 0x000000d9, 0x0000676d},/*        Ù        x-advance: 103.425781 */
+{'M', 0x424c79bc, 0x3fb3055f},
+{'q', 0xc1419104, 0x00000000},
+{0, 0xc1a8f378, 0xc08cfaa1},
+{'q', 0xc11055ee, 0xc08cfaa1},
+{0, 0xc15fc6b6, 0xc14cc158},
+{'9', 0xffbdffd9, 0xff60ffd9},
+{'4', 0xfe0b0000, 0x0000006a},
+{'l', 0x00000000, 0x42766efd},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0x40db4cfc, 0x41a3ea84},
+{'q', 0x40db4cfc, 0x40dfc6b8},
+{0, 0x419e5259, 0x40dfc6b8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a508f4, 0xc0e67d50},
+{'9', 0xffc6003b, 0xff57003b},
+{'4', 0xfe1b0000, 0x0000006a},
+{'l', 0x00000000, 0x4275dfc6},
+{'q', 0x00000000, 0x413f5422},
+{0, 0xc0a35b50, 0x41a508f2},
+{'q', 0xc0a11e70, 0x410abdc4},
+{0, 0xc1655ee0, 0x41549661},
+{'9', 0x0024ffb7, 0x0024ff52},
+{'m', 0x40b77f18, 0xc2d8c880},
+{'l', 0xc1ad6d34, 0xc172cc20},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x417cddf8},
+{'l', 0x00000000, 0x3fb30580},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000da, 0x0000676d},/*        Ú        x-advance: 103.425781 */
+{'M', 0x424c79bc, 0x3fb3055f},
+{'q', 0xc1419104, 0x00000000},
+{0, 0xc1a8f378, 0xc08cfaa1},
+{'q', 0xc11055ee, 0xc08cfaa1},
+{0, 0xc15fc6b6, 0xc14cc158},
+{'9', 0xffbdffd9, 0xff60ffd9},
+{'4', 0xfe0b0000, 0x0000006a},
+{'l', 0x00000000, 0x42766efd},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0x40db4cfc, 0x41a3ea84},
+{'q', 0x40db4cfc, 0x40dfc6b8},
+{0, 0x419e5259, 0x40dfc6b8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a508f4, 0xc0e67d50},
+{'9', 0xffc6003b, 0xff57003b},
+{'4', 0xfe1b0000, 0x0000006a},
+{'l', 0x00000000, 0x4275dfc6},
+{'q', 0x00000000, 0x413f5422},
+{0, 0xc0a35b50, 0x41a508f2},
+{'q', 0xc0a11e70, 0x410abdc4},
+{0, 0xc1655ee0, 0x41549661},
+{'9', 0x0024ffb7, 0x0024ff52},
+{'m', 0xc139bbf8, 0xc2d8c880},
+{'l', 0x00000000, 0xbfb305c0},
+{'l', 0x4172cc14, 0xc17cddf8},
+{'l', 0x41679bbc, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d32, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000db, 0x0000676d},/*        Û        x-advance: 103.425781 */
+{'M', 0x424c79bc, 0x3fb3055f},
+{'q', 0xc1419104, 0x00000000},
+{0, 0xc1a8f378, 0xc08cfaa1},
+{'q', 0xc11055ee, 0xc08cfaa1},
+{0, 0xc15fc6b6, 0xc14cc158},
+{'9', 0xffbdffd9, 0xff60ffd9},
+{'4', 0xfe0b0000, 0x0000006a},
+{'l', 0x00000000, 0x42766efd},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0x40db4cfc, 0x41a3ea84},
+{'q', 0x40db4cfc, 0x40dfc6b8},
+{0, 0x419e5259, 0x40dfc6b8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a508f4, 0xc0e67d50},
+{'9', 0xffc6003b, 0xff57003b},
+{'4', 0xfe1b0000, 0x0000006a},
+{'l', 0x00000000, 0x4275dfc6},
+{'q', 0x00000000, 0x413f5422},
+{0, 0xc0a35b50, 0x41a508f2},
+{'q', 0xc0a11e70, 0x410abdc4},
+{0, 0xc1655ee0, 0x41549661},
+{'9', 0x0024ffb7, 0x0024ff52},
+{'m', 0x41bda67c, 0xc2db9496},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f0, 0xc11b8648},
+{'l', 0xbe0f3700, 0x00000000},
+{'l', 0xc181ca4c, 0x411b8648},
+{'l', 0xc0e8ba30, 0x00000000},
+{'l', 0x00000000, 0xbfb30580},
+{'l', 0x4182e8ba, 0xc1864408},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x417aa11c, 0x41864408},
+{'@', 0x000000dc, 0x0000676d},/*        Ü        x-advance: 103.425781 */
+{'M', 0x424c79bc, 0x3fb3055f},
+{'q', 0xc1419104, 0x00000000},
+{0, 0xc1a8f378, 0xc08cfaa1},
+{'q', 0xc11055ee, 0xc08cfaa1},
+{0, 0xc15fc6b6, 0xc14cc158},
+{'9', 0xffbdffd9, 0xff60ffd9},
+{'4', 0xfe0b0000, 0x0000006a},
+{'l', 0x00000000, 0x42766efd},
+{'q', 0x00000000, 0x4157f1ae},
+{0, 0x40db4cfc, 0x41a3ea84},
+{'q', 0x40db4cfc, 0x40dfc6b8},
+{0, 0x419e5259, 0x40dfc6b8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a508f4, 0xc0e67d50},
+{'9', 0xffc6003b, 0xff57003b},
+{'4', 0xfe1b0000, 0x0000006a},
+{'l', 0x00000000, 0x4275dfc6},
+{'q', 0x00000000, 0x413f5422},
+{0, 0xc0a35b50, 0x41a508f2},
+{'q', 0xc0a11e70, 0x410abdc4},
+{0, 0xc1655ee0, 0x41549661},
+{'9', 0x0024ffb7, 0x0024ff52},
+{'m', 0xc1982af8, 0xc2d8c880},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000dd, 0x00005f86},/*        Ý        x-advance: 95.523438 */
+{'M', 0x425957b8, 0xc2235b4d},
+{'l', 0x00000000, 0x42235b4d},
+{'l', 0xc1549660, 0x00000000},
+{'l', 0x00000000, 0xc2235b4d},
+{'l', 0xc2179bbf, 0xc266c4eb},
+{'l', 0x416af70c, 0x00000000},
+{'l', 0x41f00000, 0x423bb13a},
+{'4', 0xfe8900ee, 0x00000075},
+{'6', 0x01cdfed0, 0xfdefff7a},
+{'l', 0x00000000, 0xbfb305c0},
+{'l', 0x4172cc14, 0xc17cddf8},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1ad6d34, 0x4172cc18},
+{'l', 0xc0ff1ad8, 0x00000000},
+{'@', 0x000000de, 0x00005f86},/*        Þ        x-advance: 95.523438 */
+{'M', 0x42aff1ae, 0xc24d982b},
+{'q', 0x00000000, 0x410f3780},
+{0, 0xc081ca50, 0x417f1adc},
+{'q', 0xc081ca50, 0x40dd89d8},
+{0, 0xc13bf8d8, 0x412d6d32},
+{'9', 0x001effc4, 0x001eff70},
+{'l', 0xc1e79bbf, 0x00000000},
+{'l', 0x00000000, 0x41a62762},
+{'l', 0xc155b4cf, 0x00000000},
+{'l', 0x00000000, 0xc2c5101c},
+{'4', 0x0000006a, 0x008c0000},
+{'l', 0x41e0e525, 0x00000000},
+{'q', 0x4185b4d0, 0x00000000},
+{0, 0x41cddfc8, 0x40f86440},
+{'9', 0x003e0048, 0x00ad0048},
+{'m', 0xc156d340, 0x3e8f3780},
+{'q', 0x00000000, 0xc115ee18},
+{0, 0xc0b77f20, 0xc168ba30},
+{'9', 0xffd7ffd3, 0xffd7ff77},
+{'4', 0x0000ff2c, 0x01420000},
+{'l', 0x41d880e5, 0x36000000},
+{'q', 0x412b3054, 0x00000000},
+{0, 0x41840728, 0xc0ac4ec4},
+{'q', 0x40bbf8e0, 0xc0ae8ba8},
+{0, 0x40bbf8e0, 0xc171ada8},
+{'@', 0x000000df, 0x0000577b},/*        ß        x-advance: 87.480469 */
+{'M', 0x42a3377f, 0xc1a508f3},
+{'q', 0x00000000, 0x4127d508},
+{0, 0xc0d25980, 0x41825982},
+{'q', 0xc0d25980, 0x40b77f1c},
+{0, 0xc193b13c, 0x40b77f1c},
+{'9', 0x0000ffa1, 0xffe5ff62},
+{'l', 0xbe0f3700, 0xc1377f1a},
+{'8', 0x1b49101d, 0x0b530b2c},
+{'8', 0xe84e0033, 0xbc1be81b},
+{'8', 0xc0e8dd00, 0xc4b3e4e9},
+{'8', 0xbdb3e2cd, 0xabe7dce7},
+{'8', 0xc20fde00, 0xcb2ee510},
+{'8', 0xce2ee620, 0xcd0fe90f},
+{'8', 0xbcdbd500, 0xe69ee6db},
+{'q', 0xc125982c, 0x00000000},
+{0, 0xc173ea86, 0x40b30560},
+{'9', 0x002cffda, 0x0087ffda},
+{'4', 0x023b0000, 0x0000ff9c},
+{'l', 0x00000000, 0xc28fa2e9},
+{'q', 0x00000000, 0xc17dfc68},
+{0, 0x4102e8b9, 0xc1bf5424},
+{'q', 0x4104072a, 0xc100abd8},
+{0, 0x41c3cde1, 0xc100abd8},
+{'q', 0x41549660, 0x00000000},
+{0, 0x41a8f376, 0x40b54240},
+{'q', 0x40fcde00, 0x40b30560},
+{0, 0x40fcde00, 0x4171ada8},
+{'q', 0x00000000, 0x41200000},
+{0, 0xc0fcde00, 0x41899f54},
+{'8', 0x36cb28d4, 0x1df70df7},
+{'8', 0x260f1500, 0x2026100f},
+{'q', 0x40377f10, 0x3ffaa100},
+{0, 0x40c72928, 0x40864400},
+{'q', 0x414ddfc8, 0x410abdc4},
+{0, 0x414ddfc8, 0x41ad6d35},
+{'@', 0x000000e0, 0x00004fa6},/*        à        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0x413d1746, 0xc297e35c},
+{'l', 0xc1b89d8a, 0xc19b8640},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000e1, 0x00004fa6},/*        á        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0xc0407298, 0xc297e35c},
+{'l', 0x00000000, 0xbfb30500},
+{'l', 0x4172cc18, 0xc1a08f38},
+{'l', 0x41679bbc, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d88, 0x419b8644},
+{'l', 0xc0d25988, 0x00000000},
+{'@', 0x000000e2, 0x00004fa6},/*        â        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0x41edc321, 0xc29aaf70},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0eaf708, 0x00000000},
+{'l', 0xc17508f4, 0xc13d1740},
+{'l', 0xbe0f3800, 0x00000000},
+{'l', 0xc181ca4a, 0x413d1740},
+{'l', 0xc0e8ba30, 0x00000000},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4182e8ba, 0xc1970c88},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x417aa11c, 0x41970c88},
+{'@', 0x000000e3, 0x00004fa6},/*        ã        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0x419dc321, 0xc297e35c},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2e8, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc8, 0x00000000},
+{'q', 0xbf982b00, 0x41259828},
+{0, 0xc095ee20, 0x4168ba30},
+{'q', 0xc05fc6b0, 0x40864400},
+{0, 0xc1170c88, 0x40864400},
+{'@', 0x000000e4, 0x00004fa6},/*        ä        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0xc143cde0, 0xc29a67d4},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b69, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000e5, 0x00004fa6},/*        å        x-advance: 79.648438 */
+{'M', 0x41e79bbf, 0x3fb3055f},
+{'q', 0xc13660aa, 0x00000000},
+{0, 0xc189101c, 0xc0c07293},
+{'q', 0xc0b77f1b, 0xc0c07293},
+{0, 0xc0b77f1b, 0xc1840729},
+{'q', 0x00000000, 0xc13bf8d8},
+{0, 0x40f62761, 0xc19055ee},
+{'9', 0xffce003e, 0xffcb00c7},
+{'4', 0xfffe0087, 0xffdf0000},
+{'8', 0x97e1b700, 0xe19ee1e1},
+{'8', 0x169e00bd, 0x49dc16e2},
+{'l', 0xc1525982, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f2cc16, 0xc1a35b4c},
+{'q', 0x41644070, 0x00000000},
+{0, 0x41abbf8c, 0x40d25980},
+{'9', 0x00340039, 0x00970039},
+{'l', 0x00000000, 0x42025982},
+{'8', 0x430b2c00, 0x162c160b},
+{'9', 0x0000000e, 0xfffd0021},
+{'l', 0x00000000, 0x40faa11e},
+{'8', 0x08b308da, 0xe3af00c9},
+{'9', 0xffe3ffe7, 0xffa4ffe4},
+{'l', 0xbed6d380, 0x00000000},
+{'q', 0xc09a67d0, 0x410abdc2},
+{0, 0xc13423cc, 0x4144ec4e},
+{'9', 0x001cffce, 0x001cff84},
+{'m', 0x40377f20, 0xc1170c88},
+{'8', 0xe7620037, 0xbc43e72b},
+{'9', 0xffd40019, 0xffa60019},
+{'4', 0xffcf0000, 0x0002ff92},
+{'8', 0x0e9501b9, 0x29c90ddc},
+{'8', 0x49ed1bed, 0x4c1a3100},
+{'9', 0x001a001a, 0x001a004c},
+{'m', 0x41c07293, 0xc2b51e6e},
+{'8', 0x5fd93700, 0x27a127d9},
+{'8', 0xd9a100c9, 0xa1d9d9d9},
+{'8', 0xa127c800, 0xd95fd927},
+{'8', 0x275f0037, 0x5f282728},
+{'m', 0xc0f1ada8, 0x00000000},
+{'8', 0xcbebe100, 0xebcbebeb},
+{'8', 0x15cb00e1, 0x35eb15eb},
+{'8', 0x35151e00, 0x16361615},
+{'8', 0xea350020, 0xca15ea15},
+{'@', 0x000000e6, 0x00007f57},/*        æ        x-advance: 127.339844 */
+{'M', 0x42876276, 0xc20cb305},
+{'l', 0x00000000, 0x3f982ae0},
+{'q', 0x3e0f3800, 0x414a847c},
+{0, 0x40ac4ec0, 0x419a67d6},
+{'q', 0x40a7d510, 0x40d49660},
+{0, 0x41708f38, 0x40d49660},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c880, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1b39494, 0xb4000000},
+{0, 0xc1eca4b2, 0xc18fc6b7},
+{'q', 0xc0b0c880, 0x411ca4b4},
+{0, 0xc14ddfc8, 0x415ea848},
+{'q', 0xc0eaf708, 0x4081ca4c},
+{0, 0xc18c6b69, 0x4081ca4c},
+{'q', 0xc13ada66, 0xb4000000},
+{0, 0xc18cfaa0, 0xc0c07293},
+{'q', 0xc0bbf8d9, 0xc0c07293},
+{0, 0xc0bbf8d9, 0xc1840729},
+{'q', 0x00000000, 0xc142af70},
+{0, 0x41052598, 0xc19292cc},
+{'9', 0xffcf0042, 0xffcd00c9},
+{'4', 0xfffe0086, 0xffdf0000},
+{'8', 0x96e1b500, 0xe19ee1e2},
+{'8', 0x169a00ba, 0x49da16e1},
+{'l', 0xc1525983, 0xbf982b00},
+{'q', 0x404ddfc8, 0xc1a35b4c},
+{0, 0x41f86440, 0xc1a35b4c},
+{'q', 0x418bdc32, 0x00000000},
+{0, 0x41c33ea8, 0x411b8640},
+{'q', 0x4104072c, 0xc11b8640},
+{0, 0x41c19102, 0xc11b8640},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe56},
+{'m', 0xc14ba2e8, 0xc00abdc0},
+{'l', 0xc15a2e8c, 0x3e8f3780},
+{'q', 0xc114cfa8, 0x3e56d300},
+{0, 0xc1644072, 0x40064400},
+{'8', 0x2bc70ed9, 0x45ee1bee},
+{'8', 0x4c1b3000, 0x1a501a1b},
+{'8', 0xe8630039, 0xbc43e72b},
+{'9', 0xffd50018, 0xffa50018},
+{'6', 0xffcf0000, 0xffc501a8},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e60, 0xc0b0c880},
+{0, 0xc1679bb8, 0xc0b0c880},
+{'q', 0xc10e1910, 0x00000000},
+{0, 0xc160e528, 0x40c07290},
+{'q', 0xc0a35b50, 0x40be35b8},
+{0, 0xc0b0c880, 0x41876278},
+{'l', 0x42208f36, 0x00000000},
+{'@', 0x000000e7, 0x0000479b},/*        ç        x-advance: 71.605469 */
+{'M', 0x4199d89d, 0xc218ba2e},
+{'q', 0x00000000, 0x4171ada4},
+{0, 0x40982af8, 0x41b3055e},
+{'q', 0x40982af8, 0x40e8ba2e},
+{0, 0x41655ee2, 0x40e8ba2e},
+{'8', 0xe3590035, 0xa72ce324},
+{'l', 0x414ba2ec, 0x3f56d340},
+{'q', 0xbfbbf900, 0x412e8ba3},
+{0, 0xc114cfac, 0x418b4cfb},
+{'q', 0xc0faa120, 0x40d01ca4},
+{0, 0xc19ee190, 0x40d01ca4},
+{'q', 0xc17dfc6c, 0xb4000000},
+{0, 0xc1c2203a, 0xc1200000},
+{'q', 0xc1052598, 0xc1211e6e},
+{0, 0xc1052598, 0xc1ea67d4},
+{'q', 0x35000000, 0xc198ba30},
+{0, 0x41064407, 0xc1e8ba2e},
+{'q', 0x41064407, 0xc1211e70},
+{0, 0x41c07292, 0xc1211e70},
+{'q', 0x4139bbf8, 0x00000000},
+{0, 0x4199d89e, 0x40c07290},
+{'9', 0x0030003d, 0x0084004d},
+{'l', 0xc14efe38, 0x3f7aa140},
+{'8', 0xb0d9cef9, 0xe3a6e3e1},
+{'q', 0xc11ffffe, 0x00000000},
+{0, 0xc1679bbe, 0x40d49660},
+{'9', 0x0035ffdd, 0x00b3ffdd},
+{'m', 0x42052598, 0x425f7f1a},
+{'q', 0x36800000, 0x414a847a},
+{0, 0xc1994964, 0x414a847a},
+{'9', 0x0000ffe1, 0xfffeffce},
+{'l', 0x00000000, 0xc0db4cf8},
+{'8', 0x0330031b, 0xd3520052},
+{'8', 0xd5b6d500, 0x01e100e8},
+{'4', 0xff9b0024, 0x0000003b},
+{'l', 0xc02e8ba0, 0x40dfc6b6},
+{'8', 0x184e0134, 0x3c1a161a},
+{'@', 0x000000e8, 0x00004fa6},/*        è        x-advance: 79.648438 */
+{'M', 0x419a67d5, 0xc20cb305},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0x40ac4ec4, 0x41a08f37},
+{'q', 0x40ac4ec4, 0x40e20394},
+{0, 0x417bbf8c, 0x40e20394},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c884, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1864406, 0xb4000000},
+{0, 0xc1ccc157, 0xc1200000},
+{'q', 0xc10bdc32, 0xc1200000},
+{0, 0xc10bdc32, 0xc1edc322},
+{'q', 0x35000000, 0xc195ee18},
+{0, 0x410bdc32, 0xc1e5ee18},
+{'q', 0x410cfaa2, 0xc1200000},
+{0, 0x41c8d6d3, 0xc1200000},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe51},
+{'m', 0x4223ea85, 0xc11a67d4},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e70, 0xc0b0c880},
+{0, 0xc1679bc0, 0xc0b0c880},
+{'q', 0xc11292cc, 0x00000000},
+{0, 0xc168ba2e, 0x40c4ec50},
+{'9', 0x0030ffd6, 0x0086ffd3},
+{'6', 0x00000146, 0xfec7ff8e},
+{'l', 0xc1b89d89, 0xc19b8644},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bbe, 0x00000000},
+{'l', 0x4172cc18, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25988, 0x00000000},
+{'@', 0x000000e9, 0x00004fa6},/*        é        x-advance: 79.648438 */
+{'M', 0x419a67d5, 0xc20cb305},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0x40ac4ec4, 0x41a08f37},
+{'q', 0x40ac4ec4, 0x40e20394},
+{0, 0x417bbf8c, 0x40e20394},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c884, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1864406, 0xb4000000},
+{0, 0xc1ccc157, 0xc1200000},
+{'q', 0xc10bdc32, 0xc1200000},
+{0, 0xc10bdc32, 0xc1edc322},
+{'q', 0x35000000, 0xc195ee18},
+{0, 0x410bdc32, 0xc1e5ee18},
+{'q', 0x410cfaa2, 0xc1200000},
+{0, 0x41c8d6d3, 0xc1200000},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe51},
+{'m', 0x4223ea85, 0xc11a67d4},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e70, 0xc0b0c880},
+{0, 0xc1679bc0, 0xc0b0c880},
+{'q', 0xc11292cc, 0x00000000},
+{0, 0xc168ba2e, 0x40c4ec50},
+{'9', 0x0030ffd6, 0x0086ffd3},
+{'6', 0x00000146, 0xfec7ff14},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4172cc14, 0xc1a08f38},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d8a, 0x419b8644},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000ea, 0x00004fa6},/*        ê        x-advance: 79.648438 */
+{'M', 0x419a67d5, 0xc20cb305},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0x40ac4ec4, 0x41a08f37},
+{'q', 0x40ac4ec4, 0x40e20394},
+{0, 0x417bbf8c, 0x40e20394},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c884, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1864406, 0xb4000000},
+{0, 0xc1ccc157, 0xc1200000},
+{'q', 0xc10bdc32, 0xc1200000},
+{0, 0xc10bdc32, 0xc1edc322},
+{'q', 0x35000000, 0xc195ee18},
+{0, 0x410bdc32, 0xc1e5ee18},
+{'q', 0x410cfaa2, 0xc1200000},
+{0, 0x41c8d6d3, 0xc1200000},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe51},
+{'m', 0x4223ea85, 0xc11a67d4},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e70, 0xc0b0c880},
+{0, 0xc1679bc0, 0xc0b0c880},
+{'q', 0xc11292cc, 0x00000000},
+{0, 0xc168ba2e, 0x40c4ec50},
+{'9', 0x0030ffd6, 0x0086ffd3},
+{'6', 0x00000146, 0xfebc0019},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0eaf708, 0x00000000},
+{'l', 0xc17508f4, 0xc13d1740},
+{'l', 0xbe0f3700, 0x00000000},
+{'l', 0xc181ca4c, 0x413d1740},
+{'l', 0xc0e8ba2c, 0x00000000},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4182e8b9, 0xc1970c88},
+{'l', 0x41644074, 0x00000000},
+{'l', 0x417aa11c, 0x41970c88},
+{'@', 0x000000eb, 0x00004fa6},/*        ë        x-advance: 79.648438 */
+{'M', 0x419a67d5, 0xc20cb305},
+{'q', 0x00000000, 0x41501ca4},
+{0, 0x40ac4ec4, 0x41a08f37},
+{'q', 0x40ac4ec4, 0x40e20394},
+{0, 0x417bbf8c, 0x40e20394},
+{'8', 0xe6680041, 0xbe35e627},
+{'l', 0x4130c884, 0x40496608},
+{'q', 0xc0d91020, 0x418f377f},
+{0, 0xc1f6b69c, 0x418f377f},
+{'q', 0xc1864406, 0xb4000000},
+{0, 0xc1ccc157, 0xc1200000},
+{'q', 0xc10bdc32, 0xc1200000},
+{0, 0xc10bdc32, 0xc1edc322},
+{'q', 0x35000000, 0xc195ee18},
+{0, 0x410bdc32, 0xc1e5ee18},
+{'q', 0x410cfaa2, 0xc1200000},
+{0, 0x41c8d6d3, 0xc1200000},
+{'9', 0x0000010a, 0x0141010a},
+{'4', 0x000d0000, 0x0000fe51},
+{'m', 0x4223ea85, 0xc11a67d4},
+{'q', 0xbf864400, 0xc13f5424},
+{0, 0xc0c2af70, 0xc18b4cfc},
+{'q', 0xc0a11e70, 0xc0b0c880},
+{0, 0xc1679bc0, 0xc0b0c880},
+{'q', 0xc11292cc, 0x00000000},
+{0, 0xc168ba2e, 0x40c4ec50},
+{'9', 0x0030ffd6, 0x0086ffd3},
+{'6', 0x00000146, 0xfebdfec2},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000ec, 0x000027ca},/*        ì        x-advance: 39.789062 */
+{'M', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd610051},
+{'l', 0xc1b89d8a, 0xc19b8644},
+{'l', 0xb3800000, 0xc001ca40},
+{'l', 0x41679bbf, 0x00000000},
+{'l', 0x4172cc15, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000ed, 0x000027ca},/*        í        x-advance: 39.789062 */
+{'M', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd61ffdf},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4172cc16, 0xc1a08f38},
+{'l', 0x41679bbe, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d89, 0x419b8644},
+{'l', 0xc0d25984, 0x00000000},
+{'@', 0x000000ee, 0x000027ca},/*        î        x-advance: 39.789062 */
+{'M', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd5500ec},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f4, 0xc13d1740},
+{'l', 0xbe0f3780, 0x00000000},
+{'l', 0xc181ca4b, 0x413d1740},
+{'l', 0xc0e8ba2e, 0x00000000},
+{'l', 0x34800000, 0xbfb30540},
+{'l', 0x4182e8ba, 0xc1970c88},
+{'l', 0x41644073, 0x00000000},
+{'l', 0x417aa120, 0x41970c88},
+{'@', 0x000000ef, 0x000027ca},/*        ï        x-advance: 39.789062 */
+{'M', 0x4159101c, 0x00000000},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd57ff98},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b69, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000f0, 0x00004fa6},/*        ð        x-advance: 79.648438 */
+{'M', 0x421e5259, 0x3fb3055f},
+{'q', 0xc181ca4a, 0x00000000},
+{0, 0xc1c7292c, 0xc11055ee},
+{'q', 0xc10abdc2, 0xc11055ee},
+{0, 0xc10abdc2, 0xc1d01ca5},
+{'q', 0xb5000000, 0xc18880e4},
+{0, 0x410abdc2, 0xc1cf8d6c},
+{'q', 0x410abdc4, 0xc10e1914},
+{0, 0x41cb13b2, 0xc10e1914},
+{'q', 0x41194964, 0x00000000},
+{0, 0x41813b12, 0x40840730},
+{'9', 0xff87ffc4, 0xff47ff7e},
+{'4', 0x004aff58, 0xffc10000},
+{'l', 0x4173ea84, 0xc0d25980},
+{'9', 0xffd0ffc4, 0xffa8ff79},
+{'l', 0x4169d89c, 0x00000000},
+{'9', 0x0014002c, 0x0039005f},
+{'4', 0xffb700ab, 0x003e0000},
+{'l', 0xc16c157c, 0x40cddfc0},
+{'q', 0x413f5424, 0x412e8ba0},
+{0, 0x419055ee, 0x41c8d6d4},
+{'9', 0x00710030, 0x00f30030},
+{'l', 0x00000000, 0x3ed6d300},
+{'q', 0x00000000, 0x41920395},
+{0, 0xc10bdc30, 0x41dd89da},
+{'9', 0x004affbb, 0x004aff30},
+{'m', 0x41ac4ec6, 0xc20c23ce},
+{'q', 0x00000000, 0xc156d33c},
+{0, 0xc09ee190, 0xc19b8644},
+{'q', 0xc09ca4b8, 0xc0c2af70},
+{0, 0xc17cddfc, 0xc0c2af70},
+{'q', 0xc12faa14, 0x00000000},
+{0, 0xc180abdd, 0x40c2af70},
+{'q', 0xc0a11e70, 0x40c2af70},
+{0, 0xc0a11e70, 0x419b8644},
+{'q', 0x00000000, 0x41549662},
+{0, 0x40a11e70, 0x419c157c},
+{'q', 0x40a11e70, 0x40c7292c},
+{0, 0x4172cc16, 0x40c7292c},
+{'q', 0x413423cc, 0x00000000},
+{0, 0x418377f2, 0xc0c2af70},
+{'q', 0x40a7d508, 0xc0c4ec50},
+{0, 0x40a7d508, 0xc19d33eb},
+{'@', 0x000000f1, 0x00004fa6},/*        ñ        x-advance: 79.648438 */
+{'M', 0x4267e35b, 0x00000000},
+{'l', 0x00000000, 0xc23fe35b},
+{'8', 0xa4f5c500, 0xd1dbdff5},
+{'q', 0xc04ddfc0, 0xbfe8ba40},
+{0, 0xc1170c88, 0xbfe8ba40},
+{'q', 0xc111745c, 0x00000000},
+{0, 0xc1655ee0, 0x40c72930},
+{'9', 0x0031ffd7, 0x008affd7},
+{'4', 0x015e0000, 0x0000ff9c},
+{'l', 0x00000000, 0xc26e0abe},
+{'9', 0xff970000, 0xff7ffffd},
+{'l', 0x413e35b5, 0x00000000},
+{'8', 0x0f010200, 0x1c010c00},
+{'9', 0x000f0001, 0x003b0002},
+{'l', 0x3e56d300, 0x00000000},
+{'q', 0x408abdc4, 0xc0faa120},
+{0, 0x41200000, 0xc130c880},
+{'q', 0x40b77f18, 0xc0525980},
+{0, 0x41632204, 0xc0525980},
+{'q', 0x4147292c, 0x00000000},
+{0, 0x4191745c, 0x40c72930},
+{'9', 0x0031002e, 0x00a3002e},
+{'4', 0x01930000, 0x0000ff9b},
+{'m', 0xc0cddfc8, 0xc2a7f8d7},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2e8, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc8, 0x00000000},
+{'q', 0xbf982b00, 0x41259828},
+{0, 0xc095ee20, 0x4168ba30},
+{'q', 0xc05fc6b0, 0x40864400},
+{0, 0xc1170c88, 0x40864400},
+{'@', 0x000000f2, 0x00004fa6},/*        ò        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0xc1655ee0, 0xc23855ef},
+{'l', 0xc1b89d8a, 0xc19b8644},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000f3, 0x00004fa6},/*        ó        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0xc1f23cdd, 0xc23855ef},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4172cc16, 0xc1a08f38},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d8a, 0x419b8644},
+{'l', 0xc0d25984, 0x00000000},
+{'@', 0x000000f4, 0x00004fa6},/*        ô        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0x402a11f0, 0xc23dee19},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f4, 0xc13d1740},
+{'l', 0xbe0f3700, 0x00000000},
+{'l', 0xc181ca4b, 0x413d1740},
+{'l', 0xc0e8ba30, 0x00000000},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4182e8bb, 0xc1970c88},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x417aa120, 0x41970c88},
+{'@', 0x000000f5, 0x00004fa6},/*        õ        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0xc10bdc30, 0xc23855ef},
+{'8', 0xf6d200e9, 0xead3f6e9},
+{'8', 0xead7f4eb, 0xf6dcf6ed},
+{'8', 0x11d300e2, 0x31ec11f1},
+{'l', 0xc0cba2e8, 0x00000000},
+{'8', 0xaa13c706, 0xd223e30d},
+{'8', 0xef3aef16, 0x0a300018},
+{'8', 0x162d0a17, 0x16280c15},
+{'8', 0x0a240a13, 0xbe410037},
+{'l', 0x40cddfc0, 0x00000000},
+{'q', 0xbf982ac0, 0x41259828},
+{0, 0xc095ee10, 0x4168ba30},
+{'q', 0xc05fc6c0, 0x40864400},
+{0, 0xc1170c88, 0x40864400},
+{'@', 0x000000f6, 0x00004fa6},/*        ö        x-advance: 79.648438 */
+{'M', 0x429345d1, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc30, 0x411b8644},
+{0, 0xc1cb13b0, 0x411b8644},
+{'q', 0xc1849661, 0xb4000000},
+{0, 0xc1c8479c, 0xc1211e6f},
+{'q', 0xc1076276, 0xc1223cdd},
+{0, 0xc1076276, 0xc1e9d89c},
+{'q', 0xb5000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'q', 0x418abdc4, 0x00000000},
+{0, 0x41cc3220, 0x41194968},
+{'9', 0x004c0041, 0x00ec0041},
+{'m', 0xc15377f0, 0x00000000},
+{'q', 0x00000000, 0xc17aa120},
+{0, 0xc095ee18, 0xc1b5d176},
+{'q', 0xc093b138, 0xc0e44070},
+{0, 0xc17982b0, 0xc0e44070},
+{'q', 0xc130c880, 0x00000000},
+{0, 0xc1801ca4, 0x40e8ba30},
+{'q', 0xc09ca4b4, 0x40e67d50},
+{0, 0xc09ca4b4, 0x41b4b306},
+{'q', 0x00000000, 0x416f70c6},
+{0, 0x409a67d8, 0x41b423cd},
+{'q', 0x409ca4b0, 0x40ef70c8},
+{0, 0x417508f2, 0x40ef70c8},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0xc21f292c, 0xc23d5ee1},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b69, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000f7, 0x00004e99},/*        ÷        x-advance: 78.597656 */
+{'M', 0x4091745d, 0xc22a11e7},
+{'l', 0x00000000, 0xc1235b4c},
+{'4', 0x0000022c, 0x00510000},
+{'6', 0x0000fdd4, 0x00d700e7},
+{'0', 0x005d9a00, 0x00a36600},
+{'m', 0x00000000, 0xc24d982a},
+{'0', 0x005d9a00, 0x00a36600},
+{'@', 0x000000f8, 0x0000577b},/*        ø        x-advance: 87.480469 */
+{'M', 0x429b8644, 0xc2179bbf},
+{'q', 0x00000000, 0x419ee190},
+{0, 0xc10bdc30, 0x41eca4b2},
+{'q', 0xc10bdc34, 0x411b8644},
+{0, 0xc1cb13b2, 0x411b8644},
+{'9', 0x0000ff93, 0xffcaff51},
+{'4', 0x0040ffc9, 0x0000ffa3},
+{'l', 0x414ddfc6, 0xc16f70c9},
+{'q', 0xc0b9bbf8, 0xc11a67d5},
+{0, 0xc0b9bbf8, 0xc1ccc156},
+{'q', 0x00000000, 0xc21ca4b3},
+{0, 0x4207aa12, 0xc21ca4b3},
+{'9', 0x00000070, 0x003200b0},
+{'4', 0xffc60032, 0x0000005d},
+{'l', 0xc1419100, 0x4160e524},
+{'9', 0x004a002d, 0x00d0002d},
+{'m', 0xc15377f0, 0x00000000},
+{'9', 0xffb80000, 0xff85fff4},
+{'l', 0xc2071ada, 0x421d33eb},
+{'q', 0x40982af8, 0x40c4ec4c},
+{0, 0x41655ee0, 0x40c4ec4c},
+{'q', 0x4135423c, 0x00000000},
+{0, 0x41813b14, 0xc0e8ba2e},
+{'9', 0xffc60027, 0xff4b0027},
+{'m', 0xc224c158, 0x00000000},
+{'9', 0x00480000, 0x0078000d},
+{'l', 0x4206d33e, 0xc21cec4e},
+{'q', 0xc095ee18, 0xc0b54240},
+{0, 0xc1679bbc, 0xc0b54240},
+{'q', 0xc130c884, 0x00000000},
+{0, 0xc1801ca6, 0x40e8ba30},
+{'q', 0xc09ca4b0, 0x40e67d50},
+{0, 0xc09ca4b0, 0x41b4b306},
+{'@', 0x000000f9, 0x00004fa6},/*        ù        x-advance: 79.648438 */
+{'M', 0x41b3055f, 0xc2975424},
+{'l', 0x00000000, 0x423fe35c},
+{'8', 0x5c0b3b00, 0x2f25210b},
+{'q', 0x404ddfc8, 0x3fe8ba30},
+{0, 0x41170c88, 0x3fe8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41655ee4, 0xc0c7292c},
+{'9', 0xffcf0029, 0xff760029},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x426e0abe},
+{'9', 0x00690000, 0x00810003},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xf1fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc4ffff},
+{'l', 0xbe56d400, 0x00000000},
+{'q', 0xc08abdc0, 0x40faa11f},
+{0, 0xc1211e6c, 0x4131e6f0},
+{'q', 0xc0b54240, 0x404ddfc8},
+{0, 0xc1620394, 0x404ddfc8},
+{'q', 0xc147292e, 0xb4000000},
+{0, 0xc1920396, 0xc0c4ec4f},
+{'9', 0xffcfffd3, 0xff5dffd3},
+{'4', 0xfe6d0000, 0x00000065},
+{'m', 0x41c4ec4f, 0xc1052598},
+{'l', 0xc1b89d8a, 0xc19b8644},
+{'l', 0x00000000, 0xc001ca40},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x4172cc14, 0x41a08f38},
+{'l', 0x00000000, 0x3fb30540},
+{'l', 0xc0d25980, 0x00000000},
+{'@', 0x000000fa, 0x00004fa6},/*        ú        x-advance: 79.648438 */
+{'M', 0x41b3055f, 0xc2975424},
+{'l', 0x00000000, 0x423fe35c},
+{'8', 0x5c0b3b00, 0x2f25210b},
+{'q', 0x404ddfc8, 0x3fe8ba30},
+{0, 0x41170c88, 0x3fe8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41655ee4, 0xc0c7292c},
+{'9', 0xffcf0029, 0xff760029},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x426e0abe},
+{'9', 0x00690000, 0x00810003},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xf1fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc4ffff},
+{'l', 0xbe56d400, 0x00000000},
+{'q', 0xc08abdc0, 0x40faa11f},
+{0, 0xc1211e6c, 0x4131e6f0},
+{'q', 0xc0b54240, 0x404ddfc8},
+{0, 0xc1620394, 0x404ddfc8},
+{'q', 0xc147292e, 0xb4000000},
+{0, 0xc1920396, 0xc0c4ec4f},
+{'9', 0xffcfffd3, 0xff5dffd3},
+{'4', 0xfe6d0000, 0x00000065},
+{'m', 0x40d49660, 0xc1052598},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4172cc16, 0xc1a08f38},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d8a, 0x419b8644},
+{'l', 0xc0d25984, 0x00000000},
+{'@', 0x000000fb, 0x00004fa6},/*        û        x-advance: 79.648438 */
+{'M', 0x41b3055f, 0xc2975424},
+{'l', 0x00000000, 0x423fe35c},
+{'8', 0x5c0b3b00, 0x2f25210b},
+{'q', 0x404ddfc8, 0x3fe8ba30},
+{0, 0x41170c88, 0x3fe8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41655ee4, 0xc0c7292c},
+{'9', 0xffcf0029, 0xff760029},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x426e0abe},
+{'9', 0x00690000, 0x00810003},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xf1fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc4ffff},
+{'l', 0xbe56d400, 0x00000000},
+{'q', 0xc08abdc0, 0x40faa11f},
+{0, 0xc1211e6c, 0x4131e6f0},
+{'q', 0xc0b54240, 0x404ddfc8},
+{0, 0xc1620394, 0x404ddfc8},
+{'q', 0xc147292e, 0xb4000000},
+{0, 0xc1920396, 0xc0c4ec4f},
+{'9', 0xffcfffd3, 0xff5dffd3},
+{'4', 0xfe6d0000, 0x00000065},
+{'m', 0x4222847a, 0xc11b8640},
+{'l', 0xb6800000, 0x3fb30540},
+{'l', 0xc0eaf710, 0x00000000},
+{'l', 0xc17508f0, 0xc13d1740},
+{'l', 0xbe0f3800, 0x00000000},
+{'l', 0xc181ca4b, 0x413d1740},
+{'l', 0xc0e8ba2c, 0x00000000},
+{'l', 0x00000000, 0xbfb30540},
+{'l', 0x4182e8ba, 0xc1970c88},
+{'l', 0x41644070, 0x00000000},
+{'l', 0x417aa120, 0x41970c88},
+{'@', 0x000000fc, 0x00004fa6},/*        ü        x-advance: 79.648438 */
+{'M', 0x41b3055f, 0xc2975424},
+{'l', 0x00000000, 0x423fe35c},
+{'8', 0x5c0b3b00, 0x2f25210b},
+{'q', 0x404ddfc8, 0x3fe8ba30},
+{0, 0x41170c88, 0x3fe8ba30},
+{'q', 0x4111745c, 0x00000000},
+{0, 0x41655ee4, 0xc0c7292c},
+{'9', 0xffcf0029, 0xff760029},
+{'4', 0xfea20000, 0x00000064},
+{'l', 0x00000000, 0x426e0abe},
+{'9', 0x00690000, 0x00810003},
+{'l', 0xc13e35b4, 0x00000000},
+{'8', 0xf1fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc4ffff},
+{'l', 0xbe56d400, 0x00000000},
+{'q', 0xc08abdc0, 0x40faa11f},
+{0, 0xc1211e6c, 0x4131e6f0},
+{'q', 0xc0b54240, 0x404ddfc8},
+{0, 0xc1620394, 0x404ddfc8},
+{'q', 0xc147292e, 0xb4000000},
+{0, 0xc1920396, 0xc0c4ec4f},
+{'9', 0xffcfffd3, 0xff5dffd3},
+{'4', 0xfe6d0000, 0x00000065},
+{'m', 0xc02a11e8, 0xc1194960},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b6a, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x000000fd, 0x0000479b},/*        ý        x-advance: 71.605469 */
+{'M', 0x4155b4d0, 0x41edc322},
+{'9', 0x0000ffd7, 0xfffaffbb},
+{'l', 0x35000000, 0xc1170c88},
+{'q', 0x402a11e6, 0x3ed6d340},
+{0, 0x40bbf8d7, 0x3ed6d340},
+{'9', 0x0000005d, 0xff760094},
+{'l', 0x3f982af0, 0xc0407294},
+{'4', 0xfda6ff10, 0x0000006b},
+{'l', 0x417f1adb, 0x422745d2},
+{'8', 0x13060702, 0x48190a03},
+{'9', 0x003e0015, 0x00450016},
+{'l', 0x409ca4b8, 0xc15c6b6a},
+{'4', 0xfe7f0084, 0x0000006a},
+{'l', 0xc1e8ba30, 0x42975424},
+{'q', 0xc095ee18, 0x41419102},
+{0, 0xc10bdc34, 0x419055ee},
+{'8', 0x46b82ee0, 0x16a816d9},
+{'m', 0x41377f1a, 0xc2e369a0},
+{'l', 0x00000000, 0xbfb30500},
+{'l', 0x4172cc16, 0xc1a08f38},
+{'l', 0x41679bc0, 0x00000000},
+{'l', 0x00000000, 0x4001ca40},
+{'l', 0xc1b89d8a, 0x419b8644},
+{'l', 0xc0d25984, 0x00000000},
+{'@', 0x000000fe, 0x00004fa6},/*        þ        x-advance: 79.648438 */
+{'M', 0x411a67d5, 0xc2cf8d6d},
+{'4', 0x00000064, 0x00ec0000},
+{'9', 0x00240000, 0x0055fffe},
+{'l', 0x3ed6d340, 0x00000000},
+{'q', 0x4056d340, 0xc0dfc6b8},
+{0, 0x410e1910, 0xc1235b4c},
+{'q', 0x40b0c87c, 0xc0525980},
+{0, 0x4168ba2e, 0xc0525980},
+{'q', 0x415fc6b8, 0x00000000},
+{0, 0x41a745d2, 0x4115ee18},
+{'q', 0x40dd89d0, 0x4115ee18},
+{0, 0x40dd89d0, 0x41eb8644},
+{'q', 0x00000000, 0x421e5259},
+{0, 0xc1dea846, 0x421e5259},
+{'9', 0x0000ff75, 0xff97ff45},
+{'l', 0xbeb30540, 0x00000000},
+{'9', 0x00040002, 0x005f0002},
+{'4', 0x00ec0000, 0x0000ff9c},
+{'6', 0xfbd50000, 0x020e0196},
+{'q', 0x00000000, 0xc17cddf8},
+{0, 0xc08880e0, 0xc1b4b304},
+{'8', 0xca94cade, 0x19a300c5},
+{'q', 0xc0864408, 0x40496600},
+{0, 0xc0cddfc8, 0x411dc320},
+{'q', 0xc00abdc0, 0x40d49660},
+{0, 0xc00abdc0, 0x418abdc2},
+{'q', 0x00000000, 0x416e525a},
+{0, 0x40982af4, 0x41afaa12},
+{'q', 0x40982af8, 0x40e20394},
+{0, 0x417745d2, 0x40e20394},
+{'q', 0x4115ee18, 0x00000000},
+{0, 0x415a2e8c, 0xc0db4cfa},
+{'q', 0x408abdc0, 0xc0dd89da},
+{0, 0x408abdc0, 0xc1b92cc0},
+{'@', 0x000000ff, 0x0000479b},/*        ÿ        x-advance: 71.605469 */
+{'M', 0x4155b4d0, 0x41edc322},
+{'9', 0x0000ffd7, 0xfffaffbb},
+{'l', 0x35000000, 0xc1170c88},
+{'q', 0x402a11e6, 0x3ed6d340},
+{0, 0x40bbf8d7, 0x3ed6d340},
+{'9', 0x0000005d, 0xff760094},
+{'l', 0x3f982af0, 0xc0407294},
+{'4', 0xfda6ff10, 0x0000006b},
+{'l', 0x417f1adb, 0x422745d2},
+{'8', 0x13060702, 0x48190a03},
+{'9', 0x003e0015, 0x00450016},
+{'l', 0x409ca4b8, 0xc15c6b6a},
+{'4', 0xfe7f0084, 0x0000006a},
+{'l', 0xc1e8ba30, 0x42975424},
+{'q', 0xc095ee18, 0x41419102},
+{0, 0xc10bdc34, 0x419055ee},
+{'8', 0x46b82ee0, 0x16a816d9},
+{'m', 0x40377f18, 0xc2e5ee18},
+{'0', 0x005c9a00, 0x00a46600},
+{'m', 0x41dc6b69, 0x00000000},
+{'0', 0x005b9a00, 0x00a56600},
+{'@', 0x00000141, 0x00004fa6},/*        Ł        x-advance: 79.648438 */
+{'M', 0x422c4ec5, 0xc25eefe3},
+{'l', 0xc18fc6b7, 0x4126b698},
+{'l', 0x00000000, 0x42099f54},
+{'l', 0x4247292c, 0x35800000},
+{'l', 0x00000000, 0x412e8ba3},
+{'l', 0xc27c9660, 0x00000000},
+{'l', 0xb5800000, 0xc2167d50},
+{'l', 0xc125982b, 0x40be35b0},
+{'l', 0xb4000000, 0xc130c880},
+{'l', 0x4125982b, 0xc0be35b8},
+{'l', 0x00000000, 0xc24770c7},
+{'l', 0x4155b4cf, 0x00000000},
+{'l', 0x00000000, 0x4228abdb},
+{'l', 0x418fc6b7, 0xc125982c},
+{'l', 0x00000000, 0x412faa14},
+{'@', 0x000003c0, 0x000062cf},/*        π        x-advance: 98.808594 */
+{'M', 0x429d7b86, 0x3fb3055f},
+{'8', 0xe1a400c0, 0x96e4e1e4},
+{'4', 0xfe6b0000, 0x0000ff20},
+{'l', 0x00000000, 0x40a11e68},
+{'q', 0x00000000, 0x41801ca6},
+{0, 0xbfe8ba20, 0x4201ca4c},
+{'9', 0x0082fff2, 0x00e8ffd8},
+{'l', 0xc1525983, 0x00000000},
+{'q', 0x4068ba2c, 0xc1667d50},
+{0, 0x40b5423e, 0xc1f479bc},
+{'9', 0xff7f0010, 0xff0e0010},
+{'l', 0x00000000, 0xc0b30558},
+{'8', 0x06af00dc, 0x0ec506d4},
+{'l', 0x00000000, 0xc11b8640},
+{'8', 0xf52bfa0d, 0xfb3bfb1e},
+{'l', 0x42946440, 0x00000000},
+{'4', 0x00490000, 0x0000ff7e},
+{'l', 0x00000000, 0x423f9bbf},
+{'8', 0x3e0b2a00, 0x1328130b},
+{'4', 0xfffc0030, 0x00480000},
+{'q', 0xc0ac4ec0, 0x3fb3055f},
+{0, 0xc1200000, 0x3fb3055f},
+{'@', 0x0000201c, 0x00002fb1},/*        “        x-advance: 47.691406 */
+{'M', 0x40a7d509, 0xc2852598},
+{'l', 0x00000000, 0xc1235b50},
+{'8', 0xa10aca00, 0xb222d70a},
+{'l', 0x41076276, 0x00000000},
+{'9', 0x004cffcb, 0x0092ffcb},
+{'4', 0x00000031, 0x006d0000},
+{'6', 0x0000ff93, 0x000000b9},
+{'l', 0x00000000, 0xc1235b50},
+{'8', 0xa20acb00, 0xb121d70a},
+{'l', 0x410880e4, 0x00000000},
+{'9', 0x004cffcc, 0x0092ffcc},
+{'l', 0x40c4ec50, 0x00000000},
+{'l', 0x00000000, 0x415a2e90},
+{'l', 0xc159101e, 0x00000000},
+{'@', 0x0000201d, 0x00002fb1},/*        ”        x-advance: 47.691406 */
+{'M', 0x419a67d5, 0xc2b0c881},
+{'8', 0x63f63a00, 0x4bdf27f6},
+{'l', 0xc1099f54, 0x00000000},
+{'9', 0xffb40034, 0xff6e0034},
+{'0', 0x930000cf, 0x5100006d},
+{'m', 0x41b92cc1, 0x00000000},
+{'8', 0x5cf73400, 0x51de28f7},
+{'l', 0xc1076276, 0x00000000},
+{'9', 0xffb40034, 0xff6e0034},
+{'0', 0x930000cf, 0x5100006c},
+{'@', 0x00002022, 0x00003223},/*        •        x-advance: 50.136719 */
+{'M', 0x4231e6f0, 0xc23ec4ec},
+{'8', 0x6ed33f00, 0x2e912ed3},
+{'8', 0xd29400c1, 0x92d4d2d4},
+{'8', 0x942dc000, 0xd46bd42d},
+{'8', 0x2d6e0040, 0x6b2e2c2e},
+{'@', 0x00002026, 0x00008f37},/*        …        x-advance: 143.214844 */
+{'M', 0x419b8644, 0x00000000},
+{'l', 0x00000000, 0xc17508f3},
+{'4', 0x0000006d, 0x007a0000},
+{'6', 0x0000ff93, 0x000002d6},
+{'l', 0x00000000, 0xc17508f3},
+{'4', 0x0000006c, 0x007a0000},
+{'6', 0x0000ff94, 0x0000fe97},
+{'l', 0x00000000, 0xc17508f3},
+{'l', 0x4156d340, 0x00000000},
+{'l', 0x00000000, 0x417508f3},
+{'l', 0xc156d340, 0x00000000},
+{'@', 0x000020ac, 0x00004fa6},/*        €        x-advance: 79.648438 */
+{'M', 0x42414966, 0xc10cfaa1},
+{'8', 0xe5590037, 0xb229e521},
+{'l', 0x414efe38, 0x3f7aa120},
+{'q', 0xc0064400, 0x412d6d33},
+{0, 0xc11ca4b0, 0x4185b4cf},
+{'q', 0xc0f3ea88, 0x40bbf8d8},
+{0, 0xc19e525a, 0x40bbf8d8},
+{'q', 0xc172cc14, 0xb4000000},
+{0, 0xc1c07293, 0xc11292cc},
+{'9', 0xffb7ffba, 0xff26ffa9},
+{'0', 0xb81600a1, 0xd5ff0043},
+{'0', 0x00a7d001, 0x0048b916},
+{'q', 0x400f377c, 0xc18fc6b4},
+{0, 0x412e8ba2, 0xc1d5b4d0},
+{'q', 0x410abdc4, 0xc10cfaa0},
+{0, 0x41bfe35c, 0xc10cfaa0},
+{'q', 0x4143cde0, 0x00000000},
+{0, 0x419ee190, 0x40be35b0},
+{'9', 0x002e003d, 0x0085004d},
+{'l', 0xc14efe38, 0x3f7aa180},
+{'8', 0xb2d7cef9, 0xe5a4e5df},
+{'q', 0xc11ee190, 0x00000000},
+{0, 0xc173ea84, 0x40c2af70},
+{'9', 0x0030ffd7, 0x0099ffcb},
+{'4', 0x000000f9, 0x0047ffea},
+{'l', 0xc1e70c87, 0x00000000},
+{'8', 0x30ff0dff, 0x2b021600},
+{'4', 0x000000fc, 0x0048ffea},
+{'l', 0xc1e20394, 0x00000000},
+{'q', 0x3fc4ec50, 0x415a2e8e},
+{0, 0x40e67d50, 0x41a00001},
+{'q', 0x40b54240, 0x40c9660a},
+{0, 0x417508f4, 0x40c9660a},
+{'@', 0x00002122, 0x00008f37},/*        â„¢        x-advance: 143.214844 */
+{'M', 0x42ec80e5, 0xc23157b8},
+{'l', 0x00000000, 0xc22d2598},
+{'l', 0xbf211e80, 0x3fc4ec40},
+{'l', 0xbf44ec80, 0x400f3780},
+{'l', 0xc180abdc, 0x421e0abe},
+{'l', 0xc0f1ada0, 0x00000000},
+{'l', 0xc13660a8, 0xc1e70c88},
+{'l', 0xc0ac4ed0, 0xc1667d50},
+{'l', 0xbd8f3800, 0x3fb30540},
+{'l', 0xbd8f3400, 0x3f982b00},
+{'l', 0x00000000, 0x4222cc16},
+{'l', 0xc10f3780, 0x00000000},
+{'l', 0x00000000, 0xc258c880},
+{'l', 0x41549660, 0x00000000},
+{'l', 0x417982b0, 0x421d7b85},
+{'l', 0x3f864400, 0x403bf8e0},
+{'l', 0x40a59820, 0xc156d344},
+{'l', 0x413bf8d8, 0xc1e70c84},
+{'4', 0x00000066, 0x01b10000},
+{'6', 0x0000ffba, 0xfe8dfd91},
+{'l', 0x36800000, 0x4239bbf8},
+{'l', 0xc115ee1a, 0x00000000},
+{'l', 0x00000000, 0xc239bbf8},
+{'l', 0xc18ea848, 0x00000000},
+{'l', 0x35800000, 0xc0f86440},
+{'l', 0x4235d174, 0x00000000},
+{'l', 0x00000000, 0x40f86440},
+{'l', 0xc1920394, 0x00000000},
+{'@', 0x00002190, 0x00008f37},/*        ←        x-advance: 143.214844 */
+{'M', 0x42334cfa, 0xc20b055f},
+{'9', 0x0025001f, 0x006e0042},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffadffb9, 0xff84ff69},
+{'l', 0x00000000, 0xc0211e70},
+{'9', 0xffd80050, 0xff840097},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x0048ffde, 0x006effbe},
+{'l', 0x428a525a, 0x00000000},
+{'l', 0x00000000, 0x40c07290},
+{'l', 0xc28a525a, 0x00000000},
+{'@', 0x00002191, 0x0000479b},/*        ↑        x-advance: 71.605469 */
+{'M', 0x42033056, 0xc281ca4b},
+{'9', 0x001fffdb, 0x0042ff92},
+{'l', 0x00000000, 0xc0a11e70},
+{'9', 0xffb90053, 0xff69007c},
+{'l', 0x40211e60, 0x00000000},
+{'9', 0x00500028, 0x0097007c},
+{'l', 0x00000000, 0x40a11e70},
+{'9', 0xffdeffb8, 0xffbeff92},
+{'l', 0x00000000, 0x428a5259},
+{'l', 0xc0c07290, 0x36200000},
+{'l', 0x00000000, 0xc28a5259},
+{'@', 0x00002192, 0x00008f37},/*        →        x-advance: 143.214844 */
+{'M', 0x42c4c881, 0xc22313b1},
+{'9', 0xffdbffe1, 0xff92ffbe},
+{'l', 0x40a11e70, 0x00000000},
+{'9', 0x00530047, 0x007c0097},
+{'l', 0x00000000, 0x40211e70},
+{'9', 0x0028ffb0, 0x007cff69},
+{'l', 0xc0a11e70, 0x00000000},
+{'9', 0xffb80022, 0xff920042},
+{'l', 0xc28a525a, 0x00000000},
+{'l', 0x36000000, 0xc0c07290},
+{'l', 0x428a525a, 0x00000000},
+{'@', 0x00002193, 0x0000479b},/*        ↓        x-advance: 71.605469 */
+{'M', 0x421b3ea8, 0xc135423d},
+{'9', 0xffe10025, 0xffbe006e},
+{'l', 0x00000000, 0x40a11e6e},
+{'9', 0x0047ffad, 0x0097ff84},
+{'l', 0xc0211e60, 0xb5000000},
+{'9', 0xffb0ffd8, 0xff69ff84},
+{'l', 0x00000000, 0xc0a11e6c},
+{'9', 0x00220048, 0x0042006e},
+{'l', 0x00000000, 0xc28a5259},
+{'l', 0x40c07290, 0x00000000},
+{'l', 0x00000000, 0x428a5259},
+{'@', 0x00002212, 0x000053a2},/*        −        x-advance: 83.632812 */
+{'M', 0x40e20394, 0xc22a11e7},
+{'l', 0x00000000, 0xc1235b4c},
+{'l', 0x428b292d, 0x00000000},
+{'l', 0x00000000, 0x41235b4c},
+{'l', 0xc28b292d, 0x00000000},
+{'@', 0x00002248, 0x00004e99},/*        ≈        x-advance: 78.597656 */
+{'M', 0x42620394, 0xc2540729},
+{'8', 0xf5b100da, 0xe6aff4d8},
+{'q', 0xc114cfac, 0xc0496600},
+{0, 0xc172cc16, 0xc0496600},
+{'8', 0x0abd00dd, 0x26b90ae1},
+{'l', 0x35000000, 0xc1211e70},
+{'q', 0x40ff1adb, 0xc0bbf8e0},
+{0, 0x41932203, 0xc0bbf8e0},
+{'q', 0x40e67d50, 0x00000000},
+{0, 0x418377f1, 0x405259a0},
+{'8', 0x1f5d163d, 0x08390820},
+{'9', 0x00000048, 0xffcc0088},
+{'l', 0x00000000, 0x4126b69c},
+{'8', 0x22bf17e0, 0x0ab00ae0},
+{'m', 0x00000000, 0x41ec157b},
+{'8', 0xf4b100da, 0xe6aff4d8},
+{'q', 0xc114cfac, 0xc0525988},
+{0, 0xc172cc16, 0xc0525988},
+{'8', 0x0bbb00db, 0x25bc0be0},
+{'l', 0xb5000000, 0xc11dc324},
+{'q', 0x40f86441, 0xc0bbf8d0},
+{0, 0x41932203, 0xc0bbf8d0},
+{'8', 0x0740001d, 0x216c0723},
+{'8', 0x10320611, 0x083a0821},
+{'9', 0x00000048, 0xffcd0088},
+{'l', 0x00000000, 0x412479be},
+{'8', 0x24bc1adc, 0x09b409e1},
+{'@', 0x000025bc, 0x00008dbf},/*        â–¼        x-advance: 141.746094 */
+{'M', 0x42e1745d, 0xc2a3c6b6},
+{'l', 0xc22745d2, 0x42a78d6d},
+{'l', 0xc227d508, 0xc2a78d6d},
+{'l', 0x42a78d6d, 0x00000000},
+{'@', 0x00002660, 0x00004c15},/*        â™         x-advance: 76.082031 */
+{'M', 0x42182af7, 0xc2ac2af7},
+{'q', 0x3fdfc6c0, 0x40d6d340},
+{0, 0x40a35b50, 0x414a8478},
+{'q', 0x4056d330, 0x40bbf8e0},
+{0, 0x415ea844, 0x417982b0},
+{'8', 0x6b62464e, 0x4c142413},
+{'8', 0x59dc3500, 0x23ab23dc},
+{'q', 0xc12faa10, 0x00000000},
+{0, 0xc18f377e, 0xc155b4d0},
+{'q', 0x3e56d300, 0x4131e6f0},
+{0, 0x403bf8d0, 0x41876276},
+{'q', 0x40330560, 0x40b9bbfa},
+{0, 0x41076278, 0x4111745e},
+{'9', 0x001a002d, 0x001f0077},
+{'4', 0x00140004, 0x0000fe45},
+{'l', 0x3ed6d380, 0xc025982b},
+{'q', 0x410abdc2, 0x00000000},
+{0, 0x416af70c, 0xc056d33f},
+{'q', 0x40c07294, 0xc05b4cfa},
+{0, 0x411055f0, 0xc1170c88},
+{'9', 0xffd00018, 0xff7f0018},
+{'l', 0x00000000, 0xbf7aa120},
+{'q', 0xc0c96608, 0x4155b4d0},
+{0, 0xc191745c, 0x4155b4d0},
+{'8', 0xddaa00cf, 0xa9dcdddc},
+{'8', 0xa918cf00, 0xad50da19},
+{'q', 0x411b8642, 0xc1052598},
+{0, 0x41655ee0, 0xc16d33e8},
+{'q', 0x4093b138, 0xc0d01cb0},
+{0, 0x40cddfc8, 0xc173ea88},
+{'@', 0x00002663, 0x00005dfc},/*        ♣        x-advance: 93.984375 */
+{'M', 0x429901ca, 0x00000000},
+{'4', 0x0000fe29, 0xffed0004},
+{'8', 0xe26cf14b, 0xd03bf121},
+{'8', 0xb629df1a, 0xac0fd70f},
+{'l', 0xbe0f3700, 0xc0525980},
+{'8', 0x64af43e1, 0x219d21cf},
+{'8', 0xebb100d5, 0xc8c9ebdd},
+{'8', 0xb2eddded, 0x9428c000},
+{'8', 0xd45cd428, 0x1c5a0022},
+{'8', 0xc6e2dceb, 0xd7faecfa},
+{'8', 0x932dbd00, 0xd76cd72d},
+{'8', 0x2c6d0040, 0x682c2c2c},
+{'8', 0x66da3000, 0xe837ea2e},
+{'8', 0xfc22fc0c, 0x2b60003a},
+{'8', 0x6b282a28, 0x6fd54000},
+{'8', 0x2d942dd5, 0xf3c000e1},
+{'8', 0xdcc5f3df, 0xafc4eae6},
+{'q', 0x3eb30580, 0x410cfaa0},
+{0, 0x4001ca50, 0x41632204},
+{'8', 0x4c2c2a0d, 0x3042211e},
+{'q', 0x408f3788, 0x3fe8ba30},
+{0, 0x4147292c, 0x40525983},
+{'l', 0x3f0f3780, 0x401ca4b3},
+{'@', 0x00002665, 0x00005508},/*        ♥        x-advance: 85.031250 */
+{'M', 0x422aa11e, 0x3fcddfc7},
+{'q', 0xbfc4ec40, 0xc0c07293},
+{0, 0xc0982af8, 0xc1460abe},
+{'9', 0xffceffe7, 0xff4aff85},
+{'l', 0xc0c96608, 0xc1099f54},
+{'8', 0xa5c7c9d7, 0xb7f1dcf1},
+{'8', 0x9f26c500, 0xda5fda27},
+{'8', 0x1f580030, 0x633d1f28},
+{'8', 0x9d3abe13, 0xdf58df27},
+{'8', 0x265d0036, 0x5c282628},
+{'q', 0x00000000, 0x40c07290},
+{0, 0xc044ec60, 0x414a8478},
+{'q', 0xc044ec40, 0x40d49660},
+{0, 0xc12d6d34, 0x4181ca4a},
+{'q', 0xc11ca4b0, 0x4148479e},
+{0, 0xc1655ee0, 0x41a00001},
+{'q', 0xc08f3780, 0x40ed33ea},
+{0, 0xc0dfc6b8, 0x418377f1},
+{'@', 0x00002666, 0x00004913},/*        ♦        x-advance: 73.074219 */
+{'M', 0x42112cc1, 0xc2ab0c88},
+{'q', 0x40a11e70, 0x410bdc30},
+{0, 0x41644074, 0x41ab3058},
+{'q', 0x4114cfa8, 0x41496608},
+{0, 0x418ea848, 0x41b157b6},
+{'q', 0xc0982af8, 0x409ca4b8},
+{0, 0xc17745d4, 0x41994966},
+{'q', 0xc12b3054, 0x41632204},
+{0, 0xc1840728, 0x41c45d17},
+{'q', 0xc0259830, 0xc09ee190},
+{0, 0xc111745e, 0xc160e525},
+{'q', 0xc0cddfc8, 0xc11292cb},
+{0, 0xc139bbf9, 0xc17cddfb},
+{'q', 0xc0a5982a, 0xc0d6d344},
+{0, 0xc131e6f0, 0xc15d89da},
+{'q', 0x4101ca4c, 0xc1194964},
+{0, 0x4189101c, 0xc1acddfc},
+{'q', 0x41117460, 0xc1419104},
+{0, 0x4168ba30, 0xc1afaa12},
+{'@', 0x0000fb01, 0x0000479b},/*        fi        x-advance: 71.605469 */
+{'M', 0x41c9f542, 0xc28501ca},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x4091745c, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'4', 0x00000076, 0x00490000},
+{'6', 0x0000ff8a, 0x021400c1},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd230000},
+{'0', 0x0064a000, 0x009c6000},
+{'@', 0x0000fb02, 0x0000479b},/*        fl        x-advance: 71.605469 */
+{'M', 0x41c9f542, 0xc28501ca},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x4091745c, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'4', 0x00000076, 0x00490000},
+{'6', 0x0000ff8a, 0x021400c1},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'l', 0x4149660c, 0x00000000},
+{'l', 0x00000000, 0x42cf8d6d},
+{'l', 0xc149660c, 0x00000000},
+{'@', 0x0000fb03, 0x00006a92},/*        ffi        x-advance: 106.570312 */
+{'M', 0x4270d6d3, 0xc28501ca},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x40917460, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'4', 0x00000076, 0x00490000},
+{'6', 0x0000ff8a, 0x021400c1},
+{'l', 0x00000000, 0xc2975424},
+{'4', 0x00000064, 0x025d0000},
+{'6', 0x0000ff9c, 0xfd230000},
+{'0', 0x0064a000, 0x009c6000},
+{'m', 0xc26c5d17, 0x41c9f544},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x4091745c, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x00000000, 0x411292d0},
+{'l', 0xc16c157c, 0x00000000},
+{'@', 0x0000fb04, 0x000069df},/*        ffl        x-advance: 105.871094 */
+{'M', 0x4270d6d3, 0xc28501ca},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660c, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x40917460, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'4', 0x00000076, 0x00490000},
+{'6', 0x0000ff8a, 0x021400c1},
+{'l', 0x00000000, 0xc2cf8d6d},
+{'4', 0x00000064, 0x033e0000},
+{'6', 0x0000ff9c, 0xfdecfe27},
+{'l', 0x00000000, 0x428501ca},
+{'l', 0xc149660a, 0x00000000},
+{'l', 0x00000000, 0xc28501ca},
+{'0', 0xb70000ab, 0xbc000055},
+{'q', 0x00000000, 0xc1259830},
+{0, 0x4091745c, 0xc16e5258},
+{'8', 0xdc6fdc24, 0x06470029},
+{'l', 0x00000000, 0x41194968},
+{'8', 0xfcd4fce7, 0x13c900da},
+{'9', 0x0013ffef, 0x0047ffef},
+{'l', 0x00000000, 0x40d91010},
+{'l', 0x416c157c, 0x00000000},
+{'l', 0x00000000, 0x411292d0},
+{'l', 0xc16c157c, 0x00000000},
+};
+#define ctx_font_Arimo_Regular_name "Arimo Regular"
+#endif
diff --git a/usermodule/uctx/fonts/Cousine-Bold.h b/usermodule/uctx/fonts/Cousine-Bold.h
new file mode 100644
index 0000000000000000000000000000000000000000..57952546a221088aaaf9f57b7c72f06449ff36bd
--- /dev/null
+++ b/usermodule/uctx/fonts/Cousine-Bold.h
@@ -0,0 +1,4820 @@
+#ifndef CTX_FONT_Cousine_Bold
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fifl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Cousine_Bold[]={
+{15, 0x0000a008, 0x000012c9},/* length:4809 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000e, 0x00000002},/* Cousine Bold*/
+{32, 0x73756f43, 0x20656e69},
+{'B', 0x00646c6f, 0x00000000},
+{')', 0x0000000e, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000054c2},/*                 x-advance: 84.757812 */
+{'@', 0x00000021, 0x000054c2},/*        !        x-advance: 84.757812 */
+{'M', 0x4249611a, 0xc1eb08d4},
+{'l', 0xc17dcb08, 0x00000000},
+{'4', 0xfe03ffef, 0x000000a2},
+{'6', 0x01fdffef, 0x00ebff70},
+{'l', 0x00000000, 0xc194f72c},
+{'l', 0x419ee584, 0x00000000},
+{'l', 0x00000000, 0x4194f72c},
+{'l', 0xc19ee584, 0x00000000},
+{'@', 0x00000022, 0x000054c2},/*        "        x-advance: 84.757812 */
+{'M', 0x4281ee58, 0xc268d3dd},
+{'l', 0xc15b9610, 0x00000000},
+{'4', 0xfe9fffec, 0x00000097},
+{'6', 0x0161ffeb, 0x0000ff05},
+{'l', 0xc15b9612, 0x00000000},
+{'l', 0xc0234f78, 0xc230d3dd},
+{'l', 0x41969ee6, 0x00000000},
+{'l', 0xc0234f70, 0x4230d3dd},
+{'@', 0x00000023, 0x000054c2},/*        #        x-advance: 84.757812 */
+{'M', 0x42832c23, 0xc2665847},
+{'l', 0xc0984698, 0x41b2c236},
+{'l', 0x4182c236, 0x00000000},
+{'l', 0x00000000, 0x412469ee},
+{'l', 0xc194f72e, 0x00000000},
+{'l', 0xc0ac2350, 0x41c7b961},
+{'l', 0xc12b08d4, 0x00000000},
+{'l', 0x40ae5848, 0xc1c7b961},
+{'l', 0xc1aa7b96, 0x00000000},
+{'l', 0xc0ac2350, 0x41c7b961},
+{'l', 0xc128d3dc, 0x00000000},
+{'l', 0x40ac2350, 0xc1c7b961},
+{'l', 0xc1400000, 0x00000000},
+{'l', 0xb5000000, 0xc12469ee},
+{'l', 0x41634f72, 0x00000000},
+{'l', 0x409a7b98, 0xc1b2c236},
+{'l', 0xc17a7b96, 0x00000000},
+{'l', 0xb5000000, 0xc1234f74},
+{'l', 0x418ee584, 0x00000000},
+{'l', 0x40ae5848, 0xc1c9ee58},
+{'l', 0x4128d3dc, 0x00000000},
+{'l', 0xc0ac2350, 0x41c9ee58},
+{'l', 0x41a9ee58, 0x00000000},
+{'l', 0x40ae5848, 0xc1c9ee58},
+{'l', 0x4128d3e0, 0x00000000},
+{'l', 0xc0ac2350, 0x41c9ee58},
+{'4', 0x00000066, 0x00510000},
+{'6', 0x0000ff89, 0x0000ff01},
+{'l', 0xc09a7b94, 0x41b2c236},
+{'l', 0x41aa7b97, 0x00000000},
+{'l', 0x409a7b90, 0xc1b2c236},
+{'l', 0xc1aa7b96, 0x00000000},
+{'@', 0x00000024, 0x000054c2},/*        $        x-advance: 84.757812 */
+{'M', 0x429ee584, 0xc1d8d3dd},
+{'q', 0x00000000, 0x4147b962},
+{0, 0xc1069ee0, 0x419b08d4},
+{'9', 0x0036ffbe, 0x003bff3a},
+{'4', 0x00600000, 0x0000ffc4},
+{'l', 0x00000000, 0xc13dcb09},
+{'q', 0xc16d3dcc, 0xbf0d3dc4},
+{0, 0xc1b8d3dd, 0xc0dee584},
+{'9', 0xffcdffbe, 0xff62ffa9},
+{'l', 0x418d3dcb, 0xc04f72c8},
+{'8', 0x5b293e0a, 0x22591c1f},
+{'l', 0x00000000, 0xc1d7b961},
+{'8', 0xfef8ffff, 0xfff8fffa},
+{'q', 0xc131a7ba, 0xc0234f70},
+{0, 0xc18611a8, 0xc0c00000},
+{'8', 0xbabae4d3, 0x98e8d5e8},
+{'q', 0x00000000, 0xc1372c28},
+{0, 0x40f9611a, 0xc18d3dcc},
+{'9', 0xffce003e, 0xffc900b7},
+{'4', 0xffb70000, 0x0000003c},
+{'l', 0x00000000, 0x4113dcb0},
+{'q', 0x41572c20, 0x3ef72c00},
+{0, 0x41a58468, 0x40c00000},
+{'9', 0x002b0039, 0x00910053},
+{'l', 0xc191a7ba, 0x402c2360},
+{'9', 0xffa2fff0, 0xff96ff99},
+{'4', 0x00c20000, 0x00010006},
+{'q', 0x40000000, 0x00000000},
+{0, 0x414234f8, 0x4053dcb0},
+{'q', 0x41234f74, 0x4053dcb0},
+{0, 0x4173dcb4, 0x411cb08c},
+{'9', 0x00330028, 0x00810028},
+{'m', 0xc18f72c0, 0x3e8d3e00},
+{'8', 0xd4f7e500, 0xe4e3eff7},
+{'9', 0xfff5ffee, 0xffe3ffae},
+{'l', 0x00000000, 0x41ca7b95},
+{'9', 0xfff80079, 0xff9d0079},
+{'m', 0xc1b611a8, 0xc258d3de},
+{'8', 0x589c079c, 0x28081800},
+{'8', 0x1a180f08, 0x1b430b10},
+{'l', 0x00000000, 0xc1b72c24},
+{'@', 0x00000025, 0x000054c2},/*        %        x-advance: 84.757812 */
+{'M', 0x41a08d3e, 0xc2bbb961},
+{'q', 0x419c2350, 0x00000000},
+{0, 0x419c2350, 0x41b9611c},
+{'q', 0x00000000, 0x4138469c},
+{0, 0xc0a11a80, 0x418c234e},
+{'q', 0xc0a11a7c, 0x40c00000},
+{0, 0xc16c234e, 0x40c00000},
+{'q', 0xc11b9612, 0x00000000},
+{0, 0xc16c2350, 0xc0bdcb08},
+{'q', 0xc0a11a7c, 0xc0bdcb08},
+{0, 0xc0a11a7c, 0xc18cb08c},
+{'q', 0x00000000, 0xc13846a0},
+{0, 0x409a7b96, 0xc18a7b98},
+{'9', 0xffd20026, 0xffd20079},
+{'m', 0x4234f72b, 0x42400000},
+{'q', 0x419c2350, 0x00000000},
+{0, 0x419c2350, 0x41b9611a},
+{'q', 0x00000000, 0x4138469f},
+{0, 0xc0a11a70, 0x418c2350},
+{'q', 0xc0a11a80, 0x40bffffe},
+{0, 0xc16c2350, 0x40bffffe},
+{'q', 0xc11b9614, 0x00000000},
+{0, 0xc16c2350, 0xc0bdcb09},
+{'q', 0xc0a11a80, 0xc0bdcb09},
+{0, 0xc0a11a80, 0xc18cb08d},
+{'q', 0x00000000, 0xc13846a0},
+{0, 0x409a7b98, 0xc18a7b96},
+{'9', 0xffd20026, 0xffd20079},
+{'m', 0xc244234e, 0x423772c2},
+{'l', 0xc1411a7e, 0x00000000},
+{'4', 0xfd160202, 0x00000061},
+{'6', 0x02eafdfd, 0xff4b01c3},
+{'8', 0xacf2c500, 0xe7d3e7f2},
+{'8', 0x19d200e2, 0x55f118f1},
+{'8', 0x55103b00, 0x192e1910},
+{'9', 0x0000003c, 0xff92003c},
+{'m', 0xc234f72b, 0xc23fffff},
+{'8', 0xacf2c500, 0xe7d3e7f2},
+{'8', 0x19d200e2, 0x55f118f1},
+{'8', 0x55103b00, 0x192e1910},
+{'q', 0x40f08d40, 0x00000000},
+{0, 0x40f08d40, 0xc15dcb04},
+{'@', 0x00000026, 0x000054c2},/*        &        x-advance: 84.757812 */
+{'M', 0x3fd3dcb0, 0xc1cb9612},
+{'q', 0x00000000, 0xc10c2350},
+{0, 0x40b08d3e, 0xc181a7b8},
+{'q', 0x40b2c234, 0xc0ee5848},
+{0, 0x4174f72d, 0xc1411a7c},
+{'q', 0xc09cb090, 0xc11cb090},
+{0, 0xc09cb090, 0xc1934f74},
+{'q', 0x00000000, 0xc1234f70},
+{0, 0x40cd3dcc, 0xc17cb090},
+{'q', 0x40cf72c0, 0xc0b4f720},
+{0, 0x4193dcb0, 0xc0b4f720},
+{'q', 0x4128d3dc, 0x00000000},
+{0, 0x41872c24, 0x40a9ee50},
+{'q', 0x40cb08d0, 0x40a9ee60},
+{0, 0x40cb08d0, 0x416469f0},
+{'q', 0x00000000, 0x40e11a80},
+{0, 0xc0b08d38, 0x41508d40},
+{'q', 0xc0b08d40, 0x40c00000},
+{0, 0xc19d3dcc, 0x4148d3dc},
+{'q', 0x40d1a7b8, 0x41372c20},
+{0, 0x416c2350, 0x41a69ee5},
+{'9', 0xffae0029, 0xff4e003b},
+{'l', 0x41611a78, 0x3fee5840},
+{'q', 0xc0396100, 0x4182c235},
+{0, 0xc12b08d0, 0x41f00000},
+{'8', 0x285d282e, 0xf733001f},
+{'l', 0x00000000, 0x4158469f},
+{'q', 0xc027b960, 0x3fb9611c},
+{0, 0xc0d1a7b0, 0x3fb9611c},
+{'q', 0xc1308d40, 0xb3800000},
+{0, 0xc1a5846c, 0xc0fdcb09},
+{'q', 0xc134f72c, 0x4107b961},
+{0, 0xc1c611a6, 0x4107b961},
+{'q', 0xc169ee5a, 0x34000000},
+{0, 0xc1b4f72d, 0xc0dcb08d},
+{'9', 0xffc9ffc1, 0xff62ffc1},
+{'m', 0x42327b96, 0x410f72c2},
+{'q', 0xc12f72c4, 0xc14234f6},
+{0, 0xc1908d3f, 0xc1c69ee5},
+{'8', 0x36c716db, 0x46ec20ec},
+{'8', 0x541e3600, 0x1e551e1e},
+{'9', 0x00000039, 0xffd7006b},
+{'m', 0x409611a8, 0xc265846a},
+{'8', 0xcfefe200, 0xedcdedef},
+{'8', 0x17c200d8, 0x3cec16ec},
+{'8', 0x661c3000, 0xd74de737},
+{'8', 0xde22f016, 0xd80cee0c},
+{'@', 0x00000027, 0x000054c2},/*        '        x-advance: 84.757812 */
+{'M', 0x4244f72c, 0xc268d3dd},
+{'l', 0xc15b9610, 0x00000000},
+{'l', 0xc0234f70, 0xc230d3dd},
+{'l', 0x41969ee4, 0x00000000},
+{'l', 0xc0234f70, 0x4230d3dd},
+{'@', 0x00000028, 0x000054c2},/*        (        x-advance: 84.757812 */
+{'M', 0x4230d3dd, 0x41ea7b96},
+{'q', 0xc12d3dcc, 0xc179611a},
+{0, 0xc17a7b98, 0xc1f8d3dd},
+{'q', 0xc09a7b94, 0xc178469e},
+{0, 0xc09a7b94, 0xc20b4f72},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x409a7b94, 0xc20ac234},
+{'9', 0xff840026, 0xff08007d},
+{'l', 0x419b08d4, 0x00000000},
+{'q', 0xc12e5848, 0x417b9610},
+{0, 0xc17dcb0c, 0x41fa7b94},
+{'q', 0xc09cb088, 0x4179611c},
+{0, 0xc09cb088, 0x4209ee59},
+{'q', 0x00000000, 0x41969ee5},
+{0, 0x409cb088, 0x4209611a},
+{'q', 0x409cb090, 0x41772c24},
+{0, 0x417dcb0c, 0x41fc2350},
+{'l', 0xc19b08d4, 0x00000000},
+{'@', 0x00000029, 0x000054c2},/*        )        x-advance: 84.757812 */
+{'M', 0x41a9611a, 0x41ea7b96},
+{'q', 0x41308d40, 0xc1811a7c},
+{0, 0x417dcb08, 0xc1fc234f},
+{'q', 0x409cb090, 0xc1772c24},
+{0, 0x409cb090, 0xc209611a},
+{'q', 0x00000000, 0xc197b964},
+{0, 0xc09ee580, 0xc20a34f8},
+{'9', 0xff83ffd9, 0xff07ff82},
+{'l', 0x419b08d4, 0x00000000},
+{'q', 0x412e5848, 0x417a7b98},
+{0, 0x417a7b98, 0x41f96118},
+{'q', 0x409a7b90, 0x417846a4},
+{0, 0x409a7b90, 0x420a34f8},
+{'q', 0x00000000, 0x4199611a},
+{0, 0xc09a7b90, 0x420ac235},
+{'q', 0xc09846a0, 0x4178469e},
+{0, 0xc17a7b98, 0x41f9ee58},
+{'l', 0xc19b08d4, 0x00000000},
+{'@', 0x0000002a, 0x000054c2},/*        *        x-advance: 84.757812 */
+{'M', 0x4242c235, 0xc2a6c235},
+{'l', 0x4181a7ba, 0xc0e58470},
+{'l', 0x409611a0, 0x41596120},
+{'l', 0xc189ee58, 0x40869ee0},
+{'l', 0x414d3dd0, 0x416b08d4},
+{'l', 0xc14b08d8, 0x4105846c},
+{'l', 0xc1211a7c, 0xc18b08d4},
+{'l', 0xc12469ec, 0x418b08d4},
+{'l', 0xc14d3dcc, 0xc107b964},
+{'l', 0x4151a7b8, 0xc168d3dc},
+{'l', 0xc189ee58, 0xc0869ee0},
+{'l', 0x409611a8, 0xc1596120},
+{'l', 0x4183dcb0, 0x40e58470},
+{'l', 0xbf9ee580, 0xc1972c24},
+{'l', 0x416d3dcc, 0x00000000},
+{'l', 0xbf9ee580, 0x41972c24},
+{'@', 0x0000002b, 0x000054c2},/*        +        x-advance: 84.757812 */
+{'M', 0x4248469f, 0xc21cf72c},
+{'l', 0x00000000, 0x41e11a7c},
+{'l', 0xc179611c, 0xb5800000},
+{'l', 0x00000000, 0xc1e11a7c},
+{'l', 0xc1dc234f, 0x00000000},
+{'l', 0x00000000, 0xc1772c24},
+{'l', 0x41dc234f, 0x00000000},
+{'l', 0x00000000, 0xc1e11a7a},
+{'l', 0x4179611c, 0x00000000},
+{'l', 0x00000000, 0x41e11a7a},
+{'l', 0x41ddcb0a, 0x00000000},
+{'l', 0x00000000, 0x41772c24},
+{'l', 0xc1ddcb0a, 0x00000000},
+{'@', 0x0000002c, 0x000054c2},/*        ,        x-advance: 84.757812 */
+{'M', 0x418e5847, 0x41c8469f},
+{'l', 0x413a7b96, 0xc2369ee6},
+{'l', 0x41adcb08, 0x36000000},
+{'l', 0xc1ab9611, 0x42369ee6},
+{'l', 0xc13ee584, 0xb6000000},
+{'@', 0x0000002d, 0x000054c2},/*        -        x-advance: 84.757812 */
+{'M', 0x41b2c235, 0xc1e1a7b9},
+{'l', 0x00000000, 0xc1869ee5},
+{'l', 0x42200000, 0x00000000},
+{'l', 0x00000000, 0x41869ee5},
+{'l', 0xc2200000, 0x00000000},
+{'@', 0x0000002e, 0x000054c2},/*        .        x-advance: 84.757812 */
+{'M', 0x4201a7b9, 0x00000000},
+{'l', 0x00000000, 0xc1a8469f},
+{'l', 0x419f72c2, 0x00000000},
+{'l', 0x00000000, 0x41a8469f},
+{'l', 0xc19f72c2, 0x00000000},
+{'@', 0x0000002f, 0x000054c2},/*        /        x-advance: 84.757812 */
+{'M', 0x40c469ee, 0x3fb08d3e},
+{'l', 0x42627b96, 0xc2cf72c2},
+{'l', 0x417b9610, 0x00000000},
+{'l', 0xc261611a, 0x42cf72c2},
+{'l', 0xc1800000, 0xb4800000},
+{'@', 0x00000030, 0x000054c2},/*        0        x-advance: 84.757812 */
+{'M', 0x42993dcb, 0xc23a34f7},
+{'q', 0x00000000, 0x41bb08d4},
+{0, 0xc10d3dc8, 0x420e9ee5},
+{'q', 0xc10d3dd0, 0x414469f0},
+{0, 0xc1cd3dcc, 0x414469f0},
+{'q', 0xc1872c24, 0xb4800000},
+{0, 0xc1cc2350, 0xc1434f73},
+{'q', 0xc108d3dc, 0xc14469ef},
+{0, 0xc108d3dc, 0xc20ee584},
+{'q', 0x00000000, 0xc1c234f6},
+{0, 0x4105846a, 0xc210469f},
+{'q', 0x41069ee4, 0xc13dcb08},
+{0, 0x41d234f7, 0xc13dcb08},
+{'q', 0x4189ee58, 0x00000000},
+{0, 0x41ccb08e, 0x41400000},
+{'9', 0x00600042, 0x011f0042},
+{'m', 0xc19b9612, 0x00000000},
+{'q', 0x00000000, 0xc14234f8},
+{0, 0xbfb96120, 0xc199611a},
+{'8', 0xaeddc8f5, 0xe7bbe7e8},
+{'8', 0x19b800d1, 0x52dc19e7},
+{'q', 0xbfb08d30, 0x40e11a78},
+{0, 0xbfb08d30, 0x4199611a},
+{'q', 0x00000000, 0x41400000},
+{0, 0x3fb96110, 0x4198d3dc},
+{'8', 0x5224380c, 0x19461918},
+{'q', 0x41000000, 0x00000000},
+{0, 0x41372c20, 0xc0f08d3e},
+{'9', 0xffc4001b, 0xff37001b},
+{'m', 0xc1b234f6, 0x410469ec},
+{'l', 0x00000000, 0xc189611a},
+{'l', 0x416d3dc8, 0x00000000},
+{'l', 0x00000000, 0x4189611a},
+{'l', 0xc16d3dc8, 0x00000000},
+{'@', 0x00000031, 0x000054c2},/*        1        x-advance: 84.757812 */
+{'M', 0x412469ee, 0x00000000},
+{'4', 0xff8d0000, 0x000000d6},
+{'l', 0x00000000, 0xc275cb09},
+{'q', 0xc02c2350, 0x40b4f730},
+{0, 0xc12c234e, 0x411846a0},
+{'9', 0x001effc0, 0x001eff7a},
+{'l', 0x35800000, 0xc16c2350},
+{'q', 0x4119611b, 0x00000000},
+{0, 0x4189611a, 0xc0869ee0},
+{'9', 0xffdf003c, 0xffa4005b},
+{'l', 0x4192c234, 0x00000000},
+{'l', 0x00000000, 0x429d3dcb},
+{'l', 0x41b234f8, 0x36400000},
+{'l', 0x00000000, 0x41669ee5},
+{'l', 0xc288f72c, 0x00000000},
+{'@', 0x00000032, 0x000054c2},/*        2        x-advance: 84.757812 */
+{'M', 0x4107b961, 0x00000000},
+{'l', 0x00000000, 0xc1572c23},
+{'q', 0x405cb08c, 0xc0f2c236},
+{0, 0x411cb08d, 0xc172c235},
+{'q', 0x40cd3dcc, 0xc0f4f730},
+{0, 0x4194f72d, 0xc18cb08e},
+{'8', 0xaa62c24c, 0xd323e916},
+{'8', 0xd30dea0d, 0xc2e7d900},
+{'8', 0xeab4eae7, 0x1bb400cf},
+{'9', 0x001affe7, 0x0050ffdf},
+{'l', 0xc19c234f, 0xbf8d3dc0},
+{'q', 0x3fd3dcb0, 0xc15846a0},
+{0, 0x41211a7c, 0xc1a4f72c},
+{'q', 0x4107b960, 0xc0e34f70},
+{0, 0x41b8469e, 0xc0e34f70},
+{'q', 0x41708d40, 0x00000000},
+{0, 0x41be5846, 0x40dcb090},
+{'q', 0x410c2350, 0x40da7b90},
+{0, 0x410c2350, 0x4192c234},
+{'q', 0x00000000, 0x40f08d40},
+{0, 0xc09846a0, 0x416b08d4},
+{'q', 0xc09611a0, 0x40e34f70},
+{0, 0xc16234f4, 0x4167b960},
+{'q', 0xc15611a8, 0x4125846a},
+{0, 0xc1900000, 0x416e5848},
+{'9', 0x0024ffdc, 0x0049ffcb},
+{'l', 0x423469ee, 0x00000000},
+{'l', 0x00000000, 0x417ee584},
+{'l', 0xc2880000, 0x00000000},
+{'@', 0x00000033, 0x000054c2},/*        3        x-advance: 84.757812 */
+{'M', 0x429b2c23, 0xc1cf72c2},
+{'q', 0x00000000, 0x41508d3d},
+{0, 0xc11611a8, 0x41a234f7},
+{'q', 0xc114f728, 0x40e7b961},
+{0, 0xc1ce5846, 0x40e7b961},
+{'q', 0xc17dcb08, 0x00000000},
+{0, 0xc1c9611a, 0xc0dcb08d},
+{'9', 0xffc9ffb7, 0xff60ffaa},
+{'l', 0x419dcb09, 0xbfdcb090},
+{'q', 0x3fdcb080, 0x414f72c3},
+{0, 0x4181a7b8, 0x414f72c3},
+{'8', 0xe55a0039, 0xb420e420},
+{'q', 0x00000000, 0xc0bffffc},
+{0, 0xc0a11a78, 0xc112c236},
+{'9', 0xffe7ffd9, 0xffe7ff8e},
+{'4', 0x0000ffca, 0xff830000},
+{'l', 0x40cb08d4, 0x00000000},
+{'8', 0xe7670043, 0xb924e724},
+{'8', 0xbde2d700, 0xe6b0e6e3},
+{'8', 0x16b200d1, 0x46dd16e2},
+{'l', 0xc19b08d4, 0xbfb08d40},
+{'q', 0x3fc234f0, 0xc1458468},
+{0, 0x41269ee6, 0xc19846a0},
+{'q', 0x410f72c2, 0xc0d611a0},
+{0, 0x41bc234f, 0xc0d611a0},
+{'q', 0x41234f74, 0x00000000},
+{0, 0x418d3dca, 0x40469ee0},
+{'8', 0x465b183c, 0x67202c20},
+{'q', 0x00000000, 0x4107b964},
+{0, 0xc0ac2350, 0x416234f8},
+{'9', 0x002dffd5, 0x003cff85},
+{'l', 0x00000000, 0x3e8d3e00},
+{'q', 0x412d3dd0, 0x3f9ee580},
+{0, 0x418846a0, 0x40e34f70},
+{'q', 0x40c69ee0, 0x40b96118},
+{0, 0x40c69ee0, 0x4169ee58},
+{'@', 0x00000034, 0x000054c2},/*        4        x-advance: 84.757812 */
+{'M', 0x42872c23, 0xc19e5847},
+{'l', 0x00000000, 0x419e5847},
+{'l', 0xc193dcb0, 0x00000000},
+{'l', 0x00000000, 0xc19e5847},
+{'l', 0xc230d3dc, 0x00000000},
+{'l', 0xb5c00000, 0xc168d3da},
+{'l', 0x4224234f, 0xc26ac236},
+{'l', 0x41ad3dca, 0x00000000},
+{'l', 0x00000000, 0x426b4f73},
+{'4', 0x00000067, 0x00730000},
+{'6', 0x0000ff99, 0xfeaaff6d},
+{'8', 0xc001e300, 0xd403de02},
+{'9', 0x001efff2, 0x0059ffcd},
+{'l', 0xc1b08d3e, 0x41f69ee6},
+{'l', 0x41df72c2, 0x00000000},
+{'l', 0x00000000, 0xc1e2c234},
+{'@', 0x00000035, 0x000054c2},/*        5        x-advance: 84.757812 */
+{'M', 0x429ae584, 0xc1fa7b96},
+{'q', 0x00000000, 0x411a7b96},
+{0, 0xc08b08d0, 0x4188d3dc},
+{'q', 0xc088d3e0, 0x40ec2352},
+{0, 0xc147b960, 0x413846a0},
+{'q', 0xc10234f8, 0x408234f8},
+{0, 0xc199611a, 0x408234f8},
+{'q', 0xc169ee5a, 0xb4800000},
+{0, 0xc1bb9612, 0xc0d1a7ba},
+{'9', 0xffccffba, 0xff68ffaa},
+{'l', 0x419b08d4, 0xbfcb08e0},
+{'8', 0x482b310c, 0x164d161e},
+{'8', 0xdd5d003b, 0x9d21dd21},
+{'8', 0xa5e0c700, 0xdea5dee0},
+{'9', 0x0000ffc0, 0x0032ff97},
+{'l', 0xc1972c23, 0x00000000},
+{'l', 0x405846a0, 0xc2527b97},
+{'l', 0x4269a7ba, 0x00000000},
+{'4', 0x00730000, 0x0000feba},
+{'l', 0xbfcb08c0, 0x41b3dcb0},
+{'q', 0x40e11a78, 0xc0c69ee0},
+{0, 0x418cb08e, 0xc0c69ee0},
+{'q', 0x415dcb08, 0x00000000},
+{0, 0x41b11a7a, 0x4108d3dc},
+{'q', 0x41058468, 0x4107b960},
+{0, 0x41058468, 0x41b3dcb0},
+{'@', 0x00000036, 0x000054c2},/*        6        x-advance: 84.757812 */
+{'M', 0x4299cb09, 0xc1f611a8},
+{'q', 0x00000000, 0x416f72c3},
+{0, 0xc10c2350, 0x41bcb08e},
+{'q', 0xc10c2350, 0x4108d3dc},
+{0, 0xc1bf72c2, 0x4108d3dc},
+{'q', 0xc1872c24, 0xb4800000},
+{0, 0xc1d234f8, 0xc149ee59},
+{'q', 0xc114f72c, 0xc14b08d3},
+{0, 0xc114f72c, 0xc20c69ee},
+{'q', 0x00000000, 0xc1c34f74},
+{0, 0x4114f72c, 0xc2111a7c},
+{'q', 0x411611a8, 0xc13dcb08},
+{0, 0x41d611a8, 0xc13dcb08},
+{'q', 0x41458468, 0x00000000},
+{0, 0x419b9612, 0x40ae5840},
+{'9', 0x002b0039, 0x00870051},
+{'l', 0xc19234f8, 0x40234f80},
+{'8', 0xb4a3b4ec, 0x3c9e00c2},
+{'q', 0xc08d3dcc, 0x40ee5850},
+{0, 0xc08d3dcc, 0x41aee586},
+{'8', 0xc144d718, 0xea63ea2c},
+{'q', 0x414c2350, 0x00000000},
+{0, 0x41a3dcb2, 0x41011a7c},
+{'9', 0x0040003d, 0x00ad003d},
+{'m', 0xc19b9612, 0x3f0d3de0},
+{'8', 0xa3e2c400, 0xdeaddee2},
+{'8', 0x1eaf00cf, 0x50e11ee1},
+{'8', 0x69203e00, 0x2b542b20},
+{'8', 0xdd510033, 0xa01ddd1d},
+{'@', 0x00000037, 0x000054c2},/*        7        x-advance: 84.757812 */
+{'M', 0x42969ee5, 0xc29b4f73},
+{'q', 0xc18cb08c, 0x41c00002},
+{0, 0xc1c611a6, 0x42280001},
+{'9', 0x008fffc7, 0x011dffc7},
+{'l', 0xc1a1a7ba, 0x00000000},
+{'q', 0x00000000, 0xc18f72c2},
+{0, 0x41034f74, 0xc21308d4},
+{'9', 0xff690042, 0xfebe00cf},
+{'l', 0xc2411a7c, 0x00000000},
+{'l', 0x36000000, 0xc17ee588},
+{'l', 0x42848d3d, 0x00000000},
+{'l', 0x00000000, 0x417611a8},
+{'@', 0x00000038, 0x000054c2},/*        8        x-advance: 84.757812 */
+{'M', 0x429a7b96, 0xc1d2c235},
+{'q', 0x00000000, 0x414f72c2},
+{0, 0xc112c238, 0x41a2c235},
+{'q', 0xc112c230, 0x40ec2350},
+{0, 0xc1cd3dca, 0x40ec2350},
+{'q', 0xc182c234, 0xb4800000},
+{0, 0xc1cd3dca, 0xc0e9ee59},
+{'q', 0xc113dcb1, 0xc0e9ee57},
+{0, 0xc113dcb1, 0xc1a234f7},
+{'q', 0x00000000, 0xc10d3dca},
+{0, 0x40ae5846, 0xc16f72c2},
+{'9', 0xffcf002c, 0xffc40072},
+{'l', 0x00000000, 0xbe8d3d80},
+{'8', 0xc59bf3c2, 0x96dad3da},
+{'q', 0x00000000, 0xc134f728},
+{0, 0x4108d3dd, 0xc1900000},
+{'q', 0x4109ee58, 0xc0d611a0},
+{0, 0x41be5847, 0xc0d611a0},
+{'q', 0x417a7b94, 0x00000000},
+{0, 0x41c11a7c, 0x40cf72c0},
+{'q', 0x4108d3d8, 0x40cf72c0},
+{0, 0x4108d3d8, 0x4192c234},
+{'8', 0x68d93a00, 0x3b9a2ed9},
+{'l', 0x00000000, 0x3e8d3d80},
+{'q', 0x4114f72c, 0x3fc23500},
+{0, 0x416b08d4, 0x40f08d40},
+{'9', 0x0030002b, 0x0078002b},
+{'m', 0xc1a08d3e, 0xbfcb08d0},
+{'8', 0xace2c900, 0xe3a6e3e2},
+{'8', 0x1eaa00c9, 0x54e21ee2},
+{'q', 0x00000000, 0x417611a8},
+{0, 0x4171a7b8, 0x417611a8},
+{'8', 0xe357003a, 0xa11de31d},
+{'m', 0xc011a7b0, 0xc222c235},
+{'8', 0x9e9a9e00, 0x629c009c},
+{'8', 0x4c193200, 0x1a4b1a1a},
+{'q', 0x4149ee58, 0x00000000},
+{0, 0x4149ee58, 0xc14e5848},
+{'@', 0x00000039, 0x000054c2},/*        9        x-advance: 84.757812 */
+{'M', 0x42988d3e, 0xc240469f},
+{'q', 0x00000000, 0x41bf72c2},
+{0, 0xc11611a8, 0x4212c235},
+{'q', 0xc114f72c, 0x414c2350},
+{0, 0xc1d72c24, 0x414c2350},
+{'q', 0xc14d3dcc, 0xb4800000},
+{0, 0xc1a11a7c, 0xc0ae5847},
+{'9', 0xffd4ffc7, 0xff75ffae},
+{'l', 0x4191a7ba, 0xc0234f70},
+{'8', 0x51635115, 0xc762003e},
+{'q', 0x4091a7b8, 0xc0e7b960},
+{0, 0x409611a8, 0xc1ad3dcb},
+{'8', 0x41bc29ec, 0x179a17d1},
+{'q', 0xc149ee58, 0x00000000},
+{0, 0xc1a234f6, 0xc107b962},
+{'q', 0xc0f4f72e, 0xc107b960},
+{0, 0xc0f4f72e, 0xc1b69ee4},
+{'q', 0x00000000, 0xc16b08d8},
+{0, 0x410f72c1, 0xc1b8d3dc},
+{'q', 0x410f72c4, 0xc1069ee8},
+{0, 0x41c7b961, 0xc1069ee8},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41cd3dca, 0x41372c20},
+{'9', 0x005b0046, 0x01170046},
+{'m', 0xc1a3dcb2, 0xc148d3dc},
+{'8', 0x94e0bd00, 0xd7add7e0},
+{'8', 0x23b000ce, 0x5fe323e3},
+{'8', 0x611d3b00, 0x2451241e},
+{'8', 0xe0520032, 0xac20e020},
+{'@', 0x0000003a, 0x000054c2},/*        :        x-advance: 84.757812 */
+{'M', 0x4201a7b9, 0x00000000},
+{'l', 0x00000000, 0xc1a8469f},
+{'4', 0x0000009f, 0x00a80000},
+{'6', 0x0000ff61, 0xfe520000},
+{'l', 0x00000000, 0xc1a8469e},
+{'l', 0x419f72c2, 0x00000000},
+{'l', 0x00000000, 0x41a8469e},
+{'l', 0xc19f72c2, 0x00000000},
+{'@', 0x0000003b, 0x000054c2},/*        ;        x-advance: 84.757812 */
+{'M', 0x41b3dcb1, 0x41c8469f},
+{'l', 0x413a7b96, 0xc2369ee6},
+{'4', 0x000000ad, 0x016dff55},
+{'6', 0x0000ffa1, 0xfd8a0054},
+{'l', 0x00000000, 0xc1a846a0},
+{'l', 0x419f72c2, 0x00000000},
+{'l', 0x00000000, 0x41a8469e},
+{'l', 0xc19f72c2, 0x00000000},
+{'@', 0x0000003c, 0x000054c2},/*        <        x-advance: 84.757812 */
+{'M', 0x40dee584, 0xc20e5847},
+{'l', 0x00000000, 0xc1b1a7b8},
+{'l', 0x428da7ba, 0xc1d7b962},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc265cb0a, 0x41b34f74},
+{'l', 0x4265cb0a, 0x41b2c235},
+{'l', 0x00000000, 0x417a7b96},
+{'l', 0xc28da7ba, 0xc1d7b962},
+{'@', 0x0000003d, 0x000054c2},/*        =        x-advance: 84.757812 */
+{'M', 0x40dee584, 0xc268469f},
+{'l', 0x00000000, 0xc17611a4},
+{'4', 0x00000236, 0x007b0000},
+{'6', 0x0000fdca, 0x01300000},
+{'l', 0x00000000, 0xc173dcb0},
+{'l', 0x428da7ba, 0x00000000},
+{'l', 0x00000000, 0x4173dcb0},
+{'l', 0xc28da7ba, 0x00000000},
+{'@', 0x0000003e, 0x000054c2},/*        >        x-advance: 84.757812 */
+{'M', 0x40dee584, 0xc109ee58},
+{'l', 0x00000000, 0xc17a7b96},
+{'l', 0x4265846a, 0xc1b2c235},
+{'l', 0xc265846a, 0xc1b34f74},
+{'l', 0x36000000, 0xc17b9610},
+{'l', 0x428da7ba, 0x41d7b962},
+{'l', 0x00000000, 0x41b1a7b8},
+{'l', 0xc28da7ba, 0x41d7b962},
+{'@', 0x0000003f, 0x000054c2},/*        ?        x-advance: 84.757812 */
+{'M', 0x4299846a, 0xc2880000},
+{'8', 0x41f42300, 0x38dd1df4},
+{'8', 0x569519e9, 0x6fb434b7},
+{'l', 0xc1934f72, 0x00000000},
+{'8', 0x9b20c803, 0xae52d31d},
+{'8', 0xbb54d63e, 0xc416e516},
+{'8', 0xbddfd600, 0xe7a8e7df},
+{'8', 0x20a300c9, 0x56d420db},
+{'l', 0xc19d3dcb, 0xbf53dd00},
+{'q', 0x3fee5840, 0xc1600000},
+{0, 0x4138469e, 0xc1ae5844},
+{'q', 0x411a7b96, 0xc0f96120},
+{0, 0x41c8d3dc, 0xc0f96120},
+{'q', 0x41800000, 0x00000000},
+{0, 0x41cc2350, 0x40e58470},
+{'9', 0x0039004c, 0x009a004c},
+{'m', 0xc23fb962, 0x42880000},
+{'l', 0x36000000, 0xc194f72c},
+{'l', 0x419f72c3, 0x00000000},
+{'l', 0x00000000, 0x4194f72c},
+{'l', 0xc19f72c3, 0x00000000},
+{'@', 0x00000040, 0x000054c2},/*        @        x-advance: 84.757812 */
+{'M', 0x42a40000, 0xc250469f},
+{'q', 0x00000000, 0x41a469ef},
+{0, 0xc0b72c20, 0x420308d4},
+{'q', 0xc0b4f730, 0x414234f7},
+{0, 0xc174f730, 0x414234f7},
+{'9', 0x0000ffb2, 0xffaaffb2},
+{'4', 0xfffc0000, 0xffeb0001},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x52ca33ed, 0x1eb51ede},
+{'q', 0xc0e9ee58, 0x00000000},
+{0, 0xc1372c24, 0xc0dcb08e},
+{'q', 0xc08234f4, 0xc0dcb08c},
+{0, 0xc08234f4, 0xc19d3dca},
+{'q', 0x00000000, 0xc131a7bc},
+{0, 0x4053dcb0, 0xc1a7b962},
+{'q', 0x405846a0, 0xc11dcb0c},
+{0, 0x4111a7b8, 0xc178469c},
+{'8', 0xd367d32e, 0x183b0024},
+{'9', 0x00170017, 0x0047001e},
+{'l', 0x3eb08d80, 0x00000000},
+{'4', 0xffad0012, 0x0000004a},
+{'l', 0xc0da7b98, 0x420bdcb1},
+{'q', 0xc0308d40, 0x4167b962},
+{0, 0xc0308d40, 0x4199611b},
+{'8', 0x1c051200, 0x09150905},
+{'q', 0x40a34f78, 0x00000000},
+{0, 0x410469ec, 0xc11dcb0a},
+{'q', 0x404f72c0, 0xc11ee584},
+{0, 0x404f72c0, 0xc1d3dcb0},
+{'q', 0x00000000, 0xc195846a},
+{0, 0xc0e9ee50, 0xc1f1a7ba},
+{'q', 0xc0e9ee60, 0xc13846a0},
+{0, 0xc19b9612, 0xc13846a0},
+{'q', 0xc12469f0, 0x00000000},
+{0, 0xc18f72c3, 0x40f08d40},
+{'q', 0xc0f4f72c, 0x40ee5850},
+{0, 0xc13cb08c, 0x41a69ee8},
+{'q', 0xc08234fa, 0x415611a4},
+{0, 0xc08234fa, 0x41eee582},
+{'q', 0x00000000, 0x41a9ee58},
+{0, 0x40fb9612, 0x4206e585},
+{'q', 0x40fdcb08, 0x41469ee4},
+{0, 0x41ab08d3, 0x41469ee4},
+{'8', 0xed630033, 0xbd67ed30},
+{'l', 0x409cb090, 0x40d611a8},
+{'q', 0xc0fdcb10, 0x40da7b96},
+{0, 0xc17611a8, 0x411ee585},
+{'q', 0xc0ee5848, 0x40469ee0},
+{0, 0xc17a7b94, 0x40469ee0},
+{'q', 0xc13611aa, 0x00000000},
+{0, 0xc1a08d3f, 0xc0d611a6},
+{'q', 0xc109ee58, 0xc0d611a8},
+{0, 0xc153dcb0, 0xc199ee58},
+{'q', 0xc093dcb0, 0xc149ee59},
+{0, 0xc093dcb0, 0xc1e846a0},
+{'q', 0xb4800000, 0xc19dcb08},
+{0, 0x40a9ee58, 0xc20bdcb1},
+{'q', 0x40a9ee58, 0xc174f728},
+{0, 0x4172c234, 0xc1bcb08c},
+{'q', 0x411dcb0a, 0xc1058468},
+{0, 0x41b69ee5, 0xc1058468},
+{'q', 0x412e5848, 0x00000000},
+{0, 0x41972c24, 0x40c8d3e0},
+{'q', 0x41011a78, 0x40c69ee0},
+{0, 0x41469ee8, 0x418d3dc8},
+{'9', 0x005b0022, 0x00d20022},
+{'m', 0xc1ef72c2, 0xc0000000},
+{'8', 0x95c49500, 0x26c400df},
+{'q', 0xc05846a0, 0x409611a8},
+{0, 0xc0a9ee54, 0x4149ee58},
+{'q', 0xbff72c20, 0x40fdcb08},
+{0, 0xbff72c20, 0x418234f8},
+{'q', 0x00000000, 0x41900000},
+{0, 0x40cf72c4, 0x41900000},
+{'q', 0x409a7b90, 0xb5800000},
+{0, 0x41058468, 0xc0bdcb0c},
+{'q', 0x40658470, 0xc0bdcb08},
+{0, 0x40b08d40, 0xc18611a7},
+{'q', 0x3ff72c20, 0xc12d3dcc},
+{0, 0x3ff72c20, 0xc17846a0},
+{'@', 0x00000041, 0x000054c2},/*        A        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'q', 0xbfb08d20, 0xc0b2c240},
+{0, 0xbff72c20, 0xc1069ee8},
+{'@', 0x00000042, 0x000054c2},/*        B        x-advance: 84.757812 */
+{'M', 0x42a39612, 0xc1d469ee},
+{'q', 0x00000000, 0x4147b960},
+{0, 0xc108d3e0, 0x419c234f},
+{'9', 0x0038ffbc, 0x0038ff43},
+{'4', 0x0000febf, 0xfd180000},
+{'l', 0x4210d3dc, 0x00000000},
+{'q', 0x41708d40, 0x00000000},
+{0, 0x41b611aa, 0x40c23500},
+{'q', 0x40f96110, 0x40c00000},
+{0, 0x40f96110, 0x418a7b94},
+{'q', 0x00000000, 0x40fdcb10},
+{0, 0xc091a7b0, 0x415611a8},
+{'q', 0xc091a7c0, 0x40ac2350},
+{0, 0xc1600004, 0x40ec2350},
+{'q', 0x413cb08c, 0x3f9ee5a0},
+{0, 0x418f72c2, 0x40e11a80},
+{'9', 0x002e0031, 0x007a0031},
+{'m', 0xc1a3dcb2, 0xbfdcb090},
+{'8', 0xb6e3d000, 0xe6ace6e3},
+{'4', 0x0000ff77, 0x00ce0000},
+{'l', 0x418dcb09, 0xb5800000},
+{'9', 0x0000006e, 0xff97006e},
+{'m', 0xc0b2c238, 0xc21a7b96},
+{'9', 0xffa80000, 0xffa8ffa4},
+{'4', 0x0000ff8d, 0x00b00000},
+{'l', 0x4168d3da, 0x00000000},
+{'q', 0x413611a8, 0x00000000},
+{0, 0x413611a8, 0xc12f72c4},
+{'@', 0x00000043, 0x000054c2},/*        C        x-advance: 84.757812 */
+{'M', 0x41d1a7b9, 0xc23bdcb1},
+{'q', 0x00000000, 0x417846a0},
+{0, 0x409a7b98, 0x41bf72c3},
+{'q', 0x409a7b94, 0x41069ee6},
+{0, 0x41669ee6, 0x41069ee6},
+{'9', 0x00000059, 0xff7a0084},
+{'l', 0x41969ee4, 0x40658470},
+{'q', 0xc112c230, 0x41e9ee58},
+{0, 0xc20e5846, 0x41e9ee58},
+{'q', 0xc19b08d4, 0xb4800000},
+{0, 0xc1ecb08d, 0xc14469ef},
+{'q', 0xc12234f7, 0xc1458469},
+{0, 0xc12234f7, 0xc210469f},
+{'q', 0x00000000, 0xc23e11a7},
+{0, 0x421cb08d, 0xc23e11a7},
+{'q', 0x414d3dcc, 0x00000000},
+{0, 0x41ab9612, 0x40d846a0},
+{'9', 0x00360045, 0x00a00066},
+{'l', 0xc19611a8, 0x4091a7c0},
+{'8', 0xa6d0c6f0, 0xe0b7e0e0},
+{'q', 0xc19611a9, 0x00000000},
+{0, 0xc19611a9, 0x41fc234e},
+{'@', 0x00000044, 0x000054c2},/*        D        x-advance: 84.757812 */
+{'M', 0x429e7b96, 0xc23cf72c},
+{'q', 0x00000000, 0x41b611a7},
+{0, 0xc129ee58, 0x420c234f},
+{'9', 0x0061ffac, 0x0061ff0e},
+{'4', 0x0000ff18, 0xfd180000},
+{'l', 0x41c72c24, 0x00000000},
+{'q', 0x41b4f72c, 0x00000000},
+{0, 0x42072c23, 0x413611a8},
+{'9', 0x005a0059, 0x01130059},
+{'m', 0xc1a3dcb0, 0x00000000},
+{'q', 0x00000000, 0xc17a7b98},
+{0, 0xc0bdcb08, 0xc1b69ee4},
+{'9', 0xffc7ffd2, 0xffc7ff69},
+{'4', 0x0000ffdf, 0x01ec0000},
+{'l', 0x40e11a7c, 0xb6000000},
+{'q', 0x41b08d3e, 0x00000000},
+{0, 0x41b08d3e, 0xc1fc234f},
+{'@', 0x00000045, 0x000054c2},/*        E        x-advance: 84.757812 */
+{'M', 0x41172c23, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4285846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc239a7b8, 0x00000000},
+{'l', 0xb6000000, 0x41b2c234},
+{'l', 0x4228d3dc, 0x00000000},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc228d3dc, 0x00000000},
+{'l', 0xb6000000, 0x41bc234f},
+{'l', 0x4244f72c, 0x00000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc28b2c24, 0x00000000},
+{'@', 0x00000046, 0x000054c2},/*        F        x-advance: 84.757812 */
+{'M', 0x41fee584, 0xc29a9ee5},
+{'l', 0x00000000, 0x41d3dcae},
+{'l', 0x422b4f72, 0x00000000},
+{'l', 0x00000000, 0x417b9614},
+{'l', 0xc22b4f72, 0x00000000},
+{'l', 0x00000000, 0x420c69ee},
+{'l', 0xc1a2c234, 0x00000000},
+{'l', 0xb5800000, 0xc2ba11a8},
+{'l', 0x4281846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc231a7ba, 0x00000000},
+{'@', 0x00000047, 0x000054c2},/*        G        x-advance: 84.757812 */
+{'M', 0x429b9612, 0xc14c234f},
+{'q', 0xc18611aa, 0x416234f7},
+{0, 0xc2080001, 0x416234f7},
+{'q', 0xc18fffff, 0xb4800000},
+{0, 0xc1e11a7b, 0xc149ee59},
+{'q', 0xc12234f7, 0xc14b08d3},
+{0, 0xc12234f7, 0xc20ee585},
+{'q', 0x00000000, 0xc23e11a7},
+{0, 0x4219ee58, 0xc23e11a7},
+{'q', 0x41469ee4, 0x00000000},
+{0, 0x41a234f8, 0x40cd3dd0},
+{'9', 0x0033003e, 0x009b005c},
+{'l', 0xc1972c24, 0x406e5840},
+{'8', 0x949a94e3, 0x3b9300b6},
+{'q', 0xc08b08d0, 0x40ee5848},
+{0, 0xc08b08d0, 0x41c08d3e},
+{'q', 0x00000000, 0x417611aa},
+{0, 0x4093dcb0, 0x41bdcb0a},
+{'q', 0x4093dcb0, 0x41058469},
+{0, 0x41611a7c, 0x41058469},
+{'8', 0xf53c001d, 0xe336f51f},
+{'l', 0x00000000, 0xc181a7ba},
+{'l', 0xc1972c22, 0x00000000},
+{'l', 0x00000000, 0xc1708d3c},
+{'l', 0x421611a8, 0x00000000},
+{'l', 0x00000000, 0x4219ee58},
+{'@', 0x00000048, 0x000054c2},/*        H        x-advance: 84.757812 */
+{'M', 0x425b9612, 0x00000000},
+{'l', 0x00000000, 0xc21e5847},
+{'l', 0xc1c846a0, 0x00000000},
+{'l', 0x00000000, 0x421e5847},
+{'l', 0xc1a2c234, 0x00000000},
+{'l', 0xb5800000, 0xc2ba11a8},
+{'l', 0x41a2c234, 0x00000000},
+{'l', 0x00000000, 0x42127b97},
+{'l', 0x41c846a0, 0x00000000},
+{'l', 0x00000000, 0xc2127b97},
+{'l', 0x41a2c234, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc1a2c234, 0x00000000},
+{'@', 0x00000049, 0x000054c2},/*        I        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc2ba11a8},
+{'l', 0x427cb08d, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0x42765846},
+{'l', 0x41ab9612, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27cb08d, 0x00000000},
+{'l', 0xb5800000, 0xc17b9612},
+{'l', 0x41ab9612, 0x00000000},
+{'l', 0x00000000, 0xc2765846},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0xb5800000, 0xc17b9618},
+{'@', 0x0000004a, 0x000054c2},/*        J        x-advance: 84.757812 */
+{'M', 0x421b9612, 0x3fb08d3e},
+{'q', 0xc15846a0, 0x00000000},
+{0, 0xc1ad3dcc, 0xc0f08d3e},
+{'9', 0xffc4ffbf, 0xff54ffaf},
+{'l', 0x41a08d3e, 0xc03dcb00},
+{'8', 0x6123410b, 0x1f3b1f18},
+{'8', 0xe0400028, 0xa317e017},
+{'l', 0x00000000, 0xc23b4f72},
+{'l', 0xc1a611a8, 0x00000000},
+{'4', 0xff810000, 0x00000148},
+{'l', 0x00000000, 0x42791a7c},
+{'q', 0x00000000, 0x41708d3e},
+{0, 0xc105846c, 0x41bcb08e},
+{'q', 0xc1058468, 0x4108d3dc},
+{0, 0xc1b8469e, 0x4108d3dc},
+{'@', 0x0000004b, 0x000054c2},/*        K        x-advance: 84.757812 */
+{'M', 0x427308d4, 0x00000000},
+{'l', 0xc1b234f8, 0xc219a7b9},
+{'l', 0xc10c234e, 0x411cb08c},
+{'l', 0x00000000, 0x41e4f72c},
+{'l', 0xc1a2c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x41a2c235, 0x00000000},
+{'l', 0x00000000, 0x42253dcc},
+{'l', 0x41f08d3d, 0xc2253dcc},
+{'l', 0x41bd3dca, 0x00000000},
+{'l', 0xc1fdcb08, 0x421fb962},
+{'l', 0x42042350, 0x425469ee},
+{'l', 0xc1c00000, 0x00000000},
+{'@', 0x0000004c, 0x000054c2},/*        L        x-advance: 84.757812 */
+{'M', 0x4168d3dd, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x41a2c236, 0x00000000},
+{'l', 0x00000000, 0x429a9ee6},
+{'l', 0x4229ee58, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27b4f73, 0x00000000},
+{'@', 0x0000004d, 0x000054c2},/*        M        x-advance: 84.757812 */
+{'M', 0x427a7b96, 0x00000000},
+{'l', 0x00000000, 0xc26f72c2},
+{'q', 0x00000000, 0xc0e7b960},
+{0, 0x3f8d3dc0, 0xc1a611a8},
+{'9', 0x00a0ffe0, 0x00bcffd7},
+{'4', 0x0102ffbc, 0x0000ff88},
+{'l', 0xc10b08d6, 0xc2011a7c},
+{'9', 0xffc5fff0, 0xff44ffd7},
+{'l', 0x3ef72c00, 0x40dcb090},
+{'9', 0x00390003, 0x006e0003},
+{'l', 0x00000000, 0x426f72c2},
+{'l', 0xc172c235, 0x00000000},
+{'4', 0xfd180000, 0x000000bf},
+{'l', 0x4114f72c, 0x4209a7ba},
+{'q', 0x3f8469e0, 0x404f72c0},
+{0, 0x4027b960, 0x417ee584},
+{'9', 0xffab000b, 0xff820016},
+{'l', 0x411611a8, 0xc209ee59},
+{'l', 0x41b8d3de, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc174f730, 0x00000000},
+{'@', 0x0000004e, 0x000054c2},/*        N        x-advance: 84.757812 */
+{'M', 0x424e5847, 0x00000000},
+{'l', 0xc1d3dcb1, 0xc28b4f73},
+{'9', 0x008b000f, 0x00c3000f},
+{'l', 0x00000000, 0x4234f72c},
+{'l', 0xc18dcb09, 0x00000000},
+{'4', 0xfd180000, 0x000000b9},
+{'l', 0x41d8d3dc, 0x428f08d4},
+{'9', 0xff7ffff1, 0xff37fff1},
+{'l', 0x00000000, 0xc239611b},
+{'l', 0x418dcb08, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc1bee582, 0x00000000},
+{'@', 0x0000004f, 0x000054c2},/*        O        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'q', 0x40869ee8, 0xc1034f72},
+{0, 0x40869ee8, 0xc1c08d3e},
+{'@', 0x00000050, 0x000054c2},/*        P        x-advance: 84.757812 */
+{'M', 0x429d846a, 0xc27e9ee5},
+{'q', 0x00000000, 0x4113dcb0},
+{0, 0xc0869ee0, 0x418234f6},
+{'q', 0xc0869ef0, 0x40dee588},
+{0, 0xc1434f78, 0x412c2350},
+{'9', 0x001effc1, 0x001eff68},
+{'l', 0xc159611a, 0x00000000},
+{'l', 0x00000000, 0x42034f73},
+{'4', 0x0000ff5e, 0xfd180000},
+{'l', 0x420469ee, 0x00000000},
+{'q', 0x418dcb0a, 0x00000000},
+{0, 0x41d7b960, 0x40f08d40},
+{'9', 0x003b004a, 0x00ae004a},
+{'m', 0xc1a3dcb0, 0x3eb08d00},
+{'8', 0xabdcc400, 0xe794e7dd},
+{'4', 0x0000ffad, 0x00e60000},
+{'l', 0x41308d3e, 0x00000000},
+{'8', 0xe36a0048, 0xa821e221},
+{'@', 0x00000051, 0x000054c2},/*        Q        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x419ee585},
+{0, 0xc0d611b0, 0x41fcb08e},
+{'q', 0xc0d3dcb0, 0x413b9611},
+{0, 0xc19b08d4, 0x4173dcb0},
+{'8', 0x4e363513, 0x185c1822},
+{'9', 0x00000018, 0xfff90043},
+{'l', 0x00000000, 0x415ee584},
+{'q', 0xc10b08d8, 0x3ff72c30},
+{0, 0xc185846c, 0x3ff72c30},
+{'q', 0xc134f72c, 0x00000000},
+{0, 0xc195846a, 0xc0cb08d4},
+{'q', 0xc0ec2350, 0xc0cd3dcc},
+{0, 0xc13ee584, 0xc1a7b961},
+{'q', 0xc15cb08c, 0xc039611e},
+{0, 0xc1a8469e, 0xc16c2350},
+{'q', 0xc0e7b964, 0xc13dcb0a},
+{0, 0xc0e7b964, 0xc20234f8},
+{'q', 0x00000000, 0xc1be5844},
+{0, 0x411a7b96, 0xc20ee584},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'q', 0x40869ee8, 0xc1034f72},
+{0, 0x40869ee8, 0xc1c08d3e},
+{'@', 0x00000052, 0x000054c2},/*        R        x-advance: 84.757812 */
+{'M', 0x4276e584, 0x00000000},
+{'l', 0xc1a00000, 0xc20e11a8},
+{'l', 0xc13ee582, 0x00000000},
+{'l', 0x00000000, 0x420e11a8},
+{'4', 0x0000ff5e, 0xfd180000},
+{'l', 0x4208469f, 0x00000000},
+{'q', 0x4191a7b8, 0x00000000},
+{0, 0x41d9ee58, 0x40e34f70},
+{'q', 0x41108d40, 0x40e34f80},
+{0, 0x41108d40, 0x41a3dcb4},
+{'q', 0x00000000, 0x41172c20},
+{0, 0xc0a34f80, 0x41808d3c},
+{'9', 0x0034ffd8, 0x004aff8f},
+{'4', 0x014000c0, 0x0000ff49},
+{'m', 0xc01a7b90, 0xc2813dcb},
+{'8', 0xb4decd00, 0xe893e8de},
+{'4', 0x0000ffa4, 0x00cf0000},
+{'l', 0x414234f6, 0x00000000},
+{'q', 0x418b08d4, 0x00000000},
+{0, 0x418b08d4, 0xc154f72c},
+{'@', 0x00000053, 0x000054c2},/*        S        x-advance: 84.757812 */
+{'M', 0x42a0b08d, 0xc1d7b961},
+{'q', 0x00000000, 0x4153dcb0},
+{0, 0xc12234f8, 0x41a69ee6},
+{'q', 0xc1211a78, 0x40f08d3c},
+{0, 0xc1e08d3c, 0x40f08d3c},
+{'q', 0xc181a7ba, 0xb4800000},
+{0, 0xc1d34f73, 0xc0da7b97},
+{'9', 0xffcaffaf, 0xff62ff98},
+{'l', 0x419d3dcb, 0xc0234f70},
+{'8', 0x5234330c, 0x1d6e1d28},
+{'8', 0xe96b0048, 0xb823e923},
+{'8', 0xc3e2dc00, 0xd9a7e7e2},
+{'q', 0xc16d3dcc, 0xc0658470},
+{0, 0xc1a7b961, 0xc0c69ee8},
+{'8', 0xd0b3ebd0, 0xc3d3e6e3},
+{'q', 0xbff72c20, 0xc08f72c8},
+{0, 0xbff72c20, 0xc1200000},
+{'q', 0x00000000, 0xc1411a80},
+{0, 0x411a7b95, 0xc198d3dc},
+{'q', 0x411b9612, 0xc0e11a80},
+{0, 0x41ccb08d, 0xc0e11a80},
+{'q', 0x41772c24, 0x00000000},
+{0, 0x41c11a7e, 0x40c469f0},
+{'9', 0x00300045, 0x00970059},
+{'l', 0xc19dcb0a, 0x40000000},
+{'q', 0xc0423500, 0xc149ee58},
+{0, 0xc1808d3e, 0xc149ee58},
+{'8', 0x16a700c6, 0x3ee215e2},
+{'8', 0x2d0e1b00, 0x1e28110e},
+{'q', 0x404f72c0, 0x3fc23500},
+{0, 0x4151a7bc, 0x408234f8},
+{'q', 0x414f72c0, 0x404b08d0},
+{0, 0x419f72c2, 0x40e34f70},
+{'8', 0x4b511e37, 0x64192c19},
+{'@', 0x00000054, 0x000054c2},/*        T        x-advance: 84.757812 */
+{'M', 0x425234f7, 0xc29a9ee5},
+{'l', 0x00000000, 0x429a9ee5},
+{'l', 0xc1a2c234, 0x00000000},
+{'l', 0x00000000, 0xc29a9ee5},
+{'l', 0xc1e00001, 0x00000000},
+{'l', 0x35000000, 0xc17b9618},
+{'l', 0x4298b08e, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1e00002, 0x00000000},
+{'@', 0x00000055, 0x000054c2},/*        U        x-advance: 84.757812 */
+{'M', 0x42253dcb, 0x3fb08d3e},
+{'q', 0xc187b961, 0x00000000},
+{0, 0xc1c5846a, 0xc113dcb1},
+{'9', 0xffb7ffc3, 0xff1cffc3},
+{'4', 0xfe3c0000, 0x000000a2},
+{'l', 0x00000000, 0x4261a7ba},
+{'q', 0x00000000, 0x41411a7c},
+{0, 0x40308d40, 0x4188d3dd},
+{'8', 0x274e2716, 0xd6530039},
+{'9', 0xffd60019, 0xff750019},
+{'4', 0xfe430000, 0x000000a2},
+{'l', 0x00000000, 0x425e5847},
+{'q', 0x00000000, 0x419dcb09},
+{0, 0xc108d3e0, 0x41ea7b96},
+{'q', 0xc107b95c, 0x411846a0},
+{0, 0xc1cffffe, 0x411846a0},
+{'@', 0x00000056, 0x000054c2},/*        V        x-advance: 84.757812 */
+{'M', 0x42534f73, 0x00000000},
+{'l', 0xc1a4f72c, 0x00000000},
+{'4', 0xfd18ff00, 0x000000a9},
+{'l', 0x41808d3e, 0x4255cb09},
+{'9', 0x0030000e, 0x00920028},
+{'l', 0x3fb96120, 0xc0bdcb08},
+{'l', 0x40611a80, 0xc1469ee8},
+{'l', 0x41800000, 0xc255cb09},
+{'l', 0x41a8469e, 0x00000000},
+{'l', 0xc1fe5846, 0x42ba11a8},
+{'@', 0x00000057, 0x000054c2},/*        W        x-advance: 84.757812 */
+{'M', 0x428c69ee, 0x00000000},
+{'4', 0x0000ff78, 0xff6dffdd},
+{'9', 0xff98ffe5, 0xff35ffcf},
+{'l', 0xc01a7b90, 0x412234f8},
+{'l', 0xc0423500, 0x41434f72},
+{'l', 0xc0ac234c, 0x41ac234f},
+{'l', 0xc188d3dc, 0x00000000},
+{'4', 0xfd18ff8c, 0x0000008e},
+{'l', 0x40c469f0, 0x423fb962},
+{'9', 0x00340006, 0x00920008},
+{'l', 0x3f8469f0, 0xc0a7b960},
+{'l', 0x40308d38, 0xc139611c},
+{'4', 0xff450036, 0x0000006b},
+{'l', 0x40da7b98, 0x41bb08d2},
+{'8', 0x310c1807, 0x55121705},
+{'l', 0x3e0d3e00, 0xbfee5840},
+{'9', 0xffa80003, 0xff7d0008},
+{'l', 0x40b96118, 0xc23fb962},
+{'l', 0x418ee584, 0x00000000},
+{'l', 0xc167b960, 0x42ba11a8},
+{'@', 0x00000058, 0x000054c2},/*        X        x-advance: 84.757812 */
+{'M', 0x427d846a, 0x00000000},
+{'l', 0xc1a72c24, 0xc2080000},
+{'l', 0xc1a7b961, 0x42080000},
+{'l', 0xc1ac234f, 0x00000000},
+{'l', 0x41fd3dcb, 0xc244234f},
+{'l', 0xc1e69ee6, 0xc2300001},
+{'l', 0x41ac2350, 0x00000000},
+{'l', 0x41911a7b, 0x41ed3dcc},
+{'l', 0x41908d3e, 0xc1ed3dcc},
+{'l', 0x41ab08d6, 0x00000000},
+{'l', 0xc1ec2352, 0x42300001},
+{'l', 0x4201611b, 0x4244234f},
+{'l', 0xc1ab08d4, 0x00000000},
+{'@', 0x00000059, 0x000054c2},/*        Y        x-advance: 84.757812 */
+{'M', 0x4251ee58, 0xc219611a},
+{'l', 0x00000000, 0x4219611a},
+{'l', 0xc1a234f6, 0x00000000},
+{'l', 0x00000000, 0xc219611a},
+{'l', 0xc2000000, 0xc25ac236},
+{'l', 0x41aa7b95, 0x00000000},
+{'l', 0x41a5846b, 0x421c2350},
+{'l', 0x41a7b960, 0xc21c2350},
+{'l', 0x41aa7b96, 0x00000000},
+{'l', 0xc2000000, 0x425ac236},
+{'@', 0x0000005a, 0x000054c2},/*        Z        x-advance: 84.757812 */
+{'M', 0x429cf72c, 0x00000000},
+{'l', 0xc290f72c, 0x00000000},
+{'l', 0x00000000, 0xc1669ee5},
+{'l', 0x42391a7c, 0xc27ac235},
+{'l', 0xc2242350, 0x00000000},
+{'l', 0x35800000, 0xc17ee588},
+{'l', 0x4280d3dd, 0x00000000},
+{'l', 0x00000000, 0x416234f8},
+{'l', 0xc2391a7c, 0x427bdcb1},
+{'l', 0x424469ee, 0x00000000},
+{'l', 0x00000000, 0x417ee584},
+{'@', 0x0000005b, 0x000054c2},/*        [        x-advance: 84.757812 */
+{'M', 0x41cdcb09, 0x41ea7b96},
+{'l', 0x00000000, 0xc303a7b9},
+{'l', 0x422611a8, 0xb7000000},
+{'l', 0x00000000, 0x4151a7b8},
+{'l', 0xc1b9611a, 0x00000000},
+{'l', 0x00000000, 0x42d2c235},
+{'l', 0x41b9611a, 0x00000000},
+{'l', 0x00000000, 0x4152c234},
+{'l', 0xc22611a8, 0x00000000},
+{'@', 0x0000005c, 0x000054c2},/*       \         x-advance: 84.757812 */
+{'M', 0x427a7b96, 0x3fb08d3e},
+{'l', 0xc261611a, 0xc2cf72c2},
+{'l', 0x417b9610, 0x00000000},
+{'l', 0x42627b96, 0x42cf72c2},
+{'l', 0xc1800000, 0xb4800000},
+{'@', 0x0000005d, 0x000054c2},/*        ]        x-advance: 84.757812 */
+{'M', 0x418c234f, 0x41ea7b96},
+{'l', 0x00000000, 0xc152c234},
+{'l', 0x41b9611b, 0x00000000},
+{'l', 0x00000000, 0xc2d2c235},
+{'l', 0xc1b9611b, 0x00000000},
+{'l', 0x00000000, 0xc151a7b8},
+{'l', 0x422611a8, 0x00000000},
+{'l', 0xb6800000, 0x4303a7b9},
+{'l', 0xc22611a8, 0x36800000},
+{'@', 0x0000005e, 0x000054c2},/*        ^        x-advance: 84.757812 */
+{'M', 0x427e5847, 0xc20dcb09},
+{'l', 0xc1b3dcb2, 0xc24f72c1},
+{'l', 0xc1b2c234, 0x424f72c1},
+{'l', 0xc17a7b97, 0x00000000},
+{'l', 0x41d7b962, 0xc276e585},
+{'l', 0x41b1a7ba, 0x00000000},
+{'l', 0x41d8d3dc, 0x4276e585},
+{'l', 0xc17cb08c, 0x00000000},
+{'@', 0x0000005f, 0x000054c2},/*        _        x-advance: 84.757812 */
+{'M', 0xbeb08d3e, 0x4172c235},
+{'l', 0x00000000, 0xc0d3dcb0},
+{'l', 0x42aac235, 0x00000000},
+{'l', 0x00000000, 0x40d3dcb0},
+{'l', 0xc2aac235, 0x00000000},
+{'@', 0x00000060, 0x000054c2},/*        `        x-advance: 84.757812 */
+{'M', 0x423d846a, 0xc2a34f73},
+{'l', 0xc1bb9612, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x00000061, 0x000054c2},/*        a        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'l', 0x00000000, 0xc072c230},
+{'@', 0x00000062, 0x000054c2},/*        b        x-advance: 84.757812 */
+{'M', 0x411a7b96, 0x00000000},
+{'9', 0xffb50004, 0xff7e0004},
+{'l', 0x00000000, 0xc2ac234f},
+{'l', 0x419b08d4, 0x00000000},
+{'4', 0x00d90000, 0x0062ffff},
+{'l', 0x3e0d3d80, 0x00000000},
+{'8', 0xb343ce16, 0xe56be52d},
+{'q', 0x414d3dcc, 0x00000000},
+{0, 0x419dcb0a, 0x412234f0},
+{'q', 0x40dcb080, 0x412234fc},
+{0, 0x40dcb080, 0x41e5846c},
+{'q', 0x00000000, 0x418c234f},
+{0, 0xc0e9ee50, 0x41e08d3e},
+{'q', 0xc0e9ee58, 0x4128d3dc},
+{0, 0xc19f72c2, 0x4128d3dc},
+{'8', 0xe59c00c7, 0xafbde5d5},
+{'l', 0xbe8d3dc0, 0x00000000},
+{'8', 0x32fe1200, 0x2efb1ffe},
+{'6', 0x0000ff6a, 0xfed3009d},
+{'8', 0x6f0e4200, 0x46292d0e},
+{'8', 0x183d181b, 0xce510034},
+{'q', 0x4069ee50, 0xc0cb08d4},
+{0, 0x4069ee50, 0xc198469f},
+{'q', 0x00000000, 0xc149ee58},
+{0, 0xc0658460, 0xc198d3dc},
+{'8', 0xccadcce4, 0x34ab00ca},
+{'q', 0xc0772c20, 0x40d3dcb8},
+{0, 0xc0772c20, 0x419469f0},
+{'@', 0x00000063, 0x000054c2},/*        c        x-advance: 84.757812 */
+{'M', 0x422c234f, 0x3fb08d3e},
+{'q', 0xc187b960, 0x00000000},
+{0, 0xc1d1a7b9, 0xc1211a7c},
+{'q', 0xc113dcb0, 0xc12234f6},
+{0, 0xc113dcb0, 0xc1e1a7ba},
+{'q', 0x35000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e611a8},
+{'q', 0x4114f72c, 0xc1258468},
+{0, 0x41d34f73, 0xc1258468},
+{'q', 0x4152c234, 0x00000000},
+{0, 0x41ae5846, 0x40d3dcb0},
+{'9', 0x00340044, 0x00920056},
+{'l', 0xc19c2352, 0x3f772c00},
+{'8', 0xb8dfd3fa, 0xe5b5e5e6},
+{'q', 0xc16f72c4, 0x00000000},
+{0, 0xc16f72c4, 0x41c846a0},
+{'q', 0x00000000, 0x41ce5846},
+{0, 0x4173dcb0, 0x41ce5846},
+{'8', 0xe549002c, 0xad24e41d},
+{'l', 0x419b9612, 0x3f658480},
+{'8', 0x6dd43df8, 0x4aa330dd},
+{'q', 0xc0e7b960, 0x404f72c3},
+{0, 0xc18234f8, 0x404f72c3},
+{'@', 0x00000064, 0x000054c2},/*        d        x-advance: 84.757812 */
+{'M', 0x4261611a, 0x00000000},
+{'8', 0xd7fbf8fe, 0xc9fedffe},
+{'l', 0xbe8d3e00, 0x00000000},
+{'8', 0x53b83be3, 0x189a18d5},
+{'q', 0xc145846a, 0x00000000},
+{0, 0xc19b9612, 0xc125846a},
+{'q', 0xc0e34f70, 0xc125846a},
+{0, 0xc0e34f70, 0xc1e1a7b9},
+{'q', 0x00000000, 0xc19234f8},
+{0, 0x40e34f72, 0xc1e3dcb2},
+{'q', 0x40e5846a, 0xc1234f70},
+{0, 0x41a1a7ba, 0xc1234f70},
+{'8', 0x1b66003b, 0x4e421a2b},
+{'l', 0x3e0d3e00, 0x00000000},
+{'l', 0xbe0d3e00, 0xc14469ec},
+{'4', 0xff250000, 0x0000009b},
+{'l', 0x00000000, 0x42ac234f},
+{'9', 0x00370000, 0x00820004},
+{'6', 0x0000ff6a, 0xfed3fff9},
+{'q', 0x00000000, 0xc13ee588},
+{0, 0xc0772c20, 0xc193dcb2},
+{'8', 0xccabcce2, 0x33ad00c9},
+{'q', 0xc0611a80, 0x40cd3dd0},
+{0, 0xc0611a80, 0x419846a0},
+{'q', 0x00000000, 0x414b08d2},
+{0, 0x40658468, 0x4198469e},
+{'8', 0x3252321d, 0xe83d0022},
+{'8', 0xba29e81b, 0x910ed30e},
+{'@', 0x00000065, 0x000054c2},/*        e        x-advance: 84.757812 */
+{'M', 0x422cb08d, 0x3fb08d3e},
+{'q', 0xc18b08d3, 0x00000000},
+{0, 0xc1d69ee5, 0xc1234f73},
+{'q', 0xc1172c24, 0xc12469ef},
+{0, 0xc1172c24, 0xc1e69ee4},
+{'q', 0x35000000, 0xc1469ee8},
+{0, 0x408d3dcc, 0xc1a7b962},
+{'q', 0x408f72c2, 0xc108d3e0},
+{0, 0x414b08d4, 0xc14f72c0},
+{'q', 0x41034f74, 0xc08d3dd0},
+{0, 0x419b9612, 0xc08d3dd0},
+{'q', 0x4182c234, 0x00000000},
+{0, 0x41cb08d2, 0x412e5848},
+{'9', 0x00570048, 0x00f70048},
+{'4', 0x00040000, 0x0000fe6c},
+{'q', 0x00000000, 0x412234f8},
+{0, 0x408f72c4, 0x41808d3f},
+{'8', 0x2f632f24, 0xef480028},
+{'9', 0xffef001f, 0xffca002a},
+{'l', 0x419234f8, 0x3fcb08e0},
+{'q', 0xc072c240, 0x411b9611},
+{0, 0xc149ee58, 0x41708d3d},
+{'9', 0x0029ffba, 0x0029ff59},
+{'m', 0x00000000, 0xc2825846},
+{'8', 0x26a600c8, 0x69dd26df},
+{'l', 0x41fdcb08, 0x00000000},
+{'8', 0x97dabefd, 0xd9a7d9df},
+{'@', 0x00000066, 0x000054c2},/*        f        x-advance: 84.757812 */
+{'M', 0x4234234f, 0xc27611a8},
+{'l', 0x00000000, 0x427611a8},
+{'l', 0xc19a7b95, 0x00000000},
+{'l', 0x00000000, 0xc27611a8},
+{'l', 0xc18d3dcb, 0x00000000},
+{'4', 0xff980000, 0x0000008d},
+{'l', 0x00000000, 0xc0b72c20},
+{'q', 0x00000000, 0xc1400000},
+{0, 0x40f08d3c, 0xc1900000},
+{'q', 0x40f2c238, 0xc0c23500},
+{0, 0x41acb08e, 0xc0c23500},
+{'9', 0x00000057, 0x000f00b4},
+{'l', 0x00000000, 0x414b08d0},
+{'q', 0xc1258468, 0xbfa7b940},
+{0, 0xc199611a, 0xbfa7b940},
+{'8', 0x16b000ca, 0x4de716e7},
+{'l', 0x00000000, 0x407b9620},
+{'l', 0x41f469ee, 0x00000000},
+{'l', 0x00000000, 0x4151a7b8},
+{'l', 0xc1f469ee, 0x00000000},
+{'@', 0x00000067, 0x000054c2},/*        g        x-advance: 84.757812 */
+{'M', 0x4229ee58, 0x41ef72c2},
+{'q', 0xc14d3dca, 0x00000000},
+{0, 0xc1a72c23, 0xc0a9ee58},
+{'9', 0xffd6ffc0, 0xff8affb1},
+{'l', 0x419b08d4, 0xc011a7ba},
+{'8', 0x38222308, 0x143d1419},
+{'q', 0x40dee588, 0x00000000},
+{0, 0x4128d3e0, 0xc09ee584},
+{'9', 0xffd8001c, 0xff89001c},
+{'4', 0xffe00000, 0xffc10001},
+{'l', 0xbe0d3e00, 0x00000000},
+{'q', 0xc0cd3dc8, 0x415b9612},
+{0, 0xc1b4f72c, 0x415b9612},
+{'q', 0xc145846a, 0x00000000},
+{0, 0xc199611a, 0xc119611a},
+{'q', 0xc0da7b96, 0xc11a7b97},
+{0, 0xc0da7b96, 0xc1dc2350},
+{'q', 0x00000000, 0xc1908d3e},
+{0, 0x40e34f72, 0xc1df72c2},
+{'q', 0x40e34f74, 0xc11ee588},
+{0, 0x41a2c235, 0xc11ee588},
+{'8', 0x1b650039, 0x4e431a2b},
+{'l', 0x3eb08d80, 0x00000000},
+{'8', 0xcc02ed00, 0xd505df02},
+{'l', 0x4192c234, 0x00000000},
+{'9', 0x003bfffd, 0x0089fffd},
+{'l', 0x00000000, 0x425c69ee},
+{'q', 0x00000000, 0x417a7b98},
+{0, 0xc10d3dd0, 0x41bf72c3},
+{'9', 0x0042ffba, 0x0042ff38},
+{'m', 0x416d3dcc, 0xc2888d3e},
+{'q', 0x00000000, 0xc134f728},
+{0, 0xc0772c20, 0xc18dcb08},
+{'8', 0xcdaccde2, 0x32ac00c9},
+{'q', 0xc0658460, 0x40c69ee8},
+{0, 0xc0658460, 0x419234f8},
+{'q', 0x00000000, 0x41400000},
+{0, 0x406e5840, 0x418ee584},
+{'8', 0x2e522e1d, 0xcd560038},
+{'q', 0x4072c230, 0xc0cf72c0},
+{0, 0x4072c230, 0xc18cb08c},
+{'@', 0x00000068, 0x000054c2},/*        h        x-advance: 84.757812 */
+{'M', 0x41e7b961, 0xc26ee584},
+{'q', 0x407b9618, 0xc108d3e0},
+{0, 0x411dcb0a, 0xc1469ee8},
+{'q', 0x40bdcb08, 0xc0772c20},
+{0, 0x416234f4, 0xc0772c20},
+{'q', 0x41396120, 0x00000000},
+{0, 0x418b08d4, 0x40e11a80},
+{'9', 0x0038002e, 0x00ad002e},
+{'4', 0x017a0000, 0x0000ff66},
+{'l', 0x00000000, 0xc22b4f73},
+{'q', 0x00000000, 0xc1269ee4},
+{0, 0xc034f730, 0xc167b960},
+{'8', 0xdfb8dfea, 0x30a500c8},
+{'9', 0x0030ffde, 0x007bffde},
+{'l', 0x00000000, 0x421fb961},
+{'l', 0xc19b08d4, 0x00000000},
+{'4', 0xfcce0000, 0x0000009b},
+{'l', 0x00000000, 0x41df72c0},
+{'q', 0x00000000, 0x40f08d40},
+{0, 0xbf0d3dc0, 0x416b08d8},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'@', 0x00000069, 0x000054c2},/*        i        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc241a7ba},
+{'l', 0xc1a00000, 0x00000000},
+{'4', 0xff980000, 0x0000013b},
+{'6', 0x01ec0000, 0xfda9ff65},
+{'l', 0x00000000, 0xc16469f0},
+{'l', 0x419b08d4, 0x00000000},
+{'l', 0x00000000, 0x416469f0},
+{'l', 0xc19b08d4, 0x00000000},
+{'@', 0x0000006a, 0x000054c2},/*        j        x-advance: 84.757812 */
+{'M', 0x426e5847, 0x3f65846a},
+{'q', 0x00000000, 0x410e5846},
+{0, 0xc07b9620, 0x4174f72b},
+{'q', 0xc0772c20, 0x40cb08d4},
+{0, 0xc131a7b8, 0x411b9612},
+{'q', 0xc0e58468, 0x405846a0},
+{0, 0xc184f72c, 0x405846a0},
+{'8', 0xf9a800d5, 0xf0baf9d3},
+{'l', 0x00000000, 0xc167b961},
+{'q', 0x411611a8, 0x401611a8},
+{0, 0x41911a7b, 0x401611a8},
+{'8', 0xe356003c, 0xa719e319},
+{'l', 0x00000000, 0xc2734f73},
+{'l', 0xc1c34f73, 0x00000000},
+{'4', 0xff980000, 0x0000015e},
+{'6', 0x025c0000, 0xfd39ff65},
+{'l', 0x00000000, 0xc16469f0},
+{'l', 0x419b08d4, 0x00000000},
+{'l', 0x00000000, 0x416469f0},
+{'l', 0xc19b08d4, 0x00000000},
+{'@', 0x0000006b, 0x000054c2},/*        k        x-advance: 84.757812 */
+{'M', 0x426e5847, 0x00000000},
+{'l', 0xc19f72c4, 0xc2072c23},
+{'l', 0xc1058468, 0x40b96118},
+{'l', 0x00000000, 0x41e00000},
+{'l', 0xc19b08d4, 0x00000000},
+{'l', 0x00000000, 0xc2ccb08d},
+{'l', 0x419b08d4, 0x00000000},
+{'l', 0x00000000, 0x426a7b96},
+{'l', 0x41d4f72c, 0xc1f72c24},
+{'l', 0x41a69ee6, 0x00000000},
+{'l', 0xc1d1a7ba, 0x41e8d3dc},
+{'l', 0x41e1a7ba, 0x423611a8},
+{'l', 0xc1a9611a, 0x00000000},
+{'@', 0x0000006c, 0x000054c2},/*        l        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc298469f},
+{'l', 0xc1a00000, 0x00000000},
+{'l', 0x00000000, 0xc151a7b8},
+{'l', 0x421d846a, 0x00000000},
+{'l', 0x00000000, 0x42b27b96},
+{'@', 0x0000006d, 0x000054c2},/*        m        x-advance: 84.757812 */
+{'M', 0x420a34f7, 0x00000000},
+{'l', 0x00000000, 0xc235846a},
+{'q', 0x00000000, 0xc12469ec},
+{0, 0xbfa7b960, 0xc16469ec},
+{'8', 0xe0dbe0f7, 0x33d400e4},
+{'9', 0x0033fff0, 0x0088fff0},
+{'4', 0x01410000, 0x0000ff82},
+{'l', 0x00000000, 0xc26ac235},
+{'9', 0xff980000, 0xff81fffd},
+{'l', 0x41669ee4, 0x00000000},
+{'4', 0x00460003, 0x001a0000},
+{'l', 0x3e0d3e00, 0x00000000},
+{'8', 0xaf2fc812, 0xe747e71c},
+{'8', 0x1a480030, 0x51221a18},
+{'l', 0x3e0d3e00, 0x00000000},
+{'8', 0xad34c616, 0xe84de81e},
+{'q', 0x410234f8, 0x00000000},
+{0, 0x413a7b90, 0x40bdcb10},
+{'9', 0x002f001c, 0x00a2001c},
+{'4', 0x018d0000, 0x0000ff83},
+{'l', 0x00000000, 0xc235846a},
+{'q', 0x00000000, 0xc12469ec},
+{0, 0xbfa7b960, 0xc16469ec},
+{'8', 0xe0dbe0f7, 0x2cd400e4},
+{'9', 0x002cfff0, 0x0084fff0},
+{'l', 0x00000000, 0x4225cb09},
+{'l', 0xc17b9614, 0x00000000},
+{'@', 0x0000006e, 0x000054c2},/*        n        x-advance: 84.757812 */
+{'M', 0x42634f73, 0x00000000},
+{'l', 0x00000000, 0xc22ac235},
+{'q', 0x00000000, 0xc11b9610},
+{0, 0xc02c2350, 0xc16469ec},
+{'8', 0xdcb8dcec, 0x31a400c7},
+{'9', 0x0030ffde, 0x007bffde},
+{'4', 0x01400000, 0x0000ff65},
+{'l', 0x35800000, 0xc267b961},
+{'8', 0xb2ffd000, 0xc9fee2ff},
+{'l', 0x4193dcb1, 0x00000000},
+{'8', 0x38040a01, 0x3e022d02},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'q', 0x407b9618, 0xc108d3dc},
+{0, 0x411dcb0a, 0xc1469ee4},
+{'q', 0x40bdcb08, 0xc0772c20},
+{0, 0x416234f4, 0xc0772c20},
+{'9', 0x000000b9, 0x00e500b9},
+{'l', 0x00000000, 0x423d846a},
+{'l', 0xc19a7b96, 0x00000000},
+{'@', 0x0000006f, 0x000054c2},/*        o        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'q', 0x40772c20, 0xc0c234f8},
+{0, 0x40772c20, 0xc19c2350},
+{'@', 0x00000070, 0x000054c2},/*        p        x-advance: 84.757812 */
+{'M', 0x41e34f73, 0xc2953dcb},
+{'8', 0x2e050b03, 0x32022202},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'8', 0xb046cc1a, 0xe467e42c},
+{'q', 0x41469ee4, 0x00000000},
+{0, 0x419b9610, 0x41269ee0},
+{'q', 0x40e34f70, 0x41269ee8},
+{0, 0x40e34f70, 0x41e1a7ba},
+{'q', 0x00000000, 0x419234f8},
+{0, 0xc0e58460, 0x41e469ee},
+{'q', 0xc0e34f78, 0x412469f0},
+{0, 0xc1a11a7c, 0x412469f0},
+{'8', 0xe69a00c5, 0xb2bee5d5},
+{'l', 0xbe0d3d80, 0xb5800000},
+{'l', 0x3e0d3d80, 0x414469ee},
+{'4', 0x00e60000, 0x0000ff65},
+{'l', 0x35800000, 0xc2af4f72},
+{'9', 0xffc90000, 0xff7efffc},
+{'6', 0x00000096, 0x012d0007},
+{'8', 0x6e0e4100, 0x43282c0e},
+{'8', 0x173d171a, 0xcc530037},
+{'q', 0x40611a80, 0xc0d1a7b8},
+{0, 0x40611a80, 0xc198d3dd},
+{'q', 0x00000000, 0xc14b08d4},
+{0, 0xc069ee50, 0xc198469e},
+{'8', 0xceafcee4, 0x18c300de},
+{'q', 0xc0584690, 0x404234f0},
+{0, 0xc0a7b95c, 0x410c234c},
+{'q', 0xbfe58470, 0x40b72c28},
+{0, 0xbfe58470, 0x41600000},
+{'@', 0x00000071, 0x000054c2},/*        q        x-advance: 84.757812 */
+{'M', 0x429634f7, 0xc2953dcb},
+{'9', 0x004bfffc, 0x0082fffc},
+{'l', 0x00000000, 0x42af4f72},
+{'l', 0xc19b08d6, 0x36800000},
+{'4', 0xff1a0000, 0xff9e0001},
+{'l', 0xbe0d3e00, 0x00000000},
+{'8', 0x4dbc32ea, 0x1b961bd3},
+{'q', 0xc14d3dca, 0x00000000},
+{0, 0xc19dcb09, 0xc12234f7},
+{'q', 0xc0dcb08c, 0xc12234f7},
+{0, 0xc0dcb08c, 0xc1e5846a},
+{'q', 0x00000000, 0xc18cb08c},
+{0, 0x40ec2350, 0xc1e08d3e},
+{'q', 0x40ec2350, 0xc128d3d8},
+{0, 0x419ee584, 0xc128d3d8},
+{'9', 0x00000072, 0x006c00a8},
+{'l', 0x3e8d3e00, 0x00000000},
+{'8', 0xc803e800, 0xd804df03},
+{'6', 0x00000096, 0x012dff63},
+{'q', 0x00000000, 0xc10469ec},
+{0, 0xbfee5840, 0xc1600000},
+{'8', 0xbad7d3f2, 0xe8c3e8e6},
+{'q', 0xc0d3dcb0, 0x00000000},
+{0, 0xc12469f0, 0x40cb08d8},
+{'q', 0xc0658468, 0x40cb08d0},
+{0, 0xc0658468, 0x4198469e},
+{'q', 0x00000000, 0x4149ee5a},
+{0, 0x40611a80, 0x4199611b},
+{'8', 0x3353331c, 0xcc540036},
+{'q', 0x407b9610, 0xc0d3dcb0},
+{0, 0x407b9610, 0xc19469ef},
+{'@', 0x00000072, 0x000054c2},/*        r        x-advance: 84.757812 */
+{'M', 0x42951a7c, 0xc269ee58},
+{'q', 0xc0f72c30, 0xbfa7b960},
+{0, 0xc169ee5c, 0xbfa7b960},
+{'q', 0xc12c2350, 0x00000000},
+{0, 0xc188d3dc, 0x410234f8},
+{'9', 0x0041ffce, 0x00abffce},
+{'4', 0x00f10000, 0x0000ff66},
+{'l', 0x00000000, 0xc241611a},
+{'8', 0x9ef9d700, 0x91ecc8f9},
+{'l', 0x41958469, 0x00000000},
+{'9', 0x00470013, 0x007d0019},
+{'l', 0x3e8d3d80, 0x00000000},
+{'q', 0x405cb090, 0xc11611a8},
+{0, 0x4114f72c, 0xc153dcb0},
+{'q', 0x40bb9618, 0xc0772c20},
+{0, 0x4173dcb0, 0xc0772c20},
+{'q', 0x40e58470, 0x00000000},
+{0, 0x41634f78, 0x3f9611c0},
+{'l', 0x00000000, 0x4182c234},
+{'@', 0x00000073, 0x000054c2},/*        s        x-advance: 84.757812 */
+{'M', 0x4298469f, 0xc1ae5847},
+{'q', 0x00000000, 0x412d3dcc},
+{0, 0xc10e5848, 0x4188469f},
+{'q', 0xc10d3dcc, 0x40c469f0},
+{0, 0xc1c3dcb0, 0x40c469f0},
+{'q', 0xc17611a8, 0xb4800000},
+{0, 0xc1bcb08e, 0xc09a7b96},
+{'9', 0xffd9ffbf, 0xff87ffaa},
+{'l', 0x4188469f, 0xc0234f70},
+{'8', 0x3c272a0b, 0x1163111c},
+{'8', 0xf05e0041, 0xcd1df01d},
+{'8', 0xd3e8e400, 0xe4afefe9},
+{'q', 0xc1834f72, 0xc04f72c0},
+{0, 0xc1b11a7b, 0xc0c00000},
+{'8', 0xc7baead3, 0xa9e9dde9},
+{'q', 0x00000000, 0xc12b08d4},
+{0, 0x41034f72, 0xc184f72a},
+{'q', 0x410469f0, 0xc0c00000},
+{0, 0x41bb08d5, 0xc0c00000},
+{'q', 0x4154f72c, 0x00000000},
+{0, 0x41ab08d4, 0x40a58460},
+{'9', 0x00290041, 0x00770051},
+{'l', 0xc189611c, 0x3fe58460},
+{'8', 0xcae0dcfa, 0xeeaeeee7},
+{'8', 0x0eae00c9, 0x2ee50de5},
+{'8', 0x29141900, 0x18470e15},
+{'q', 0x410c2350, 0x3fe58460},
+{0, 0x417846a0, 0x406e5840},
+{'8', 0x23570e36, 0x36341421},
+{'q', 0x401ee580, 0x408234fc},
+{0, 0x401ee580, 0x4127b962},
+{'@', 0x00000074, 0x000054c2},/*        t        x-advance: 84.757812 */
+{'M', 0x41b4f72c, 0xc27611a8},
+{'l', 0xc138469f, 0x00000000},
+{'l', 0x00000000, 0xc151a7b8},
+{'l', 0x4147b961, 0x00000000},
+{'l', 0x40c234f8, 0xc19b9610},
+{'l', 0x414234f6, 0x00000000},
+{'l', 0x00000000, 0x419b9610},
+{'l', 0x41d469ee, 0x00000000},
+{'4', 0x00680000, 0x0000ff2c},
+{'l', 0x00000000, 0x421234f8},
+{'8', 0x41083000, 0x1a1d1009},
+{'q', 0x40234f70, 0x3f9611a8},
+{0, 0x40e58468, 0x3f9611a8},
+{'9', 0x00000044, 0xfff2008c},
+{'l', 0x00000000, 0x414d3dcb},
+{'8', 0x0f920cb2, 0x02bd02e0},
+{'q', 0xc10c234c, 0x00000000},
+{0, 0xc16b08d4, 0xc01611a8},
+{'q', 0xc0bb9610, 0xc01a7b96},
+{0, 0xc10e5844, 0xc0ee5847},
+{'q', 0xc03dcb08, 0xc0a34f72},
+{0, 0xc03dcb08, 0xc16469ed},
+{'l', 0x3e0d3d80, 0xc219611b},
+{'@', 0x00000075, 0x000054c2},/*        u        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2953dcb},
+{'l', 0x00000000, 0x422772c2},
+{'q', 0x00000000, 0x411846a0},
+{0, 0x404234f8, 0x4169ee58},
+{'8', 0x28462818, 0xd0510031},
+{'9', 0xffcf0020, 0xff850020},
+{'4', 0xfec00000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'9', 0x004c0000, 0x00850004},
+{'l', 0xc193dcb0, 0x00000000},
+{'9', 0xffb1fffa, 0xff8afffa},
+{'l', 0xbeb08d80, 0x00000000},
+{'q', 0xc0ec2350, 0x4181a7b9},
+{0, 0xc1b4f72c, 0x4181a7b9},
+{'q', 0xc134f72c, 0x35400000},
+{0, 0xc189ee58, 0xc0e58468},
+{'9', 0xffc7ffd1, 0xff55ffd1},
+{'l', 0x00000000, 0xc23d846a},
+{'l', 0x419b08d4, 0x00000000},
+{'@', 0x00000076, 0x000054c2},/*        v        x-advance: 84.757812 */
+{'M', 0x4255846a, 0x00000000},
+{'l', 0xc1b9611b, 0x00000000},
+{'4', 0xfdacff20, 0x000000a3},
+{'l', 0x41669ee4, 0x422b9612},
+{'q', 0x3f846a00, 0x405cb088},
+{0, 0x409cb090, 0x4189ee58},
+{'q', 0x3ed3dc80, 0xbfd3dcc0},
+{0, 0x401ee580, 0xc10c2350},
+{'9', 0xffc70011, 0xfe65008c},
+{'l', 0x41a234f8, 0x00000000},
+{'l', 0xc1e72c24, 0x42953dcb},
+{'@', 0x00000077, 0x000054c2},/*        w        x-advance: 84.757812 */
+{'M', 0x428dcb09, 0x00000000},
+{'4', 0x0000ff7a, 0xfefdffb2},
+{'8', 0xc8f2d4f3, 0x19fa0400},
+{'9', 0x0014fffb, 0x0122ffa5},
+{'l', 0xc18611a8, 0x00000000},
+{'4', 0xfdacff9c, 0x0000007d},
+{'l', 0x40b72c20, 0x422772c2},
+{'9', 0x0053000a, 0x007c000a},
+{'l', 0x3fb08d40, 0xc0a34f74},
+{'4', 0xfef00056, 0x0000006a},
+{'l', 0x411a7b98, 0x41fb08d3},
+{'8', 0x3e101b08, 0xb205de00},
+{'9', 0xffd40005, 0xfe840038},
+{'l', 0x41796118, 0x00000000},
+{'l', 0xc151a7b8, 0x42953dcb},
+{'@', 0x00000078, 0x000054c2},/*        x        x-advance: 84.757812 */
+{'M', 0x42711a7c, 0x00000000},
+{'l', 0xc1908d3e, 0xc1d8469f},
+{'l', 0xc191a7ba, 0x41d8469f},
+{'l', 0xc1a4f72c, 0x00000000},
+{'l', 0x41e00000, 0xc21a34f7},
+{'l', 0xc1d5846a, 0xc210469f},
+{'l', 0x41a72c23, 0x00000000},
+{'l', 0x4184f72d, 0x41c34f72},
+{'l', 0x418469ee, 0xc1c34f72},
+{'l', 0x41a846a0, 0x00000000},
+{'l', 0xc1d5846c, 0x420f72c2},
+{'l', 0x41e1a7b8, 0x421b08d4},
+{'l', 0xc1a8469c, 0x00000000},
+{'@', 0x00000079, 0x000054c2},/*        y        x-advance: 84.757812 */
+{'M', 0x41b34f73, 0x41ea7b96},
+{'9', 0x0000ffc6, 0xfff9ff9c},
+{'4', 0xff920000, 0x0002001c},
+{'l', 0x40611a78, 0x3e53dcc0},
+{'8', 0xf6360021, 0xde27f616},
+{'9', 0xffe80011, 0xffae0027},
+{'4', 0xfdb2ff09, 0x000000a3},
+{'l', 0x4151a7ba, 0x4211611a},
+{'9', 0x003c0016, 0x00b80037},
+{'l', 0x3f1ee580, 0xc0234f78},
+{'l', 0x40b2c238, 0xc1a1a7b9},
+{'4', 0xfedc0063, 0x000000a2},
+{'l', 0xc1f72c22, 0x429d1a7c},
+{'q', 0xc0b08d40, 0x41634f70},
+{0, 0xc1411a7c, 0x419e5845},
+{'q', 0xc0d1a7b8, 0x40b2c234},
+{0, 0xc1858469, 0x40b2c234},
+{'@', 0x0000007a, 0x000054c2},/*        z        x-advance: 84.757812 */
+{'M', 0x4118469f, 0x00000000},
+{'l', 0x00000000, 0xc15b9612},
+{'l', 0x421d3dcb, 0xc23b9612},
+{'l', 0xc211ee58, 0x00000000},
+{'l', 0xb6000000, 0xc1600000},
+{'l', 0x426a34f8, 0x00000000},
+{'l', 0x00000000, 0x415dcb08},
+{'l', 0xc21c69ee, 0x423a7b96},
+{'l', 0x4229ee58, 0x35800000},
+{'l', 0x00000000, 0x416234f7},
+{'l', 0xc281846a, 0x00000000},
+{'@', 0x0000007b, 0x000054c2},/*        {        x-advance: 84.757812 */
+{'M', 0x424611a8, 0x41ea7b96},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc16d3dcc, 0xc0ac2350},
+{'9', 0xffd5ffd4, 0xff87ffd4},
+{'l', 0x00000000, 0xc1b4f72c},
+{'8', 0xa3e2c200, 0xe0a0e1e2},
+{'l', 0x00000000, 0xc1572c22},
+{'8', 0xdf60fe42, 0xa31de11d},
+{'l', 0x00000000, 0xc1b4f72c},
+{'q', 0x00000000, 0xc1211a80},
+{0, 0x40ac2350, 0xc174f730},
+{'9', 0xffd6002b, 0xffd60077},
+{'4', 0x000000b4, 0x00680000},
+{'l', 0xc14f72c0, 0x00000000},
+{'8', 0x1cb800ce, 0x56ea1cea},
+{'l', 0x00000000, 0x41a611a6},
+{'8', 0x5ae03400, 0x30ae26e1},
+{'l', 0x00000000, 0x3e8d3e00},
+{'8', 0x32530c34, 0x581e251e},
+{'l', 0x00000000, 0x41a611a8},
+{'8', 0x57163a00, 0x1c481c16},
+{'l', 0x414f72c0, 0x00000000},
+{'l', 0x00000000, 0x4152c234},
+{'l', 0xc1b469ec, 0x00000000},
+{'@', 0x0000007c, 0x000054c2},/*        |        x-advance: 84.757812 */
+{'M', 0x42053dcb, 0x41fb08d4},
+{'l', 0x00000000, 0xc305b961},
+{'l', 0x41908d3e, 0x00000000},
+{'l', 0x00000000, 0x4305b961},
+{'l', 0xc1908d3e, 0x00000000},
+{'@', 0x0000007d, 0x000054c2},/*        }        x-advance: 84.757812 */
+{'M', 0x414b08d4, 0x41ea7b96},
+{'4', 0xff970000, 0x00000067},
+{'8', 0xe4480032, 0xa916e416},
+{'l', 0x00000000, 0xc1a611a8},
+{'8', 0xa81ecd00, 0xce53da1e},
+{'l', 0x00000000, 0xbe8d3e00},
+{'8', 0xcfaef5cd, 0xa7e1dae1},
+{'l', 0x00000000, 0xc1a611a6},
+{'8', 0xaaeac700, 0xe4b8e4ea},
+{'4', 0x0000ff99, 0xff980000},
+{'l', 0x41b469ee, 0x00000000},
+{'q', 0x411846a0, 0x00000000},
+{0, 0x416e5848, 0x40a9ee50},
+{'9', 0x0029002b, 0x007a002b},
+{'l', 0x00000000, 0x41b4f72c},
+{'8', 0x5d1d3e00, 0x21601e1d},
+{'l', 0x00000000, 0x41572c22},
+{'8', 0x20a001bf, 0x5de21ee2},
+{'l', 0x00000000, 0x41b4f72c},
+{'q', 0x00000000, 0x411b9612},
+{0, 0xc0b08d40, 0x4172c234},
+{'q', 0xc0b08d40, 0x40ae5848},
+{0, 0xc16d3dcc, 0x40ae5848},
+{'l', 0xc1b469ee, 0x00000000},
+{'@', 0x0000007e, 0x000054c2},/*        ~        x-advance: 84.757812 */
+{'M', 0x426ee584, 0xc20e5847},
+{'8', 0xf5af00d7, 0xe7aff5d9},
+{'q', 0xc114f72c, 0xc04f72c0},
+{0, 0xc173dcb0, 0xc04f72c0},
+{'8', 0x0cb800d9, 0x24bc0be0},
+{'l', 0xb5000000, 0xc16b08d4},
+{'q', 0x40f9611b, 0xc0b96118},
+{0, 0x4195846a, 0xc0b96118},
+{'q', 0x40e7b960, 0x00000000},
+{0, 0x4185846a, 0x404f72c0},
+{'8', 0x20641948, 0x0634061b},
+{'9', 0x00000049, 0xffce0088},
+{'l', 0x00000000, 0x4171a7bc},
+{'8', 0x22bd18dd, 0x09b109e0},
+{'@', 0x000000a0, 0x000054c2},/*                 x-advance: 84.757812 */
+{'@', 0x000000a1, 0x000054c2},/*        ¡        x-advance: 84.757812 */
+{'M', 0x4209ee58, 0xc234234f},
+{'l', 0x417dcb08, 0x00000000},
+{'4', 0x01fd0011, 0x0000ff5e},
+{'6', 0xfe030011, 0xff150090},
+{'l', 0x00000000, 0x4194f72e},
+{'l', 0xc19ee584, 0x00000000},
+{'l', 0x00000000, 0xc194f72e},
+{'l', 0x419ee584, 0x00000000},
+{'@', 0x000000a2, 0x000054c2},/*        ¢        x-advance: 84.757812 */
+{'M', 0x422f2c23, 0xc1ab9612},
+{'8', 0xe3510030, 0xab28e221},
+{'l', 0x419c2352, 0x3f53dcc0},
+{'q', 0xbfc23500, 0x4128d3da},
+{0, 0xc113dcb8, 0x418cb08c},
+{'9', 0x0037ffc3, 0x0043ff61},
+{'4', 0x00690000, 0x0000ffa7},
+{'l', 0x00000000, 0xc1508d3e},
+{'q', 0xc16d3dcc, 0xbfb96118},
+{0, 0xc1b8d3dd, 0xc12d3dcb},
+{'q', 0xc10469ee, 0xc11611a8},
+{0, 0xc10469ee, 0xc1ccb08d},
+{'q', 0xb5000000, 0xc1800000},
+{0, 0x41011a7b, 0xc1cdcb0a},
+{'9', 0xffb30041, 0xffa500ba},
+{'4', 0xff9b0000, 0x00000059},
+{'l', 0x00000000, 0x414b08d8},
+{'q', 0x413a7b94, 0x3fa7b940},
+{0, 0x4199611a, 0x40f96120},
+{'9', 0x0033003c, 0x0086004b},
+{'l', 0xc19b9614, 0x3f772c00},
+{'8', 0xb3d9cef8, 0xe5b1e5e2},
+{'q', 0xc108d3dc, 0x00000000},
+{0, 0xc14f72c0, 0x40cb08d8},
+{'q', 0xc08d3dcc, 0x40cb08d0},
+{0, 0xc08d3dcc, 0x418d3dca},
+{'q', 0x00000000, 0x41400000},
+{0, 0x4091a7b8, 0x419234f7},
+{'q', 0x4093dcb4, 0x40c8d3dc},
+{0, 0x414f72c2, 0x40c8d3dc},
+{'@', 0x000000a3, 0x000054c2},/*        £        x-advance: 84.757812 */
+{'M', 0x42a2c235, 0xc1c8469f},
+{'q', 0xc008d3e0, 0x413dcb09},
+{0, 0xc11611a8, 0x4193dcb1},
+{'9', 0x0034ffc7, 0x0034ff73},
+{'4', 0x0000fe7c, 0xff8f0000},
+{'8', 0xb94ce038, 0x9f14d914},
+{'0', 0x0099d300, 0x0062a300},
+{'l', 0x00000000, 0xc15a7b94},
+{'q', 0x00000000, 0xc15dcb08},
+{0, 0x40ec2350, 0xc1a7b960},
+{'q', 0x40ec2350, 0xc0e58470},
+{0, 0x41b00000, 0xc0e58470},
+{'q', 0x413a7b94, 0x00000000},
+{0, 0x4192c236, 0x409846a0},
+{'9', 0x00260035, 0x007a004d},
+{'l', 0xc1808d3e, 0x404f72c0},
+{'8', 0xc3ded6f5, 0xedc5edea},
+{'8', 0x20b800ce, 0x64ea1fea},
+{'l', 0x00000000, 0x41411a7c},
+{'l', 0x419dcb08, 0x00000000},
+{'4', 0x005d0000, 0x0000ff63},
+{'l', 0x00000000, 0x40b08d40},
+{'8', 0x61ea3800, 0x47b328ea},
+{'l', 0x41d72c24, 0x00000000},
+{'8', 0xe5560039, 0xb127e51d},
+{'l', 0x41808d40, 0x402c2350},
+{'@', 0x000000a4, 0x000054c2},/*        ¤        x-advance: 84.757812 */
+{'M', 0x4145846a, 0xc23cb08d},
+{'9', 0xffbe0000, 0xff870021},
+{'4', 0xffb7ffb7, 0xffaa0056},
+{'l', 0x41108d3c, 0x4112c230},
+{'q', 0x40dee588, 0xc08234f0},
+{0, 0x4172c234, 0xc08234f0},
+{'9', 0x00000042, 0x00200078},
+{'4', 0xffb6004a, 0x00570057},
+{'l', 0xc11611a8, 0x4114f728},
+{'q', 0x408469f0, 0x40da7b98},
+{0, 0x408469f0, 0x4171a7bc},
+{'9', 0x00410000, 0x0077ffe0},
+{'4', 0x00490049, 0x0058ffa9},
+{'l', 0xc112c234, 0xc114f72c},
+{'q', 0xc0dcb090, 0x408234f8},
+{0, 0xc173dcb4, 0x408234f8},
+{'9', 0x0000ffbd, 0xffe1ff87},
+{'4', 0x004bffb6, 0xffa9ffaa},
+{'l', 0x4114f72c, 0xc1172c24},
+{'9', 0xffcaffe0, 0xff88ffe0},
+{'m', 0x4179611a, 0xbe0d3e00},
+{'8', 0x51212f00, 0x21512121},
+{'8', 0xde50002e, 0xaf22de22},
+{'8', 0xafdfd100, 0xdeafdedf},
+{'8', 0x21af00d1, 0x51df21df},
+{'@', 0x000000a5, 0x000054c2},/*        ¥        x-advance: 84.757812 */
+{'M', 0x425fb961, 0xc23e9ee5},
+{'l', 0x4198469e, 0x00000000},
+{'l', 0x00000000, 0x41211a78},
+{'l', 0xc1ba7b96, 0x00000000},
+{'l', 0x00000000, 0x4132c236},
+{'l', 0x41ba7b96, 0x00000000},
+{'l', 0x00000000, 0x412234f8},
+{'l', 0xc1ba7b96, 0x00000000},
+{'l', 0x00000000, 0x418234f7},
+{'l', 0xc19611a6, 0x00000000},
+{'l', 0x00000000, 0xc18234f7},
+{'l', 0xc1b9611b, 0x00000000},
+{'l', 0x00000000, 0xc12234f8},
+{'l', 0x41b9611b, 0x00000000},
+{'l', 0x00000000, 0xc132c236},
+{'l', 0xc1b9611b, 0x00000000},
+{'l', 0x00000000, 0xc1211a78},
+{'l', 0x4198469f, 0x00000000},
+{'l', 0xc1d3dcb1, 0xc235846b},
+{'l', 0x419f72c2, 0x00000000},
+{'l', 0x41a00001, 0x4213dcb1},
+{'l', 0x41a234f6, 0xc213dcb1},
+{'l', 0x419f72c4, 0x00000000},
+{'l', 0xc1d3dcb2, 0x4235846b},
+{'@', 0x000000a6, 0x000054c2},/*        ¦        x-advance: 84.757812 */
+{'M', 0x42053dcb, 0x41fb08d4},
+{'l', 0x00000000, 0xc256e584},
+{'4', 0x00000090, 0x01ad0000},
+{'6', 0x0000ff70, 0xfd900000},
+{'l', 0x00000000, 0xc2569ee6},
+{'l', 0x41908d3e, 0x00000000},
+{'l', 0x00000000, 0x42569ee6},
+{'l', 0xc1908d3e, 0x00000000},
+{'@', 0x000000a7, 0x000054c2},/*        §        x-advance: 84.757812 */
+{'M', 0x422d846a, 0xc2ccd3dd},
+{'q', 0x415611a8, 0x00000000},
+{0, 0x41ab9610, 0x409cb090},
+{'9', 0x00260041, 0x00700050},
+{'l', 0xc183dcb0, 0x3fdcb080},
+{'8', 0xccdadef9, 0xeeafeee1},
+{'8', 0x10a500c3, 0x33e410e4},
+{'8', 0x260e1600, 0x1b290f0e},
+{'q', 0x405cb090, 0x3fb96100},
+{0, 0x4147b960, 0x405cb080},
+{'q', 0x4139611c, 0x4027b960},
+{0, 0x4188d3dc, 0x40ae5850},
+{'8', 0x3843162c, 0x51172117},
+{'8', 0x5be23300, 0x36b227e2},
+{'q', 0x4147b960, 0x40ae5844},
+{0, 0x4147b960, 0x418d3dcb},
+{'q', 0x00000000, 0x4138469e},
+{0, 0xc10b08d0, 0x418d3dcb},
+{'q', 0xc109ee58, 0x40c234f6},
+{0, 0xc1c5846a, 0x40c234f6},
+{'q', 0xc17611a8, 0x00000000},
+{0, 0xc1bdcb09, 0xc098469e},
+{'9', 0xffdaffbe, 0xff88ffa9},
+{'l', 0x4182c235, 0xc0234f70},
+{'8', 0x412c2c0b, 0x14661422},
+{'8', 0xef660043, 0xc222ee22},
+{'8', 0xd5f3e600, 0xe4d7f0f3},
+{'q', 0xc0611a80, 0xbfcb08e0},
+{0, 0xc18234f8, 0xc093dcb0},
+{'q', 0xc1634f72, 0xc05846a0},
+{0, 0xc1a11a7c, 0xc10c2352},
+{'8', 0x98d2d5d2, 0xaa1ecd00},
+{'8', 0xca57dd1e, 0xc6b4eccf},
+{'q', 0xc058469c, 0xc09611b0},
+{0, 0xc058469c, 0xc127b960},
+{'q', 0x00000000, 0xc12469f0},
+{0, 0x41011a7c, 0xc17ee588},
+{'9', 0xffd30041, 0xffd300bc},
+{'m', 0x418611a8, 0x42642350},
+{'q', 0x00000000, 0xc09cb090},
+{0, 0xc08469f0, 0xc0f08d40},
+{'q', 0xc08234f8, 0xc027b960},
+{0, 0xc1800000, 0xc09cb088},
+{'8', 0x54960c96, 0x260e1600},
+{'8', 0x1a2a0e0e, 0x1c660b1b},
+{'q', 0x41572c24, 0xbf308d40},
+{0, 0x41572c24, 0xc11cb08c},
+{'@', 0x000000a8, 0x000054c2},/*        ¨        x-advance: 84.757812 */
+{'M', 0x4244b08d, 0xc2a8234f},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000a9, 0x000054c2},/*        ©        x-advance: 84.757812 */
+{'M', 0x42a51a7c, 0xc251ee58},
+{'q', 0x00000000, 0x417a7b94},
+{0, 0xc09cb090, 0x41d7b961},
+{'q', 0xc09cb090, 0x4133dcb0},
+{0, 0xc1600004, 0x4188d3dc},
+{'q', 0xc111a7b8, 0x40b9611c},
+{0, 0xc1aa7b96, 0x40b9611c},
+{'q', 0xc1434f70, 0xb4800000},
+{0, 0xc1aa7b95, 0xc0bb9612},
+{'q', 0xc1108d3e, 0xc0bdcb08},
+{0, 0xc1600000, 0xc189611a},
+{'q', 0xc09cb08e, 0xc133dcb4},
+{0, 0xc09cb08e, 0xc1d69ee6},
+{'q', 0x34800000, 0xc1796118},
+{0, 0x409cb08e, 0xc1d69ee4},
+{'q', 0x409cb08c, 0xc133dcb8},
+{0, 0x41600000, 0xc188d3e0},
+{'q', 0x4112c234, 0xc0bdcb00},
+{0, 0x41aa7b95, 0xc0bdcb00},
+{'q', 0x414234f8, 0x00000000},
+{0, 0x41a9ee5a, 0x40bb9610},
+{'q', 0x4112c234, 0x40bb9610},
+{0, 0x41611a7c, 0x4188d3dc},
+{'9', 0x00590027, 0x00d70027},
+{'m', 0xc10b08d8, 0x00000000},
+{'q', 0x00000000, 0xc19ee584},
+{0, 0xc10469f0, 0xc1f69ee4},
+{'q', 0xc1034f70, 0xc1308d40},
+{0, 0xc1b9ee58, 0xc1308d40},
+{'q', 0xc16d3dca, 0x00000000},
+{0, 0xc1b8d3dc, 0x41308d40},
+{'q', 0xc1034f72, 0x412f72c0},
+{0, 0xc1034f72, 0x41f69ee4},
+{'q', 0x00000000, 0x41a08d3e},
+{0, 0x410469ee, 0x41f8469e},
+{'q', 0x410469ee, 0x412e5847},
+{0, 0x41b8469e, 0x412e5847},
+{'q', 0x416f72c4, 0x00000000},
+{0, 0x41b9ee58, 0xc12e5847},
+{'9', 0xffa90042, 0xff080042},
+{'m', 0xc1f469ee, 0x41ec234f},
+{'q', 0xc139611a, 0x00000000},
+{0, 0xc1900000, 0xc0f9611c},
+{'q', 0xc0cb08d4, 0xc0fb9610},
+{0, 0xc0cb08d4, 0xc1aee584},
+{'q', 0x00000000, 0xc15ee588},
+{0, 0x40c469f0, 0xc1acb08c},
+{'q', 0x40c469ec, 0xc0f4f730},
+{0, 0x418dcb09, 0xc0f4f730},
+{'9', 0x00000077, 0x007300a7},
+{'l', 0xc118469c, 0x403dcb00},
+{'8', 0xbaa7bae5, 0x2ab000cc},
+{'q', 0xc05cb098, 0x40a7b968},
+{0, 0xc05cb098, 0x4174f730},
+{'q', 0x00000000, 0x411cb08c},
+{0, 0x4069ee58, 0x41772c24},
+{'8', 0x2d512d1d, 0xac5e003e},
+{'l', 0x410e5848, 0x40396120},
+{'8', 0x60c13eec, 0x219a21d6},
+{'@', 0x000000aa, 0x000054c2},/*        ª        x-advance: 84.757812 */
+{'M', 0x41f5846a, 0xc231611a},
+{'8', 0xdf9e00c3, 0xa2dddfdd},
+{'q', 0x00000000, 0xc1000000},
+{0, 0x40b4f72c, 0xc14469f0},
+{'9', 0xffde002d, 0xffdd0086},
+{'4', 0xffff005d, 0xffe60000},
+{'8', 0xb5bfb500, 0x0ece00df},
+{'9', 0x000efff0, 0x002cffec},
+{'l', 0xc171a7b9, 0xbf423480},
+{'q', 0x3fb08d38, 0xc0f4f730},
+{0, 0x40f4f72a, 0xc13dcb10},
+{'q', 0x40c8d3e0, 0xc0869ee0},
+{0, 0x4181a7b9, 0xc0869ee0},
+{'q', 0x412c2350, 0x00000000},
+{0, 0x418611a8, 0x409846a0},
+{'9', 0x00250030, 0x006e0030},
+{'l', 0x00000000, 0x41969ee6},
+{'8', 0x2d051e00, 0x0f1b0f06},
+{'4', 0xfffe001e, 0x00440000},
+{'8', 0x0bb50bdc, 0xe9ba00d4},
+{'9', 0xffe9ffe7, 0xffc3ffe3},
+{'l', 0xbe53dd00, 0x00000000},
+{'9', 0x0056ffd3, 0x0056ff73},
+{'m', 0x40b4f728, 0xc1269ee8},
+{'8', 0xe3420026, 0xb81be21b},
+{'4', 0xffef0000, 0x0001ffc6},
+{'8', 0x11b501c9, 0x2eed0eed},
+{'q', 0x00000000, 0x40d611a8},
+{0, 0x40ee5844, 0x40d611a8},
+{'@', 0x000000ab, 0x000054c2},/*        «        x-advance: 84.757812 */
+{'M', 0x426c69ee, 0xc11b9612},
+{'l', 0xc18d3dca, 0xc1c72c23},
+{'l', 0x00000000, 0xc09cb090},
+{'l', 0x418d3dca, 0xc1ca7b94},
+{'l', 0x41834f74, 0x00000000},
+{'l', 0x00000000, 0x40234f60},
+{'l', 0xc18c2350, 0x41c9ee5a},
+{'4', 0x00c7008d, 0x00130000},
+{'6', 0x0000ff7c, 0x0000feff},
+{'l', 0xc18e5848, 0xc1c72c23},
+{'l', 0x35800000, 0xc09cb090},
+{'l', 0x418e5846, 0xc1ca7b94},
+{'l', 0x418234f8, 0x00000000},
+{'l', 0x00000000, 0x40234f60},
+{'l', 0xc18c234f, 0x41c9ee5a},
+{'l', 0x418d3dcb, 0x41c72c22},
+{'l', 0x00000000, 0x401a7b98},
+{'l', 0xc1834f73, 0x00000000},
+{'@', 0x000000ac, 0x000054c2},/*        ¬        x-advance: 84.757812 */
+{'M', 0x4274b08d, 0xc11b9612},
+{'l', 0x00000000, 0xc1ec234f},
+{'l', 0xc25d846a, 0x00000000},
+{'l', 0x35800000, 0xc1772c24},
+{'l', 0x428da7b9, 0x00000000},
+{'l', 0x00000000, 0x4233dcb0},
+{'l', 0xc1772c24, 0x36000000},
+{'@', 0x000000ad, 0x000054c2},/*        ­        x-advance: 84.757812 */
+{'M', 0x41b2c235, 0xc1e1a7b9},
+{'l', 0x00000000, 0xc1869ee5},
+{'l', 0x42200000, 0x00000000},
+{'l', 0x00000000, 0x41869ee5},
+{'l', 0xc2200000, 0x00000000},
+{'@', 0x000000ae, 0x000054c2},/*        ®        x-advance: 84.757812 */
+{'M', 0x42a51a7c, 0xc251ee58},
+{'q', 0x00000000, 0x417a7b94},
+{0, 0xc09cb090, 0x41d7b961},
+{'q', 0xc09cb090, 0x4133dcb0},
+{0, 0xc1600004, 0x4188d3dc},
+{'q', 0xc111a7b8, 0x40b9611c},
+{0, 0xc1aa7b96, 0x40b9611c},
+{'q', 0xc1434f70, 0xb4800000},
+{0, 0xc1aa7b95, 0xc0bb9612},
+{'q', 0xc1108d3e, 0xc0bdcb08},
+{0, 0xc1600000, 0xc189611a},
+{'q', 0xc09cb08e, 0xc133dcb4},
+{0, 0xc09cb08e, 0xc1d69ee6},
+{'q', 0x34800000, 0xc1796118},
+{0, 0x409cb08e, 0xc1d69ee4},
+{'q', 0x409cb08c, 0xc133dcb8},
+{0, 0x41600000, 0xc188d3e0},
+{'q', 0x4112c234, 0xc0bdcb00},
+{0, 0x41aa7b95, 0xc0bdcb00},
+{'q', 0x414234f8, 0x00000000},
+{0, 0x41a9ee5a, 0x40bb9610},
+{'q', 0x4112c234, 0x40bb9610},
+{0, 0x41611a7c, 0x4188d3dc},
+{'9', 0x00590027, 0x00d70027},
+{'m', 0xc10b08d8, 0x00000000},
+{'q', 0x00000000, 0xc19ee584},
+{0, 0xc10469f0, 0xc1f69ee4},
+{'q', 0xc1034f70, 0xc1308d40},
+{0, 0xc1b9ee58, 0xc1308d40},
+{'q', 0xc16d3dca, 0x00000000},
+{0, 0xc1b8d3dc, 0x41308d40},
+{'q', 0xc1034f72, 0x412f72c0},
+{0, 0xc1034f72, 0x41f69ee4},
+{'q', 0x00000000, 0x41a08d3e},
+{0, 0x410469ee, 0x41f8469e},
+{'q', 0x410469ee, 0x412e5847},
+{0, 0x41b8469e, 0x412e5847},
+{'q', 0x416f72c4, 0x00000000},
+{0, 0x41b9ee58, 0xc12e5847},
+{'9', 0xffa90042, 0xff080042},
+{'m', 0xc19b9612, 0x41e69ee5},
+{'l', 0xc151a7b8, 0xc1b58469},
+{'l', 0xc1000000, 0x00000000},
+{'l', 0x00000000, 0x41b58469},
+{'4', 0x0000ffad, 0xfe360000},
+{'l', 0x41a9611b, 0x00000000},
+{'q', 0x411cb08c, 0x00000000},
+{0, 0x416f72c0, 0x408b08d0},
+{'8', 0x60292229, 0x5ce43800},
+{'9', 0x0023ffe5, 0x002effb6},
+{'4', 0x00bd0078, 0x0000ffa0},
+{'m', 0xbf0d3dc0, 0xc2234f72},
+{'9', 0xffba0000, 0xffbaff9f},
+{'4', 0x0000ffbd, 0x009a0000},
+{'l', 0x4113dcb0, 0x00000000},
+{'8', 0xeb43002c, 0xc217eb17},
+{'@', 0x000000af, 0x000054c2},/*        ¯        x-advance: 84.757812 */
+{'M', 0xbeb08d3e, 0xc2c8469f},
+{'l', 0x00000000, 0xc0d3dcb0},
+{'l', 0x42aac235, 0x00000000},
+{'l', 0x00000000, 0x40d3dcb0},
+{'l', 0xc2aac235, 0x00000000},
+{'@', 0x000000b0, 0x000054c2},/*        °        x-advance: 84.757812 */
+{'M', 0x4280f72c, 0xc2991a7c},
+{'q', 0x00000000, 0x410f72c8},
+{0, 0xc0cf72c0, 0x417611ac},
+{'q', 0xc0cd3dc8, 0x40cb08d0},
+{0, 0xc17a7b98, 0x40cb08d0},
+{'q', 0xc111a7b8, 0x00000000},
+{0, 0xc1796118, 0xc0c8d3d8},
+{'q', 0xc0cf72c4, 0xc0c8d3e0},
+{0, 0xc0cf72c4, 0xc1772c28},
+{'8', 0xa917d100, 0xc240d817},
+{'q', 0x40a34f78, 0xc0396120},
+{0, 0x4132c234, 0xc0396120},
+{'q', 0x4114f72c, 0x00000000},
+{0, 0x417b9614, 0x40cd3dd0},
+{'9', 0x00320033, 0x007a0033},
+{'m', 0xc12e5844, 0x00000000},
+{'8', 0xbfe7da00, 0xe6c0e6e7},
+{'8', 0x1bbf00d9, 0x40e71ae7},
+{'8', 0x411b2600, 0x1b401b1b},
+{'8', 0xe53f0024, 0xbf1ae51a},
+{'@', 0x000000b1, 0x000054c2},/*        ±        x-advance: 84.757812 */
+{'M', 0x4248469f, 0xc24308d4},
+{'l', 0x00000000, 0x41bc2350},
+{'l', 0xc1772c24, 0x00000000},
+{'l', 0x00000000, 0xc1bc2350},
+{'l', 0xc1dd3dcb, 0x00000000},
+{'l', 0x00000000, 0xc17611a8},
+{'l', 0x41dd3dcb, 0x00000000},
+{'l', 0x00000000, 0xc1bb9610},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x41bb9610},
+{'4', 0x000000dd, 0x007b0000},
+{'6', 0x0000ff23, 0x0186fea8},
+{'l', 0xb6000000, 0xc17611a8},
+{'l', 0x428da7ba, 0x00000000},
+{'l', 0x00000000, 0x417611a8},
+{'l', 0xc28da7ba, 0x00000000},
+{'@', 0x000000b2, 0x000054c2},/*        ²        x-advance: 84.757812 */
+{'M', 0x4198d3dd, 0xc21b4f73},
+{'l', 0x00000000, 0xc11cb08c},
+{'q', 0x408b08d4, 0xc1172c24},
+{0, 0x4192c235, 0xc191a7b8},
+{'8', 0xc74bdf34, 0xce16e816},
+{'8', 0xc5ccc500, 0x3fc300ca},
+{'l', 0xc17b9612, 0xbed3dd00},
+{'q', 0x3f8469f0, 0xc10234f8},
+{0, 0x40e7b960, 0xc14f72c0},
+{'q', 0x40c8d3dc, 0xc09a7b90},
+{0, 0x41811a7b, 0xc09a7b90},
+{'q', 0x412c2350, 0x00000000},
+{0, 0x4185846a, 0x408f72c0},
+{'q', 0x40bdcb10, 0x408f72c0},
+{0, 0x40bdcb10, 0x4148d3d8},
+{'q', 0x00000000, 0x412234f8},
+{0, 0xc1469ee8, 0x41908d40},
+{'8', 0x41a12eb7, 0x26e111ea},
+{'l', 0x41ea7b94, 0x00000000},
+{'l', 0x00000000, 0x4132c234},
+{'l', 0xc23e5846, 0x00000000},
+{'@', 0x000000b3, 0x000054c2},/*        ³        x-advance: 84.757812 */
+{'M', 0x4284b08d, 0xc25c69ee},
+{'q', 0x00000000, 0x41000000},
+{0, 0xc0c234f0, 0x4148d3dc},
+{'q', 0xc0c234f8, 0x4091a7b8},
+{0, 0xc189ee5a, 0x4091a7b8},
+{'9', 0x0000ff4c, 0xff7aff3a},
+{'l', 0x4174f72e, 0xbf8469e0},
+{'8', 0x3c493c06, 0xc2420042},
+{'9', 0xffc50000, 0xffc5ffa7},
+{'4', 0x0000ffdc, 0xffaf0000},
+{'l', 0x408469f0, 0x00000000},
+{'8', 0xf13d0029, 0xd614f114},
+{'8', 0xd9f2e700, 0xf2d5f2f2},
+{'8', 0x0ed400e5, 0x2bed0ef0},
+{'l', 0xc1708d3c, 0xbf772c00},
+{'q', 0x3f8469f0, 0xc0f96120},
+{0, 0x40e7b960, 0xc14234f8},
+{'q', 0x40c8d3e0, 0xc08d3dd0},
+{0, 0x41811a7c, 0xc08d3dd0},
+{'q', 0x41234f70, 0x00000000},
+{0, 0x41808d3e, 0x40869ee0},
+{'8', 0x582f212f, 0x46e92900},
+{'9', 0x001dffe9, 0x0027ffb5},
+{'l', 0x00000000, 0x3e0d3e00},
+{'8', 0x22510634, 0x4b1d1c1d},
+{'@', 0x000000b4, 0x000054c2},/*        ´        x-advance: 84.757812 */
+{'M', 0x41ca7b96, 0xc2a34f73},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9612, 0x417ee580},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000b5, 0x000054c2},/*        µ        x-advance: 84.757812 */
+{'M', 0x426611a8, 0x00000000},
+{'8', 0xeefefa00, 0xe6fef4ff},
+{'8', 0xe3fef2ff, 0xe600f200},
+{'l', 0xbe53dd00, 0x00000000},
+{'q', 0xc0ac2350, 0x41611a7c},
+{0, 0xc187b960, 0x41611a7c},
+{'8', 0xf3cc00e4, 0xdcdcf3e9},
+{'l', 0xbe8d3dc0, 0x00000000},
+{'9', 0x00170002, 0x003f0002},
+{'l', 0x00000000, 0x41ccb08e},
+{'l', 0xc19b08d4, 0x00000000},
+{'4', 0xfcc60000, 0x0000009b},
+{'l', 0xb6000000, 0x4226e584},
+{'q', 0x00000000, 0x419cb08e},
+{0, 0x414b08d6, 0x419cb08e},
+{'q', 0x40d611a0, 0x00000000},
+{0, 0x412e5844, 0xc0b72c24},
+{'9', 0xffd20021, 0xff830021},
+{'4', 0xfec20000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'q', 0x00000000, 0x410f72c2},
+{0, 0x3f0d3e00, 0x4185846a},
+{'l', 0xc193dcb0, 0x00000000},
+{'@', 0x000000b6, 0x000054c2},/*        ¶        x-advance: 84.757812 */
+{'M', 0x4287b961, 0xc2a65847},
+{'l', 0x00000000, 0x42d308d4},
+{'l', 0xc12c2350, 0x36000000},
+{'l', 0x00000000, 0xc2d308d4},
+{'l', 0xc1572c24, 0x00000000},
+{'4', 0x034c0000, 0x0000ffab},
+{'l', 0x00000000, 0xc284234f},
+{'q', 0xc13a7b98, 0x00000000},
+{0, 0xc192c236, 0xc0cb08d8},
+{'q', 0xc0d611a7, 0xc0cd3dc8},
+{0, 0xc0d611a7, 0xc1911a7a},
+{'q', 0x00000000, 0xc13a7b98},
+{0, 0x40d8469f, 0xc191a7bc},
+{'9', 0xffcc0036, 0xffcc0096},
+{'l', 0x422d846a, 0x00000000},
+{'l', 0x00000000, 0x411dcb08},
+{'l', 0xc1108d40, 0x00000000},
+{'@', 0x000000b7, 0x000054c2},/*        ·        x-advance: 84.757812 */
+{'M', 0x4201a7b9, 0xc1e611a8},
+{'l', 0x00000000, 0xc1a8469e},
+{'l', 0x419ee586, 0x00000000},
+{'l', 0x00000000, 0x41a8469e},
+{'l', 0xc19ee586, 0x00000000},
+{'@', 0x000000b8, 0x000054c2},/*        ¸        x-advance: 84.757812 */
+{'M', 0x42080000, 0x418cb08d},
+{'q', 0x00000000, 0x40cf72c4},
+{0, 0xc0ac2350, 0x411cb08e},
+{'q', 0xc0ac2350, 0x4053dcb0},
+{0, 0xc178469f, 0x4053dcb0},
+{'9', 0x0000ffe8, 0xfffdffc9},
+{'l', 0x00000000, 0xc10234f6},
+{'8', 0x032e0313, 0xda4b004b},
+{'8', 0xe4f1ed00, 0xf7cdf7f1},
+{'9', 0x0000ffec, 0x0001ffe4},
+{'4', 0xff970026, 0x0000004e},
+{'l', 0xc0308d40, 0x40e11a7c},
+{'8', 0x194c0233, 0x3b191619},
+{'@', 0x000000b9, 0x000054c2},/*        ¹        x-advance: 84.757812 */
+{'M', 0x4197b961, 0xc21b4f73},
+{'4', 0xffb20000, 0x00000082},
+{'l', 0x00000000, 0xc21234f8},
+{'8', 0x2ccc19f4, 0x12b512d9},
+{'l', 0x00000000, 0xc129ee58},
+{'8', 0xec4d0027, 0xca37ec26},
+{'l', 0x41611a7c, 0x00000000},
+{'l', 0x00000000, 0x42427b96},
+{'l', 0x4172c238, 0x00000000},
+{'l', 0x00000000, 0x411cb08c},
+{'l', 0xc238d3de, 0x00000000},
+{'@', 0x000000ba, 0x000054c2},/*        º        x-advance: 84.757812 */
+{'M', 0x428a5847, 0xc28fdcb1},
+{'q', 0x00000000, 0x414d3dd0},
+{0, 0xc0e7b968, 0x41a1a7bc},
+{'q', 0xc0e58468, 0x40ec2350},
+{0, 0xc19ee584, 0x40ec2350},
+{'q', 0xc145846a, 0x00000000},
+{0, 0xc19b08d4, 0xc0ec2350},
+{'q', 0xc0e11a7c, 0xc0ee5848},
+{0, 0xc0e11a7c, 0xc1a1a7bc},
+{'q', 0x00000000, 0xc14e5840},
+{0, 0x40e11a7c, 0xc1a11a78},
+{'q', 0x40e34f74, 0xc0e9ee60},
+{0, 0x419dcb08, 0xc0e9ee60},
+{'q', 0x414d3dcc, 0x00000000},
+{0, 0x419e5848, 0x40e34f70},
+{'9', 0x00380037, 0x00a20037},
+{'m', 0xc17dcb0c, 0x00000000},
+{'8', 0x9fedbe00, 0xe1bee1ed},
+{'8', 0x20bc00d2, 0x61ec1fec},
+{'q', 0x00000000, 0x4183dcb2},
+{0, 0x4129ee58, 0x4183dcb2},
+{'8', 0xe0440030, 0x9d15e015},
+{'@', 0x000000bb, 0x000054c2},/*        »        x-advance: 84.757812 */
+{'M', 0x4111a7b9, 0xc11b9612},
+{'l', 0x00000000, 0xc01a7b94},
+{'l', 0x418d3dcc, 0xc1c72c22},
+{'l', 0xc18c2350, 0xc1c9ee5a},
+{'l', 0x35800000, 0xc0234f60},
+{'l', 0x41834f72, 0x00000000},
+{'l', 0x418d3dcc, 0x41ca7b94},
+{'4', 0x00270000, 0x00c7ff73},
+{'6', 0x0000ff7c, 0x00000102},
+{'l', 0x36800000, 0xc01a7b94},
+{'l', 0x418d3dca, 0xc1c72c22},
+{'l', 0xc18c234e, 0xc1c9ee5a},
+{'l', 0x00000000, 0xc0234f60},
+{'l', 0x418234f6, 0x00000000},
+{'l', 0x418e5848, 0x41ca7b94},
+{'l', 0x00000000, 0x409cb090},
+{'l', 0xc18e5848, 0x41c72c23},
+{'l', 0xc1834f72, 0x00000000},
+{'@', 0x000000bc, 0x000054c2},/*        ¼        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc29fdcb1},
+{'8', 0x23d314f6, 0x0ebf0ede},
+{'l', 0xb4d40000, 0xc13611a8},
+{'8', 0xee430020, 0xd331ee23},
+{'l', 0x4147b962, 0x00000000},
+{'4', 0x01a30000, 0x0000ff97},
+{'6', 0xfec60000, 0x027f0039},
+{'l', 0xc132c236, 0x00000000},
+{'4', 0xfd180197, 0x00000058},
+{'6', 0x02e8fe6a, 0xffa701b9},
+{'l', 0x00000000, 0x41308d3e},
+{'l', 0xc152c234, 0xb4300000},
+{'l', 0x00000000, 0xc1308d3e},
+{'l', 0xc1bc2350, 0x00000000},
+{'l', 0x00000000, 0xc12469ef},
+{'l', 0x41b11a7c, 0xc1f9611a},
+{'l', 0x4168d3dc, 0x00000000},
+{'l', 0x00000000, 0x41f8469f},
+{'4', 0x0000002d, 0x00530000},
+{'6', 0x0000ffd3, 0xff0cff9a},
+{'8', 0x40dc29ea, 0x61c017f3},
+{'4', 0x00000061, 0xff930000},
+{'q', 0x00000000, 0xc0658470},
+{0, 0x3ed3dd00, 0xc0d1a7b8},
+{'@', 0x000000bd, 0x000054c2},/*        ½        x-advance: 84.757812 */
+{'M', 0x41600000, 0xc29fdcb1},
+{'8', 0x23d314f6, 0x0ebf0ede},
+{'l', 0x34300000, 0xc13611a8},
+{'8', 0xee43001f, 0xd331ee23},
+{'l', 0x4147b960, 0x00000000},
+{'4', 0x01a30000, 0x0000ff97},
+{'6', 0xfec60000, 0x027f0030},
+{'l', 0xc132c235, 0x00000000},
+{'4', 0xfd180197, 0x00000058},
+{'6', 0x02e8fe6a, 0x000000ca},
+{'l', 0x00000000, 0xc11dcb08},
+{'8', 0xb930d911, 0xc54be01e},
+{'8', 0xd13ce62b, 0xd211ec11},
+{'8', 0xced5ce00, 0x06e400ef},
+{'8', 0x12f006f6, 0x28f70bfa},
+{'l', 0xc1469ee8, 0xbf308d40},
+{'q', 0x400d3dd0, 0xc1834f72},
+{0, 0x419b9610, 0xc1834f72},
+{'8', 0x1f6c0048, 0x57241f24},
+{'8', 0x3af42100, 0x2ce018f4},
+{'8', 0x21d512ed, 0x1cd30ee9},
+{'8', 0x1bd90dea, 0x1ee80def},
+{'l', 0x41c11a7c, 0x00000000},
+{'l', 0x00000000, 0x4128d3dc},
+{'l', 0xc215846a, 0x34d40000},
+{'@', 0x000000be, 0x000054c2},/*        ¾        x-advance: 84.757812 */
+{'M', 0x422308d4, 0xc25ac235},
+{'q', 0x00000000, 0x40e7b960},
+{0, 0xc0a7b960, 0x413611a8},
+{'q', 0xc0a7b964, 0x408234f8},
+{0, 0xc167b962, 0x408234f8},
+{'8', 0xe39300ba, 0x9ecce3d9},
+{'l', 0x416234f8, 0xbfe58460},
+{'8', 0x310f2004, 0x1123110b},
+{'8', 0xc72d002d, 0xd7eee400},
+{'9', 0xfff3ffef, 0xfff3ffc7},
+{'4', 0x0000ffea, 0xffb80000},
+{'l', 0x40234f70, 0x00000000},
+{'8', 0xf3340025, 0xd40ef30e},
+{'8', 0xdcf8e800, 0xf5e5f5f8},
+{'8', 0x0fdf00e8, 0x2df40ff7},
+{'l', 0xc15611a8, 0xbf53dd00},
+{'8', 0xa22ec208, 0xe16de125},
+{'8', 0x1e690044, 0x51241d24},
+{'8', 0x3bee2400, 0x24c816ee},
+{'l', 0x00000000, 0x3ed3dd00},
+{'8', 0x2541092d, 0x40141b14},
+{'m', 0xc1669ee6, 0x425ac235},
+{'l', 0xc132c235, 0x00000000},
+{'4', 0xfd180197, 0x00000058},
+{'6', 0x02e8fe6a, 0xffa701a5},
+{'l', 0x00000000, 0x41308d3e},
+{'l', 0xc152c238, 0xb4300000},
+{'l', 0x00000000, 0xc1308d3e},
+{'l', 0xc1bc2350, 0x00000000},
+{'l', 0x00000000, 0xc12469ef},
+{'l', 0x41b11a7c, 0xc1f9611a},
+{'l', 0x4168d3e0, 0x00000000},
+{'l', 0x00000000, 0x41f8469f},
+{'4', 0x0000002d, 0x00530000},
+{'6', 0x0000ffd3, 0xff0cff9a},
+{'8', 0x40dc29ea, 0x61c017f3},
+{'4', 0x00000061, 0xff930000},
+{'q', 0x00000000, 0xc0658470},
+{0, 0x3ed3dd00, 0xc0d1a7b8},
+{'@', 0x000000bf, 0x000054c2},/*        ¿        x-advance: 84.757812 */
+{'M', 0x4108d3dd, 0xc0d3dcb0},
+{'8', 0xbf0cdd00, 0xc923e30c},
+{'8', 0xa96ce617, 0x914bcc48},
+{'l', 0x41934f72, 0x00000000},
+{'8', 0x64e038fd, 0x52ad2ce4},
+{'8', 0x46ac2ac2, 0x3bea1bea},
+{'8', 0x44212a00, 0x19581921},
+{'8', 0xe05d0037, 0xaa2ce026},
+{'l', 0x419d3dca, 0x3f53dcc0},
+{'q', 0xbff72c00, 0x41611a7c},
+{0, 0xc1396118, 0x41aee584},
+{'q', 0xc11a7b98, 0x40f72c24},
+{0, 0xc1c8469e, 0x40f72c24},
+{'q', 0xc1800001, 0x00000000},
+{0, 0xc1cc2350, 0xc0e58468},
+{'9', 0xffc7ffb4, 0xff66ffb4},
+{'m', 0x423fb961, 0xc2880000},
+{'l', 0x00000000, 0x4194f72c},
+{'l', 0xc19f72c2, 0x00000000},
+{'l', 0x00000000, 0xc194f72c},
+{'l', 0x419f72c2, 0x00000000},
+{'@', 0x000000c0, 0x000054c2},/*        À        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0xbfb96100, 0xc18f72c4},
+{'l', 0xc1bb9613, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb00},
+{'l', 0x418e5847, 0x00000000},
+{'l', 0x418b08d4, 0x418611a4},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000c1, 0x000054c2},/*        Á        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0xc12b08d2, 0xc1900000},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d3, 0xc18611a8},
+{'l', 0x418e5848, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9612, 0x417ee588},
+{'l', 0xc13b9612, 0x00000000},
+{'@', 0x000000c2, 0x000054c2},/*        Â        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0x41cb08d6, 0xc19ee584},
+{'l', 0x00000000, 0x3ff72c00},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c00},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000c3, 0x000054c2},/*        Ã        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0x41372c24, 0xc18cb08c},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c23, 0x00000000},
+{'q', 0x3f53dcb0, 0xc12c2350},
+{0, 0x4093dcb2, 0xc171a7c0},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f72c, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000c4, 0x000054c2},/*        Ä        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0x40d846a0, 0xc199611c},
+{'l', 0x00000000, 0xc171a7b8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7b8},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000c5, 0x000054c2},/*        Ã…        x-advance: 84.757812 */
+{'M', 0x42a9846a, 0x00000000},
+{'l', 0xc1a234f8, 0x00000000},
+{'l', 0xc0cb08d0, 0xc1b611a8},
+{'l', 0xc1fb9612, 0x00000000},
+{'l', 0xc0cb08d4, 0x41b611a8},
+{'l', 0xc1a2c235, 0x00000000},
+{'4', 0xfd1800f4, 0x000000bd},
+{'6', 0x02e800f3, 0xfd7dfeae},
+{'q', 0xbf0d3dc0, 0x40396120},
+{0, 0xc00469f0, 0x410b08d0},
+{'9', 0x002dfff5, 0x010dffb5},
+{'l', 0x41b72c23, 0x00000000},
+{'q', 0xc1011a7c, 0xc1e34f72},
+{0, 0xc11846a0, 0xc207ffff},
+{'9', 0xffd4fff5, 0xffbdfff1},
+{'m', 0x41869ee6, 0xc1ac2350},
+{'8', 0x4fdc3000, 0x1e9f1edd},
+{'8', 0xe29f00c3, 0xb1dde1dd},
+{'8', 0xb124cf00, 0xe261e224},
+{'8', 0x1e61003d, 0x4e241e24},
+{'m', 0xc119611c, 0x00000000},
+{'8', 0xe4f1ef00, 0xf5d7f5f1},
+{'8', 0x0ad700e7, 0x1cf00af0},
+{'8', 0x1c101200, 0x0a290a10},
+{'8', 0xf6280019, 0xe410f510},
+{'@', 0x000000c6, 0x000054c2},/*        Æ        x-advance: 84.757812 */
+{'M', 0x4229ee58, 0xc1d5846a},
+{'l', 0xc18b9611, 0x00000000},
+{'l', 0xc0e11a7c, 0x41d5846a},
+{'l', 0xc1900000, 0x00000000},
+{'l', 0x41cd3dcb, 0xc2ba11a8},
+{'l', 0x425dcb08, 0x00000000},
+{'l', 0x00000000, 0x415ee588},
+{'l', 0xc1aa7b96, 0x00000000},
+{'l', 0x00000000, 0x41c3dcb0},
+{'l', 0x41a3dcb2, 0x00000000},
+{'l', 0x00000000, 0x415cb08c},
+{'l', 0xc1a3dcb2, 0x00000000},
+{'l', 0x00000000, 0x41d72c24},
+{'l', 0x41c00002, 0x00000000},
+{'4', 0x006f0000, 0x0000feb6},
+{'6', 0xff2b0000, 0xfe5a0000},
+{'l', 0xc0800000, 0x00000000},
+{'l', 0xc04b08d0, 0x415cb088},
+{'l', 0xc0d846a0, 0x41c9ee5a},
+{'l', 0x415ee584, 0x00000000},
+{'l', 0x00000000, 0xc21c234f},
+{'@', 0x000000c7, 0x000054c2},/*        Ç        x-advance: 84.757812 */
+{'M', 0x41d1a7b9, 0xc23bdcb1},
+{'q', 0x00000000, 0x417846a0},
+{0, 0x409a7b98, 0x41bf72c3},
+{'q', 0x409a7b94, 0x41069ee6},
+{0, 0x41669ee6, 0x41069ee6},
+{'9', 0x00000059, 0xff7a0084},
+{'l', 0x41969ee4, 0x40658470},
+{'q', 0xc112c230, 0x41e9ee58},
+{0, 0xc20e5846, 0x41e9ee58},
+{'q', 0xc19b08d4, 0xb4800000},
+{0, 0xc1ecb08d, 0xc14469ef},
+{'q', 0xc12234f7, 0xc1458469},
+{0, 0xc12234f7, 0xc210469f},
+{'q', 0x00000000, 0xc23e11a7},
+{0, 0x421cb08d, 0xc23e11a7},
+{'q', 0x414d3dcc, 0x00000000},
+{0, 0x41ab9612, 0x40d846a0},
+{'9', 0x00360045, 0x00a00066},
+{'l', 0xc19611a8, 0x4091a7c0},
+{'8', 0xa6d0c6f0, 0xe0b7e0e0},
+{'9', 0x0000ff6a, 0x00fcff6a},
+{'m', 0x4200d3dc, 0x42811a7c},
+{'q', 0x36800000, 0x40cf72c0},
+{0, 0xc0ac2348, 0x411cb08c},
+{'q', 0xc0ac2350, 0x4053dcb0},
+{0, 0xc178469c, 0x4053dcb0},
+{'9', 0x0000ffe8, 0xfffdffc9},
+{'l', 0x00000000, 0xc10234f6},
+{'8', 0x032e0313, 0xda4b004b},
+{'8', 0xe4f1ed00, 0xf7cdf7f1},
+{'9', 0x0000ffec, 0x0001ffe4},
+{'4', 0xff970026, 0x0000004e},
+{'l', 0xc0308d40, 0x40e11a7c},
+{'8', 0x194c0233, 0x3b191619},
+{'@', 0x000000c8, 0x000054c2},/*        È        x-advance: 84.757812 */
+{'M', 0x41172c23, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4285846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc239a7b8, 0x00000000},
+{'l', 0xb6000000, 0x41b2c234},
+{'l', 0x4228d3dc, 0x00000000},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc228d3dc, 0x00000000},
+{'l', 0xb6000000, 0x41bc234f},
+{'4', 0x00000189, 0x007d0000},
+{'6', 0x0000fdd4, 0xfced0108},
+{'l', 0xc1bb9611, 0xc17ee588},
+{'l', 0x00000000, 0xc03dcb00},
+{'l', 0x418e5847, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000c9, 0x000054c2},/*        É        x-advance: 84.757812 */
+{'M', 0x41172c23, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4285846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc239a7b8, 0x00000000},
+{'l', 0xb6000000, 0x41b2c234},
+{'l', 0x4228d3dc, 0x00000000},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc228d3dc, 0x00000000},
+{'l', 0xb6000000, 0x41bc234f},
+{'4', 0x00000189, 0x007d0000},
+{'6', 0x0000fdd4, 0xfced00b1},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d5, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9612, 0x417ee588},
+{'l', 0xc13b9612, 0x00000000},
+{'@', 0x000000ca, 0x000054c2},/*        Ê        x-advance: 84.757812 */
+{'M', 0x41172c23, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4285846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc239a7b8, 0x00000000},
+{'l', 0xb6000000, 0x41b2c234},
+{'l', 0x4228d3dc, 0x00000000},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc228d3dc, 0x00000000},
+{'l', 0xb6000000, 0x41bc234f},
+{'4', 0x00000189, 0x007d0000},
+{'6', 0x0000fdd4, 0xfcde01d2},
+{'l', 0x00000000, 0x3ff72c00},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c00},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000cb, 0x000054c2},/*        Ë        x-advance: 84.757812 */
+{'M', 0x41172c23, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4285846a, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc239a7b8, 0x00000000},
+{'l', 0xb6000000, 0x41b2c234},
+{'l', 0x4228d3dc, 0x00000000},
+{'l', 0x00000000, 0x417b9610},
+{'l', 0xc228d3dc, 0x00000000},
+{'l', 0xb6000000, 0x41bc234f},
+{'4', 0x00000189, 0x007d0000},
+{'6', 0x0000fdd4, 0xfce30148},
+{'l', 0x00000000, 0xc171a7b8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7b8},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000cc, 0x000054c2},/*        Ì        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc2ba11a8},
+{'l', 0x427cb08d, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0x42765846},
+{'l', 0x41ab9612, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27cb08d, 0x00000000},
+{'l', 0xb5800000, 0xc17b9612},
+{'l', 0x41ab9612, 0x00000000},
+{'4', 0xfe140000, 0x0000ff55},
+{'6', 0xff830000, 0xffd500f7},
+{'l', 0xc1bb9611, 0xc17ee588},
+{'l', 0x00000000, 0xc03dcb00},
+{'l', 0x418e5847, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000cd, 0x000054c2},/*        Í        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc2ba11a8},
+{'l', 0x427cb08d, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0x42765846},
+{'l', 0x41ab9612, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27cb08d, 0x00000000},
+{'l', 0xb5800000, 0xc17b9612},
+{'l', 0x41ab9612, 0x00000000},
+{'4', 0xfe140000, 0x0000ff55},
+{'6', 0xff830000, 0xffd500ac},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9610, 0x417ee588},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000ce, 0x000054c2},/*        ÃŽ        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc2ba11a8},
+{'l', 0x427cb08d, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0x42765846},
+{'l', 0x41ab9612, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27cb08d, 0x00000000},
+{'l', 0xb5800000, 0xc17b9612},
+{'l', 0x41ab9612, 0x00000000},
+{'4', 0xfe140000, 0x0000ff55},
+{'6', 0xff830000, 0xffc601c7},
+{'l', 0x00000000, 0x3ff72c00},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c00},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000cf, 0x000054c2},/*        Ï        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc2ba11a8},
+{'l', 0x427cb08d, 0x00000000},
+{'l', 0x00000000, 0x417b9618},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0x42765846},
+{'l', 0x41ab9612, 0xb6000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27cb08d, 0x00000000},
+{'l', 0xb5800000, 0xc17b9612},
+{'l', 0x41ab9612, 0x00000000},
+{'4', 0xfe140000, 0x0000ff55},
+{'6', 0xff830000, 0xffcc0132},
+{'l', 0x00000000, 0xc171a7b8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7b8},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000d0, 0x000054c2},/*        Ð        x-advance: 84.757812 */
+{'M', 0x42a0469f, 0xc23cf72c},
+{'q', 0x00000000, 0x41b611a7},
+{0, 0xc129ee58, 0x420c234f},
+{'9', 0x0061ffac, 0x0061ff0e},
+{'l', 0xc1e8469e, 0x00000000},
+{'l', 0xb5800000, 0xc21b9612},
+{'l', 0xc113dcb1, 0x00000000},
+{'l', 0x34400000, 0xc171a7b8},
+{'4', 0x00000049, 0xfec80000},
+{'l', 0x41c72c22, 0x00000000},
+{'q', 0x41b4f72c, 0x00000000},
+{0, 0x42072c24, 0x413611a8},
+{'9', 0x005a0059, 0x01130059},
+{'m', 0xc1a3dcb2, 0x00000000},
+{'q', 0x00000000, 0xc17a7b98},
+{0, 0xc0bdcb08, 0xc1b69ee4},
+{'9', 0xffc7ffd2, 0xffc7ff69},
+{'l', 0xc0869ee8, 0x00000000},
+{'l', 0x00000000, 0x41ba7b94},
+{'l', 0x416469f0, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'4', 0x0000ff8e, 0x00b90000},
+{'l', 0x40e11a80, 0x00000000},
+{'q', 0x41b08d3c, 0x00000000},
+{0, 0x41b08d3c, 0xc1fc234f},
+{'@', 0x000000d1, 0x000054c2},/*        Ñ        x-advance: 84.757812 */
+{'M', 0x424e5847, 0x00000000},
+{'l', 0xc1d3dcb1, 0xc28b4f73},
+{'9', 0x008b000f, 0x00c3000f},
+{'l', 0x00000000, 0x4234f72c},
+{'l', 0xc18dcb09, 0x00000000},
+{'4', 0xfd180000, 0x000000b9},
+{'l', 0x41d8d3dc, 0x428f08d4},
+{'9', 0xff7ffff1, 0xff37fff1},
+{'l', 0x00000000, 0xc239611b},
+{'4', 0x0000008d, 0x02e80000},
+{'6', 0x0000ff42, 0xfcf00012},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c23, 0x00000000},
+{'q', 0x3f53dcb0, 0xc12c2350},
+{0, 0x4093dcb2, 0xc171a7c0},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f72c, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000d2, 0x000054c2},/*        Ã’        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0xc18dcb08, 0xc24e9ee5},
+{'l', 0xc1bb9612, 0xc17ee588},
+{'l', 0x00000000, 0xc03dcb00},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000d3, 0x000054c2},/*        Ó        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0xc1d8d3dc, 0xc24e9ee5},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9612, 0x417ee588},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000d4, 0x000054c2},/*        Ô        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0x4109ee5c, 0xc25611a7},
+{'l', 0x00000000, 0x3ff72c00},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c00},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000d5, 0x000054c2},/*        Õ        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0xc0a9ee58, 0xc24cf72b},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c23, 0x00000000},
+{'q', 0x3f53dcb0, 0xc12c2350},
+{0, 0x4093dcb2, 0xc171a7c0},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f72c, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000d6, 0x000054c2},/*        Ö        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'q', 0xc1908d3d, 0xb4800000},
+{0, 0xc1de5846, 0xc1434f73},
+{'q', 0xc11a7b96, 0xc1434f73},
+{0, 0xc11a7b96, 0xc2100000},
+{'q', 0x00000000, 0xc1be5846},
+{0, 0x411a7b96, 0xc20ee585},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'q', 0x41908d3e, 0x00000000},
+{0, 0x41ddcb0a, 0x413ee580},
+{'9', 0x005f004d, 0x011d004d},
+{'m', 0xc1a4f72e, 0x00000000},
+{'q', 0x00000000, 0xc1fd3dca},
+{0, 0xc18611a8, 0xc1fd3dca},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'q', 0x00000000, 0x417dcb0a},
+{0, 0x40869ee8, 0x41c08d3e},
+{'8', 0x41644122, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0xc11cb08c, 0xc2534f73},
+{'l', 0x00000000, 0xc171a7b8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7b8},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000d7, 0x000054c2},/*        ×        x-advance: 84.757812 */
+{'M', 0x40e11a7c, 0xc1b3dcb1},
+{'l', 0x41c469ee, 0xc1c58469},
+{'l', 0xc1c234f7, 0xc1c234f6},
+{'l', 0x412e5846, 0xc12c2350},
+{'l', 0x41c234f7, 0x41c11a7a},
+{'l', 0x41c234f8, 0xc1c234f6},
+{'l', 0x412e5848, 0x412e5848},
+{'l', 0xc1c234f8, 0x41c34f72},
+{'l', 0x41c234f8, 0x41c11a7b},
+{'l', 0xc12e5848, 0x41308d3d},
+{'l', 0xc1c234f8, 0xc1c34f74},
+{'l', 0xc1c469ee, 0x41c5846b},
+{'l', 0xc12e5846, 0xc12e5848},
+{'@', 0x000000d8, 0x000054c2},/*        Ø        x-advance: 84.757812 */
+{'M', 0x429f9612, 0xc23b4f73},
+{'q', 0x00000000, 0x41be5847},
+{0, 0xc11a7b98, 0x42100000},
+{'q', 0xc11a7b98, 0x41434f74},
+{0, 0xc1ddcb0a, 0x41434f74},
+{'9', 0x0000ff8a, 0xffbfff40},
+{'4', 0x004effc6, 0xffd7ffc2},
+{'l', 0x41108d3e, 0xc14234f7},
+{'q', 0xc0e7b962, 0xc14234f6},
+{0, 0xc0e7b962, 0xc201ee58},
+{'q', 0x00000000, 0xc1be5848},
+{0, 0x411a7b96, 0xc20ee586},
+{'q', 0x411b9612, 0xc13ee580},
+{0, 0x41de5846, 0xc13ee580},
+{'9', 0x00000074, 0x003f00be},
+{'4', 0xffb2003a, 0x0029003e},
+{'l', 0xc10f72c0, 0x413ee588},
+{'9', 0x0060003b, 0x0103003b},
+{'m', 0xc1a4f72e, 0x00000000},
+{'9', 0xffc40000, 0xff96fff9},
+{'l', 0xc1e11a7c, 0x42169ee6},
+{'8', 0x3e623e22, 0xbf640042},
+{'9', 0xffbf0021, 0xff400021},
+{'m', 0xc2065846, 0x00000000},
+{'9', 0x00410000, 0x006a0007},
+{'l', 0x41e08d3e, 0xc2165846},
+{'q', 0xc08469f0, 0xc0ec2350},
+{0, 0xc1434f74, 0xc0ec2350},
+{'q', 0xc1869ee5, 0x00000000},
+{0, 0xc1869ee5, 0x41fd3dca},
+{'@', 0x000000d9, 0x000054c2},/*        Ù        x-advance: 84.757812 */
+{'M', 0x42253dcb, 0x3fb08d3e},
+{'q', 0xc187b961, 0x00000000},
+{0, 0xc1c5846a, 0xc113dcb1},
+{'9', 0xffb7ffc3, 0xff1cffc3},
+{'4', 0xfe3c0000, 0x000000a2},
+{'l', 0x00000000, 0x4261a7ba},
+{'q', 0x00000000, 0x41411a7c},
+{0, 0x40308d40, 0x4188d3dd},
+{'8', 0x274e2716, 0xd6530039},
+{'9', 0xffd60019, 0xff750019},
+{'4', 0xfe430000, 0x000000a2},
+{'l', 0x00000000, 0x425e5847},
+{'q', 0x00000000, 0x419dcb09},
+{0, 0xc108d3e0, 0x41ea7b96},
+{'9', 0x004cffbd, 0x004cff31},
+{'m', 0xbf1ee580, 0xc2c7b961},
+{'l', 0xc1bb9612, 0xc17ee588},
+{'l', 0x00000000, 0xc03dcb00},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000da, 0x000054c2},/*        Ú        x-advance: 84.757812 */
+{'M', 0x42253dcb, 0x3fb08d3e},
+{'q', 0xc187b961, 0x00000000},
+{0, 0xc1c5846a, 0xc113dcb1},
+{'9', 0xffb7ffc3, 0xff1cffc3},
+{'4', 0xfe3c0000, 0x000000a2},
+{'l', 0x00000000, 0x4261a7ba},
+{'q', 0x00000000, 0x41411a7c},
+{0, 0x40308d40, 0x4188d3dd},
+{'8', 0x274e2716, 0xd6530039},
+{'9', 0xffd60019, 0xff750019},
+{'4', 0xfe430000, 0x000000a2},
+{'l', 0x00000000, 0x425e5847},
+{'q', 0x00000000, 0x419dcb09},
+{0, 0xc108d3e0, 0x41ea7b96},
+{'9', 0x004cffbd, 0x004cff31},
+{'m', 0xc1211a7c, 0xc2c7b961},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5848, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9612, 0x417ee588},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000db, 0x000054c2},/*        Û        x-advance: 84.757812 */
+{'M', 0x42253dcb, 0x3fb08d3e},
+{'q', 0xc187b961, 0x00000000},
+{0, 0xc1c5846a, 0xc113dcb1},
+{'9', 0xffb7ffc3, 0xff1cffc3},
+{'4', 0xfe3c0000, 0x000000a2},
+{'l', 0x00000000, 0x4261a7ba},
+{'q', 0x00000000, 0x41411a7c},
+{0, 0x40308d40, 0x4188d3dd},
+{'8', 0x274e2716, 0xd6530039},
+{'9', 0xffd60019, 0xff750019},
+{'4', 0xfe430000, 0x000000a2},
+{'l', 0x00000000, 0x425e5847},
+{'q', 0x00000000, 0x419dcb09},
+{0, 0xc108d3e0, 0x41ea7b96},
+{'9', 0x004cffbd, 0x004cff31},
+{'m', 0x41d3dcb2, 0xc2cb72c2},
+{'l', 0x00000000, 0x3ff72c00},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c00},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000dc, 0x000054c2},/*        Ü        x-advance: 84.757812 */
+{'M', 0x42253dcb, 0x3fb08d3e},
+{'q', 0xc187b961, 0x00000000},
+{0, 0xc1c5846a, 0xc113dcb1},
+{'9', 0xffb7ffc3, 0xff1cffc3},
+{'4', 0xfe3c0000, 0x000000a2},
+{'l', 0x00000000, 0x4261a7ba},
+{'q', 0x00000000, 0x41411a7c},
+{0, 0x40308d40, 0x4188d3dd},
+{'8', 0x274e2716, 0xd6530039},
+{'9', 0xffd60019, 0xff750019},
+{'4', 0xfe430000, 0x000000a2},
+{'l', 0x00000000, 0x425e5847},
+{'q', 0x00000000, 0x419dcb09},
+{0, 0xc108d3e0, 0x41ea7b96},
+{'9', 0x004cffbd, 0x004cff31},
+{'m', 0x40fb9610, 0xc2ca11a8},
+{'l', 0x00000000, 0xc171a7b8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7b8},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7b8},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000dd, 0x000054c2},/*        Ý        x-advance: 84.757812 */
+{'M', 0x4251ee58, 0xc219611a},
+{'l', 0x00000000, 0x4219611a},
+{'l', 0xc1a234f6, 0x00000000},
+{'l', 0x00000000, 0xc219611a},
+{'l', 0xc2000000, 0xc25ac236},
+{'l', 0x41aa7b95, 0x00000000},
+{'l', 0x41a5846b, 0x421c2350},
+{'4', 0xfec800a7, 0x000000aa},
+{'6', 0x01b5ff00, 0xfe1fff5f},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d2, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb00},
+{'l', 0xc1bb9610, 0x417ee588},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000de, 0x000054c2},/*        Þ        x-advance: 84.757812 */
+{'M', 0x42a0234f, 0xc23f2c23},
+{'q', 0x00000000, 0x410b08d4},
+{0, 0xc08b08d0, 0x41796118},
+{'q', 0xc088d3e0, 0x40dcb090},
+{0, 0xc1458468, 0x412c2350},
+{'9', 0x001effc0, 0x001eff6a},
+{'l', 0xc16d3dca, 0x00000000},
+{'l', 0x00000000, 0x418d3dcb},
+{'l', 0xc1a2c236, 0x00000000},
+{'l', 0x35800000, 0xc2ba11a8},
+{'4', 0x000000a2, 0x00810000},
+{'l', 0x415ffffe, 0x00000000},
+{'q', 0x4189ee58, 0x00000000},
+{0, 0x41d611aa, 0x40f4f720},
+{'9', 0x003c004c, 0x00ab004c},
+{'m', 0xc1a3dcae, 0x3e8d3d80},
+{'8', 0xa9dac900, 0xe097e0da},
+{'4', 0x0000ffa3, 0x00f20000},
+{'l', 0x414469ee, 0x00000000},
+{'8', 0xdf65003f, 0xa626df26},
+{'@', 0x000000df, 0x000054c2},/*        ß        x-advance: 84.757812 */
+{'M', 0x42a27b96, 0xc1ac234f},
+{'q', 0x00000000, 0x4132c234},
+{0, 0xc0dee580, 0x4188469e},
+{'q', 0xc0dcb090, 0x40bb9614},
+{0, 0xc19dcb0a, 0x40bb9614},
+{'9', 0x0000ffb0, 0xffe9ff70},
+{'l', 0x00000000, 0xc1634f72},
+{'8', 0x16400c1b, 0x093f0925},
+{'8', 0xee41002c, 0xce14ed14},
+{'8', 0xccece400, 0xc6b8e8ec},
+{'q', 0xc13a7b98, 0xc0f08d40},
+{0, 0xc13a7b98, 0xc1908d3e},
+{'8', 0xc90ee300, 0xcb2ee70f},
+{'8', 0xcd2fe321, 0xd10dea0d},
+{'8', 0xc7e7dd00, 0xebb7ebe7},
+{'q', 0xc0e34f78, 0x00000000},
+{0, 0xc12d3dcc, 0x408d3dc0},
+{'9', 0x0022ffe3, 0x0070ffe3},
+{'4', 0x022e0000, 0x0000ff65},
+{'l', 0x35800000, 0xc28ae584},
+{'q', 0x00000000, 0xc1811a7c},
+{0, 0x410c234f, 0xc1c3dcb4},
+{'q', 0x410d3dcc, 0xc1069ee0},
+{0, 0x41cb08d5, 0xc1069ee0},
+{'q', 0x41634f70, 0x00000000},
+{0, 0x41b34f72, 0x40c69ee0},
+{'q', 0x41034f70, 0x40c69ee0},
+{0, 0x41034f70, 0x41872c24},
+{'8', 0x35f71d00, 0x29ea17f8},
+{'8', 0x21e212f3, 0x1be30ef0},
+{'8', 0x17e90cf3, 0x16f80bf8},
+{'8', 0x1a0b0d00, 0x40510c0b},
+{'q', 0x41396118, 0x4109ee58},
+{0, 0x41396118, 0x41a8d3dd},
+{'@', 0x000000e0, 0x000054c2},/*        à        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe88ffa1},
+{'l', 0xc1bb9612, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000e1, 0x000054c2},/*        á        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe88ff5a},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5848, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9614, 0x417ee580},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000e2, 0x000054c2},/*        â        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe790078},
+{'l', 0x00000000, 0x3ff72c40},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c40},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000e3, 0x000054c2},/*        ã        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe88000e},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c23, 0x00000000},
+{'q', 0x3f53dcb0, 0xc12c2350},
+{0, 0x4093dcae, 0xc171a7b8},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f728, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000e4, 0x000054c2},/*        ä        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe74ffe5},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c26, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c26, 0x00000000},
+{'@', 0x000000e5, 0x000054c2},/*        å        x-advance: 84.757812 */
+{'M', 0x41f234f7, 0x3fb08d3e},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc1872c23, 0xc0bb9612},
+{'q', 0xc0c234f8, 0xc0bdcb08},
+{0, 0xc0c234f8, 0xc184f72c},
+{'q', 0x00000000, 0xc139611c},
+{0, 0x40e5846a, 0xc18cb08e},
+{'9', 0xffd00039, 0xffce00ac},
+{'4', 0xfffe007b, 0xffe20000},
+{'8', 0xaaedc800, 0xe3c2e3ed},
+{'8', 0x14c500d8, 0x40e913ee},
+{'l', 0xc1a1a7b9, 0xbf772c00},
+{'q', 0x406e5844, 0xc1b11a7c},
+{0, 0x41fb08d4, 0xc1b11a7c},
+{'q', 0x415ee584, 0x00000000},
+{0, 0x41aa7b96, 0x40da7b90},
+{'9', 0x0036003b, 0x00a0003b},
+{'l', 0x00000000, 0x41d8469e},
+{'8', 0x450b3200, 0x1226120b},
+{'9', 0x00000011, 0xfffd0022},
+{'l', 0x00000000, 0x4127b961},
+{'8', 0x06e803f3, 0x04ea02f5},
+{'8', 0x02e901f5, 0x01e401f4},
+{'8', 0xe4aa00c6, 0xacdfe4e5},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x59b13ede, 0x1b971bd4},
+{'m', 0x41a9611b, 0xc20fb961},
+{'l', 0xc113dcb0, 0x3e0d3e00},
+{'8', 0x0ab801cf, 0x1ddf08ea},
+{'8', 0x36f513f5, 0x53425300},
+{'8', 0xd7590035, 0x9523d623},
+{'6', 0xffe20000, 0xfe2d0038},
+{'8', 0x4fdc3000, 0x1e9f1edd},
+{'8', 0xe29f00c3, 0xb1dde1dd},
+{'8', 0xb124cf00, 0xe261e224},
+{'8', 0x1e61003d, 0x4e241e24},
+{'m', 0xc1196118, 0x00000000},
+{'8', 0xe4f1ef00, 0xf5d7f5f1},
+{'8', 0x0ad700e7, 0x1cf00af0},
+{'8', 0x1c101200, 0x0a290a10},
+{'8', 0xf6280019, 0xe410f510},
+{'@', 0x000000e6, 0x000054c2},/*        æ        x-advance: 84.757812 */
+{'M', 0x4240d3dd, 0xc205846a},
+{'l', 0x00000000, 0x3e0d3e00},
+{'q', 0x00000000, 0x412469ee},
+{0, 0x404234f0, 0x418234f7},
+{'8', 0x2f422f18, 0xec320021},
+{'9', 0xffec0011, 0xffc8001a},
+{'l', 0x414469f0, 0x40469ee8},
+{'q', 0xc0234f80, 0x411a7b96},
+{0, 0xc10234f8, 0x4165846a},
+{'8', 0x259425d4, 0xe29c00c1},
+{'8', 0x9fc9e2dc, 0x60b941e5},
+{'8', 0x1f9e1fd5, 0xd19700bd},
+{'q', 0xc093dcb0, 0xc0c00002},
+{0, 0xc093dcb0, 0xc18234f7},
+{'q', 0xb4800000, 0xc13dcb0a},
+{0, 0x40b4f72c, 0xc1911a7d},
+{'9', 0xffce002d, 0xffcc0088},
+{'4', 0xfffe0051, 0xffe20000},
+{'8', 0xaff0cd00, 0xe3d1e3f0},
+{'8', 0x14d700e5, 0x3cee14f3},
+{'l', 0xc1658469, 0xbf9611a0},
+{'q', 0x402c2350, 0xc1ac2350},
+{0, 0x41adcb08, 0xc1ac2350},
+{'q', 0x414234f8, 0x00000000},
+{0, 0x418846a0, 0x41196118},
+{'q', 0x40bb9610, 0xc1196118},
+{0, 0x4187b962, 0xc1196118},
+{'q', 0x41372c24, 0x00000000},
+{0, 0x4189ee56, 0x411cb090},
+{'9', 0x004d002e, 0x00ee002e},
+{'4', 0x00170000, 0x0000fee8},
+{'m', 0xc201a7ba, 0x414c2350},
+{'8', 0x370b2300, 0x1320130b},
+{'8', 0xd149002b, 0x941ed11e},
+{'4', 0xffe30000, 0x0001ffc8},
+{'8', 0x1bb901cd, 0x51ed19ed},
+{'m', 0x422dcb09, 0xc22c69ee},
+{'8', 0x12d700ea, 0x32e011ed},
+{'9', 0x0020fff4, 0x004dfff3},
+{'l', 0x41a611a8, 0x00000000},
+{'8', 0x93e9b7fc, 0xdcc9dcee},
+{'@', 0x000000e7, 0x000054c2},/*        ç        x-advance: 84.757812 */
+{'M', 0x422c234f, 0x3fb08d3e},
+{'q', 0xc187b960, 0x00000000},
+{0, 0xc1d1a7b9, 0xc1211a7c},
+{'q', 0xc113dcb0, 0xc12234f6},
+{0, 0xc113dcb0, 0xc1e1a7ba},
+{'q', 0x35000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e611a8},
+{'q', 0x4114f72c, 0xc1258468},
+{0, 0x41d34f73, 0xc1258468},
+{'q', 0x4152c234, 0x00000000},
+{0, 0x41ae5846, 0x40d3dcb0},
+{'9', 0x00340044, 0x00920056},
+{'l', 0xc19c2352, 0x3f772c00},
+{'8', 0xb8dfd3fa, 0xe5b5e5e6},
+{'q', 0xc16f72c4, 0x00000000},
+{0, 0xc16f72c4, 0x41c846a0},
+{'q', 0x00000000, 0x41ce5846},
+{0, 0x4173dcb0, 0x41ce5846},
+{'8', 0xe549002c, 0xad24e41d},
+{'l', 0x419b9612, 0x3f658480},
+{'8', 0x6dd43df8, 0x4aa330dd},
+{'9', 0x0019ffc7, 0x0019ff7e},
+{'m', 0x41634f74, 0x4181a7b9},
+{'q', 0x00000000, 0x40cf72c4},
+{0, 0xc0ac2350, 0x411cb08e},
+{'q', 0xc0ac2350, 0x4053dcb0},
+{0, 0xc17846a0, 0x4053dcb0},
+{'9', 0x0000ffe8, 0xfffdffc9},
+{'l', 0x00000000, 0xc10234f6},
+{'8', 0x032e0313, 0xda4b004b},
+{'8', 0xe4f1ed00, 0xf7cdf7f1},
+{'9', 0x0000ffec, 0x0001ffe4},
+{'4', 0xff970026, 0x0000004e},
+{'l', 0xc0308d40, 0x40e11a7c},
+{'8', 0x194c0233, 0x3b191619},
+{'@', 0x000000e8, 0x000054c2},/*        è        x-advance: 84.757812 */
+{'M', 0x422cb08d, 0x3fb08d3e},
+{'q', 0xc18b08d3, 0x00000000},
+{0, 0xc1d69ee5, 0xc1234f73},
+{'q', 0xc1172c24, 0xc12469ef},
+{0, 0xc1172c24, 0xc1e69ee4},
+{'q', 0x35000000, 0xc1469ee8},
+{0, 0x408d3dcc, 0xc1a7b962},
+{'q', 0x408f72c2, 0xc108d3e0},
+{0, 0x414b08d4, 0xc14f72c0},
+{'q', 0x41034f74, 0xc08d3dd0},
+{0, 0x419b9612, 0xc08d3dd0},
+{'q', 0x4182c234, 0x00000000},
+{0, 0x41cb08d2, 0x412e5848},
+{'9', 0x00570048, 0x00f70048},
+{'4', 0x00040000, 0x0000fe6c},
+{'q', 0x00000000, 0x412234f8},
+{0, 0x408f72c4, 0x41808d3f},
+{'8', 0x2f632f24, 0xef480028},
+{'9', 0xffef001f, 0xffca002a},
+{'l', 0x419234f8, 0x3fcb08e0},
+{'q', 0xc072c240, 0x411b9611},
+{0, 0xc149ee58, 0x41708d3d},
+{'9', 0x0029ffba, 0x0029ff59},
+{'m', 0x00000000, 0xc2825846},
+{'8', 0x26a600c8, 0x69dd26df},
+{'l', 0x41fdcb08, 0x00000000},
+{'8', 0x97dabefd, 0xd9a7d9df},
+{'m', 0xbf9ee580, 0xc18ee586},
+{'l', 0xc1bb9611, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5847, 0x00000000},
+{'l', 0x418b08d2, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000e9, 0x000054c2},/*        é        x-advance: 84.757812 */
+{'M', 0x422cb08d, 0x3fb08d3e},
+{'q', 0xc18b08d3, 0x00000000},
+{0, 0xc1d69ee5, 0xc1234f73},
+{'q', 0xc1172c24, 0xc12469ef},
+{0, 0xc1172c24, 0xc1e69ee4},
+{'q', 0x35000000, 0xc1469ee8},
+{0, 0x408d3dcc, 0xc1a7b962},
+{'q', 0x408f72c2, 0xc108d3e0},
+{0, 0x414b08d4, 0xc14f72c0},
+{'q', 0x41034f74, 0xc08d3dd0},
+{0, 0x419b9612, 0xc08d3dd0},
+{'q', 0x4182c234, 0x00000000},
+{0, 0x41cb08d2, 0x412e5848},
+{'9', 0x00570048, 0x00f70048},
+{'4', 0x00040000, 0x0000fe6c},
+{'q', 0x00000000, 0x412234f8},
+{0, 0x408f72c4, 0x41808d3f},
+{'8', 0x2f632f24, 0xef480028},
+{'9', 0xffef001f, 0xffca002a},
+{'l', 0x419234f8, 0x3fcb08e0},
+{'q', 0xc072c240, 0x411b9611},
+{0, 0xc149ee58, 0x41708d3d},
+{'9', 0x0029ffba, 0x0029ff59},
+{'m', 0x00000000, 0xc2825846},
+{'8', 0x26a600c8, 0x69dd26df},
+{'l', 0x41fdcb08, 0x00000000},
+{'8', 0x97dabefd, 0xd9a7d9df},
+{'m', 0xc1234f70, 0xc18ee586},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d2, 0xc18611a8},
+{'l', 0x418e5848, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9612, 0x417ee580},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000ea, 0x000054c2},/*        ê        x-advance: 84.757812 */
+{'M', 0x422cb08d, 0x3fb08d3e},
+{'q', 0xc18b08d3, 0x00000000},
+{0, 0xc1d69ee5, 0xc1234f73},
+{'q', 0xc1172c24, 0xc12469ef},
+{0, 0xc1172c24, 0xc1e69ee4},
+{'q', 0x35000000, 0xc1469ee8},
+{0, 0x408d3dcc, 0xc1a7b962},
+{'q', 0x408f72c2, 0xc108d3e0},
+{0, 0x414b08d4, 0xc14f72c0},
+{'q', 0x41034f74, 0xc08d3dd0},
+{0, 0x419b9612, 0xc08d3dd0},
+{'q', 0x4182c234, 0x00000000},
+{0, 0x41cb08d2, 0x412e5848},
+{'9', 0x00570048, 0x00f70048},
+{'4', 0x00040000, 0x0000fe6c},
+{'q', 0x00000000, 0x412234f8},
+{0, 0x408f72c4, 0x41808d3f},
+{'8', 0x2f632f24, 0xef480028},
+{'9', 0xffef001f, 0xffca002a},
+{'l', 0x419234f8, 0x3fcb08e0},
+{'q', 0xc072c240, 0x411b9611},
+{0, 0xc149ee58, 0x41708d3d},
+{'9', 0x0029ffba, 0x0029ff59},
+{'m', 0x00000000, 0xc2825846},
+{'8', 0x26a600c8, 0x69dd26df},
+{'l', 0x41fdcb08, 0x00000000},
+{'8', 0x97dabefd, 0xd9a7d9df},
+{'m', 0x41c8d3de, 0xc19dcb0a},
+{'l', 0x00000000, 0x3ff72c40},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3c, 0x00000000},
+{'l', 0x00000000, 0xbff72c40},
+{'l', 0x418e5846, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000eb, 0x000054c2},/*        ë        x-advance: 84.757812 */
+{'M', 0x422cb08d, 0x3fb08d3e},
+{'q', 0xc18b08d3, 0x00000000},
+{0, 0xc1d69ee5, 0xc1234f73},
+{'q', 0xc1172c24, 0xc12469ef},
+{0, 0xc1172c24, 0xc1e69ee4},
+{'q', 0x35000000, 0xc1469ee8},
+{0, 0x408d3dcc, 0xc1a7b962},
+{'q', 0x408f72c2, 0xc108d3e0},
+{0, 0x414b08d4, 0xc14f72c0},
+{'q', 0x41034f74, 0xc08d3dd0},
+{0, 0x419b9612, 0xc08d3dd0},
+{'q', 0x4182c234, 0x00000000},
+{0, 0x41cb08d2, 0x412e5848},
+{'9', 0x00570048, 0x00f70048},
+{'4', 0x00040000, 0x0000fe6c},
+{'q', 0x00000000, 0x412234f8},
+{0, 0x408f72c4, 0x41808d3f},
+{'8', 0x2f632f24, 0xef480028},
+{'9', 0xffef001f, 0xffca002a},
+{'l', 0x419234f8, 0x3fcb08e0},
+{'q', 0xc072c240, 0x411b9611},
+{0, 0xc149ee58, 0x41708d3d},
+{'9', 0x0029ffba, 0x0029ff59},
+{'m', 0x00000000, 0xc2825846},
+{'8', 0x26a600c8, 0x69dd26df},
+{'l', 0x41fdcb08, 0x00000000},
+{'8', 0x97dabefd, 0xd9a7d9df},
+{'m', 0x40d1a7b8, 0xc1a234f6},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c22, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c22, 0x00000000},
+{'@', 0x000000ec, 0x000054c2},/*        ì        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc241a7ba},
+{'l', 0xc1a00000, 0x00000000},
+{'4', 0xff980000, 0x0000013b},
+{'6', 0x01ec0000, 0xfddcffa0},
+{'l', 0xc1bb9612, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000ed, 0x000054c2},/*        í        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc241a7ba},
+{'l', 0xc1a00000, 0x00000000},
+{'4', 0xff980000, 0x0000013b},
+{'6', 0x01ec0000, 0xfddcff4e},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5848, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9612, 0x417ee580},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000ee, 0x000054c2},/*        î        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc241a7ba},
+{'l', 0xc1a00000, 0x00000000},
+{'4', 0xff980000, 0x0000013b},
+{'6', 0x01ec0000, 0xfdcd006d},
+{'l', 0x00000000, 0x3ff72c40},
+{'l', 0xc12f72c0, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c40},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee58, 0x4189ee58},
+{'@', 0x000000ef, 0x000054c2},/*        ï        x-advance: 84.757812 */
+{'M', 0x425b08d4, 0xc151a7b9},
+{'l', 0x41c2c234, 0x00000000},
+{'l', 0x00000000, 0x4151a7b9},
+{'l', 0xc28dee58, 0x00000000},
+{'l', 0xb5800000, 0xc151a7b9},
+{'l', 0x41d9ee58, 0x00000000},
+{'l', 0x00000000, 0xc241a7ba},
+{'l', 0xc1a00000, 0x00000000},
+{'4', 0xff980000, 0x0000013b},
+{'6', 0x01ec0000, 0xfdc9ffea},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000f0, 0x000054c2},/*        ð        x-advance: 84.757812 */
+{'M', 0x426234f7, 0xc2ae9ee5},
+{'9', 0x00b000ad, 0x018f00ad},
+{'l', 0x00000000, 0x3e8d3e00},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc11611a8, 0x41e34f72},
+{'q', 0xc11611a8, 0x41200000},
+{0, 0xc1d846a0, 0x41200000},
+{'q', 0xc188469f, 0xb4800000},
+{0, 0xc1d469ee, 0xc111a7ba},
+{'q', 0xc118469f, 0xc111a7b8},
+{0, 0xc118469f, 0xc1ca7b95},
+{'q', 0x00000000, 0xc1834f74},
+{0, 0x41172c23, 0xc1cb9612},
+{'q', 0x411846a0, 0xc1108d40},
+{0, 0x41d72c24, 0xc1108d40},
+{'q', 0x40ac2350, 0x00000000},
+{0, 0x4113dcb0, 0x3fb08d40},
+{'9', 0xffbfffe1, 0xff89ffb3},
+{'4', 0x0038ff7f, 0xffabffd6},
+{'l', 0x414d3dcc, 0xc0ae5840},
+{'9', 0xffd9ffd0, 0xff9fff72},
+{'l', 0x41a1a7ba, 0x00000000},
+{'9', 0x001a0034, 0x00330058},
+{'4', 0xffc40089, 0x0054002d},
+{'6', 0x002bff9a, 0x01b3000b},
+{'q', 0x00000000, 0xc1308d3c},
+{0, 0xc069ee60, 0xc1811a7a},
+{'8', 0xd7a1d7e3, 0x299d00bc},
+{'q', 0xc072c230, 0x40a58470},
+{0, 0xc072c230, 0x41808d3e},
+{'q', 0x00000000, 0x41a9611b},
+{0, 0x417611a8, 0x41a9611b},
+{'q', 0x410c2350, 0x00000000},
+{0, 0x4149ee58, 0xc0a34f70},
+{'q', 0x40772c20, 0xc0a34f74},
+{0, 0x40772c20, 0xc1808d3f},
+{'@', 0x000000f1, 0x000054c2},/*        ñ        x-advance: 84.757812 */
+{'M', 0x42634f73, 0x00000000},
+{'l', 0x00000000, 0xc22ac235},
+{'q', 0x00000000, 0xc11b9610},
+{0, 0xc02c2350, 0xc16469ec},
+{'8', 0xdcb8dcec, 0x31a400c7},
+{'9', 0x0030ffde, 0x007bffde},
+{'4', 0x01400000, 0x0000ff65},
+{'l', 0x35800000, 0xc267b961},
+{'8', 0xb2ffd000, 0xc9fee2ff},
+{'l', 0x4193dcb1, 0x00000000},
+{'8', 0x38040a01, 0x3e022d02},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'q', 0x407b9618, 0xc108d3dc},
+{0, 0x411dcb0a, 0xc1469ee4},
+{'q', 0x40bdcb08, 0xc0772c20},
+{0, 0x416234f4, 0xc0772c20},
+{'9', 0x000000b9, 0x00e500b9},
+{'4', 0x017b0000, 0x0000ff66},
+{'m', 0xc011a7c0, 0xc2a32c23},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c22, 0x00000000},
+{'q', 0x3f53dca0, 0xc12c2350},
+{0, 0x4093dcb0, 0xc171a7b8},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f730, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000f2, 0x000054c2},/*        ò        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0xc179611c, 0xc2311a7c},
+{'l', 0xc1bb9611, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5847, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9614, 0x00000000},
+{'@', 0x000000f3, 0x000054c2},/*        ó        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0xc1cee584, 0xc2311a7c},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d2, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9610, 0x417ee580},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000f4, 0x000054c2},/*        ô        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0x411a7b98, 0xc2388d3e},
+{'l', 0x00000000, 0x3ff72c40},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c40},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000f5, 0x000054c2},/*        õ        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0xc088d3e0, 0xc230d3dc},
+{'8', 0xf7cf00e8, 0xebd1f7e8},
+{'8', 0xebd4f4e9, 0xf7dcf7ec},
+{'8', 0x0ddc00e8, 0x31ef0cf4},
+{'l', 0xc1172c23, 0x00000000},
+{'q', 0x3f53dcb0, 0xc12c2350},
+{0, 0x4093dcb2, 0xc171a7b8},
+{'8', 0xdd57dd1e, 0x09310018},
+{'8', 0x15300918, 0x152b0b17},
+{'8', 0x09240914, 0xf2260019},
+{'9', 0xfff2000c, 0xffd00010},
+{'l', 0x4114f72c, 0x00000000},
+{'8', 0x5cee3dfc, 0x2fd81ff2},
+{'q', 0xc04f72c0, 0x40000000},
+{0, 0xc0fdcb08, 0x40000000},
+{'@', 0x000000f6, 0x000054c2},/*        ö        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'q', 0xc187b961, 0xb4800000},
+{0, 0xc1d2c235, 0xc1211a7c},
+{'q', 0xc11611a8, 0xc12234f6},
+{0, 0xc11611a8, 0xc1e5846a},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x0000011f, 0x0134011f},
+{'m', 0xc1a234f8, 0x00000000},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc0611a80, 0xc199ee58},
+{'8', 0xd0a2d0e4, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'q', 0x00000000, 0x4154f72c},
+{0, 0x4072c230, 0x419b9612},
+{'8', 0x305b301e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0xc10f72c4, 0xc23ac234},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000f7, 0x000054c2},/*        ÷        x-advance: 84.757812 */
+{'M', 0x40dee584, 0xc21cf72c},
+{'l', 0x00000000, 0xc1772c24},
+{'4', 0x00000236, 0x007b0000},
+{'6', 0x0000fdca, 0x00dc00d8},
+{'l', 0x00000000, 0xc1808d3e},
+{'4', 0x00000083, 0x00800000},
+{'6', 0x0000ff7d, 0xfe4c0000},
+{'l', 0x00000000, 0xc1808d3c},
+{'l', 0x41834f72, 0x00000000},
+{'l', 0x00000000, 0x41808d3c},
+{'l', 0xc1834f72, 0x00000000},
+{'@', 0x000000f8, 0x000054c2},/*        ø        x-advance: 84.757812 */
+{'M', 0x429cd3dd, 0xc215846a},
+{'q', 0x00000000, 0x419469ef},
+{0, 0xc11611a8, 0x41e5846a},
+{'q', 0xc11611ac, 0x41211a7c},
+{0, 0xc1d7b962, 0x41211a7c},
+{'9', 0x0000ff92, 0xffcbff4c},
+{'4', 0x0035ffd2, 0xffd5ffcc},
+{'l', 0x40d1a7ba, 0xc0ec2350},
+{'q', 0xc0e5846a, 0xc11dcb08},
+{0, 0xc0e5846a, 0xc1d00000},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0x4114f72c, 0xc1e469f0},
+{'q', 0x4114f72c, 0xc1211a78},
+{0, 0x41d69ee5, 0xc1211a78},
+{'9', 0x00000071, 0x003000b5},
+{'4', 0xffcf002b, 0x002b0036},
+{'l', 0xc0c00000, 0x40d846a0},
+{'9', 0x004d0038, 0x00d40038},
+{'m', 0xc1a234f8, 0x00000000},
+{'9', 0xffd30000, 0xffaafffa},
+{'l', 0xc1d69ee6, 0x41f234f8},
+{'8', 0x2f5a2f1e, 0xd1630044},
+{'9', 0xffd0001e, 0xff64001e},
+{'m', 0xc1fb9612, 0x00000000},
+{'9', 0x002e0000, 0x00510005},
+{'l', 0x41d5846a, 0xc1f1a7ba},
+{'8', 0xd6a6d6e3, 0x309e00bc},
+{'q', 0xc06e5848, 0x40c234f8},
+{0, 0xc06e5848, 0x4199ee58},
+{'@', 0x000000f9, 0x000054c2},/*        ù        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2953dcb},
+{'l', 0x00000000, 0x422772c2},
+{'q', 0x00000000, 0x411846a0},
+{0, 0x404234f8, 0x4169ee58},
+{'8', 0x28462818, 0xd0510031},
+{'9', 0xffcf0020, 0xff850020},
+{'4', 0xfec00000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'9', 0x004c0000, 0x00850004},
+{'l', 0xc193dcb0, 0x00000000},
+{'9', 0xffb1fffa, 0xff8afffa},
+{'l', 0xbeb08d80, 0x00000000},
+{'q', 0xc0ec2350, 0x4181a7b9},
+{0, 0xc1b4f72c, 0x4181a7b9},
+{'q', 0xc134f72c, 0x35400000},
+{0, 0xc189ee58, 0xc0e58468},
+{'9', 0xffc7ffd1, 0xff55ffd1},
+{'4', 0xfe850000, 0x0000009b},
+{'m', 0x41434f74, 0xc0e11a80},
+{'l', 0xc1bb9612, 0xc17ee580},
+{'l', 0x00000000, 0xc03dcb20},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x418b08d4, 0x418611a8},
+{'l', 0x00000000, 0x4008d3e0},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000fa, 0x000054c2},/*        ú        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2953dcb},
+{'l', 0x00000000, 0x422772c2},
+{'q', 0x00000000, 0x411846a0},
+{0, 0x404234f8, 0x4169ee58},
+{'8', 0x28462818, 0xd0510031},
+{'9', 0xffcf0020, 0xff850020},
+{'4', 0xfec00000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'9', 0x004c0000, 0x00850004},
+{'l', 0xc193dcb0, 0x00000000},
+{'9', 0xffb1fffa, 0xff8afffa},
+{'l', 0xbeb08d80, 0x00000000},
+{'q', 0xc0ec2350, 0x4181a7b9},
+{0, 0xc1b4f72c, 0x4181a7b9},
+{'q', 0xc134f72c, 0x35400000},
+{0, 0xc189ee58, 0xc0e58468},
+{'9', 0xffc7ffd1, 0xff55ffd1},
+{'4', 0xfe850000, 0x0000009b},
+{'m', 0x4034f728, 0xc0e11a80},
+{'l', 0x00000000, 0xc008d3e0},
+{'l', 0x418b08d5, 0xc18611a8},
+{'l', 0x418e5844, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9610, 0x417ee580},
+{'l', 0xc13b9612, 0x00000000},
+{'@', 0x000000fb, 0x000054c2},/*        û        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2953dcb},
+{'l', 0x00000000, 0x422772c2},
+{'q', 0x00000000, 0x411846a0},
+{0, 0x404234f8, 0x4169ee58},
+{'8', 0x28462818, 0xd0510031},
+{'9', 0xffcf0020, 0xff850020},
+{'4', 0xfec00000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'9', 0x004c0000, 0x00850004},
+{'l', 0xc193dcb0, 0x00000000},
+{'9', 0xffb1fffa, 0xff8afffa},
+{'l', 0xbeb08d80, 0x00000000},
+{'q', 0xc0ec2350, 0x4181a7b9},
+{0, 0xc1b4f72c, 0x4181a7b9},
+{'q', 0xc134f72c, 0x35400000},
+{0, 0xc189ee58, 0xc0e58468},
+{'9', 0xffc7ffd1, 0xff55ffd1},
+{'4', 0xfe850000, 0x0000009b},
+{'m', 0x421c69ef, 0xc10e5848},
+{'l', 0x00000000, 0x3ff72c40},
+{'l', 0xc12f72c4, 0x00000000},
+{'l', 0xc1600000, 0xc113dcb0},
+{'l', 0xbe8d3e00, 0x00000000},
+{'l', 0xc168d3dc, 0x4113dcb0},
+{'l', 0xc1308d3e, 0x00000000},
+{'l', 0x00000000, 0xbff72c40},
+{'l', 0x418e5847, 0xc189ee58},
+{'l', 0x417cb08c, 0x00000000},
+{'l', 0x4189ee5a, 0x4189ee58},
+{'@', 0x000000fc, 0x000054c2},/*        ü        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2953dcb},
+{'l', 0x00000000, 0x422772c2},
+{'q', 0x00000000, 0x411846a0},
+{0, 0x404234f8, 0x4169ee58},
+{'8', 0x28462818, 0xd0510031},
+{'9', 0xffcf0020, 0xff850020},
+{'4', 0xfec00000, 0x0000009b},
+{'l', 0x00000000, 0x4267b961},
+{'9', 0x004c0000, 0x00850004},
+{'l', 0xc193dcb0, 0x00000000},
+{'9', 0xffb1fffa, 0xff8afffa},
+{'l', 0xbeb08d80, 0x00000000},
+{'q', 0xc0ec2350, 0x4181a7b9},
+{0, 0xc1b4f72c, 0x4181a7b9},
+{'q', 0xc134f72c, 0x35400000},
+{0, 0xc189ee58, 0xc0e58468},
+{'9', 0xffc7ffd1, 0xff55ffd1},
+{'4', 0xfe850000, 0x0000009b},
+{'m', 0x41a3dcb0, 0xc1172c20},
+{'l', 0x00000000, 0xc171a7c0},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c24, 0x00000000},
+{'@', 0x000000fd, 0x000054c2},/*        ý        x-advance: 84.757812 */
+{'M', 0x41b34f73, 0x41ea7b96},
+{'9', 0x0000ffc6, 0xfff9ff9c},
+{'4', 0xff920000, 0x0002001c},
+{'l', 0x40611a78, 0x3e53dcc0},
+{'8', 0xf6360021, 0xde27f616},
+{'9', 0xffe80011, 0xffae0027},
+{'4', 0xfdb2ff09, 0x000000a3},
+{'l', 0x4151a7ba, 0x4211611a},
+{'9', 0x003c0016, 0x00b80037},
+{'l', 0x3f1ee580, 0xc0234f78},
+{'l', 0x40b2c238, 0xc1a1a7b9},
+{'4', 0xfedc0063, 0x000000a2},
+{'l', 0xc1f72c22, 0x429d1a7c},
+{'q', 0xc0b08d40, 0x41634f70},
+{0, 0xc1411a7c, 0x419e5845},
+{'9', 0x002cffcc, 0x002cff7b},
+{'m', 0x412469ee, 0xc2ddee58},
+{'l', 0x00000000, 0xc008d400},
+{'l', 0x418b08d4, 0xc18611a8},
+{'l', 0x418e5846, 0x00000000},
+{'l', 0x00000000, 0x403dcb20},
+{'l', 0xc1bb9612, 0x417ee580},
+{'l', 0xc13b9610, 0x00000000},
+{'@', 0x000000fe, 0x000054c2},/*        þ        x-advance: 84.757812 */
+{'M', 0x411dcb09, 0xc2ccb08d},
+{'l', 0x419b08d4, 0x00000000},
+{'4', 0x00e30000, 0x005cfffe},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'q', 0x40f4f730, 0xc15b9610},
+{0, 0x41b11a7c, 0xc15b9610},
+{'q', 0x41458468, 0x00000000},
+{0, 0x419a7b94, 0x412234f0},
+{'q', 0x40e11a80, 0x412234fc},
+{0, 0x40e11a80, 0x41e2c236},
+{'q', 0x00000000, 0x4192c236},
+{0, 0xc0e9ee50, 0x41e5846a},
+{'q', 0xc0e7b968, 0x412469f0},
+{0, 0xc1a234f8, 0x412469f0},
+{'8', 0xe59e00ca, 0xb2bce4d5},
+{'l', 0xbed3dcc0, 0x35800000},
+{'9', 0x00100003, 0x00640003},
+{'4', 0x00e40000, 0x0000ff65},
+{'6', 0xfbe30000, 0x02060182},
+{'q', 0x00000000, 0xc1c8469c},
+{0, 0xc165846c, 0xc1c8469c},
+{'q', 0xc0dee580, 0x00000000},
+{0, 0xc12f72c0, 0x40d846a0},
+{'q', 0xc07b9618, 0x40d611a8},
+{0, 0xc07b9618, 0x41969ee6},
+{'q', 0x00000000, 0x41411a7a},
+{0, 0x407b9618, 0x4194f72b},
+{'8', 0x34563420, 0xcd57003c},
+{'q', 0x40611a80, 0xc0d1a7b8},
+{0, 0x40611a80, 0xc199ee59},
+{'@', 0x000000ff, 0x000054c2},/*        ÿ        x-advance: 84.757812 */
+{'M', 0x41b34f73, 0x41ea7b96},
+{'9', 0x0000ffc6, 0xfff9ff9c},
+{'4', 0xff920000, 0x0002001c},
+{'l', 0x40611a78, 0x3e53dcc0},
+{'8', 0xf6360021, 0xde27f616},
+{'9', 0xffe80011, 0xffae0027},
+{'4', 0xfdb2ff09, 0x000000a3},
+{'l', 0x4151a7ba, 0x4211611a},
+{'9', 0x003c0016, 0x00b80037},
+{'l', 0x3f1ee580, 0xc0234f78},
+{'l', 0x40b2c238, 0xc1a1a7b9},
+{'4', 0xfedc0063, 0x000000a2},
+{'l', 0xc1f72c22, 0x429d1a7c},
+{'q', 0xc0b08d40, 0x41634f70},
+{0, 0xc1411a7c, 0x419e5845},
+{'9', 0x002cffcc, 0x002cff7b},
+{'m', 0x41d8d3dd, 0xc2e2c234},
+{'l', 0x00000000, 0xc171a7c8},
+{'4', 0x0000007d, 0x00780000},
+{'6', 0x0000ff83, 0x0000ff17},
+{'l', 0x00000000, 0xc171a7c0},
+{'l', 0x41772c22, 0x00000000},
+{'l', 0x00000000, 0x4171a7c0},
+{'l', 0xc1772c22, 0x00000000},
+{'@', 0x00000141, 0x000054c2},/*        Ł        x-advance: 84.757812 */
+{'M', 0x4173dcb0, 0xc2353dcb},
+{'l', 0x00000000, 0xc23ee585},
+{'l', 0x41a2c236, 0x00000000},
+{'l', 0x00000000, 0x4214b08e},
+{'l', 0x4187b960, 0xc10d3dc8},
+{'l', 0x40cb08d8, 0x4147b95c},
+{'l', 0xc1ba7b96, 0x41434f74},
+{'l', 0x00000000, 0x41c234f7},
+{'l', 0x4229ee57, 0x00000000},
+{'l', 0x00000000, 0x417b9612},
+{'l', 0xc27b4f72, 0x00000000},
+{'l', 0x00000000, 0xc1eb08d4},
+{'l', 0xc108d3dc, 0x408d3dcc},
+{'l', 0xc0d611a8, 0xc147b962},
+{'l', 0x4173dcb0, 0xc0fb9610},
+{'@', 0x000003c0, 0x000054c2},/*        π        x-advance: 84.757812 */
+{'M', 0x428c0000, 0xc27611a8},
+{'l', 0x00000000, 0x42227b96},
+{'8', 0x37092700, 0x0e240e09},
+{'9', 0x00000011, 0xfffa0025},
+{'l', 0x40000000, 0x41400000},
+{'8', 0x129112cb, 0xda9400b7},
+{'9', 0xffdaffde, 0xff8affde},
+{'4', 0xfea70000, 0x0000ff7a},
+{'l', 0x00000000, 0x4108d3e0},
+{'q', 0x00000000, 0x4188469e},
+{0, 0xbfa7b960, 0x41ecb08c},
+{'9', 0x0063fff7, 0x00bbffe0},
+{'l', 0xc19e5846, 0x00000000},
+{'q', 0x4053dcac, 0xc154f72c},
+{0, 0x4098469c, 0xc1cb9612},
+{'9', 0xff9f000c, 0xff29000c},
+{'l', 0x00000000, 0xc111a7bc},
+{'8', 0x06c400e1, 0x0ed305e3},
+{'l', 0xb4000000, 0xc15a7b98},
+{'8', 0xf52df90f, 0xfc37fc1d},
+{'l', 0x428708d4, 0x00000000},
+{'l', 0x00000000, 0x4151a7b8},
+{'l', 0xc13ee588, 0x00000000},
+{'@', 0x0000201c, 0x000054c2},/*        “        x-advance: 84.757812 */
+{'M', 0x422e11a8, 0xc2ccb08d},
+{'l', 0xc13a7b98, 0x422b9611},
+{'4', 0x0000ff4d, 0xfea900ab},
+{'6', 0x00000064, 0x000000fd},
+{'l', 0xc13a7b98, 0x422b9611},
+{'l', 0xc1b34f74, 0x00000000},
+{'l', 0x41ab9612, 0xc22b9611},
+{'l', 0x4149ee5c, 0x00000000},
+{'@', 0x0000201d, 0x000054c2},/*        ”        x-advance: 84.757812 */
+{'M', 0x4118469f, 0xc26dcb09},
+{'l', 0x413a7b95, 0xc22b9611},
+{'4', 0x000000b3, 0x0157ff55},
+{'6', 0x0000ff9c, 0x000000fd},
+{'l', 0x413a7b98, 0xc22b9611},
+{'l', 0x41b34f72, 0x00000000},
+{'l', 0xc1ab9612, 0x422b9611},
+{'l', 0xc149ee58, 0x00000000},
+{'@', 0x00002022, 0x000054c2},/*        •        x-advance: 84.757812 */
+{'M', 0x427a34f7, 0xc23bdcb1},
+{'q', 0x00000000, 0x4105846c},
+{0, 0xc0c00000, 0x4165846c},
+{'q', 0xc0c00000, 0x40c00000},
+{0, 0xc1658468, 0x40c00000},
+{'q', 0xc1034f74, 0x00000000},
+{0, 0xc16234f8, 0xc0bdcb08},
+{'q', 0xc0bdcb08, 0xc0c00000},
+{0, 0xc0bdcb08, 0xc1669ee8},
+{'q', 0x00000000, 0xc1069ee4},
+{0, 0x40bb9610, 0xc16469ec},
+{'q', 0x40bdcb08, 0xc0bdcb10},
+{0, 0x41634f74, 0xc0bdcb10},
+{'q', 0x41069ee4, 0x00000000},
+{0, 0x41658468, 0x40bdcb10},
+{'q', 0x40c00000, 0x40bb9610},
+{0, 0x40c00000, 0x416469ec},
+{'@', 0x00002026, 0x000054c2},/*        …        x-advance: 84.757812 */
+{'M', 0x408234f7, 0x00000000},
+{'l', 0x00000000, 0xc1a8469f},
+{'4', 0x0000008e, 0x00a80000},
+{'6', 0x0000ff72, 0x000001db},
+{'l', 0x00000000, 0xc1a8469f},
+{'4', 0x0000008e, 0x00a80000},
+{'6', 0x0000ff72, 0x0000ff13},
+{'l', 0x00000000, 0xc1a8469f},
+{'l', 0x418d3dcc, 0x00000000},
+{'l', 0x00000000, 0x41a8469f},
+{'l', 0xc18d3dcc, 0x00000000},
+{'@', 0x000020ac, 0x000054c2},/*        €        x-advance: 84.757812 */
+{'M', 0x42765847, 0xc1ff72c2},
+{'l', 0xc1cdcb0a, 0x00000000},
+{'8', 0x6731420e, 0x23572322},
+{'8', 0xf04f002b, 0xd249ef24},
+{'l', 0x41108d40, 0x414b08d5},
+{'q', 0xc0c234f0, 0x40b2c235},
+{0, 0xc153dcb0, 0x41069ee5},
+{'q', 0xc0e58468, 0x40308d3f},
+{0, 0xc183dcb0, 0x40308d3f},
+{'q', 0xc16d3dcc, 0x00000000},
+{0, 0xc1c2c236, 0xc108d3dd},
+{'9', 0xffbcffb4, 0xff3cffa0},
+{'4', 0x0000ffaf, 0xffb10000},
+{'l', 0x41108d3e, 0x00000000},
+{'9', 0xffdaffff, 0xffd7ffff},
+{'0', 0x00b8d501, 0x0051b200},
+{'q', 0x401ee580, 0xc178469c},
+{0, 0x413dcb08, 0xc1bf72c2},
+{'q', 0x41172c22, 0xc107b960},
+{0, 0x41c611a7, 0xc107b960},
+{'9', 0x00000087, 0x004e00e3},
+{'l', 0xc1108d38, 0x415ee580},
+{'8', 0xd4bae5df, 0xefb2efdc},
+{'8', 0x22ac00cd, 0x62d222df},
+{'4', 0x000000cc, 0x004d0000},
+{'l', 0xc1d846a0, 0x00000000},
+{'8', 0x2bff0bff, 0x28021700},
+{'l', 0x41d7b962, 0x00000000},
+{'l', 0x00000000, 0x411cb08c},
+{'@', 0x00002122, 0x000054c2},/*        â„¢        x-advance: 84.757812 */
+{'M', 0x426e5847, 0xc2900000},
+{'q', 0x3e0d3d00, 0xbf8d3dc0},
+{0, 0x3f772c00, 0xc072c240},
+{'9', 0xffeb0006, 0xff2d0050},
+{'l', 0x4149ee58, 0x00000000},
+{'l', 0x00000000, 0x4230d3dd},
+{'l', 0xc114f730, 0x00000000},
+{'l', 0x00000000, 0xc1c2c236},
+{'l', 0x3e53dc00, 0xc0c234f0},
+{'l', 0xbfe58440, 0x40c234f0},
+{'l', 0xc11611a8, 0x41c2c236},
+{'l', 0xc0d611a8, 0x00000000},
+{'l', 0xc11611a8, 0xc1c2c236},
+{'l', 0xbfe58480, 0xc0c00000},
+{'l', 0x3e53dd00, 0x40c00000},
+{'l', 0x00000000, 0x41c2c236},
+{'l', 0xc114f72c, 0x00000000},
+{'4', 0xfe9f0000, 0x00000064},
+{'l', 0x411cb08c, 0x41cd3dcc},
+{'9', 0x00130007, 0x00240009},
+{'m', 0xc21772c2, 0xc1a9611c},
+{'l', 0xb6000000, 0x420c69ef},
+{'l', 0xc12d3dcb, 0x00000000},
+{'l', 0x00000000, 0xc20c69ef},
+{'l', 0xc12e5847, 0x00000000},
+{'l', 0x00000000, 0xc111a7b8},
+{'l', 0x42039612, 0x00000000},
+{'l', 0x00000000, 0x4111a7b8},
+{'l', 0xc132c236, 0x00000000},
+{'@', 0x00002190, 0x000054c2},/*        ←        x-advance: 84.757812 */
+{'M', 0x417ee584, 0xc2065847},
+{'9', 0x0024001f, 0x006c0041},
+{'l', 0xc09ee588, 0x00000000},
+{'9', 0xffaeffba, 0xff86ff6c},
+{'l', 0x35300000, 0xc01ee580},
+{'9', 0xffd8004e, 0xff860094},
+{'l', 0x409ee588, 0x00000000},
+{'9', 0x0047ffde, 0x006cffbf},
+{'l', 0x428869ee, 0x00000000},
+{'l', 0x37000000, 0x40bdcb08},
+{'l', 0xc28869ee, 0x00000000},
+{'@', 0x00002191, 0x000054c2},/*        ↑        x-advance: 84.757812 */
+{'M', 0x421d846a, 0xc2800000},
+{'9', 0x001fffdc, 0x0041ff94},
+{'l', 0x00000000, 0xc09ee588},
+{'9', 0xffba0052, 0xff6c007a},
+{'l', 0x401ee590, 0x00000000},
+{'9', 0x004e0028, 0x0094007a},
+{'l', 0x00000000, 0x409ee588},
+{'9', 0xffdeffb9, 0xffbfff94},
+{'l', 0x00000000, 0x428869ee},
+{'l', 0xc0bdcb08, 0x36200000},
+{'l', 0x00000000, 0xc28869ee},
+{'@', 0x00002192, 0x000054c2},/*        →        x-advance: 84.757812 */
+{'M', 0x4289846a, 0xc21e11a8},
+{'9', 0xffdcffe1, 0xff94ffbf},
+{'l', 0x409ee588, 0x00000000},
+{'9', 0x00520046, 0x007a0094},
+{'l', 0x00000000, 0x401ee580},
+{'9', 0x0028ffb2, 0x007aff6c},
+{'l', 0xc09ee588, 0x00000000},
+{'9', 0xffb90022, 0xff940041},
+{'l', 0xc28869ee, 0x00000000},
+{'l', 0xb6540000, 0xc0bdcb08},
+{'l', 0x428869ee, 0x00000000},
+{'@', 0x00002193, 0x000054c2},/*        ↓        x-advance: 84.757812 */
+{'M', 0x42353dcb, 0xc132c235},
+{'9', 0xffe10024, 0xffbf006c},
+{'l', 0x00000000, 0x409ee586},
+{'9', 0x0046ffae, 0x0094ff86},
+{'l', 0xc01ee590, 0xb5000000},
+{'9', 0xffb2ffd8, 0xff6cff86},
+{'l', 0x00000000, 0xc09ee584},
+{'9', 0x00220047, 0x0041006c},
+{'l', 0x00000000, 0xc28869ee},
+{'l', 0x40bdcb08, 0x00000000},
+{'l', 0x00000000, 0x428869ee},
+{'@', 0x00002212, 0x000054c2},/*        −        x-advance: 84.757812 */
+{'M', 0x40dee584, 0xc21cf72c},
+{'l', 0x00000000, 0xc1772c24},
+{'l', 0x428da7ba, 0x00000000},
+{'l', 0x00000000, 0x41772c24},
+{'l', 0xc28da7ba, 0x00000000},
+{'@', 0x00002248, 0x000054c2},/*        ≈        x-advance: 84.757812 */
+{'M', 0x426ee584, 0xc1972c23},
+{'8', 0xf4af00d7, 0xe6aff4d9},
+{'q', 0xc10e5848, 0xc0469ee0},
+{0, 0xc173dcb0, 0xc0469ee0},
+{'8', 0x0cb800d9, 0x24bc0be0},
+{'l', 0xb5000000, 0xc16b08d4},
+{'q', 0x40f9611b, 0xc0b96118},
+{0, 0x4195846a, 0xc0b96118},
+{'8', 0x0c59002d, 0x1b560c2c},
+{'8', 0x154b1138, 0x03220313},
+{'9', 0x00000049, 0xffce0088},
+{'l', 0x00000000, 0x4171a7ba},
+{'8', 0x22bd18dd, 0x09b109e0},
+{'m', 0x00000000, 0xc204f72c},
+{'8', 0xf5af00d7, 0xe7aff5d9},
+{'q', 0xc111a7ba, 0xc04f72c0},
+{0, 0xc173dcb0, 0xc04f72c0},
+{'8', 0x0bbb00dc, 0x25b90ae0},
+{'l', 0xb5000000, 0xc16b08d4},
+{'q', 0x40f2c235, 0xc0b96120},
+{0, 0x4195846a, 0xc0b96120},
+{'q', 0x4069ee58, 0x00000000},
+{0, 0x40fdcb08, 0x3f658480},
+{'q', 0x4088d3e0, 0x3f53dd00},
+{0, 0x41611a7c, 0x408469f0},
+{'q', 0x4105846c, 0x403dcb00},
+{0, 0x415cb08c, 0x403dcb00},
+{'9', 0x00000049, 0xffce0088},
+{'l', 0x00000000, 0x4171a7bc},
+{'8', 0x22bd18de, 0x09b109df},
+{'@', 0x000025bc, 0x000054c2},/*        â–¼        x-advance: 84.757812 */
+{'M', 0x42a74f73, 0xc29a9ee5},
+{'l', 0xc224f72d, 0x429e5846},
+{'l', 0xc225846a, 0xc29e5846},
+{'l', 0x42a53dcc, 0x00000000},
+{'@', 0x00002660, 0x000054c2},/*        â™         x-advance: 84.757812 */
+{'M', 0x42308d3e, 0xc2a4d3dd},
+{'8', 0x6a272f00, 0x69633a27},
+{'8', 0x62643847, 0x541d291d},
+{'8', 0x5fdb3b00, 0x23a423db},
+{'8', 0xf1bb00df, 0xd9c8f0dc},
+{'q', 0x00000000, 0x4112c236},
+{0, 0x40c00000, 0x41669ee6},
+{'9', 0x00290030, 0x00290080},
+{'4', 0x001e0000, 0x0000fe6a},
+{'l', 0x36000000, 0xc0772c23},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41800001, 0xc0a5846a},
+{'q', 0x40c234f0, 0xc0a7b960},
+{0, 0x40c234f0, 0xc1669ee6},
+{'8', 0x27c717ec, 0x0fbc0fdc},
+{'8', 0xdda400c9, 0xa1dcdddc},
+{'8', 0xae1bd600, 0x9c66d81b},
+{'8', 0x9763d23c, 0x9627c527},
+{'l', 0x40658470, 0x00000000},
+{'@', 0x00002663, 0x000054c2},/*        ♣        x-advance: 84.757812 */
+{'M', 0x4229611a, 0xc2a4d3dd},
+{'8', 0x1151002e, 0x2e341022},
+{'8', 0x41121d12, 0x49ee2400},
+{'9', 0x0024ffee, 0x0038ffd2},
+{'l', 0x4072c230, 0xbe53dd00},
+{'q', 0x4114f730, 0x00000000},
+{0, 0x4171a7b8, 0x409846a0},
+{'8', 0x632e252e, 0x5fdb3b00},
+{'8', 0x23a423db, 0xf0b900df},
+{'q', 0xc09611a8, 0xc00469f0},
+{0, 0xc0e7b968, 0xc09cb090},
+{'q', 0x00000000, 0x4112c236},
+{0, 0x40c00000, 0x41669ee6},
+{'9', 0x00290030, 0x00290080},
+{'4', 0x001e0000, 0x0000fe6a},
+{'l', 0x36000000, 0xc0772c23},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41800001, 0xc0a5846a},
+{'q', 0x40c234f0, 0xc0a7b960},
+{0, 0x40c234f0, 0xc1669ee6},
+{'8', 0x27c716ed, 0x10b910dc},
+{'8', 0xdda400c9, 0xa1dcdddc},
+{'q', 0x00000000, 0xc0fb9610},
+{0, 0x40b9611a, 0xc148d3dc},
+{'9', 0xffdb002e, 0xffdb0078},
+{'l', 0x4072c238, 0x3e53dd00},
+{'8', 0xc8d2ede4, 0xb7eedcee},
+{'8', 0xbf12dd00, 0xd234e212},
+{'q', 0x4088d3d8, 0xc008d3e0},
+{0, 0x412234f4, 0xc008d3e0},
+{'@', 0x00002665, 0x000054c2},/*        ♥        x-advance: 84.757812 */
+{'M', 0x422234f7, 0x3d8d3dcb},
+{'q', 0x00000000, 0xc09611a8},
+{0, 0xc08469f0, 0xc13dcb09},
+{'q', 0xc08234f8, 0xc0e7b962},
+{0, 0xc152c234, 0xc1911a7c},
+{'q', 0xc181a7b9, 0xc19d3dcc},
+{0, 0xc181a7b9, 0xc1f611a8},
+{'8', 0xba12da00, 0xcf32e112},
+{'8', 0xef42ef1f, 0x24580031},
+{'9', 0x00230028, 0x005a0038},
+{'l', 0x3ed3dc80, 0x00000000},
+{'8', 0xa538c910, 0xdd58dd28},
+{'8', 0x11420023, 0x3131111f},
+{'q', 0x401611c0, 0x407b9620},
+{0, 0x401611c0, 0x410b08d4},
+{'q', 0x00000000, 0x4131a7b8},
+{0, 0xc181a7ba, 0x41f611a8},
+{'8', 0x6eac49c5, 0x46d924e8},
+{'q', 0xbfee5840, 0x408234f8},
+{0, 0xbfee5840, 0x40ee5847},
+{'l', 0xc0658470, 0x33b00000},
+{'@', 0x00002666, 0x000054c2},/*        ♦        x-advance: 84.757812 */
+{'M', 0x4111a7b9, 0xc224b08d},
+{'l', 0x00000000, 0xbe53dd00},
+{'9', 0xff640089, 0xfeb70106},
+{'l', 0x3f53dcc0, 0x00000000},
+{'9', 0x00ad007d, 0x01490106},
+{'l', 0x00000000, 0x3e53dd00},
+{'9', 0x009cff77, 0x0149fefa},
+{'l', 0xbf53dcc0, 0xb4d40000},
+{'q', 0xc17a7b96, 0xc1ad3dcb},
+{0, 0xc2034f73, 0xc224f72c},
+{'@', 0x0000fb01, 0x000054c2},/*        fi        x-advance: 84.757812 */
+{'M', 0x41f9ee58, 0xc27611a8},
+{'l', 0x00000000, 0x427611a8},
+{'l', 0xc19a7b96, 0x00000000},
+{'l', 0x00000000, 0xc27611a8},
+{'0', 0x980000b0, 0xc2000050},
+{'q', 0x00000000, 0xc12c2350},
+{0, 0x40bb9614, 0xc182c234},
+{'q', 0x40bb9610, 0xc0b4f730},
+{0, 0x4182c235, 0xc0b4f730},
+{'9', 0x00000038, 0x000f0072},
+{'l', 0x00000000, 0x414b08d0},
+{'8', 0xf6b0f6d3, 0x13d400e2},
+{'9', 0x0012fff3, 0x0040fff3},
+{'l', 0x00000000, 0x40c00000},
+{'4', 0x0000007b, 0x00680000},
+{'6', 0x0000ff85, 0x01ec015e},
+{'l', 0xc19b08d4, 0x00000000},
+{'4', 0xfdac0000, 0x0000009b},
+{'6', 0x02540000, 0xfd40ff65},
+{'l', 0x00000000, 0xc16469f0},
+{'l', 0x419b08d4, 0x00000000},
+{'l', 0x00000000, 0x416469f0},
+{'l', 0xc19b08d4, 0x00000000},
+{'@', 0x0000fb02, 0x000054c2},/*        fl        x-advance: 84.757812 */
+{'M', 0x41f9ee58, 0xc27611a8},
+{'l', 0x00000000, 0x427611a8},
+{'l', 0xc19a7b96, 0x00000000},
+{'l', 0x00000000, 0xc27611a8},
+{'0', 0x980000b0, 0xc2000050},
+{'q', 0x00000000, 0xc12c2350},
+{0, 0x40bb9614, 0xc182c234},
+{'q', 0x40bb9610, 0xc0b4f730},
+{0, 0x4182c235, 0xc0b4f730},
+{'9', 0x00000038, 0x000f0072},
+{'l', 0x00000000, 0x414b08d0},
+{'8', 0xf6b0f6d3, 0x13d400e2},
+{'9', 0x0012fff3, 0x0040fff3},
+{'l', 0x00000000, 0x40c00000},
+{'4', 0x0000007b, 0x00680000},
+{'6', 0x0000ff85, 0x01ec00c3},
+{'l', 0x00000000, 0xc2ccb08d},
+{'l', 0x419b08d4, 0x00000000},
+{'l', 0x00000000, 0x42ccb08d},
+{'l', 0xc19b08d4, 0x00000000},
+};
+#define ctx_font_Cousine_Bold_name "Cousine Bold"
+#endif
diff --git a/usermodule/uctx/fonts/Cousine-Regular.h b/usermodule/uctx/fonts/Cousine-Regular.h
new file mode 100644
index 0000000000000000000000000000000000000000..6ad7ff12c7b556a820da16def7ce27abca7e2a37
--- /dev/null
+++ b/usermodule/uctx/fonts/Cousine-Regular.h
@@ -0,0 +1,4969 @@
+#ifndef CTX_FONT_Cousine_Regular
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fifl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Cousine_Regular[]={
+{15, 0x0000a008, 0x0000135e},/* length:4958 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x00000011, 0x00000002},/* Cousine Regular*/
+{32, 0x73756f43, 0x20656e69},
+{'R', 0x6c756765, 0x00007261},
+{')', 0x00000011, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x000054c2},/*                 x-advance: 84.757812 */
+{'@', 0x00000021, 0x000054c2},/*        !        x-advance: 84.757812 */
+{'M', 0x423e11a8, 0xc1db08d4},
+{'l', 0xc1234f74, 0x00000000},
+{'4', 0xfdf4fff3, 0x0000006c},
+{'6', 0x020cfff3, 0x00dbffa0},
+{'0', 0x006b9200, 0x00956e00},
+{'@', 0x00000022, 0x000054c2},/*        "        x-advance: 84.757812 */
+{'M', 0x427a7b96, 0xc2691a7c},
+{'l', 0xc11cb08c, 0x00000000},
+{'4', 0xfea0ffea, 0x0000007b},
+{'6', 0x0160ffe9, 0x0000ff09},
+{'l', 0xc11b9612, 0x00000000},
+{'l', 0xc034f728, 0xc230469e},
+{'l', 0x41772c22, 0x00000000},
+{'l', 0xc0396118, 0x4230469e},
+{'@', 0x00000023, 0x000054c2},/*        #        x-advance: 84.757812 */
+{'M', 0x4280469f, 0xc265cb09},
+{'l', 0xc093dcb0, 0x41aee584},
+{'l', 0x418f72c0, 0x00000000},
+{'l', 0x00000000, 0x40ee5848},
+{'l', 0xc19c234e, 0x00000000},
+{'l', 0xc0c234f8, 0x41e11a7c},
+{'l', 0xc0f2c230, 0x00000000},
+{'l', 0x40bdcb08, 0xc1e11a7c},
+{'l', 0xc1c846a0, 0x00000000},
+{'l', 0xc0b96118, 0x41e11a7c},
+{'l', 0xc0f2c236, 0x00000000},
+{'l', 0x40b9611a, 0xc1e11a7c},
+{'l', 0xc15dcb08, 0x00000000},
+{'l', 0xb4800000, 0xc0ee5848},
+{'l', 0x4178469e, 0x00000000},
+{'l', 0x4093dcb0, 0xc1aee584},
+{'l', 0xc184f72c, 0x00000000},
+{'l', 0x35000000, 0xc0ee5848},
+{'l', 0x41911a7c, 0x00000000},
+{'l', 0x40c469ec, 0xc1e11a7c},
+{'l', 0x40f2c234, 0x00000000},
+{'l', 0xc0c234f8, 0x41e11a7c},
+{'l', 0x41c846a0, 0x00000000},
+{'l', 0x40c234f8, 0xc1e11a7c},
+{'l', 0x40f2c230, 0x00000000},
+{'l', 0xc0c234f0, 0x41e11a7c},
+{'4', 0x00000074, 0x003b0000},
+{'6', 0x0000ff80, 0x0000fefd},
+{'l', 0xc09846a4, 0x41aee584},
+{'l', 0x41c7b961, 0x00000000},
+{'l', 0x4093dcb0, 0xc1aee584},
+{'l', 0xc1c69ee5, 0x00000000},
+{'@', 0x00000024, 0x000054c2},/*        $        x-advance: 84.757812 */
+{'M', 0x429e9ee5, 0xc1d1a7b9},
+{'q', 0x00000000, 0x4132c234},
+{0, 0xc10469e8, 0x418dcb08},
+{'9', 0x0033ffbe, 0x0038ff43},
+{'4', 0x00580000, 0x0000ffba},
+{'l', 0x00000000, 0xc131a7ba},
+{'9', 0xfff9ff18, 0xff3afef1},
+{'l', 0x413b9612, 0xc0234f70},
+{'q', 0x3fe58470, 0x410b08d4},
+{0, 0x40e9ee58, 0x41508d3e},
+{'9', 0x0022002c, 0x00260077},
+{'4', 0xfef30000, 0xfffcfff0},
+{'q', 0xc139611a, 0xc034f730},
+{0, 0xc188469e, 0xc0c469f0},
+{'8', 0xc0c1e5d5, 0xa7eddbed},
+{'q', 0x00000000, 0xc12469e8},
+{0, 0x40f08d40, 0xc1800000},
+{'9', 0xffd2003c, 0xffce00af},
+{'4', 0xffb90000, 0x00000046},
+{'l', 0x00000000, 0x410f72c8},
+{'q', 0x414d3dcc, 0x3ef72c00},
+{0, 0x419e5846, 0x40b08d40},
+{'9', 0x00270037, 0x00840050},
+{'l', 0xc1400000, 0x4011a7a0},
+{'8', 0xa8d1c6f4, 0xdfa1e3dd},
+{'l', 0x00000000, 0x41eb08d4},
+{'q', 0x413dcb08, 0x40396120},
+{0, 0x4189611a, 0x40ac2350},
+{'8', 0x2d43132a, 0x3b261919},
+{'9', 0x0021000c, 0x004d000c},
+{'m', 0xc13dcb08, 0xbe53dd00},
+{'8', 0xc4f1dc00, 0xd9d6e9f2},
+{'9', 0xfff0ffe5, 0xffddff99},
+{'l', 0x00000000, 0x4201ee58},
+{'q', 0x411ee584, 0xbf1ee580},
+{0, 0x41708d3c, 0xc093dcb0},
+{'9', 0xffe00028, 0xffa80028},
+{'m', 0xc23a7b96, 0xc22f2c22},
+{'8', 0x340c1f00, 0x2326140d},
+{'9', 0x000d0018, 0x001e005a},
+{'l', 0x00000000, 0xc1e3dcb2},
+{'8', 0x1e9702bb, 0x4ddd1bdd},
+{'@', 0x00000025, 0x000054c2},/*        %        x-advance: 84.757812 */
+{'M', 0x41a08d3e, 0xc2bbb961},
+{'q', 0x419c2350, 0x00000000},
+{0, 0x419c2350, 0x41b9611c},
+{'q', 0x00000000, 0x4138469c},
+{0, 0xc0a11a80, 0x418c234e},
+{'q', 0xc0a11a7c, 0x40c00000},
+{0, 0xc16c234e, 0x40c00000},
+{'q', 0xc11b9612, 0x00000000},
+{0, 0xc16c2350, 0xc0bdcb08},
+{'q', 0xc0a11a7c, 0xc0bdcb08},
+{0, 0xc0a11a7c, 0xc18cb08c},
+{'q', 0x00000000, 0xc13846a0},
+{0, 0x409a7b96, 0xc18a7b98},
+{'9', 0xffd20026, 0xffd20079},
+{'m', 0x4234f72b, 0x42400000},
+{'q', 0x419c2350, 0x00000000},
+{0, 0x419c2350, 0x41b9611a},
+{'q', 0x00000000, 0x4138469f},
+{0, 0xc0a11a70, 0x418c2350},
+{'q', 0xc0a11a80, 0x40bffffe},
+{0, 0xc16c2350, 0x40bffffe},
+{'q', 0xc11b9614, 0x00000000},
+{0, 0xc16c2350, 0xc0bdcb09},
+{'q', 0xc0a11a80, 0xc0bdcb09},
+{0, 0xc0a11a80, 0xc18cb08d},
+{'q', 0x00000000, 0xc13846a0},
+{0, 0x409a7b98, 0xc18a7b96},
+{'9', 0xffd20026, 0xffd20079},
+{'m', 0xc248469e, 0x423772c2},
+{'l', 0xc1200000, 0x00000000},
+{'4', 0xfd160202, 0x00000051},
+{'6', 0x02eafdfd, 0xfdcb0071},
+{'8', 0xa1efbf00, 0xe2c7e2ef},
+{'8', 0x1dc400d6, 0x60ee1dee},
+{'8', 0x5e123f00, 0x1e3c1e12},
+{'8', 0xe2390027, 0xa112e212},
+{'m', 0x4234f72b, 0x423fffff},
+{'8', 0xa1efbf00, 0xe2c7e2ef},
+{'8', 0x1dc400d6, 0x60ee1dee},
+{'8', 0x5e124000, 0x1e3c1e12},
+{'8', 0xe2390027, 0xa112e212},
+{'@', 0x00000026, 0x000054c2},/*        &        x-advance: 84.757812 */
+{'M', 0x4293dcb1, 0x3f53dcb0},
+{'8', 0xedb100d8, 0xcdbeedda},
+{'q', 0xc128d3dc, 0x41172c24},
+{0, 0xc1bf72c1, 0x41172c24},
+{'q', 0xc15b9612, 0xb4800000},
+{0, 0xc1aa7b96, 0xc0dcb08e},
+{'q', 0xc0f08d40, 0xc0dcb08c},
+{0, 0xc0f08d40, 0xc199611a},
+{'q', 0x34800000, 0xc193dcb0},
+{0, 0x41a11a7c, 0xc1e72c24},
+{'8', 0xb5e3dfef, 0xb0f5d6f5},
+{'q', 0x00000000, 0xc11611a8},
+{0, 0x40cb08d4, 0xc16f72c0},
+{'q', 0x40cd3dcc, 0xc0b2c230},
+{0, 0x418ee585, 0xc0b2c230},
+{'q', 0x41211a7c, 0x00000000},
+{0, 0x41808d3e, 0x409ee580},
+{'8', 0x6b302730, 0x49ea2900},
+{'q', 0xc02c2350, 0x40800008},
+{0, 0xc0fb9618, 0x40f08d48},
+{'q', 0xc0a34f70, 0x405cb090},
+{0, 0xc18b9610, 0x4109ee58},
+{'q', 0x4111a7b8, 0x417ee584},
+{0, 0x4198d3dc, 0x41d69ee5},
+{'9', 0xff9c0030, 0xff200044},
+{'l', 0x41200004, 0x403dcb10},
+{'q', 0xc0423500, 0x418234f7},
+{0, 0xc132c238, 0x41fee584},
+{'8', 0x2c321d17, 0x0d310d1b},
+{'9', 0x00000020, 0xfff80034},
+{'l', 0x00000000, 0x4114f72c},
+{'9', 0x000cffe6, 0x000cffc2},
+{'m', 0xc1c9ee5a, 0xc17cb08d},
+{'q', 0xc1469ee4, 0xc1600000},
+{0, 0xc1ae5847, 0xc1f34f73},
+{'q', 0xc1458469, 0x40d611a8},
+{0, 0xc1458469, 0x41a34f73},
+{'8', 0x64263f00, 0x25682526},
+{'8', 0xf2450023, 0xd53df122},
+{'m', 0x40a34f70, 0xc26f72c2},
+{'8', 0xc4e6da00, 0xeabceae6},
+{'8', 0x1bb000cf, 0x48e21be2},
+{'q', 0x00000000, 0x40f2c230},
+{0, 0x40869ee0, 0x41772c20},
+{'q', 0x4131a7bc, 0xc09611a8},
+{0, 0x4167b964, 0xc0da7b90},
+{'8', 0xda29ef1b, 0xd20eec0e},
+{'@', 0x00000027, 0x000054c2},/*        '        x-advance: 84.757812 */
+{'M', 0x423cb08d, 0xc2691a7c},
+{'l', 0xc11b9610, 0x00000000},
+{'l', 0xc034f730, 0xc230469e},
+{'l', 0x41772c24, 0x00000000},
+{'l', 0xc0396120, 0x4230469e},
+{'@', 0x00000028, 0x000054c2},/*        (        x-advance: 84.757812 */
+{'M', 0x4211ee58, 0xc21234f7},
+{'q', 0x00000000, 0x4197b961},
+{0, 0x40bb9610, 0x42091a7b},
+{'9', 0x007a002e, 0x00fc0098},
+{'l', 0xc151a7bc, 0x00000000},
+{'q', 0xc153dcb0, 0xc18234f7},
+{0, 0xc198469e, 0xc1fc234f},
+{'q', 0xc0b72c24, 0xc174f72c},
+{0, 0xc0b72c24, 0xc209ee58},
+{'q', 0x00000000, 0xc1969ee8},
+{0, 0x40b4f72c, 0xc207b962},
+{'9', 0xff87002d, 0xff030098},
+{'l', 0x4151a7bc, 0x00000000},
+{'q', 0xc153dcb0, 0x418234f8},
+{0, 0xc198d3de, 0x41fd3dcc},
+{'q', 0xc0bb9610, 0x4174f728},
+{0, 0xc0bb9610, 0x42088d3d},
+{'@', 0x00000029, 0x000054c2},/*        )        x-advance: 84.757812 */
+{'M', 0x4274234f, 0xc212c235},
+{'q', 0x00000000, 0x419a7b96},
+{0, 0xc0b72c20, 0x420a34f7},
+{'9', 0x0079ffd3, 0x00fbff69},
+{'l', 0xc153dcb0, 0x00000000},
+{'q', 0x415846a0, 0xc184f72c},
+{0, 0x419a7b96, 0xc1ff72c2},
+{'q', 0x40b96120, 0xc17611a8},
+{0, 0x40b96120, 0xc207b961},
+{'q', 0x00000000, 0xc193dcb0},
+{0, 0xc0b96120, 0xc2072c23},
+{'9', 0xff85ffd2, 0xff00ff66},
+{'l', 0x4153dcb0, 0x00000000},
+{'q', 0x41572c24, 0x418469ec},
+{0, 0x419846a0, 0x41fcb08c},
+{'q', 0x40b2c230, 0x41708d40},
+{0, 0x40b2c230, 0x4208469f},
+{'@', 0x0000002a, 0x000054c2},/*        *        x-advance: 84.757812 */
+{'M', 0x42391a7c, 0xc2a3dcb1},
+{'l', 0x4191a7b8, 0xc0e34f70},
+{'l', 0x40469ee0, 0x4111a7b8},
+{'l', 0xc19b9610, 0x40a11a80},
+{'l', 0x414c2350, 0x4189ee5a},
+{'l', 0xc1034f74, 0x409ee580},
+{'l', 0xc125846c, 0xc18e5846},
+{'l', 0xc12c234e, 0x418d3dca},
+{'l', 0xc1034f72, 0xc09ee580},
+{'l', 0x41508d3c, 0xc188d3de},
+{'l', 0xc19a7b95, 0xc0a11a80},
+{'l', 0x40469ee0, 0xc113dcb0},
+{'l', 0x41934f73, 0x40ec2350},
+{'l', 0xbf53dcc0, 0xc1a3dcb0},
+{'l', 0x411611a8, 0x00000000},
+{'l', 0xbf658440, 0x41a2c234},
+{'@', 0x0000002b, 0x000054c2},/*        +        x-advance: 84.757812 */
+{'M', 0x423d846a, 0xc227b961},
+{'l', 0x00000000, 0x41ec2350},
+{'l', 0xc12234f8, 0xb5800000},
+{'l', 0x00000000, 0xc1ec2350},
+{'l', 0xc1e9ee58, 0x00000000},
+{'l', 0x00000000, 0xc1211a7c},
+{'l', 0x41e9ee58, 0x00000000},
+{'l', 0x00000000, 0xc1ec2350},
+{'l', 0x412234f8, 0x00000000},
+{'l', 0x00000000, 0x41ec2350},
+{'l', 0x41e9ee58, 0x00000000},
+{'l', 0x00000000, 0x41211a7c},
+{'l', 0xc1e9ee58, 0x00000000},
+{'@', 0x0000002c, 0x000054c2},/*        ,        x-advance: 84.757812 */
+{'M', 0x418ee584, 0x41c8469f},
+{'l', 0x413a7b96, 0xc2369ee6},
+{'l', 0x419234f7, 0x36000000},
+{'l', 0xc1ab9611, 0x42369ee6},
+{'l', 0xc107b962, 0xb6000000},
+{'@', 0x0000002d, 0x000054c2},/*        -        x-advance: 84.757812 */
+{'M', 0x41b8469f, 0xc2000000},
+{'l', 0x00000000, 0xc1308d3c},
+{'l', 0x421a7b96, 0x00000000},
+{'l', 0xb6800000, 0x41308d3c},
+{'l', 0xc21a7b96, 0x00000000},
+{'@', 0x0000002e, 0x000054c2},/*        .        x-advance: 84.757812 */
+{'M', 0x4208d3dd, 0x00000000},
+{'l', 0x00000000, 0xc1a4f72c},
+{'l', 0x4181a7b8, 0x00000000},
+{'l', 0x00000000, 0x41a4f72c},
+{'l', 0xc181a7b8, 0x00000000},
+{'@', 0x0000002f, 0x000054c2},/*        /        x-advance: 84.757812 */
+{'M', 0x40fb9612, 0x3fb08d3e},
+{'l', 0x42627b96, 0xc2cf72c2},
+{'l', 0x414469f0, 0x00000000},
+{'l', 0xc261611a, 0x42cf72c2},
+{'l', 0xc148d3df, 0xb4800000},
+{'@', 0x00000030, 0x000054c2},/*        0        x-advance: 84.757812 */
+{'M', 0x4298234f, 0xc23a34f7},
+{'q', 0x00000000, 0x41ba7b96},
+{0, 0xc109ee58, 0x420e9ee5},
+{'q', 0xc108d3d8, 0x414469f0},
+{0, 0xc1ca7b94, 0x414469f0},
+{'q', 0xc18611a8, 0xb4800000},
+{0, 0xc1c9611b, 0xc1434f73},
+{'q', 0xc1069ee5, 0xc14469ef},
+{0, 0xc1069ee5, 0xc20ee584},
+{'q', 0x00000000, 0xc1c08d3e},
+{0, 0x41034f73, 0xc2100001},
+{'q', 0x41034f72, 0xc13ee580},
+{0, 0x41ce5846, 0xc13ee580},
+{'q', 0x4189611a, 0x00000000},
+{0, 0x41ca7b96, 0x41411a78},
+{'9', 0x00600041, 0x011e0041},
+{'m', 0xc149ee54, 0x00000000},
+{'q', 0x00000000, 0xc1a00002},
+{0, 0xc09cb090, 0xc1e72c22},
+{'q', 0xc09a7b98, 0xc10f72c8},
+{0, 0xc1800000, 0xc10f72c8},
+{'q', 0xc1372c22, 0x00000000},
+{0, 0xc183dcb0, 0x410d3dd0},
+{'q', 0xc09ee584, 0x410d3dc8},
+{0, 0xc09ee584, 0x41e8469e},
+{'q', 0x00000000, 0x419d3dcb},
+{0, 0x40a11a7c, 0x41e611a7},
+{'q', 0x40a34f70, 0x41108d3f},
+{0, 0x41811a7c, 0x41108d3f},
+{'q', 0x412f72c0, 0x00000000},
+{0, 0x41808d3c, 0xc114f72d},
+{'9', 0xffb60028, 0xff1d0028},
+{'m', 0xc1e9ee58, 0x410469ec},
+{'l', 0x00000000, 0xc189611a},
+{'l', 0x4181a7b8, 0x00000000},
+{'l', 0x00000000, 0x4189611a},
+{'l', 0xc181a7b8, 0x00000000},
+{'@', 0x00000031, 0x000054c2},/*        1        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0x00000000},
+{'4', 0xffb00000, 0x000000f2},
+{'l', 0x00000000, 0xc28cd3dd},
+{'q', 0xc0234f70, 0x40ac2350},
+{0, 0xc14234f6, 0x411611a8},
+{'9', 0x0020ffb4, 0x0020ff6a},
+{'l', 0x35800000, 0xc1234f70},
+{'q', 0x41234f73, 0x00000000},
+{0, 0x4199ee58, 0xc08f72c0},
+{'9', 0xffdd0048, 0xffa60065},
+{'l', 0x41372c24, 0x00000000},
+{'l', 0x00000000, 0x42a611a8},
+{'l', 0x41c2c236, 0x00000000},
+{'l', 0x00000000, 0x41200000},
+{'l', 0xc28634f8, 0x00000000},
+{'@', 0x00000032, 0x000054c2},/*        2        x-advance: 84.757812 */
+{'M', 0x411ee584, 0x00000000},
+{'l', 0x00000000, 0xc1011a7c},
+{'q', 0x405846a0, 0xc0f08d3c},
+{0, 0x4127b962, 0xc171a7b8},
+{'q', 0x40e58468, 0xc0f4f72c},
+{0, 0x419b9611, 0xc18b9612},
+{'q', 0x412f72c4, 0xc10c2350},
+{0, 0x417cb08c, 0xc173dcb0},
+{'8', 0x9d26cd26, 0xa2dac300},
+{'8', 0xdf94dfda, 0x229a00c2},
+{'9', 0x0022ffda, 0x0060ffd3},
+{'l', 0xc14b08d4, 0xbf9611c0},
+{'q', 0x3fb08d40, 0xc13b9610},
+{0, 0x4119611a, 0xc19469ec},
+{'q', 0x41034f74, 0xc0dcb090},
+{0, 0x41acb08e, 0xc0dcb090},
+{'q', 0x416b08d4, 0x00000000},
+{0, 0x41b72c24, 0x40d3dcb0},
+{'q', 0x41034f70, 0x40d3dcb0},
+{0, 0x41034f70, 0x419611a8},
+{'q', 0x00000000, 0x40fdcb08},
+{0, 0xc0a7b960, 0x417dcb08},
+{'q', 0xc0a7b960, 0x40fb9610},
+{0, 0xc17a7b98, 0x41811a7c},
+{'q', 0xc1634f70, 0x4134f72a},
+{0, 0xc19dcb08, 0x41858469},
+{'9', 0x002affd5, 0x0052ffc3},
+{'l', 0x424772c2, 0x00000000},
+{'l', 0x00000000, 0x41211a7c},
+{'l', 0xc281a7ba, 0x00000000},
+{'@', 0x00000033, 0x000054c2},/*        3        x-advance: 84.757812 */
+{'M', 0x42979612, 0xc1cc234f},
+{'q', 0x00000000, 0x414d3dca},
+{0, 0xc10b08d8, 0x419ee584},
+{'q', 0xc10b08d4, 0x40e11a7c},
+{0, 0xc1c234f6, 0x40e11a7c},
+{'q', 0xc16c2350, 0xb4800000},
+{0, 0xc1bcb08e, 0xc0d611a8},
+{'9', 0xffcbffba, 0xff63ffad},
+{'l', 0x414d3dcb, 0xbf9611b0},
+{'q', 0x401ee588, 0x4189ee58},
+{0, 0x41a9611b, 0x4189ee58},
+{'q', 0x411611a8, 0x35800000},
+{0, 0x416b08d4, 0xc08b08d0},
+{'8', 0x9b2bde2b, 0xbbe7d700},
+{'8', 0xd5bde4e8, 0xf1a0f1d5},
+{'4', 0x0000ffc8, 0xffaa0000},
+{'l', 0x40d846a0, 0x00000000},
+{'8', 0xf156002f, 0xd43ef027},
+{'8', 0xbd16e416, 0xa5dcc600},
+{'8', 0xdf94dfdc, 0x219600bf},
+{'9', 0x0021ffd8, 0x005effd2},
+{'l', 0xc147b961, 0xbf772c80},
+{'q', 0x3fb08d40, 0xc13ee580},
+{0, 0x411dcb09, 0xc194f72c},
+{'q', 0x4108d3dc, 0xc0d611a0},
+{0, 0x41af72c3, 0xc0d611a0},
+{'q', 0x4169ee58, 0x00000000},
+{0, 0x41b58468, 0x40cf72c0},
+{'q', 0x410234f8, 0x40cd3dd0},
+{0, 0x410234f8, 0x418f72c4},
+{'q', 0x00000000, 0x41034f70},
+{0, 0xc0ae5840, 0x416469ec},
+{'9', 0x0030ffd5, 0x0040ff89},
+{'l', 0x00000000, 0x3e8d3d80},
+{'q', 0x41269ee4, 0x3f9611c0},
+{0, 0x41858468, 0x40e9ee58},
+{'q', 0x40cb08e0, 0x40c469f0},
+{0, 0x40cb08e0, 0x416b08d6},
+{'@', 0x00000034, 0x000054c2},/*        4        x-advance: 84.757812 */
+{'M', 0x42813dcb, 0xc1b00000},
+{'l', 0x00000000, 0x41b00000},
+{'l', 0xc1469ee4, 0x00000000},
+{'l', 0x00000000, 0xc1b00000},
+{'l', 0xc23469ef, 0x00000000},
+{'l', 0x35c00000, 0xc11a7b96},
+{'l', 0x422f2c24, 0xc275846a},
+{'l', 0x415b9610, 0x00000000},
+{'l', 0x00000000, 0x4274f72c},
+{'4', 0x00000067, 0x004e0000},
+{'6', 0x0000ff99, 0xfe34ff9d},
+{'l', 0xc209ee58, 0x423f2c22},
+{'l', 0x4209ee58, 0x36000000},
+{'l', 0x00000000, 0xc23f2c22},
+{'@', 0x00000035, 0x000054c2},/*        5        x-advance: 84.757812 */
+{'M', 0x42979612, 0xc1f4f72c},
+{'q', 0x00000000, 0x4119611a},
+{0, 0xc0823500, 0x41869ee6},
+{'q', 0xc08234f0, 0x40e7b95f},
+{0, 0xc13ee584, 0x4133dcaf},
+{'q', 0xc0f96118, 0x407b9613},
+{0, 0xc193dcb0, 0x407b9613},
+{'q', 0xc159611a, 0x00000000},
+{0, 0xc1af72c2, 0xc0bdcb08},
+{'9', 0xffd1ffbe, 0xff77ffac},
+{'l', 0x4148d3dd, 0xbfb96110},
+{'q', 0x407b9610, 0x41669ee5},
+{0, 0x41a1a7ba, 0x41669ee5},
+{'q', 0x411b9610, 0x00000000},
+{0, 0x4178469c, 0xc0b9611c},
+{'q', 0x40b96120, 0xc0b9611a},
+{0, 0x40b96120, 0xc17cb08d},
+{'q', 0x00000000, 0xc108d3de},
+{0, 0xc0b72c28, 0xc15ffffe},
+{'q', 0xc0b72c20, 0xc0ae5848},
+{0, 0xc174f72c, 0xc0ae5848},
+{'8', 0x0cb500d8, 0x2bbb0cde},
+{'l', 0xc14234f8, 0x00000000},
+{'l', 0x404f72c4, 0xc248d3dd},
+{'l', 0x425cf72c, 0x00000000},
+{'4', 0x00500000, 0x0000fea2},
+{'l', 0xbffffff0, 0x41ea7b98},
+{'q', 0x41011a7a, 0xc0c69ee8},
+{0, 0x41a08d3d, 0xc0c69ee8},
+{'q', 0x41611a7c, 0x00000000},
+{0, 0x41b5846a, 0x410234f8},
+{'q', 0x410b08d8, 0x41011a7c},
+{0, 0x410b08d8, 0x41a9611a},
+{'@', 0x00000036, 0x000054c2},/*        6        x-advance: 84.757812 */
+{'M', 0x42972c23, 0xc1f611a8},
+{'q', 0x00000000, 0x4169ee58},
+{0, 0xc1069ee0, 0x41bb08d4},
+{'q', 0xc105846c, 0x410c2350},
+{0, 0xc1b7b962, 0x410c2350},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc13dcb09},
+{'q', 0xc10c234f, 0xc13ee585},
+{0, 0xc10c234f, 0xc2072c24},
+{'q', 0x00000000, 0xc1c00000},
+{0, 0x4111a7b9, 0xc21469ee},
+{'q', 0x4111a7ba, 0xc151a7b8},
+{0, 0x41cd3dcb, 0xc151a7b8},
+{'9', 0x000000b0, 0x009e00dd},
+{'l', 0xc13dcb0c, 0x4008d3c0},
+{'q', 0xc069ee50, 0xc13dcb08},
+{0, 0xc1800000, 0xc13dcb08},
+{'q', 0xc128d3dc, 0x00000000},
+{0, 0xc1834f72, 0x41196120},
+{'q', 0xc0bb9610, 0x41196118},
+{0, 0xc0bb9610, 0x41d72c22},
+{'q', 0x405846a0, 0xc0c8d3e0},
+{0, 0x411846a0, 0xc11846a0},
+{'q', 0x40c469e8, 0xc053dcb0},
+{0, 0x41611a78, 0xc053dcb0},
+{'q', 0x4153dcb4, 0x00000000},
+{0, 0x41a9ee58, 0x41034f74},
+{'9', 0x00410040, 0x00ae0040},
+{'m', 0xc149ee58, 0x3f0d3de0},
+{'q', 0x00000000, 0xc11ee586},
+{0, 0xc0a9ee58, 0xc1772c22},
+{'q', 0xc0a7b960, 0xc0b08d40},
+{0, 0xc16469ec, 0xc0b08d40},
+{'8', 0x12b300d8, 0x33c712dc},
+{'q', 0xc0234f70, 0x408234f8},
+{0, 0xc0234f70, 0x4113dcb0},
+{'q', 0x00000000, 0x4127b960},
+{0, 0x40b08d3c, 0x418c234f},
+{'q', 0x40b2c234, 0x40e11a7c},
+{0, 0x416469ee, 0x40e11a7c},
+{'q', 0x410c2350, 0x00000000},
+{0, 0x415ee584, 0xc0b9611a},
+{'q', 0x40a7b960, 0xc0b9611a},
+{0, 0x40a7b960, 0xc17cb08d},
+{'@', 0x00000037, 0x000054c2},/*        7        x-advance: 84.757812 */
+{'M', 0x429372c2, 0xc2a6e584},
+{'9', 0x0177fefc, 0x029bfefc},
+{'l', 0xc14f72c0, 0x00000000},
+{'q', 0x00000000, 0xc1911a7c},
+{0, 0x41069ee4, 0xc21c69ee},
+{'9', 0xff580043, 0xfea100c9},
+{'l', 0xc24b4f72, 0x00000000},
+{'l', 0xb5800000, 0xc1200000},
+{'l', 0x427b4f72, 0x00000000},
+{'l', 0x00000000, 0x41196120},
+{'@', 0x00000038, 0x000054c2},/*        8        x-advance: 84.757812 */
+{'M', 0x4296e584, 0xc1d08d3e},
+{'q', 0x00000000, 0x414b08d4},
+{0, 0xc109ee58, 0x41a08d3e},
+{'q', 0xc108d3d8, 0x40ec2350},
+{0, 0xc1c3dcb0, 0x40ec2350},
+{'q', 0xc1796118, 0xb4800000},
+{0, 0xc1c34f72, 0xc0e7b962},
+{'q', 0xc10c234f, 0xc0e7b960},
+{0, 0xc10c234f, 0xc1a08d3e},
+{'q', 0x00000000, 0xc10e5848},
+{0, 0x40ae5846, 0xc171a7b8},
+{'9', 0xffce002b, 0xffc3006f},
+{'l', 0x00000000, 0xbe8d3d80},
+{'8', 0xc29df2c3, 0x93dbd0db},
+{'8', 0x9e1eca00, 0xbc56d41e},
+{'q', 0x40dee580, 0xc0423500},
+{0, 0x41800000, 0xc0423500},
+{'q', 0x41172c24, 0x00000000},
+{0, 0x4183dcb0, 0x40469ee0},
+{'8', 0x43561838, 0x631d2b1d},
+{'8', 0x6eda3e00, 0x3c9d30da},
+{'l', 0x00000000, 0x3e8d3d80},
+{'q', 0x410f72c4, 0x3fb96120},
+{0, 0x416469ec, 0x40f2c238},
+{'9', 0x0030002b, 0x0079002b},
+{'m', 0xc14e5844, 0xbf9611a0},
+{'q', 0x00000000, 0xc10469f0},
+{0, 0xc0ac2350, 0xc14b08d4},
+{'q', 0xc0ac2350, 0xc08f72c0},
+{0, 0xc171a7b8, 0xc08f72c0},
+{'q', 0xc11611a8, 0x00000000},
+{0, 0xc16c2350, 0x409a7b90},
+{'q', 0xc0a9ee58, 0x409846a0},
+{0, 0xc0a9ee58, 0x4149ee5a},
+{'q', 0x00000000, 0x4114f72c},
+{0, 0x40a58468, 0x41634f73},
+{'q', 0x40a7b960, 0x409a7b95},
+{0, 0x4174f72c, 0x409a7b95},
+{'q', 0x412234f8, 0x00000000},
+{0, 0x4171a7bc, 0xc098469f},
+{'9', 0xffda0027, 0xff8c0027},
+{'m', 0xc01a7b90, 0xc22a34f8},
+{'8', 0xa4dbc300, 0xe195e1dc},
+{'8', 0x1f9700bd, 0x5cdb1fdb},
+{'8', 0x5e263d00, 0x216a2126},
+{'q', 0x418f72c2, 0x00000000},
+{0, 0x418f72c2, 0xc1808d40},
+{'@', 0x00000039, 0x000054c2},/*        9        x-advance: 84.757812 */
+{'M', 0x4295ee58, 0xc241ee58},
+{'q', 0x00000000, 0x41bee584},
+{0, 0xc112c230, 0x42139612},
+{'q', 0xc112c238, 0x414f72c0},
+{0, 0xc1d00002, 0x414f72c0},
+{'q', 0xc13611a6, 0xb4800000},
+{0, 0xc19234f7, 0xc09846a0},
+{'9', 0xffdaffca, 0xff84ffb2},
+{'l', 0x413dcb08, 0xbfee5850},
+{'q', 0x406e5848, 0x414234f8},
+{0, 0x41834f73, 0x414234f8},
+{'q', 0x4129ee58, 0x00000000},
+{0, 0x418469ee, 0xc119611a},
+{'q', 0x40c00000, 0xc11a7b96},
+{0, 0x40c469f0, 0xc1d4f72d},
+{'q', 0xc0308d40, 0x40c69ee8},
+{0, 0xc1172c24, 0x41200000},
+{'q', 0xc0d611a8, 0x406e5848},
+{0, 0xc16b08d4, 0x406e5848},
+{'q', 0xc1508d3e, 0x00000000},
+{0, 0xc1a7b961, 0xc10c234e},
+{'q', 0xc0fb9610, 0xc10d3dcc},
+{0, 0xc0fb9610, 0xc1b7b962},
+{'q', 0x00000000, 0xc169ee54},
+{0, 0x4109ee58, 0xc1b8d3de},
+{'q', 0x410b08d4, 0xc108d3d8},
+{0, 0x41bdcb09, 0xc108d3d8},
+{'9', 0x00000107, 0x01700107},
+{'m', 0xc158469c, 0xc12f72c4},
+{'q', 0x00000000, 0xc131a7bc},
+{0, 0xc0b08d40, 0xc18ffffe},
+{'q', 0xc0b08d40, 0xc0dee590},
+{0, 0xc16469f0, 0xc0dee590},
+{'q', 0xc10f72c0, 0x00000000},
+{0, 0xc16234f6, 0x40c00000},
+{'q', 0xc0a58468, 0x40c00000},
+{0, 0xc0a58468, 0x4179611c},
+{'q', 0x00000000, 0x411dcb0c},
+{0, 0x40a58468, 0x417ee584},
+{'q', 0x40a5846c, 0x40c00000},
+{0, 0x41600002, 0x40c00000},
+{'8', 0xee4e0029, 0xcc3bed25},
+{'q', 0x402c2350, 0xc088d3e0},
+{0, 0x402c2350, 0xc119611c},
+{'@', 0x0000003a, 0x000054c2},/*        :        x-advance: 84.757812 */
+{'M', 0x4208d3dd, 0x00000000},
+{'l', 0x00000000, 0xc1a4f72c},
+{'4', 0x00000081, 0x00a40000},
+{'6', 0x0000ff7f, 0xfe500000},
+{'l', 0x00000000, 0xc1a4f72c},
+{'l', 0x4181a7b8, 0x00000000},
+{'l', 0x00000000, 0x41a4f72c},
+{'l', 0xc181a7b8, 0x00000000},
+{'@', 0x0000003b, 0x000054c2},/*        ;        x-advance: 84.757812 */
+{'M', 0x41c234f7, 0x41c8469f},
+{'l', 0x413a7b96, 0xc2369ee6},
+{'4', 0x00000092, 0x016dff55},
+{'6', 0x0000ffbd, 0xfd88004f},
+{'l', 0x00000000, 0xc1a4f72c},
+{'l', 0x4181a7b8, 0x00000000},
+{'l', 0x00000000, 0x41a4f72c},
+{'l', 0xc181a7b8, 0x00000000},
+{'@', 0x0000003c, 0x000054c2},/*        <        x-advance: 84.757812 */
+{'M', 0x41000000, 0xc21d846a},
+{'l', 0x00000000, 0xc16234f8},
+{'l', 0x42893dcb, 0xc1e69ee4},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc26cb08d, 0x41c9ee58},
+{'l', 0x426cb08d, 0x41ca7b96},
+{'l', 0x00000000, 0x4128d3dc},
+{'l', 0xc2893dcb, 0xc1e611a8},
+{'@', 0x0000003d, 0x000054c2},/*        =        x-advance: 84.757812 */
+{'M', 0x41000000, 0xc1bdcb09},
+{'l', 0x00000000, 0xc1234f72},
+{'4', 0x00000224, 0x00510000},
+{'6', 0x0000fddc, 0xfee60000},
+{'l', 0x00000000, 0xc1234f78},
+{'l', 0x42893dcb, 0x00000000},
+{'l', 0x00000000, 0x41234f74},
+{'l', 0xc2893dcb, 0x00000000},
+{'@', 0x0000003e, 0x000054c2},/*        >        x-advance: 84.757812 */
+{'M', 0x41000000, 0xc129ee58},
+{'l', 0x00000000, 0xc128d3dc},
+{'l', 0x426cb08e, 0xc1ca7b96},
+{'l', 0xc26cb08e, 0xc1c9ee58},
+{'l', 0x00000000, 0xc129ee58},
+{'l', 0x42893dcb, 0x41e69ee4},
+{'l', 0x00000000, 0x416234f8},
+{'l', 0xc2893dcb, 0x41e611a8},
+{'@', 0x0000003f, 0x000054c2},/*        ?        x-advance: 84.757812 */
+{'M', 0x42940000, 0xc28a34f7},
+{'8', 0x47f42800, 0x3add1ff4},
+{'8', 0x3eb71aea, 0x40b02cc4},
+{'8', 0x2ce214ed, 0x36f517f5},
+{'l', 0xc1411a7c, 0x00000000},
+{'8', 0xbc0dda01, 0xc822e20c},
+{'8', 0xbf4ae716, 0xc14dd53b},
+{'8', 0xd51dec12, 0xca0be90b},
+{'q', 0x00000000, 0xc0f08d30},
+{0, 0xc0b08d40, 0xc1384698},
+{'q', 0xc0ae5848, 0xc0823500},
+{0, 0xc16d3dcc, 0xc0823500},
+{'q', 0xc114f72a, 0x00000000},
+{0, 0xc172c234, 0x40a11a80},
+{'9', 0x0028ffd2, 0x006dffca},
+{'l', 0xc14b08d3, 0xbf53dc80},
+{'q', 0x3fe58468, 0xc1596120},
+{0, 0x412f72c3, 0xc1a72c24},
+{'q', 0x4113dcb0, 0xc0ec2350},
+{0, 0x41bc2350, 0xc0ec2350},
+{'q', 0x417611a4, 0x00000000},
+{0, 0x41c1a7ba, 0x40d611a0},
+{'9', 0x00340046, 0x00950046},
+{'m', 0xc22c69ee, 0x428a34f7},
+{'0', 0x006b9200, 0x00956e00},
+{'@', 0x00000040, 0x000054c2},/*        @        x-advance: 84.757812 */
+{'M', 0x42a40000, 0xc250469f},
+{'q', 0x00000000, 0x41a469ef},
+{0, 0xc0b72c20, 0x420308d4},
+{'q', 0xc0b4f730, 0x414234f7},
+{0, 0xc174f730, 0x414234f7},
+{'9', 0x0000ffb2, 0xffaaffb2},
+{'4', 0xfffc0000, 0xfff00001},
+{'l', 0xbed3dc80, 0x00000000},
+{'8', 0x4ecc30ee, 0x1db41ddf},
+{'q', 0xc0e9ee58, 0x00000000},
+{0, 0xc1372c24, 0xc0dcb08e},
+{'q', 0xc08234f4, 0xc0dcb08c},
+{0, 0xc08234f4, 0xc19d3dca},
+{'q', 0x00000000, 0xc131a7bc},
+{0, 0x4053dcb0, 0xc1a7b962},
+{'q', 0x405846a0, 0xc11dcb0c},
+{0, 0x4111a7b8, 0xc178469c},
+{'8', 0xd367d32e, 0x17400027},
+{'9', 0x00160019, 0x00480025},
+{'l', 0x3eb08d80, 0x00000000},
+{'4', 0xffad0011, 0x00000040},
+{'l', 0xc0da7b98, 0x420bdcb1},
+{'q', 0xc0308d40, 0x4167b962},
+{0, 0xc0308d40, 0x4199611b},
+{'8', 0x301b3000, 0xae46002b},
+{'q', 0x405cb0a0, 0xc12469ee},
+{0, 0x405cb0a0, 0xc1db9611},
+{'q', 0x00000000, 0xc1972c22},
+{0, 0xc0f08d40, 0xc1f4f72e},
+{'q', 0xc0f08d40, 0xc13cb088},
+{0, 0xc19f72c2, 0xc13cb088},
+{'q', 0xc1234f74, 0x00000000},
+{0, 0xc1908d3e, 0x40ee5840},
+{'q', 0xc0fb9614, 0x40ec2350},
+{0, 0xc14234f8, 0x41a69ee8},
+{'q', 0xc088d3dc, 0x41572c20},
+{0, 0xc088d3dc, 0x41f4f72a},
+{'q', 0x00000000, 0x41aa7b96},
+{0, 0x41000000, 0x4208469f},
+{'q', 0x41000000, 0x414c2350},
+{0, 0x41af72c1, 0x414c2350},
+{'8', 0xed630033, 0xbd67ed30},
+{'l', 0x409cb090, 0x40c00000},
+{'q', 0xc0fdcb10, 0x40da7b96},
+{0, 0xc17611a8, 0x411ee585},
+{'q', 0xc0ee5848, 0x40469ee0},
+{0, 0xc17a7b94, 0x40469ee0},
+{'q', 0xc13611aa, 0x00000000},
+{0, 0xc1a08d3f, 0xc0d611a6},
+{'q', 0xc109ee58, 0xc0d611a8},
+{0, 0xc153dcb0, 0xc199ee58},
+{'q', 0xc093dcb0, 0xc149ee59},
+{0, 0xc093dcb0, 0xc1e846a0},
+{'q', 0xb4800000, 0xc19dcb08},
+{0, 0x40a9ee58, 0xc20bdcb1},
+{'q', 0x40a9ee58, 0xc174f728},
+{0, 0x4172c234, 0xc1bcb08c},
+{'q', 0x411dcb0a, 0xc1058468},
+{0, 0x41b69ee5, 0xc1058468},
+{'q', 0x412e5848, 0x00000000},
+{0, 0x41972c24, 0x40c8d3e0},
+{'q', 0x41011a78, 0x40c69ee0},
+{0, 0x41469ee8, 0x418d3dc8},
+{'9', 0x005b0022, 0x00d20022},
+{'m', 0xc1e469ee, 0xc0000000},
+{'8', 0xa8edc600, 0xe2cde2ed},
+{'8', 0x24c000de, 0x67d124e3},
+{'q', 0xc00d3dc8, 0x41058468},
+{0, 0xc00d3dc8, 0x418b9612},
+{'q', 0x00000000, 0x419b08d4},
+{0, 0x40fb9614, 0x419b08d4},
+{'q', 0x40a34f70, 0xb5800000},
+{0, 0x4112c234, 0xc0d1a7bc},
+{'q', 0x408234f8, 0xc0d1a7b8},
+{0, 0x40c00000, 0xc18b08d3},
+{'q', 0x40000000, 0xc12d3dcc},
+{0, 0x40000000, 0xc17a7b98},
+{'@', 0x00000041, 0x000054c2},/*        A        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'l', 0x41ff72c2, 0x00000000},
+{'l', 0xc13ee584, 0xc209ee58},
+{'l', 0xc0800000, 0xc1400000},
+{'@', 0x00000042, 0x000054c2},/*        B        x-advance: 84.757812 */
+{'M', 0x429ee584, 0xc1d1a7b9},
+{'q', 0x00000000, 0x41469ee5},
+{0, 0xc1172c20, 0x419a7b96},
+{'9', 0x0037ffb5, 0x0037ff2e},
+{'4', 0x0000fefc, 0xfd180000},
+{'l', 0x41e34f74, 0x00000000},
+{'q', 0x4208d3dd, 0x00000000},
+{0, 0x4208d3dd, 0x41b469f0},
+{'q', 0x00000000, 0x41069ee4},
+{0, 0xc09ee590, 0x41611a7c},
+{'q', 0xc09ee580, 0x40b4f728},
+{0, 0xc158469c, 0x40ec2350},
+{'q', 0x4138469c, 0x3f9ee580},
+{0, 0x418e5846, 0x40ec2350},
+{'9', 0x00310032, 0x007b0032},
+{'m', 0xc154f728, 0xbf9611b0},
+{'q', 0x00000000, 0xc0fb9610},
+{0, 0xc0c469f0, 0xc1400000},
+{'9', 0xffdfffcf, 0xffdfff6e},
+{'4', 0x0000ff75, 0x01070000},
+{'l', 0x4192c235, 0xb5800000},
+{'q', 0x41411a7c, 0x00000000},
+{0, 0x418dcb08, 0xc08469ee},
+{'9', 0xffdf002d, 0xff9b002d},
+{'m', 0xc0b2c238, 0xc225cb08},
+{'q', 0x00000000, 0xc0ec2350},
+{0, 0xc0a7b960, 0xc127b960},
+{'9', 0xffe7ffd7, 0xffe7ff84},
+{'4', 0x0000ff85, 0x00e50000},
+{'l', 0x4178469e, 0x00000000},
+{'q', 0x41a5846a, 0x00000000},
+{0, 0x41a5846a, 0xc1708d3c},
+{'@', 0x00000043, 0x000054c2},/*        C        x-advance: 84.757812 */
+{'M', 0x41ad3dcb, 0xc23bdcb1},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0x40bb9610, 0x41e234f8},
+{'q', 0x40bdcb0c, 0x411611a8},
+{0, 0x41908d3f, 0x411611a8},
+{'q', 0x40dee580, 0x00000000},
+{0, 0x4149ee58, 0xc09611a8},
+{'9', 0xffda002d, 0xff8a004c},
+{'l', 0x412f72c0, 0x408f72c4},
+{'q', 0xc12469f0, 0x41cd3dcb},
+{0, 0xc2053dcb, 0x41cd3dcb},
+{'q', 0xc1911a7c, 0xb4800000},
+{0, 0xc1df72c3, 0xc147b961},
+{'q', 0xc11b9611, 0xc147b961},
+{0, 0xc11b9611, 0xc20f72c3},
+{'q', 0x00000000, 0xc23e11a7},
+{0, 0x4213dcb1, 0xc23e11a7},
+{'9', 0x000000bb, 0x00b80101},
+{'l', 0xc1396120, 0x408f72c0},
+{'8', 0x9ec1c2ec, 0xdc9ddcd5},
+{'q', 0xc13cb090, 0x00000000},
+{0, 0xc18c2350, 0x410e5848},
+{'q', 0xc0b4f72c, 0x410e5840},
+{0, 0xc0b4f72c, 0x41dee582},
+{'@', 0x00000044, 0x000054c2},/*        D        x-advance: 84.757812 */
+{'M', 0x429b2c23, 0xc23dcb09},
+{'q', 0x00000000, 0x41b69ee6},
+{0, 0xc129ee58, 0x420cb08e},
+{'9', 0x0062ffac, 0x0062ff0e},
+{'4', 0x0000ff34, 0xfd180000},
+{'l', 0x41ab9612, 0x00000000},
+{'q', 0x41b5846a, 0x00000000},
+{0, 0x42072c24, 0x413611a8},
+{'9', 0x005a0059, 0x01110059},
+{'m', 0xc153dcb0, 0x00000000},
+{'q', 0x00000000, 0xc191a7ba},
+{0, 0xc0f2c230, 0xc1d3dcb2},
+{'9', 0xffbeffc4, 0xffbeff40},
+{'4', 0x0000ffbe, 0x023c0000},
+{'l', 0x4132c236, 0x35800000},
+{'q', 0x4169ee58, 0x00000000},
+{0, 0x41adcb08, 0xc112c235},
+{'q', 0x40e34f70, 0xc112c236},
+{0, 0x40e34f70, 0xc1dc2350},
+{'@', 0x00000045, 0x000054c2},/*        E        x-advance: 84.757812 */
+{'M', 0x4132c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x427d846b, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc248d3de, 0x00000000},
+{'l', 0x36000000, 0x41e8d3de},
+{'l', 0x423846a0, 0x00000000},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc23846a0, 0x00000000},
+{'l', 0x36000000, 0x41fe5846},
+{'l', 0x42542350, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc28469ee, 0x00000000},
+{'@', 0x00000046, 0x000054c2},/*        F        x-advance: 84.757812 */
+{'M', 0x41d469ee, 0xc2a48d3e},
+{'l', 0x00000000, 0x4208469f},
+{'l', 0x423a7b97, 0x00000000},
+{'l', 0x00000000, 0x412e5848},
+{'l', 0xc23a7b97, 0x00000000},
+{'l', 0x00000000, 0x42153dcb},
+{'l', 0xc152c234, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4275cb08, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc2411a7b, 0x00000000},
+{'@', 0x00000047, 0x000054c2},/*        G        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc112c235},
+{'q', 0xc17cb090, 0x4128d3dd},
+{0, 0xc1fee586, 0x4128d3dd},
+{'q', 0xc189ee59, 0xb4800000},
+{0, 0xc1d611a8, 0xc14c2350},
+{'q', 0xc118469f, 0xc14d3dca},
+{0, 0xc118469f, 0xc20e5847},
+{'q', 0x00000000, 0xc1bf72c2},
+{0, 0x4111a7b9, 0xc20ee583},
+{'q', 0x4111a7ba, 0xc13cb090},
+{0, 0x41db08d5, 0xc13cb090},
+{'9', 0x000000be, 0x00b600fe},
+{'l', 0xc13cb088, 0x40772c20},
+{'q', 0xc0b08d40, 0xc17ee580},
+{0, 0xc19ee586, 0xc17ee580},
+{'q', 0xc13a7b94, 0x00000000},
+{0, 0xc189ee58, 0x410b08d0},
+{'q', 0xc0b08d3c, 0x410b08d8},
+{0, 0xc0b08d3c, 0x41e08d3e},
+{'q', 0x00000000, 0x42169ee6},
+{0, 0x41bc234f, 0x42169ee6},
+{'8', 0xf54d0025, 0xe341f528},
+{'l', 0x00000000, 0xc1b9611c},
+{'l', 0xc1a1a7b8, 0x00000000},
+{'l', 0x00000000, 0xc1308d3c},
+{'l', 0x42042350, 0x00000000},
+{'l', 0x00000000, 0x421dcb09},
+{'@', 0x00000048, 0x000054c2},/*        H        x-advance: 84.757812 */
+{'M', 0x4271611a, 0x00000000},
+{'l', 0x00000000, 0xc22bdcb1},
+{'l', 0xc2100000, 0x00000000},
+{'l', 0x36000000, 0x422bdcb1},
+{'l', 0xc152c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4152c235, 0x00000000},
+{'l', 0x00000000, 0x421c2350},
+{'l', 0x42100000, 0x00000000},
+{'l', 0x00000000, 0xc21c2350},
+{'l', 0x4152c238, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc152c238, 0x00000000},
+{'@', 0x00000049, 0x000054c2},/*        I        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc2ba11a8},
+{'l', 0x426308d3, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1ae5844, 0x00000000},
+{'l', 0x00000000, 0x428f08d4},
+{'l', 0x41ae5844, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26308d3, 0x00000000},
+{'l', 0x00000000, 0xc12c234f},
+{'l', 0x41ae5846, 0x00000000},
+{'l', 0x00000000, 0xc28f08d4},
+{'l', 0xc1ae5846, 0x00000000},
+{'l', 0x00000000, 0xc12c2350},
+{'@', 0x0000004a, 0x000054c2},/*        J        x-advance: 84.757812 */
+{'M', 0x42880000, 0xc1e7b961},
+{'q', 0x00000000, 0x41669ee5},
+{0, 0xc0e7b960, 0x41b34f73},
+{'q', 0xc0e7b960, 0x40fdcb08},
+{0, 0xc1a2c236, 0x40fdcb08},
+{'q', 0xc13cb08c, 0xb4800000},
+{0, 0xc1969ee5, 0xc0c469ef},
+{'9', 0xffcfffc8, 0xff65ffb5},
+{'l', 0x414e5847, 0xc008d3d8},
+{'8', 0x64294109, 0x23512320},
+{'9', 0x00000073, 0xff650073},
+{'l', 0x00000000, 0xc2565847},
+{'l', 0xc1ab9612, 0x00000000},
+{'l', 0x00000000, 0xc12c2350},
+{'l', 0x420a34f7, 0x00000000},
+{'l', 0x00000000, 0x42802350},
+{'@', 0x0000004b, 0x000054c2},/*        K        x-advance: 84.757812 */
+{'M', 0x428a5847, 0x00000000},
+{'l', 0xc2065847, 0xc2300000},
+{'l', 0xc133dcb2, 0x413a7b98},
+{'l', 0x00000000, 0x4201611a},
+{'l', 0xc152c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4152c235, 0x00000000},
+{'l', 0x00000000, 0x4239a7ba},
+{'l', 0x421dcb08, 0xc239a7ba},
+{'l', 0x417846a0, 0x00000000},
+{'l', 0xc20b08d3, 0x421dcb09},
+{'l', 0x4220469f, 0x42565847},
+{'l', 0xc1772c20, 0x00000000},
+{'@', 0x0000004c, 0x000054c2},/*        L        x-advance: 84.757812 */
+{'M', 0x4182c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x4152c234, 0x00000000},
+{'l', 0x00000000, 0x42a48d3e},
+{'l', 0x4239611a, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26e11a8, 0x00000000},
+{'@', 0x0000004d, 0x000054c2},/*        M        x-advance: 84.757812 */
+{'M', 0x42813dcb, 0x00000000},
+{'l', 0x00000000, 0xc26f72c2},
+{'9', 0xffb60000, 0xff920001},
+{'l', 0x3e53de00, 0xc0dcb090},
+{'9', 0x0071ffdd, 0x00a0ffcc},
+{'4', 0x00f1ffa6, 0x0000ffb5},
+{'l', 0xc1372c22, 0xc1f1a7b9},
+{'9', 0xffe7fff7, 0xff60ffcc},
+{'l', 0x3e8d3dc0, 0x41a611a8},
+{'l', 0x00000000, 0x426f72c2},
+{'l', 0xc1308d3d, 0x00000000},
+{'4', 0xfd180000, 0x00000082},
+{'l', 0x414c2350, 0x4206e585},
+{'9', 0x001d000b, 0x007f0025},
+{'l', 0x3fe58460, 0xc0c69ee8},
+{'l', 0x40423500, 0xc11a7b94},
+{'l', 0x414c2350, 0xc2072c24},
+{'l', 0x417846a0, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc132c238, 0x00000000},
+{'@', 0x0000004e, 0x000054c2},/*        N        x-advance: 84.757812 */
+{'M', 0x42669ee5, 0x00000000},
+{'l', 0xc20f72c2, 0xc29bdcb1},
+{'9', 0x005e0008, 0x008c0008},
+{'l', 0x00000000, 0x4271a7b9},
+{'l', 0xc13b9611, 0x00000000},
+{'4', 0xfd180000, 0x0000007a},
+{'l', 0x4211a7ba, 0x429cf72c},
+{'9', 0xffb1fff7, 0xff69fff7},
+{'l', 0x00000000, 0xc26e5847},
+{'l', 0x413dcb0c, 0x00000000},
+{'l', 0x00000000, 0x42ba11a8},
+{'l', 0xc17dcb0c, 0x00000000},
+{'@', 0x0000004f, 0x000054c2},/*        O        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'q', 0x40a34f70, 0xc11a7b96},
+{0, 0x40a34f70, 0xc1e00001},
+{'@', 0x00000050, 0x000054c2},/*        P        x-advance: 84.757812 */
+{'M', 0x429a5847, 0xc2825847},
+{'q', 0x00000000, 0x4109ee5c},
+{0, 0xc08469f0, 0x417611ac},
+{'q', 0xc0823500, 0x40d846a0},
+{0, 0xc13b9614, 0x4128d3dc},
+{'9', 0x001effc4, 0x001eff74},
+{'l', 0xc19b08d3, 0x00000000},
+{'l', 0x00000000, 0x420dcb09},
+{'4', 0x0000ff97, 0xfd180000},
+{'l', 0x41fdcb0a, 0x00000000},
+{'q', 0x41834f72, 0x00000000},
+{0, 0x41ca7b94, 0x40ec2350},
+{'9', 0x003a0047, 0x00a30047},
+{'m', 0xc153dcb4, 0x3e53de00},
+{'9', 0xff740000, 0xff74ff4c},
+{'4', 0x0000ff79, 0x01240000},
+{'l', 0x418c234f, 0x00000000},
+{'q', 0x412469f0, 0x00000000},
+{0, 0x41811a7c, 0xc0a11a80},
+{'q', 0x40bdcb08, 0xc0a11a78},
+{0, 0x40bdcb08, 0xc1611a78},
+{'@', 0x00000051, 0x000054c2},/*        Q        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41a00001},
+{0, 0xc0da7ba0, 0x42008d3e},
+{'q', 0xc0d846a0, 0x41411a7c},
+{0, 0xc19b08d2, 0x4171a7ba},
+{'8', 0x643b4516, 0x1f5c1f24},
+{'9', 0x0000001e, 0xfff9003f},
+{'l', 0x00000000, 0x4113dcb0},
+{'q', 0xc0cd3dd0, 0x3fc23500},
+{0, 0xc14469f0, 0x3fc23500},
+{'q', 0xc125846c, 0x00000000},
+{0, 0xc188d3de, 0xc0b9611c},
+{'q', 0xc0d611a8, 0xc0bb9610},
+{0, 0xc1308d3c, 0xc19e5846},
+{'q', 0xc171a7ba, 0xbfc234fc},
+{0, 0xc1b8469f, 0xc15b9612},
+{'q', 0xc0fdcb08, 0xc14469ee},
+{0, 0xc0fdcb08, 0xc209611b},
+{'q', 0x00000000, 0xc1b9ee56},
+{0, 0x410f72c2, 0xc20d8469},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'q', 0x40a34f70, 0xc11a7b96},
+{0, 0x40a34f70, 0xc1e00001},
+{'@', 0x00000052, 0x000054c2},/*        R        x-advance: 84.757812 */
+{'M', 0x42840000, 0x00000000},
+{'l', 0xc1c9ee58, 0xc21e9ee5},
+{'l', 0xc1834f73, 0x00000000},
+{'l', 0x00000000, 0x421e9ee5},
+{'4', 0x0000ff97, 0xfd180000},
+{'l', 0x4204f72c, 0x00000000},
+{'q', 0x41808d3e, 0x00000000},
+{0, 0x41c3dcb2, 0x40d611b0},
+{'q', 0x41069ee0, 0x40d3dcb0},
+{0, 0x41069ee0, 0x419846a0},
+{'q', 0x00000000, 0x412469ec},
+{0, 0xc0cf72c0, 0x418a7b94},
+{'9', 0x0038ffcd, 0x0046ff77},
+{'4', 0x014900dc, 0x0000ff87},
+{'m', 0xbff72c40, 0xc28634f7},
+{'9', 0xff850000, 0xff85ff59},
+{'4', 0x0000ff6a, 0x01030000},
+{'l', 0x419a7b95, 0x00000000},
+{'q', 0x411dcb0c, 0x00000000},
+{0, 0x4171a7bc, 0xc08d3dc8},
+{'q', 0x40a9ee50, 0xc08d3dd0},
+{0, 0x40a9ee50, 0xc149ee58},
+{'@', 0x00000053, 0x000054c2},/*        S        x-advance: 84.757812 */
+{'M', 0x429b9612, 0xc1cc234f},
+{'q', 0x00000000, 0x414b08d3},
+{0, 0xc114f730, 0x419e5846},
+{'q', 0xc113dcb0, 0x40e34f74},
+{0, 0xc1d34f72, 0x40e34f74},
+{'9', 0x0000ff04, 0xff3bfedc},
+{'l', 0x414c234e, 0xc0234f70},
+{'q', 0x3ff72c30, 0x410e5846},
+{0, 0x41000000, 0x414f72c1},
+{'q', 0x40c234fc, 0x40800000},
+{0, 0x4181a7b9, 0x40800000},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x4184f72c, 0xc088d3dc},
+{'8', 0x9f2dde2d, 0xc2eeda00},
+{'8', 0xd9d2e8ef, 0xe8bef1e3},
+{'q', 0xc091a7b8, 0xbf9ee580},
+{0, 0xc113dcb0, 0xc01a7b90},
+{'q', 0xc131a7b8, 0xc0396120},
+{0, 0xc17dcb08, 0xc0a58470},
+{'8', 0xd7c4eedb, 0xcadee9ea},
+{'q', 0xbfb96118, 0xc072c240},
+{0, 0xbfb96118, 0xc10e5848},
+{'q', 0x00000000, 0xc13ee580},
+{0, 0x4105846a, 0xc192c234},
+{'q', 0x41069ee6, 0xc0cf72c0},
+{0, 0x41c08d3d, 0xc0cf72c0},
+{'q', 0x4169ee58, 0x00000000},
+{0, 0x41b2c236, 0x40a34f70},
+{'9', 0x0028003d, 0x00890056},
+{'l', 0xc14f72c4, 0x4011a7c0},
+{'8', 0xa7ccc3f3, 0xe494e4d9},
+{'q', 0xc19c234f, 0x00000000},
+{0, 0xc19c234f, 0x416b08d8},
+{'8', 0x360e2100, 0x2227140e},
+{'8', 0x163a0d19, 0x12470821},
+{'8', 0x206e134c, 0x1d3b0c21},
+{'8', 0x272d101a, 0x341d1612},
+{'q', 0x3fb08d40, 0x4072c230},
+{0, 0x3fb08d40, 0x410f72c2},
+{'@', 0x00000054, 0x000054c2},/*        T        x-advance: 84.757812 */
+{'M', 0x42439612, 0xc2a48d3e},
+{'l', 0x00000000, 0x42a48d3e},
+{'l', 0xc151a7bc, 0x00000000},
+{'l', 0x00000000, 0xc2a48d3e},
+{'l', 0xc1f469ee, 0x00000000},
+{'l', 0x35000000, 0xc12c2350},
+{'l', 0x429469ee, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1f469ec, 0x00000000},
+{'@', 0x00000055, 0x000054c2},/*        U        x-advance: 84.757812 */
+{'M', 0x4295a7b9, 0xc2072c23},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc0fb9610, 0x41d69ee5},
+{'q', 0xc0fb9610, 0x4105846a},
+{0, 0xc1c9ee58, 0x4105846a},
+{'q', 0xc1869ee5, 0xb4800000},
+{0, 0xc1c34f72, 0xc1011a7c},
+{'9', 0xffbfffc4, 0xff32ffc4},
+{'4', 0xfe1d0000, 0x00000069},
+{'l', 0x00000000, 0x426ac236},
+{'q', 0x00000000, 0x41611a7a},
+{0, 0x40800000, 0x419cb08c},
+{'q', 0x408234f8, 0x40ae5848},
+{0, 0x416b08d2, 0x40ae5848},
+{'q', 0x4131a7bc, 0x00000000},
+{0, 0x4179611c, 0xc0b4f72c},
+{'9', 0xffd30023, 0xff5e0023},
+{'l', 0x00000000, 0xc2672c24},
+{'l', 0x4151a7b8, 0x00000000},
+{'l', 0x00000000, 0x426cf72d},
+{'@', 0x00000056, 0x000054c2},/*        V        x-advance: 84.757812 */
+{'M', 0x4244b08d, 0x00000000},
+{'l', 0xc15a7b94, 0x00000000},
+{'4', 0xfd18feea, 0x0000006e},
+{'l', 0x41b08d3e, 0x4278d3de},
+{'q', 0x4008d3e0, 0x40bdcb04},
+{0, 0x40b96118, 0x4199ee57},
+{'9', 0xffae0016, 0xff67002e},
+{'l', 0x41af72c2, 0xc278d3de},
+{'l', 0x415dcb08, 0x00000000},
+{'l', 0xc20b4f73, 0x42ba11a8},
+{'@', 0x00000057, 0x000054c2},/*        W        x-advance: 84.757812 */
+{'M', 0x428c69ee, 0x00000000},
+{'l', 0xc1658468, 0x00000000},
+{'q', 0xc0a34f70, 0xc198469f},
+{0, 0xc0f96118, 0xc1e7b961},
+{'q', 0xc027b960, 0xc11ee586},
+{0, 0xc0b2c238, 0xc1b9611b},
+{'q', 0xc0000000, 0x4109ee58},
+{0, 0xc06e5840, 0x4179611c},
+{'9', 0x0037fff3, 0x0124ffb2},
+{'l', 0xc1658469, 0x00000000},
+{'4', 0xfd18ff8c, 0x00000068},
+{'l', 0x40f08d3c, 0x42665847},
+{'q', 0x3f8d3dd0, 0x41108d3e},
+{0, 0x4011a7b8, 0x41bee585},
+{'q', 0x400d3dd0, 0xc11846a0},
+{0, 0x4069ee58, 0xc17b9612},
+{'9', 0xffcf000c, 0xfed9004f},
+{'l', 0x41411a7c, 0x00000000},
+{'q', 0x409846a0, 0x418b9610},
+{0, 0x40ee5848, 0x41db9610},
+{'9', 0x00500016, 0x00c90031},
+{'l', 0x401a7b90, 0xc1bee585},
+{'l', 0x40e58470, 0xc2665847},
+{'l', 0x41508d38, 0x00000000},
+{'l', 0xc167b960, 0x42ba11a8},
+{'@', 0x00000058, 0x000054c2},/*        X        x-advance: 84.757812 */
+{'M', 0x4229611a, 0xc2669ee5},
+{'l', 0x41b7b960, 0xc20d846b},
+{'l', 0x416234f8, 0x00000000},
+{'l', 0xc1effffe, 0x4231a7ba},
+{'l', 0x42034f73, 0x42427b96},
+{'l', 0xc16234f8, 0x00000000},
+{'l', 0xc1ce5848, 0xc21e11a8},
+{'l', 0xc1cdcb08, 0x421e11a8},
+{'l', 0xc16234f7, 0x00000000},
+{'l', 0x42034f73, 0xc2427b96},
+{'l', 0xc1f00000, 0xc231a7ba},
+{'l', 0x416234f8, 0x00000000},
+{'l', 0x41b72c22, 0x420d846b},
+{'@', 0x00000059, 0x000054c2},/*        Y        x-advance: 84.757812 */
+{'M', 0x42434f73, 0xc2211a7c},
+{'l', 0x00000000, 0x42211a7c},
+{'l', 0xc14f72c4, 0x00000000},
+{'l', 0x00000000, 0xc2211a7c},
+{'l', 0xc205846a, 0xc25308d4},
+{'l', 0x416234f8, 0x00000000},
+{'l', 0x41ce5846, 0x42288d3e},
+{'l', 0x41cd3dca, 0xc2288d3e},
+{'l', 0x416234f8, 0x00000000},
+{'l', 0xc2058469, 0x425308d4},
+{'@', 0x0000005a, 0x000054c2},/*        Z        x-advance: 84.757812 */
+{'M', 0x429f4f73, 0x00000000},
+{'l', 0xc2953dcb, 0x00000000},
+{'l', 0xb6000000, 0xc11dcb09},
+{'l', 0x4261a7ba, 0xc290d3dd},
+{'l', 0xc24d846b, 0x00000000},
+{'l', 0x00000000, 0xc12c2350},
+{'l', 0x4284b08e, 0x00000000},
+{'l', 0xb7000000, 0x41196120},
+{'l', 0xc261a7ba, 0x4291611a},
+{'l', 0x426e9ee6, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'@', 0x0000005b, 0x000054c2},/*        [        x-advance: 84.757812 */
+{'M', 0x41e234f7, 0x41ea7b96},
+{'l', 0x00000000, 0xc303a7b9},
+{'l', 0x4216e584, 0xb7000000},
+{'l', 0x00000000, 0x41196118},
+{'l', 0xc1ca7b96, 0x00000000},
+{'l', 0x00000000, 0x42e0f72c},
+{'l', 0x41ca7b96, 0x36000000},
+{'l', 0x00000000, 0x4119611a},
+{'l', 0xc216e584, 0x00000000},
+{'@', 0x0000005c, 0x000054c2},/*       \         x-advance: 84.757812 */
+{'M', 0x42808d3e, 0x3fb08d3e},
+{'l', 0xc261611b, 0xc2cf72c2},
+{'l', 0x414469ee, 0x00000000},
+{'l', 0x42627b96, 0x42cf72c2},
+{'l', 0xc148d3d8, 0xb4800000},
+{'@', 0x0000005d, 0x000054c2},/*        ]        x-advance: 84.757812 */
+{'M', 0x4194f72c, 0x41ea7b96},
+{'l', 0x00000000, 0xc119611a},
+{'l', 0x41ca7b96, 0x00000000},
+{'l', 0x00000000, 0xc2e0f72c},
+{'l', 0xc1ca7b96, 0x00000000},
+{'l', 0x00000000, 0xc1196118},
+{'l', 0x4216e584, 0x00000000},
+{'l', 0x00000000, 0x4303a7b9},
+{'l', 0xc216e584, 0x36800000},
+{'@', 0x0000005e, 0x000054c2},/*        ^        x-advance: 84.757812 */
+{'M', 0x4281a7b9, 0xc1f3dcb0},
+{'l', 0xc1b58468, 0xc25d846a},
+{'l', 0xc1b3dcb1, 0x425d846a},
+{'l', 0xc127b961, 0x00000000},
+{'l', 0x41d08d3e, 0xc27a34f8},
+{'l', 0x41600000, 0x00000000},
+{'l', 0x41d1a7b8, 0x427a34f8},
+{'l', 0xc129ee58, 0x00000000},
+{'@', 0x0000005f, 0x000054c2},/*        _        x-advance: 84.757812 */
+{'M', 0xbeb08d3e, 0x4172c235},
+{'l', 0x00000000, 0xc0d3dcb0},
+{'l', 0x42aac235, 0x00000000},
+{'l', 0x00000000, 0x40d3dcb0},
+{'l', 0xc2aac235, 0x00000000},
+{'@', 0x00000060, 0x000054c2},/*        `        x-advance: 84.757812 */
+{'M', 0x4241a7b9, 0xc2a5a7b9},
+{'l', 0xc1a58469, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x00000061, 0x000054c2},/*        a        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'q', 0x40469ee8, 0x405cb08c},
+{0, 0x41108d3e, 0x405cb08c},
+{'@', 0x00000062, 0x000054c2},/*        b        x-advance: 84.757812 */
+{'M', 0x42965847, 0xc2169ee5},
+{'q', 0x00000000, 0x419cb08c},
+{0, 0xc0e11a80, 0x41ea7b95},
+{'q', 0xc0dee588, 0x411b9612},
+{0, 0xc1a00000, 0x411b9612},
+{'9', 0x0000ff7a, 0xff9bff48},
+{'l', 0xbe0d3e00, 0x00000000},
+{'8', 0x37fe1a00, 0x23fe1cff},
+{'l', 0xc1400000, 0x00000000},
+{'9', 0xffe30003, 0xff850003},
+{'4', 0xfd490000, 0x00000063},
+{'l', 0x00000000, 0x41e96118},
+{'9', 0x00230000, 0x0056fffe},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'q', 0x40c8d3e0, 0xc15cb090},
+{0, 0x41b846a0, 0xc15cb090},
+{'9', 0x000000d7, 0x013300d7},
+{'m', 0xc14d3dd0, 0x3ed3dc80},
+{'q', 0x00000000, 0xc1772c24},
+{0, 0xc088d3d8, 0xc1b2c236},
+{'q', 0xc0869ee8, 0xc0dee588},
+{0, 0xc153dcb0, 0xc0dee588},
+{'q', 0xc12469f0, 0x00000000},
+{0, 0xc16f72c4, 0x40f2c240},
+{'q', 0xc09611a8, 0x40f08d38},
+{0, 0xc09611a8, 0x41b69ee4},
+{'q', 0x00000000, 0x41669ee6},
+{0, 0x4091a7bc, 0x41ab08d4},
+{'q', 0x4091a7bc, 0x40dee586},
+{0, 0x416f72c2, 0x40dee586},
+{'q', 0x4114f72c, 0x00000000},
+{0, 0x41572c24, 0xc0e5846a},
+{'q', 0x40869ee0, 0xc0e7b960},
+{0, 0x40869ee0, 0xc1b234f7},
+{'@', 0x00000063, 0x000054c2},/*        c        x-advance: 84.757812 */
+{'M', 0x410f72c2, 0xc215846a},
+{'q', 0x00000000, 0xc194f72c},
+{0, 0x410e5846, 0xc1e4f72c},
+{'q', 0x410e5848, 0xc1200000},
+{0, 0x41cdcb0a, 0xc1200000},
+{'q', 0x4148d3dc, 0x00000000},
+{0, 0x41a5846a, 0x40c234f0},
+{'9', 0x00300041, 0x00810050},
+{'l', 0xc153dcb0, 0x3f772c00},
+{'8', 0xb2d4cef8, 0xe39ce3dd},
+{'q', 0xc12e5844, 0x00000000},
+{0, 0xc17ffffe, 0x40d846a0},
+{'q', 0xc0a11a7c, 0x40d846a0},
+{0, 0xc0a11a7c, 0x41aee586},
+{'q', 0x00000000, 0x4174f72a},
+{0, 0x40a11a7c, 0x41b34f72},
+{'q', 0x40a34f74, 0x40e11a7a},
+{0, 0x417ee586, 0x40e11a7a},
+{'8', 0xe362003b, 0xa730e327},
+{'l', 0x4151a7b8, 0x3f53dcc0},
+{'8', 0x60d834f9, 0x43aa2be0},
+{'q', 0xc0d846a0, 0x404234f7},
+{0, 0xc171a7b8, 0x404234f7},
+{'q', 0xc1872c24, 0x00000000},
+{0, 0xc1cdcb09, 0xc11ee585},
+{'q', 0xc10d3dcc, 0xc11ee585},
+{0, 0xc10d3dcc, 0xc1e69ee6},
+{'@', 0x00000064, 0x000054c2},/*        d        x-advance: 84.757812 */
+{'M', 0x426dcb09, 0xc1400000},
+{'8', 0x54b939e5, 0x199119d4},
+{'q', 0xc15ee584, 0x00000000},
+{0, 0xc1a3dcb0, 0xc119611a},
+{'q', 0xc0d1a7ba, 0xc119611b},
+{0, 0xc0d1a7ba, 0xc1e72c24},
+{'q', 0x00000000, 0xc21c234f},
+{0, 0x41d8469e, 0xc21c234f},
+{'8', 0x176f0042, 0x4d48172d},
+{'l', 0x3e0d3d00, 0x00000000},
+{'l', 0xbe0d3d00, 0xc1269ee4},
+{'4', 0xff190000, 0x00000063},
+{'l', 0x00000000, 0x42adee58},
+{'9', 0x005d0000, 0x007b0003},
+{'l', 0xc13dcb08, 0x00000000},
+{'8', 0xd8fdf8fe, 0xc9ffe0ff},
+{'6', 0x0000fffe, 0xff38fed8},
+{'q', 0xb6000000, 0x4174f72a},
+{0, 0x408234f4, 0x41b2c234},
+{'q', 0x408469ec, 0x40dee586},
+{0, 0x415611a6, 0x40dee586},
+{'q', 0x41211a7c, 0x00000000},
+{0, 0x416e5848, 0xc0e7b962},
+{'q', 0x409a7b98, 0xc0e9ee58},
+{0, 0x409a7b98, 0xc1b9611b},
+{'q', 0x00000000, 0xc16d3dc8},
+{0, 0xc09611a8, 0xc1acb08c},
+{'q', 0xc093dcb0, 0xc0d846a8},
+{0, 0xc16e5848, 0xc0d846a8},
+{'q', 0xc114f72c, 0x00000000},
+{0, 0xc1572c24, 0x40e34f78},
+{'q', 0xc08469ec, 0x40e34f78},
+{0, 0xc08469ec, 0x41b2c236},
+{'@', 0x00000065, 0x000054c2},/*        e        x-advance: 84.757812 */
+{'M', 0x41b1a7b9, 0xc20ac235},
+{'q', 0x00000000, 0x4148d3dc},
+{0, 0x40b08d40, 0x419d3dcb},
+{'q', 0x40b2c234, 0x40e34f73},
+{0, 0x4173dcb2, 0x40e34f73},
+{'8', 0xe8630038, 0xbd39e82b},
+{'l', 0x412e5844, 0x40469ee8},
+{'q', 0xc04234e0, 0x4108d3dc},
+{0, 0xc132c230, 0x4151a7b9},
+{'q', 0xc1011a7c, 0x4091a7ba},
+{0, 0xc19a7b96, 0x4091a7ba},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc12234f7},
+{'q', 0xc10c234f, 0xc12234f7},
+{0, 0xc10c234f, 0xc1e8469e},
+{'q', 0x00000000, 0xc1934f74},
+{0, 0x4108d3dd, 0xc1e234f6},
+{'q', 0x4109ee58, 0xc11ee588},
+{0, 0x41c69ee5, 0xc11ee588},
+{'q', 0x4181a7ba, 0x00000000},
+{0, 0x41c469ee, 0x411dcb08},
+{'9', 0x004e0042, 0x00ee0042},
+{'4', 0x000d0000, 0x0000fe57},
+{'m', 0x41a3dcb2, 0xc2008d3d},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc169ee58, 0x40c234f0},
+{'9', 0x0030ffd5, 0x0084ffd3},
+{'l', 0x42211a7c, 0x00000000},
+{'q', 0xbff72c20, 0xc1b4f72a},
+{0, 0xc19f72c2, 0xc1b4f72a},
+{'@', 0x00000066, 0x000054c2},/*        f        x-advance: 84.757812 */
+{'M', 0x42200000, 0xc281a7b9},
+{'l', 0x00000000, 0x4281a7b9},
+{'l', 0xc1469ee6, 0x00000000},
+{'l', 0x00000000, 0xc281a7b9},
+{'l', 0xc1908d3e, 0x00000000},
+{'4', 0xffb20000, 0x00000090},
+{'l', 0xb6000000, 0xbfdcb080},
+{'q', 0x00000000, 0xc16234f8},
+{0, 0x40d3dcb4, 0xc1a08d40},
+{'q', 0x40d611a8, 0xc0bdcb00},
+{0, 0x41b1a7b8, 0xc0bdcb00},
+{'8', 0x03550027, 0x0745032e},
+{'l', 0x00000000, 0x41200000},
+{'8', 0xfabdfef0, 0xfdb4fdce},
+{'8', 0x0caa00c7, 0x29d50ce3},
+{'9', 0x001cfff3, 0x0050fff3},
+{'l', 0x00000000, 0x3f308d00},
+{'l', 0x420772c2, 0x00000000},
+{'l', 0x00000000, 0x411cb090},
+{'l', 0xc20772c2, 0x00000000},
+{'@', 0x00000067, 0x000054c2},/*        g        x-advance: 84.757812 */
+{'M', 0x4229a7b9, 0x41e9ee58},
+{'q', 0xc139611a, 0x00000000},
+{0, 0xc194f72b, 0xc098469c},
+{'9', 0xffdaffc8, 0xff93ffb9},
+{'l', 0x414b08d3, 0xbfdcb090},
+{'8', 0x40282909, 0x1652161f},
+{'9', 0x00000088, 0xff530088},
+{'4', 0xff950000, 0x0000ffff},
+{'q', 0xc05846a0, 0x40e34f72},
+{0, 0xc11611a8, 0x412c234f},
+{'q', 0xc0c00000, 0x4069ee58},
+{0, 0xc16469ec, 0x4069ee58},
+{'q', 0xc15a7b96, 0x00000000},
+{0, 0xc1a00000, 0xc10e5847},
+{'q', 0xc0c8d3de, 0xc10f72c2},
+{0, 0xc0c8d3de, 0xc1e11a7b},
+{'q', 0x00000000, 0xc19c2350},
+{0, 0x40d8469e, 0xc1e5846c},
+{'q', 0x40d846a0, 0xc113dcb0},
+{0, 0x41a69ee6, 0xc113dcb0},
+{'8', 0x1d6c003e, 0x52471c2e},
+{'l', 0x3e53dd00, 0x00000000},
+{'8', 0xc902f000, 0xd204d902},
+{'l', 0x413cb088, 0x00000000},
+{'9', 0x001dfffd, 0x007bfffd},
+{'l', 0x00000000, 0x4263dcb0},
+{'q', 0x00000000, 0x417a7b97},
+{0, 0xc0e9ee60, 0x41bcb08e},
+{'9', 0x003effc6, 0x003eff4c},
+{'m', 0x418c2350, 0xc2867b96},
+{'q', 0x00000000, 0xc154f72c},
+{0, 0xc0a58468, 0xc1a72c24},
+{'q', 0xc0a58468, 0xc0f4f730},
+{0, 0xc1634f74, 0xc0f4f730},
+{'q', 0xc1172c22, 0x00000000},
+{0, 0xc15a7b96, 0x40d3dcb8},
+{'q', 0xc0869ee4, 0x40d1a7b8},
+{0, 0xc0869ee4, 0x41af72c2},
+{'q', 0x00000000, 0x41269ee6},
+{0, 0x3fdcb090, 0x4183dcb1},
+{'8', 0x462c2f0e, 0x1653161d},
+{'8', 0xe752002e, 0xb437e623},
+{'q', 0x401a7b90, 0xc0cb08d4},
+{0, 0x401a7b90, 0xc172c236},
+{'@', 0x00000068, 0x000054c2},/*        h        x-advance: 84.757812 */
+{'M', 0x414c234f, 0xc2ccb08d},
+{'4', 0x00000063, 0x00d70000},
+{'9', 0x00200000, 0x006cfffc},
+{'l', 0x3e53dc80, 0x00000000},
+{'q', 0x40e7b964, 0xc16234f8},
+{0, 0x41bb08d5, 0xc16234f8},
+{'9', 0x000000c1, 0x00d200c1},
+{'4', 0x018d0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23fb961},
+{'8', 0x91e3b500, 0xdca4dce4},
+{'q', 0xc108d3dc, 0x00000000},
+{0, 0xc1611a7c, 0x40c8d3e0},
+{'9', 0x0031ffd5, 0x0087ffd5},
+{'l', 0x00000000, 0x422cf72c},
+{'l', 0xc1469ee5, 0x00000000},
+{'l', 0x00000000, 0xc2ccb08d},
+{'@', 0x00000069, 0x000054c2},/*        i        x-advance: 84.757812 */
+{'M', 0x424d846a, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3de, 0x00000000},
+{'l', 0x00000000, 0xc25c234f},
+{'l', 0xc1b00001, 0x00000000},
+{'4', 0xffb20000, 0x00000113},
+{'6', 0x02060000, 0xfd86ff92},
+{'0', 0x006e9700, 0x00926900},
+{'@', 0x0000006a, 0x000054c2},/*        j        x-advance: 84.757812 */
+{'M', 0x42669ee5, 0x3ff72c23},
+{'q', 0x00000000, 0x414e5847},
+{0, 0xc0f72c20, 0x41a11a7c},
+{'q', 0xc0f72c20, 0x40e7b960},
+{0, 0xc1b00000, 0x40e7b960},
+{'8', 0xf9a800d5, 0xf0baf9d3},
+{'l', 0x00000000, 0xc11a7b96},
+{'q', 0x4125846a, 0x401611a8},
+{0, 0x41969ee5, 0x401611a8},
+{'8', 0xdc6c0046, 0x9a26dc26},
+{'l', 0x00000000, 0xc2851a7b},
+{'l', 0xc1e08d3e, 0x00000000},
+{'4', 0xffb20000, 0x00000143},
+{'6', 0x02640000, 0xfd28ff92},
+{'0', 0x006e9700, 0x00926900},
+{'@', 0x0000006b, 0x000054c2},/*        k        x-advance: 84.757812 */
+{'M', 0x427c234f, 0x00000000},
+{'l', 0xc1c9ee58, 0xc209a7b9},
+{'l', 0xc111a7b8, 0x40d8469c},
+{'l', 0x00000000, 0x41dd3dcb},
+{'l', 0xc1469ee6, 0x00000000},
+{'l', 0x00000000, 0xc2ccb08d},
+{'l', 0x41469ee6, 0x00000000},
+{'l', 0x00000000, 0x427fb961},
+{'l', 0x420308d4, 0xc210d3dd},
+{'l', 0x4168d3dc, 0x00000000},
+{'l', 0xc1f234f8, 0x4200469f},
+{'l', 0x41fee584, 0x422a34f7},
+{'l', 0xc168d3dc, 0x00000000},
+{'@', 0x0000006c, 0x000054c2},/*        l        x-advance: 84.757812 */
+{'M', 0x424b08d4, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3dc, 0x00000000},
+{'l', 0x00000000, 0xc2a5846a},
+{'l', 0xc19f72c1, 0x00000000},
+{'l', 0x00000000, 0xc11cb088},
+{'l', 0x4201611a, 0x00000000},
+{'l', 0x00000000, 0x42b91a7b},
+{'@', 0x0000006d, 0x000054c2},/*        m        x-advance: 84.757812 */
+{'M', 0x42127b96, 0x00000000},
+{'l', 0x00000000, 0xc23d3dcb},
+{'q', 0x00000000, 0xc129ee58},
+{0, 0xbfdcb080, 0xc16d3dcc},
+{'8', 0xdecfdef3, 0x34c700dd},
+{'9', 0x0034ffeb, 0x008fffeb},
+{'4', 0x014e0000, 0x0000ffa3},
+{'l', 0x35000000, 0xc26ac235},
+{'9', 0xff980000, 0xff81fffd},
+{'0', 0x46030052, 0x00011a00},
+{'8', 0xaf2fc812, 0xe747e71c},
+{'8', 0x1a480030, 0x51221a18},
+{'l', 0x3e0d3e00, 0x00000000},
+{'8', 0xad34c616, 0xe84de81e},
+{'q', 0x410234f8, 0x00000000},
+{0, 0x413a7b98, 0x40bdcb10},
+{'9', 0x002f001c, 0x00a2001c},
+{'4', 0x018d0000, 0x0000ffa4},
+{'l', 0x00000000, 0xc23d3dcb},
+{'q', 0x00000000, 0xc129ee58},
+{0, 0xbfdcb0c0, 0xc16d3dcc},
+{'8', 0xdecfdef3, 0x2ec700dc},
+{'9', 0x002effec, 0x008bffec},
+{'l', 0x00000000, 0x422cf72c},
+{'l', 0xc139611c, 0x00000000},
+{'@', 0x0000006e, 0x000054c2},/*        n        x-advance: 84.757812 */
+{'M', 0x426f72c2, 0x00000000},
+{'l', 0x00000000, 0xc23fb961},
+{'8', 0x91e3b500, 0xdca4dce4},
+{'q', 0xc108d3dc, 0x00000000},
+{0, 0xc1611a7c, 0x40c8d3e0},
+{'9', 0x0031ffd5, 0x0087ffd5},
+{'4', 0x01590000, 0x0000ff9d},
+{'l', 0x00000000, 0xc26ac235},
+{'9', 0xff980000, 0xff81fffd},
+{'l', 0x413b9612, 0x00000000},
+{'8', 0x0e010200, 0x1c010c00},
+{'9', 0x000f0001, 0x003b0002},
+{'l', 0x3e53dc80, 0x00000000},
+{'q', 0x40e7b964, 0xc16234f8},
+{0, 0x41bee585, 0xc16234f8},
+{'q', 0x413ee584, 0x00000000},
+{0, 0x418e5846, 0x40cf72c0},
+{'9', 0x0033002e, 0x009e002e},
+{'l', 0x00000000, 0x4246e584},
+{'l', 0xc147b960, 0x00000000},
+{'@', 0x0000006f, 0x000054c2},/*        o        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'q', 0x409cb090, 0xc0ec234e},
+{0, 0x409cb090, 0xc1b1a7ba},
+{'@', 0x00000070, 0x000054c2},/*        p        x-advance: 84.757812 */
+{'M', 0x42965847, 0xc2169ee5},
+{'q', 0x00000000, 0x421c234f},
+{0, 0xc1d846a0, 0x421c234f},
+{'9', 0x0000ff79, 0xff9bff4a},
+{'l', 0xbeb08d40, 0x00000000},
+{'9', 0x00040002, 0x005b0002},
+{'4', 0x00e90000, 0x0000ff9d},
+{'l', 0x00000000, 0xc2b0f72c},
+{'9', 0xffa30000, 0xff85fffd},
+{'l', 0x41411a7c, 0x00000000},
+{'8', 0x10010200, 0x29020d01},
+{'9', 0x001b0001, 0x00280001},
+{'l', 0x3e8d3dc0, 0x00000000},
+{'q', 0x405cb088, 0xc0e7b960},
+{0, 0x410c2350, 0xc127b960},
+{'q', 0x40ac2350, 0xc053dcc0},
+{0, 0x41600000, 0xc053dcc0},
+{'q', 0x415a7b94, 0x00000000},
+{0, 0x41a2c234, 0x41172c28},
+{'9', 0x004b0035, 0x00e80035},
+{'m', 0xc14d3dd0, 0x00000000},
+{'q', 0x00000000, 0xc179611c},
+{0, 0xc0869ee0, 0xc1b1a7ba},
+{'q', 0xc0869ee8, 0xc0d611b0},
+{0, 0xc153dcb0, 0xc0d611b0},
+{'q', 0xc1269ee8, 0x00000000},
+{0, 0xc1708d40, 0x40f2c240},
+{'q', 0xc093dcb0, 0x40f08d38},
+{0, 0xc093dcb0, 0x41b69ee4},
+{'q', 0x00000000, 0x416b08d4},
+{0, 0x4093dcb0, 0x41ac2350},
+{'q', 0x4093dcb0, 0x40da7b96},
+{0, 0x416e5848, 0x40da7b96},
+{'q', 0x4112c234, 0x00000000},
+{0, 0x415611a8, 0xc0dee584},
+{'q', 0x40869ee0, 0xc0dee586},
+{0, 0x40869ee0, 0xc1b72c22},
+{'@', 0x00000071, 0x000054c2},/*        q        x-advance: 84.757812 */
+{'M', 0x4211ee58, 0xc29772c2},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41634f74, 0x40469ee0},
+{'9', 0x0018002a, 0x004c0045},
+{'l', 0x3e0d3e00, 0x00000000},
+{'8', 0xcd01f000, 0xd704dd02},
+{'l', 0x41411a80, 0x00000000},
+{'9', 0x001dfffd, 0x009bfffd},
+{'l', 0x00000000, 0x42a91a7c},
+{'l', 0xc147b960, 0xb6800000},
+{'4', 0xff0e0000, 0xffa40002},
+{'l', 0xbe0d3e00, 0x00000000},
+{'q', 0xc069ee50, 0x40ec2350},
+{0, 0xc111a7b8, 0x412e5847},
+{'q', 0xc0ae5848, 0x405cb08d},
+{0, 0xc1600000, 0x405cb08d},
+{'q', 0xc15ee584, 0x00000000},
+{0, 0xc1a3dcb0, 0xc11a7b96},
+{'q', 0xc0d1a7ba, 0xc11b9611},
+{0, 0xc0d1a7ba, 0xc1e69ee6},
+{'9', 0xfec80000, 0xfec800d7},
+{'m', 0x41b846a0, 0x421611a7},
+{'q', 0x00000000, 0xc169ee58},
+{0, 0xc09611a8, 0xc1ab9610},
+{'q', 0xc09611a8, 0xc0dcb098},
+{0, 0xc16e5848, 0xc0dcb098},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc1572c24, 0x40e11a80},
+{'q', 0xc08469ec, 0x40e11a80},
+{0, 0xc08469ec, 0x41b34f74},
+{'q', 0x00000000, 0x4173dcb0},
+{0, 0x40869ee4, 0x41b234f6},
+{'q', 0x40869ee8, 0x40e11a7e},
+{0, 0x4153dcb0, 0x40e11a7e},
+{'q', 0x412234f8, 0x00000000},
+{0, 0x416e5848, 0xc0f08d3e},
+{'q', 0x409a7b98, 0xc0f08d3c},
+{0, 0x409a7b98, 0xc1b72c24},
+{'@', 0x00000072, 0x000054c2},/*        r        x-advance: 84.757812 */
+{'M', 0x4290234f, 0xc27d3dcb},
+{'q', 0xc0f72c20, 0xbfa7b960},
+{0, 0xc169ee54, 0xbfa7b960},
+{'q', 0xc131a7bc, 0x00000000},
+{0, 0xc18f72c2, 0x41058468},
+{'9', 0x0042ffca, 0x00a9ffca},
+{'4', 0x01180000, 0x0000ff9d},
+{'l', 0x00000000, 0xc241611a},
+{'8', 0x9ef9d700, 0x91ecc8f9},
+{'l', 0x413cb08c, 0x00000000},
+{'9', 0x004c0016, 0x0089001a},
+{'l', 0x3eb08d40, 0x00000000},
+{'8', 0xa636c31b, 0xd53ee31a},
+{'q', 0x4091a7b8, 0xbfee5840},
+{0, 0x4131a7b8, 0xbfee5840},
+{'q', 0x40e58470, 0x00000000},
+{0, 0x41634f70, 0x3f9611c0},
+{'l', 0x00000000, 0x4138469c},
+{'@', 0x00000073, 0x000054c2},/*        s        x-advance: 84.757812 */
+{'M', 0x429234f7, 0xc1aa7b96},
+{'q', 0x00000000, 0x4129ee58},
+{0, 0xc1011a78, 0x4185846a},
+{'q', 0xc1000004, 0x40c00000},
+{0, 0xc1b1a7ba, 0x40c00000},
+{'q', 0xc1634f74, 0xb4800000},
+{0, 0xc1ad3dcc, 0xc08d3dcc},
+{'9', 0xffddffc5, 0xff90ffb3},
+{'l', 0x412f72c3, 0xc008d3d8},
+{'q', 0x3fa7b960, 0x40bdcb08},
+{0, 0x40b2c234, 0x410b08d3},
+{'q', 0x408b08d0, 0x402c2350},
+{0, 0x416c2350, 0x402c2350},
+{'q', 0x4194f72c, 0x00000000},
+{0, 0x4194f72c, 0xc13cb08d},
+{'8', 0xc8e5dd00, 0xddaeeae5},
+{'q', 0xc191a7b9, 0xc08f72c0},
+{0, 0xc1b8d3dc, 0xc0e11a80},
+{'8', 0xcec4ecd9, 0xb4ece2ec},
+{'q', 0x00000000, 0xc12234f4},
+{0, 0x40e9ee5a, 0xc17dcb04},
+{'q', 0x40e9ee58, 0xc0b72c30},
+{0, 0x41a9611b, 0xc0b72c30},
+{'q', 0x414234f4, 0x00000000},
+{0, 0x419b08d2, 0x4093dcb0},
+{'9', 0x00240039, 0x006a0048},
+{'l', 0xc132c234, 0x3fb08d40},
+{'8', 0xc4d9d9fa, 0xec9eecdf},
+{'q', 0xc1872c24, 0x00000000},
+{0, 0xc1872c24, 0x41269ee8},
+{'8', 0x34162100, 0x20491317},
+{'l', 0x41034f70, 0x4008d3e0},
+{'q', 0x4133dcb4, 0x40308d40},
+{0, 0x41811a7c, 0x40ae5848},
+{'8', 0x363e1527, 0x4e162016},
+{'@', 0x00000074, 0x000054c2},/*        t        x-advance: 84.757812 */
+{'M', 0x4151a7b9, 0xc281a7b9},
+{'l', 0x00000000, 0xc11cb090},
+{'l', 0x413b9611, 0x00000000},
+{'l', 0x40800000, 0xc19b9610},
+{'l', 0x410469ee, 0x00000000},
+{'l', 0x00000000, 0x419b9610},
+{'l', 0x41ee5848, 0x00000000},
+{'4', 0x004e0000, 0x0000ff12},
+{'l', 0x00000000, 0x4233dcb0},
+{'8', 0x40172b00, 0x144d1417},
+{'9', 0x00000049, 0xffee00a3},
+{'l', 0x00000000, 0x41172c24},
+{'q', 0xc13a7b98, 0x404b08d2},
+{0, 0xc1b8d3de, 0x404b08d2},
+{'q', 0xc132c234, 0xb4000000},
+{0, 0xc18611a7, 0xc09611a8},
+{'9', 0xffdaffd4, 0xff89ffd4},
+{'l', 0x00000000, 0xc2391a7b},
+{'l', 0xc139611b, 0x00000000},
+{'@', 0x00000075, 0x000054c2},/*        u        x-advance: 84.757812 */
+{'M', 0x41c9611a, 0xc2953dcb},
+{'l', 0x00000000, 0x423d3dcb},
+{'q', 0x00000000, 0x412c2350},
+{0, 0x405846a0, 0x416f72c2},
+{'q', 0x405846a0, 0x408469ee},
+{0, 0x41411a7c, 0x408469ee},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41611a7c, 0xc0c234f6},
+{'9', 0xffd00029, 0xff780029},
+{'4', 0xfea70000, 0x00000063},
+{'l', 0x00000000, 0x426ac235},
+{'9', 0x00680000, 0x007f0003},
+{'l', 0xc13b9614, 0x00000000},
+{'8', 0xf2fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc5ffff},
+{'l', 0xbe53dc00, 0x00000000},
+{'8', 0x57b13dde, 0x199119d4},
+{'q', 0xc14469ec, 0x00000000},
+{0, 0xc18fffff, 0xc0c234f8},
+{'9', 0xffcfffd3, 0xff5fffd3},
+{'l', 0x00000000, 0xc246e584},
+{'l', 0x41469ee5, 0x00000000},
+{'@', 0x00000076, 0x000054c2},/*        v        x-advance: 84.757812 */
+{'M', 0x42453dcb, 0x00000000},
+{'l', 0xc16b08d4, 0x00000000},
+{'l', 0xc1eee584, 0xc2953dcb},
+{'l', 0x415ee584, 0x00000000},
+{'l', 0x4193dcb0, 0x424234f7},
+{'0', 0x651c1d09, 0xbf15c013},
+{'l', 0x4198469e, 0xc242c235},
+{'l', 0x415dcb10, 0x00000000},
+{'l', 0xc1f4f72e, 0x42953dcb},
+{'@', 0x00000077, 0x000054c2},/*        w        x-advance: 84.757812 */
+{'M', 0x428c69ee, 0x00000000},
+{'l', 0xc1611a78, 0x00000000},
+{'l', 0xc11dcb08, 0xc201ee58},
+{'l', 0xc07b9620, 0xc15ee584},
+{'l', 0xc02c2350, 0x41196118},
+{'l', 0xc1396118, 0x42134f73},
+{'l', 0xc1600000, 0x00000000},
+{'4', 0xfdacff9c, 0x00000062},
+{'l', 0x40cd3dcc, 0x422772c2},
+{'q', 0x4011a7b8, 0x4191a7ba},
+{0, 0x4011a7b8, 0x41b3dcb1},
+{'9', 0xffa80015, 0xff8a0020},
+{'4', 0xff17004a, 0x0000006a},
+{'l', 0x410f72c4, 0x41ea7b97},
+{'q', 0x400d3dd0, 0x40e7b960},
+{0, 0x4072c230, 0x416b08d4},
+{'8', 0xd702f000, 0xce05e802},
+{'8', 0xce06e603, 0xdb04e903},
+{'l', 0x40dee590, 0xc22772c2},
+{'l', 0x414234f0, 0x00000000},
+{'l', 0xc151a7b8, 0x42953dcb},
+{'@', 0x00000078, 0x000054c2},/*        x        x-advance: 84.757812 */
+{'M', 0x42808d3e, 0x00000000},
+{'l', 0xc1b11a7c, 0xc1f4f72c},
+{'l', 0xc1b234f8, 0x41f4f72c},
+{'l', 0xc15611a7, 0x00000000},
+{'l', 0x41e4f72c, 0xc219611a},
+{'l', 0xc1db08d3, 0xc2111a7c},
+{'l', 0x415b9612, 0x00000000},
+{'l', 0x41a5846a, 0x41e8469e},
+{'l', 0x41a469ee, 0xc1e8469e},
+{'l', 0x415dcb0c, 0x00000000},
+{'l', 0xc1db08d6, 0x42108d3e},
+{'l', 0x41e7b962, 0x4219ee58},
+{'l', 0xc15dcb08, 0x00000000},
+{'@', 0x00000079, 0x000054c2},/*        y        x-advance: 84.757812 */
+{'M', 0x41a11a7c, 0x41ea7b96},
+{'9', 0x0000ffd8, 0xfffaffbc},
+{'l', 0x00000000, 0xc114f72c},
+{'8', 0x032e0314, 0xe051002b},
+{'9', 0xffe00026, 0xff990041},
+{'l', 0x3f9ee5a0, 0xc058469e},
+{'4', 0xfdb2fefd, 0x00000069},
+{'l', 0x4191a7b9, 0x42311a7c},
+{'9', 0x007b0032, 0x008c0036},
+{'l', 0x4034f730, 0xc0f2c234},
+{'4', 0xfe4f00ab, 0x00000068},
+{'l', 0xc1fb9610, 0x42953dcb},
+{'q', 0xc0c469f0, 0x4181a7b9},
+{0, 0xc14c2350, 0x41b611a8},
+{'q', 0xc0d1a7b8, 0x40d1a7b8},
+{0, 0xc17b9610, 0x40d1a7b8},
+{'@', 0x0000007a, 0x000054c2},/*        z        x-advance: 84.757812 */
+{'M', 0x412234f7, 0x00000000},
+{'l', 0x00000000, 0xc1172c23},
+{'l', 0x423bdcb0, 0xc25e5847},
+{'l', 0xc230d3dc, 0x00000000},
+{'l', 0xb5800000, 0xc1196118},
+{'l', 0x4268d3dc, 0x00000000},
+{'l', 0x00000000, 0x41172c20},
+{'l', 0xc23c234f, 0x425e5848},
+{'l', 0x42465847, 0xb6000000},
+{'l', 0x00000000, 0x4119611a},
+{'l', 0xc27e11a8, 0x00000000},
+{'@', 0x0000007b, 0x000054c2},/*        {        x-advance: 84.757812 */
+{'M', 0x425b9612, 0x41ea7b96},
+{'q', 0xc10f72c4, 0x00000000},
+{0, 0xc169ee58, 0xc0b9611c},
+{'9', 0xffd2ffd3, 0xff88ffd3},
+{'l', 0x00000000, 0xc1c1a7b9},
+{'8', 0xa4d8c500, 0xdd91dfd8},
+{'l', 0x00000000, 0xc1172c22},
+{'8', 0xdc6ffe47, 0xa528df28},
+{'l', 0x00000000, 0xc1c234f6},
+{'q', 0x00000000, 0xc1172c28},
+{0, 0x40b2c238, 0xc172c238},
+{'9', 0xffd3002c, 0xffd30075},
+{'4', 0x00000092, 0x004c0000},
+{'l', 0xc16b08d8, 0x00000000},
+{'8', 0x18b800ce, 0x53ea18ea},
+{'l', 0x00000000, 0x41bee582},
+{'8', 0x5fdd3600, 0x36a428dd},
+{'l', 0x00000000, 0x3e0d3e00},
+{'8', 0x365b0d38, 0x61232823},
+{'l', 0x00000000, 0x41bf72c2},
+{'8', 0x53163a00, 0x18481816},
+{'l', 0x416b08d8, 0x00000000},
+{'l', 0x00000000, 0x4119611a},
+{'l', 0xc19234f8, 0x00000000},
+{'@', 0x0000007c, 0x000054c2},/*        |        x-advance: 84.757812 */
+{'M', 0x42127b96, 0x41ea7b96},
+{'l', 0x00000000, 0xc303a7b9},
+{'l', 0x41372c24, 0xb7000000},
+{'l', 0x00000000, 0x4303a7b9},
+{'l', 0xc1372c24, 0x36800000},
+{'@', 0x0000007d, 0x000054c2},/*        }        x-advance: 84.757812 */
+{'M', 0x4138469f, 0x41ea7b96},
+{'4', 0xffb40000, 0x00000075},
+{'8', 0xe8480032, 0xad16e816},
+{'l', 0x00000000, 0xc1bf72c2},
+{'8', 0x9f23c800, 0xca5bd823},
+{'l', 0x00000000, 0xbe0d3e00},
+{'8', 0xc9a5f3c8, 0xa2ddd7dd},
+{'l', 0x00000000, 0xc1bee582},
+{'8', 0xaeeac700, 0xe8b8e8ea},
+{'4', 0x0000ff8b, 0xffb40000},
+{'l', 0x419234f8, 0x00000000},
+{'q', 0x4112c234, 0x00000000},
+{0, 0x416b08d0, 0x40b72c20},
+{'9', 0x002d002c, 0x0079002c},
+{'l', 0x00000000, 0x41c234f6},
+{'8', 0x5b283900, 0x236f2128},
+{'l', 0x00000000, 0x41172c22},
+{'q', 0xc10f72c4, 0x3eb08d40},
+{0, 0xc1600004, 0x4091a7bc},
+{'9', 0x0021ffd9, 0x005bffd9},
+{'l', 0x00000000, 0x41c1a7b9},
+{'q', 0x00000000, 0x4114f72d},
+{0, 0xc0b4f730, 0x4171a7b9},
+{'q', 0xc0b4f728, 0x40b9611c},
+{0, 0xc169ee56, 0x40b9611c},
+{'l', 0xc19234f8, 0x00000000},
+{'@', 0x0000007e, 0x000054c2},/*        ~        x-advance: 84.757812 */
+{'M', 0x41ccb08d, 0xc25e9ee5},
+{'q', 0x40e11a7c, 0x00000000},
+{0, 0x4181a7b9, 0x404b08d0},
+{'8', 0x21681c51, 0x052c0518},
+{'9', 0x00000047, 0xffce0086},
+{'l', 0x00000000, 0x412469f0},
+{'8', 0x21bf17df, 0x0ab20ae1},
+{'8', 0xf4b200da, 0xe6b0f4d9},
+{'q', 0xc10e5848, 0xc0469ee0},
+{0, 0xc16f72c4, 0xc0469ee0},
+{'8', 0x0bbc00dc, 0x24bd0be0},
+{'l', 0xb5000000, 0xc11dcb08},
+{'q', 0x40f4f72b, 0xc0b96118},
+{0, 0x41911a7b, 0xc0b96118},
+{'@', 0x000000a0, 0x000054c2},/*                 x-advance: 84.757812 */
+{'@', 0x000000a1, 0x000054c2},/*        ¡        x-advance: 84.757812 */
+{'M', 0x4214b08d, 0xc23cf72c},
+{'l', 0x41234f74, 0x00000000},
+{'4', 0x020c000d, 0x0000ff94},
+{'6', 0xfdf4000d, 0xff250060},
+{'0', 0x00956e00, 0x006b9200},
+{'@', 0x000000a2, 0x000054c2},/*        ¢        x-advance: 84.757812 */
+{'M', 0x422f2c23, 0xc19469ee},
+{'8', 0xe266003e, 0xa832e228},
+{'l', 0x4148d3d8, 0x3f53dcc0},
+{'q', 0xbfb96100, 0x411cb08e},
+{0, 0xc10d3dc8, 0x41811a7c},
+{'9', 0x0032ffc5, 0x003aff6d},
+{'4', 0x006b0000, 0x0000ffba},
+{'l', 0x00000000, 0xc1572c24},
+{'q', 0xc165846a, 0xbf8469e0},
+{0, 0xc1b234f7, 0xc127b960},
+{'q', 0xc0fb9612, 0xc118469e},
+{0, 0xc0fb9612, 0xc1cc234f},
+{'q', 0x00000000, 0xc18469ee},
+{0, 0x40fffffe, 0xc1d1a7b8},
+{'9', 0xffb30040, 0xffa900b1},
+{'4', 0xff9b0000, 0x00000046},
+{'l', 0x00000000, 0x414b08d0},
+{'q', 0x412d3dc8, 0x3f658480},
+{0, 0x418ee584, 0x40d846a0},
+{'9', 0x002e0038, 0x007b0048},
+{'l', 0xc14c2350, 0x3f772c40},
+{'8', 0xb0d3cef7, 0xe399e3dd},
+{'q', 0xc12c234c, 0x00000000},
+{0, 0xc182c234, 0x40dee580},
+{'q', 0xc0b08d3c, 0x40dcb090},
+{0, 0xc0b08d3c, 0x419f72c2},
+{'q', 0x00000000, 0x415a7b98},
+{0, 0x40b96118, 0x41a4f72c},
+{'q', 0x40b9611c, 0x40dcb090},
+{0, 0x4181a7b9, 0x40dcb090},
+{'@', 0x000000a3, 0x000054c2},/*        £        x-advance: 84.757812 */
+{'M', 0x42a1846a, 0xc18469ee},
+{'9', 0x0084ffe5, 0x0084ff7f},
+{'4', 0x0000fe1a, 0xffac0000},
+{'8', 0xd343e830, 0xcc1deb13},
+{'9', 0xffe1000a, 0xffb4000a},
+{'0', 0x009ab300, 0x0066b200},
+{'l', 0x00000000, 0xc172c238},
+{'q', 0x00000000, 0xc15611a8},
+{0, 0x40ee5848, 0xc1a2c234},
+{'q', 0x40f08d40, 0xc0dee580},
+{0, 0x41ad3dca, 0xc0dee580},
+{'q', 0x4128d3dc, 0x00000000},
+{0, 0x418cb08e, 0x40869ee0},
+{'9', 0x00210038, 0x005d004b},
+{'l', 0xc1400000, 0x407b9620},
+{'8', 0xccd4def4, 0xefb5efe0},
+{'8', 0x209c00bd, 0x64df1fdf},
+{'l', 0x00000000, 0x416e5848},
+{'l', 0x41e11a7b, 0x00000000},
+{'4', 0x004e0000, 0x0000ff1f},
+{'l', 0x00000000, 0x4119611c},
+{'8', 0x6eed4600, 0x3fbf27ed},
+{'l', 0x4225846a, 0x00000000},
+{'8', 0xf2300020, 0xd416f210},
+{'l', 0x41396118, 0x3fd3dcb0},
+{'@', 0x000000a4, 0x000054c2},/*        ¤        x-advance: 84.757812 */
+{'M', 0x4148d3dd, 0xc23cb08d},
+{'9', 0xffb40000, 0xff75002b},
+{'4', 0xffc9ffc9, 0xffc80039},
+{'l', 0x40da7b98, 0x40dee590},
+{'q', 0x40fb9614, 0xc0b4f730},
+{0, 0x418c234f, 0xc0b4f730},
+{'9', 0x0000004b, 0x002c008a},
+{'4', 0xffcb0035, 0x00390039},
+{'l', 0xc0d3dcb0, 0x40d3dcb0},
+{'q', 0x40b08d40, 0x41011a80},
+{0, 0x40b08d40, 0x418b08d6},
+{'9', 0x004c0000, 0x008bffd3},
+{'4', 0x00370037, 0x0039ffc8},
+{'l', 0xc0dee580, 0xc0dee584},
+{'q', 0xc0fb9610, 0x40ac2350},
+{0, 0xc18a7b96, 0x40ac2350},
+{'9', 0x0000ffb2, 0xffd4ff75},
+{'4', 0x0039ffc7, 0xffc7ffc8},
+{'l', 0x40e11a7a, 0xc0e11a7c},
+{'9', 0xffc2ffd5, 0xff75ffd5},
+{'m', 0x4129ee57, 0xbe0d3e00},
+{'8', 0x6c2d3e00, 0x2d6d2d2d},
+{'8', 0xd46c003e, 0x932dd42d},
+{'8', 0x93d3c000, 0xd394d3d3},
+{'8', 0x2e9300c0, 0x6cd32dd3},
+{'@', 0x000000a5, 0x000054c2},/*        ¥        x-advance: 84.757812 */
+{'M', 0x4252c235, 0xc23b4f73},
+{'l', 0x41b11a7a, 0x00000000},
+{'l', 0x00000000, 0x411cb090},
+{'l', 0xc1d34f72, 0x00000000},
+{'l', 0x00000000, 0x41172c22},
+{'l', 0x41d34f72, 0x00000000},
+{'l', 0x00000000, 0x411ee584},
+{'l', 0xc1d34f72, 0x00000000},
+{'l', 0x00000000, 0x418d3dcb},
+{'l', 0xc14469ec, 0x00000000},
+{'l', 0x00000000, 0xc18d3dcb},
+{'l', 0xc1d234f8, 0x00000000},
+{'l', 0x35800000, 0xc11ee584},
+{'l', 0x41d234f8, 0x00000000},
+{'l', 0x3e0d3e00, 0xc1172c22},
+{'l', 0xc1d34f74, 0x00000000},
+{'l', 0x35800000, 0xc11cb090},
+{'l', 0x41b08d3e, 0x00000000},
+{'l', 0xc1e2c235, 0xc238d3dd},
+{'l', 0x415b9612, 0x00000000},
+{'l', 0x41c72c24, 0x422a34f8},
+{'l', 0x41c9611a, 0xc22a34f8},
+{'l', 0x415b9610, 0x00000000},
+{'l', 0xc1e34f72, 0x4238d3dd},
+{'@', 0x000000a6, 0x000054c2},/*        ¦        x-advance: 84.757812 */
+{'M', 0x42127b96, 0x41fb08d4},
+{'l', 0x00000000, 0xc256e584},
+{'4', 0x0000005b, 0x01ad0000},
+{'6', 0x0000ffa5, 0xfd900000},
+{'l', 0x00000000, 0xc2569ee6},
+{'l', 0x41372c24, 0x00000000},
+{'l', 0x00000000, 0x42569ee6},
+{'l', 0xc1372c24, 0x00000000},
+{'@', 0x000000a7, 0x000054c2},/*        §        x-advance: 84.757812 */
+{'M', 0x422e5847, 0xc2ccb08d},
+{'q', 0x413ee584, 0x00000000},
+{0, 0x4199ee58, 0x4093dcb0},
+{'9', 0x0024003b, 0x006a0049},
+{'l', 0xc131a7b8, 0x3fb08d40},
+{'8', 0xbfd5d5f9, 0xeaa1eadd},
+{'8', 0x189800bc, 0x3fdd18dd},
+{'8', 0x2d101a00, 0x212e1310},
+{'q', 0x40772c20, 0x3fe58480},
+{0, 0x414d3dcc, 0x407b9600},
+{'q', 0x412234f4, 0x401a7ba0},
+{0, 0x4178469c, 0x40a9ee60},
+{'8', 0x3742162b, 0x4d172017},
+{'8', 0x60df3600, 0x36a929e0},
+{'8', 0x3e591a3d, 0x551c231c},
+{'q', 0x00000000, 0x41234f73},
+{0, 0xc1000000, 0x41808d3e},
+{'q', 0xc0fdcb08, 0x40b9611a},
+{0, 0xc1b34f72, 0x40b9611a},
+{'q', 0xc1669ee6, 0x00000000},
+{0, 0xc1b00001, 0xc091a7ba},
+{'9', 0xffdcffc4, 0xff8fffb2},
+{'l', 0x4131a7ba, 0xc008d3e0},
+{'q', 0x3fb08d40, 0x40cd3dcc},
+{0, 0x40c8d3dc, 0x4118469f},
+{'q', 0x409ee584, 0x40469ee6},
+{0, 0x4167b962, 0x40469ee6},
+{'q', 0x41108d3c, 0x00000000},
+{0, 0x41634f70, 0xc053dcb1},
+{'8', 0xb729e629, 0xccefe200},
+{'q', 0xc00d3dd0, 0xc02c2354},
+{0, 0xc0c8d3e0, 0xc093dcb2},
+{'q', 0xc0800000, 0xbff72c20},
+{0, 0xc16f72c0, 0xc093dcb0},
+{'q', 0xc1572c24, 0xc0469ee8},
+{0, 0xc19a7b96, 0xc107b960},
+{'8', 0x98d2d5d2, 0xa721cf00},
+{'8', 0xc75cd822, 0xcaadefcc},
+{'q', 0xc072c230, 0xc093dcb0},
+{0, 0xc072c230, 0xc128d3d8},
+{'q', 0x00000000, 0xc1196120},
+{0, 0x40e7b960, 0xc16e5848},
+{'9', 0xffd5003a, 0xffd500aa},
+{'m', 0x4199611a, 0x42627b96},
+{'q', 0x00000000, 0xc09ee588},
+{0, 0xc09a7b98, 0xc108d3e0},
+{'q', 0xc09846a0, 0xc0658460},
+{0, 0xc1872c24, 0xc0cd3dc8},
+{'8', 0x20a103c4, 0x4bdd1ddd},
+{'8', 0x2f101b00, 0x222e1310},
+{'8', 0x21660e1e, 0xe466ff41},
+{'q', 0x409611a8, 0xc0611a80},
+{0, 0x409611a8, 0xc11611a8},
+{'@', 0x000000a8, 0x000054c2},/*        ¨        x-advance: 84.757812 */
+{'M', 0x41b8d3dd, 0xc2a8234f},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000a9, 0x000054c2},/*        ©        x-advance: 84.757812 */
+{'M', 0x42a51a7c, 0xc251ee58},
+{'q', 0x00000000, 0x417a7b94},
+{0, 0xc09cb090, 0x41d7b961},
+{'q', 0xc09cb090, 0x4133dcb0},
+{0, 0xc1600004, 0x4188d3dc},
+{'q', 0xc111a7b8, 0x40b9611c},
+{0, 0xc1aa7b96, 0x40b9611c},
+{'q', 0xc1434f70, 0xb4800000},
+{0, 0xc1aa7b95, 0xc0bb9612},
+{'q', 0xc1108d3e, 0xc0bdcb08},
+{0, 0xc1600000, 0xc189611a},
+{'q', 0xc09cb08e, 0xc133dcb4},
+{0, 0xc09cb08e, 0xc1d69ee6},
+{'q', 0x34800000, 0xc1796118},
+{0, 0x409cb08e, 0xc1d69ee4},
+{'q', 0x409cb08c, 0xc133dcb8},
+{0, 0x41600000, 0xc188d3e0},
+{'q', 0x4112c234, 0xc0bdcb00},
+{0, 0x41aa7b95, 0xc0bdcb00},
+{'q', 0x414234f8, 0x00000000},
+{0, 0x41a9ee5a, 0x40bb9610},
+{'q', 0x4112c234, 0x40bb9610},
+{0, 0x41611a7c, 0x4188d3dc},
+{'9', 0x00590027, 0x00d70027},
+{'m', 0xc0cb08e0, 0x00000000},
+{'q', 0x00000000, 0xc1a611a8},
+{0, 0xc10f72c0, 0xc2000000},
+{'q', 0xc10f72c0, 0xc134f730},
+{0, 0xc1c72c24, 0xc134f730},
+{'q', 0xc1269ee4, 0x00000000},
+{0, 0xc18fffff, 0x40a11a80},
+{'q', 0xc0f08d40, 0x409ee580},
+{0, 0xc139611b, 0x416c2350},
+{'q', 0xc08234f6, 0x411b9610},
+{0, 0xc08234f6, 0x41bc2350},
+{'q', 0x00000000, 0x41a4f72c},
+{0, 0x410c2350, 0x41ffffff},
+{'q', 0x410d3dca, 0x413611a9},
+{0, 0x41c72c22, 0x413611a9},
+{'q', 0x41808d3e, 0x00000000},
+{0, 0x41c7b960, 0xc134f72d},
+{'9', 0xffa60047, 0xff000047},
+{'m', 0xc24308d3, 0xbe0d3e00},
+{'q', 0x00000000, 0x4128d3dc},
+{0, 0x408234f4, 0x418469ee},
+{'8', 0x2f5b2f20, 0xec3e0023},
+{'9', 0xffec001a, 0xffbf002d},
+{'l', 0x40fdcb08, 0x401a7ba0},
+{'8', 0x5eb941e4, 0x1d9c1dd7},
+{'q', 0xc139611c, 0x00000000},
+{0, 0xc1900001, 0xc0f9611c},
+{'q', 0xc0cb08d4, 0xc0fb9610},
+{0, 0xc0cb08d4, 0xc1aee584},
+{'q', 0x00000000, 0xc15ee588},
+{0, 0x40c469f0, 0xc1acb08c},
+{'q', 0x40c469ec, 0xc0f4f730},
+{0, 0x418dcb08, 0xc0f4f730},
+{'9', 0x00000077, 0x007300a7},
+{'l', 0xc0fb9610, 0x4011a7a0},
+{'8', 0xc8d7dcf2, 0xedc3ede6},
+{'q', 0xc0ec2350, 0x00000000},
+{0, 0xc133dcb0, 0x40b2c230},
+{'q', 0xc0772c20, 0x40b08d40},
+{0, 0xc0772c20, 0x41834f74},
+{'@', 0x000000aa, 0x000054c2},/*        ª        x-advance: 84.757812 */
+{'M', 0x41634f73, 0xc2700000},
+{'q', 0x00000000, 0xc1011a78},
+{0, 0x40c69ee6, 0xc14469f0},
+{'9', 0xffde0031, 0xffdd0093},
+{'4', 0xfffe0069, 0xffe90000},
+{'8', 0x9c9d9c00, 0x12b900d2},
+{'9', 0x0012ffe7, 0x003dffe1},
+{'l', 0xc12469ee, 0xbf308d80},
+{'q', 0x3f9ee580, 0xc0e9ee50},
+{0, 0x40e9ee58, 0xc1372c20},
+{'q', 0x40c234f4, 0xc08469f0},
+{0, 0x41811a7b, 0xc08469f0},
+{'q', 0x4128d3dc, 0x00000000},
+{0, 0x418234f8, 0x4093dcb0},
+{'9', 0x0024002d, 0x006e002d},
+{'l', 0x00000000, 0x41a08d3c},
+{'8', 0x30082000, 0x10201008},
+{'9', 0x0000000d, 0xfffc001b},
+{'l', 0x00000000, 0x40cf72c0},
+{'8', 0x07c807e5, 0xa8a800ac},
+{'l', 0xbe8d3d80, 0x00000000},
+{'8', 0x43c02ae9, 0x18a018d8},
+{'8', 0xe19800be, 0xa7dbe1db},
+{'m', 0x412234f7, 0xbfb08d40},
+{'8', 0x37162300, 0x143d1416},
+{'8', 0xee450026, 0xd032ee20},
+{'9', 0xffe20012, 0xffc40012},
+{'4', 0xffe40000, 0x0002ffac},
+{'8', 0x149801b9, 0x38e012e0},
+{'@', 0x000000ab, 0x000054c2},/*        «        x-advance: 84.757812 */
+{'M', 0x4281a7b9, 0xc11b9612},
+{'l', 0xc1ba7b94, 0xc1c9611b},
+{'l', 0x00000000, 0xc08b08d0},
+{'l', 0x41ba7b94, 0xc1ccb08c},
+{'l', 0x414469f0, 0x00000000},
+{'l', 0x00000000, 0x4008d3d0},
+{'l', 0xc1ba7b96, 0x41cd3dcc},
+{'4', 0x00ca00bb, 0x00100000},
+{'6', 0x0000ff9d, 0x0000fef9},
+{'l', 0xc1b9611a, 0xc1c9611b},
+{'l', 0xb5800000, 0xc08b08d0},
+{'l', 0x41b9611a, 0xc1ccb08c},
+{'l', 0x41434f74, 0x00000000},
+{'l', 0x00000000, 0x4008d3d0},
+{'l', 0xc1b8d3dd, 0x41cd3dcc},
+{'l', 0x41b9ee59, 0x41ca7b95},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc145846c, 0x00000000},
+{'@', 0x000000ac, 0x000054c2},/*        ¬        x-advance: 84.757812 */
+{'M', 0x42853dcb, 0xc1469ee5},
+{'l', 0x00000000, 0xc1ec2350},
+{'l', 0xc26a7b96, 0x00000000},
+{'l', 0x00000000, 0xc1211a7c},
+{'l', 0x42893dcb, 0x00000000},
+{'l', 0x00000000, 0x421e5847},
+{'l', 0xc1200000, 0xb5800000},
+{'@', 0x000000ad, 0x000054c2},/*        ­        x-advance: 84.757812 */
+{'M', 0x41b8469f, 0xc2000000},
+{'l', 0x00000000, 0xc1308d3c},
+{'l', 0x421a7b96, 0x00000000},
+{'l', 0xb6800000, 0x41308d3c},
+{'l', 0xc21a7b96, 0x00000000},
+{'@', 0x000000ae, 0x000054c2},/*        ®        x-advance: 84.757812 */
+{'M', 0x42a51a7c, 0xc251ee58},
+{'q', 0x00000000, 0x417a7b94},
+{0, 0xc09cb090, 0x41d7b961},
+{'q', 0xc09cb090, 0x4133dcb0},
+{0, 0xc1600004, 0x4188d3dc},
+{'q', 0xc111a7b8, 0x40b9611c},
+{0, 0xc1aa7b96, 0x40b9611c},
+{'q', 0xc1434f70, 0xb4800000},
+{0, 0xc1aa7b95, 0xc0bb9612},
+{'q', 0xc1108d3e, 0xc0bdcb08},
+{0, 0xc1600000, 0xc189611a},
+{'q', 0xc09cb08e, 0xc133dcb4},
+{0, 0xc09cb08e, 0xc1d69ee6},
+{'q', 0x34800000, 0xc1796118},
+{0, 0x409cb08e, 0xc1d69ee4},
+{'q', 0x409cb08c, 0xc133dcb8},
+{0, 0x41600000, 0xc188d3e0},
+{'q', 0x4112c234, 0xc0bdcb00},
+{0, 0x41aa7b95, 0xc0bdcb00},
+{'q', 0x414234f8, 0x00000000},
+{0, 0x41a9ee5a, 0x40bb9610},
+{'q', 0x4112c234, 0x40bb9610},
+{0, 0x41611a7c, 0x4188d3dc},
+{'9', 0x00590027, 0x00d70027},
+{'m', 0xc0cb08e0, 0x00000000},
+{'q', 0x00000000, 0xc1a611a8},
+{0, 0xc10f72c0, 0xc2000000},
+{'q', 0xc10f72c0, 0xc134f730},
+{0, 0xc1c72c24, 0xc134f730},
+{'q', 0xc1269ee4, 0x00000000},
+{0, 0xc18fffff, 0x40a11a80},
+{'q', 0xc0f08d40, 0x409ee580},
+{0, 0xc139611b, 0x416c2350},
+{'q', 0xc08234f6, 0x411b9610},
+{0, 0xc08234f6, 0x41bc2350},
+{'q', 0x00000000, 0x41a4f72c},
+{0, 0x410c2350, 0x41ffffff},
+{'q', 0x410d3dca, 0x413611a9},
+{0, 0x41c72c22, 0x413611a9},
+{'q', 0x41808d3e, 0x00000000},
+{0, 0x41c7b960, 0xc134f72d},
+{'9', 0xffa60047, 0xff000047},
+{'m', 0xc19ffffe, 0x41e69ee5},
+{'l', 0xc15b9614, 0xc1b9611b},
+{'l', 0xc131a7b8, 0x00000000},
+{'l', 0x00000000, 0x41b9611b},
+{'4', 0x0000ffba, 0xfe360000},
+{'l', 0x41a9611a, 0x00000000},
+{'q', 0x411cb090, 0x00000000},
+{0, 0x416f72c4, 0x408b08d0},
+{'8', 0x60292229, 0x5ae43800},
+{'9', 0x0021ffe4, 0x002cffb5},
+{'4', 0x00c10079, 0x0000ffb1},
+{'m', 0xbf772c40, 0xc2234f72},
+{'8', 0xc7e6da00, 0xedbaede7},
+{'4', 0x0000ffa3, 0x00a60000},
+{'l', 0x4148d3dc, 0x00000000},
+{'8', 0xe943002c, 0xbf17e917},
+{'@', 0x000000af, 0x000054c2},/*        ¯        x-advance: 84.757812 */
+{'M', 0xbeb08d3e, 0xc2d1ee58},
+{'l', 0x00000000, 0xc0d3dcb0},
+{'l', 0x42aac235, 0x00000000},
+{'l', 0x00000000, 0x40d3dcb0},
+{'l', 0xc2aac235, 0x00000000},
+{'@', 0x000000b0, 0x000054c2},/*        °        x-advance: 84.757812 */
+{'M', 0x42788d3e, 0xc295a7b9},
+{'8', 0x6fd24100, 0x2d912dd2},
+{'8', 0xd29100bf, 0x92d2d2d2},
+{'q', 0x00000000, 0xc1011a80},
+{0, 0x40b72c24, 0xc15dcb08},
+{'q', 0x40b9611c, 0xc0b96120},
+{0, 0x41611a7a, 0xc0b96120},
+{'q', 0x410469f0, 0x00000000},
+{0, 0x41600000, 0x40b72c20},
+{'9', 0x002d002e, 0x006f002e},
+{'m', 0xc0f08d40, 0x00000000},
+{'8', 0xbae4d700, 0xe4bbe4e4},
+{'8', 0x1dba00d7, 0x46e41de4},
+{'8', 0x461c2800, 0x1d451d1d},
+{'8', 0xe4450028, 0xba1ce31c},
+{'@', 0x000000b1, 0x000054c2},/*        ±        x-advance: 84.757812 */
+{'M', 0x423d846a, 0xc23b9612},
+{'l', 0x00000000, 0x41d9ee59},
+{'l', 0xc12234f8, 0x00000000},
+{'l', 0x00000000, 0xc1d9ee59},
+{'l', 0xc1e9ee58, 0x00000000},
+{'l', 0x00000000, 0xc1200000},
+{'l', 0x41e9ee58, 0x00000000},
+{'l', 0x00000000, 0xc1d96118},
+{'l', 0x412234f8, 0x00000000},
+{'l', 0x00000000, 0x41d96118},
+{'4', 0x000000e9, 0x00500000},
+{'6', 0x0000ff17, 0x0177fec5},
+{'l', 0x00000000, 0xc1200000},
+{'l', 0x42893dcb, 0x00000000},
+{'l', 0x00000000, 0x41200000},
+{'l', 0xc2893dcb, 0x00000000},
+{'@', 0x000000b2, 0x000054c2},/*        ²        x-advance: 84.757812 */
+{'M', 0x41ad3dcb, 0xc21b4f73},
+{'l', 0xbe0d3e00, 0xc0e34f70},
+{'8', 0xb734da11, 0xb45edd23},
+{'8', 0xbd4ddc35, 0xc018e118},
+{'8', 0xcaedde00, 0xecc4eced},
+{'8', 0x14c300db, 0x39e413e8},
+{'l', 0xc112c236, 0xbf0d3e00},
+{'q', 0x3f658480, 0xc0ee5840},
+{0, 0x40d1a7bc, 0xc13ee580},
+{'q', 0x40b4f728, 0xc091a7c0},
+{0, 0x41658468, 0xc091a7c0},
+{'q', 0x41108d40, 0x00000000},
+{0, 0x41600000, 0x408d3dd0},
+{'8', 0x60282228, 0x4ee72900},
+{'8', 0x4ab224e7, 0x4c9c33b8},
+{'9', 0x0019ffe5, 0x0034ffd8},
+{'l', 0x41fd3dca, 0x00000000},
+{'l', 0x3e0d3e00, 0x40ec2350},
+{'l', 0xc22611a8, 0x00000000},
+{'@', 0x000000b3, 0x000054c2},/*        ³        x-advance: 84.757812 */
+{'M', 0x427e11a8, 0xc25b4f73},
+{'q', 0x00000000, 0x41000000},
+{0, 0xc0ac2350, 0x41469ee8},
+{'q', 0xc0a9ee58, 0x408d3dc8},
+{0, 0xc171a7bc, 0x408d3dc8},
+{'9', 0x0000ff63, 0xff83ff51},
+{'l', 0x411611a6, 0xbf658480},
+{'8', 0x4b644b09, 0xaf580058},
+{'9', 0xffb50000, 0xffb5ff98},
+{'4', 0x0000ffdf, 0xffc40000},
+{'l', 0x407b9610, 0x00000000},
+{'8', 0xed45002c, 0xc919ed19},
+{'8', 0xcdecdf00, 0xedc5edec},
+{'8', 0x13c400db, 0x37e613e9},
+{'l', 0xc114f72c, 0xbf53dc80},
+{'q', 0x3f658460, 0xc0f08d40},
+{0, 0x40c8d3dc, 0xc13a7b98},
+{'q', 0x40ae5848, 0xc08469f0},
+{0, 0x41634f74, 0xc08469f0},
+{'q', 0x410f72c0, 0x00000000},
+{0, 0x41611a78, 0x408469f0},
+{'8', 0x56282028, 0x47e92900},
+{'9', 0x001effe9, 0x0029ffb7},
+{'l', 0x00000000, 0x3e0d3e00},
+{'8', 0x224f0432, 0x4d1d1c1d},
+{'@', 0x000000b4, 0x000054c2},/*        ´        x-advance: 84.757812 */
+{'M', 0x41ddcb09, 0xc2a5a7b9},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b96, 0xc183dcb0},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a58468, 0x417dcb08},
+{'l', 0xc108d3de, 0x00000000},
+{'@', 0x000000b5, 0x000054c2},/*        µ        x-advance: 84.757812 */
+{'M', 0x427cb08d, 0x00000000},
+{'8', 0xcefdfaff, 0xc5fed4fe},
+{'l', 0xbe8d3d80, 0x00000000},
+{'q', 0xc0e9ee58, 0x4171a7ba},
+{0, 0xc1b846a0, 0x4171a7ba},
+{'8', 0xefb000d3, 0xcfccefdd},
+{'l', 0xbe8d3e00, 0x00000000},
+{'9', 0x00170002, 0x00430002},
+{'l', 0x00000000, 0x41cdcb09},
+{'l', 0xc148d3de, 0x00000000},
+{'4', 0xfcd30000, 0x00000064},
+{'l', 0x00000000, 0x4231a7ba},
+{'q', 0x00000000, 0x41aee583},
+{0, 0x4191a7b9, 0x41aee583},
+{'q', 0x41108d3c, 0x00000000},
+{0, 0x4171a7b8, 0xc0d3dcb0},
+{'9', 0xffcb0030, 0xff780030},
+{'4', 0xfeac0000, 0x00000063},
+{'l', 0x00000000, 0x426a34f7},
+{'q', 0x00000000, 0x4152c236},
+{0, 0x3ed3dd00, 0x41808d3e},
+{'l', 0xc139611c, 0x00000000},
+{'@', 0x000000b6, 0x000054c2},/*        ¶        x-advance: 84.757812 */
+{'M', 0x42832c23, 0xc2a93dcb},
+{'l', 0x00000000, 0x42d5ee58},
+{'l', 0xc111a7b8, 0x36000000},
+{'l', 0x00000000, 0xc2d5ee58},
+{'l', 0xc1596118, 0x00000000},
+{'4', 0x03570000, 0x0000ffb7},
+{'l', 0x00000000, 0xc284234f},
+{'q', 0xc1396118, 0x00000000},
+{0, 0xc19234f6, 0xc0cb08d8},
+{'q', 0xc0d611aa, 0xc0cd3dc8},
+{0, 0xc0d611aa, 0xc1911a7a},
+{'q', 0x00000000, 0xc13a7b98},
+{0, 0x40d846a0, 0xc191a7bc},
+{'9', 0xffcc0036, 0xffcc0096},
+{'l', 0x4220d3dc, 0x00000000},
+{'l', 0x00000000, 0x41069ee8},
+{'l', 0xc10e5848, 0x00000000},
+{'@', 0x000000b7, 0x000054c2},/*        ·        x-advance: 84.757812 */
+{'M', 0x4208d3dd, 0xc1e7b961},
+{'l', 0x00000000, 0xc1a4f72d},
+{'l', 0x4181a7b8, 0x00000000},
+{'l', 0x00000000, 0x41a4f72d},
+{'l', 0xc181a7b8, 0x00000000},
+{'@', 0x000000b8, 0x000054c2},/*        ¸        x-advance: 84.757812 */
+{'M', 0x42053dcb, 0x418e5847},
+{'q', 0x00000000, 0x414d3dca},
+{0, 0xc1972c24, 0x414d3dca},
+{'9', 0x0000ffe1, 0xfffeffcf},
+{'l', 0x00000000, 0xc0d846a0},
+{'8', 0x032f031b, 0xd1510051},
+{'8', 0xdfefea00, 0xf5c8f5f0},
+{'9', 0x0000ffe9, 0x0001ffe1},
+{'4', 0xff9c0023, 0x0000003b},
+{'l', 0xc02c2350, 0x40dcb08d},
+{'8', 0x184d0133, 0x3e191619},
+{'@', 0x000000b9, 0x000054c2},/*        ¹        x-advance: 84.757812 */
+{'M', 0x41a08d3e, 0xc21b4f73},
+{'4', 0xffc50000, 0x00000092},
+{'l', 0x00000000, 0xc228469f},
+{'8', 0x2dc71bf3, 0x11a411d5},
+{'l', 0x00000000, 0xc0f08d40},
+{'8', 0xed5f0036, 0xc93bec29},
+{'l', 0x4105846c, 0x00000000},
+{'l', 0x00000000, 0x424c234f},
+{'l', 0x418234f6, 0x00000000},
+{'l', 0x00000000, 0x40ec2350},
+{'l', 0xc22e5846, 0x00000000},
+{'@', 0x000000ba, 0x000054c2},/*        º        x-advance: 84.757812 */
+{'M', 0x428a34f7, 0xc28fb961},
+{'q', 0x00000000, 0x4149ee58},
+{0, 0xc0e34f70, 0x419e5846},
+{'q', 0xc0e11a80, 0x40e58468},
+{0, 0xc19ee584, 0x40e58468},
+{'q', 0xc148d3de, 0x00000000},
+{0, 0xc19cb08e, 0xc0ec2350},
+{'q', 0xc0dee584, 0xc0ec2348},
+{0, 0xc0dee584, 0xc19cb08c},
+{'q', 0x00000000, 0xc148d3e0},
+{0, 0x40e34f74, 0xc19dcb08},
+{'q', 0x40e34f74, 0xc0e58470},
+{0, 0x419dcb08, 0xc0e58470},
+{'q', 0x41508d40, 0x00000000},
+{0, 0x419ee586, 0x40dee580},
+{'9', 0x00370036, 0x009f0036},
+{'m', 0xc12469ec, 0x00000000},
+{'q', 0x00000000, 0xc1269ee8},
+{0, 0xc08469f0, 0xc1708d40},
+{'q', 0xc08469f0, 0xc093dcb0},
+{0, 0xc1400000, 0xc093dcb0},
+{'q', 0xc184f72c, 0x00000000},
+{0, 0xc184f72c, 0x419d3dcc},
+{'q', 0x00000000, 0x411a7b94},
+{0, 0x408234f8, 0x416b08d4},
+{'8', 0x285e2820, 0xdc630040},
+{'q', 0x408d3dd0, 0xc093dcb0},
+{0, 0x408d3dd0, 0xc172c234},
+{'@', 0x000000bb, 0x000054c2},/*        »        x-advance: 84.757812 */
+{'M', 0x419e5847, 0xc11b9612},
+{'l', 0xc1469ee6, 0x00000000},
+{'l', 0xb5000000, 0xc0000000},
+{'l', 0x41ba7b96, 0xc1ca7b95},
+{'l', 0xc1b9611a, 0xc1cd3dcc},
+{'l', 0xb5800000, 0xc008d3d0},
+{'l', 0x414469ef, 0x00000000},
+{'4', 0x00cc00b8, 0x00220000},
+{'6', 0x00c9ff48, 0x00000106},
+{'l', 0xc14469f0, 0x00000000},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x41ba7b96, 0xc1ca7b95},
+{'l', 0xc1b9611c, 0xc1cd3dcc},
+{'l', 0x00000000, 0xc008d3d0},
+{'l', 0x414234f8, 0x00000000},
+{'l', 0x41ba7b96, 0x41ccb08c},
+{'l', 0x00000000, 0x408b08d0},
+{'l', 0xc1ba7b96, 0x41c9611b},
+{'@', 0x000000bc, 0x000054c2},/*        ¼        x-advance: 84.757812 */
+{'M', 0x408b08d4, 0xc2227b96},
+{'4', 0xffc50000, 0x0000004a},
+{'l', 0x00000000, 0xc20d846a},
+{'8', 0x24d815f5, 0x0fca0fe3},
+{'l', 0xb4000000, 0xc1034f78},
+{'8', 0xef38001b, 0xd22bef1c},
+{'l', 0x4105846a, 0x00000000},
+{'l', 0x00000000, 0x42342350},
+{'4', 0x00000040, 0x003b0000},
+{'6', 0x0000ff2e, 0x0144008e},
+{'l', 0xc10234f6, 0x00000000},
+{'4', 0xfd180183, 0x0000003f},
+{'6', 0x02e8fe7e, 0xffa701b1},
+{'l', 0x00000000, 0x4131a7b9},
+{'l', 0xc10c2350, 0x34d40000},
+{'l', 0x00000000, 0xc131a7b9},
+{'l', 0xc1cee584, 0x00000000},
+{'l', 0x00000000, 0xc0da7b96},
+{'l', 0x41c72c24, 0xc20a7b96},
+{'l', 0x411b9610, 0x00000000},
+{'l', 0x00000000, 0x4209ee58},
+{'4', 0x00000043, 0x00370000},
+{'6', 0x0000ffbd, 0xfefcffbb},
+{'9', 0x001cffee, 0x00cdff6e},
+{'l', 0x419234f6, 0x00000000},
+{'l', 0x00000000, 0xc1b11a7c},
+{'l', 0x3d8d4000, 0xc0611a70},
+{'@', 0x000000bd, 0x000054c2},/*        ½        x-advance: 84.757812 */
+{'M', 0x4069ee58, 0xc2227b96},
+{'4', 0xffc50000, 0x0000004a},
+{'l', 0x00000000, 0xc20d846a},
+{'8', 0x24d815f5, 0x0fca0fe3},
+{'l', 0x00000000, 0xc1034f78},
+{'8', 0xef38001b, 0xd22bef1c},
+{'l', 0x4105846a, 0x00000000},
+{'l', 0x00000000, 0x42342350},
+{'4', 0x00000040, 0x003b0000},
+{'6', 0x0000ff2e, 0x0144008b},
+{'l', 0xc10234f8, 0x00000000},
+{'4', 0xfd180183, 0x0000003f},
+{'6', 0x02e8fe7e, 0x000000cd},
+{'l', 0x00000000, 0xc0d611a8},
+{'8', 0xbf2cde0e, 0xbc4fe11d},
+{'8', 0xc440df2d, 0xc913e613},
+{'8', 0xbec3be00, 0x11ce00df},
+{'9', 0x0011fff0, 0x0032ffec},
+{'l', 0xc10f72c4, 0xbeb08d80},
+{'8', 0xa82dc807, 0xe063e026},
+{'8', 0x1e630042, 0x57211e21},
+{'q', 0x00000000, 0x41108d3c},
+{0, 0xc1308d40, 0x418a7b96},
+{'8', 0x44ab31c0, 0x28e313ec},
+{'l', 0x41d1a7ba, 0x00000000},
+{'l', 0x00000000, 0x40ec2350},
+{'l', 0xc2100000, 0xb3b00000},
+{'@', 0x000000be, 0x000054c2},/*        ¾        x-advance: 84.757812 */
+{'M', 0x42111a7c, 0xc25b08d4},
+{'8', 0x59da3700, 0x219921da},
+{'8', 0xe2a000c5, 0xaad3e2db},
+{'l', 0x411611a8, 0xbf658480},
+{'8', 0x32162104, 0x102c1012},
+{'8', 0xf030001d, 0xcc12f012},
+{'9', 0xffbe0000, 0xffbeffae},
+{'4', 0x0000ffea, 0xffc40000},
+{'l', 0x40234f70, 0x00000000},
+{'8', 0xf1370025, 0xcc11f011},
+{'8', 0xd5f2e300, 0xf3dbf3f2},
+{'8', 0x11d500e8, 0x30eb11ee},
+{'l', 0xc114f72c, 0xbf53dc80},
+{'8', 0xaa2cc907, 0xe15ee124},
+{'8', 0x1e5d003c, 0x51221e22},
+{'8', 0x3cee2400, 0x25c817ee},
+{'l', 0x00000000, 0x3e0d3e00},
+{'8', 0x2541092d, 0x41141b14},
+{'m', 0xc145846c, 0x425b08d4},
+{'l', 0xc10234f7, 0x00000000},
+{'4', 0xfd180183, 0x0000003f},
+{'6', 0x02e8fe7e, 0xffa701a3},
+{'l', 0x00000000, 0x4131a7b9},
+{'l', 0xc10c2350, 0x34d40000},
+{'l', 0x00000000, 0xc131a7b9},
+{'l', 0xc1cee584, 0x00000000},
+{'l', 0x00000000, 0xc0da7b96},
+{'l', 0x41c72c24, 0xc20a7b96},
+{'l', 0x411b9610, 0x00000000},
+{'l', 0x00000000, 0x4209ee58},
+{'4', 0x00000043, 0x00370000},
+{'6', 0x0000ffbd, 0xfefcffbb},
+{'9', 0x001cffee, 0x00cdff6e},
+{'l', 0x419234f6, 0x00000000},
+{'l', 0x00000000, 0xc1b11a7c},
+{'l', 0x3d8d4000, 0xc0611a70},
+{'@', 0x000000bf, 0x000054c2},/*        ¿        x-advance: 84.757812 */
+{'M', 0x4128d3dd, 0xc0ae5847},
+{'8', 0xb90cd800, 0xc722e10c},
+{'8', 0xc049e517, 0xc14fd53c},
+{'8', 0xd41eec13, 0xca0ce90b},
+{'l', 0x41411a7c, 0x00000000},
+{'8', 0x45f326ff, 0x38de1ef4},
+{'8', 0x40b719eb, 0x40b32bc5},
+{'8', 0x2ce314ee, 0x35f517f5},
+{'q', 0x00000000, 0x40f08d3e},
+{0, 0x40ae5844, 0x4139611a},
+{'q', 0x40b08d40, 0x40800000},
+{0, 0x416e5848, 0x40800000},
+{'q', 0x4114f72c, 0x00000000},
+{0, 0x4171a7b8, 0xc0a11a7b},
+{'9', 0xffd8002e, 0xff930036},
+{'l', 0x414b08d0, 0x3f53dcc0},
+{'q', 0xbfe58440, 0x4159611a},
+{0, 0xc1308d38, 0x41a7b961},
+{'q', 0xc112c238, 0x40e9ee58},
+{0, 0xc1bb9612, 0x40e9ee58},
+{'q', 0xc17611aa, 0x00000000},
+{0, 0xc1c1a7ba, 0xc0d3dcb0},
+{'9', 0xffcbffba, 0xff6affba},
+{'m', 0x422c69ee, 0xc28a34f8},
+{'0', 0x00956e00, 0x006b9200},
+{'@', 0x000000c0, 0x000054c2},/*        À        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff7dfffd},
+{'l', 0xc1a5846a, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000c1, 0x000054c2},/*        Á        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff7cffbe},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000c2, 0x000054c2},/*        Â        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff7100b5},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000c3, 0x000054c2},/*        Ã        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff7c0054},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c28, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000c4, 0x000054c2},/*        Ä        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff7cff65},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000c5, 0x000054c2},/*        Ã…        x-advance: 84.757812 */
+{'M', 0x428e9ee5, 0x00000000},
+{'l', 0xc118469c, 0xc1d2c235},
+{'l', 0xc21b4f72, 0x00000000},
+{'l', 0xc1172c25, 0x41d2c235},
+{'l', 0xc158469f, 0x00000000},
+{'l', 0x420cb08d, 0xc2ba11a8},
+{'4', 0x00000077, 0x02e80114},
+{'6', 0x0000ff95, 0xfd68ff1a},
+{'l', 0xbf53dcc0, 0x402c2340},
+{'l', 0xc0984698, 0x4169ee58},
+{'l', 0xc1269ee8, 0x41e9611c},
+{'4', 0x000000ff, 0xfeedffa1},
+{'6', 0xffa0ffe0, 0xff830086},
+{'8', 0x4fdc3000, 0x1e9f1edd},
+{'8', 0xe29f00c3, 0xb1dde1dd},
+{'8', 0xb124cf00, 0xe261e224},
+{'8', 0x1e61003d, 0x4e241e24},
+{'m', 0xc1058468, 0x00000000},
+{'8', 0xdfeeec00, 0xf4d0f4ef},
+{'8', 0x0ccf00e2, 0x21ee0cee},
+{'8', 0x21121400, 0x0c310c12},
+{'8', 0xf430001e, 0xdf12f412},
+{'@', 0x000000c6, 0x000054c2},/*        Æ        x-advance: 84.757812 */
+{'M', 0x423234f7, 0xc1e34f73},
+{'l', 0xc1b8d3dc, 0x00000000},
+{'l', 0xc11cb08e, 0x41e34f73},
+{'l', 0xc139611a, 0x00000000},
+{'l', 0x420611a8, 0xc2ba11a8},
+{'l', 0x4237ffff, 0x00000000},
+{'l', 0x00000000, 0x4127b960},
+{'l', 0xc1b9ee58, 0x00000000},
+{'l', 0x00000000, 0x41ed3dcc},
+{'l', 0x41b469f0, 0x00000000},
+{'l', 0x00000000, 0x4125846c},
+{'l', 0xc1b469f0, 0x00000000},
+{'l', 0x00000000, 0x4200469f},
+{'l', 0x41d08d40, 0xb5800000},
+{'4', 0x00530000, 0x0000fed2},
+{'6', 0xff1d0000, 0xfe4d0000},
+{'l', 0xc0a11a78, 0x00000000},
+{'q', 0xbe8d3e00, 0x3f8d3dc0},
+{0, 0xc03dcb10, 0x41211a80},
+{'9', 0x0047ffec, 0x0111ffa4},
+{'l', 0x419cb08d, 0x00000000},
+{'l', 0x00000000, 0xc230d3dd},
+{'@', 0x000000c7, 0x000054c2},/*        Ç        x-advance: 84.757812 */
+{'M', 0x41ad3dcb, 0xc23bdcb1},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0x40bb9610, 0x41e234f8},
+{'q', 0x40bdcb0c, 0x411611a8},
+{0, 0x41908d3f, 0x411611a8},
+{'q', 0x40dee580, 0x00000000},
+{0, 0x4149ee58, 0xc09611a8},
+{'9', 0xffda002d, 0xff8a004c},
+{'l', 0x412f72c0, 0x408f72c4},
+{'q', 0xc12469f0, 0x41cd3dcb},
+{0, 0xc2053dcb, 0x41cd3dcb},
+{'q', 0xc1911a7c, 0xb4800000},
+{0, 0xc1df72c3, 0xc147b961},
+{'q', 0xc11b9611, 0xc147b961},
+{0, 0xc11b9611, 0xc20f72c3},
+{'q', 0x00000000, 0xc23e11a7},
+{0, 0x4213dcb1, 0xc23e11a7},
+{'9', 0x000000bb, 0x00b80101},
+{'l', 0xc1396120, 0x408f72c0},
+{'8', 0x9ec1c2ec, 0xdc9ddcd5},
+{'q', 0xc13cb090, 0x00000000},
+{0, 0xc18c2350, 0x410e5848},
+{'9', 0x0047ffd3, 0x00deffd3},
+{'m', 0x4210469e, 0x4281846a},
+{'q', 0x00000000, 0x414d3dcc},
+{0, 0xc1972c22, 0x414d3dcc},
+{'9', 0x0000ffe1, 0xfffeffcf},
+{'l', 0x00000000, 0xc0d846a0},
+{'8', 0x032f031b, 0xd1510051},
+{'8', 0xdfefea00, 0xf5c8f5f0},
+{'9', 0x0000ffe9, 0x0001ffe1},
+{'4', 0xff9c0023, 0x0000003b},
+{'l', 0xc02c2350, 0x40dcb08d},
+{'8', 0x184d0133, 0x3e191619},
+{'@', 0x000000c8, 0x000054c2},/*        È        x-advance: 84.757812 */
+{'M', 0x4132c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x427d846b, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc248d3de, 0x00000000},
+{'l', 0x36000000, 0x41e8d3de},
+{'l', 0x423846a0, 0x00000000},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc23846a0, 0x00000000},
+{'l', 0x36000000, 0x41fe5846},
+{'4', 0x000001a8, 0x00560000},
+{'6', 0x0000fdef, 0xfce30102},
+{'l', 0xc1a5846b, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b98, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000c9, 0x000054c2},/*        É        x-advance: 84.757812 */
+{'M', 0x4132c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x427d846b, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc248d3de, 0x00000000},
+{'l', 0x36000000, 0x41e8d3de},
+{'l', 0x423846a0, 0x00000000},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc23846a0, 0x00000000},
+{'l', 0x36000000, 0x41fe5846},
+{'4', 0x000001a8, 0x00560000},
+{'6', 0x0000fdef, 0xfce300b6},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000ca, 0x000054c2},/*        Ê        x-advance: 84.757812 */
+{'M', 0x4132c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x427d846b, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc248d3de, 0x00000000},
+{'l', 0x36000000, 0x41e8d3de},
+{'l', 0x423846a0, 0x00000000},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc23846a0, 0x00000000},
+{'l', 0x36000000, 0x41fe5846},
+{'4', 0x000001a8, 0x00560000},
+{'6', 0x0000fdef, 0xfcd801b0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000cb, 0x000054c2},/*        Ë        x-advance: 84.757812 */
+{'M', 0x4132c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'l', 0x427d846b, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc248d3de, 0x00000000},
+{'l', 0x36000000, 0x41e8d3de},
+{'l', 0x423846a0, 0x00000000},
+{'l', 0x00000000, 0x4129ee58},
+{'l', 0xc23846a0, 0x00000000},
+{'l', 0x36000000, 0x41fe5846},
+{'4', 0x000001a8, 0x00560000},
+{'6', 0x0000fdef, 0xfce3006a},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d96119, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000cc, 0x000054c2},/*        Ì        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc2ba11a8},
+{'l', 0x426308d3, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1ae5844, 0x00000000},
+{'l', 0x00000000, 0x428f08d4},
+{'l', 0x41ae5844, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26308d3, 0x00000000},
+{'l', 0x00000000, 0xc12c234f},
+{'l', 0x41ae5846, 0x00000000},
+{'4', 0xfdc40000, 0x0000ff52},
+{'6', 0xffaa0000, 0xffcc00e7},
+{'l', 0xc1a5846a, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x417a7b98, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000cd, 0x000054c2},/*        Í        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc2ba11a8},
+{'l', 0x426308d3, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1ae5844, 0x00000000},
+{'l', 0x00000000, 0x428f08d4},
+{'l', 0x41ae5844, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26308d3, 0x00000000},
+{'l', 0x00000000, 0xc12c234f},
+{'l', 0x41ae5846, 0x00000000},
+{'4', 0xfdc40000, 0x0000ff52},
+{'6', 0xffaa0000, 0xffcc00a7},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a58468, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000ce, 0x000054c2},/*        ÃŽ        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc2ba11a8},
+{'l', 0x426308d3, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1ae5844, 0x00000000},
+{'l', 0x00000000, 0x428f08d4},
+{'l', 0x41ae5844, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26308d3, 0x00000000},
+{'l', 0x00000000, 0xc12c234f},
+{'l', 0x41ae5846, 0x00000000},
+{'4', 0xfdc40000, 0x0000ff52},
+{'6', 0xffaa0000, 0xffc00199},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000cf, 0x000054c2},/*        Ï        x-advance: 84.757812 */
+{'M', 0x415ee584, 0xc2ba11a8},
+{'l', 0x426308d3, 0x00000000},
+{'l', 0x00000000, 0x412c2350},
+{'l', 0xc1ae5844, 0x00000000},
+{'l', 0x00000000, 0x428f08d4},
+{'l', 0x41ae5844, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26308d3, 0x00000000},
+{'l', 0x00000000, 0xc12c234f},
+{'l', 0x41ae5846, 0x00000000},
+{'4', 0xfdc40000, 0x0000ff52},
+{'6', 0xffaa0000, 0xffcc0049},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000d0, 0x000054c2},/*        Ð        x-advance: 84.757812 */
+{'M', 0x429b2c23, 0xc23dcb09},
+{'q', 0x00000000, 0x41b69ee6},
+{0, 0xc129ee58, 0x420cb08e},
+{'9', 0x0062ffac, 0x0062ff0e},
+{'l', 0xc1cc2350, 0x00000000},
+{'l', 0x35800000, 0xc224b08d},
+{'l', 0xc114f72c, 0x00000000},
+{'l', 0xb4000000, 0xc12469f0},
+{'4', 0x0000004a, 0xfeb40000},
+{'l', 0x41ab9612, 0x00000000},
+{'q', 0x41b5846a, 0x00000000},
+{0, 0x42072c24, 0x413611a8},
+{'9', 0x005a0059, 0x01110059},
+{'m', 0xc2053dca, 0x40c8d3e0},
+{'4', 0x0000ff61, 0x00f30000},
+{'l', 0x4132c236, 0x35800000},
+{'q', 0x4169ee58, 0x00000000},
+{0, 0x41adcb08, 0xc112c235},
+{'q', 0x40e34f70, 0xc112c236},
+{0, 0x40e34f70, 0xc1dc2350},
+{'q', 0x00000000, 0xc191a7ba},
+{0, 0xc0f2c230, 0xc1d3dcb2},
+{'9', 0xffbeffc4, 0xffbeff40},
+{'l', 0xc105846a, 0x00000000},
+{'l', 0x00000000, 0x41f69ee6},
+{'l', 0x419f72c3, 0x00000000},
+{'l', 0x00000000, 0x412469f0},
+{'@', 0x000000d1, 0x000054c2},/*        Ñ        x-advance: 84.757812 */
+{'M', 0x42669ee5, 0x00000000},
+{'l', 0xc20f72c2, 0xc29bdcb1},
+{'9', 0x005e0008, 0x008c0008},
+{'l', 0x00000000, 0x4271a7b9},
+{'l', 0xc13b9611, 0x00000000},
+{'4', 0xfd180000, 0x0000007a},
+{'l', 0x4211a7ba, 0x429cf72c},
+{'9', 0xffb1fff7, 0xff69fff7},
+{'l', 0x00000000, 0xc26e5847},
+{'4', 0x0000005e, 0x02e80000},
+{'6', 0x0000ff82, 0xfce3ffdc},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c28, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000d2, 0x000054c2},/*        Ã’        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0xc1aa7b96, 0xc252c235},
+{'l', 0xc1a58469, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000d3, 0x000054c2},/*        Ó        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0xc1ea7b96, 0xc252c235},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b98, 0xc183dcb0},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000d4, 0x000054c2},/*        Ô        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0x3fb08d60, 0xc258469f},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000d5, 0x000054c2},/*        Õ        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0xc12b08d4, 0xc252c235},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c28, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000d6, 0x000054c2},/*        Ö        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'q', 0xc189611b, 0xb4800000},
+{0, 0xc1d1a7ba, 0xc145846a},
+{'q', 0xc1108d3e, 0xc145846a},
+{0, 0xc1108d3e, 0xc2100000},
+{'q', 0x00000000, 0xc1b9ee58},
+{0, 0x410f72c2, 0xc20d846a},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'q', 0x418846a0, 0x00000000},
+{0, 0x41d11a7e, 0x41400000},
+{'9', 0x005f0048, 0x011c0048},
+{'m', 0xc15dcb0c, 0x00000000},
+{'q', 0x00000000, 0xc21308d3},
+{0, 0xc1ab08d4, 0xc21308d3},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'q', 0x00000000, 0x4194f72d},
+{0, 0x40ae5848, 0x41e11a7d},
+{'q', 0x40ae5848, 0x4118469e},
+{0, 0x417ffffe, 0x4118469e},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0xc221ee58, 0xc252c235},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611a, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000d7, 0x000054c2},/*        ×        x-advance: 84.757812 */
+{'M', 0x412d3dcb, 0xc1b611a8},
+{'l', 0x41c34f72, 0xc1c34f72},
+{'l', 0xc1c234f7, 0xc1c234f6},
+{'l', 0x40e5846c, 0xc0e34f80},
+{'l', 0x41c11a7c, 0x41c2c236},
+{'l', 0x41c11a7c, 0xc1c1a7ba},
+{'l', 0x40e7b960, 0x40e7b960},
+{'l', 0xc1c11a7c, 0x41c00002},
+{'l', 0x41c234f8, 0x41c234f7},
+{'l', 0xc0e11a80, 0x40e7b960},
+{'l', 0xc1c2c236, 0xc1c2c235},
+{'l', 0xc1c469ee, 0x41c3dcb0},
+{'l', 0xc0e11a7a, 0xc0e7b960},
+{'@', 0x000000d8, 0x000054c2},/*        Ø        x-advance: 84.757812 */
+{'M', 0x429b4f73, 0xc23bdcb1},
+{'q', 0x00000000, 0x41b9ee59},
+{0, 0xc112c238, 0x420f2c24},
+{'q', 0xc111a7b8, 0x4148d3dc},
+{0, 0xc1d1a7b8, 0x4148d3dc},
+{'9', 0x0000ff88, 0xffb4ff42},
+{'4', 0x0056ffc0, 0xffddffcd},
+{'l', 0x411b9611, 0xc1508d3e},
+{'q', 0xc0d1a7b8, 0xc13fffff},
+{0, 0xc0d1a7b8, 0xc200469f},
+{'q', 0x00000000, 0xc1b9ee56},
+{0, 0x410f72c2, 0xc20d8469},
+{'q', 0x410f72c2, 0xc14234f8},
+{0, 0x41d34f72, 0xc14234f8},
+{'9', 0x00000077, 0x004900be},
+{'4', 0xffaa0040, 0x00230033},
+{'l', 0xc11a7b90, 0x414e5848},
+{'9', 0x005d0034, 0x00fd0034},
+{'m', 0xc15dcb0c, 0x00000000},
+{'9', 0xffa60000, 0xff67fff0},
+{'l', 0xc20d3dca, 0x423d3dcc},
+{'q', 0x40ae5840, 0x4118469c},
+{0, 0x417ee580, 0x4118469c},
+{'q', 0x4133dcb4, 0x00000000},
+{0, 0x4182c236, 0xc11a7b96},
+{'9', 0xffb30028, 0xff200028},
+{'m', 0xc22b9612, 0x00000000},
+{'9', 0x005b0000, 0x009b0010},
+{'l', 0x420d3dcc, 0xc23cb08c},
+{'q', 0xc0a9ee60, 0xc1108d40},
+{0, 0xc17dcb0c, 0xc1108d40},
+{'q', 0xc1ac234f, 0x00000000},
+{0, 0xc1ac234f, 0x421308d3},
+{'@', 0x000000d9, 0x000054c2},/*        Ù        x-advance: 84.757812 */
+{'M', 0x4295a7b9, 0xc2072c23},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc0fb9610, 0x41d69ee5},
+{'q', 0xc0fb9610, 0x4105846a},
+{0, 0xc1c9ee58, 0x4105846a},
+{'q', 0xc1869ee5, 0xb4800000},
+{0, 0xc1c34f72, 0xc1011a7c},
+{'9', 0xffbfffc4, 0xff32ffc4},
+{'4', 0xfe1d0000, 0x00000069},
+{'l', 0x00000000, 0x426ac236},
+{'q', 0x00000000, 0x41611a7a},
+{0, 0x40800000, 0x419cb08c},
+{'q', 0x408234f8, 0x40ae5848},
+{0, 0x416b08d2, 0x40ae5848},
+{'q', 0x4131a7bc, 0x00000000},
+{0, 0x4179611c, 0xc0b4f72c},
+{'9', 0xffd30023, 0xff5e0023},
+{'4', 0xfe320000, 0x00000068},
+{'6', 0x01d90000, 0xfdf2fef8},
+{'l', 0xc1a58469, 0xc17dcb00},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b98, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3e0, 0x00000000},
+{'@', 0x000000da, 0x000054c2},/*        Ú        x-advance: 84.757812 */
+{'M', 0x4295a7b9, 0xc2072c23},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc0fb9610, 0x41d69ee5},
+{'q', 0xc0fb9610, 0x4105846a},
+{0, 0xc1c9ee58, 0x4105846a},
+{'q', 0xc1869ee5, 0xb4800000},
+{0, 0xc1c34f72, 0xc1011a7c},
+{'9', 0xffbfffc4, 0xff32ffc4},
+{'4', 0xfe1d0000, 0x00000069},
+{'l', 0x00000000, 0x426ac236},
+{'q', 0x00000000, 0x41611a7a},
+{0, 0x40800000, 0x419cb08c},
+{'q', 0x408234f8, 0x40ae5848},
+{0, 0x416b08d2, 0x40ae5848},
+{'q', 0x4131a7bc, 0x00000000},
+{0, 0x4179611c, 0xc0b4f72c},
+{'9', 0xffd30023, 0xff5e0023},
+{'4', 0xfe320000, 0x00000068},
+{'6', 0x01d90000, 0xfdf2feb7},
+{'l', 0x00000000, 0xbfb08d00},
+{'l', 0x417a7b98, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3e0, 0x00000000},
+{'@', 0x000000db, 0x000054c2},/*        Û        x-advance: 84.757812 */
+{'M', 0x4295a7b9, 0xc2072c23},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc0fb9610, 0x41d69ee5},
+{'q', 0xc0fb9610, 0x4105846a},
+{0, 0xc1c9ee58, 0x4105846a},
+{'q', 0xc1869ee5, 0xb4800000},
+{0, 0xc1c34f72, 0xc1011a7c},
+{'9', 0xffbfffc4, 0xff32ffc4},
+{'4', 0xfe1d0000, 0x00000069},
+{'l', 0x00000000, 0x426ac236},
+{'q', 0x00000000, 0x41611a7a},
+{0, 0x40800000, 0x419cb08c},
+{'q', 0x408234f8, 0x40ae5848},
+{0, 0x416b08d2, 0x40ae5848},
+{'q', 0x4131a7bc, 0x00000000},
+{0, 0x4179611c, 0xc0b4f72c},
+{'9', 0xffd30023, 0xff5e0023},
+{'4', 0xfe320000, 0x00000068},
+{'6', 0x01d90000, 0xfde7ffb3},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000dc, 0x000054c2},/*        Ü        x-advance: 84.757812 */
+{'M', 0x4295a7b9, 0xc2072c23},
+{'q', 0x00000000, 0x41934f72},
+{0, 0xc0fb9610, 0x41d69ee5},
+{'q', 0xc0fb9610, 0x4105846a},
+{0, 0xc1c9ee58, 0x4105846a},
+{'q', 0xc1869ee5, 0xb4800000},
+{0, 0xc1c34f72, 0xc1011a7c},
+{'9', 0xffbfffc4, 0xff32ffc4},
+{'4', 0xfe1d0000, 0x00000069},
+{'l', 0x00000000, 0x426ac236},
+{'q', 0x00000000, 0x41611a7a},
+{0, 0x40800000, 0x419cb08c},
+{'q', 0x408234f8, 0x40ae5848},
+{0, 0x416b08d2, 0x40ae5848},
+{'q', 0x4131a7bc, 0x00000000},
+{0, 0x4179611c, 0xc0b4f72c},
+{'9', 0xffd30023, 0xff5e0023},
+{'4', 0xfe320000, 0x00000068},
+{'6', 0x01d90000, 0xfdf2fe63},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000dd, 0x000054c2},/*        Ý        x-advance: 84.757812 */
+{'M', 0x42434f73, 0xc2211a7c},
+{'l', 0x00000000, 0x42211a7c},
+{'l', 0xc14f72c4, 0x00000000},
+{'l', 0x00000000, 0xc2211a7c},
+{'l', 0xc205846a, 0xc25308d4},
+{'l', 0x416234f8, 0x00000000},
+{'l', 0x41ce5846, 0x42288d3e},
+{'4', 0xfeaf00cd, 0x00000071},
+{'6', 0x01a6fef5, 0xfe25ff8f},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000de, 0x000054c2},/*        Þ        x-advance: 84.757812 */
+{'M', 0x429a5847, 0xc23ee584},
+{'q', 0x00000000, 0x410d3dc8},
+{0, 0xc0800000, 0x417b9610},
+{'q', 0xc0800000, 0x40da7b98},
+{0, 0xc139611c, 0x412b08d4},
+{'9', 0x001effc4, 0x001eff72},
+{'l', 0xc19b08d3, 0x00000000},
+{'l', 0x00000000, 0x418c234f},
+{'l', 0xc152c235, 0x00000000},
+{'l', 0x00000000, 0xc2ba11a8},
+{'4', 0x00000069, 0x00810000},
+{'l', 0x419469ef, 0x00000000},
+{'q', 0x4183dcb0, 0x00000000},
+{0, 0x41cb08d4, 0x40f4f720},
+{'9', 0x003d0047, 0x00ab0047},
+{'m', 0xc153dcb4, 0x3e8d3d80},
+{'q', 0x00000000, 0xc113dcb0},
+{0, 0xc0b4f728, 0xc1658468},
+{'9', 0xffd7ffd3, 0xffd7ff79},
+{'4', 0x0000ff79, 0x013d0000},
+{'l', 0x418c234f, 0x00000000},
+{'q', 0x4128d3dc, 0x00000000},
+{0, 0x418234f8, 0xc0a9ee58},
+{'q', 0x40b96118, 0xc0ac2350},
+{0, 0x40b96118, 0xc16e5848},
+{'@', 0x000000df, 0x000054c2},/*        ß        x-advance: 84.757812 */
+{'M', 0x42a0f72c, 0xc1a2c235},
+{'q', 0x00000000, 0x4127b961},
+{0, 0xc0d1a7b0, 0x41834f73},
+{'q', 0xc0d1a7c0, 0x40bdcb08},
+{0, 0xc1911a7e, 0x40bdcb08},
+{'9', 0x0000ffa2, 0xffe5ff64},
+{'l', 0xbe0d3e00, 0xc134f72c},
+{'8', 0x1c4a1220, 0x0950092a},
+{'8', 0xe74d0032, 0xba1be61b},
+{'8', 0xbfeadc00, 0xc2b3e3ea},
+{'8', 0xbfb4e2ce, 0xb0e8dee8},
+{'8', 0xc30fdf00, 0xcc2de510},
+{'8', 0xcf2ee620, 0xce0ee90e},
+{'8', 0xbddcd600, 0xe79fe7dc},
+{'q', 0xc1234f72, 0x00000000},
+{0, 0xc1708d3e, 0x40b08d40},
+{'9', 0x002cffda, 0x0085ffda},
+{'4', 0x02330000, 0x0000ff9d},
+{'l', 0x00000000, 0xc28da7b9},
+{'q', 0x00000000, 0xc17a7b98},
+{0, 0x41011a7b, 0xc1bcb090},
+{'q', 0x410234f8, 0xc0fdcb00},
+{0, 0x41c11a7c, 0xc0fdcb00},
+{'q', 0x4151a7b8, 0x00000000},
+{0, 0x41a69ee6, 0x40b2c230},
+{'q', 0x40f96118, 0x40b08d40},
+{0, 0x40f96118, 0x416e5848},
+{'q', 0x00000000, 0x411846a0},
+{0, 0xc0f96118, 0x4183dcb0},
+{'8', 0x33ce22d9, 0x23f510f5},
+{'8', 0x2a121700, 0x3e531212},
+{'8', 0x4a4b2131, 0x5d1a291a},
+{'@', 0x000000e0, 0x000054c2},/*        à        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0x40d3dcb0, 0xc295846a},
+{'l', 0xc1a5846a, 0xc17dcb00},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000e1, 0x000054c2},/*        á        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0xbf658480, 0xc295846a},
+{'l', 0x00000000, 0xbfb08d00},
+{'l', 0x417a7b98, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3e0, 0x00000000},
+{'@', 0x000000e2, 0x000054c2},/*        â        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0x41f00000, 0xc298469e},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b960, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee6, 0x4183dcb0},
+{'@', 0x000000e3, 0x000054c2},/*        ã        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0x4194f72c, 0xc295846a},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c20, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000e4, 0x000054c2},/*        ä        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0xc13ee584, 0xc2980000},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611a, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000e5, 0x000054c2},/*        å        x-advance: 84.757812 */
+{'M', 0x4297dcb1, 0xc0f4f72c},
+{'9', 0x0000000e, 0xfffd0020},
+{'l', 0x00000000, 0x40f72c23},
+{'8', 0x08b408db, 0xe4b000c9},
+{'9', 0xffe3ffe8, 0xffa5ffe4},
+{'l', 0xbed3dd00, 0x00000000},
+{'q', 0xc08f72c0, 0x4105846a},
+{0, 0xc129ee58, 0x41400000},
+{'q', 0xc0c234f8, 0x4069ee57},
+{0, 0xc1708d3c, 0x4069ee57},
+{'q', 0xc12e5848, 0x00000000},
+{0, 0xc1834f73, 0xc0bdcb08},
+{'q', 0xc0b08d3e, 0xc0bdcb0a},
+{0, 0xc0b08d3e, 0xc18234f7},
+{'9', 0xff400000, 0xff3d00fa},
+{'4', 0xfffe0082, 0xffe00000},
+{'8', 0x99e3b800, 0xe0a3e0e3},
+{'8', 0x17a300bf, 0x47de17e4},
+{'l', 0xc14f72c3, 0xbf9611a0},
+{'q', 0x404b08d4, 0xc1a11a7c},
+{0, 0x41e9611a, 0xc1a11a7c},
+{'q', 0x415cb08c, 0x00000000},
+{0, 0x41a5846a, 0x40cf72c0},
+{'9', 0x00330037, 0x00940037},
+{'l', 0x00000000, 0x42008d3e},
+{'8', 0x420b2c00, 0x162c160b},
+{'m', 0xc2280001, 0xbed3dcc0},
+{'8', 0xe75d0034, 0xbd3fe728},
+{'9', 0xffd60016, 0xffa90016},
+{'4', 0xffcf0000, 0x0002ff98},
+{'8', 0x0e9d01bf, 0x28cb0dde},
+{'8', 0x48ee1bee, 0x48182d00},
+{'9', 0x001b0018, 0x001b0048},
+{'m', 0x41c469ee, 0xc2a9cb08},
+{'8', 0x4fdc3000, 0x1e9f1edd},
+{'8', 0xe29f00c3, 0xb1dde1dd},
+{'8', 0xb124cf00, 0xe261e224},
+{'8', 0x1e61003d, 0x4e241e24},
+{'m', 0xc1058468, 0x00000000},
+{'8', 0xdfeeec00, 0xf4d0f4ef},
+{'8', 0x0ccf00e2, 0x21ee0cee},
+{'8', 0x21121400, 0x0c310c12},
+{'8', 0xf430001e, 0xdf12f412},
+{'@', 0x000000e6, 0x000054c2},/*        æ        x-advance: 84.757812 */
+{'M', 0x423b4f73, 0xc20ac235},
+{'l', 0x00000000, 0x3f9611a0},
+{'q', 0x3eb08d00, 0x41ccb08e},
+{0, 0x414c2350, 0x41ccb08e},
+{'8', 0xe7410029, 0xbf21e718},
+{'l', 0x411846a0, 0x40469ee8},
+{'q', 0xc09611b0, 0x418d3dcb},
+{0, 0xc1ad3dcc, 0x418d3dcb},
+{'8', 0xe29800be, 0x9fc8e2db},
+{'8', 0x61ba43e4, 0x1ea21ed8},
+{'q', 0xc10e5846, 0x00000000},
+{0, 0xc15611a7, 0xc0b4f72c},
+{'q', 0xc08d3dca, 0xc0b4f72c},
+{0, 0xc08d3dca, 0xc18469ee},
+{'9', 0xff400000, 0xff3d00b6},
+{'4', 0xfffe005c, 0xffe00000},
+{'8', 0x98efb600, 0xe2c7e2ef},
+{'8', 0x16c500d8, 0x48ea16ee},
+{'l', 0xc139611b, 0xbf9611a0},
+{'q', 0x3fa7b960, 0xc1269ee8},
+{0, 0x40d3dcb0, 0xc173dcb0},
+{'q', 0x40ac2352, 0xc09cb090},
+{0, 0x4171a7b9, 0xc09cb090},
+{'q', 0x414234f6, 0x00000000},
+{0, 0x4188469f, 0x41196118},
+{'q', 0x40bb9610, 0xc1196118},
+{0, 0x4187b962, 0xc1196118},
+{'q', 0x41372c24, 0x00000000},
+{0, 0x4189ee56, 0x411cb090},
+{'9', 0x004d002e, 0x00ee002e},
+{'4', 0x000d0000, 0x0000fedd},
+{'m', 0xc2072c24, 0x41611a7c},
+{'8', 0x480f2d00, 0x1b2f1b10},
+{'8', 0xe83d0023, 0xbe29e81a},
+{'9', 0xffd7000e, 0xffa6000e},
+{'4', 0xffcf0000, 0x0002ffbd},
+{'8', 0x0ebe01d5, 0x28de0dea},
+{'9', 0x001bfff4, 0x0048fff4},
+{'m', 0x4238d3dc, 0xc238d3dc},
+{'q', 0xc0b4f728, 0x00000000},
+{0, 0xc10e5848, 0x40bffff8},
+{'9', 0x0030ffe7, 0x0084ffe5},
+{'l', 0x41c72c22, 0x00000000},
+{'q', 0xbf1ee580, 0xc13cb08c},
+{0, 0xc069ee60, 0xc189611a},
+{'q', 0xc04234e0, 0xc0ae5840},
+{0, 0xc10f72c0, 0xc0ae5840},
+{'@', 0x000000e7, 0x000054c2},/*        ç        x-advance: 84.757812 */
+{'M', 0x410f72c2, 0xc215846a},
+{'q', 0x00000000, 0xc194f72c},
+{0, 0x410e5846, 0xc1e4f72c},
+{'q', 0x410e5848, 0xc1200000},
+{0, 0x41cdcb0a, 0xc1200000},
+{'q', 0x4148d3dc, 0x00000000},
+{0, 0x41a5846a, 0x40c234f0},
+{'9', 0x00300041, 0x00810050},
+{'l', 0xc153dcb0, 0x3f772c00},
+{'8', 0xb2d4cef8, 0xe39ce3dd},
+{'q', 0xc12e5844, 0x00000000},
+{0, 0xc17ffffe, 0x40d846a0},
+{'q', 0xc0a11a7c, 0x40d846a0},
+{0, 0xc0a11a7c, 0x41aee586},
+{'q', 0x00000000, 0x4174f72a},
+{0, 0x40a11a7c, 0x41b34f72},
+{'q', 0x40a34f74, 0x40e11a7a},
+{0, 0x417ee586, 0x40e11a7a},
+{'8', 0xe362003b, 0xa730e327},
+{'l', 0x4151a7b8, 0x3f53dcc0},
+{'8', 0x60d834f9, 0x43aa2be0},
+{'q', 0xc0d846a0, 0x404234f7},
+{0, 0xc171a7b8, 0x404234f7},
+{'q', 0xc1872c24, 0x00000000},
+{0, 0xc1cdcb09, 0xc11ee585},
+{'9', 0xffb1ffba, 0xff1affba},
+{'m', 0x423e5846, 0x425cb08e},
+{'q', 0x36800000, 0x414d3dc8},
+{0, 0xc1972c22, 0x414d3dc8},
+{'9', 0x0000ffe1, 0xfffeffcf},
+{'l', 0x00000000, 0xc0d846a0},
+{'8', 0x032f031b, 0xd1510051},
+{'8', 0xdfefea00, 0xf5c8f5f0},
+{'9', 0x0000ffe9, 0x0001ffe1},
+{'4', 0xff9c0023, 0x0000003b},
+{'l', 0xc02c2350, 0x40dcb08d},
+{'8', 0x184d0133, 0x3e191619},
+{'@', 0x000000e8, 0x000054c2},/*        è        x-advance: 84.757812 */
+{'M', 0x41b1a7b9, 0xc20ac235},
+{'q', 0x00000000, 0x4148d3dc},
+{0, 0x40b08d40, 0x419d3dcb},
+{'q', 0x40b2c234, 0x40e34f73},
+{0, 0x4173dcb2, 0x40e34f73},
+{'8', 0xe8630038, 0xbd39e82b},
+{'l', 0x412e5844, 0x40469ee8},
+{'q', 0xc04234e0, 0x4108d3dc},
+{0, 0xc132c230, 0x4151a7b9},
+{'q', 0xc1011a7c, 0x4091a7ba},
+{0, 0xc19a7b96, 0x4091a7ba},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc12234f7},
+{'q', 0xc10c234f, 0xc12234f7},
+{0, 0xc10c234f, 0xc1e8469e},
+{'q', 0x00000000, 0xc1934f74},
+{0, 0x4108d3dd, 0xc1e234f6},
+{'q', 0x4109ee58, 0xc11ee588},
+{0, 0x41c69ee5, 0xc11ee588},
+{'q', 0x4181a7ba, 0x00000000},
+{0, 0x41c469ee, 0x411dcb08},
+{'9', 0x004e0042, 0x00ee0042},
+{'4', 0x000d0000, 0x0000fe57},
+{'m', 0x41a3dcb2, 0xc2008d3d},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc169ee58, 0x40c234f0},
+{'9', 0x0030ffd5, 0x0084ffd3},
+{'l', 0x42211a7c, 0x00000000},
+{'9', 0xff4cfff1, 0xff4cff61},
+{'m', 0x3e8d3e00, 0xc1800000},
+{'l', 0xc1a5846b, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b98, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000e9, 0x000054c2},/*        é        x-advance: 84.757812 */
+{'M', 0x41b1a7b9, 0xc20ac235},
+{'q', 0x00000000, 0x4148d3dc},
+{0, 0x40b08d40, 0x419d3dcb},
+{'q', 0x40b2c234, 0x40e34f73},
+{0, 0x4173dcb2, 0x40e34f73},
+{'8', 0xe8630038, 0xbd39e82b},
+{'l', 0x412e5844, 0x40469ee8},
+{'q', 0xc04234e0, 0x4108d3dc},
+{0, 0xc132c230, 0x4151a7b9},
+{'q', 0xc1011a7c, 0x4091a7ba},
+{0, 0xc19a7b96, 0x4091a7ba},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc12234f7},
+{'q', 0xc10c234f, 0xc12234f7},
+{0, 0xc10c234f, 0xc1e8469e},
+{'q', 0x00000000, 0xc1934f74},
+{0, 0x4108d3dd, 0xc1e234f6},
+{'q', 0x4109ee58, 0xc11ee588},
+{0, 0x41c69ee5, 0xc11ee588},
+{'q', 0x4181a7ba, 0x00000000},
+{0, 0x41c469ee, 0x411dcb08},
+{'9', 0x004e0042, 0x00ee0042},
+{'4', 0x000d0000, 0x0000fe57},
+{'m', 0x41a3dcb2, 0xc2008d3d},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc169ee58, 0x40c234f0},
+{'9', 0x0030ffd5, 0x0084ffd3},
+{'l', 0x42211a7c, 0x00000000},
+{'9', 0xff4cfff1, 0xff4cff61},
+{'m', 0xc0e9ee58, 0xc1800000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000ea, 0x000054c2},/*        ê        x-advance: 84.757812 */
+{'M', 0x41b1a7b9, 0xc20ac235},
+{'q', 0x00000000, 0x4148d3dc},
+{0, 0x40b08d40, 0x419d3dcb},
+{'q', 0x40b2c234, 0x40e34f73},
+{0, 0x4173dcb2, 0x40e34f73},
+{'8', 0xe8630038, 0xbd39e82b},
+{'l', 0x412e5844, 0x40469ee8},
+{'q', 0xc04234e0, 0x4108d3dc},
+{0, 0xc132c230, 0x4151a7b9},
+{'q', 0xc1011a7c, 0x4091a7ba},
+{0, 0xc19a7b96, 0x4091a7ba},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc12234f7},
+{'q', 0xc10c234f, 0xc12234f7},
+{0, 0xc10c234f, 0xc1e8469e},
+{'q', 0x00000000, 0xc1934f74},
+{0, 0x4108d3dd, 0xc1e234f6},
+{'q', 0x4109ee58, 0xc11ee588},
+{0, 0x41c69ee5, 0xc11ee588},
+{'q', 0x4181a7ba, 0x00000000},
+{0, 0x41c469ee, 0x411dcb08},
+{'9', 0x004e0042, 0x00ee0042},
+{'4', 0x000d0000, 0x0000fe57},
+{'m', 0x41a3dcb2, 0xc2008d3d},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc169ee58, 0x40c234f0},
+{'9', 0x0030ffd5, 0x0084ffd3},
+{'l', 0x42211a7c, 0x00000000},
+{'9', 0xff4cfff1, 0xff4cff61},
+{'m', 0x41b7b962, 0xc18b08d4},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e58468, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c2350, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee6, 0x4183dcb0},
+{'@', 0x000000eb, 0x000054c2},/*        ë        x-advance: 84.757812 */
+{'M', 0x41b1a7b9, 0xc20ac235},
+{'q', 0x00000000, 0x4148d3dc},
+{0, 0x40b08d40, 0x419d3dcb},
+{'q', 0x40b2c234, 0x40e34f73},
+{0, 0x4173dcb2, 0x40e34f73},
+{'8', 0xe8630038, 0xbd39e82b},
+{'l', 0x412e5844, 0x40469ee8},
+{'q', 0xc04234e0, 0x4108d3dc},
+{0, 0xc132c230, 0x4151a7b9},
+{'q', 0xc1011a7c, 0x4091a7ba},
+{0, 0xc19a7b96, 0x4091a7ba},
+{'q', 0xc18234f8, 0xb4800000},
+{0, 0xc1c846a0, 0xc12234f7},
+{'q', 0xc10c234f, 0xc12234f7},
+{0, 0xc10c234f, 0xc1e8469e},
+{'q', 0x00000000, 0xc1934f74},
+{0, 0x4108d3dd, 0xc1e234f6},
+{'q', 0x4109ee58, 0xc11ee588},
+{0, 0x41c69ee5, 0xc11ee588},
+{'q', 0x4181a7ba, 0x00000000},
+{0, 0x41c469ee, 0x411dcb08},
+{'9', 0x004e0042, 0x00ee0042},
+{'4', 0x000d0000, 0x0000fe57},
+{'m', 0x41a3dcb2, 0xc2008d3d},
+{'q', 0xc113dcb0, 0x00000000},
+{0, 0xc169ee58, 0x40c234f0},
+{'9', 0x0030ffd5, 0x0084ffd3},
+{'l', 0x42211a7c, 0x00000000},
+{'9', 0xff4cfff1, 0xff4cff61},
+{'m', 0xc198469f, 0xc189ee58},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000ec, 0x000054c2},/*        ì        x-advance: 84.757812 */
+{'M', 0x424d846a, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3de, 0x00000000},
+{'l', 0x00000000, 0xc25c234f},
+{'l', 0xc1b00001, 0x00000000},
+{'4', 0xffb20000, 0x00000113},
+{'6', 0x02060000, 0xfdb8ffc4},
+{'l', 0xc1a58469, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000ed, 0x000054c2},/*        í        x-advance: 84.757812 */
+{'M', 0x424d846a, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3de, 0x00000000},
+{'l', 0x00000000, 0xc25c234f},
+{'l', 0xc1b00001, 0x00000000},
+{'4', 0xffb20000, 0x00000113},
+{'6', 0x02060000, 0xfdb8ff7d},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000ee, 0x000054c2},/*        î        x-advance: 84.757812 */
+{'M', 0x424d846a, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3de, 0x00000000},
+{'l', 0x00000000, 0xc25c234f},
+{'l', 0xc1b00001, 0x00000000},
+{'4', 0xffb20000, 0x00000113},
+{'6', 0x02060000, 0xfdad0073},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b960, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee6, 0x4183dcb0},
+{'@', 0x000000ef, 0x000054c2},/*        ï        x-advance: 84.757812 */
+{'M', 0x424d846a, 0xc11cb08d},
+{'l', 0x41d1a7b8, 0x00000000},
+{'l', 0x00000000, 0x411cb08d},
+{'l', 0xc28772c2, 0x00000000},
+{'l', 0x35800000, 0xc11cb08d},
+{'l', 0x41e8d3de, 0x00000000},
+{'l', 0x00000000, 0xc25c234f},
+{'l', 0xc1b00001, 0x00000000},
+{'4', 0xffb20000, 0x00000113},
+{'6', 0x02060000, 0xfdaeff35},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611a, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000f0, 0x000054c2},/*        ð        x-advance: 84.757812 */
+{'M', 0x4228d3dd, 0xc28708d4},
+{'q', 0x41172c20, 0x00000000},
+{0, 0x417ee584, 0x408234f8},
+{'9', 0xff95ffd2, 0xff52ff87},
+{'4', 0x003fff71, 0xffc4ffe2},
+{'l', 0x41708d40, 0xc0cf72c0},
+{'9', 0xffd0ffc4, 0xffa9ff7b},
+{'l', 0x41669ee6, 0x00000000},
+{'9', 0x0013002c, 0x0038005d},
+{'4', 0xffc20091, 0x003b001e},
+{'l', 0xc168d3dc, 0x40cb08d0},
+{'9', 0x00a600b6, 0x01ae00b6},
+{'l', 0x00000000, 0x3ed3dd00},
+{'q', 0x00000000, 0x41900000},
+{0, 0xc10b08d8, 0x41da7b96},
+{'q', 0xc109ee54, 0x4113dcb0},
+{0, 0xc1ccb08c, 0x4113dcb0},
+{'q', 0xc17ffffe, 0xb4800000},
+{0, 0xc1c469ee, 0xc10e5847},
+{'q', 0xc108d3dc, 0xc10e5847},
+{0, 0xc108d3dc, 0xc1cd3dca},
+{'q', 0x00000000, 0xc1869ee6},
+{0, 0x4108d3dc, 0xc1ccb08e},
+{'9', 0xffba0044, 0xffba00c8},
+{'m', 0x41a611a6, 0x4209611b},
+{'q', 0x00000000, 0xc153dcb0},
+{0, 0xc09cb088, 0xc199611a},
+{'q', 0xc09a7b98, 0xc0c00000},
+{0, 0xc179611c, 0xc0c00000},
+{'q', 0xc12d3dca, 0x00000000},
+{0, 0xc17dcb08, 0x40c00000},
+{'q', 0xc09ee584, 0x40c00000},
+{0, 0xc09ee584, 0x4199611a},
+{'q', 0x00000000, 0x4151a7b8},
+{0, 0x409ee584, 0x4199ee58},
+{'q', 0x409ee584, 0x40c469ee},
+{0, 0x416f72c4, 0x40c469ee},
+{'q', 0x4131a7b8, 0x00000000},
+{0, 0x4181a7b8, 0xc0c00000},
+{'q', 0x40a58468, 0xc0c234f6},
+{0, 0x40a58468, 0xc19b08d4},
+{'@', 0x000000f1, 0x000054c2},/*        ñ        x-advance: 84.757812 */
+{'M', 0x426f72c2, 0x00000000},
+{'l', 0x00000000, 0xc23fb961},
+{'8', 0x91e3b500, 0xdca4dce4},
+{'q', 0xc108d3dc, 0x00000000},
+{0, 0xc1611a7c, 0x40c8d3e0},
+{'9', 0x0031ffd5, 0x0087ffd5},
+{'4', 0x01590000, 0x0000ff9d},
+{'l', 0x00000000, 0xc26ac235},
+{'9', 0xff980000, 0xff81fffd},
+{'l', 0x413b9612, 0x00000000},
+{'8', 0x0e010200, 0x1c010c00},
+{'9', 0x000f0001, 0x003b0002},
+{'l', 0x3e53dc80, 0x00000000},
+{'q', 0x40e7b964, 0xc16234f8},
+{0, 0x41bee585, 0xc16234f8},
+{'q', 0x413ee584, 0x00000000},
+{0, 0x418e5846, 0x40cf72c0},
+{'9', 0x0033002e, 0x009e002e},
+{'4', 0x018d0000, 0x0000ff9d},
+{'m', 0xc0c234f8, 0xc2a5a7b9},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c20, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000f2, 0x000054c2},/*        ò        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'9', 0xffc50027, 0xff4f0027},
+{'m', 0xc198469e, 0xc235cb08},
+{'l', 0xc1a5846b, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611a, 0x00000000},
+{'l', 0x417a7b98, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000f3, 0x000054c2},/*        ó        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'9', 0xffc50027, 0xff4f0027},
+{'m', 0xc1df72c2, 0xc235cb08},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b94, 0xc183dcb0},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000f4, 0x000054c2},/*        ô        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'9', 0xffc50027, 0xff4f0027},
+{'m', 0x40234f80, 0xc23b4f72},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000f5, 0x000054c2},/*        õ        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'9', 0xffc50027, 0xff4f0027},
+{'m', 0xc11846a0, 0xc235cb08},
+{'8', 0xf7d200e9, 0xead3f6e9},
+{'8', 0xead5f4ea, 0xf6d8f6ec},
+{'8', 0x05ea00f3, 0x0ef304f8},
+{'9', 0x0009fffb, 0x002dfff5},
+{'l', 0xc0f4f72c, 0x00000000},
+{'8', 0xb012cc06, 0xd723e50d},
+{'8', 0xf239f216, 0x0a2f0018},
+{'8', 0x162d0917, 0x162a0c16},
+{'8', 0x09260914, 0xf41f0014},
+{'9', 0xfff3000b, 0xffcc0010},
+{'l', 0x40f72c28, 0x00000000},
+{'8', 0x6adc4cf8, 0x1eb51ee5},
+{'@', 0x000000f6, 0x000054c2},/*        ö        x-advance: 84.757812 */
+{'M', 0x42974f73, 0xc215846a},
+{'q', 0x00000000, 0x41969ee6},
+{0, 0xc10b08d8, 0x41e69ee6},
+{'q', 0xc109ee58, 0x411ee584},
+{0, 0xc1c7b960, 0x411ee584},
+{'q', 0xc1800000, 0xb4800000},
+{0, 0xc1c469ee, 0xc1211a7c},
+{'q', 0xc107b962, 0xc1211a7c},
+{0, 0xc107b962, 0xc1e5846a},
+{'q', 0x00000000, 0xc199ee58},
+{0, 0x410b08d4, 0xc1e72c24},
+{'q', 0x410c2350, 0xc11b9610},
+{0, 0x41c611a7, 0xc11b9610},
+{'q', 0x41869ee6, 0x00000000},
+{0, 0x41c8469e, 0x41196118},
+{'9', 0x004c0041, 0x00e80041},
+{'m', 0xc1508d40, 0x00000000},
+{'q', 0x00000000, 0xc16d3dcc},
+{0, 0xc09846a0, 0xc1b11a7c},
+{'q', 0xc09611a8, 0xc0e9ee50},
+{0, 0xc173dcb0, 0xc0e9ee50},
+{'q', 0xc12b08d4, 0x00000000},
+{0, 0xc17a7b96, 0x40ee5840},
+{'q', 0xc09ee584, 0x40ee5848},
+{0, 0xc09ee584, 0x41b00000},
+{'q', 0x00000000, 0x4167b962},
+{0, 0x409ee584, 0x41b08d3e},
+{'q', 0x409ee584, 0x40f08d3e},
+{0, 0x416e5846, 0x40f08d3e},
+{'q', 0x412f72c4, 0x00000000},
+{0, 0x417dcb08, 0xc0ec2350},
+{'9', 0xffc50027, 0xff4f0027},
+{'m', 0xc21e11a8, 0xc23ac234},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000f7, 0x000054c2},/*        ÷        x-advance: 84.757812 */
+{'M', 0x41000000, 0xc227b961},
+{'l', 0x00000000, 0xc1211a7c},
+{'4', 0x00000224, 0x00500000},
+{'6', 0x0000fddc, 0x00d400e3},
+{'0', 0x005c9c00, 0x00a46400},
+{'m', 0x00000000, 0xc24ac234},
+{'0', 0x005c9c00, 0x00a46400},
+{'@', 0x000000f8, 0x000054c2},/*        ø        x-advance: 84.757812 */
+{'M', 0x429a11a8, 0xc215846a},
+{'q', 0x00000000, 0x419611a8},
+{0, 0xc10f72c8, 0x41e611a8},
+{'q', 0xc10f72c0, 0x41200000},
+{0, 0xc1d08d3c, 0x41200000},
+{'9', 0x0000ff90, 0xffc5ff4a},
+{'4', 0x0030ffd6, 0xffdbffd7},
+{'l', 0x40b9611a, 0xc0d1a7ba},
+{'q', 0xc0da7b95, 0xc11cb08d},
+{0, 0xc0da7b95, 0xc1d11a7c},
+{'q', 0x00000000, 0xc19611a8},
+{0, 0x410d3dcc, 0xc1e58468},
+{'q', 0x410e5846, 0xc11ee588},
+{0, 0x41cfffff, 0xc11ee588},
+{'9', 0x00000075, 0x003700b8},
+{'4', 0xffd30027, 0x0025002b},
+{'l', 0xc0b08d40, 0x40c69ee0},
+{'9', 0x004b0035, 0x00d30035},
+{'m', 0xc1508d40, 0x00000000},
+{'9', 0xffaf0000, 0xff7bffee},
+{'l', 0xc20c69ee, 0x421ee584},
+{'q', 0x40a9ee58, 0x40d1a7be},
+{0, 0x4173dcb0, 0x40d1a7be},
+{'q', 0x4139611c, 0x00000000},
+{0, 0x41869ee6, 0xc0e9ee58},
+{'9', 0xffc5002a, 0xff4e002a},
+{'m', 0xc22d846a, 0x00000000},
+{'9', 0x00500000, 0x00830012},
+{'l', 0x420c69ee, 0xc21ee584},
+{'q', 0xc0a58460, 0xc0c469f0},
+{0, 0xc1772c20, 0xc0c469f0},
+{'q', 0xc134f72c, 0x00000000},
+{0, 0xc185846a, 0x40ee5840},
+{'q', 0xc0a9ee58, 0x40ec2350},
+{0, 0xc0a9ee58, 0x41b00000},
+{'@', 0x000000f9, 0x000054c2},/*        ù        x-advance: 84.757812 */
+{'M', 0x41c9611a, 0xc2953dcb},
+{'l', 0x00000000, 0x423d3dcb},
+{'q', 0x00000000, 0x412c2350},
+{0, 0x405846a0, 0x416f72c2},
+{'q', 0x405846a0, 0x408469ee},
+{0, 0x41411a7c, 0x408469ee},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41611a7c, 0xc0c234f6},
+{'9', 0xffd00029, 0xff780029},
+{'4', 0xfea70000, 0x00000063},
+{'l', 0x00000000, 0x426ac235},
+{'9', 0x00680000, 0x007f0003},
+{'l', 0xc13b9614, 0x00000000},
+{'8', 0xf2fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc5ffff},
+{'l', 0xbe53dc00, 0x00000000},
+{'8', 0x57b13dde, 0x199119d4},
+{'q', 0xc14469ec, 0x00000000},
+{0, 0xc18fffff, 0xc0c234f8},
+{'9', 0xffcfffd3, 0xff5fffd3},
+{'4', 0xfe730000, 0x00000063},
+{'m', 0x418611a8, 0xc1034f70},
+{'l', 0xc1a5846a, 0xc17dcb08},
+{'l', 0x00000000, 0xc0000000},
+{'l', 0x4159611c, 0x00000000},
+{'l', 0x417a7b94, 0x4183dcb0},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000fa, 0x000054c2},/*        ú        x-advance: 84.757812 */
+{'M', 0x41c9611a, 0xc2953dcb},
+{'l', 0x00000000, 0x423d3dcb},
+{'q', 0x00000000, 0x412c2350},
+{0, 0x405846a0, 0x416f72c2},
+{'q', 0x405846a0, 0x408469ee},
+{0, 0x41411a7c, 0x408469ee},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41611a7c, 0xc0c234f6},
+{'9', 0xffd00029, 0xff780029},
+{'4', 0xfea70000, 0x00000063},
+{'l', 0x00000000, 0x426ac235},
+{'9', 0x00680000, 0x007f0003},
+{'l', 0xc13b9614, 0x00000000},
+{'8', 0xf2fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc5ffff},
+{'l', 0xbe53dc00, 0x00000000},
+{'8', 0x57b13dde, 0x199119d4},
+{'q', 0xc14469ec, 0x00000000},
+{0, 0xc18fffff, 0xc0c234f8},
+{'9', 0xffcfffd3, 0xff5fffd3},
+{'4', 0xfe730000, 0x00000063},
+{'m', 0x410c2350, 0xc1034f70},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x417a7b98, 0xc183dcb0},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000fb, 0x000054c2},/*        û        x-advance: 84.757812 */
+{'M', 0x41c9611a, 0xc2953dcb},
+{'l', 0x00000000, 0x423d3dcb},
+{'q', 0x00000000, 0x412c2350},
+{0, 0x405846a0, 0x416f72c2},
+{'q', 0x405846a0, 0x408469ee},
+{0, 0x41411a7c, 0x408469ee},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41611a7c, 0xc0c234f6},
+{'9', 0xffd00029, 0xff780029},
+{'4', 0xfea70000, 0x00000063},
+{'l', 0x00000000, 0x426ac235},
+{'9', 0x00680000, 0x007f0003},
+{'l', 0xc13b9614, 0x00000000},
+{'8', 0xf2fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc5ffff},
+{'l', 0xbe53dc00, 0x00000000},
+{'8', 0x57b13dde, 0x199119d4},
+{'q', 0xc14469ec, 0x00000000},
+{0, 0xc18fffff, 0xc0c234f8},
+{'9', 0xffcfffd3, 0xff5fffd3},
+{'4', 0xfe730000, 0x00000063},
+{'m', 0x42200001, 0xc1196118},
+{'l', 0x00000000, 0x3fb08d40},
+{'l', 0xc0e7b968, 0x00000000},
+{'l', 0xc171a7b8, 0xc11846a0},
+{'l', 0xbe0d3e00, 0x00000000},
+{'l', 0xc1800000, 0x411846a0},
+{'l', 0xc0e5846c, 0x00000000},
+{'l', 0x00000000, 0xbfb08d40},
+{'l', 0x418c234f, 0xc183dcb0},
+{'l', 0x4134f72c, 0x00000000},
+{'l', 0x41869ee8, 0x4183dcb0},
+{'@', 0x000000fc, 0x000054c2},/*        ü        x-advance: 84.757812 */
+{'M', 0x41c9611a, 0xc2953dcb},
+{'l', 0x00000000, 0x423d3dcb},
+{'q', 0x00000000, 0x412c2350},
+{0, 0x405846a0, 0x416f72c2},
+{'q', 0x405846a0, 0x408469ee},
+{0, 0x41411a7c, 0x408469ee},
+{'q', 0x410e5848, 0x00000000},
+{0, 0x41611a7c, 0xc0c234f6},
+{'9', 0xffd00029, 0xff780029},
+{'4', 0xfea70000, 0x00000063},
+{'l', 0x00000000, 0x426ac235},
+{'9', 0x00680000, 0x007f0003},
+{'l', 0xc13b9614, 0x00000000},
+{'8', 0xf2fffe00, 0xe5fff400},
+{'9', 0xfff00000, 0xffc5ffff},
+{'l', 0xbe53dc00, 0x00000000},
+{'8', 0x57b13dde, 0x199119d4},
+{'q', 0xc14469ec, 0x00000000},
+{0, 0xc18fffff, 0xc0c234f8},
+{'9', 0xffcfffd3, 0xff5fffd3},
+{'4', 0xfe730000, 0x00000063},
+{'m', 0xc00469e8, 0xc1172c20},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611b, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x000000fd, 0x000054c2},/*        ý        x-advance: 84.757812 */
+{'M', 0x41a11a7c, 0x41ea7b96},
+{'9', 0x0000ffd8, 0xfffaffbc},
+{'l', 0x00000000, 0xc114f72c},
+{'8', 0x032e0314, 0xe051002b},
+{'9', 0xffe00026, 0xff990041},
+{'l', 0x3f9ee5a0, 0xc058469e},
+{'4', 0xfdb2fefd, 0x00000069},
+{'l', 0x4191a7b9, 0x42311a7c},
+{'9', 0x007b0032, 0x008c0036},
+{'l', 0x4034f730, 0xc0f2c234},
+{'4', 0xfe4f00ab, 0x00000068},
+{'l', 0xc1fb9610, 0x42953dcb},
+{'q', 0xc0c469f0, 0x4181a7b9},
+{0, 0xc14c2350, 0x41b611a8},
+{'9', 0x0034ffcc, 0x0034ff83},
+{'m', 0x416f72c0, 0xc2e0469e},
+{'l', 0x00000000, 0xbfb08d80},
+{'l', 0x417a7b98, 0xc183dcb0},
+{'l', 0x41596118, 0x00000000},
+{'l', 0x00000000, 0x40000000},
+{'l', 0xc1a5846a, 0x417dcb08},
+{'l', 0xc108d3dc, 0x00000000},
+{'@', 0x000000fe, 0x000054c2},/*        þ        x-advance: 84.757812 */
+{'M', 0x41cb08d4, 0xc279611a},
+{'q', 0x405cb088, 0xc0e7b960},
+{0, 0x410c2350, 0xc127b960},
+{'q', 0x40ac2350, 0xc053dcc0},
+{0, 0x41600000, 0xc053dcc0},
+{'q', 0x415a7b94, 0x00000000},
+{0, 0x41a2c234, 0x41172c28},
+{'q', 0x40d611b0, 0x411611a4},
+{0, 0x40d611b0, 0x41e8469e},
+{'q', 0x00000000, 0x421c234f},
+{0, 0xc1d846a0, 0x421c234f},
+{'9', 0x0000ff79, 0xff9bff4a},
+{'l', 0xbeb08d40, 0x00000000},
+{'9', 0x00040002, 0x005b0002},
+{'l', 0x00000000, 0x41e9611a},
+{'l', 0xc147b961, 0x00000000},
+{'4', 0xfbe30000, 0x00000063},
+{'l', 0x00000000, 0x41e96118},
+{'9', 0x00230000, 0x0056fffe},
+{'6', 0x00000003, 0x00c50127},
+{'q', 0x00000000, 0xc179611c},
+{0, 0xc0869ee0, 0xc1b1a7ba},
+{'q', 0xc0869ee8, 0xc0d611b0},
+{0, 0xc153dcb0, 0xc0d611b0},
+{'q', 0xc1269ee8, 0x00000000},
+{0, 0xc1708d40, 0x40f2c240},
+{'q', 0xc093dcb0, 0x40f08d38},
+{0, 0xc093dcb0, 0x41b69ee4},
+{'q', 0x00000000, 0x416b08d4},
+{0, 0x4093dcb0, 0x41ac2350},
+{'q', 0x4093dcb0, 0x40da7b96},
+{0, 0x416e5848, 0x40da7b96},
+{'q', 0x4112c234, 0x00000000},
+{0, 0x415611a8, 0xc0dee584},
+{'q', 0x40869ee0, 0xc0dee586},
+{0, 0x40869ee0, 0xc1b72c22},
+{'@', 0x000000ff, 0x000054c2},/*        ÿ        x-advance: 84.757812 */
+{'M', 0x41a11a7c, 0x41ea7b96},
+{'9', 0x0000ffd8, 0xfffaffbc},
+{'l', 0x00000000, 0xc114f72c},
+{'8', 0x032e0314, 0xe051002b},
+{'9', 0xffe00026, 0xff990041},
+{'l', 0x3f9ee5a0, 0xc058469e},
+{'4', 0xfdb2fefd, 0x00000069},
+{'l', 0x4191a7b9, 0x42311a7c},
+{'9', 0x007b0032, 0x008c0036},
+{'l', 0x4034f730, 0xc0f2c234},
+{'4', 0xfe4f00ab, 0x00000068},
+{'l', 0xc1fb9610, 0x42953dcb},
+{'q', 0xc0c469f0, 0x4181a7b9},
+{0, 0xc14c2350, 0x41b611a8},
+{'9', 0x0034ffcc, 0x0034ff83},
+{'m', 0x4053dcb0, 0xc2e2c234},
+{'0', 0x005b9b00, 0x00a56500},
+{'m', 0x41d9611a, 0x00000000},
+{'0', 0x00599b00, 0x00a76500},
+{'@', 0x00000141, 0x000054c2},/*        Ł        x-advance: 84.757812 */
+{'M', 0x4182c235, 0x00000000},
+{'l', 0x00000000, 0xc1fcb08d},
+{'l', 0xc1011a7c, 0x40869ee4},
+{'l', 0xc091a7b8, 0xc1058468},
+{'l', 0x4149ee58, 0xc0d3dcb0},
+{'l', 0x00000000, 0xc24ac236},
+{'l', 0x4152c234, 0x00000000},
+{'l', 0x00000000, 0x422f72c3},
+{'l', 0x41a11a7b, 0xc1269ee8},
+{'l', 0x40869ee8, 0x4105846c},
+{'l', 0xc1c2c235, 0x414c2350},
+{'l', 0x00000000, 0x41ddcb08},
+{'l', 0x4239611a, 0x35800000},
+{'l', 0x00000000, 0x412c234f},
+{'l', 0xc26e11a8, 0x00000000},
+{'@', 0x000003c0, 0x000054c2},/*        π        x-advance: 84.757812 */
+{'M', 0x428772c2, 0xc281a7b9},
+{'l', 0x00000000, 0x4239ee58},
+{'8', 0x3d0b2900, 0x1228120b},
+{'9', 0x00000011, 0xfffc0024},
+{'l', 0x3fb08d40, 0x410e5847},
+{'8', 0x0bb20bd6, 0xe2a500c1},
+{'9', 0xffe1ffe4, 0xff97ffe4},
+{'4', 0xfe770000, 0x0000ff33},
+{'l', 0x00000000, 0x409ee580},
+{'9', 0x014c0000, 0x01deffdb},
+{'l', 0xc14f72c2, 0x00000000},
+{'q', 0x402c2350, 0xc12b08d4},
+{0, 0x408234f8, 0xc1d34f73},
+{'9', 0xff83000b, 0xfef9000b},
+{'l', 0x00000000, 0xc0b08d30},
+{'8', 0x06b100d4, 0x0dd006dd},
+{'l', 0xb4000000, 0xc1258468},
+{'8', 0xf52afa0d, 0xfc3afc1d},
+{'l', 0x42874f73, 0x00000000},
+{'l', 0x00000000, 0x411cb090},
+{'l', 0xc1611a80, 0x00000000},
+{'@', 0x0000201c, 0x000054c2},/*        “        x-advance: 84.757812 */
+{'M', 0x42288d3e, 0xc2ccb08d},
+{'l', 0xc13a7b98, 0x422b9611},
+{'4', 0x0000ff6e, 0xfea900ab},
+{'6', 0x00000043, 0x000000f2},
+{'l', 0xc13a7b98, 0x422b9611},
+{'l', 0xc19234f8, 0x00000000},
+{'l', 0x41ab9612, 0xc22b9611},
+{'l', 0x4107b964, 0x00000000},
+{'@', 0x0000201d, 0x000054c2},/*        ”        x-advance: 84.757812 */
+{'M', 0x414469ee, 0xc26dcb09},
+{'l', 0x413a7b96, 0xc22b9611},
+{'4', 0x00000092, 0x0157ff55},
+{'6', 0x0000ffbd, 0x000000f2},
+{'l', 0x413a7b98, 0xc22b9611},
+{'l', 0x419234f6, 0x00000000},
+{'l', 0xc1ab9612, 0x422b9611},
+{'l', 0xc107b960, 0x00000000},
+{'@', 0x00002022, 0x000054c2},/*        •        x-advance: 84.757812 */
+{'M', 0x4275cb09, 0xc23c234f},
+{'8', 0x6dd24000, 0x2d942dd3},
+{'8', 0xd39600c3, 0x93d4d3d4},
+{'8', 0x952cc100, 0xd46ad42c},
+{'8', 0x2c6d003f, 0x6b2d2b2d},
+{'@', 0x00002026, 0x000054c2},/*        …        x-advance: 84.757812 */
+{'M', 0x41011a7c, 0x00000000},
+{'l', 0x00000000, 0xc171a7b9},
+{'4', 0x00000060, 0x00780000},
+{'6', 0x0000ffa0, 0x000001c4},
+{'l', 0x00000000, 0xc171a7b9},
+{'4', 0x00000060, 0x00780000},
+{'6', 0x0000ffa0, 0x0000ff1f},
+{'l', 0x00000000, 0xc171a7b9},
+{'l', 0x413dcb08, 0x00000000},
+{'l', 0x00000000, 0x4171a7b9},
+{'l', 0xc13dcb08, 0x00000000},
+{'@', 0x000020ac, 0x000054c2},/*        €        x-advance: 84.757812 */
+{'M', 0x4270d3dd, 0xc1ff72c2},
+{'l', 0xc1fd3dcc, 0x00000000},
+{'q', 0x3f9611b0, 0x413dcb08},
+{0, 0x40cf72c0, 0x4189ee58},
+{'q', 0x40ac2350, 0x40ac2350},
+{0, 0x417cb090, 0x40ac2350},
+{'8', 0xf54f0029, 0xd35bf426},
+{'l', 0x40a7b960, 0x4114f72d},
+{'8', 0x349524c9, 0x0f920fcc},
+{'q', 0xc173dcb0, 0x00000000},
+{0, 0xc1c08d3e, 0xc10469ee},
+{'9', 0xffbeffba, 0xff3affaa},
+{'0', 0xb10000b8, 0xd7fe0041},
+{'9', 0xffe90000, 0xffd50002},
+{'4', 0x0000ffbf, 0xffb20000},
+{'l', 0x410e5846, 0x00000000},
+{'q', 0x40800000, 0xc201a7b9},
+{0, 0x420c69ef, 0xc201a7b9},
+{'8', 0x0e6c003a, 0x31640e32},
+{'l', 0xc0b4f730, 0x411a7b98},
+{'q', 0xc11846a0, 0xc0dcb090},
+{0, 0xc19b9612, 0xc0dcb090},
+{'q', 0xc134f72c, 0x00000000},
+{0, 0xc1834f72, 0x40a11a80},
+{'9', 0x0027ffd8, 0x0086ffcd},
+{'l', 0x41fe5847, 0x00000000},
+{'l', 0x00000000, 0x411b9610},
+{'l', 0xc20308d4, 0x00000000},
+{'l', 0xbe0d3e00, 0x40ac2350},
+{'l', 0x3e53dc80, 0x40a34f78},
+{'l', 0x4202c236, 0x00000000},
+{'l', 0xb6800000, 0x411cb08c},
+{'@', 0x00002122, 0x000054c2},/*        â„¢        x-advance: 84.757812 */
+{'M', 0x429a5847, 0xc268469f},
+{'l', 0x00000000, 0xc20d3dcb},
+{'4', 0x0009fffd, 0x0110ff92},
+{'l', 0xc0c469e8, 0x00000000},
+{'9', 0xff2affac, 0xfee6ff92},
+{'l', 0x00000000, 0x420d3dcb},
+{'l', 0xc0e7b960, 0x00000000},
+{'l', 0x00000000, 0xc230d3dd},
+{'l', 0x412c2350, 0x00000000},
+{'l', 0x414b08d4, 0x420046a0},
+{'l', 0x3f658480, 0x401a7b80},
+{'l', 0x40869ee0, 0xc12e5840},
+{'l', 0x41196120, 0xc1bcb090},
+{'4', 0x00000053, 0x01610000},
+{'6', 0x0000ffc7, 0xfed2fe35},
+{'l', 0x36000000, 0x421772c3},
+{'l', 0xc0f4f72c, 0x00000000},
+{'l', 0x00000000, 0xc21772c3},
+{'l', 0xc13cb08e, 0x00000000},
+{'l', 0x34b00000, 0xc0cb08d0},
+{'l', 0x41fc2350, 0x00000000},
+{'l', 0x00000000, 0x40cb08d0},
+{'l', 0xc1411a7c, 0x00000000},
+{'@', 0x00002190, 0x000054c2},/*        ←        x-advance: 84.757812 */
+{'M', 0x417ee584, 0xc2065847},
+{'9', 0x0024001f, 0x006c0041},
+{'l', 0xc09ee588, 0x00000000},
+{'9', 0xffaeffba, 0xff86ff6c},
+{'l', 0x35300000, 0xc01ee580},
+{'9', 0xffd8004e, 0xff860094},
+{'l', 0x409ee588, 0x00000000},
+{'9', 0x0047ffde, 0x006cffbf},
+{'l', 0x428869ee, 0x00000000},
+{'l', 0x37000000, 0x40bdcb08},
+{'l', 0xc28869ee, 0x00000000},
+{'@', 0x00002191, 0x000054c2},/*        ↑        x-advance: 84.757812 */
+{'M', 0x421d846a, 0xc2800000},
+{'9', 0x001fffdc, 0x0041ff94},
+{'l', 0x00000000, 0xc09ee588},
+{'9', 0xffba0052, 0xff6c007a},
+{'l', 0x401ee590, 0x00000000},
+{'9', 0x004e0028, 0x0094007a},
+{'l', 0x00000000, 0x409ee588},
+{'9', 0xffdeffb9, 0xffbfff94},
+{'l', 0x00000000, 0x428869ee},
+{'l', 0xc0bdcb08, 0x36200000},
+{'l', 0x00000000, 0xc28869ee},
+{'@', 0x00002192, 0x000054c2},/*        →        x-advance: 84.757812 */
+{'M', 0x4289846a, 0xc21e11a8},
+{'9', 0xffdcffe1, 0xff94ffbf},
+{'l', 0x409ee588, 0x00000000},
+{'9', 0x00520046, 0x007a0094},
+{'l', 0x00000000, 0x401ee580},
+{'9', 0x0028ffb2, 0x007aff6c},
+{'l', 0xc09ee588, 0x00000000},
+{'9', 0xffb90022, 0xff940041},
+{'l', 0xc28869ee, 0x00000000},
+{'l', 0xb6540000, 0xc0bdcb08},
+{'l', 0x428869ee, 0x00000000},
+{'@', 0x00002193, 0x000054c2},/*        ↓        x-advance: 84.757812 */
+{'M', 0x42353dcb, 0xc132c235},
+{'9', 0xffe10024, 0xffbf006c},
+{'l', 0x00000000, 0x409ee586},
+{'9', 0x0046ffae, 0x0094ff86},
+{'l', 0xc01ee590, 0xb5000000},
+{'9', 0xffb2ffd8, 0xff6cff86},
+{'l', 0x00000000, 0xc09ee584},
+{'9', 0x00220047, 0x0041006c},
+{'l', 0x00000000, 0xc28869ee},
+{'l', 0x40bdcb08, 0x00000000},
+{'l', 0x00000000, 0x428869ee},
+{'@', 0x00002212, 0x000054c2},/*        −        x-advance: 84.757812 */
+{'M', 0x41011a7c, 0xc227b961},
+{'l', 0x00000000, 0xc1211a7c},
+{'l', 0x42893dca, 0x00000000},
+{'l', 0x00000000, 0x41211a7c},
+{'l', 0xc2893dca, 0x00000000},
+{'@', 0x00002248, 0x000054c2},/*        ≈        x-advance: 84.757812 */
+{'M', 0x426d3dcb, 0xc2511a7c},
+{'8', 0xf5b200da, 0xe6b0f4d9},
+{'q', 0xc112c236, 0xc0469ef0},
+{0, 0xc16f72c4, 0xc0469ef0},
+{'8', 0x0abe00de, 0x26ba09e1},
+{'l', 0xb5000000, 0xc11ee584},
+{'q', 0x40fb9611, 0xc0b96120},
+{0, 0x41911a7b, 0xc0b96120},
+{'8', 0x0c52002a, 0x194f0c28},
+{'l', 0x3f846a00, 0x3eb08e00},
+{'8', 0x14461031, 0x03250315},
+{'9', 0x00000047, 0xffcd0086},
+{'l', 0x00000000, 0x412469ec},
+{'8', 0x21bf17df, 0x0ab20ae1},
+{'m', 0x3f8d3dc0, 0x419d3dcc},
+{'9', 0x00000047, 0xffce0086},
+{'l', 0x00000000, 0x412234fa},
+{'8', 0x23bf18df, 0x09b309e0},
+{'8', 0xf4b200da, 0xe6b0f4d9},
+{'q', 0xc112c236, 0xc04f72c0},
+{0, 0xc16f72c4, 0xc04f72c0},
+{'8', 0x0bbc00dc, 0x24bd0be0},
+{'l', 0xb5000000, 0xc11b9614},
+{'q', 0x40f4f72b, 0xc0b96118},
+{0, 0x41911a7b, 0xc0b96118},
+{'q', 0x40e11a7c, 0x00000000},
+{0, 0x4181a7b9, 0x404b08d0},
+{'8', 0x21681c51, 0x052c0518},
+{'@', 0x000025bc, 0x000054c2},/*        â–¼        x-advance: 84.757812 */
+{'M', 0x42a74f73, 0xc29a9ee5},
+{'l', 0xc224f72d, 0x429e5846},
+{'l', 0xc225846a, 0xc29e5846},
+{'l', 0x42a53dcc, 0x00000000},
+{'@', 0x00002660, 0x000054c2},/*        â™         x-advance: 84.757812 */
+{'M', 0x42308d3e, 0xc2a4d3dd},
+{'8', 0x6a272f00, 0x69633a27},
+{'8', 0x62643847, 0x541d291d},
+{'8', 0x5fdb3b00, 0x23a423db},
+{'8', 0xf1bb00df, 0xd9c8f0dc},
+{'q', 0x00000000, 0x4112c236},
+{0, 0x40c00000, 0x41669ee6},
+{'9', 0x00290030, 0x00290080},
+{'4', 0x001e0000, 0x0000fe6a},
+{'l', 0x36000000, 0xc0772c23},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41800001, 0xc0a5846a},
+{'q', 0x40c234f0, 0xc0a7b960},
+{0, 0x40c234f0, 0xc1669ee6},
+{'8', 0x27c717ec, 0x0fbc0fdc},
+{'8', 0xdda400c9, 0xa1dcdddc},
+{'8', 0xae1bd600, 0x9c66d81b},
+{'8', 0x9763d23c, 0x9627c527},
+{'l', 0x40658470, 0x00000000},
+{'@', 0x00002663, 0x000054c2},/*        ♣        x-advance: 84.757812 */
+{'M', 0x4229611a, 0xc2a4d3dd},
+{'8', 0x1151002e, 0x2e341022},
+{'8', 0x41121d12, 0x49ee2400},
+{'9', 0x0024ffee, 0x0038ffd2},
+{'l', 0x4072c230, 0xbe53dd00},
+{'q', 0x4114f730, 0x00000000},
+{0, 0x4171a7b8, 0x409846a0},
+{'8', 0x632e252e, 0x5fdb3b00},
+{'8', 0x23a423db, 0xf0b900df},
+{'q', 0xc09611a8, 0xc00469f0},
+{0, 0xc0e7b968, 0xc09cb090},
+{'q', 0x00000000, 0x4112c236},
+{0, 0x40c00000, 0x41669ee6},
+{'9', 0x00290030, 0x00290080},
+{'4', 0x001e0000, 0x0000fe6a},
+{'l', 0x36000000, 0xc0772c23},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41800001, 0xc0a5846a},
+{'q', 0x40c234f0, 0xc0a7b960},
+{0, 0x40c234f0, 0xc1669ee6},
+{'8', 0x27c716ed, 0x10b910dc},
+{'8', 0xdda400c9, 0xa1dcdddc},
+{'q', 0x00000000, 0xc0fb9610},
+{0, 0x40b9611a, 0xc148d3dc},
+{'9', 0xffdb002e, 0xffdb0078},
+{'l', 0x4072c238, 0x3e53dd00},
+{'8', 0xc8d2ede4, 0xb7eedcee},
+{'8', 0xbf12dd00, 0xd234e212},
+{'q', 0x4088d3d8, 0xc008d3e0},
+{0, 0x412234f4, 0xc008d3e0},
+{'@', 0x00002665, 0x000054c2},/*        ♥        x-advance: 84.757812 */
+{'M', 0x422234f7, 0x3d8d3dcb},
+{'q', 0x00000000, 0xc09611a8},
+{0, 0xc08469f0, 0xc13dcb09},
+{'q', 0xc08234f8, 0xc0e7b962},
+{0, 0xc152c234, 0xc1911a7c},
+{'q', 0xc181a7b9, 0xc19d3dcc},
+{0, 0xc181a7b9, 0xc1f611a8},
+{'8', 0xba12da00, 0xcf32e112},
+{'8', 0xef42ef1f, 0x24580031},
+{'9', 0x00230028, 0x005a0038},
+{'l', 0x3ed3dc80, 0x00000000},
+{'8', 0xa538c910, 0xdd58dd28},
+{'8', 0x11420023, 0x3131111f},
+{'q', 0x401611c0, 0x407b9620},
+{0, 0x401611c0, 0x410b08d4},
+{'q', 0x00000000, 0x4131a7b8},
+{0, 0xc181a7ba, 0x41f611a8},
+{'8', 0x6eac49c5, 0x46d924e8},
+{'q', 0xbfee5840, 0x408234f8},
+{0, 0xbfee5840, 0x40ee5847},
+{'l', 0xc0658470, 0x33b00000},
+{'@', 0x00002666, 0x000054c2},/*        ♦        x-advance: 84.757812 */
+{'M', 0x4111a7b9, 0xc224b08d},
+{'l', 0x00000000, 0xbe53dd00},
+{'9', 0xff640089, 0xfeb70106},
+{'l', 0x3f53dcc0, 0x00000000},
+{'9', 0x00ad007d, 0x01490106},
+{'l', 0x00000000, 0x3e53dd00},
+{'9', 0x009cff77, 0x0149fefa},
+{'l', 0xbf53dcc0, 0xb4d40000},
+{'q', 0xc17a7b96, 0xc1ad3dcb},
+{0, 0xc2034f73, 0xc224f72c},
+{'@', 0x0000fb01, 0x000054c2},/*        fi        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2832c23},
+{'l', 0x00000000, 0x42832c23},
+{'l', 0xc1469ee6, 0x00000000},
+{'l', 0x00000000, 0xc2832c23},
+{'0', 0xb80000ad, 0xbd000053},
+{'q', 0x00000000, 0xc1234f70},
+{0, 0x408f72c4, 0xc16b08d0},
+{'8', 0xdd6ddd23, 0x06460029},
+{'l', 0x00000000, 0x41172c20},
+{'8', 0xfcd4fce8, 0x13c900da},
+{'9', 0x0013ffef, 0x0046ffef},
+{'l', 0x00000000, 0x40d611a0},
+{'4', 0x00000074, 0x00480000},
+{'6', 0x0000ff8c, 0x020c0100},
+{'l', 0x00000000, 0xc2953dcb},
+{'4', 0x00000063, 0x02540000},
+{'6', 0x0000ff9d, 0xfd2d0000},
+{'0', 0x0063a200, 0x009d5e00},
+{'@', 0x0000fb02, 0x000054c2},/*        fl        x-advance: 84.757812 */
+{'M', 0x41e5846a, 0xc2832c23},
+{'l', 0x00000000, 0x42832c23},
+{'l', 0xc1469ee6, 0x00000000},
+{'l', 0x00000000, 0xc2832c23},
+{'0', 0xb80000ad, 0xbd000053},
+{'q', 0x00000000, 0xc1234f70},
+{0, 0x408f72c4, 0xc16b08d0},
+{'8', 0xdd6ddd23, 0x06460029},
+{'l', 0x00000000, 0x41172c20},
+{'8', 0xfcd4fce8, 0x13c900da},
+{'9', 0x0013ffef, 0x0046ffef},
+{'l', 0x00000000, 0x40d611a0},
+{'4', 0x00000074, 0x00480000},
+{'6', 0x0000ff8c, 0x020c0100},
+{'l', 0x00000000, 0xc2ccb08d},
+{'l', 0x41469ee8, 0x00000000},
+{'l', 0x00000000, 0x42ccb08d},
+{'l', 0xc1469ee8, 0x00000000},
+};
+#define ctx_font_Cousine_Regular_name "Cousine Regular"
+#endif
diff --git a/usermodule/uctx/fonts/Roboto-Bold.h b/usermodule/uctx/fonts/Roboto-Bold.h
new file mode 100644
index 0000000000000000000000000000000000000000..2a3be13baa6e16cb72b23b09d21f7ae2ca1480a1
--- /dev/null
+++ b/usermodule/uctx/fonts/Roboto-Bold.h
@@ -0,0 +1,4328 @@
+#ifndef CTX_FONT_Roboto_Bold
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™−≈fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Roboto_Bold[]={
+{15, 0x0000a008, 0x000010dd},/* length:4317 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000d, 0x00000002},/* Roboto Bold*/
+{32, 0x6f626f52, 0x42206f74},
+{'o', 0x0000646c, 0x00000000},
+{')', 0x0000000d, 0x00000002},
+{'(', 0x0000004b, 0x00000009},/* Apache Licence, Version 2.0
+                                Copyright 2014 Christian Robertson - Apache 2*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x636e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x43203431},
+{'h', 0x74736972, 0x206e6169},
+{'R', 0x7265626f, 0x6e6f7374},
+{32, 0x7041202d, 0x65686361},
+{32, 0x00000032, 0x00000000},
+{')', 0x0000004b, 0x00000009},
+{'@', 0x00000020, 0x00001e36},/*                 x-advance: 30.210938 */
+{'@', 0x00000021, 0x000020fe},/*        !        x-advance: 32.992188 */
+{'M', 0x41c9e17b, 0xc1ede5a7},
+{'l', 0xc18a60dd, 0x00000000},
+{'4', 0xfe3c0000, 0x0000008a},
+{'6', 0x01c40000, 0x00ed0000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0xb5000000, 0xc172a2d5},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x4172a2d5},
+{'@', 0x00000022, 0x000026dc},/*        "        x-advance: 38.859375 */
+{'M', 0x4184b10c, 0xc2989868},
+{'l', 0xc0c159c0, 0x416c0060},
+{'l', 0xc0f2a2d5, 0x00000000},
+{'4', 0xff080000, 0x0000006c},
+{'6', 0x00820000, 0x0000009a},
+{'l', 0xc0c159c0, 0x416c0060},
+{'l', 0xc0f2a2d8, 0x00000000},
+{'l', 0x00000000, 0xc1f852a4},
+{'l', 0x4159fe4c, 0x00000000},
+{'l', 0x00000000, 0x41825274},
+{'[', 0x00770022, 0x000000b5},/*kerning*/
+{'@', 0x00000023, 0x00004835},/*        #        x-advance: 72.207031 */
+{'M', 0x421a045c, 0xc1c24c65},
+{'l', 0xc135fa1e, 0x00000000},
+{'l', 0xc0869654, 0x41c24c65},
+{'l', 0xc12e6509, 0x00000000},
+{'l', 0x40887b96, 0xc1c24c65},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xc1202d7e},
+{'l', 0x4172a2d4, 0x00000000},
+{'l', 0x404159c8, 0xc1896e3a},
+{'l', 0xc15be392, 0x00000000},
+{'l', 0x35000000, 0xc12212c4},
+{'l', 0x417852a6, 0x00000000},
+{'l', 0x408a60e0, 0xc1c5244c},
+{'l', 0x412d7266, 0x00000000},
+{'l', 0xc08a60e0, 0x41c5244c},
+{'l', 0x4135fa20, 0x00000000},
+{'l', 0x408c4620, 0xc1c5244c},
+{'l', 0x412d7268, 0x00000000},
+{'l', 0xc08a60e0, 0x41c5244c},
+{'l', 0x415083f0, 0x00000000},
+{'l', 0x00000000, 0x412212c4},
+{'l', 0xc16cf304, 0x00000000},
+{'l', 0xc04159c0, 0x41896e3a},
+{'l', 0x4155411c, 0x00000000},
+{'l', 0x00000000, 0x41202d7e},
+{'l', 0xc170bd90, 0x00000000},
+{'4', 0x00c2ffde, 0x0000ffa9},
+{'6', 0xff3e0022, 0xffb0ffb4},
+{'l', 0x4135077e, 0x00000000},
+{'l', 0x404159c0, 0xc1896e3a},
+{'l', 0xc135fa20, 0x00000000},
+{'l', 0xc03d8f38, 0x41896e3a},
+{'@', 0x00000024, 0x0000459a},/*        $        x-advance: 69.601562 */
+{'M', 0x423af3f7, 0xc1b580ce},
+{'8', 0xc2eada00, 0xd3b5e8eb},
+{'q', 0xc1526936, 0xc0998b08},
+{0, 0xc19c62f4, 0xc12a9a7c},
+{'q', 0xc0cad41e, 0xc0bd8f38},
+{0, 0xc0cad41e, 0xc1852a5e},
+{'q', 0x00000000, 0xc11f3ae0},
+{0, 0x40cad420, 0xc1825274},
+{'9', 0xffcd0033, 0xffc40089},
+{'4', 0xff9b0000, 0x0000004b},
+{'l', 0x00000000, 0x414dac08},
+{'q', 0x4126cff4, 0x3fc52440},
+{0, 0x4182cbc6, 0x410b5380},
+{'9', 0x0039002f, 0x0094002e},
+{'4', 0x0002ffff, 0x0000ff79},
+{'8', 0xaae9c900, 0xe2c2e2ea},
+{'8', 0x17c400d8, 0x3eed17ed},
+{'8', 0x3c142400, 0x2d4d1615},
+{'q', 0x41517694, 0x40a4eaa8},
+{0, 0x419af700, 0x41304a4c},
+{'q', 0x40cad420, 0x40bba9f0},
+{0, 0x40cad420, 0x41834519},
+{'q', 0x00000000, 0x4124eaac},
+{0, 0xc0cad420, 0x4183be6a},
+{'9', 0x0031ffce, 0x003aff77},
+{'4', 0x005d0000, 0x0000ffb5},
+{'l', 0x00000000, 0xc13ab74e},
+{'q', 0xc1313cf2, 0xbf9010ad},
+{0, 0xc1926f46, 0xc0fa37eb},
+{'9', 0xffcaffc7, 0xff62ffc9},
+{'4', 0xfffe0000, 0x00000087},
+{'8', 0x5a1c3f00, 0x1b4a1b1d},
+{'8', 0xea41002b, 0xc217e917},
+{'@', 0x00000025, 0x000059a0},/*        %        x-advance: 89.625000 */
+{'M', 0x40b414da, 0xc28b5380},
+{'8', 0x9b27c300, 0xd86ed827},
+{'8', 0x286e0047, 0x65272827},
+{'l', 0x00000000, 0x4091f5f0},
+{'8', 0x65d93d00, 0x289328d9},
+{'8', 0xd89200b9, 0x9bd9d8d9},
+{'6', 0xffdc0000, 0x0024005b},
+{'8', 0x2e0f1b00, 0x122b120f},
+{'8', 0xee2a001b, 0xd20fee0f},
+{'l', 0x00000000, 0xc091f5f0},
+{'8', 0xd2f1e500, 0xedd5edf1},
+{'8', 0x13d500e5, 0x2ef212f2},
+{'6', 0x00240000, 0x015f00ed},
+{'8', 0x9b27c400, 0xd86ed827},
+{'8', 0x286e0047, 0x65272827},
+{'l', 0x00000000, 0x4091f5f8},
+{'8', 0x65d93d00, 0x289328d9},
+{'8', 0xd89100b9, 0x9bd9d8d9},
+{'6', 0xffdc0000, 0x0024005b},
+{'8', 0x2e101b00, 0x122b1210},
+{'8', 0xef2c001e, 0xd10dee0d},
+{'l', 0x00000000, 0xc091f5f8},
+{'8', 0xd3f1e500, 0xedd5edf1},
+{'8', 0x13d500e4, 0x2df212f2},
+{'6', 0x00240000, 0x0051ff08},
+{'l', 0xc1069652, 0xc08e2b6a},
+{'l', 0x4228788f, 0xc286d2fb},
+{'l', 0x41069654, 0x408e2b70},
+{'l', 0xc2287890, 0x4286d2fa},
+{'@', 0x00000026, 0x00004fbb},/*        &        x-advance: 79.730469 */
+{'M', 0x40674333, 0xc1b9c4ab},
+{'8', 0xa01ec900, 0xac5dd81e},
+{'8', 0xb1d0d5e0, 0xb7f1dcf1},
+{'q', 0x00000000, 0xc123f810},
+{0, 0x40ccb966, 0xc182cbc8},
+{'q', 0x40ccb960, 0xc0c52450},
+{0, 0x4188f4e9, 0xc0c52450},
+{'q', 0x4116b320, 0x00000000},
+{0, 0x4174881c, 0x40bba9f0},
+{'q', 0x40bd8f30, 0x40b9c4b0},
+{0, 0x40bd8f30, 0x41619360},
+{'8', 0x54e92e00, 0x43c126e9},
+{'4', 0x001fffd4, 0x00980082},
+{'8', 0xc31ae411, 0xba09df09},
+{'l', 0x414e9ea8, 0x00000000},
+{'q', 0x00000000, 0x4102cbc8},
+{0, 0xc000e680, 0x4170bd90},
+{'9', 0x0036fff0, 0x0061ffcf},
+{'l', 0x41452450, 0x41674333},
+{'4', 0x00020000, 0x0000ff67},
+{'l', 0xc091f5f0, 0xc0a8b538},
+{'8', 0x27ae1ad8, 0x0ca50cd6},
+{'q', 0xc14e9ea8, 0x00000000},
+{0, 0xc1a4715b, 0xc0d81906},
+{'9', 0xffcaffc3, 0xff73ffc3},
+{'m', 0x41e8af28, 0x41332237},
+{'8', 0xfa320019, 0xed30fa19},
+{'4', 0xff5cff72, 0x0006fff7},
+{'8', 0x2cdf16e8, 0x2bf815f8},
+{'8', 0x451a2a00, 0x1b441b1a},
+{'m', 0xc0c159c4, 0xc2548b22},
+{'8', 0x2a091400, 0x2f1e150a},
+{'l', 0x40a30564, 0xc0544e80},
+{'8', 0xdd23ef1a, 0xd909ee09},
+{'8', 0xd6efe900, 0xeed3eeef},
+{'8', 0x14d100e2, 0x33f014f0},
+{'@', 0x00000027, 0x0000138c},/*        '        x-advance: 19.546875 */
+{'M', 0x4184b10c, 0xc298f365},
+{'l', 0xc0c159c0, 0x41861d00},
+{'l', 0xc0f2a2d5, 0x00000000},
+{'l', 0x00000000, 0xc202cbc6},
+{'l', 0x4159fe4a, 0x00000000},
+{'l', 0x00000000, 0x417ef518},
+{'[', 0x00770027, 0x000000b5},/*kerning*/
+{'@', 0x00000028, 0x00002a1e},/*        (        x-advance: 42.117188 */
+{'M', 0x40eb0dbe, 0xc20c4623},
+{'q', 0x00000000, 0xc1b9c4ac},
+{0, 0x411010af, 0xc21d923f},
+{'9', 0xff7f0048, 0xff5800a3},
+{'4', 0x00000002, 0x00450019},
+{'q', 0xc0f852a8, 0x40b9c4b0},
+{0, 0xc15083f0, 0x4195c080},
+{'9', 0x0067ffd6, 0x0107ffd6},
+{'l', 0x00000000, 0x3fc52460},
+{'q', 0x00000000, 0x41a0a6d0},
+{0, 0x40a8b538, 0x4203fb12},
+{'9', 0x0066002a, 0x00960068},
+{'4', 0x0043ffe7, 0x0000fffe},
+{'q', 0xc135fa20, 0xc0998b08},
+{0, 0xc1a30567, 0xc1a7c295},
+{'q', 0xc11010af, 0xc1815fd2},
+{0, 0xc11010af, 0xc21dcee8},
+{'l', 0x00000000, 0xbfa6cfe0},
+{'[', 0x00560028, 0x0000015c},/*kerning*/
+{'[', 0x00570028, 0x0000018a},/*kerning*/
+{'[', 0x00590028, 0x0000017b},/*kerning*/
+{'[', 0x00dd0028, 0x0000017b},/*kerning*/
+{'@', 0x00000029, 0x00002a3c},/*        )        x-advance: 42.234375 */
+{'M', 0x420ea4ba, 0xc2070fa4},
+{'q', 0x00000000, 0x41b580cf},
+{0, 0xc116b322, 0x421cdc45},
+{'9', 0x0083ffb6, 0x00a9ff5a},
+{'4', 0x0000fffe, 0xffbdffe7},
+{'q', 0x40f4881a, 0xc0b9c4ac},
+{0, 0x414f914c, 0xc19639d1},
+{'9', 0xff99002a, 0xfef8002a},
+{'l', 0x00000000, 0xbfc52460},
+{'q', 0x00000000, 0xc19f3ada},
+{0, 0xc0ac7fc2, 0xc203be69},
+{'9', 0xff98ffd5, 0xff69ff99},
+{'4', 0xffbd0019, 0x00000002},
+{'q', 0x4137df66, 0x4097a5d0},
+{0, 0x41a6cff2, 0x41aa212c},
+{'q', 0x4116b322, 0x418437bc},
+{0, 0x4116b322, 0x421c9f9d},
+{'l', 0x00000000, 0x3fa6cfe0},
+{'@', 0x0000002a, 0x000035c9},/*        *        x-advance: 53.785156 */
+{'M', 0x419be9a2, 0xc264e49c},
+{'l', 0xc18f1e0c, 0xc0a8b538},
+{'l', 0x40581908, 0xc127c294},
+{'l', 0x418cbf75, 0x40e92870},
+{'l', 0xbf887ba0, 0xc1a47158},
+{'l', 0x41313cf0, 0x00000000},
+{'l', 0xbf9010a0, 0x41a74944},
+{'l', 0x4189e78c, 0xc0e378b0},
+{'l', 0x40544e80, 0x412a9a80},
+{'l', 0xc1910352, 0x40a8b538},
+{'l', 0x413d8f38, 0x417b2a8c},
+{'l', 0xc11010b0, 0x40d083f0},
+{'l', 0xc124eaac, 0xc1896e3a},
+{'l', 0xc123f80a, 0x41852a5e},
+{'l', 0xc1110352, 0xc0c8eed8},
+{'l', 0x414616f0, 0xc180e682},
+{'@', 0x0000002b, 0x0000422b},/*        +        x-advance: 66.167969 */
+{'M', 0x4224715b, 0xc240671f},
+{'l', 0x41aa9a7e, 0x00000000},
+{'l', 0x00000000, 0x416ed84c},
+{'l', 0xc1aa9a7e, 0x00000000},
+{'l', 0x00000000, 0x41c431aa},
+{'l', 0xc182cbc6, 0xb5800000},
+{'l', 0x00000000, 0xc1c431aa},
+{'l', 0xc1ab8d21, 0x00000000},
+{'l', 0x35000000, 0xc16ed84c},
+{'l', 0x41ab8d21, 0x00000000},
+{'l', 0x00000000, 0xc1bab74e},
+{'l', 0x4182cbc6, 0x00000000},
+{'l', 0x00000000, 0x41bab74e},
+{'@', 0x0000002c, 0x00001f46},/*        ,        x-advance: 31.273438 */
+{'M', 0x41c59d9e, 0xbf45244d},
+{'l', 0xc116b321, 0x4195472e},
+{'l', 0xc138d208, 0x00000000},
+{'l', 0x4084b10b, 0xc1998b0b},
+{'l', 0x00000000, 0xc1581906},
+{'l', 0x41869652, 0x00000000},
+{'l', 0x00000000, 0x4160a0bf},
+{'@', 0x0000002d, 0x00002f72},/*        -        x-advance: 47.445312 */
+{'M', 0x42206a27, 0xc1f1b032},
+{'l', 0xc205a3af, 0x00000000},
+{'l', 0x00000000, 0xc155411c},
+{'l', 0x4205a3af, 0x00000000},
+{'l', 0x00000000, 0x4155411c},
+{'@', 0x0000002e, 0x0000234e},/*        .        x-advance: 35.304688 */
+{'M', 0x41ce9ea9, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0x00000000, 0xc172a2d5},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x4172a2d5},
+{'@', 0x0000002f, 0x000030de},/*        /        x-advance: 48.867188 */
+{'M', 0x417fe7bd, 0x40ecf304},
+{'l', 0xc1869652, 0x00000000},
+{'l', 0x41fd0fd4, 0xc2bb4ef3},
+{'l', 0x41869652, 0x00000000},
+{'l', 0xc1fd0fd4, 0x42bb4ef3},
+{'@', 0x00000030, 0x0000459a},/*        0        x-advance: 69.601562 */
+{'M', 0x427fe7bd, 0xc20659a9},
+{'q', 0x00000000, 0x4188f4e8},
+{0, 0xc0fc1d38, 0x41d00a9d},
+{'q', 0xc0fa37e8, 0x410d38c6},
+{0, 0xc1a9a7da, 0x410d38c6},
+{'q', 0xc1581906, 0xb5000000},
+{0, 0xc1ab13cf, 0xc10d38c6},
+{'9', 0xffb9ffc1, 0xff30ffc1},
+{'l', 0x00000000, 0xc1981f18},
+{'q', 0x00000000, 0xc1887b96},
+{0, 0x40fa37ec, 0xc1cf914a},
+{'q', 0x40fc1d32, 0xc10f1e10},
+{0, 0x41aa9a7e, 0xc10f1e10},
+{'q', 0x415633c0, 0x00000000},
+{0, 0x41aa212c, 0x410f1e10},
+{'9', 0x0047003f, 0x00cf003f},
+{'6', 0x00980000, 0xff5aff77},
+{'q', 0x00000000, 0xc123f808},
+{0, 0xc0452450, 0xc16fcaf0},
+{'8', 0xdab9dae8, 0x25b900d2},
+{'9', 0x0025ffe8, 0x0078ffe8},
+{'l', 0x00000000, 0x41b39b89},
+{'q', 0x00000000, 0x4126cff2},
+{0, 0x404159c0, 0x4172a2d4},
+{'8', 0x25482518, 0xdb46002e},
+{'q', 0x404159c0, 0xc097a5c4},
+{0, 0x404159c0, 0xc172a2d4},
+{'l', 0x00000000, 0xc1b39b89},
+{'@', 0x00000031, 0x0000459a},/*        1        x-advance: 69.601562 */
+{'M', 0x4233d831, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0x00000000, 0xc28deec0},
+{'l', 0xc18c4623, 0x00000000},
+{'l', 0x00000000, 0xc1433f08},
+{'l', 0x420b5380, 0xc0452440},
+{'l', 0x00000000, 0x42ac7fc3},
+{'@', 0x00000032, 0x0000459a},/*        2        x-advance: 69.601562 */
+{'M', 0x42817e27, 0x00000000},
+{'4', 0x0000fe29, 0xffa60000},
+{'l', 0x41df34cc, 0xc1ef519c},
+{'8', 0xa344c930, 0xb914da14},
+{'8', 0xb9e9d500, 0xe5bee5e9},
+{'8', 0x20b800d1, 0x56e820e8},
+{'4', 0x0000ff7a, 0xfffe0000},
+{'q', 0xbe97a5c0, 0xc13ab74c},
+{0, 0x40f4881c, 0xc19dcee6},
+{'q', 0x40ffe7ba, 0xc101d928},
+{0, 0x41ac0672, 0xc101d928},
+{'q', 0x4155411c, 0x00000000},
+{0, 0x41a74944, 0x40ddc8e0},
+{'q', 0x40f48818, 0x40ddc8d0},
+{0, 0x40f48818, 0x4193db38},
+{'q', 0x00000000, 0x40fa37e8},
+{0, 0xc08a60d8, 0x41674334},
+{'9', 0x0034ffde, 0x008aff8f},
+{'l', 0xc1757ac0, 0x41861d00},
+{'l', 0x3df2a300, 0x3e97a600},
+{'l', 0x42110352, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'@', 0x00000033, 0x0000459a},/*        3        x-advance: 69.601562 */
+{'M', 0x41bab74e, 0xc249e17b},
+{'l', 0x411b7050, 0x00000000},
+{'8', 0xe7480031, 0xb817e617},
+{'8', 0xbee9d700, 0xe7bce7e9},
+{'8', 0x16bf00da, 0x3be616e6},
+{'4', 0x0000ff7a, 0xfffe0000},
+{'q', 0xbeb5fa20, 0xc12212c0},
+{0, 0x40f852a6, 0xc185a3b0},
+{'q', 0x4101d924, 0xc0d26930},
+{0, 0x41a12022, 0xc0d26930},
+{'q', 0x415633c0, 0x00000000},
+{0, 0x41aa9a7e, 0x40ccb960},
+{'q', 0x40ffe7b8, 0x40ccb970},
+{0, 0x40ffe7b8, 0x4191f5f6},
+{'8', 0x55e42d00, 0x3fb228e4},
+{'8', 0x3e571439, 0x621e2a1e},
+{'q', 0x00000000, 0x413d8f37},
+{0, 0xc10a60e0, 0x4195472e},
+{'q', 0xc1096e3c, 0x40d81907},
+{0, 0xc1b04a4e, 0x40d81907},
+{'q', 0xc1406720, 0x00000000},
+{0, 0xc1a563fe, 0xc0cad41e},
+{'9', 0xffcdffbc, 0xff70ffbe},
+{'4', 0xfffe0000, 0x00000086},
+{'8', 0x411c2700, 0x1948191c},
+{'8', 0xe64b002f, 0xb81be61b},
+{'8', 0xb1e5ca00, 0xe7b0e7e5},
+{'l', 0xc11b7050, 0x00000000},
+{'l', 0x00000000, 0xc14f914c},
+{'@', 0x00000034, 0x0000459a},/*        4        x-advance: 69.601562 */
+{'M', 0x4262495c, 0xc2006d30},
+{'l', 0x411c62f0, 0x00000000},
+{'l', 0x00000000, 0x415633c2},
+{'l', 0xc11c62f0, 0x00000000},
+{'l', 0x00000000, 0x4195c07f},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0x00000000, 0xc195c07f},
+{'l', 0xc20cbf74, 0x00000000},
+{'l', 0xbf452468, 0xc125dd50},
+{'4', 0xfe37011e, 0x0000008b},
+{'6', 0x01b10000, 0x0000fed8},
+{'l', 0x419ec18a, 0x00000000},
+{'l', 0x00000000, 0xc1f852a6},
+{'l', 0xbeb5fa00, 0xbdf2a200},
+{'l', 0xbfae6500, 0x401b7050},
+{'l', 0xc1910352, 0x41e5d73e},
+{'@', 0x00000035, 0x0000459a},/*        5        x-advance: 69.601562 */
+{'M', 0x4100e681, 0xc218d511},
+{'l', 0x409f3adc, 0xc2402a75},
+{'l', 0x4240671f, 0x00000000},
+{'4', 0x006e0000, 0x0000fef1},
+{'l', 0xc017a5c8, 0x419f3ade},
+{'8', 0xe92df212, 0xf73bf71b},
+{'q', 0x41470990, 0xbe35fa00},
+{0, 0x419a045c, 0x40f0bd90},
+{'q', 0x40dbe388, 0x40f66d60},
+{0, 0x40dbe388, 0x41ab8d21},
+{'q', 0x00000000, 0x41470992},
+{0, 0xc0f0bd88, 0x41a563fe},
+{'q', 0xc0eed848, 0x4103be6a},
+{0, 0xc1ac7fc4, 0x4103be6a},
+{'q', 0xc13e81d8, 0xb5000000},
+{0, 0xc1a30567, 0xc0ce9eaa},
+{'9', 0xffccffbd, 0xff71ffbf},
+{'4', 0xfffe0000, 0xfffa0085},
+{'8', 0x481a2d00, 0x1944191a},
+{'8', 0xde470030, 0xa617de17},
+{'8', 0xa1e8c500, 0xdcb8dce8},
+{'8', 0x0ec300d9, 0x27e30eec},
+{'l', 0xc1739577, 0xbf80e680},
+{'@', 0x00000036, 0x0000459a},/*        6        x-advance: 69.601562 */
+{'M', 0x422212c4, 0xc2aefcaf},
+{'8', 0x07470026, 0x15420721},
+{'l', 0xc0452450, 0x414ad418},
+{'8', 0xf0c9f6e1, 0xfbc8fbe8},
+{'q', 0xc0fc1d30, 0x00000000},
+{0, 0xc14ad420, 0x40bd8f40},
+{'9', 0x002effdb, 0x0082ffdd},
+{'l', 0x3e35fa00, 0x3e97a580},
+{'8', 0xdb3ae817, 0xf350f323},
+{'q', 0x4138d208, 0x00000000},
+{0, 0x41908a00, 0x4103be6c},
+{'q', 0x40d26938, 0x4102cbc4},
+{0, 0x40d26938, 0x41a74943},
+{'q', 0x00000000, 0x415083f0},
+{0, 0xc101d924, 0x41ac0672},
+{'q', 0xc100e680, 0x410788f6},
+{0, 0xc1a74944, 0x410788f6},
+{'q', 0xc15af0ee, 0xb5000000},
+{0, 0xc1b22f94, 0xc113db3a},
+{'9', 0xffb6ffbc, 0xff33ffbc},
+{'l', 0x35000000, 0xc1869652},
+{'q', 0x00000000, 0xc18788f4},
+{0, 0x411c62f4, 0xc1d79fb4},
+{'9', 0xffb0004e, 0xffb000c7},
+{'m', 0xc07e0270, 0x422ad727},
+{'8', 0x0cbf00da, 0x21d70ce5},
+{'l', 0x00000000, 0x40b7df68},
+{'q', 0x00000000, 0x4123f80a},
+{0, 0x406b0db8, 0x417c1d32},
+{'8', 0x2c4f2c1d, 0xda44002a},
+{'8', 0xa21ad91a, 0xa4e6c700},
+{'q', 0xc05083f0, 0xc08e2b68},
+{0, 0xc10b5380, 0xc08e2b68},
+{'@', 0x00000037, 0x0000459a},/*        7        x-advance: 69.601562 */
+{'M', 0x428104d6, 0xc291d7a0},
+{'q', 0xc15dc8dc, 0x4181d924},
+{0, 0xc197a5c8, 0x41f22984},
+{'9', 0x0070ffd8, 0x010fffc7},
+{'4', 0x0046fffa, 0x0000ff76},
+{'l', 0x3f544e80, 0xc10c4623},
+{'q', 0x4000e680, 0xc1981f16},
+{0, 0x410a60dc, 0xc20b9029},
+{'9', 0xff810035, 0xff160091},
+{'l', 0xc2313cf2, 0x00000000},
+{'l', 0x36000000, 0xc1554118},
+{'l', 0x4273d222, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'@', 0x00000038, 0x0000459a},/*        8        x-advance: 69.601562 */
+{'M', 0x4278cbf7, 0xc27d8926},
+{'8', 0x5be53300, 0x3eb627e5},
+{'8', 0x42561736, 0x621f2b1f},
+{'q', 0x00000000, 0x413f747d},
+{0, 0xc101d928, 0x419361e9},
+{'q', 0xc101d924, 0x40ccb963},
+{0, 0xc1a9a7da, 0x40ccb963},
+{'q', 0xc1535bd8, 0x00000000},
+{0, 0xc1ab13cf, 0xc0ccb964},
+{'q', 0xc101d924, 0xc0ce9ea9},
+{0, 0xc101d924, 0xc19361e9},
+{'8', 0x9e1fc900, 0xbe57d51f},
+{'8', 0xc3b5ead0, 0xa5e5d9e5},
+{'q', 0x00000000, 0xc137df60},
+{0, 0x40f0bd90, 0xc18e2b68},
+{'q', 0x40f0bd90, 0xc0cad420},
+{0, 0x419ec18b, 0xc0cad420},
+{'q', 0x414431a8, 0x00000000},
+{0, 0x419ec18a, 0x40cad420},
+{'9', 0x0032003c, 0x008e003c},
+{'m', 0xc1748818, 0x421a7dae},
+{'8', 0xb6e5d200, 0xe5bae5e5},
+{'8', 0x1bba00d5, 0x4ae61be6},
+{'8', 0x4a1a2f00, 0x1b461b1a},
+{'8', 0xe545002b, 0xb61ae51a},
+{'m', 0xbffa3800, 0xc217691c},
+{'8', 0xbeead700, 0xe7c5e7eb},
+{'8', 0x19c500db, 0x43eb18eb},
+{'8', 0x44152b00, 0x193c1915},
+{'8', 0xe73a0025, 0xbc15e715},
+{'@', 0x00000039, 0x0000459a},/*        9        x-advance: 69.601562 */
+{'M', 0x41f66d60, 0xc140671f},
+{'q', 0x40d9fe50, 0x00000000},
+{0, 0x41313cf4, 0xc0a12022},
+{'9', 0xffd80022, 0xff8c0022},
+{'l', 0x00000000, 0xc0887b94},
+{'8', 0x2cc91de9, 0x0fbc0fe1},
+{'q', 0xc140671e, 0x00000000},
+{0, 0xc197a5c4, 0xc0fa37f0},
+{'q', 0xc0dbe394, 0xc0fc1d30},
+{0, 0xc0dbe394, 0xc1aa212c},
+{'q', 0x00000000, 0xc14e9eac},
+{0, 0x4102cbc7, 0xc1ab8d22},
+{'q', 0x4102cbc7, 0xc1096e38},
+{0, 0x41a656a0, 0xc1096e38},
+{'q', 0x41535bd8, 0x00000000},
+{0, 0x41ab8d22, 0x4111f5f8},
+{'9', 0x00480041, 0x00cc0041},
+{'l', 0x00000000, 0x41a30568},
+{'q', 0x00000000, 0x417b2a8e},
+{0, 0xc113db38, 0x41c59d9e},
+{'q', 0xc112e898, 0x411010b0},
+{0, 0xc1bba9f2, 0x411010b0},
+{'8', 0xf9b600dc, 0xebbaf9db},
+{'l', 0x4000e680, 0xc147fc36},
+{'8', 0x113c0b1e, 0x0544051e},
+{'m', 0x40322f90, 0xc1e835d6},
+{'8', 0xf43b0022, 0xde29f419},
+{'l', 0x00000000, 0xc0fe0278},
+{'q', 0x00000000, 0xc117a5c0},
+{0, 0xc0544e70, 0xc1665090},
+{'8', 0xd9b8d9e6, 0x26bc00d7},
+{'8', 0x5ee626e6, 0x5f173a00},
+{'q', 0x404159c0, 0x409010a8},
+{0, 0x41087b96, 0x409010a8},
+{'@', 0x0000003a, 0x00002279},/*        :        x-advance: 34.472656 */
+{'M', 0x41ce9ea9, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'4', 0xff870000, 0x0000008a},
+{'6', 0x00790000, 0xfe610000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0x00000000, 0xc172a2d8},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x4172a2d8},
+{'@', 0x0000003b, 0x0000214a},/*        ;        x-advance: 33.289062 */
+{'M', 0x41cf17fb, 0xc24f914c},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xff870000, 0x0000008a},
+{'6', 0x00790000, 0x0198000e},
+{'l', 0xc116b322, 0x4195472e},
+{'l', 0xc138d209, 0x00000000},
+{'l', 0x4084b10c, 0xc1998b0b},
+{'l', 0x00000000, 0xc1581906},
+{'l', 0x41869652, 0x00000000},
+{'l', 0x36000000, 0x4160a0bf},
+{'@', 0x0000003c, 0x00003dc8},/*        <        x-advance: 61.781250 */
+{'M', 0x41a0a6d0, 0xc2025275},
+{'l', 0x00000000, 0x3eb5fa00},
+{'l', 0x4208b841, 0x4140671e},
+{'l', 0x00000000, 0x4180e681},
+{'l', 0xc24c4013, 0xc1adebb7},
+{'l', 0x35800000, 0xc1572662},
+{'l', 0x424c4013, 0xc1ad7268},
+{'l', 0x00000000, 0x4180e682},
+{'l', 0xc208b841, 0x414431ac},
+{'@', 0x0000003d, 0x000045f5},/*        =        x-advance: 69.957031 */
+{'M', 0x4274881b, 0xc234cad4},
+{'l', 0xc2544e7b, 0x00000000},
+{'4', 0xff940000, 0x000001a8},
+{'6', 0x006c0000, 0x00cc0000},
+{'l', 0xc2544e7b, 0x00000000},
+{'l', 0x35800000, 0xc1590ba8},
+{'l', 0x42544e7b, 0x00000000},
+{'l', 0x00000000, 0x41590ba8},
+{'@', 0x0000003e, 0x00003eac},/*        >        x-advance: 62.671875 */
+{'M', 0x42270c9b, 0xc201d924},
+{'l', 0x00000000, 0xbeb5fa00},
+{'l', 0xc20ada2f, 0xc1433f08},
+{'l', 0x35800000, 0xc17ef51c},
+{'l', 0x424e9eaa, 0x41ad7268},
+{'l', 0x00000000, 0x41572662},
+{'l', 0xc24e9eaa, 0x41adebb7},
+{'l', 0x35800000, 0xc17fe7bc},
+{'l', 0x420ada2f, 0xc14616f0},
+{'@', 0x0000003f, 0x00003c7b},/*        ?        x-advance: 60.480469 */
+{'M', 0x41998b0b, 0xc1c431aa},
+{'8', 0x9f13be00, 0xb64ce213},
+{'8', 0xc535e521, 0xb914e114},
+{'8', 0xbce9d500, 0xe8bfe8ea},
+{'8', 0x14c500dd, 0x3de814e8},
+{'4', 0x0000ff7a, 0xfffe0000},
+{'q', 0xbe35fa20, 0xc135fa20},
+{0, 0x40eed849, 0xc18b5380},
+{'q', 0x40f66d62, 0xc0c159c0},
+{0, 0x41a02d7e, 0xc0c159c0},
+{'q', 0x41544e7c, 0x00000000},
+{0, 0x41a656a2, 0x40d81900},
+{'q', 0x40f2a2d0, 0x40d633c0},
+{0, 0x40f2a2d0, 0x4191f5f6},
+{'8', 0x6fdd3c00, 0x55a833dd},
+{'8', 0x2ddb16e4, 0x3df716f7},
+{'6', 0x0000ff77, 0x00c4008a},
+{'l', 0xc18b5381, 0x00000000},
+{'l', 0x00000000, 0xc16cf304},
+{'l', 0x418b5381, 0x00000000},
+{'l', 0x00000000, 0x416cf304},
+{'@', 0x00000040, 0x00006ba2},/*        @        x-advance: 107.632812 */
+{'M', 0x42ccf60c, 0xc1f31c26},
+{'q', 0xbf087b80, 0x414e9ea8},
+{0, 0xc0f2a2d0, 0x41b22f94},
+{'q', 0xc0e19360, 0x4115c080},
+{0, 0xc1a8b538, 0x4115c080},
+{'8', 0xecc100dc, 0xc6daece5},
+{'8', 0x3acc26ec, 0x13b813e2},
+{'q', 0xc105a3b0, 0x00000000},
+{0, 0xc14dac08, 0xc0e19362},
+{'q', 0xc08e2b64, 0xc0e19362},
+{0, 0xc05083e8, 0xc195472e},
+{'q', 0x3fbd8f30, 0xc170bd8e},
+{0, 0x410788f6, 0xc1c0e071},
+{'q', 0x40e19360, 0xc1110350},
+{0, 0x41887b98, 0xc1110350},
+{'8', 0x0c580036, 0x25490c21},
+{'4', 0x0001ffff, 0x00000002},
+{'l', 0xc04159c0, 0x4207c59e},
+{'8', 0x3d062dfd, 0x101b1009},
+{'q', 0x40d9fe50, 0x00000000},
+{0, 0x412e6508, 0xc0ce9ea9},
+{'q', 0x4084b110, 0xc0ce9eaa},
+{0, 0x4093db40, 0xc182cbc6},
+{'q', 0x3f72a300, 0xc1a74944},
+{0, 0xc101d920, 0xc2028f1e},
+{'q', 0xc11010b0, 0xc13ba9f4},
+{0, 0xc1df34cc, 0xc13ba9f4},
+{'q', 0xc18f975e, 0x00000000},
+{0, 0xc1e55dee, 0x4149e17c},
+{'q', 0xc12b8d20, 0x4149e17c},
+{0, 0xc139c4ab, 0x42074c4c},
+{'q', 0xbf80e680, 0x41a83be8},
+{0, 0x410a60dd, 0x4204b10d},
+{'q', 0x411a7dae, 0x41424c64},
+{0, 0x41de4229, 0x41424c64},
+{'8', 0xf7520028, 0xe949f72b},
+{'l', 0x401010a0, 0x410b537f},
+{'8', 0x1faf13e1, 0x0aa10ad0},
+{'q', 0xc1bba9f1, 0x00000000},
+{0, 0xc210c6a9, 0xc16c0060},
+{'q', 0xc14ad41d, 0xc16c0062},
+{0, 0xc13ab74d, 0xc2219973},
+{'q', 0x3f887b98, 0xc1ca5acd},
+{0, 0x4171b033, 0xc221d61c},
+{'q', 0x41619362, 0xc1739578},
+{0, 0x4214548a, 0xc1739578},
+{'q', 0x41b76614, 0x00000000},
+{0, 0x420c82cc, 0x41665090},
+{'9', 0x00720061, 0x0139005a},
+{'m', 0xc26f519a, 0x40b7df64},
+{'8', 0x5b083cfc, 0x1e2c1e0d},
+{'8', 0xf42f001a, 0xd326f415},
+{'8', 0xfe00ff00, 0xfd00ff00},
+{'l', 0x4026cff0, 0xc1eb0dbf},
+{'8', 0xfbebfdf6, 0xffeafff6},
+{'q', 0xc0d26930, 0x00000000},
+{0, 0xc1202d7c, 0x40b7df60},
+{'q', 0xc05be390, 0x40b5fa20},
+{0, 0xc09010b0, 0x4189e78d},
+{'@', 0x00000041, 0x00004da8},/*        A        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'l', 0xc12a9a7c, 0xc20788f6},
+{'l', 0xbeb5fa00, 0x00000000},
+{'l', 0xc12b8d22, 0x420788f6},
+{'@', 0x00000042, 0x00004dd6},/*        B        x-advance: 77.835938 */
+{'M', 0x4100e681, 0x00000000},
+{'4', 0xfd4f0000, 0x000000e9},
+{'q', 0x41739578, 0x00000000},
+{0, 0x41be0888, 0x40bd8f30},
+{'q', 0x41087b94, 0x40bd8f30},
+{0, 0x41087b94, 0x418db218},
+{'8', 0x55e72f00, 0x38b725e7},
+{'8', 0x385c0d3e, 0x641f2b1f},
+{'q', 0x00000000, 0x414616ef},
+{0, 0xc102cbc8, 0x419639d0},
+{'9', 0x0032ffbf, 0x0032ff47},
+{'6', 0x0000fef7, 0xfecf008a},
+{'4', 0x00c70000, 0x0000007f},
+{'8', 0xe9530036, 0xb91ce81c},
+{'8', 0xb3e8ce00, 0xe5b3e5e8},
+{'6', 0x0000ff77, 0xffa10000},
+{'l', 0x41470994, 0x00000000},
+{'8', 0xea550037, 0xbe1dea1d},
+{'8', 0xbae2d100, 0xeaa7eae3},
+{'l', 0xc13d8f38, 0x00000000},
+{'l', 0x00000000, 0x41b67372},
+{'@', 0x00000043, 0x00004d8a},/*        C        x-advance: 77.539062 */
+{'M', 0x429250f1, 0xc1ea946d},
+{'l', 0x3df2a400, 0x3eb5fa40},
+{'q', 0x3e72a200, 0x415ebb79},
+{0, 0xc1087b98, 0x41b0c3a0},
+{'q', 0xc10b5380, 0x4101d924},
+{0, 0xc1c1d314, 0x4101d924},
+{'q', 0xc1794548, 0xb5000000},
+{0, 0xc1ca5acc, 0xc1202d7f},
+{'9', 0xffb0ffb3, 0xff32ffb3},
+{'l', 0xb5000000, 0xc188f4e8},
+{'q', 0x00000000, 0xc17b2a94},
+{0, 0x4117a5c6, 0xc1ce255a},
+{'q', 0x4117a5c4, 0xc1212020},
+{0, 0x41c5244d, 0xc1212020},
+{'q', 0x417fe7bc, 0x00000000},
+{0, 0x41c7fc34, 0x4103be68},
+{'9', 0x00410048, 0x00b20046},
+{'4', 0x00020000, 0x0000ff7a},
+{'8', 0x98e0bc00, 0xdc9bdce0},
+{'q', 0xc0f852a8, 0x00000000},
+{0, 0xc145244e, 0x40cad420},
+{'9', 0x0032ffdc, 0x0080ffdc},
+{'l', 0x00000000, 0x4189e78c},
+{'q', 0x00000000, 0x411e483a},
+{0, 0x40998b08, 0x4181d924},
+{'8', 0x32673226, 0xde5f0040},
+{'q', 0x407a37f0, 0xc08c4624},
+{0, 0x407a37f0, 0xc14f914c},
+{'l', 0x41861d00, 0x00000000},
+{'@', 0x00000044, 0x00004f7f},/*        D        x-advance: 79.496094 */
+{'M', 0x4100e681, 0x00000000},
+{'4', 0xfd4f0000, 0x000000ec},
+{'q', 0x417d0fd4, 0x00000000},
+{0, 0x41d083f0, 0x412212c0},
+{'9', 0x00500051, 0x00cf0051},
+{'l', 0x00000000, 0x41646b48},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc123f808, 0x41cf914c},
+{'9', 0x0050ffaf, 0x0050ff30},
+{'6', 0x0000ff14, 0xfdb9008a},
+{'4', 0x01dd0000, 0x0000005b},
+{'q', 0x4114cddc, 0x00000000},
+{0, 0x41692878, 0xc0c8eed8},
+{'9', 0xffce002a, 0xff7d002a},
+{'l', 0x00000000, 0xc1665090},
+{'q', 0x00000000, 0xc1202d7c},
+{0, 0xc0a8b538, 0xc1825274},
+{'q', 0xc0a8b538, 0xc0c8eee0},
+{0, 0xc1692878, 0xc0c8eee0},
+{'l', 0xc136ecc4, 0x00000000},
+{'@', 0x00000045, 0x000045a9},/*        E        x-advance: 69.660156 */
+{'M', 0x42744b72, 0xc217a5c5},
+{'l', 0xc20ee163, 0x00000000},
+{'l', 0x00000000, 0x41c5244d},
+{'l', 0x42270c9b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc26c3d0a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426bc3b8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc2269349, 0x00000000},
+{'l', 0x00000000, 0x41ad7268},
+{'l', 0x420ee163, 0x00000000},
+{'l', 0x00000000, 0x4155411c},
+{'[', 0x00540045, 0x0000012f},/*kerning*/
+{'@', 0x00000046, 0x00004604},/*        F        x-advance: 70.015625 */
+{'M', 0x4275f40f, 0xc20f5ab4},
+{'l', 0xc2108a00, 0x00000000},
+{'l', 0x00000000, 0x420f5ab4},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426de5a8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc228b539, 0x00000000},
+{'l', 0x00000000, 0x41be0888},
+{'l', 0x42108a00, 0x00000000},
+{'l', 0x00000000, 0x41554120},
+{'[', 0x00540046, 0x0000012f},/*kerning*/
+{'@', 0x00000047, 0x00005118},/*        G        x-advance: 81.093750 */
+{'M', 0x42949134, 0xc13c9c94},
+{'q', 0xc0766d60, 0x40a30568},
+{0, 0xc1406720, 0x41110352},
+{'q', 0xc101d924, 0x407e0276},
+{0, 0xc1a4715c, 0x407e0276},
+{'q', 0xc17d0fd2, 0x00000000},
+{0, 0xc1ce9ea8, 0xc11d5596},
+{'9', 0xffb2ffb0, 0xff34ffb0},
+{'l', 0x35000000, 0xc19010ae},
+{'q', 0x00000000, 0xc17a37ec},
+{0, 0x41198b0a, 0xc1cbc6c2},
+{'q', 0x411a7dae, 0xc11e4838},
+{0, 0x41c69041, 0xc11e4838},
+{'q', 0x417c1d34, 0x00000000},
+{0, 0x41c0e072, 0x40f66d60},
+{'9', 0x003d0043, 0x00a10044},
+{'4', 0x00020000, 0x0000ff7e},
+{'8', 0xaaddcafd, 0xe0a5e0e1},
+{'q', 0xc0fe0278, 0x00000000},
+{0, 0xc14cb964, 0x40c52450},
+{'9', 0x0030ffda, 0x007effda},
+{'l', 0x00000000, 0x41910350},
+{'q', 0x00000000, 0x411d5596},
+{0, 0x40a12024, 0x417fe7be},
+{'8', 0x306c3028, 0xf74d0030},
+{'9', 0xfff7001d, 0xffe8002c},
+{'l', 0x00000000, 0xc17fe7be},
+{'l', 0xc174881c, 0x00000000},
+{'l', 0x00000000, 0xc13f747c},
+{'l', 0x42025276, 0x00000000},
+{'l', 0x00000000, 0x420215cd},
+{'@', 0x00000048, 0x000055e4},/*        H        x-advance: 85.890625 */
+{'M', 0x429b8ea5, 0x00000000},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0x00000000, 0xc20f5ab4},
+{'l', 0xc20cbf75, 0x00000000},
+{'l', 0x00000000, 0x420f5ab4},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x4214548a},
+{'l', 0x420cbf75, 0x00000000},
+{'l', 0x00000000, 0xc214548a},
+{'l', 0x4189e78c, 0x00000000},
+{'l', 0x00000000, 0x42ac7fc3},
+{'@', 0x00000049, 0x0000239a},/*        I        x-advance: 35.601562 */
+{'M', 0x41d35bd8, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x42ac7fc3},
+{'@', 0x0000004a, 0x0000453f},/*        J        x-advance: 69.246094 */
+{'M', 0x4230c3a0, 0xc2ac7fc3},
+{'4', 0x00000089, 0x01e20000},
+{'q', 0x00000000, 0x4147fc38},
+{0, 0xc102cbc8, 0x419ec18c},
+{'q', 0xc101d920, 0x40e92877},
+{0, 0xc1a4715a, 0x40e92877},
+{'q', 0xc1581906, 0x00000000},
+{0, 0xc1ab13d0, 0xc0d26935},
+{'9', 0xffccffc1, 0xff66ffc4},
+{'4', 0xfffe0000, 0x00000086},
+{'8', 0x4f1a3600, 0x1846181a},
+{'8', 0xe3400026, 0xaf1be31b},
+{'l', 0x00000000, 0xc2717388},
+{'@', 0x0000004b, 0x00004e5e},/*        K        x-advance: 78.367188 */
+{'M', 0x420bccd2, 0xc21010ae},
+{'l', 0xc1198b0c, 0x00000000},
+{'l', 0x00000000, 0x421010ae},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x420cfc1c},
+{'l', 0x40f0bd90, 0x00000000},
+{'l', 0x41b6ecc2, 0xc20cfc1c},
+{'l', 0x41a92e88, 0x00000000},
+{'l', 0xc1e835d4, 0x4220a6cf},
+{'l', 0x41fab13c, 0x423858b7},
+{'l', 0xc1a8b536, 0x00000000},
+{'l', 0xc1b94b5a, 0xc21010ae},
+{'@', 0x0000004c, 0x000041a2},/*        L        x-advance: 65.632812 */
+{'M', 0x41cad41e, 0xc1544e7a},
+{'l', 0x42198b0b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc25ebb7a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x4291f5f4},
+{'[', 0x0041004c, 0x0000014d},/*kerning*/
+{'[', 0x00c0004c, 0x0000014d},/*kerning*/
+{'[', 0x00c1004c, 0x0000014d},/*kerning*/
+{'[', 0x00c2004c, 0x0000014d},/*kerning*/
+{'[', 0x00c3004c, 0x0000014d},/*kerning*/
+{'[', 0x00c4004c, 0x0000014d},/*kerning*/
+{'[', 0x00c5004c, 0x0000014d},/*kerning*/
+{'@', 0x0000004d, 0x000069db},/*        M        x-advance: 105.855469 */
+{'M', 0x41f5016c, 0xc2ac7fc3},
+{'l', 0x41afd0fe, 0x427e3f1f},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x41b13cf2, 0xc27e3f1f},
+{'l', 0x41b5077c, 0x00000000},
+{'l', 0x00000000, 0x42ac7fc3},
+{'l', 0xc18a60dc, 0x00000000},
+{'l', 0x00000000, 0xc1cdac07},
+{'l', 0x3fd44e80, 0xc2185bc0},
+{'l', 0xbeb5fa00, 0xbd729c00},
+{'l', 0xc1b8d20a, 0x427f6e6b},
+{'l', 0xc139c4ac, 0x00000000},
+{'l', 0xc1b7df65, 0xc27e7bc8},
+{'l', 0xbeb5fa40, 0x3d72a000},
+{'l', 0x3fd44e80, 0x4217691c},
+{'l', 0x00000000, 0x41cdac08},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x41b48e2c, 0x00000000},
+{'@', 0x0000004e, 0x000055e4},/*        N        x-advance: 85.890625 */
+{'M', 0x429b8ea5, 0x00000000},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0xc20b5380, 0xc26bc3b8},
+{'l', 0xbeb5fa80, 0x3d72a000},
+{'l', 0x00000000, 0x426b8710},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x420b5380, 0x426b870f},
+{'l', 0x3eb5fa80, 0xbd72a400},
+{'l', 0x00000000, 0xc26b4a66},
+{'l', 0x4189e78c, 0x00000000},
+{'l', 0x00000000, 0x42ac7fc3},
+{'@', 0x0000004f, 0x000052df},/*        O        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'q', 0x409f3ae0, 0xc0ce9ea8},
+{0, 0x409f3ae0, 0xc185a3b0},
+{'l', 0x00000000, 0xc17a37ec},
+{'@', 0x00000050, 0x00004f05},/*        P        x-advance: 79.019531 */
+{'M', 0x41cad41e, 0xc1fa37ec},
+{'l', 0x00000000, 0x41fa37ec},
+{'4', 0x0000ff76, 0xfd4f0000},
+{'l', 0x42096e3b, 0x00000000},
+{'q', 0x416de5a8, 0x00000000},
+{0, 0x41bb309e, 0x40f2a2d0},
+{'q', 0x41087b98, 0x40f2a2d0},
+{0, 0x41087b98, 0x419fb42c},
+{'q', 0x00000000, 0x414616f0},
+{0, 0xc1087b98, 0x419f3adc},
+{'9', 0x003cffbc, 0x003cff45},
+{'6', 0x0000ff78, 0xff960000},
+{'l', 0x41887b98, 0x00000000},
+{'8', 0xe1570039, 0xb01de11d},
+{'8', 0xafe3cf00, 0xe0a9e0e3},
+{'l', 0xc1887b98, 0x00000000},
+{'l', 0x00000000, 0x41e28606},
+{'[', 0x00740050, 0x000000f2},/*kerning*/
+{'[', 0x00760050, 0x00000101},/*kerning*/
+{'[', 0x00790050, 0x00000101},/*kerning*/
+{'[', 0x00fd0050, 0x00000101},/*kerning*/
+{'[', 0x00ff0050, 0x00000101},/*kerning*/
+{'@', 0x00000051, 0x000054e3},/*        Q        x-advance: 84.886719 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x40fa37f0},
+{0, 0xc0230580, 0x416835d8},
+{'9', 0x0035ffec, 0x005cffc6},
+{'4', 0x006f0072, 0x0049ffa6},
+{'l', 0xc17852a8, 0xc170bd90},
+{'8', 0x0ecb09e7, 0x04c804e5},
+{'q', 0xc17ef518, 0x00000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'q', 0x409f3ae0, 0xc0ce9ea8},
+{0, 0x409f3ae0, 0xc185a3b0},
+{'l', 0x00000000, 0xc17a37ec},
+{'@', 0x00000052, 0x00005035},/*        R        x-advance: 80.207031 */
+{'M', 0x41cad41e, 0xc209e78c},
+{'l', 0x00000000, 0x4209e78c},
+{'4', 0x0000ff76, 0xfd4f0000},
+{'l', 0x420215cd, 0x00000000},
+{'q', 0x416c0060, 0x00000000},
+{0, 0x41b858b6, 0x40d81900},
+{'q', 0x4105a3b0, 0x40d633c0},
+{0, 0x4105a3b0, 0x4195c080},
+{'8', 0x5be53500, 0x3eaf26e5},
+{'8', 0x3c57123d, 0x681b2a1b},
+{'l', 0x00000000, 0x40cad41c},
+{'8', 0x3c071c00, 0x2e1b1f08},
+{'4', 0x00090000, 0x0000ff72},
+{'8', 0xcee8f1ee, 0xbdfbddfb},
+{'l', 0x00000000, 0xc0c33f06},
+{'8', 0xb0e4cd00, 0xe4b1e4e5},
+{'6', 0x0000ff7d, 0xff960000},
+{'l', 0x416ed848, 0x00000000},
+{'8', 0xe856003a, 0xb81ce81c},
+{'8', 0xb5e4d100, 0xe5ace5e4},
+{'l', 0xc1739578, 0x00000000},
+{'l', 0x00000000, 0x41c8eeda},
+{'@', 0x00000053, 0x00004cf3},/*        S        x-advance: 76.949219 */
+{'M', 0x425a779d, 0xc1b414da},
+{'8', 0xc1e4d900, 0xd39ee8e5},
+{'q', 0xc1766d60, 0xc08e2b68},
+{0, 0xc1ba3dfc, 0xc128b538},
+{'q', 0xc0fc1d33, 0xc0c33f08},
+{0, 0xc0fc1d33, 0xc185a3ae},
+{'q', 0x00000000, 0xc129a7e0},
+{0, 0x411010ae, 0xc18a60e0},
+{'q', 0x41110352, 0xc0d81900},
+{0, 0x41b8d208, 0xc0d81900},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b94b5a, 0x40f2a2d0},
+{'9', 0x003c0047, 0x00940045},
+{'4', 0x00020000, 0x0000ff7a},
+{'8', 0xb3e0d100, 0xe3a7e3e1},
+{'8', 0x18ab00c9, 0x3fe218e2},
+{'q', 0x00000000, 0x408c4628},
+{0, 0x4080e680, 0x40e74338},
+{'q', 0x4082cbc4, 0x40322f90},
+{0, 0x4160a0be, 0x40bd8f38},
+{'q', 0x41646b4c, 0x407e0270},
+{0, 0x41acf916, 0x4127c294},
+{'q', 0x40eb0dc0, 0x40d083f0},
+{0, 0x40eb0dc0, 0x4188f4e9},
+{'q', 0x00000000, 0x41313cf2},
+{0, 0xc10c4624, 0x418bccd2},
+{'q', 0xc10b5380, 0x40ccb963},
+{0, 0xc1b858b8, 0x40ccb963},
+{'q', 0xc1619360, 0x00000000},
+{0, 0xc1c4aafb, 0xc0e74333},
+{'9', 0xffc6ffad, 0xff5dffaf},
+{'4', 0xfffe0000, 0x00000086},
+{'8', 0x5a253d00, 0x1c691c25},
+{'8', 0xe9560038, 0xc21de91d},
+{'@', 0x00000054, 0x0000453f},/*        T        x-advance: 69.246094 */
+{'M', 0x42874c4c, 0xc291d7a0},
+{'l', 0xc1c33f06, 0x00000000},
+{'l', 0x00000000, 0x4291d7a0},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc291d7a0},
+{'l', 0xc1c24c64, 0x00000000},
+{'l', 0xb5400000, 0xc1554118},
+{'l', 0x4283fb12, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'[', 0x00540054, 0x00000120},/*kerning*/
+{'[', 0x00560054, 0x00000120},/*kerning*/
+{'[', 0x00570054, 0x00000101},/*kerning*/
+{'[', 0x00590054, 0x00000120},/*kerning*/
+{'[', 0x00dd0054, 0x00000120},/*kerning*/
+{'@', 0x00000055, 0x00005358},/*        U        x-advance: 83.343750 */
+{'M', 0x42989868, 0xc2ac7fc3},
+{'l', 0x00000000, 0x4264e49b},
+{'q', 0x00000000, 0x416835d6},
+{0, 0xc1198b08, 0x41b32238},
+{'q', 0xc1198b0c, 0x40fc1d2f},
+{0, 0xc1c8eeda, 0x40fc1d2f},
+{'q', 0xc1776004, 0x00000000},
+{0, 0xc1c7fc36, 0xc0fc1d31},
+{'9', 0xffc1ffb5, 0xff4dffb5},
+{'4', 0xfe370000, 0x0000008a},
+{'l', 0x00000000, 0x4264e49b},
+{'8', 0x66244400, 0x21642124},
+{'8', 0xdf650040, 0x9a24df24},
+{'l', 0x00000000, 0xc264e49b},
+{'l', 0x418ada30, 0x00000000},
+{'@', 0x00000056, 0x00004d2f},/*        V        x-advance: 77.183594 */
+{'M', 0x4215472e, 0xc1b76614},
+{'l', 0x3f887ba0, 0x4095c080},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x3f80e680, 0xc091f5f4},
+{'l', 0x419639d2, 0xc27dc5ce},
+{'l', 0x4191f5f4, 0x00000000},
+{'l', 0xc1ea946e, 0x42ac7fc3},
+{'l', 0xc18e2b69, 0x00000000},
+{'l', 0xc1ea1b1b, 0xc2ac7fc3},
+{'l', 0x4191f5f4, 0x00000000},
+{'l', 0x4195472e, 0x427d4c7c},
+{'[', 0x00290056, 0x0000015c},/*kerning*/
+{'[', 0x005d0056, 0x0000012f},/*kerning*/
+{'[', 0x007d0056, 0x0000014d},/*kerning*/
+{'@', 0x00000057, 0x00006b84},/*        W        x-advance: 107.515625 */
+{'M', 0x42989868, 0xc1d90ba9},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x41452450, 0xc26c79b2},
+{'l', 0x41870fa4, 0x00000000},
+{'l', 0xc1a12024, 0x42ac7fc3},
+{'l', 0xc1806d30, 0x00000000},
+{'l', 0xc17d0fd0, 0xc263b550},
+{'l', 0xbeb5fa80, 0x00000000},
+{'l', 0xc17d0fd4, 0x4263b550},
+{'l', 0xc1806d2f, 0x00000000},
+{'l', 0xc1a19973, 0xc2ac7fc3},
+{'l', 0x418788f5, 0x00000000},
+{'l', 0x414616f0, 0x426c3d09},
+{'l', 0x3eb5fa00, 0x3d72a200},
+{'l', 0x41815fd3, 0xc26c79b2},
+{'l', 0x414bc6c0, 0x00000000},
+{'l', 0x41825276, 0x426c79b2},
+{'[', 0x00290057, 0x00000101},/*kerning*/
+{'[', 0x00540057, 0x000000f2},/*kerning*/
+{'[', 0x005d0057, 0x000000d4},/*kerning*/
+{'[', 0x007d0057, 0x000000f2},/*kerning*/
+{'@', 0x00000058, 0x00004d2f},/*        X        x-advance: 77.183594 */
+{'M', 0x4219c7b3, 0xc25ebb7a},
+{'l', 0x41815fd4, 0xc1f48818},
+{'l', 0x41a12022, 0x00000000},
+{'l', 0xc1ccb964, 0x422b13ce},
+{'l', 0x41d89258, 0x422debb8},
+{'l', 0xc1a74946, 0x00000000},
+{'l', 0xc1852a5e, 0xc1f8cbf7},
+{'l', 0xc1852a5d, 0x41f8cbf7},
+{'l', 0xc1a19973, 0x00000000},
+{'l', 0x41d1efe3, 0xc22debb8},
+{'l', 0xc1ccb964, 0xc22b13ce},
+{'l', 0x41a02d7f, 0x00000000},
+{'l', 0x417ef518, 0x41f48818},
+{'[', 0x00560058, 0x000000f2},/*kerning*/
+{'@', 0x00000059, 0x00004c88},/*        Y        x-advance: 76.531250 */
+{'M', 0x42185bbf, 0xc23a0154},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x4196b324, 0xc21efe32},
+{'l', 0x4197a5c6, 0x00000000},
+{'l', 0xc1ecf306, 0x425fae1c},
+{'l', 0x00000000, 0x41f2a2d4},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0x00000000, 0xc1f9be9a},
+{'l', 0xc1e8af27, 0xc25c2039},
+{'l', 0x4197a5c5, 0x00000000},
+{'l', 0x4196b322, 0x421efe32},
+{'[', 0x00290059, 0x0000015c},/*kerning*/
+{'[', 0x00540059, 0x0000012f},/*kerning*/
+{'[', 0x00560059, 0x0000013e},/*kerning*/
+{'[', 0x00570059, 0x0000012f},/*kerning*/
+{'[', 0x00590059, 0x0000013e},/*kerning*/
+{'[', 0x005d0059, 0x0000013e},/*kerning*/
+{'[', 0x007d0059, 0x0000014d},/*kerning*/
+{'[', 0x00dd0059, 0x0000013e},/*kerning*/
+{'@', 0x0000005a, 0x00004770},/*        Z        x-advance: 71.437500 */
+{'M', 0x41cbc6c1, 0xc1544e7a},
+{'l', 0x4228b538, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc27c59da, 0x00000000},
+{'l', 0x36000000, 0xc11010ae},
+{'l', 0x4223f80a, 0xc27fab14},
+{'l', 0xc223bb61, 0x00000000},
+{'l', 0x35800000, 0xc1554118},
+{'l', 0x427815fd, 0x00000000},
+{'l', 0x00000000, 0x410a60d8},
+{'l', 0xc224ae04, 0x4280a9d9},
+{'[', 0x0041005a, 0x000000e3},/*kerning*/
+{'[', 0x00c0005a, 0x000000e3},/*kerning*/
+{'[', 0x00c1005a, 0x000000e3},/*kerning*/
+{'[', 0x00c2005a, 0x000000e3},/*kerning*/
+{'[', 0x00c3005a, 0x000000e3},/*kerning*/
+{'[', 0x00c4005a, 0x000000e3},/*kerning*/
+{'[', 0x00c5005a, 0x000000e3},/*kerning*/
+{'@', 0x0000005b, 0x000021c3},/*        [        x-advance: 33.761719 */
+{'M', 0x42030870, 0xc2aec006},
+{'l', 0xc105a3b2, 0x00000000},
+{'l', 0x00000000, 0x42bcf790},
+{'l', 0x4105a3b2, 0x36800000},
+{'l', 0x00000000, 0x414cb964},
+{'l', 0xc1cdac08, 0x00000000},
+{'l', 0x35800000, 0xc2f025ea},
+{'l', 0x41cdac08, 0x00000000},
+{'l', 0x00000000, 0x414cb968},
+{'@', 0x0000005c, 0x0000331f},/*       \         x-advance: 51.121094 */
+{'M', 0x3df2a2d5, 0xc2ac7fc3},
+{'l', 0x4188f4e9, 0x00000000},
+{'l', 0x421010ae, 0x42bb4ef3},
+{'l', 0xc188f4e8, 0x36000000},
+{'l', 0xc21010af, 0xc2bb4ef3},
+{'@', 0x0000005d, 0x000021c3},/*        ]        x-advance: 33.761719 */
+{'M', 0x3f45244d, 0xc2c85733},
+{'l', 0x41cdac07, 0x00000000},
+{'l', 0x00000000, 0x42f025ea},
+{'l', 0xc1cdac07, 0x00000000},
+{'l', 0x35500000, 0xc14cb964},
+{'l', 0x41069652, 0x00000000},
+{'l', 0x00000000, 0xc2bcf790},
+{'l', 0xc1069652, 0x00000000},
+{'l', 0xb4400000, 0xc14cb968},
+{'@', 0x0000005e, 0x00003513},/*        ^        x-advance: 53.074219 */
+{'M', 0x41825275, 0xc22cbc6c},
+{'l', 0xc15af0ee, 0x00000000},
+{'l', 0x418db218, 0xc22c431a},
+{'l', 0x4148eed8, 0x00000000},
+{'l', 0x418db218, 0x422c431a},
+{'l', 0xc15af0f0, 0x00000000},
+{'l', 0xc11c62f2, 0xc1c3b858},
+{'l', 0xbef2a300, 0xc000e680},
+{'l', 0xbeb5fa00, 0x00000000},
+{'l', 0xbed44e80, 0x4000e680},
+{'l', 0xc1198b0c, 0x41c3b858},
+{'@', 0x0000005f, 0x00003624},/*        _        x-advance: 54.140625 */
+{'M', 0x4257dc5d, 0x414f914c},
+{'l', 0xc2579fb4, 0x00000000},
+{'l', 0xb5958000, 0xc14f914c},
+{'l', 0x42579fb4, 0x00000000},
+{'l', 0x00000000, 0x414f914c},
+{'@', 0x00000060, 0x00002829},/*        `        x-advance: 40.160156 */
+{'M', 0x420a9d86, 0xc28f975d},
+{'l', 0xc160a0be, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a2c0, 0xbeb5fa00},
+{'l', 0x41926f45, 0x00000000},
+{'l', 0x413ab74e, 0x417c1d30},
+{'@', 0x00000061, 0x00004129},/*        a        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'@', 0x00000062, 0x0000447a},/*        b        x-advance: 68.476562 */
+{'M', 0x4280e681, 0xc1f22984},
+{'q', 0x00000000, 0x41655dee},
+{0, 0xc0ccb960, 0x41b76614},
+{'q', 0xc0ccb968, 0x41096e3c},
+{0, 0xc193db3a, 0x41096e3c},
+{'8', 0xeeb200d4, 0xcac8eedf},
+{'l', 0xbfa6cff0, 0x40fe0277},
+{'l', 0xc16cf305, 0x00000000},
+{'4', 0xfd1d0000, 0x00000089},
+{'l', 0x36000000, 0x420c82cb},
+{'8', 0xd135e216, 0xf047f01f},
+{'q', 0x41433f04, 0x00000000},
+{0, 0x4194cddc, 0x4113db38},
+{'9', 0x00490033, 0x00c40033},
+{'6', 0x00090000, 0xfff7ff77},
+{'q', 0x00000000, 0xc115c082},
+{0, 0xc0322f90, 0xc16cf306},
+{'8', 0xd4b6d4eb, 0x0dca00e0},
+{'9', 0x000dffea, 0x0026ffdd},
+{'l', 0x00000000, 0x41d90ba9},
+{'8', 0x2323170c, 0x0c370c16},
+{'8', 0xdb4a0035, 0x9515db15},
+{'l', 0x00000000, 0xbf9f3ad0},
+{'@', 0x00000063, 0x00003eca},/*        c        x-advance: 62.789062 */
+{'M', 0x42061d01, 0xc140671f},
+{'8', 0xeb3b0024, 0xc716eb16},
+{'4', 0x0000007d, 0x00020001},
+{'q', 0x3e72a300, 0x411b7050},
+{0, 0xc0eb0dc0, 0x41825275},
+{'q', 0xc0f0bd88, 0x40d083ef},
+{0, 0xc195c07e, 0x40d083ef},
+{'q', 0xc1655dee, 0x00000000},
+{0, 0xc1b0c3a0, 0xc1110352},
+{'9', 0xffb8ffc2, 0xff46ffc2},
+{'l', 0x00000000, 0xbfe378b0},
+{'q', 0x00000000, 0xc1628604},
+{0, 0x40f66d61, 0xc1ba3dfc},
+{'q', 0x40f852a4, 0xc111f5f4},
+{0, 0x41b0c3a0, 0xc111f5f4},
+{'q', 0x413d8f38, 0x00000000},
+{0, 0x41989868, 0x40d81900},
+{'9', 0x0036003a, 0x008e0038},
+{'4', 0x00020000, 0x0000ff82},
+{'8', 0xbfebd900, 0xe6c4e6eb},
+{'8', 0x2ab300ca, 0x6dea2aea},
+{'l', 0x00000000, 0x3fe378b0},
+{'8', 0x6e164400, 0x294e2916},
+{'@', 0x00000064, 0x0000447a},/*        d        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc1fc1d31},
+{'q', 0x00000000, 0xc172a2d6},
+{0, 0x40d083ee, 0xc1c3b859},
+{'q', 0x40d26936, 0xc114cddc},
+{0, 0x4193db3a, 0xc114cddc},
+{'8', 0x10450026, 0x2f36101e},
+{'l', 0x00000000, 0xc20c82cb},
+{'l', 0x418ada30, 0x00000000},
+{'4', 0x02e30000, 0x0000ff8a},
+{'l', 0xbfb5fa20, 0xc0fa37ec},
+{'8', 0x36c723e8, 0x12b512e0},
+{'q', 0xc13c9c94, 0x00000000},
+{0, 0xc192e898, 0xc10a60de},
+{'9', 0xffbbffcc, 0xff4affcc},
+{'6', 0xfff70000, 0x00090089},
+{'8', 0x6a164300, 0x26492616},
+{'8', 0xf534001d, 0xdd24f416},
+{'l', 0x00000000, 0xc1da779d},
+{'8', 0xdbdce8f2, 0xf3cdf3eb},
+{'q', 0xc0cad41c, 0x00000000},
+{0, 0xc114cddc, 0x40b414e0},
+{'q', 0xc039c4a8, 0x40b414d8},
+{0, 0xc039c4a8, 0x416b0dbe},
+{'l', 0x00000000, 0x3f9f3ad0},
+{'@', 0x00000065, 0x00004036},/*        e        x-advance: 64.210938 */
+{'M', 0x420c097a, 0x3f9f3adc},
+{'q', 0xc15dc8d4, 0x00000000},
+{0, 0xc1b13cf0, 0xc10e2b69},
+{'9', 0xffb9ffbe, 0xff4cffbe},
+{'l', 0x00000000, 0xc017a5c0},
+{'q', 0x00000000, 0xc1646b4c},
+{0, 0x40fa37ec, 0xc1bc2342},
+{'q', 0x40fc1d30, 0xc113db38},
+{0, 0x41a8b538, 0xc112e898},
+{'q', 0x414f914c, 0x00000000},
+{0, 0x41a12022, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004b0000, 0x0000fece},
+{'l', 0xbdf2a300, 0x3eb5fa40},
+{'8', 0x53213203, 0x2051201e},
+{'8', 0xf74c002d, 0xe342f71e},
+{'l', 0x4095c080, 0x412a9a7e},
+{'q', 0xc07a37e0, 0x404cb962},
+{0, 0xc123f808, 0x40aa9a7d},
+{'9', 0x0010ffce, 0x0010ff90},
+{'m', 0xbfc52440, 0xc254c7cc},
+{'8', 0x1dc400da, 0x4de51dea},
+{'4', 0x00020001, 0x000000a9},
+{'l', 0x00000000, 0xbfc52440},
+{'8', 0xbaecd400, 0xe6c2e6ec},
+{'@', 0x00000066, 0x00002b5c},/*        f        x-advance: 43.359375 */
+{'M', 0x41322f94, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xc800004c},
+{'q', 0x00000000, 0xc12c7fc0},
+{0, 0x40c70994, 0xc184b10c},
+{'q', 0x40c70994, 0xc0bba9f0},
+{0, 0x418bccd1, 0xc0bba9f0},
+{'8', 0x02230011, 0x07280212},
+{'l', 0xbfbd8f40, 0x414dac08},
+{'8', 0xfdeafff5, 0xffe8fff6},
+{'8', 0x12cd00df, 0x35ef12ef},
+{'0', 0x00653800, 0x009b6100},
+{'l', 0x00000000, 0x424fcdf5},
+{'l', 0xc18a60de, 0x00000000},
+{'[', 0x00220066, 0x00000203},/*kerning*/
+{'[', 0x00270066, 0x00000203},/*kerning*/
+{'[', 0x00290066, 0x00000323},/*kerning*/
+{'[', 0x005d0066, 0x000003e8},/*kerning*/
+{'[', 0x007d0066, 0x00000231},/*kerning*/
+{'[', 0x201c0066, 0x00000203},/*kerning*/
+{'[', 0x201d0066, 0x00000203},/*kerning*/
+{'@', 0x00000067, 0x0000447a},/*        g        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc1fc1d31},
+{'q', 0x00000000, 0xc172a2d6},
+{0, 0x40d26934, 0xc1c3b859},
+{'q', 0x40d44e7c, 0xc114cddc},
+{0, 0x4194548b, 0xc114cddc},
+{'8', 0x134b002b, 0x37371320},
+{'4', 0xffbf000a, 0x00000077},
+{'l', 0x00000000, 0x427f31c2},
+{'q', 0x00000000, 0x4147fc37},
+{0, 0xc103be68, 0x419af700},
+{'q', 0xc102cbc8, 0x40d9fe4c},
+{0, 0xc1b67372, 0x40d9fe4c},
+{'8', 0xf6ae00da, 0xe3b0f6d5},
+{'l', 0x404cb964, 0xc14e9eaa},
+{'8', 0x17400f1f, 0x07480721},
+{'8', 0xe9530038, 0xb71be91b},
+{'l', 0x00000000, 0xc0b9c4ab},
+{'8', 0x2ccb1cea, 0x0fba0fe2},
+{'q', 0xc13c9c92, 0x00000000},
+{0, 0xc19361e8, 0xc10a60de},
+{'9', 0xffbbffcc, 0xff4affcc},
+{'6', 0xfff70000, 0x0009008a},
+{'8', 0x6a164300, 0x26492616},
+{'8', 0xf535001f, 0xde23f516},
+{'l', 0x00000000, 0xc1debb7a},
+{'8', 0xdcdde9f3, 0xf4ccf4eb},
+{'q', 0xc0cad41c, 0x00000000},
+{0, 0xc114cddc, 0x40b414e0},
+{'q', 0xc039c4b0, 0x40b414d8},
+{0, 0xc039c4b0, 0x416b0dbe},
+{'l', 0x00000000, 0x3f9f3ad0},
+{'@', 0x00000068, 0x0000447a},/*        h        x-advance: 68.476562 */
+{'M', 0x41bc2342, 0xc25feac5},
+{'8', 0xca3bdd18, 0xed4ded23},
+{'q', 0x41202d7c, 0x00000000},
+{0, 0x417b2a8c, 0x40d633c0},
+{'9', 0x0035002d, 0x00a4002d},
+{'4', 0x01300000, 0x0000ff76},
+{'l', 0x00000000, 0xc2189868},
+{'8', 0xacebc500, 0xe7c2e7ec},
+{'8', 0x0ace00e4, 0x1cdc09eb},
+{'l', 0x00000000, 0x423be699},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0xb5000000, 0xc2b8d208},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x4211b94b},
+{'@', 0x00000069, 0x00002067},/*        i        x-advance: 32.402344 */
+{'M', 0x41c69041, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'4', 0xfe000000, 0x0000008a},
+{'6', 0x02000000, 0xfd850000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0xb5000000, 0xc14f9148},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x414f9148},
+{'@', 0x0000006a, 0x0000202a},/*        j        x-advance: 32.164062 */
+{'M', 0x41ca5acd, 0xc2803087},
+{'l', 0x00000000, 0x4284edb5},
+{'q', 0x00000000, 0x413414db},
+{0, 0xc0bf747c, 0x418b5381},
+{'q', 0xc0bf747e, 0x40c33f08},
+{0, 0xc1852a5e, 0x40c33f08},
+{'8', 0xffde00ee, 0xfadffff1},
+{'l', 0x3f544e78, 0xc1535bd8},
+{'8', 0x0415020a, 0x0117010a},
+{'8', 0xed2b001b, 0xc40fed0f},
+{'4', 0xfded0000, 0x0000008a},
+{'m', 0xbeb5fa40, 0xc1776000},
+{'l', 0xc18ada2f, 0x00000000},
+{'l', 0x35000000, 0xc14dac08},
+{'l', 0x418ada2f, 0x00000000},
+{'l', 0x00000000, 0x414dac08},
+{'@', 0x0000006b, 0x000040fb},/*        k        x-advance: 64.980469 */
+{'M', 0x41e55ded, 0xc1d6ad11},
+{'l', 0xc097a5c4, 0x00000000},
+{'l', 0x00000000, 0x41d6ad11},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2b8d208},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x4251b33a},
+{'l', 0x40887b98, 0x00000000},
+{'l', 0x416de5a8, 0xc1c0e070},
+{'l', 0x41a02d7e, 0x00000000},
+{'l', 0xc1a3f80a, 0x41e835d6},
+{'l', 0x41bd15e6, 0x420c4623},
+{'l', 0xc19ec18c, 0x00000000},
+{'l', 0xc18db217, 0xc1d6ad11},
+{'@', 0x0000006c, 0x00002067},/*        l        x-advance: 32.402344 */
+{'M', 0x41c69041, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'l', 0xb5000000, 0xc2b8d208},
+{'l', 0x418a60dd, 0x00000000},
+{'l', 0x00000000, 0x42b8d208},
+{'@', 0x0000006d, 0x000068f7},/*        m        x-advance: 104.964844 */
+{'M', 0x41b580ce, 0xc2803087},
+{'l', 0x3f35fa20, 0x410788f4},
+{'8', 0xc83ddc18, 0xec56ec25},
+{'8', 0x15540031, 0x41351523},
+{'8', 0xc03dd717, 0xe959e925},
+{'q', 0x4117a5c0, 0x00000000},
+{0, 0x416ed848, 0x40d26930},
+{'9', 0x0034002c, 0x009f002c},
+{'4', 0x01360000, 0x0000ff76},
+{'l', 0x00000000, 0xc21b7050},
+{'8', 0xafeec600, 0xeac8eaee},
+{'8', 0x0dcd00e3, 0x24de0ceb},
+{'8', 0x0f000900, 0x0c000600},
+{'4', 0x01500000, 0x0000ff77},
+{'l', 0x00000000, 0xc21b7050},
+{'8', 0xb0eec800, 0xe9c8e9ee},
+{'8', 0x0acf00e5, 0x1dde0aec},
+{'l', 0x00000000, 0x423af3f7},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0xb5800000, 0xc2803087},
+{'l', 0x41806d30, 0x00000000},
+{'@', 0x0000006e, 0x0000447a},/*        n        x-advance: 68.476562 */
+{'M', 0x41b39b89, 0xc2803087},
+{'l', 0x3f452440, 0x4112e898},
+{'8', 0xc33fd919, 0xeb53eb25},
+{'q', 0x411b7050, 0x00000000},
+{0, 0x4172a2d4, 0x40c33f08},
+{'9', 0x0030002b, 0x0099002b},
+{'4', 0x01400000, 0x0000ff76},
+{'l', 0x00000000, 0xc21ff0d6},
+{'8', 0xb8eccd00, 0xebc1ebec},
+{'8', 0x0bcf00e5, 0x1fdc0aeb},
+{'l', 0x00000000, 0x423a0154},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2803087},
+{'l', 0x4180e682, 0x00000000},
+{'@', 0x0000006f, 0x0000447a},/*        o        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'@', 0x00000070, 0x0000447a},/*        p        x-advance: 68.476562 */
+{'M', 0x4280e681, 0xc1f22984},
+{'q', 0x00000000, 0x416378a8},
+{0, 0xc0d26930, 0x41b6ecc3},
+{'q', 0xc0d26938, 0x410a60de},
+{0, 0xc192e898, 0x410a60de},
+{'8', 0xf2b900d8, 0xd4cbf1e1},
+{'l', 0x00000000, 0x41f5f40e},
+{'l', 0xc189e78c, 0x36000000},
+{'4', 0xfd3b0000, 0x0000007c},
+{'l', 0x3f80e680, 0x40f2a2d8},
+{'8', 0xcd36df16, 0xee4aee20},
+{'q', 0x413e81d8, 0x00000000},
+{0, 0x4193db3a, 0x4114cddc},
+{'9', 0x004a0034, 0x00c30034},
+{'6', 0x00090000, 0xfff7ff76},
+{'q', 0x00000000, 0xc1110352},
+{0, 0xc04159d0, 0xc16b0dbe},
+{'8', 0xd3b7d3e8, 0x0ccb00e1},
+{'9', 0x000cffeb, 0x0024ffde},
+{'l', 0x00000000, 0x41e0a0bf},
+{'8', 0x2122150c, 0x0b360b16},
+{'8', 0xd9490032, 0x9617d917},
+{'l', 0x00000000, 0xbf9f3ad0},
+{'@', 0x00000071, 0x0000447a},/*        q        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc1fc1d31},
+{'q', 0x00000000, 0xc172a2d6},
+{0, 0x40d083ee, 0xc1c3b859},
+{'q', 0x40d26936, 0xc114cddc},
+{0, 0x4193db3a, 0xc114cddc},
+{'8', 0x124a002a, 0x35371220},
+{'l', 0x3fccb960, 0xc0fc1d30},
+{'l', 0x416b0dc0, 0x00000000},
+{'4', 0x02c50000, 0x0000ff76},
+{'l', 0x00000000, 0xc1f5016c},
+{'8', 0x2bcb1cea, 0x0ebb0ee2},
+{'q', 0xc13c9c94, 0x00000000},
+{0, 0xc192e898, 0xc10a60de},
+{'9', 0xffbbffcc, 0xff4affcc},
+{'6', 0xfff70000, 0x00090089},
+{'8', 0x6a164300, 0x27492716},
+{'8', 0xf534001e, 0xdf23f515},
+{'l', 0x00000000, 0xc1e378a7},
+{'8', 0xddddeaf3, 0xf4cdf4eb},
+{'q', 0xc0cad41c, 0x00000000},
+{0, 0xc114cddc, 0x40b5fa20},
+{'q', 0xc039c4a8, 0x40b5fa20},
+{0, 0xc039c4a8, 0x416c0062},
+{'l', 0x00000000, 0x3f9f3ad0},
+{'@', 0x00000072, 0x00002a79},/*        r        x-advance: 42.472656 */
+{'M', 0x42215cca, 0xc244e7a4},
+{'l', 0xc0cad420, 0xbe35fa00},
+{'8', 0x0cce00e2, 0x24e20ced},
+{'l', 0x00000000, 0x422d35be},
+{'l', 0xc189e78c, 0x00000000},
+{'4', 0xfe000000, 0x00000080},
+{'l', 0x3f452460, 0x4117a5c4},
+{'8', 0xc22ed812, 0xea42ea1c},
+{'8', 0x0112000a, 0x03120109},
+{'l', 0xbfeb0dc0, 0x41757ac0},
+{'[', 0x00220072, 0x00000120},/*kerning*/
+{'[', 0x00270072, 0x00000120},/*kerning*/
+{'[', 0x00660072, 0x0000016b},/*kerning*/
+{'[', 0x00740072, 0x00000199},/*kerning*/
+{'[', 0x00760072, 0x000001a8},/*kerning*/
+{'[', 0x00770072, 0x00000199},/*kerning*/
+{'[', 0x00790072, 0x000001a8},/*kerning*/
+{'[', 0x00fd0072, 0x000001a8},/*kerning*/
+{'[', 0x00ff0072, 0x000001a8},/*kerning*/
+{'[', 0x201c0072, 0x00000120},/*kerning*/
+{'[', 0x201d0072, 0x00000120},/*kerning*/
+{'@', 0x00000073, 0x00003e8d},/*        s        x-advance: 62.550781 */
+{'M', 0x42252755, 0xc18d38c6},
+{'8', 0xd9eaea00, 0xe3aff0eb},
+{'q', 0xc135fa20, 0xc013db40},
+{0, 0xc1896e3b, 0xc0d9fe4c},
+{'q', 0xc0b7df65, 0xc091f5f8},
+{0, 0xc0b7df65, 0xc14616f0},
+{'q', 0x00000000, 0xc104b10c},
+{0, 0x40ddc8d7, 0xc160a0c0},
+{'q', 0x40dfae1e, 0xc0b9c4a8},
+{0, 0x4195472e, 0xc0b9c4a8},
+{'q', 0x414431ac, 0x00000000},
+{0, 0x419be9a2, 0x40b7df60},
+{'9', 0x002d003a, 0x00740037},
+{'4', 0x00020000, 0x0000ff7b},
+{'8', 0xceede200, 0xedc7eded},
+{'8', 0x10cb00df, 0x28ee10ee},
+{'8', 0x26131700, 0x1b510f14},
+{'q', 0x413d8f34, 0x4017a5c0},
+{0, 0x418cbf74, 0x40dfae1c},
+{'q', 0x40b7df68, 0x4091f5f4},
+{0, 0x40b7df68, 0x4149e17c},
+{'q', 0x00000000, 0x410a60de},
+{0, 0xc0ecf308, 0x41628605},
+{'q', 0xc0ecf300, 0x40ae6509},
+{0, 0xc19c62f3, 0x40ae6509},
+{'q', 0xc14cb962, 0x00000000},
+{0, 0xc1a212c4, 0xc0ce9ea9},
+{'9', 0xffccffc5, 0xff8affc8},
+{'4', 0xfffe0000, 0x0000007e},
+{'8', 0x3b1b2901, 0x12421219},
+{'8', 0xf13a0026, 0xd714f114},
+{'@', 0x00000074, 0x00002a5a},/*        t        x-advance: 42.351562 */
+{'M', 0x41d984fa, 0xc29f95d9},
+{'l', 0x00000000, 0x417b2a90},
+{'l', 0x412c7fc4, 0x00000000},
+{'4', 0x00610000, 0x0000ffaa},
+{'l', 0x00000000, 0x42028f1e},
+{'8', 0x2a0c1d00, 0x0c210c0c},
+{'8', 0x0012000a, 0xfc12ff08},
+{'l', 0x3fbd8f40, 0x4147fc36},
+{'8', 0x0ad807ec, 0x03d503ed},
+{'q', 0xc10f1e0c, 0x00000000},
+{0, 0xc15cd634, 0xc09d5596},
+{'9', 0xffd9ffda, 0xff84ffda},
+{'l', 0x00000000, 0xc202cbc7},
+{'l', 0xc115c080, 0x00000000},
+{'l', 0x35000000, 0xc1424c64},
+{'l', 0x4115c080, 0x00000000},
+{'l', 0xb5800000, 0xc17b2a90},
+{'l', 0x418a60de, 0x00000000},
+{'@', 0x00000075, 0x0000447a},/*        u        x-advance: 68.476562 */
+{'M', 0x4237296b, 0xc113db3a},
+{'8', 0x3ec428e9, 0x15ad15dc},
+{'q', 0xc12212c4, 0x00000000},
+{0, 0xc17e0277, 0xc0ce9ea9},
+{'9', 0xffccffd3, 0xff5fffd3},
+{'4', 0xfecb0000, 0x00000089},
+{'l', 0x00000000, 0x421b33a8},
+{'8', 0x50123700, 0x18371812},
+{'8', 0xf6380021, 0xe126f617},
+{'l', 0x00000000, 0xc23a7aa5},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x42803087},
+{'l', 0xc16c0060, 0x00000000},
+{'l', 0xbfc52460, 0xc113db3a},
+{'@', 0x00000076, 0x00003df6},/*        v        x-advance: 61.960938 */
+{'M', 0x41ee5ef8, 0xc1befb2b},
+{'l', 0x3f9010b0, 0x40bd8f38},
+{'l', 0x3eb5fa40, 0x00000000},
+{'l', 0x3f97a5c0, 0xc0bd8f38},
+{'l', 0x4128b538, 0xc220e378},
+{'l', 0x41908a00, 0x00000000},
+{'l', 0xc1ae650a, 0x42803087},
+{'l', 0xc18437ba, 0x00000000},
+{'l', 0xc1ae6509, 0xc2803087},
+{'l', 0x41908a00, 0x00000000},
+{'l', 0x412c7fc2, 0x4220e378},
+{'[', 0x00660076, 0x000000e3},/*kerning*/
+{'[', 0x03c00076, 0x000000b5},/*kerning*/
+{'@', 0x00000077, 0x00005945},/*        w        x-advance: 89.269531 */
+{'M', 0x427981f2, 0xc1b76614},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x4105a3b0, 0xc224ae04},
+{'l', 0x4181d924, 0x00000000},
+{'l', 0xc1825278, 0x42803087},
+{'l', 0xc1674330, 0x00000000},
+{'l', 0xc13e81d8, 0xc2189868},
+{'l', 0xbeb5fa00, 0x00000000},
+{'l', 0xc13e81dc, 0x42189868},
+{'l', 0xc1665090, 0x00000000},
+{'l', 0xc1825275, 0xc2803087},
+{'l', 0x4181d924, 0x00000000},
+{'l', 0x410788f6, 0x422434b2},
+{'l', 0x3eb5fa00, 0x36000000},
+{'l', 0x413f747c, 0xc22434b2},
+{'l', 0x4138d208, 0x00000000},
+{'l', 0x414159c4, 0x4224ae04},
+{'@', 0x00000078, 0x00003df6},/*        x        x-advance: 61.960938 */
+{'M', 0x41f5f40f, 0xc22ede5b},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x411d5596, 0xc1a30566},
+{'l', 0x419c62f4, 0x00000000},
+{'l', 0xc19a7dae, 0x41fd8926},
+{'l', 0x419fb42e, 0x42019c7b},
+{'l', 0xc19be9a2, 0x00000000},
+{'l', 0xc127c296, 0xc1aa212c},
+{'l', 0xc127c296, 0x41aa212c},
+{'l', 0xc19c62f3, 0x00000000},
+{'l', 0x419fb42d, 0xc2019c7b},
+{'l', 0xc19af6ff, 0xc1fd8926},
+{'l', 0x419b7051, 0x00000000},
+{'l', 0x41198b0a, 0x41a30566},
+{'@', 0x00000079, 0x00003df6},/*        y        x-advance: 61.960938 */
+{'M', 0x41ede5a7, 0xc1d72663},
+{'l', 0x3f35fa20, 0x406378a8},
+{'l', 0x3eb5fa00, 0x00000000},
+{'4', 0xfeba0062, 0x00000094},
+{'l', 0xc1d00a9e, 0x429361e8},
+{'q', 0xc02e6500, 0x40dbe398},
+{0, 0xc0ecf304, 0x4139c4ae},
+{'q', 0xc095c07c, 0x4095c080},
+{0, 0xc160a0be, 0x4095c080},
+{'8', 0xfee000ef, 0xf8dcfef2},
+{'l', 0x4000e682, 0xc149e17b},
+{'8', 0x010d0006, 0x000c0007},
+{'8', 0xf0340022, 0xd61cef12},
+{'l', 0x4000e680, 0xc09f3adc},
+{'l', 0xc1b5fa20, 0xc2801233},
+{'l', 0x4194cddd, 0x00000000},
+{'l', 0x412d7266, 0x4214cddc},
+{'[', 0x00660079, 0x000000e3},/*kerning*/
+{'[', 0x03c00079, 0x000000b5},/*kerning*/
+{'@', 0x0000007a, 0x00003df6},/*        z        x-advance: 61.960938 */
+{'M', 0x41cf914c, 0xc1544e7a},
+{'l', 0x41fe0278, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc2550475, 0x00000000},
+{'l', 0x35000000, 0xc1230567},
+{'l', 0x41f40eca, 0xc22212c4},
+{'l', 0xc1ec79b3, 0x00000000},
+{'l', 0xb5000000, 0xc15633c0},
+{'l', 0x424d32b6, 0x00000000},
+{'l', 0x00000000, 0x411e4838},
+{'l', 0xc1f5f410, 0x4223bb62},
+{'@', 0x0000007b, 0x0000280b},/*        {        x-advance: 40.042969 */
+{'M', 0x420a9d86, 0x41aa9a7e},
+{'q', 0xc138d208, 0xc05083f0},
+{0, 0xc183be69, 0xc125dd50},
+{'9', 0xffc8ffda, 0xff77ffda},
+{'l', 0x00000000, 0xc1406720},
+{'8', 0xb8ecd200, 0xe6c1e6ec},
+{'l', 0x00000000, 0xc13e81da},
+{'8', 0xe73f002a, 0xb714e614},
+{'l', 0x00000000, 0xc1406720},
+{'q', 0x00000000, 0xc12212c0},
+{0, 0x409b7052, 0xc1896e38},
+{'9', 0xffc80027, 0xffae0083},
+{'l', 0x40544e80, 0x4114cdd8},
+{'8', 0x34c80ed8, 0x5df025f0},
+{'l', 0x00000000, 0x41406720},
+{'8', 0x57eb3100, 0x3bc125ec},
+{'8', 0x3c3f162a, 0x56152515},
+{'l', 0x00000000, 0x41406720},
+{'8', 0x5d103700, 0x34382510},
+{'l', 0xc0544e80, 0x4115c080},
+{'@', 0x0000007c, 0x00001ebe},/*        |        x-advance: 30.742188 */
+{'M', 0x41a563fe, 0x417fe7bd},
+{'l', 0xc126cff2, 0x00000000},
+{'l', 0x00000000, 0xc2cc7cbb},
+{'l', 0x4126cff2, 0x00000000},
+{'l', 0x00000000, 0x42cc7cbb},
+{'@', 0x0000007d, 0x0000280b},/*        }        x-advance: 40.042969 */
+{'M', 0x4000e681, 0x413f747c},
+{'8', 0xcc38f228, 0xa310db10},
+{'l', 0x00000000, 0xc1406720},
+{'8', 0xa915cf00, 0xc542db15},
+{'8', 0xc5beebd4, 0xa8ebdaeb},
+{'l', 0x00000000, 0xc1406720},
+{'8', 0xa3f0c900, 0xccc8dbf0},
+{'l', 0x40544e7c, 0xc114cdd8},
+{'q', 0x4137df65, 0x405083e0},
+{0, 0x41834518, 0x4125dd50},
+{'9', 0x00380027, 0x00890027},
+{'l', 0x00000000, 0x41406720},
+{'8', 0x49142f00, 0x193f1914},
+{'l', 0x00000000, 0x413e81da},
+{'8', 0x1ac100d5, 0x48ec1aec},
+{'l', 0x00000000, 0x41406720},
+{'q', 0x00000000, 0x412212c4},
+{0, 0xc09d5594, 0x4189e78c},
+{'q', 0xc09d5598, 0x40e378a8},
+{0, 0xc1834518, 0x4125dd50},
+{'l', 0xc0544e7f, 0xc115c080},
+{'@', 0x0000007e, 0x00004e9b},/*        ~        x-advance: 78.605469 */
+{'M', 0x42908a00, 0xc2339b89},
+{'q', 0x00000000, 0x41189868},
+{0, 0xc0a8b540, 0x41806d30},
+{'8', 0x339733d7, 0xf2b600d8},
+{'8', 0xd0b9f1de, 0xe2d6ece8},
+{'8', 0xf7daf7ef, 0x18d700e8},
+{'9', 0x0018fff0, 0x0039fff0},
+{'l', 0xc13f747c, 0xbfc52440},
+{'q', 0xb5000000, 0xc1198b0c},
+{0, 0x40a30566, 0xc17ef51c},
+{'8', 0xcd6acd29, 0x104a0027},
+{'8', 0x2e480f24, 0x1e281517},
+{'8', 0x09260912, 0xe8290017},
+{'q', 0x400c4620, 0xc0452450},
+{0, 0x400c4620, 0xc0ecf308},
+{'l', 0x41406720, 0x3fccb960},
+{'@', 0x000000a0, 0x00001e36},/*                 x-advance: 30.210938 */
+{'@', 0x000000a1, 0x0000225b},/*        ¡        x-advance: 34.355469 */
+{'M', 0x41cdac07, 0x41b13cf2},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfe3d0000, 0x0000008a},
+{'6', 0x01c30000, 0xfdc80000},
+{'l', 0xc18a60de, 0xb6800000},
+{'l', 0x00000000, 0xc1739578},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x41739578},
+{'@', 0x000000a2, 0x000045f5},/*        ¢        x-advance: 69.957031 */
+{'M', 0x42087b98, 0xc140671f},
+{'8', 0xeb3b0024, 0xc716eb16},
+{'4', 0x0000007e, 0x00020000},
+{'q', 0x3e35fa00, 0x40ffe7be},
+{0, 0xc0a30568, 0x4160a0c0},
+{'9', 0x0030ffd7, 0x003fff93},
+{'4', 0x00700000, 0x0000ffa2},
+{'l', 0x00000000, 0xc1590ba9},
+{'q', 0xc14431aa, 0xbfae6506},
+{0, 0xc196b322, 0xc1230567},
+{'9', 0xffb9ffcc, 0xff52ffcc},
+{'l', 0x00000000, 0xbfe378b0},
+{'q', 0x00000000, 0xc14e9ea8},
+{0, 0x40d083ee, 0xc1adebb8},
+{'9', 0xffb90034, 0xffae0096},
+{'4', 0xff980000, 0x0000005e},
+{'l', 0x00000000, 0x41590ba8},
+{'q', 0x410c4620, 0x4000e690},
+{0, 0x415ebb78, 0x41069658},
+{'9', 0x00320029, 0x007d0029},
+{'l', 0xc181d924, 0x00000000},
+{'8', 0xbfebd900, 0xe6c4e6eb},
+{'8', 0x2ab300ca, 0x6dea2aea},
+{'l', 0x00000000, 0x3fe378b0},
+{'8', 0x6e164400, 0x294e2916},
+{'@', 0x000000a3, 0x00004808},/*        £        x-advance: 72.031250 */
+{'M', 0x42028f1e, 0xc20b5380},
+{'l', 0x3e72a300, 0x40a12020},
+{'8', 0x47f22400, 0x3dd822f2},
+{'l', 0x4228f1e1, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'4', 0x0000fe28, 0xff960000},
+{'l', 0x3f17a5c0, 0x00000000},
+{'8', 0xd321fb16, 0xaf0bd90b},
+{'0', 0x00b3d2ff, 0x00499600},
+{'l', 0xbef2a2e0, 0xc14ad41c},
+{'q', 0x00000000, 0xc1470994},
+{0, 0x40e378a6, 0xc19c62f2},
+{'q', 0x40e55df0, 0xc0e378b0},
+{0, 0x419911ba, 0xc0e378b0},
+{'q', 0x414bc6c0, 0x00000000},
+{0, 0x419dcee8, 0x40d44e80},
+{'9', 0x00340038, 0x008b0036},
+{'4', 0x00020000, 0x0000ff7a},
+{'8', 0xbeebd300, 0xebc9ebeb},
+{'8', 0x1bcc00df, 0x4eee1bee},
+{'l', 0x3f17a5c0, 0x414ad41c},
+{'l', 0x41a83be6, 0x00000000},
+{'l', 0x00000000, 0x41554120},
+{'l', 0xc1a37eb8, 0x00000000},
+{'@', 0x000000a4, 0x000053f0},/*        ¤        x-advance: 83.937500 */
+{'M', 0x427e0277, 0xc0cad41e},
+{'8', 0x2db01ddc, 0x0fa60fd5},
+{'8', 0xf1a500d1, 0xd4b1f1d5},
+{'4', 0x003effc3, 0xffbcffbe},
+{'l', 0x40ffe7be, 0xc101d924},
+{'8', 0xb2dddce9, 0xa7f5d6f5},
+{'8', 0xa50dd100, 0xaf26d40d},
+{'4', 0xffbbffbc, 0xffbc0042},
+{'l', 0x41069652, 0x41096e38},
+{'8', 0xd84ce623, 0xf258f22a},
+{'8', 0x0e57002d, 0x284d0e2a},
+{'4', 0xffba0044, 0x00440043},
+{'l', 0xc10c4620, 0x410f1e08},
+{'8', 0x50252418, 0x5a0d2b0d},
+{'8', 0x58f42d00, 0x4dde29f5},
+{'4', 0x00420041, 0x0044ffbd},
+{'6', 0xffc1ffc2, 0xff13fe93},
+{'q', 0x00000000, 0x412f57aa},
+{0, 0x40e19364, 0x4193db39},
+{'q', 0x40e19360, 0x40f0bd8e},
+{0, 0x4189e78b, 0x40f0bd8e},
+{'q', 0x41212024, 0x00000000},
+{0, 0x4188f4ea, 0xc0f0bd8e},
+{'q', 0x40e378a0, 0xc0f2a2d4},
+{0, 0x40e378a0, 0xc193db39},
+{'q', 0x00000000, 0xc12d7268},
+{0, 0xc0e378a0, 0xc192e898},
+{'q', 0xc0e19360, 0xc0f0bd90},
+{0, 0xc188f4ea, 0xc0f0bd90},
+{'q', 0xc1230566, 0x00000000},
+{0, 0xc189e78b, 0x40f0bd90},
+{'q', 0xc0e19364, 0x40f0bd90},
+{0, 0xc0e19364, 0x4192e898},
+{'@', 0x000000a5, 0x00004a39},/*        ¥        x-advance: 74.222656 */
+{'M', 0x42139e91, 0xc248eed8},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x41852a5e, 0xc21010ae},
+{'l', 0x4197a5c4, 0x00000000},
+{'l', 0xc1b5077c, 0x42292e89},
+{'l', 0x41674338, 0x00000000},
+{'l', 0x00000000, 0x413d8f34},
+{'l', 0xc1998b0c, 0x00000000},
+{'l', 0x00000000, 0x40d083f0},
+{'l', 0x41998b0c, 0x00000000},
+{'l', 0x00000000, 0x413d8f37},
+{'l', 0xc1998b0c, 0x00000000},
+{'l', 0x00000000, 0x415be391},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc15be391},
+{'l', 0xc1a0a6d0, 0x00000000},
+{'l', 0x00000000, 0xc13d8f37},
+{'l', 0x41a0a6d0, 0x00000000},
+{'l', 0x00000000, 0xc0d083f0},
+{'l', 0xc1a0a6d0, 0x00000000},
+{'l', 0x00000000, 0xc13d8f34},
+{'l', 0x417d0fd4, 0x00000000},
+{'l', 0xc1b5077d, 0xc2292e89},
+{'l', 0x41981f17, 0x00000000},
+{'l', 0x4184b10c, 0x421010ae},
+{'@', 0x000000a6, 0x00001ea0},/*        ¦        x-advance: 30.625000 */
+{'M', 0x40f0bd8f, 0x417fe7bd},
+{'l', 0x00000000, 0xc23c5feb},
+{'4', 0x0000007c, 0x01780000},
+{'6', 0x0000ff84, 0xfe36007c},
+{'l', 0xc17852a6, 0x00000000},
+{'l', 0xb5000000, 0xc2339b88},
+{'l', 0x417852a6, 0x00000000},
+{'l', 0x00000000, 0x42339b88},
+{'@', 0x000000a7, 0x00004c3d},/*        §        x-advance: 76.238281 */
+{'M', 0x428bccd2, 0xc1e11a11},
+{'8', 0x4bed2b00, 0x34c720ed},
+{'8', 0x39301820, 0x4f102110},
+{'q', 0x00000000, 0x4127c295},
+{0, 0xc104b110, 0x41834518},
+{'q', 0xc104b10c, 0x40bd8f38},
+{0, 0xc1b2a8e6, 0x40bd8f38},
+{'q', 0xc15be392, 0x00000000},
+{0, 0xc1b7df66, 0xc0bba9f0},
+{'9', 0xffd1ffb7, 0xff6affb9},
+{'4', 0xfffe0000, 0x00000086},
+{'8', 0x48223200, 0x15551522},
+{'8', 0xed4e0032, 0xcd1ced1c},
+{'8', 0xcee4e100, 0xd594ede4},
+{'q', 0xc1674334, 0xc072a2d4},
+{0, 0xc1ab13cf, 0xc114cddd},
+{'q', 0xc0ddc8d8, 0xc0b22f92},
+{0, 0xc0ddc8d8, 0xc17c1d31},
+{'8', 0xb613d600, 0xcb39e013},
+{'8', 0xc8d0e9e0, 0xb0f0dff0},
+{'q', 0x00000000, 0xc1230568},
+{0, 0x4105a3af, 0xc182cbc8},
+{'q', 0x41069653, 0xc0c70990},
+{0, 0x41b39b88, 0xc0c70990},
+{'q', 0x41665090, 0x00000000},
+{0, 0x41b414da, 0x40d26930},
+{'9', 0x00340041, 0x0093003f},
+{'4', 0x00020000, 0x0000ff7a},
+{'8', 0xbce4d700, 0xe5b1e5e4},
+{'8', 0x14af00ca, 0x34e514e5},
+{'8', 0x361a2300, 0x286e121a},
+{'q', 0x416a1b18, 0x4072a2e0},
+{0, 0x41ac0672, 0x4115c080},
+{'9', 0x002c0037, 0x007d0037},
+{'m', 0xc209aae4, 0xc1322f92},
+{'8', 0xf7ddfcee, 0xf6e2fbf0},
+{'8', 0x1be50aee, 0x28f811f8},
+{'8', 0x391a2500, 0x2c6e131a},
+{'8', 0x09200410, 0x09210410},
+{'8', 0xe51cf612, 0xd80aef0a},
+{'8', 0xcae3df00, 0xd393ebe3},
+{'@', 0x000000a8, 0x00004091},/*        ¨        x-advance: 64.566406 */
+{'M', 0x425a779d, 0xc294548b},
+{'l', 0xc17c1d34, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000a9, 0x00005f22},/*        ©        x-advance: 95.132812 */
+{'M', 0x4283636d, 0xc20d38c6},
+{'l', 0x3df2a000, 0x3eb5fa00},
+{'q', 0x3e72a400, 0x410f1e0c},
+{0, 0xc09f3ad8, 0x4159fe4c},
+{'q', 0xc0a6cff0, 0x4093db3c},
+{0, 0xc16835d4, 0x4093db3c},
+{'q', 0xc117a5c8, 0x00000000},
+{0, 0xc171b034, 0xc0c8eed8},
+{'9', 0xffceffd4, 0xff7bffd4},
+{'l', 0x00000000, 0xc0e19360},
+{'q', 0x00000000, 0xc123f808},
+{0, 0x40b22f94, 0xc184b10c},
+{'q', 0x40b414d8, 0xc0cad420},
+{0, 0x4171b034, 0xc0cad420},
+{'q', 0x4114cddc, 0x00000000},
+{0, 0x416835d4, 0x4097a5c0},
+{'9', 0x0025002a, 0x006c0028},
+{'4', 0x00020000, 0x0000ffba},
+{'8', 0xc0ebd400, 0xecc1eceb},
+{'8', 0x20bc00d4, 0x56e920e9},
+{'l', 0x00000000, 0x40e378a8},
+{'8', 0x57173600, 0x20442017},
+{'8', 0xed3f002a, 0xbf15ed15},
+{'6', 0x00000046, 0xffc1fe56},
+{'q', 0x35800000, 0x417a37ec},
+{0, 0x412212c6, 0x41d2e286},
+{'q', 0x41230566, 0x412a9a7e},
+{0, 0x41c59d9f, 0x412a9a7e},
+{'q', 0x41674330, 0xb5000000},
+{0, 0x41c4aafc, 0xc12a9a7e},
+{'q', 0x41230568, 0xc12b8d20},
+{0, 0x41230568, 0xc1d2e286},
+{'q', 0x00000000, 0xc1794548},
+{0, 0xc1230568, 0xc1d17694},
+{'q', 0xc12212c8, 0xc12a9a78},
+{0, 0xc1c4aafc, 0xc12a9a78},
+{'q', 0xc169287c, 0x00000000},
+{0, 0xc1c59d9f, 0x412a9a78},
+{'9', 0x0054ffaf, 0x00d1ffaf},
+{'m', 0xc0e74333, 0x00000000},
+{'q', 0x00000000, 0xc195472e},
+{0, 0x414431aa, 0xc1fba3e0},
+{'q', 0x414431aa, 0xc14cb968},
+{0, 0x41ee5ef9, 0xc14cb968},
+{'q', 0x418bccd0, 0x00000000},
+{0, 0x41ede5a4, 0x414cb968},
+{'q', 0x41452450, 0x414cb964},
+{0, 0x41452450, 0x41fba3e0},
+{'q', 0x00000000, 0x4195c07f},
+{0, 0xc1452450, 0x41fc9682},
+{'q', 0xc1452448, 0x414dac08},
+{0, 0xc1ede5a4, 0x414dac08},
+{'q', 0xc18c4624, 0xb5000000},
+{0, 0xc1ee5ef9, 0xc14dac07},
+{'q', 0xc14431aa, 0xc14dac07},
+{0, 0xc14431aa, 0xc1fc9682},
+{'@', 0x000000aa, 0x000035d8},/*        ª        x-advance: 53.843750 */
+{'M', 0x420f1e0c, 0xc2274944},
+{'8', 0xecfaf7fd, 0xe9fdf5fe},
+{'8', 0x24d616f1, 0x0ec10ee6},
+{'8', 0xe4a900c8, 0xb1e2e4e2},
+{'q', 0x00000000, 0xc0d26938},
+{0, 0x409f3adc, 0xc12212c4},
+{'9', 0xffe40028, 0xffe40075},
+{'4', 0x00000040, 0xffe80000},
+{'8', 0xd4f2e300, 0xf1d8f1f3},
+{'8', 0x0cd000e1, 0x22ef0cef},
+{'4', 0xfffaffb2, 0xfffe0000},
+{'8', 0xb325d2fe, 0xe26ae228},
+{'8', 0x2164003f, 0x61252125},
+{'l', 0x00000000, 0x4194cddc},
+{'8', 0x2d021800, 0x28091402},
+{'6', 0x0000ffad, 0xffc3ffa2},
+{'8', 0xf2310018, 0xe221f219},
+{'4', 0xffd00000, 0x0000ffc0},
+{'8', 0x0fca00dd, 0x24ed0fed},
+{'8', 0x1f0d1400, 0x0a290a0d},
+{'@', 0x000000ab, 0x00003cb7},/*        «        x-advance: 60.714844 */
+{'M', 0x419a045c, 0xc1f4881b},
+{'l', 0x416378a8, 0x41bd15e5},
+{'l', 0xc1313cf2, 0x35000000},
+{'l', 0xc184b10c, 0xc1b8d208},
+{'l', 0xb5000000, 0xbf9010b0},
+{'4', 0xff480084, 0x00000058},
+{'6', 0x00bdff8f, 0x0000009e},
+{'l', 0x416378a4, 0x41bd15e5},
+{'l', 0xc1313cf0, 0x35000000},
+{'l', 0xc184b10c, 0xc1b8d208},
+{'l', 0x00000000, 0xbf9010b0},
+{'l', 0x4184b10c, 0xc1b8d209},
+{'l', 0x41313cf0, 0x00000000},
+{'l', 0xc16378a4, 0x41bd8f37},
+{'@', 0x000000ac, 0x000042e1},/*        ¬        x-advance: 66.878906 */
+{'M', 0x4263b550, 0xc1b13cf2},
+{'l', 0xc13d8f34, 0x00000000},
+{'l', 0x00000000, 0xc1766d60},
+{'l', 0xc216767a, 0x00000000},
+{'l', 0x35800000, 0xc12212c4},
+{'l', 0x4245da47, 0x00000000},
+{'l', 0x00000000, 0x41cc4012},
+{'@', 0x000000ad, 0x00002f72},/*        ­        x-advance: 47.445312 */
+{'M', 0x42206a27, 0xc1f1b032},
+{'l', 0xc205a3af, 0x00000000},
+{'l', 0x00000000, 0xc155411c},
+{'l', 0x4205a3af, 0x00000000},
+{'l', 0x00000000, 0x4155411c},
+{'@', 0x000000ae, 0x00005f22},/*        ®        x-advance: 95.132812 */
+{'M', 0x40a30567, 0xc22cbc6c},
+{'q', 0x00000000, 0xc195472e},
+{0, 0x414431aa, 0xc1fba3e0},
+{'q', 0x414431aa, 0xc14cb968},
+{0, 0x41ee5ef9, 0xc14cb968},
+{'q', 0x418bccd0, 0x00000000},
+{0, 0x41ede5a4, 0x414cb968},
+{'q', 0x41452450, 0x414cb964},
+{0, 0x41452450, 0x41fba3e0},
+{'q', 0x00000000, 0x4195c07f},
+{0, 0xc1452450, 0x41fc9682},
+{'q', 0xc1452448, 0x414dac08},
+{0, 0xc1ede5a4, 0x414dac08},
+{'q', 0xc18c4624, 0xb5000000},
+{0, 0xc1ee5ef9, 0xc14dac07},
+{'9', 0xff9aff9e, 0xff04ff9e},
+{'m', 0x40e74332, 0x00000000},
+{'q', 0x00000000, 0x417a37ec},
+{0, 0x412212c5, 0x41d2e286},
+{'q', 0x41230566, 0x412a9a7e},
+{0, 0x41c59d9f, 0x412a9a7e},
+{'q', 0x41674330, 0xb5000000},
+{0, 0x41c4aafc, 0xc12a9a7e},
+{'q', 0x41230568, 0xc12b8d20},
+{0, 0x41230568, 0xc1d2e286},
+{'q', 0x00000000, 0xc1794548},
+{0, 0xc1230568, 0xc1d17694},
+{'q', 0xc12212c8, 0xc12a9a78},
+{0, 0xc1c4aafc, 0xc12a9a78},
+{'q', 0xc169287c, 0x00000000},
+{0, 0xc1c59d9f, 0x412a9a78},
+{'9', 0x0054ffaf, 0x00d1ffaf},
+{'m', 0x41d26936, 0x409010b0},
+{'l', 0x00000000, 0x419fb42d},
+{'4', 0x0000ffb9, 0xfe6e0000},
+{'l', 0x41852a5f, 0x00000000},
+{'q', 0x410f1e0c, 0x00000000},
+{0, 0x41619360, 0x4080e680},
+{'8', 0x5b292029, 0x30f31b00},
+{'8', 0x23d814f3, 0x28270e1b},
+{'9', 0x0019000c, 0x003c000c},
+{'l', 0x00000000, 0x40544e78},
+{'8', 0x23011300, 0x19060f01},
+{'4', 0x00070000, 0x0000ffb7},
+{'8', 0xe4fbf7fc, 0xd900ed00},
+{'l', 0x00000000, 0xc04cb968},
+{'8', 0xcff0df00, 0xf0cdf0f1},
+{'6', 0x0000ffb6, 0xffc10000},
+{'l', 0x40ffe7b8, 0x00000000},
+{'8', 0xf2380021, 0xd817f217},
+{'8', 0xd1eede00, 0xf3c0f3ee},
+{'l', 0xc0f66d60, 0x00000000},
+{'l', 0x00000000, 0x41692878},
+{'@', 0x000000af, 0x00003ce5},/*        ¯        x-advance: 60.894531 */
+{'M', 0x42504746, 0xc29911b9},
+{'l', 0xc22d35bd, 0x00000000},
+{'l', 0xb5800000, 0xc11c62f8},
+{'l', 0x422d35bd, 0x00000000},
+{'l', 0x00000000, 0x411c62f8},
+{'@', 0x000000b0, 0x00002f27},/*        °        x-advance: 47.152344 */
+{'M', 0x40eed84a, 0xc28e8666},
+{'8', 0xa525cb00, 0xda5bda26},
+{'8', 0x26590034, 0x5b252625},
+{'8', 0x5adb3500, 0x25a725db},
+{'8', 0xdba500cb, 0xa6dbdbdb},
+{'m', 0x410b5381, 0x00000000},
+{'8', 0x2a111900, 0x102a1011},
+{'8', 0xf0280018, 0xd610f010},
+{'8', 0xd5f0e700, 0xefd8eff0},
+{'8', 0x11d600e8, 0x2bef11ef},
+{'@', 0x000000b1, 0x00004138},/*        ±        x-advance: 65.218750 */
+{'M', 0x4220e379, 0xc2606416},
+{'l', 0x419af6fe, 0x00000000},
+{'l', 0x00000000, 0x415be390},
+{'l', 0xc19af6fe, 0x00000000},
+{'l', 0x00000000, 0x41b580ce},
+{'l', 0xc172a2d6, 0x00000000},
+{'l', 0x00000000, 0xc1b580ce},
+{'l', 0xc19dcee8, 0x00000000},
+{'l', 0x35800000, 0xc15be390},
+{'l', 0x419dcee8, 0x00000000},
+{'4', 0xff540000, 0x00000079},
+{'6', 0x00ac0000, 0x01d5007f},
+{'l', 0xc2459d9e, 0x35e00000},
+{'l', 0xb5800000, 0xc1581906},
+{'l', 0x42459d9e, 0x00000000},
+{'l', 0x00000000, 0x41581906},
+{'@', 0x000000b2, 0x000032f1},/*        ²        x-advance: 50.941406 */
+{'M', 0x422e6509, 0xc21e0b90},
+{'4', 0x0000feda, 0xffb70000},
+{'l', 0x41926f46, 0xc16ed848},
+{'8', 0xd924e91c, 0xdd08f008},
+{'8', 0xe2f5ee00, 0xf4def4f6},
+{'8', 0x0ed900e6, 0x24f30ef3},
+{'4', 0x0000ffa1, 0xfffe0000},
+{'q', 0xbeb5fa20, 0xc0c8eed0},
+{0, 0x409b7050, 0xc12b8d20},
+{'q', 0x40a8b538, 0xc08e2b70},
+{0, 0x4160a0c0, 0xc08e2b70},
+{'8', 0x1e690044, 0x56251e25},
+{'8', 0x44e72600, 0x4eac1de7},
+{'l', 0xc0ce9eac, 0x40b04a50},
+{'l', 0x3df2a300, 0x3eb5fa00},
+{'l', 0x41a3f80a, 0x00000000},
+{'l', 0x00000000, 0x4112e898},
+{'@', 0x000000b3, 0x000032b5},/*        ³        x-advance: 50.707031 */
+{'M', 0x41c159c2, 0xc286f14f},
+{'8', 0xf52b001d, 0xdf0ef50e},
+{'8', 0xe3f3ee00, 0xf4d9f4f3},
+{'8', 0x0adb00e8, 0x19f30af3},
+{'4', 0x0000ffa2, 0xfffe0000},
+{'8', 0xb426d1fe, 0xe369e329},
+{'q', 0x411010ae, 0x00000000},
+{0, 0x416378aa, 0x406378a0},
+{'8', 0x502a1b2a, 0x2fef1a00},
+{'8', 0x21d315f0, 0x22320b21},
+{'8', 0x36121612, 0x52d63500},
+{'q', 0xc0a8b538, 0x406b0dc0},
+{0, 0xc1646b4a, 0x406b0dc0},
+{'q', 0xc10a60de, 0x00000000},
+{0, 0xc16378a8, 0xc06b0dc0},
+{'9', 0xffe3ffd4, 0xffadffd7},
+{'4', 0xfffe0000, 0x0000005f},
+{'8', 0x1f0e1300, 0x0a2b0a0f},
+{'8', 0xf52a001a, 0xe010f510},
+{'8', 0xdcf0e900, 0xf4d0f4f0},
+{'l', 0xc0d26934, 0x00000000},
+{'l', 0x00000000, 0xc0fc1d30},
+{'l', 0x40d26934, 0x00000000},
+{'@', 0x000000b4, 0x00002b10},/*        ´        x-advance: 43.062500 */
+{'M', 0x41917ca3, 0xc2af1b03},
+{'l', 0x41926f45, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834519, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000b5, 0x00004ae0},/*        µ        x-advance: 74.875000 */
+{'M', 0x41cbc6c1, 0xc2803087},
+{'l', 0x00000000, 0x4212e897},
+{'8', 0x60154600, 0x193f1915},
+{'8', 0xf43b0023, 0xdb24f317},
+{'l', 0x00000000, 0xc23636c8},
+{'l', 0x418a60dc, 0x00000000},
+{'4', 0x02000000, 0x0000ff80},
+{'l', 0xbeb5fa00, 0xc07e0277},
+{'8', 0x1fd114ec, 0x0ac60ae6},
+{'8', 0xfcd300e8, 0xf0dcfbec},
+{'l', 0x00000000, 0x41d00a9e},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0x00000000, 0xc2b1799a},
+{'l', 0x4189e78c, 0x00000000},
+{'@', 0x000000b6, 0x00003fdb},/*        ¶        x-advance: 63.855469 */
+{'M', 0x4216b322, 0x00000000},
+{'4', 0xff0a0000, 0x0000ffd9},
+{'q', 0xc15cd636, 0x00000000},
+{0, 0xc1ac0673, 0xc0f48818},
+{'q', 0xc0f4881a, 0xc0f66d68},
+{0, 0xc0f4881a, 0xc1a0a6d2},
+{'q', 0xb4800000, 0xc14431a8},
+{0, 0x40f4881a, 0xc19fb42c},
+{'9', 0xffc2003d, 0xffc200ac},
+{'l', 0x41b1b642, 0x00000000},
+{'l', 0x00000000, 0x42ac7fc3},
+{'l', 0xc18a60de, 0x00000000},
+{'@', 0x000000b7, 0x000024aa},/*        ·        x-advance: 36.664062 */
+{'M', 0x41d5ba6f, 0xc2069652},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc1766d60},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x41766d60},
+{'@', 0x000000b8, 0x00002085},/*        ¸        x-advance: 32.519531 */
+{'M', 0x41a4715b, 0xbeb5fa20},
+{'l', 0xbf26cfe0, 0x40581906},
+{'8', 0x1832051e, 0x39141314},
+{'q', 0x00000000, 0x40cad420},
+{0, 0xc0ae6508, 0x412212c4},
+{'9', 0x001effd5, 0x001eff86},
+{'l', 0xbed44e70, 0xc1189868},
+{'8', 0xf7260018, 0xe30ef70e},
+{'8', 0xe5f1ed00, 0xf6ccf8f1},
+{'l', 0x3feb0dc0, 0xc1069652},
+{'l', 0x414f914c, 0x00000000},
+{'@', 0x000000b9, 0x000021f1},/*        ¹        x-advance: 33.941406 */
+{'M', 0x41c5244d, 0xc21d923f},
+{'l', 0xc147fc35, 0x00000000},
+{'l', 0x00000000, 0xc215472d},
+{'l', 0xc0f0bd90, 0x00000000},
+{'l', 0x00000000, 0xc116b328},
+{'l', 0x41a02d7e, 0xbfae6500},
+{'l', 0x36000000, 0x4240671f},
+{'@', 0x000000ba, 0x00003781},/*        º        x-advance: 55.503906 */
+{'M', 0x40dfae1c, 0xc2874c4c},
+{'q', 0x00000000, 0xc10c4628},
+{0, 0x40b22f94, 0xc1646b50},
+{'q', 0x40b22f94, 0xc0b22f90},
+{0, 0x416ed84a, 0xc0b22f90},
+{'q', 0x4115c07e, 0x00000000},
+{0, 0x416ed84a, 0x40b22f90},
+{'9', 0x002c002d, 0x0072002d},
+{'l', 0x00000000, 0x40ddc8d0},
+{'q', 0x00000000, 0x410d38c8},
+{0, 0xc0b22f90, 0x41655df0},
+{'q', 0xc0b22f98, 0x40ae6508},
+{0, 0xc16de5a8, 0x40ae6508},
+{'q', 0xc116b322, 0x00000000},
+{0, 0xc170bd90, 0xc0ae6508},
+{'9', 0xffd4ffd4, 0xff8effd4},
+{'6', 0xffc90000, 0x00370052},
+{'8', 0x40142800, 0x183d1814},
+{'8', 0xe83b0026, 0xc014e814},
+{'l', 0x00000000, 0xc0ddc8d0},
+{'8', 0xc1ebd900, 0xe8c4e8ec},
+{'8', 0x18c400d9, 0x3fec18ec},
+{'l', 0x00000000, 0x40ddc8d0},
+{'@', 0x000000bb, 0x00003cb7},/*        »        x-advance: 60.714844 */
+{'M', 0x41896e3b, 0xc2611a11},
+{'l', 0x4184b10d, 0x41b8d20a},
+{'l', 0x00000000, 0x3f9010a0},
+{'l', 0xc184b10d, 0x41b8d208},
+{'l', 0xc1322f95, 0x00000000},
+{'4', 0xff430071, 0xff43ff8f},
+{'6', 0x00000059, 0x000000a3},
+{'l', 0x4184b10e, 0x41b8d20a},
+{'l', 0x00000000, 0x3f9010a0},
+{'l', 0xc184b10e, 0x41b8d208},
+{'l', 0xc1322f94, 0x00000000},
+{'l', 0x41628604, 0xc1bd15e4},
+{'l', 0xc1628604, 0xc1bd8f38},
+{'l', 0x41322f94, 0x00000000},
+{'@', 0x000000bc, 0x00005870},/*        ¼        x-advance: 88.437500 */
+{'M', 0x41ef519b, 0xc21d5596},
+{'l', 0xc147fc36, 0x00000000},
+{'l', 0x00000000, 0xc215472e},
+{'l', 0xc0f0bd8e, 0x00000000},
+{'4', 0xffb50000, 0xfff600a0},
+{'6', 0x01800000, 0x0103ffe7},
+{'l', 0xc1069652, 0xc08e2b68},
+{'4', 0xfde50150, 0x00230043},
+{'6', 0x021bfeb0, 0xffac01c0},
+{'0', 0x4a00002f, 0x410000d1},
+{'l', 0xc147fc38, 0x00000000},
+{'l', 0x00000000, 0xc103be6a},
+{'l', 0xc1c24c66, 0x00000000},
+{'l', 0xbf544e40, 0xc0eed848},
+{'4', 0xff0200c8, 0x00000063},
+{'6', 0x00ef0000, 0x0000ff3a},
+{'l', 0x41452450, 0x00000000},
+{'l', 0x00000000, 0xc173957a},
+{'l', 0xbeb5fa00, 0xbdf2a200},
+{'l', 0xbf452480, 0x3f97a5c0},
+{'l', 0xc1332238, 0x41628606},
+{'@', 0x000000bd, 0x00005bfe},/*        ½        x-advance: 91.992188 */
+{'M', 0x41dbe391, 0xc0ddc8d7},
+{'l', 0xc1069652, 0xc08e2b69},
+{'4', 0xfde50150, 0x00230043},
+{'6', 0x021bfeb0, 0xfefd0013},
+{'l', 0xc147fc36, 0x00000000},
+{'l', 0x00000000, 0xc215472e},
+{'l', 0xc0f0bd8e, 0x00000000},
+{'4', 0xffb50000, 0xfff600a0},
+{'6', 0x01800000, 0x013a01ed},
+{'4', 0x0000feda, 0xffb70000},
+{'l', 0x41926f46, 0xc16ed849},
+{'8', 0xd924e91c, 0xdd08f008},
+{'8', 0xe2f5ee00, 0xf4def4f6},
+{'8', 0x0ed900e6, 0x24f30ef3},
+{'4', 0x0000ffa1, 0xfffe0000},
+{'q', 0xbeb5fa80, 0xc0c8eed8},
+{0, 0x409b7050, 0xc12b8d20},
+{'q', 0x40a8b538, 0xc08e2b68},
+{0, 0x4160a0bc, 0xc08e2b68},
+{'8', 0x1e690044, 0x56251e25},
+{'8', 0x44e72600, 0x4eac1de7},
+{'l', 0xc0ce9eb0, 0x40b04a4e},
+{'l', 0x3df2a400, 0x3eb5fa20},
+{'l', 0x41a3f80c, 0x00000000},
+{'l', 0x00000000, 0x4112e897},
+{'@', 0x000000be, 0x000065b5},/*        ¾        x-advance: 101.707031 */
+{'M', 0x421639d1, 0xc0ddc8d7},
+{'l', 0xc1069652, 0xc08e2b69},
+{'4', 0xfde50150, 0x00230043},
+{'6', 0x021bfeb0, 0xffac01c3},
+{'0', 0x4a00002f, 0x410000d1},
+{'l', 0xc147fc30, 0x00000000},
+{'l', 0x00000000, 0xc103be6a},
+{'l', 0xc1c24c66, 0x00000000},
+{'l', 0xbf544e80, 0xc0eed848},
+{'4', 0xff0200c8, 0x00000063},
+{'6', 0x00ef0000, 0x0000ff3a},
+{'l', 0x41452450, 0x00000000},
+{'l', 0x00000000, 0xc173957a},
+{'4', 0x0000fffe, 0x0009fffa},
+{'6', 0x0071ffa7, 0xfe71fea0},
+{'8', 0xf52b001d, 0xdf0ef50e},
+{'8', 0xe3f3ee00, 0xf4d9f4f3},
+{'8', 0x0adb00e8, 0x19f30af3},
+{'4', 0x0000ffa2, 0xfffe0000},
+{'8', 0xb426d1fe, 0xe369e329},
+{'q', 0x411010b0, 0x00000000},
+{0, 0x416378a8, 0x406378c0},
+{'8', 0x502a1b2a, 0x2fef1a00},
+{'8', 0x21d315f0, 0x22320b21},
+{'8', 0x36121612, 0x52d63500},
+{'q', 0xc0a8b538, 0x406b0dc0},
+{0, 0xc1646b48, 0x406b0dc0},
+{'q', 0xc10a60de, 0x00000000},
+{0, 0xc16378a8, 0xc06b0dc0},
+{'9', 0xffe3ffd4, 0xffadffd7},
+{'4', 0xfffe0000, 0x0000005f},
+{'8', 0x1f0e1300, 0x0a2b0a0f},
+{'8', 0xf52a001a, 0xe010f510},
+{'8', 0xdcf0e900, 0xf4d0f4f0},
+{'l', 0xc0d26934, 0x00000000},
+{'l', 0x00000000, 0xc0fc1d38},
+{'l', 0x40d26934, 0x00000000},
+{'@', 0x000000bf, 0x00003d6d},/*        ¿        x-advance: 61.425781 */
+{'M', 0x422c0672, 0xc21e4839},
+{'8', 0x62ec4200, 0x4ab51eee},
+{'8', 0x3bca1bde, 0x46ed1fed},
+{'8', 0x43162a00, 0x18421817},
+{'8', 0xec3a0022, 0xc419ec18},
+{'4', 0x00000086, 0x00020000},
+{'q', 0x3df2a200, 0x4135077d},
+{0, 0xc0f2a2d8, 0x418ada2f},
+{'q', 0xc0f48818, 0x40bf747c},
+{0, 0xc19ec18a, 0x40bf747c},
+{'q', 0xc15633c0, 0x00000000},
+{0, 0xc1a74944, 0xc0d633c0},
+{'q', 0xc0f0bd8f, 0xc0d633c0},
+{0, 0xc0f0bd8f, 0xc191f5f4},
+{'8', 0x9223c500, 0xaa58cd23},
+{'8', 0xd525eb1c, 0xc109ea09},
+{'6', 0x00000089, 0xff3cff76},
+{'l', 0x418b5381, 0x00000000},
+{'l', 0x00000000, 0x416de5a8},
+{'l', 0xc18b5381, 0x00000000},
+{'l', 0x00000000, 0xc16de5a8},
+{'@', 0x000000c0, 0x00004da8},/*        À        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfe1f009f},
+{'l', 0xc160a0c0, 0x00000000},
+{'l', 0xc1806d2f, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000c1, 0x00004da8},/*        Á        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfda00071},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc183451a, 0x41766d60},
+{'l', 0xc15cd632, 0x00000000},
+{'l', 0x413c9c92, 0xc17c1d30},
+{'@', 0x000000c2, 0x00004da8},/*        Â        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfe040102},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000c3, 0x00004da8},/*        Ã        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfd920105},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db3a, 0xc01f3ae0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f4, 0x402a9a80},
+{'@', 0x000000c4, 0x00004da8},/*        Ä        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfe0b0109},
+{'l', 0xc17c1d2c, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000c5, 0x00004da8},/*        Ã…        x-advance: 77.656250 */
+{'M', 0x42594851, 0xc194cddd},
+{'l', 0xc1f22983, 0x00000000},
+{'l', 0xc0bba9f0, 0x4194cddd},
+{'l', 0xc18bccd2, 0x00000000},
+{'l', 0x41ed6c55, 0xc2ac7fc3},
+{'l', 0x418db218, 0x00000000},
+{'4', 0x02b100ec, 0x0000ff75},
+{'6', 0xff6cffd2, 0xff94ff30},
+{'l', 0x41adebb7, 0x00000000},
+{'4', 0xfef1ffab, 0x0000fffe},
+{'6', 0x010fffab, 0xfdcafff0},
+{'8', 0xbf1cd900, 0xe548e51d},
+{'8', 0x1b460029, 0x411c1a1c},
+{'8', 0x41e42700, 0x19ba19e4},
+{'8', 0xe7b800d6, 0xbfe4e7e4},
+{'m', 0x40dbe38c, 0x00000000},
+{'8', 0x210d1400, 0x0c200c0d},
+{'8', 0xf41f0013, 0xdf0cf30c},
+{'8', 0xdef4ec00, 0xf3e1f3f4},
+{'8', 0x0ddf00ed, 0x21f40df4},
+{'@', 0x000000c6, 0x00007208},/*        Æ        x-advance: 114.031250 */
+{'M', 0x42dcf488, 0x00000000},
+{'l', 0xc254c7cb, 0x00000000},
+{'l', 0xbf544e80, 0xc19ec18a},
+{'l', 0xc1d083f0, 0x00000000},
+{'l', 0xc11f3ada, 0x419ec18a},
+{'l', 0xc1a212c5, 0x00000000},
+{'l', 0x4239c4ab, 0xc2ac7fc3},
+{'l', 0x4270bd8f, 0x00000000},
+{'l', 0x00000000, 0x41581900},
+{'l', 0xc20d38c6, 0x00000000},
+{'l', 0x3f72a300, 0x41ad7268},
+{'l', 0x41ec79b4, 0x00000000},
+{'l', 0x00000000, 0x41572660},
+{'l', 0xc1e835d8, 0x00000000},
+{'4', 0x00c10008, 0x00000123},
+{'6', 0x006b0000, 0xfef0fdb9},
+{'l', 0x4192e898, 0x00000000},
+{'l', 0xbfae6520, 0xc2047463},
+{'l', 0xbeb5fa00, 0xbd72a800},
+{'l', 0xc1852a5e, 0x4204b10d},
+{'@', 0x000000c7, 0x00004d8a},/*        Ç        x-advance: 77.539062 */
+{'M', 0x429250f1, 0xc1ea946d},
+{'l', 0x3df2a400, 0x3eb5fa40},
+{'q', 0x3e72a200, 0x415ebb79},
+{0, 0xc1087b98, 0x41b0c3a0},
+{'q', 0xc10b5380, 0x4101d924},
+{0, 0xc1c1d314, 0x4101d924},
+{'q', 0xc1794548, 0xb5000000},
+{0, 0xc1ca5acc, 0xc1202d7f},
+{'9', 0xffb0ffb3, 0xff32ffb3},
+{'l', 0xb5000000, 0xc188f4e8},
+{'q', 0x00000000, 0xc17b2a94},
+{0, 0x4117a5c6, 0xc1ce255a},
+{'q', 0x4117a5c4, 0xc1212020},
+{0, 0x41c5244d, 0xc1212020},
+{'q', 0x417fe7bc, 0x00000000},
+{0, 0x41c7fc34, 0x4103be68},
+{'9', 0x00410048, 0x00b20046},
+{'4', 0x00020000, 0x0000ff7a},
+{'8', 0x98e0bc00, 0xdc9bdce0},
+{'q', 0xc0f852a8, 0x00000000},
+{0, 0xc145244e, 0x40cad420},
+{'9', 0x0032ffdc, 0x0080ffdc},
+{'l', 0x00000000, 0x4189e78c},
+{'q', 0x00000000, 0x411e483a},
+{0, 0x40998b08, 0x4181d924},
+{'8', 0x32673226, 0xde5f0040},
+{'9', 0xffdd001f, 0xff99001f},
+{'6', 0x00000086, 0x00e8ff26},
+{'l', 0xbf26d000, 0x40581905},
+{'8', 0x1832051e, 0x39141314},
+{'q', 0x00000000, 0x40cad41e},
+{0, 0xc0ae6508, 0x412212c5},
+{'9', 0x001effd5, 0x001eff86},
+{'l', 0xbed44e80, 0xc1189868},
+{'8', 0xf7260018, 0xe30ef70e},
+{'8', 0xe5f1ed00, 0xf6ccf8f1},
+{'l', 0x3feb0dc0, 0xc1069652},
+{'l', 0x414f914c, 0xb4200000},
+{'@', 0x000000c8, 0x000045a9},/*        È        x-advance: 69.660156 */
+{'M', 0x42744b72, 0xc217a5c5},
+{'l', 0xc20ee163, 0x00000000},
+{'l', 0x00000000, 0x41c5244d},
+{'l', 0x42270c9b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc26c3d0a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426bc3b8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc2269349, 0x00000000},
+{'4', 0x00ad0000, 0x0000011d},
+{'6', 0x006a0000, 0xfe4dff7c},
+{'l', 0xc160a0be, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a380, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'[', 0x005400c8, 0x0000012f},/*kerning*/
+{'@', 0x000000c9, 0x000045a9},/*        É        x-advance: 69.660156 */
+{'M', 0x42744b72, 0xc217a5c5},
+{'l', 0xc20ee163, 0x00000000},
+{'l', 0x00000000, 0x41c5244d},
+{'l', 0x42270c9b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc26c3d0a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426bc3b8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc2269349, 0x00000000},
+{'4', 0x00ad0000, 0x0000011d},
+{'6', 0x006a0000, 0xfdceff4e},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a200, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'[', 0x005400c9, 0x0000012f},/*kerning*/
+{'@', 0x000000ca, 0x000045a9},/*        Ê        x-advance: 69.660156 */
+{'M', 0x42744b72, 0xc217a5c5},
+{'l', 0xc20ee163, 0x00000000},
+{'l', 0x00000000, 0x41c5244d},
+{'l', 0x42270c9b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc26c3d0a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426bc3b8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc2269349, 0x00000000},
+{'4', 0x00ad0000, 0x0000011d},
+{'6', 0x006a0000, 0xfe32ffe6},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'[', 0x005400ca, 0x0000012f},/*kerning*/
+{'@', 0x000000cb, 0x000045a9},/*        Ë        x-advance: 69.660156 */
+{'M', 0x42744b72, 0xc217a5c5},
+{'l', 0xc20ee163, 0x00000000},
+{'l', 0x00000000, 0x41c5244d},
+{'l', 0x42270c9b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc26c3d0a, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x426bc3b8, 0x00000000},
+{'l', 0x00000000, 0x41554118},
+{'l', 0xc2269349, 0x00000000},
+{'4', 0x00ad0000, 0x0000011d},
+{'6', 0x006a0000, 0xfe39ffec},
+{'l', 0xc17c1d34, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'[', 0x005400cb, 0x0000012f},/*kerning*/
+{'@', 0x000000cc, 0x0000239a},/*        Ì        x-advance: 35.601562 */
+{'M', 0x41d35bd8, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfd4f0000, 0x0000008a},
+{'6', 0x02b10000, 0xfd1d0001},
+{'l', 0xc160a0bf, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a340, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000cd, 0x0000239a},/*        Í        x-advance: 35.601562 */
+{'M', 0x41d35bd8, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfd4f0000, 0x0000008a},
+{'6', 0x02b10000, 0xfc9fffd3},
+{'l', 0x41926f45, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834519, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000ce, 0x0000239a},/*        ÃŽ        x-advance: 35.601562 */
+{'M', 0x41d35bd8, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfd4f0000, 0x0000008a},
+{'6', 0x02b10000, 0xfd03006c},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572663, 0x00000000},
+{'l', 0xb4800000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d7f, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000cf, 0x0000239a},/*        Ï        x-advance: 35.601562 */
+{'M', 0x41d35bd8, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfd4f0000, 0x0000008a},
+{'6', 0x02b10000, 0xfd0a0071},
+{'l', 0xc17c1d32, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x35000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000d0, 0x00005146},/*        Ð        x-advance: 81.273438 */
+{'M', 0x411d5596, 0x00000000},
+{'l', 0x00000000, 0xc21a7dae},
+{'l', 0xc0ffe7bc, 0x00000000},
+{'l', 0xb4800000, 0xc12b8d20},
+{'4', 0x0000003f, 0xfed90000},
+{'l', 0x41ecf305, 0x00000000},
+{'q', 0x417d0fd4, 0x00000000},
+{0, 0x41d083f0, 0x412212c0},
+{'9', 0x00500051, 0x00cf0051},
+{'l', 0x00000000, 0x41646b48},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc123f808, 0x41cf914c},
+{'9', 0x0050ffaf, 0x0050ff30},
+{'6', 0x0000ff14, 0xfecc00fe},
+{'4', 0x0000ff8d, 0x00ca0000},
+{'l', 0x4136ecc2, 0x00000000},
+{'q', 0x4114cddc, 0x00000000},
+{0, 0x41692878, 0xc0c8eed8},
+{'9', 0xffce002a, 0xff7d002a},
+{'l', 0x00000000, 0xc1665090},
+{'q', 0x00000000, 0xc1202d7c},
+{0, 0xc0a8b538, 0xc1825274},
+{'9', 0xffceffd6, 0xffceff8c},
+{'l', 0xc136ecc2, 0x00000000},
+{'l', 0x00000000, 0x41bc9c94},
+{'l', 0x41674332, 0x00000000},
+{'l', 0x00000000, 0x412b8d20},
+{'@', 0x000000d1, 0x000055e4},/*        Ñ        x-advance: 85.890625 */
+{'M', 0x429b8ea5, 0x00000000},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0xc20b5380, 0xc26bc3b8},
+{'l', 0xbeb5fa80, 0x3d72a000},
+{'l', 0x00000000, 0x426b8710},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x35800000, 0xc2ac7fc3},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x420b5380, 0x426b870f},
+{'l', 0x3eb5fa80, 0xbd72a400},
+{'4', 0xfe2a0000, 0x00000089},
+{'6', 0x02b10000, 0xfc91ff9b},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db3a, 0xc01f3ae0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f8, 0x402a9a80},
+{'@', 0x000000d2, 0x000052df},/*        Ã’        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'9', 0xffcd0027, 0xff7b0027},
+{'6', 0xff830000, 0xfeb5ffb1},
+{'l', 0xc160a0c0, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f45, 0x00000000},
+{'l', 0x413ab750, 0x417c1d30},
+{'@', 0x000000d3, 0x000052df},/*        Ó        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'9', 0xffcd0027, 0xff7b0027},
+{'6', 0xff830000, 0xfe2dff83},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a200, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000d4, 0x000052df},/*        Ô        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'9', 0xffcd0027, 0xff7b0027},
+{'6', 0xff830000, 0xfe91001a},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572660, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3ae, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000d5, 0x000052df},/*        Õ        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'9', 0xffcd0027, 0xff7b0027},
+{'6', 0xff830000, 0xfe1f001b},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db3a, 0xc01f3ac0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f4, 0x402a9a80},
+{'@', 0x000000d6, 0x000052df},/*        Ö        x-advance: 82.871094 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'q', 0xc17ef518, 0xb5000000},
+{0, 0xc1cf17fa, 0xc125dd50},
+{'9', 0xffaeffb1, 0xff2fffb1},
+{'l', 0x35000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'q', 0x41806d30, 0x00000000},
+{0, 0x41d0fd42, 0x4126cff0},
+{'9', 0x00520050, 0x00d10050},
+{'6', 0x007c0000, 0xff83ff76},
+{'q', 0x00000000, 0xc1212020},
+{0, 0xc0a12028, 0xc18437bc},
+{'8', 0xcd92cdd8, 0x339300ba},
+{'9', 0x0033ffda, 0x0084ffda},
+{'l', 0x00000000, 0x417a37ec},
+{'q', 0x00000000, 0x4123f80c},
+{0, 0x409d5598, 0x4185a3b0},
+{'8', 0x336d3327, 0xcd6e0047},
+{'9', 0xffcd0027, 0xff7b0027},
+{'6', 0xff830000, 0xfe98001f},
+{'l', 0xc17c1d30, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000d7, 0x00004073},/*        ×        x-advance: 64.449219 */
+{'M', 0x4072a2d5, 0xc1afd0fd},
+{'l', 0x41926f45, 0xc195472f},
+{'l', 0xc1926f45, 0xc195472e},
+{'l', 0x41230566, 0xc11b704c},
+{'l', 0x418f975d, 0x4192e896},
+{'l', 0x419010af, 0xc192e896},
+{'l', 0x41230568, 0x411b704c},
+{'l', 0xc1926f46, 0x4195472e},
+{'l', 0x41926f46, 0x4195472f},
+{'l', 0xc1230568, 0x411b7050},
+{'l', 0xc19010af, 0xc1926f46},
+{'l', 0xc18f975d, 0x41926f46},
+{'l', 0xc1230567, 0xc11b7050},
+{'@', 0x000000d8, 0x00005386},/*        Ø        x-advance: 83.523438 */
+{'M', 0x429ad8ab, 0xc20d756f},
+{'q', 0x00000000, 0x417e0278},
+{0, 0xc1212020, 0x41d1efe4},
+{'q', 0xc1202d84, 0x4125dd50},
+{0, 0xc1d083f2, 0x4125dd50},
+{'8', 0xf9b900db, 0xeac1f9de},
+{'4', 0x0040ffdb, 0x0000ffbd},
+{'l', 0x40e19364, 0xc14159c2},
+{'q', 0xc0c5244e, 0xc09d5596},
+{0, 0xc1189869, 0xc14616ef},
+{'9', 0xffc4ffe6, 0xff7cffe6},
+{'l', 0x00000000, 0xc17852a4},
+{'q', 0x00000000, 0xc17d0fd8},
+{0, 0x411e4838, 0xc1d17694},
+{'q', 0x411f3ade, 0xc126cff0},
+{0, 0x41cf17fc, 0xc126cff0},
+{'8', 0x0c59002f, 0x234d0c2a},
+{'4', 0xffbd0027, 0x00000043},
+{'l', 0xc0f66d60, 0x41535bd8},
+{'q', 0x4095c080, 0x409d5590},
+{0, 0x40e55de0, 0x4138d208},
+{'9', 0x00350014, 0x00720014},
+{'6', 0x007c0000, 0x0000fe4b},
+{'8', 0x41072300, 0x32151d07},
+{'4', 0x00000002, 0xfe8400dd},
+{'8', 0xdfd2ebed, 0xf5c6f5e6},
+{'q', 0xc10d38c8, 0x00000000},
+{0, 0xc15af0f0, 0x40ce9ea0},
+{'9', 0x0033ffda, 0x0084ffda},
+{'6', 0x007d0000, 0xff83012b},
+{'8', 0xd7fdeb00, 0xdef8edfd},
+{'4', 0x0000fffe, 0x016dff2c},
+{'8', 0x10230a0f, 0x05290513},
+{'q', 0x410e2b6c, 0x00000000},
+{0, 0x415dc8d8, 0xc0ce9eaa},
+{'q', 0x409f3ae0, 0xc0ce9ea8},
+{0, 0x409f3ae0, 0xc185a3b0},
+{'l', 0x00000000, 0xc17a37ec},
+{'@', 0x000000d9, 0x00005358},/*        Ù        x-advance: 83.343750 */
+{'M', 0x42989868, 0xc2ac7fc3},
+{'l', 0x00000000, 0x4264e49b},
+{'q', 0x00000000, 0x416835d6},
+{0, 0xc1198b08, 0x41b32238},
+{'q', 0xc1198b0c, 0x40fc1d2f},
+{0, 0xc1c8eeda, 0x40fc1d2f},
+{'q', 0xc1776004, 0x00000000},
+{0, 0xc1c7fc36, 0xc0fc1d31},
+{'9', 0xffc1ffb5, 0xff4dffb5},
+{'4', 0xfe370000, 0x0000008a},
+{'l', 0x00000000, 0x4264e49b},
+{'8', 0x66244400, 0x21642124},
+{'8', 0xdf650040, 0x9a24df24},
+{'4', 0xfe370000, 0x0000008a},
+{'m', 0xc1ce9eaa, 0xc0c52450},
+{'l', 0xc160a0c0, 0x00000000},
+{'l', 0xc1806d2f, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000da, 0x00005358},/*        Ú        x-advance: 83.343750 */
+{'M', 0x42989868, 0xc2ac7fc3},
+{'l', 0x00000000, 0x4264e49b},
+{'q', 0x00000000, 0x416835d6},
+{0, 0xc1198b08, 0x41b32238},
+{'q', 0xc1198b0c, 0x40fc1d2f},
+{0, 0xc1c8eeda, 0x40fc1d2f},
+{'q', 0xc1776004, 0x00000000},
+{0, 0xc1c7fc36, 0xc0fc1d31},
+{'9', 0xffc1ffb5, 0xff4dffb5},
+{'4', 0xfe370000, 0x0000008a},
+{'l', 0x00000000, 0x4264e49b},
+{'8', 0x66244400, 0x21642124},
+{'8', 0xdf650040, 0x9a24df24},
+{'4', 0xfe370000, 0x0000008a},
+{'m', 0xc1fc9682, 0xc1af57ac},
+{'l', 0x41926f44, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000db, 0x00005358},/*        Û        x-advance: 83.343750 */
+{'M', 0x42989868, 0xc2ac7fc3},
+{'l', 0x00000000, 0x4264e49b},
+{'q', 0x00000000, 0x416835d6},
+{0, 0xc1198b08, 0x41b32238},
+{'q', 0xc1198b0c, 0x40fc1d2f},
+{0, 0xc1c8eeda, 0x40fc1d2f},
+{'q', 0xc1776004, 0x00000000},
+{0, 0xc1c7fc36, 0xc0fc1d31},
+{'9', 0xffc1ffb5, 0xff4dffb5},
+{'4', 0xfe370000, 0x0000008a},
+{'l', 0x00000000, 0x4264e49b},
+{'8', 0x66244400, 0x21642124},
+{'8', 0xdf650040, 0x9a24df24},
+{'4', 0xfe370000, 0x0000008a},
+{'m', 0xc148eed8, 0xc116b328},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000dc, 0x00005358},/*        Ü        x-advance: 83.343750 */
+{'M', 0x42989868, 0xc2ac7fc3},
+{'l', 0x00000000, 0x4264e49b},
+{'q', 0x00000000, 0x416835d6},
+{0, 0xc1198b08, 0x41b32238},
+{'q', 0xc1198b0c, 0x40fc1d2f},
+{0, 0xc1c8eeda, 0x40fc1d2f},
+{'q', 0xc1776004, 0x00000000},
+{0, 0xc1c7fc36, 0xc0fc1d31},
+{'9', 0xffc1ffb5, 0xff4dffb5},
+{'4', 0xfe370000, 0x0000008a},
+{'l', 0x00000000, 0x4264e49b},
+{'8', 0x66244400, 0x21642124},
+{'8', 0xdf650040, 0x9a24df24},
+{'4', 0xfe370000, 0x0000008a},
+{'m', 0xc13e81d8, 0xc1096e40},
+{'l', 0xc17c1d34, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000dd, 0x00004c88},/*        Ý        x-advance: 76.531250 */
+{'M', 0x42185bbf, 0xc23a0154},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x4196b324, 0xc21efe32},
+{'l', 0x4197a5c6, 0x00000000},
+{'l', 0xc1ecf306, 0x425fae1c},
+{'l', 0x00000000, 0x41f2a2d4},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0x00000000, 0xc1f9be9a},
+{'4', 0xfe48ff18, 0x00000097},
+{'6', 0x013d0096, 0xfe13001c},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a200, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'[', 0x002900dd, 0x0000015c},/*kerning*/
+{'[', 0x005400dd, 0x0000012f},/*kerning*/
+{'[', 0x005600dd, 0x0000013e},/*kerning*/
+{'[', 0x005700dd, 0x0000012f},/*kerning*/
+{'[', 0x005900dd, 0x0000013e},/*kerning*/
+{'[', 0x005d00dd, 0x0000013e},/*kerning*/
+{'[', 0x007d00dd, 0x0000014d},/*kerning*/
+{'[', 0x00dd00dd, 0x0000013e},/*kerning*/
+{'@', 0x000000de, 0x000049de},/*        Þ        x-advance: 73.867188 */
+{'M', 0x41c8eed8, 0xc2ac7fc3},
+{'4', 0x007f0000, 0x00000068},
+{'q', 0x4170bd8c, 0x00000000},
+{0, 0x41bba9f0, 0x40eb0dc0},
+{'q', 0x41069654, 0x40eb0dc0},
+{0, 0x41069654, 0x41998b0a},
+{'q', 0x00000000, 0x413e81dc},
+{0, 0xc1069654, 0x419a045d},
+{'9', 0x003affbd, 0x003aff45},
+{'l', 0xc1517694, 0x00000000},
+{'l', 0x00000000, 0x4188f4e9},
+{'4', 0x0000ff76, 0xfd4f0000},
+{'6', 0x0000008a, 0x00ea0000},
+{'4', 0x00d30000, 0x00000068},
+{'8', 0xe357003a, 0xb51de21d},
+{'8', 0xb5e3d300, 0xe2a9e2e4},
+{'l', 0xc1517694, 0x00000000},
+{'@', 0x000000df, 0x00004ca7},/*        ß        x-advance: 76.652344 */
+{'M', 0x41c9e17b, 0x00000000},
+{'4', 0x0000ff77, 0xfdf70000},
+{'q', 0x00000000, 0xc15633c0},
+{0, 0x40f4881b, 0xc1a563fc},
+{'q', 0x40f48818, 0xc0e92880},
+{0, 0x41a6cff2, 0xc0e92880},
+{'q', 0x412a9a80, 0x00000000},
+{0, 0x418db218, 0x40b5fa20},
+{'q', 0x40e19360, 0x40b414e0},
+{0, 0x40e19360, 0x41806d30},
+{'8', 0x61e73300, 0x4ee72de7},
+{'q', 0x00000000, 0x40544e70},
+{0, 0x410e2b6c, 0x413ba9f0},
+{'q', 0x410e2b64, 0x4105a3b0},
+{0, 0x410e2b64, 0x41852a5e},
+{'q', 0x00000000, 0x41332237},
+{0, 0xc0d9fe40, 0x41861d01},
+{'q', 0xc0d9fe50, 0x40b22f93},
+{0, 0xc19d5598, 0x40b22f93},
+{'8', 0xf9b400da, 0xedc9f9db},
+{'l', 0x405083f8, 0xc1535bd8},
+{'8', 0x122d0a12, 0x0739071b},
+{'8', 0xee380024, 0xd014ee14},
+{'q', 0x00000000, 0xc0869654},
+{0, 0xc10e2b6c, 0xc1424c66},
+{'q', 0xc10e2b68, 0xc0ffe7b8},
+{0, 0xc10e2b68, 0xc1834518},
+{'8', 0xa619d600, 0xae1ad11a},
+{'8', 0xcbebe000, 0xebd0ebeb},
+{'8', 0x20c600dc, 0x57ea1fea},
+{'l', 0x00000000, 0x4281f778},
+{'@', 0x000000e0, 0x00004129},/*        à        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0x4148eed8, 0xc275b766},
+{'l', 0xc160a0c0, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a380, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000e1, 0x00004129},/*        á        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0x40d9fe48, 0xc29a5f59},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a200, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd632, 0x00000000},
+{'l', 0x413c9c92, 0xc17c1d30},
+{'@', 0x000000e2, 0x00004129},/*        â        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0x41ce9eaa, 0xc28215cd},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d7e, 0x00000000},
+{'l', 0x41880248, 0x41665090},
+{'@', 0x000000e3, 0x00004129},/*        ã        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0x41cf914c, 0xc29ea336},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db39, 0xc01f3ae0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f4, 0x402a9a80},
+{'@', 0x000000e4, 0x00004129},/*        ä        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0x41d3d528, 0xc2806d30},
+{'l', 0xc17c1d30, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000e5, 0x00004129},/*        å        x-advance: 65.160156 */
+{'M', 0x42310049, 0x00000000},
+{'8', 0xdcf3eff9, 0xd9f9edfb},
+{'8', 0x3ec825eb, 0x18ae18de},
+{'q', 0xc1212021, 0x00000000},
+{0, 0xc17852a6, 0xc0a4eaad},
+{'q', 0xc0ae6508, 0xc0a6cff2},
+{0, 0xc0ae6508, 0xc1628605},
+{'q', 0xb4800000, 0xc116b322},
+{0, 0x40e74332, 0xc1692878},
+{'9', 0xffd7003a, 0xffd700a9},
+{'4', 0x0000004d, 0xffd80000},
+{'8', 0xc7eddc00, 0xecc7eced},
+{'8', 0x10cc00df, 0x2dee10ee},
+{'4', 0x0000ff7b, 0xfffe0000},
+{'q', 0xbed44e80, 0xc101d924},
+{0, 0x40e19361, 0xc15fae1c},
+{'q', 0x40eed84c, 0xc0bd8f38},
+{0, 0x419cdc45, 0xc0bd8f38},
+{'q', 0x4137df64, 0x00000000},
+{0, 0x4195472e, 0x40bba9f0},
+{'9', 0x002e0039, 0x00840039},
+{'l', 0x00000000, 0x41d3d529},
+{'8', 0x43052400, 0x3f111f05},
+{'6', 0x0000ff76, 0xffa4ff82},
+{'8', 0xee400024, 0xd726ee1c},
+{'4', 0xffb80000, 0x0000ffb3},
+{'8', 0x16be00d4, 0x35ea15ea},
+{'8', 0x29111900, 0x0f2e0f11},
+{'m', 0xc10c4624, 0xc290c6a9},
+{'8', 0xbf1cd900, 0xe548e51d},
+{'8', 0x1b460029, 0x411c1a1c},
+{'8', 0x41e42700, 0x19ba19e4},
+{'8', 0xe7b800d6, 0xbfe4e7e4},
+{'m', 0x40dbe390, 0x00000000},
+{'8', 0x210d1400, 0x0c200c0d},
+{'8', 0xf41f0013, 0xdf0cf30c},
+{'8', 0xdef4ec00, 0xf3e1f3f4},
+{'8', 0x0ddf00ed, 0x21f40df4},
+{'@', 0x000000e6, 0x0000666b},/*        æ        x-advance: 102.417969 */
+{'M', 0x42939e91, 0x3f9f3adc},
+{'8', 0xee9400c3, 0xc9b1edd1},
+{'q', 0xc06378a0, 0x4080e681},
+{0, 0xc1198b0c, 0x40d633c0},
+{'q', 0xc0bf7478, 0x4026cff2},
+{0, 0xc16378a6, 0x4026cff2},
+{'q', 0xc135fa20, 0x00000000},
+{0, 0xc18cbf74, 0xc0aa9a7e},
+{'q', 0xc0c52450, 0xc0ac7fc3},
+{0, 0xc0c52450, 0xc16b0dbe},
+{'q', 0x34800000, 0xc116b322},
+{0, 0x40f0bd90, 0xc16835d6},
+{'9', 0xffd8003c, 0xffd800af},
+{'4', 0x00000055, 0xffe50000},
+{'8', 0xc6eddb00, 0xebcaebed},
+{'8', 0x12c400da, 0x2ceb11eb},
+{'4', 0xfff8ff7a, 0xfffe0000},
+{'q', 0xbeb5fa20, 0xc1087b98},
+{0, 0x40e55ded, 0xc1619364},
+{'q', 0x40f2a2d4, 0xc0b22f90},
+{0, 0x41a12021, 0xc0b22f90},
+{'8', 0x0d580030, 0x25430c27},
+{'8', 0xdb43e81c, 0xf355f326},
+{'q', 0x4148eed8, 0x00000000},
+{0, 0x419dcee8, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004a0000, 0x0000fecc},
+{'l', 0xbdf2a200, 0x3eb5fa40},
+{'8', 0x541f3501, 0x1f581f1d},
+{'8', 0xf748002b, 0xe442f71d},
+{'l', 0x4091f5f0, 0x412e6509},
+{'8', 0x28b016e3, 0x119211ce},
+{'m', 0xc2300da6, 0xc1433f08},
+{'8', 0xf239001b, 0xde2ff21d},
+{'4', 0xffad0000, 0x0000ffac},
+{'8', 0x14b800d2, 0x32e714e7},
+{'8', 0x2c131b00, 0x103a1013},
+{'m', 0x422a9a7e, 0xc223f80a},
+{'8', 0x1dbd00d3, 0x4ee71cea},
+{'4', 0x00020000, 0x000000ab},
+{'l', 0x00000000, 0xbfd44e80},
+{'8', 0xbaecd400, 0xe6c5e6ed},
+{'@', 0x000000e7, 0x00003eca},/*        ç        x-advance: 62.789062 */
+{'M', 0x42061d01, 0xc140671f},
+{'8', 0xeb3b0024, 0xc716eb16},
+{'4', 0x0000007d, 0x00020001},
+{'q', 0x3e72a300, 0x411b7050},
+{0, 0xc0eb0dc0, 0x41825275},
+{'q', 0xc0f0bd88, 0x40d083ef},
+{0, 0xc195c07e, 0x40d083ef},
+{'q', 0xc1655dee, 0x00000000},
+{0, 0xc1b0c3a0, 0xc1110352},
+{'9', 0xffb8ffc2, 0xff46ffc2},
+{'l', 0x00000000, 0xbfe378b0},
+{'q', 0x00000000, 0xc1628604},
+{0, 0x40f66d61, 0xc1ba3dfc},
+{'q', 0x40f852a4, 0xc111f5f4},
+{0, 0x41b0c3a0, 0xc111f5f4},
+{'q', 0x413d8f38, 0x00000000},
+{0, 0x41989868, 0x40d81900},
+{'9', 0x0036003a, 0x008e0038},
+{'4', 0x00020000, 0x0000ff82},
+{'8', 0xbfebd900, 0xe6c4e6eb},
+{'8', 0x2ab300ca, 0x6dea2aea},
+{'l', 0x00000000, 0x3fe378b0},
+{'8', 0x6e164400, 0x294e2916},
+{'m', 0x40bba9f0, 0x413ba9f1},
+{'l', 0xbf26d000, 0x40581905},
+{'8', 0x1832051e, 0x39141314},
+{'q', 0x00000000, 0x40cad41e},
+{0, 0xc0ae6508, 0x412212c5},
+{'9', 0x001effd5, 0x001eff86},
+{'l', 0xbed44e40, 0xc1189868},
+{'8', 0xf7260018, 0xe30ef70e},
+{'8', 0xe5f1ed00, 0xf6ccf8f1},
+{'l', 0x3feb0dc0, 0xc1069652},
+{'l', 0x414f914c, 0xb4200000},
+{'@', 0x000000e8, 0x00004036},/*        è        x-advance: 64.210938 */
+{'M', 0x420c097a, 0x3f9f3adc},
+{'q', 0xc15dc8d4, 0x00000000},
+{0, 0xc1b13cf0, 0xc10e2b69},
+{'9', 0xffb9ffbe, 0xff4cffbe},
+{'l', 0x00000000, 0xc017a5c0},
+{'q', 0x00000000, 0xc1646b4c},
+{0, 0x40fa37ec, 0xc1bc2342},
+{'q', 0x40fc1d30, 0xc113db38},
+{0, 0x41a8b538, 0xc112e898},
+{'q', 0x414f914c, 0x00000000},
+{0, 0x41a12022, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004b0000, 0x0000fece},
+{'l', 0xbdf2a300, 0x3eb5fa40},
+{'8', 0x53213203, 0x2051201e},
+{'8', 0xf74c002d, 0xe342f71e},
+{'l', 0x4095c080, 0x412a9a7e},
+{'q', 0xc07a37e0, 0x404cb962},
+{0, 0xc123f808, 0x40aa9a7d},
+{'9', 0x0010ffce, 0x0010ff90},
+{'m', 0xbfc52440, 0xc254c7cc},
+{'8', 0x1dc400da, 0x4de51dea},
+{'4', 0x00020001, 0x000000a9},
+{'l', 0x00000000, 0xbfc52440},
+{'8', 0xbaecd400, 0xe6c2e6ec},
+{'m', 0x40f48818, 0xc1ab13ce},
+{'l', 0xc160a0be, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000e9, 0x00004036},/*        é        x-advance: 64.210938 */
+{'M', 0x420c097a, 0x3f9f3adc},
+{'q', 0xc15dc8d4, 0x00000000},
+{0, 0xc1b13cf0, 0xc10e2b69},
+{'9', 0xffb9ffbe, 0xff4cffbe},
+{'l', 0x00000000, 0xc017a5c0},
+{'q', 0x00000000, 0xc1646b4c},
+{0, 0x40fa37ec, 0xc1bc2342},
+{'q', 0x40fc1d30, 0xc113db38},
+{0, 0x41a8b538, 0xc112e898},
+{'q', 0x414f914c, 0x00000000},
+{0, 0x41a12022, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004b0000, 0x0000fece},
+{'l', 0xbdf2a300, 0x3eb5fa40},
+{'8', 0x53213203, 0x2051201e},
+{'8', 0xf74c002d, 0xe342f71e},
+{'l', 0x4095c080, 0x412a9a7e},
+{'q', 0xc07a37e0, 0x404cb962},
+{0, 0xc123f808, 0x40aa9a7d},
+{'9', 0x0010ffce, 0x0010ff90},
+{'m', 0xbfc52440, 0xc254c7cc},
+{'8', 0x1dc400da, 0x4de51dea},
+{'4', 0x00020001, 0x000000a9},
+{'l', 0x00000000, 0xbfc52440},
+{'8', 0xbaecd400, 0xe6c2e6ec},
+{'m', 0x3ff2a2e0, 0xc2149133},
+{'l', 0x41926f44, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000ea, 0x00004036},/*        ê        x-advance: 64.210938 */
+{'M', 0x420c097a, 0x3f9f3adc},
+{'q', 0xc15dc8d4, 0x00000000},
+{0, 0xc1b13cf0, 0xc10e2b69},
+{'9', 0xffb9ffbe, 0xff4cffbe},
+{'l', 0x00000000, 0xc017a5c0},
+{'q', 0x00000000, 0xc1646b4c},
+{0, 0x40fa37ec, 0xc1bc2342},
+{'q', 0x40fc1d30, 0xc113db38},
+{0, 0x41a8b538, 0xc112e898},
+{'q', 0x414f914c, 0x00000000},
+{0, 0x41a12022, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004b0000, 0x0000fece},
+{'l', 0xbdf2a300, 0x3eb5fa40},
+{'8', 0x53213203, 0x2051201e},
+{'8', 0xf74c002d, 0xe342f71e},
+{'l', 0x4095c080, 0x412a9a7e},
+{'q', 0xc07a37e0, 0x404cb962},
+{0, 0xc123f808, 0x40aa9a7d},
+{'9', 0x0010ffce, 0x0010ff90},
+{'m', 0xbfc52440, 0xc254c7cc},
+{'8', 0x1dc400da, 0x4de51dea},
+{'4', 0x00020001, 0x000000a9},
+{'l', 0x00000000, 0xbfc52440},
+{'8', 0xbaecd400, 0xe6c2e6ec},
+{'m', 0x41a74944, 0xc1c59d9e},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000eb, 0x00004036},/*        ë        x-advance: 64.210938 */
+{'M', 0x420c097a, 0x3f9f3adc},
+{'q', 0xc15dc8d4, 0x00000000},
+{0, 0xc1b13cf0, 0xc10e2b69},
+{'9', 0xffb9ffbe, 0xff4cffbe},
+{'l', 0x00000000, 0xc017a5c0},
+{'q', 0x00000000, 0xc1646b4c},
+{0, 0x40fa37ec, 0xc1bc2342},
+{'q', 0x40fc1d30, 0xc113db38},
+{0, 0x41a8b538, 0xc112e898},
+{'q', 0x414f914c, 0x00000000},
+{0, 0x41a12022, 0x40fa37e8},
+{'9', 0x003e0039, 0x00a90039},
+{'4', 0x004b0000, 0x0000fece},
+{'l', 0xbdf2a300, 0x3eb5fa40},
+{'8', 0x53213203, 0x2051201e},
+{'8', 0xf74c002d, 0xe342f71e},
+{'l', 0x4095c080, 0x412a9a7e},
+{'q', 0xc07a37e0, 0x404cb962},
+{0, 0xc123f808, 0x40aa9a7d},
+{'9', 0x0010ffce, 0x0010ff90},
+{'m', 0xbfc52440, 0xc254c7cc},
+{'8', 0x1dc400da, 0x4de51dea},
+{'4', 0x00020001, 0x000000a9},
+{'l', 0x00000000, 0xbfc52440},
+{'8', 0xbaecd400, 0xe6c2e6ec},
+{'m', 0x41ac7fc4, 0xc1befb2a},
+{'l', 0xc17c1d34, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d30, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d30, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000ec, 0x0000214a},/*        ì        x-advance: 33.289062 */
+{'M', 0x41c9682a, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfe000000, 0x0000008a},
+{'6', 0x02000000, 0xfdb60002},
+{'l', 0xc160a0bf, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74d, 0x417c1d30},
+{'@', 0x000000ed, 0x0000214a},/*        í        x-advance: 33.289062 */
+{'M', 0x41c9682a, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfe000000, 0x0000008a},
+{'6', 0x02000000, 0xfd42ffd4},
+{'l', 0x41926f45, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834519, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000ee, 0x0000214a},/*        î        x-advance: 33.289062 */
+{'M', 0x41c9682a, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfe000000, 0x0000008a},
+{'6', 0x02000000, 0xfda5006c},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572663, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3b0, 0xc16378a8},
+{'l', 0x41202d7e, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000ef, 0x0000214a},/*        ï        x-advance: 33.289062 */
+{'M', 0x41c9682a, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'4', 0xfe000000, 0x0000008a},
+{'6', 0x02000000, 0xfdac0071},
+{'l', 0xc17c1d32, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c8},
+{'l', 0x417c1d31, 0x00000000},
+{'l', 0x00000000, 0x414159c8},
+{'@', 0x000000f0, 0x00004826},/*        ð        x-advance: 72.148438 */
+{'M', 0x425a3af4, 0xc298d511},
+{'q', 0x40c159c0, 0x40c8eee0},
+{0, 0x4115c080, 0x416835d8},
+{'9', 0x0041001b, 0x008f001b},
+{'l', 0x00000000, 0x4139c4a8},
+{'q', 0x00000000, 0x416cf306},
+{0, 0xc114cddc, 0x41c1d314},
+{'q', 0xc114cddc, 0x4115c080},
+{0, 0xc1b9c4aa, 0x4115c080},
+{'q', 0xc1619364, 0xb5000000},
+{0, 0xc1b858b8, 0xc104b10d},
+{'q', 0xc10e2b68, 0xc105a3af},
+{0, 0xc10e2b68, 0xc1a563fe},
+{'q', 0x00000000, 0xc15633c0},
+{0, 0x40fe0276, 0xc1ab8d22},
+{'q', 0x40ffe7be, 0xc101d924},
+{0, 0x41ad7266, 0xc101d924},
+{'8', 0x0c480026, 0x213a0b22},
+{'l', 0x3e72a300, 0xbe72a300},
+{'8', 0xb8e7d9fa, 0xc5d1dfee},
+{'l', 0xc16835d6, 0x4100e684},
+{'4', 0xffcbffdc, 0xffce005a},
+{'l', 0xbd72a400, 0xbeb5fa00},
+{'8', 0xf2e0f9f2, 0xf4dcfaef},
+{'l', 0x40ae6508, 0xc14e9ea8},
+{'8', 0x194f0929, 0x25470f26},
+{'4', 0xffcd005d, 0x00350024},
+{'6', 0x002affb4, 0x0203ff64},
+{'q', 0x40dbe398, 0x35800000},
+{0, 0x412e650c, 0xc0b5fa1c},
+{'9', 0xffd30020, 0xff8b0020},
+{'l', 0x00000000, 0xc0dfae18},
+{'8', 0xe2d2eef0, 0xf4b9f4e2},
+{'8', 0x25a700c7, 0x62e125e1},
+{'8', 0x59203500, 0x24562420},
+{'@', 0x000000f1, 0x0000447a},/*        ñ        x-advance: 68.476562 */
+{'M', 0x41b39b89, 0xc2803087},
+{'l', 0x3f452440, 0x4112e898},
+{'8', 0xc33fd919, 0xeb53eb25},
+{'q', 0x411b7050, 0x00000000},
+{0, 0x4172a2d4, 0x40c33f08},
+{'9', 0x0030002b, 0x0099002b},
+{'4', 0x01400000, 0x0000ff76},
+{'l', 0x00000000, 0xc21ff0d6},
+{'8', 0xb8eccd00, 0xebc1ebec},
+{'8', 0x0bcf00e5, 0x1fdc0aeb},
+{'l', 0x00000000, 0x423a0154},
+{'4', 0x0000ff76, 0xfe000000},
+{'6', 0x00000080, 0xff2a010f},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db3a, 0xc01f3ae0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f4, 0x402a9a80},
+{'@', 0x000000f2, 0x0000447a},/*        ò        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfeb100ad},
+{'l', 0xc160a0be, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a300, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab74c, 0x417c1d30},
+{'@', 0x000000f3, 0x0000447a},/*        ó        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfe33007f},
+{'l', 0x41926f44, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd636, 0x00000000},
+{'l', 0x413c9c96, 0xc17c1d30},
+{'@', 0x000000f4, 0x0000447a},/*        ô        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfe970118},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572662, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3af, 0xc16378a8},
+{'l', 0x41202d80, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000f5, 0x0000447a},/*        õ        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfe250119},
+{'8', 0x4de42d00, 0x1fb91fe5},
+{'8', 0xecb500df, 0xecbeecd7},
+{'8', 0x0fe400ef, 0x24f50ff5},
+{'l', 0xc113db3a, 0xc01f3ae0},
+{'8', 0xb31bd400, 0xdf47df1c},
+{'8', 0x1448001a, 0x1446142d},
+{'8', 0xf11c0010, 0xdb0cf10c},
+{'l', 0x4111f5f4, 0x402a9a80},
+{'@', 0x000000f6, 0x0000447a},/*        ö        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'q', 0x416378a8, 0x00000000},
+{0, 0x41b22f94, 0x4111f5f4},
+{'9', 0x00480040, 0x00bc0040},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'q', 0xc16378a6, 0xb5000000},
+{0, 0xc1b22f94, 0xc1110352},
+{'9', 0xffb8ffc1, 0xff44ffc1},
+{'6', 0xfff70000, 0x00090089},
+{'q', 0x00000000, 0x410c4622},
+{0, 0x40452450, 0x41619362},
+{'8', 0x2a4f2a18, 0xd64e0035},
+{'9', 0xffd60019, 0xff900019},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'8', 0x91e7bc00, 0xd5b1d5e7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfe9e011d},
+{'l', 0xc17c1d34, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d31, 0x00000000},
+{'l', 0x00000000, 0xc14159c0},
+{'l', 0x417c1d31, 0x00000000},
+{'l', 0x00000000, 0x414159c0},
+{'@', 0x000000f7, 0x00004530},/*        ÷        x-advance: 69.187500 */
+{'M', 0x42815fd3, 0xc207c59e},
+{'l', 0xc273d221, 0x00000000},
+{'4', 0xff950000, 0x000001e7},
+{'6', 0x006b0000, 0xff43ff53},
+{'l', 0xc18ada2e, 0x00000000},
+{'4', 0xff920000, 0x0000008a},
+{'6', 0x006e0000, 0x017f0000},
+{'l', 0xc18ada2e, 0x00000000},
+{'l', 0x00000000, 0xc15cd634},
+{'l', 0x418ada2e, 0x00000000},
+{'l', 0x00000000, 0x415cd634},
+{'@', 0x000000f8, 0x0000447a},/*        ø        x-advance: 68.476562 */
+{'M', 0x407e0277, 0xc2028f1e},
+{'q', 0x00000000, 0xc1655dec},
+{0, 0x40ffe7bc, 0xc1bba9f0},
+{'q', 0x40ffe7bc, 0xc112e898},
+{0, 0x41b13cf2, 0xc112e898},
+{'8', 0x032d0017, 0x0a2b0316},
+{'4', 0xffbd0021, 0x0000004c},
+{'l', 0xc0c33f08, 0x4147fc34},
+{'q', 0x40b414d8, 0x408c4628},
+{0, 0x410a60dc, 0x4135fa20},
+{'9', 0x00370018, 0x007b0018},
+{'l', 0x00000000, 0x3f9f3ae0},
+{'q', 0x00000000, 0x41674332},
+{0, 0xc100e680, 0x41bc9c93},
+{'q', 0xc0ffe7c0, 0x41110352},
+{0, 0xc1b13cf2, 0x41110352},
+{'8', 0xfdd500ea, 0xf7d9fdec},
+{'4', 0x0045ffdf, 0x0000ffb4},
+{'l', 0x40c33f0a, 0xc147fc35},
+{'q', 0xc0bf747e, 0xc0869652},
+{0, 0xc111f5f5, 0xc13414da},
+{'9', 0xffc8ffe8, 0xff81ffe8},
+{'6', 0xfff70000, 0x00090089},
+{'8', 0x36031d00, 0x280c1804},
+{'4', 0x00000002, 0xff05007b},
+{'8', 0xfbeefdf7, 0xfeecfef7},
+{'8', 0x2bb200cb, 0x6ee82be8},
+{'6', 0x00090000, 0xfff700cf},
+{'8', 0xd0fde700, 0xdaf6eafd},
+{'4', 0x0000fffe, 0x00f6ff88},
+{'8', 0x040f0307, 0x00120009},
+{'q', 0x40d633c0, 0x00000000},
+{0, 0x411c62f4, 0xc0aa9a7e},
+{'q', 0x4048eee0, 0xc0aa9a7c},
+{0, 0x4048eee0, 0xc160a0be},
+{'l', 0x00000000, 0xbf9f3ae0},
+{'@', 0x000000f9, 0x0000447a},/*        ù        x-advance: 68.476562 */
+{'M', 0x4237296b, 0xc113db3a},
+{'8', 0x3ec428e9, 0x15ad15dc},
+{'q', 0xc12212c4, 0x00000000},
+{0, 0xc17e0277, 0xc0ce9ea9},
+{'9', 0xffccffd3, 0xff5fffd3},
+{'4', 0xfecb0000, 0x00000089},
+{'l', 0x00000000, 0x421b33a8},
+{'8', 0x50123700, 0x18371812},
+{'8', 0xf6380021, 0xe126f617},
+{'l', 0x00000000, 0xc23a7aa5},
+{'l', 0x418a60de, 0x00000000},
+{'4', 0x02000000, 0x0000ff8a},
+{'6', 0xffb7fff4, 0xfe0affe9},
+{'l', 0xc160a0c0, 0x00000000},
+{'l', 0xc1806d30, 0xc1766d60},
+{'l', 0x3df2a280, 0xbeb5fa00},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x413ab750, 0x417c1d30},
+{'@', 0x000000fa, 0x0000447a},/*        ú        x-advance: 68.476562 */
+{'M', 0x4237296b, 0xc113db3a},
+{'8', 0x3ec428e9, 0x15ad15dc},
+{'q', 0xc12212c4, 0x00000000},
+{0, 0xc17e0277, 0xc0ce9ea9},
+{'9', 0xffccffd3, 0xff5fffd3},
+{'4', 0xfecb0000, 0x00000089},
+{'l', 0x00000000, 0x421b33a8},
+{'8', 0x50123700, 0x18371812},
+{'8', 0xf6380021, 0xe126f617},
+{'l', 0x00000000, 0xc23a7aa5},
+{'l', 0x418a60de, 0x00000000},
+{'4', 0x02000000, 0x0000ff8a},
+{'6', 0xffb7fff4, 0xfd8cffbb},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a200, 0x3eb5fa00},
+{'l', 0xc1834518, 0x41766d60},
+{'l', 0xc15cd634, 0x00000000},
+{'l', 0x413c9c94, 0xc17c1d30},
+{'@', 0x000000fb, 0x0000447a},/*        û        x-advance: 68.476562 */
+{'M', 0x4237296b, 0xc113db3a},
+{'8', 0x3ec428e9, 0x15ad15dc},
+{'q', 0xc12212c4, 0x00000000},
+{0, 0xc17e0277, 0xc0ce9ea9},
+{'9', 0xffccffd3, 0xff5fffd3},
+{'4', 0xfecb0000, 0x00000089},
+{'l', 0x00000000, 0x421b33a8},
+{'8', 0x50123700, 0x18371812},
+{'8', 0xf6380021, 0xe126f617},
+{'l', 0x00000000, 0xc23a7aa5},
+{'l', 0x418a60de, 0x00000000},
+{'4', 0x02000000, 0x0000ff8a},
+{'6', 0xffb7fff4, 0xfdef0052},
+{'0', 0x00930a00, 0x3fbfc1be},
+{'l', 0xc1572663, 0x00000000},
+{'l', 0x00000000, 0xbfc52440},
+{'l', 0x4185a3b0, 0xc16378a8},
+{'l', 0x41202d7c, 0x00000000},
+{'l', 0x41880246, 0x41665090},
+{'@', 0x000000fc, 0x0000447a},/*        ü        x-advance: 68.476562 */
+{'M', 0x4237296b, 0xc113db3a},
+{'8', 0x3ec428e9, 0x15ad15dc},
+{'q', 0xc12212c4, 0x00000000},
+{0, 0xc17e0277, 0xc0ce9ea9},
+{'9', 0xffccffd3, 0xff5fffd3},
+{'4', 0xfecb0000, 0x00000089},
+{'l', 0x00000000, 0x421b33a8},
+{'8', 0x50123700, 0x18371812},
+{'8', 0xf6380021, 0xe126f617},
+{'l', 0x00000000, 0xc23a7aa5},
+{'l', 0x418a60de, 0x00000000},
+{'4', 0x02000000, 0x0000ff8a},
+{'6', 0xffb7fff4, 0xfdf60058},
+{'l', 0xc17c1d30, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d31, 0x00000000},
+{'l', 0x00000000, 0xc14159c8},
+{'l', 0x417c1d31, 0x00000000},
+{'l', 0x00000000, 0x414159c8},
+{'@', 0x000000fd, 0x00003df6},/*        ý        x-advance: 61.960938 */
+{'M', 0x41ede5a7, 0xc1d72663},
+{'l', 0x3f35fa20, 0x406378a8},
+{'l', 0x3eb5fa00, 0x00000000},
+{'4', 0xfeba0062, 0x00000094},
+{'l', 0xc1d00a9e, 0x429361e8},
+{'q', 0xc02e6500, 0x40dbe398},
+{0, 0xc0ecf304, 0x4139c4ae},
+{'q', 0xc095c07c, 0x4095c080},
+{0, 0xc160a0be, 0x4095c080},
+{'8', 0xfee000ef, 0xf8dcfef2},
+{'l', 0x4000e682, 0xc149e17b},
+{'8', 0x010d0006, 0x000c0007},
+{'8', 0xf0340022, 0xd61cef12},
+{'l', 0x4000e680, 0xc09f3adc},
+{'4', 0xfe00ff4b, 0x00000094},
+{'6', 0x01290056, 0xfe190022},
+{'l', 0x41926f46, 0x00000000},
+{'l', 0x3df2a400, 0x3eb5fa00},
+{'l', 0xc183451a, 0x41766d60},
+{'l', 0xc15cd632, 0x00000000},
+{'l', 0x413c9c92, 0xc17c1d30},
+{'[', 0x006600fd, 0x000000e3},/*kerning*/
+{'[', 0x03c000fd, 0x000000b5},/*kerning*/
+{'@', 0x000000fe, 0x000044d5},/*        þ        x-advance: 68.832031 */
+{'M', 0x428215cd, 0xc1f22984},
+{'q', 0x00000000, 0x416378a8},
+{0, 0xc0d26938, 0x41b6ecc3},
+{'q', 0xc0d26938, 0x410a60de},
+{0, 0xc192e898, 0x410a60de},
+{'8', 0xf2b900d8, 0xd4cbf1e1},
+{'l', 0x00000000, 0x41f5f40e},
+{'l', 0xc189e78c, 0x36000000},
+{'l', 0xb5000000, 0xc1c5244d},
+{'l', 0xbd72a300, 0x00000000},
+{'4', 0xfd1d0000, 0x0000008a},
+{'l', 0x00000000, 0x420c097a},
+{'8', 0xd235e216, 0xf047f01e},
+{'q', 0x413e81d8, 0x00000000},
+{0, 0x4193db3a, 0x4114cddc},
+{'9', 0x004a0034, 0x00c30034},
+{'6', 0x00090000, 0xfff7ff76},
+{'q', 0x00000000, 0xc1110352},
+{0, 0xc04159c0, 0xc16b0dbe},
+{'8', 0xd3b7d3e8, 0x0ccb00e1},
+{'9', 0x000cffeb, 0x0024ffde},
+{'l', 0x00000000, 0x41e0a0bf},
+{'8', 0x2122150c, 0x0b360b16},
+{'8', 0xd9490032, 0x9617d917},
+{'l', 0x00000000, 0xbf9f3ad0},
+{'@', 0x000000ff, 0x00003df6},/*        ÿ        x-advance: 61.960938 */
+{'M', 0x41ede5a7, 0xc1d72663},
+{'l', 0x3f35fa20, 0x406378a8},
+{'l', 0x3eb5fa00, 0x00000000},
+{'4', 0xfeba0062, 0x00000094},
+{'l', 0xc1d00a9e, 0x429361e8},
+{'q', 0xc02e6500, 0x40dbe398},
+{0, 0xc0ecf304, 0x4139c4ae},
+{'q', 0xc095c07c, 0x4095c080},
+{0, 0xc160a0be, 0x4095c080},
+{'8', 0xfee000ef, 0xf8dcfef2},
+{'l', 0x4000e682, 0xc149e17b},
+{'8', 0x010d0006, 0x000c0007},
+{'8', 0xf0340022, 0xd61cef12},
+{'l', 0x4000e680, 0xc09f3adc},
+{'4', 0xfe00ff4b, 0x00000094},
+{'6', 0x01290056, 0xfe8300c0},
+{'l', 0xc17c1d30, 0x00000000},
+{'4', 0xffa00000, 0x0000007e},
+{'6', 0x00600000, 0x0000ff14},
+{'l', 0xc17c1d32, 0x00000000},
+{'l', 0x00000000, 0xc14159c8},
+{'l', 0x417c1d32, 0x00000000},
+{'l', 0x00000000, 0x414159c8},
+{'[', 0x006600ff, 0x000000e3},/*kerning*/
+{'[', 0x03c000ff, 0x000000b5},/*kerning*/
+{'@', 0x00000141, 0x00003d9b},/*        Ł        x-advance: 61.605469 */
+{'M', 0x41c2c5b6, 0xc250fd40},
+{'l', 0x416de5a8, 0xc0887b98},
+{'l', 0x00000000, 0x4138d208},
+{'l', 0xc16de5a8, 0x40887b98},
+{'l', 0x00000000, 0x41db6a3f},
+{'l', 0x42198b0b, 0x00000000},
+{'l', 0x00000000, 0x41544e7a},
+{'l', 0xc25ebb7a, 0x00000000},
+{'l', 0x35800000, 0xc20ee163},
+{'l', 0xc0cad41e, 0x3feb0dc0},
+{'l', 0x00000000, 0xc138d208},
+{'l', 0x40cad41e, 0xbfeb0dc0},
+{'l', 0x00000000, 0xc21be9a1},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x42080246},
+{'@', 0x000003c0, 0x00004eb9},/*        π        x-advance: 78.722656 */
+{'M', 0x4290e4fd, 0xc24dac07},
+{'4', 0x0000ffa5, 0x01030000},
+{'8', 0x2a0a1e00, 0x0b200b0a},
+{'8', 0xff15000d, 0xf918ff08},
+{'l', 0x3fe37880, 0x41470992},
+{'8', 0x0dd609ea, 0x03d303ed},
+{'q', 0xc114cddc, 0x00000000},
+{0, 0xc1646b4c, 0xc0a12022},
+{'9', 0xffd8ffd9, 0xff85ffd9},
+{'l', 0x00000000, 0xc200a9d9},
+{'l', 0xc14dac08, 0x00000000},
+{'l', 0x00000000, 0x424dac07},
+{'l', 0xc189e78c, 0x00000000},
+{'l', 0xb5800000, 0xc24dac07},
+{'l', 0xc11010ae, 0x00000000},
+{'l', 0x00000000, 0xc14ad41c},
+{'l', 0x4287a749, 0x00000000},
+{'l', 0x00000000, 0x414ad41c},
+{'@', 0x0000201c, 0x00002bf4},/*        “        x-advance: 43.953125 */
+{'M', 0x403d8f36, 0xc28effb7},
+{'l', 0x41198b0a, 0xc1a74944},
+{'l', 0x410788f6, 0x00000000},
+{'l', 0xc06378a8, 0x41a6cff0},
+{'4', 0x005b0000, 0x0000ff8c},
+{'6', 0xffa60000, 0x0000009b},
+{'l', 0x41198b0a, 0xc1a74944},
+{'l', 0x410788f4, 0x00000000},
+{'l', 0xc06378a0, 0x41a6cff0},
+{'l', 0x00000000, 0x4136ecc4},
+{'l', 0xc16835d6, 0x00000000},
+{'l', 0x00000000, 0xc135fa1c},
+{'[', 0x0077201c, 0x000000b5},/*kerning*/
+{'@', 0x0000201d, 0x00002c6d},/*        ”        x-advance: 44.425781 */
+{'M', 0x41ac0672, 0xc2a1d61c},
+{'l', 0xc1198b0b, 0x41a5dd52},
+{'l', 0xc1087b98, 0x00000000},
+{'l', 0x406378aa, 0xc1a563fe},
+{'4', 0xffa40000, 0x00000074},
+{'6', 0x005b0000, 0x0000009f},
+{'l', 0xc1198b0c, 0x41a5dd52},
+{'l', 0xc1087b98, 0x00000000},
+{'l', 0x406378a8, 0xc1a563fe},
+{'l', 0x00000000, 0xc138d208},
+{'l', 0x4169287a, 0x00000000},
+{'l', 0x00000000, 0x4137df60},
+{'[', 0x0077201d, 0x000000b5},/*kerning*/
+{'@', 0x00002022, 0x00002ba8},/*        •        x-advance: 43.656250 */
+{'M', 0x40ffe7bd, 0xc23efb2b},
+{'8', 0xb31ed100, 0xe251e21e},
+{'8', 0x1e520034, 0x4d1e1d1e},
+{'l', 0x00000000, 0x40aa9a80},
+{'8', 0x4de22f00, 0x1daf1de2},
+{'8', 0xe3ae00cd, 0xb3e2e3e2},
+{'l', 0x00000000, 0xc0aa9a80},
+{'@', 0x00002026, 0x000059fb},/*        …        x-advance: 89.980469 */
+{'M', 0x41ce9ea9, 0x00000000},
+{'l', 0xc18a60dd, 0x00000000},
+{'4', 0xff870000, 0x0000008a},
+{'6', 0x00790000, 0x000000d1},
+{'l', 0xc18a60dc, 0x00000000},
+{'4', 0xff870000, 0x0000008a},
+{'6', 0x00790000, 0x000000c7},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc172a2d5},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x4172a2d5},
+{'@', 0x000020ac, 0x0000421b},/*        €        x-advance: 66.105469 */
+{'M', 0x425e057f, 0xc1d79fb4},
+{'4', 0x0000ff36, 0x00030000},
+{'8', 0x511f2e00, 0x22592220},
+{'8', 0xfd35001b, 0xf432fc1a},
+{'l', 0x3f9f3ae0, 0x41572663},
+{'8', 0x0ac907e5, 0x03c603e4},
+{'q', 0xc16835d6, 0x00000000},
+{0, 0xc1bba9f1, 0xc101d924},
+{'9', 0xffbfffb9, 0xff64ffb9},
+{'0', 0x00bbfd00, 0x0045a200},
+{'0', 0x00bbca00, 0x0045a200},
+{'l', 0x00000000, 0xbf452480},
+{'q', 0x00000000, 0xc140671c},
+{0, 0x410e2b69, 0xc1a4eaae},
+{'q', 0x410f1e0a, 0xc1096e38},
+{0, 0x41bb30a0, 0xc1096e38},
+{'8', 0x0337001c, 0x0a3b031b},
+{'l', 0xbf9f3ae0, 0x41590ba8},
+{'8', 0xf5ccf9e7, 0xfccbfce6},
+{'8', 0x26a800c9, 0x57e125e1},
+{'l', 0x00000000, 0x3f6378c0},
+{'l', 0x41cad41d, 0x00000000},
+{'l', 0x00000000, 0x413d8f34},
+{'l', 0xc1cad41d, 0x00000000},
+{'l', 0x00000000, 0x40dbe390},
+{'l', 0x41cad41d, 0x00000000},
+{'l', 0x00000000, 0x413d8f38},
+{'@', 0x00002122, 0x00004ca7},/*        â„¢        x-advance: 76.652344 */
+{'M', 0x426b8710, 0xc28dd06c},
+{'l', 0xbeb5fa00, 0xbd72a000},
+{'l', 0xc0c70998, 0x41861d00},
+{'l', 0xc08a60e0, 0x00000000},
+{'l', 0xc0d083e8, 0xc18d38c4},
+{'l', 0xbeb5fa80, 0x3d72a000},
+{'l', 0x00000000, 0x418cbf74},
+{'l', 0xc0f48818, 0x00000000},
+{'l', 0x00000000, 0xc2003086},
+{'l', 0x4116b324, 0x00000000},
+{'l', 0x40e19360, 0x41ab8d20},
+{'l', 0x3eb5fa00, 0x00000000},
+{'l', 0x40e378a8, 0xc1ab8d20},
+{'l', 0x4111f5f8, 0x00000000},
+{'4', 0x01000000, 0x0000ffc3},
+{'6', 0xff7b0000, 0xffb8ff14},
+{'l', 0xc0f2a2d8, 0x00000000},
+{'l', 0x00000000, 0x41cdac06},
+{'l', 0xc1087b97, 0x00000000},
+{'l', 0x00000000, 0xc1cdac06},
+{'l', 0xc0eed84a, 0x00000000},
+{'l', 0x00000000, 0xc0c70990},
+{'l', 0x41bc9c94, 0x00000000},
+{'l', 0x00000000, 0x40c70990},
+{'@', 0x00002212, 0x0000435a},/*        −        x-advance: 67.351562 */
+{'M', 0x426835d6, 0xc20e6812},
+{'l', 0xc2459d9f, 0x00000000},
+{'l', 0x35800000, 0xc1581904},
+{'l', 0x42459d9f, 0x00000000},
+{'l', 0x00000000, 0x41581904},
+{'@', 0x00002248, 0x000045f5},/*        ≈        x-advance: 69.957031 */
+{'M', 0x40d26935, 0xc24fcdf5},
+{'8', 0xce33e016, 0xee3cee1d},
+{'8', 0x07360021, 0x1b3f0716},
+{'8', 0x19381223, 0x07350715},
+{'8', 0xee3b001e, 0xcd34ee1d},
+{'l', 0x3f17a5c0, 0x4149e17c},
+{'8', 0x33cc20ea, 0x12c512e3},
+{'8', 0xf9cb00e1, 0xe7c8f9eb},
+{'8', 0xe5c1edd8, 0xf9caf9eb},
+{'8', 0x12c400e2, 0x32cd12e3},
+{'6', 0xff9cfffc, 0x00cbfffc},
+{'8', 0xce33e016, 0xee3cee1d},
+{'8', 0x07360021, 0x1b3f0716},
+{'8', 0x19381223, 0x07350715},
+{'8', 0xee3b001e, 0xcd34ee1d},
+{'l', 0x3f17a5c0, 0x4149e17c},
+{'8', 0x33cc20ea, 0x12c512e3},
+{'8', 0xf9cb00e1, 0xe7c8f9eb},
+{'8', 0xe5c1edd8, 0xf9caf9eb},
+{'8', 0x12c400e2, 0x32cd12e3},
+{'l', 0xbf17a5c8, 0xc149e17b},
+{'@', 0x0000fb01, 0x000049fc},/*        fi        x-advance: 73.984375 */
+{'M', 0x412b8d21, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xdd00004c},
+{'q', 0x00000000, 0xc14159c0},
+{0, 0x40eb0dbe, 0xc194cddc},
+{'q', 0x40ecf304, 0xc0d26940},
+{0, 0x41a656a0, 0xc0d26940},
+{'8', 0x07480024, 0x14530724},
+{'l', 0xc01f3ae0, 0x4159fe48},
+{'8', 0xf0c1f6de, 0xfbc0fbe5},
+{'8', 0x15b800d1, 0x3fe915e9},
+{'0', 0x00642300, 0x009c6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x425ebb7a, 0x00000000},
+{'l', 0xc18a60de, 0x00000000},
+{'l', 0x00000000, 0xc2803087},
+{'l', 0x418a60de, 0x00000000},
+{'l', 0x00000000, 0x42803087},
+{'@', 0x0000fb02, 0x00004bc3},/*        fl        x-advance: 75.761719 */
+{'M', 0x41322f94, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xc800004c},
+{'q', 0x00000000, 0xc12c7fc0},
+{0, 0x40c70994, 0xc184b10c},
+{'q', 0x40c70994, 0xc0bba9f0},
+{0, 0x418bccd1, 0xc0bba9f0},
+{'8', 0x02230011, 0x07280212},
+{'l', 0xbfbd8f40, 0x414dac08},
+{'8', 0xfdeafff5, 0xffe8fff6},
+{'8', 0x12cd00df, 0x35ef12ef},
+{'0', 0x00653800, 0x009b6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x42642ea1, 0x00000000},
+{'l', 0xc18a60dc, 0x00000000},
+{'l', 0x00000000, 0xc2b8d208},
+{'l', 0x418a60dc, 0x00000000},
+{'l', 0x00000000, 0x42b8d208},
+{'@', 0x0000fb03, 0x00007559},/*        ffi        x-advance: 117.347656 */
+{'M', 0x41322f94, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xc800004c},
+{'q', 0x00000000, 0xc12c7fc0},
+{0, 0x40c70994, 0xc184b10c},
+{'q', 0x40c70994, 0xc0bba9f0},
+{0, 0x418bccd1, 0xc0bba9f0},
+{'8', 0x02230011, 0x07280212},
+{'l', 0xbfbd8f40, 0x414dac08},
+{'8', 0xfdeafff5, 0xffe8fff6},
+{'8', 0x12cd00df, 0x35ef12ef},
+{'0', 0x00653800, 0x009b6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x422bc9c9, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xdd00004c},
+{'q', 0x00000000, 0xc14159c0},
+{0, 0x40eb0dc0, 0xc194cddc},
+{'q', 0x40ecf300, 0xc0d26940},
+{0, 0x41a656a0, 0xc0d26940},
+{'8', 0x07480024, 0x14530724},
+{'l', 0xc01f3ae0, 0x4159fe48},
+{'8', 0xf0c1f6de, 0xfbc0fbe5},
+{'8', 0x15b800d1, 0x3fe915e9},
+{'0', 0x00642300, 0x009c6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x425ebb7a, 0x00000000},
+{'l', 0xc18a60dc, 0x00000000},
+{'l', 0x00000000, 0xc2803087},
+{'l', 0x418a60dc, 0x00000000},
+{'l', 0x00000000, 0x42803087},
+{'@', 0x0000fb04, 0x00007720},/*        ffl        x-advance: 119.125000 */
+{'M', 0x41322f94, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xc800004c},
+{'q', 0x00000000, 0xc12c7fc0},
+{0, 0x40c70994, 0xc184b10c},
+{'q', 0x40c70994, 0xc0bba9f0},
+{0, 0x418bccd1, 0xc0bba9f0},
+{'8', 0x02230011, 0x07280212},
+{'l', 0xbfbd8f40, 0x414dac08},
+{'8', 0xfdeafff5, 0xffe8fff6},
+{'8', 0x12cd00df, 0x35ef12ef},
+{'0', 0x00653800, 0x009b6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x422d7266, 0x00000000},
+{'l', 0x00000000, 0xc24fcdf5},
+{'0', 0x9f0000b4, 0xc800004c},
+{'q', 0x00000000, 0xc12c7fc0},
+{0, 0x40c70998, 0xc184b10c},
+{'q', 0x40c70990, 0xc0bba9f0},
+{0, 0x418bccd0, 0xc0bba9f0},
+{'8', 0x02230011, 0x07280212},
+{'l', 0xbfbd8f40, 0x414dac08},
+{'8', 0xfdeafff5, 0xffe8fff6},
+{'8', 0x12cd00df, 0x35ef12ef},
+{'0', 0x00653800, 0x009b6100},
+{'4', 0x019f0000, 0x0000ff76},
+{'m', 0x42642ea3, 0x00000000},
+{'l', 0xc18a60e0, 0x00000000},
+{'l', 0x00000000, 0xc2b8d208},
+{'l', 0x418a60e0, 0x00000000},
+{'l', 0x00000000, 0x42b8d208},
+};
+#define ctx_font_Roboto_Bold_name "Roboto Bold"
+#endif
diff --git a/usermodule/uctx/fonts/Roboto-BoldItalic.h b/usermodule/uctx/fonts/Roboto-BoldItalic.h
new file mode 100644
index 0000000000000000000000000000000000000000..c24f0d4594af2b26f35e07792446f5d9689d1ebf
--- /dev/null
+++ b/usermodule/uctx/fonts/Roboto-BoldItalic.h
@@ -0,0 +1,4762 @@
+#ifndef CTX_FONT_Roboto_BoldItalic
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™−≈␣fffiflffifflſt  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Roboto_BoldItalic[]={
+{15, 0x0000a008, 0x0000128f},/* length:4751 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x00000014, 0x00000003},/* Roboto Bold Italic*/
+{32, 0x6f626f52, 0x42206f74},
+{'o', 0x4920646c, 0x696c6174},
+{'c', 0x00000000, 0x00000000},
+{')', 0x00000014, 0x00000003},
+{'(', 0x0000004b, 0x00000009},/* Apache Licence, Version 2.0
+                                Copyright 2014 Christian Robertson - Apache 2*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x636e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x43203431},
+{'h', 0x74736972, 0x206e6169},
+{'R', 0x7265626f, 0x6e6f7374},
+{32, 0x7041202d, 0x65686361},
+{32, 0x00000032, 0x00000000},
+{')', 0x0000004b, 0x00000009},
+{'@', 0x00000020, 0x000021aa},/*                 x-advance: 33.664062 */
+{'@', 0x00000021, 0x00002400},/*        !        x-advance: 36.000000 */
+{'M', 0x4219999a, 0xc2c22223},
+{'l', 0xc15cccce, 0x42866667},
+{'4', 0x0000ff83, 0xfde7004c},
+{'6', 0x000000a0, 0x02c2fee3},
+{'8', 0xc416dcff, 0xe73be818},
+{'8', 0x153b0023, 0x39191618},
+{'8', 0x3cea2401, 0x19c518e8},
+{'8', 0xebc500de, 0xc7e7eae7},
+{'@', 0x00000022, 0x00002a77},/*        "        x-advance: 42.464844 */
+{'M', 0x4239dddf, 0xc2b86667},
+{'l', 0xc0d33338, 0x41d33334},
+{'l', 0xc12aaaac, 0x00000000},
+{'4', 0xfedb002d, 0x00000069},
+{'6', 0x0052fff4, 0x0000ff58},
+{'l', 0xc0d11114, 0x41d33334},
+{'l', 0xc12ccccc, 0x00000000},
+{'l', 0x40b9999a, 0xc212aaac},
+{'l', 0x41533333, 0x00000000},
+{'l', 0xbfd55550, 0x41244448},
+{'[', 0x00770022, 0x000000bb},/*kerning*/
+{'@', 0x00000023, 0x00004eee},/*        #        x-advance: 78.929688 */
+{'M', 0x41fa2223, 0x00000000},
+{'l', 0x41177776, 0xc1daaaab},
+{'l', 0xc13ffffe, 0x00000000},
+{'l', 0xc1166668, 0x41daaaab},
+{'l', 0xc1466666, 0x00000000},
+{'l', 0x41177778, 0xc1daaaab},
+{'l', 0xc168888a, 0x00000000},
+{'l', 0x40044445, 0xc138888a},
+{'l', 0x41833333, 0x00000000},
+{'l', 0x40d11114, 0xc1977778},
+{'l', 0xc16ddddf, 0x00000000},
+{'l', 0x40044444, 0xc1388888},
+{'l', 0x4185ddde, 0x00000000},
+{'l', 0x4119999a, 0xc1dddde0},
+{'l', 0x41444444, 0x00000000},
+{'l', 0xc1188888, 0x41dddde0},
+{'l', 0x413eeef0, 0x00000000},
+{'l', 0x4119999c, 0xc1dddde0},
+{'l', 0x41466668, 0x00000000},
+{'l', 0xc1188888, 0x41dddde0},
+{'l', 0x415eeee8, 0x00000000},
+{'l', 0xc0000000, 0x41388888},
+{'l', 0xc17eeeec, 0x00000000},
+{'l', 0xc0d11110, 0x41977778},
+{'l', 0x41655554, 0x00000000},
+{'l', 0xc0044440, 0x4138888a},
+{'4', 0x0000ff7f, 0x00daffb5},
+{'6', 0x0000ff9d, 0xfeca000b},
+{'l', 0x413eeef0, 0x00000000},
+{'l', 0x40d33338, 0xc1977778},
+{'l', 0xc1400004, 0x00000000},
+{'l', 0xc0d11110, 0x41977778},
+{'@', 0x00000024, 0x00004c00},/*        $        x-advance: 76.000000 */
+{'M', 0x42873334, 0xc1d1999a},
+{'q', 0xbf3bbc00, 0x41488889},
+{0, 0xc1133338, 0x419aaaab},
+{'9', 0x0035ffbd, 0x003fff5f},
+{'4', 0x006affec, 0x0000ffad},
+{'l', 0x40266668, 0xc1555556},
+{'q', 0xc148888a, 0xbff77778},
+{0, 0xc192aaac, 0xc12aaaab},
+{'9', 0xffbbffd3, 0xff5affd5},
+{'l', 0x41966667, 0x3d888900},
+{'8', 0x591031fe, 0x294b2812},
+{'8', 0xe74d002c, 0xba26e720},
+{'8', 0xb9eed206, 0xd5c0e7e7},
+{'q', 0xc1233332, 0xc0933338},
+{0, 0xc18d5555, 0xc1344444},
+{'q', 0xc0eeeef0, 0xc0d55558},
+{0, 0xc0d55556, 0xc1991112},
+{'q', 0x3f3bbbc0, 0xc1466668},
+{0, 0x41122223, 0xc19a2224},
+{'9', 0xffc90043, 0xffbf00a1},
+{'4', 0xff8e0015, 0x00000053},
+{'l', 0xc02eeef0, 0x416aaab0},
+{'q', 0x41366664, 0x40199980},
+{0, 0x41800002, 0x41344440},
+{'9', 0x00460025, 0x009c0023},
+{'l', 0xc196eeee, 0xbd888c00},
+{'8', 0xadf6d702, 0xd5c0d6f4},
+{'8', 0x1ab8ffd4, 0x45df1be5},
+{'8', 0x43102bfb, 0x2b401816},
+{'q', 0x41311114, 0x40a88888},
+{0, 0x4190888a, 0x41400000},
+{'q', 0x40e22220, 0x40d77778},
+{0, 0x40caaab0, 0x41966668},
+{'@', 0x00000025, 0x000061cc},/*        %        x-advance: 97.796875 */
+{'M', 0x41411112, 0xc2928889},
+{'l', 0x3eccccc0, 0xc0a44440},
+{'q', 0x3f5ddde0, 0xc1111118},
+{0, 0x40e22224, 0xc16aaab0},
+{'q', 0x40c66668, 0xc0b55550},
+{0, 0x41766666, 0xc0aeeef0},
+{'q', 0x410cccd0, 0x3e4cce00},
+{0, 0x415eeef0, 0x40b999a0},
+{'9', 0x002c0029, 0x00720025},
+{'l', 0xbeeeef00, 0x40a44440},
+{'q', 0xbf4cccc0, 0x41111110},
+{0, 0xc0dddde0, 0x4169999c},
+{'q', 0xc0c44440, 0x40b11110},
+{0, 0xc1744444, 0x40aaaaa8},
+{'q', 0xc10aaaac, 0xbe088900},
+{0, 0xc1600002, 0xc0b55558},
+{'9', 0xffd4ffd6, 0xff8effda},
+{'m', 0x428fdddf, 0xc1133330},
+{'l', 0xc269999b, 0x42962222},
+{'4', 0xffd3ffb6, 0xfda901d4},
+{'6', 0x002c0049, 0x0020fe2b},
+{'l', 0xbf3bbbe0, 0x40a88880},
+{'8', 0x30081afe, 0x1529140b},
+{'8', 0xec33001f, 0xce18eb13},
+{'l', 0x3f3bbbc0, 0xc0a88890},
+{'8', 0xd0f8e602, 0xead7ebf6},
+{'8', 0x14ccffe0, 0x33e815ed},
+{'m', 0x41b22223, 0x426eeeef},
+{'l', 0x3ecccd00, 0xc0a22224},
+{'q', 0x3f4cccc0, 0xc1111112},
+{0, 0x40e22220, 0xc16aaaaa},
+{'q', 0x40c88888, 0xc0b33338},
+{0, 0x41766664, 0xc0acccd0},
+{'q', 0x410bbbc0, 0x3e4ccd00},
+{0, 0x415eeef0, 0x40b77778},
+{'9', 0x002c0029, 0x00720025},
+{'l', 0xbecccd00, 0x40a44444},
+{'q', 0xbf5dde00, 0x41111112},
+{0, 0xc0e00000, 0x416aaaac},
+{'q', 0xc0c22220, 0x40b33334},
+{0, 0xc1744448, 0x40accccd},
+{'q', 0xc10bbbb8, 0xbe4cccd0},
+{0, 0xc15ffffc, 0xc0b77778},
+{'9', 0xffd4ffd6, 0xff8effda},
+{'m', 0x41555558, 0xc0a44444},
+{'l', 0xbf2aaac0, 0x40aaaaac},
+{'8', 0x2f0919fe, 0x1629150b},
+{'8', 0xed330121, 0xcd18eb13},
+{'l', 0x3f2aaa80, 0xc0a88888},
+{'8', 0xd0f8e602, 0xead8ebf6},
+{'8', 0x14ccffe0, 0x32e815ed},
+{'@', 0x00000026, 0x000056ee},/*        &        x-advance: 86.929688 */
+{'M', 0x426aaaab, 0x00000000},
+{'l', 0xc06aaaa0, 0xc0b55556},
+{'q', 0xc13eeef0, 0x40e66667},
+{0, 0xc1c6eef0, 0x40e00001},
+{'q', 0xc13dddde, 0xbe4cccd0},
+{0, 0xc1a1999a, 0xc0e8888a},
+{'q', 0xc1044445, 0xc0e44445},
+{0, 0xc0eeeef1, 0xc19dddde},
+{'q', 0x3f19999c, 0xc1177778},
+{0, 0x40e22223, 0xc1766668},
+{'8', 0xac6fd033, 0xb0ded8ee},
+{'q', 0xbfeeeef0, 0xc0a22220},
+{0, 0xbfbbbbc0, 0xc12bbbb8},
+{'q', 0x3f3bbbc0, 0xc13999a0},
+{0, 0x410aaaac, 0xc1977778},
+{'q', 0x41000000, 0xc0ecccd0},
+{0, 0x419d5556, 0xc0e44450},
+{'q', 0x41155554, 0x3e4cce00},
+{0, 0x417ccccc, 0x40ccccd0},
+{'q', 0x40d11110, 0x40c44450},
+{0, 0x40c22220, 0x417bbbc0},
+{'8', 0x64db3afe, 0x4ab02ade},
+{'4', 0x0029ffc0, 0x00960064},
+{'9', 0xffc0002c, 0xff760035},
+{'l', 0x417dddd8, 0x00000000},
+{'9', 0x0096fff6, 0x00f9ff9b},
+{'4', 0x00840059, 0x0000ff5f},
+{'m', 0xc1c3bbbc, 0xc2917778},
+{'8', 0x32051afc, 0x2d151809},
+{'l', 0x40b11110, 0xc0555550},
+{'8', 0xdb2df019, 0xcc19eb14},
+{'8', 0xd5f4e603, 0xeed7eff2},
+{'8', 0x18c500dd, 0x39e418e9},
+{'m', 0xc1477778, 0x42384445},
+{'8', 0x460f29fb, 0x1d401c15},
+{'9', 0x0001002e, 0xffe00070},
+{'4', 0xff52ff8d, 0x0008fff4},
+{'q', 0xc0e00004, 0x40a44448},
+{0, 0xc1000002, 0x41477778},
+{'@', 0x00000027, 0x00001577},/*        '        x-advance: 21.464844 */
+{'M', 0x41cf7778, 0xc2b71112},
+{'l', 0xc0bbbbbc, 0x41ce6668},
+{'l', 0xc1400000, 0x00000000},
+{'l', 0x40b9999a, 0xc212aaac},
+{'l', 0x415bbbbd, 0x00000000},
+{'l', 0xbfd55560, 0x412ddde0},
+{'[', 0x00770027, 0x000000bb},/*kerning*/
+{'@', 0x00000028, 0x00002e77},/*        (        x-advance: 46.464844 */
+{'M', 0x40f77778, 0xc2166667},
+{'l', 0x3e888880, 0xbfccccc0},
+{'q', 0x3fdddde0, 0xc14eeef0},
+{0, 0x40d55556, 0xc1d55556},
+{'q', 0x40a00002, 0xc15cccd0},
+{0, 0x415aaaab, 0xc1c91114},
+{'9', 0xffa60045, 0xff7800ac},
+{'l', 0x404cccd0, 0x412bbbc0},
+{'q', 0xc1188888, 0x40eaaab0},
+{0, 0xc17aaaac, 0x41899998},
+{'q', 0xc0c22220, 0x411cccd0},
+{0, 0xc1255556, 0x41cc4446},
+{'q', 0xc0888888, 0x417aaaac},
+{0, 0xc0a00000, 0x42126667},
+{'q', 0xbeccccc0, 0x41322223},
+{0, 0x40088888, 0x41ac4445},
+{'9', 0x00520014, 0x00850052},
+{'l', 0xc086666c, 0x41211110},
+{'q', 0xc1355554, 0xc0c88888},
+{0, 0xc1855556, 0xc1900000},
+{'q', 0xc0a88886, 0xc13ccccd},
+{0, 0xc0c88886, 0xc1ca2223},
+{'q', 0xbf88888c, 0xc1566666},
+{0, 0x3eaaaaa0, 0xc1c55556},
+{'[', 0x00560028, 0x00000155},/*kerning*/
+{'[', 0x00570028, 0x00000288},/*kerning*/
+{'[', 0x00590028, 0x00000177},/*kerning*/
+{'[', 0x00dd0028, 0x00000177},/*kerning*/
+{'@', 0x00000029, 0x00002eaa},/*        )        x-advance: 46.664062 */
+{'M', 0xc06eeef0, 0x41f44445},
+{'l', 0xc04cccce, 0xc1288888},
+{'q', 0x41188889, 0xc0eaaaae},
+{0, 0x4179999a, 0xc18a2223},
+{'q', 0x40c44448, 0xc11eeef0},
+{0, 0x41255558, 0xc1caaaab},
+{'q', 0x40888888, 0xc177777a},
+{0, 0x40a00000, 0xc212eef0},
+{'q', 0x3eccccc0, 0xc1333338},
+{0, 0xc0088888, 0xc1accccc},
+{'9', 0xffadffec, 0xff7cffaf},
+{'l', 0x40844446, 0xc1244440},
+{'q', 0x41355556, 0x40c66660},
+{0, 0x4186eeef, 0x418f7778},
+{'q', 0x40b33338, 0x413bbbb8},
+{0, 0x40dddde0, 0x41c99998},
+{'q', 0x3fbbbbc0, 0x4178888c},
+{0, 0xbf5dde00, 0x41eaaaac},
+{'q', 0xc0111110, 0x415bbbbe},
+{0, 0xc0f99998, 0x41d8888a},
+{'q', 0xc0b11110, 0x41555556},
+{0, 0xc1622222, 0x41bc4444},
+{'q', 0xc1088889, 0x41233334},
+{0, 0xc1a44445, 0x41744446},
+{'@', 0x0000002a, 0x00003c11},/*        *        x-advance: 60.066406 */
+{'M', 0x41100000, 0xc23bbbbc},
+{'l', 0x4189999a, 0xc18c4444},
+{'l', 0xc19c4444, 0xc0c44450},
+{'l', 0x40b77776, 0xc1355550},
+{'l', 0x4198888a, 0x41088888},
+{'l', 0x403bbbb0, 0xc1bd5558},
+{'l', 0x414bbbbc, 0x00000000},
+{'l', 0xc0aaaaa8, 0x41b91114},
+{'l', 0x41a44444, 0xc0fbbbc0},
+{'l', 0x3fddde00, 0x414ddde0},
+{'l', 0xc1aeeef2, 0x40bdddd8},
+{'l', 0x412aaaac, 0x4190888a},
+{'l', 0xc12aaaac, 0x40ddddd8},
+{'l', 0xc1066664, 0xc19bbbbc},
+{'l', 0xc16ddde0, 0x41944446},
+{'l', 0xc11eeef0, 0xc1000000},
+{'@', 0x0000002b, 0x00004844},/*        +        x-advance: 72.265625 */
+{'M', 0x4287999a, 0xc2140001},
+{'l', 0xc1baaaac, 0x00000000},
+{'l', 0xc0977778, 0x41da2224},
+{'l', 0xc18eeeee, 0x00000000},
+{'l', 0x40977778, 0xc1da2224},
+{'l', 0xc1bc4445, 0x00000000},
+{'l', 0x40444442, 0xc18b3332},
+{'l', 0x41bbbbbd, 0x00000000},
+{'l', 0x40911110, 0xc1d00000},
+{'l', 0x418eeef0, 0x00000000},
+{'l', 0xc0911110, 0x41d00000},
+{'l', 0x41baaaaa, 0x00000000},
+{'l', 0xc0400000, 0x418b3332},
+{'@', 0x0000002c, 0x00002066},/*        ,        x-advance: 32.398438 */
+{'M', 0x41a66667, 0xc1833334},
+{'l', 0xc0044448, 0x41511112},
+{'q', 0xbfaaaaa0, 0x41033334},
+{0, 0xc0b99998, 0x41766668},
+{'9', 0x0039ffdd, 0x0062ffaa},
+{'4', 0xffd6ffb2, 0xffad0032},
+{'9', 0xffd80017, 0xffa90020},
+{'l', 0x401dddde, 0xc1611112},
+{'l', 0x417ddddf, 0x00000000},
+{'@', 0x0000002d, 0x00003366},/*        -        x-advance: 51.398438 */
+{'M', 0x42351112, 0xc245999a},
+{'l', 0xc02eeef0, 0x41799998},
+{'l', 0xc2122223, 0x00000000},
+{'l', 0x40333334, 0xc1799998},
+{'l', 0x4211dddf, 0x00000000},
+{'@', 0x0000002e, 0x00002688},/*        .        x-advance: 38.531250 */
+{'M', 0x403bbbbc, 0xc1133334},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'@', 0x0000002f, 0x00003188},/*        /        x-advance: 49.531250 */
+{'M', 0x42688889, 0xc2c22223},
+{'l', 0xc2540000, 0x42d2ccce},
+{'l', 0xc16ccccf, 0xb6000000},
+{'l', 0x4253bbbd, 0xc2d2ccce},
+{'l', 0x416ddddc, 0x00000000},
+{'@', 0x00000030, 0x00004c00},/*        0        x-advance: 76.000000 */
+{'M', 0x42913334, 0xc2644445},
+{'l', 0xc0266680, 0x41866666},
+{'q', 0xbfccccc0, 0x4129999c},
+{0, 0xc0b99990, 0x41a22223},
+{'q', 0xc0844448, 0x4119999b},
+{0, 0xc13ddde0, 0x417aaaac},
+{'q', 0xc0f55558, 0x40c00002},
+{0, 0xc19f7778, 0x40b55557},
+{'q', 0xc13aaaac, 0xbe88888c},
+{0, 0xc18dddde, 0xc0ceeef0},
+{'q', 0xc0c00002, 0xc0c88889},
+{0, 0xc0f77779, 0xc17aaaac},
+{'9', 0xffb5fff3, 0xff65fffc},
+{'l', 0x40222220, 0xc186eef0},
+{'q', 0x3fc44448, 0xc129999c},
+{0, 0x40b77778, 0xc1a11112},
+{'q', 0x4088888a, 0xc1199998},
+{0, 0x41400001, 0xc1788888},
+{'q', 0x40f99998, 0xc0c00000},
+{0, 0x419f7778, 0xc0b55550},
+{'q', 0x413aaaac, 0x3e888800},
+{0, 0x418d5556, 0x40ceeef0},
+{'q', 0x40c22220, 0x40c66660},
+{0, 0x40f999a0, 0x41799998},
+{'9', 0x004b000d, 0x009a0004},
+{'m', 0xc1933334, 0xc0333330},
+{'8', 0xb605e103, 0xb5f3d601},
+{'8', 0xddc4dff2, 0x1bb1fece},
+{'8', 0x4bd61de4, 0x59ed2cf3},
+{'4', 0x00bcffe5, 0x0039fffd},
+{'8', 0x4c0d2bff, 0x233c210e},
+{'8', 0xe54e0232, 0xb529e21c},
+{'q', 0x3fddddc0, 0xc0b33338},
+{0, 0x40199990, 0xc1277778},
+{'l', 0x40555560, 0xc1b3bbbc},
+{'@', 0x00000031, 0x00004c00},/*        1        x-advance: 76.000000 */
+{'M', 0x42751112, 0xc2c28889},
+{'l', 0xc182aaac, 0x42c28889},
+{'l', 0xc1966666, 0x00000000},
+{'l', 0x414ccccc, 0xc293ddde},
+{'l', 0xc1bc4444, 0x40e44440},
+{'l', 0x403bbbb8, 0xc1833334},
+{'l', 0x4221ddde, 0xc1600000},
+{'l', 0x401ddde0, 0xbd888800},
+{'@', 0x00000032, 0x00004c00},/*        2        x-advance: 76.000000 */
+{'M', 0x42866667, 0xc1788889},
+{'l', 0xc01ddde0, 0x41788889},
+{'4', 0x0000fdfc, 0xff900011},
+{'l', 0x420b7778, 0xc202eef0},
+{'8', 0xaf4ddf22, 0x9b33d12b},
+{'8', 0xb6f5d705, 0xdec0dfef},
+{'8', 0x28a7ffc6, 0x5cda28e1},
+{'l', 0xc1955556, 0x3d888c00},
+{'q', 0x3f4ccce0, 0xc1655558},
+{0, 0x41333334, 0xc1ba2224},
+{'q', 0x41277778, 0xc10eeef0},
+{0, 0x41c4ccce, 0xc10cccd0},
+{'q', 0x41466668, 0x3e4cce00},
+{0, 0x41a44446, 0x40e44450},
+{'q', 0x41033330, 0x40ddddd0},
+{0, 0x40e44440, 0x41a00000},
+{'q', 0xbf199980, 0x40fbbbb8},
+{0, 0xc09999a0, 0x41699998},
+{'8', 0x63b235df, 0x56a82dd3},
+{'l', 0xc19eeef0, 0x418eeef0},
+{'l', 0x42204445, 0x3e0888c0},
+{'@', 0x00000033, 0x00004c00},/*        3        x-advance: 76.000000 */
+{'M', 0x42133334, 0xc227bbbc},
+{'4', 0x0000ffa8, 0xff870013},
+{'l', 0x41100000, 0x3d888800},
+{'8', 0xe45a0034, 0xad2ce425},
+{'8', 0xbcefd604, 0xe5bfe6eb},
+{'8', 0x16b6ffd6, 0x41d918e1},
+{'l', 0xc1966667, 0x3e088800},
+{'q', 0x3eeeef00, 0xc10aaab0},
+{0, 0x40aaaaac, 0xc16aaab0},
+{'q', 0x409ddde0, 0xc0c00000},
+{0, 0x41455556, 0xc1100000},
+{'q', 0x40eeeef0, 0xc0444440},
+{0, 0x41788888, 0xc0400000},
+{'q', 0x41466668, 0x3e4cce00},
+{0, 0x41a91114, 0x40e22220},
+{'q', 0x410cccc8, 0x40dbbbc0},
+{0, 0x40fdddd0, 0x41a1999c},
+{'8', 0x6ad340fd, 0x43a12ad7},
+{'8', 0x474b1933, 0x65152d18},
+{'q', 0xbf088880, 0x411aaaaa},
+{0, 0xc0bbbbb8, 0x4181999a},
+{'q', 0xc0aaaaa8, 0x40d11111},
+{0, 0xc1577778, 0x411ccccd},
+{'q', 0xc1022220, 0x40511112},
+{0, 0xc1891111, 0x4048888a},
+{'q', 0xc149999a, 0xbe4cccd0},
+{0, 0xc1a80000, 0xc0f33334},
+{'9', 0xffc5ffbd, 0xff5dffbe},
+{'l', 0x4195ddde, 0x00000000},
+{'8', 0x47182c00, 0x1c461b19},
+{'8', 0xe3580132, 0xaf2ce225},
+{'q', 0x3fdddde0, 0xc1566666},
+{0, 0xc1422220, 0xc15dddde},
+{'@', 0x00000034, 0x00004c00},/*        4        x-advance: 76.000000 */
+{'M', 0x40222223, 0xc2088889},
+{'l', 0x42462223, 0xc27bbbbd},
+{'l', 0x419d5556, 0x00000000},
+{'l', 0xc1277778, 0x42722223},
+{'l', 0x412aaaa8, 0x00000000},
+{'l', 0xc02eeee0, 0x4178888a},
+{'l', 0xc12aaaac, 0x00000000},
+{'l', 0xc06aaab0, 0x41a80001},
+{'l', 0xc1966666, 0x00000000},
+{'4', 0xff58001d, 0x0000fecc},
+{'6', 0xff97000a, 0xffec009b},
+{'l', 0x41a3bbbb, 0x3e088800},
+{'l', 0x40d33338, 0xc20aeeef},
+{'l', 0xbfe66660, 0x40222220},
+{'l', 0xc1ca2223, 0x42004445},
+{'@', 0x00000035, 0x00004c00},/*        5        x-advance: 76.000000 */
+{'M', 0x41ce6667, 0xc2304445},
+{'l', 0xc1777778, 0xc07bbbc0},
+{'l', 0x41500000, 0xc2444445},
+{'l', 0x42544444, 0x00000000},
+{'4', 0x0080ffec, 0x0000fed7},
+{'l', 0xc0cccccc, 0x41a8888a},
+{'q', 0x40c00004, 0xc06eeef0},
+{0, 0x41600002, 0xc06eeef0},
+{'q', 0x415ddddc, 0x00000000},
+{0, 0x419f7778, 0x411bbbbc},
+{'q', 0x40c22220, 0x411bbbbc},
+{0, 0x40a22220, 0x41b2aaac},
+{'q', 0xbf911100, 0x41677778},
+{0, 0xc1311110, 0x41bf7778},
+{'q', 0xc11ddde0, 0x41177778},
+{0, 0xc1c44446, 0x41122222},
+{'q', 0xc1488888, 0xbe4cccb0},
+{0, 0xc1a5ddde, 0xc1011111},
+{'9', 0xffc1ffbf, 0xff5dffbd},
+{'l', 0x4193bbbc, 0x00000000},
+{'8', 0x48162a02, 0x1e431d15},
+{'8', 0xd35d013e, 0x9a24d01e},
+{'8', 0xa5f1cd05, 0xd7b2d8ec},
+{'q', 0xc0e44440, 0xbd888800},
+{0, 0xc14eeeee, 0x40a88888},
+{'@', 0x00000036, 0x00004c00},/*        6        x-advance: 76.000000 */
+{'M', 0x428c8889, 0xc201ddde},
+{'q', 0xbf999980, 0x41633332},
+{0, 0xc1333334, 0x41c1999a},
+{'q', 0xc11eeef0, 0x411eeeef},
+{0, 0xc1c44444, 0x411aaaaa},
+{'q', 0xc129999c, 0xbe888878},
+{0, 0xc18a2223, 0xc0bdddde},
+{'q', 0xc0d33336, 0xc0b55556},
+{0, 0xc1155556, 0xc1666667},
+{'9', 0xffbaffeb, 0xff6dfff3},
+{'l', 0x3f3bbbc0, 0xc0bddde0},
+{'q', 0x4048888a, 0xc1c5dddc},
+{0, 0x41900000, 0xc21e6666},
+{'9', 0xff8a0076, 0xff860128},
+{'4', 0x0000001e, 0x007ffff5},
+{'l', 0xbf5dddc0, 0x00000000},
+{'q', 0xc1533334, 0xbe4ccc00},
+{0, 0xc1b0888a, 0x40d55550},
+{'q', 0xc10ddddc, 0x40dbbbc0},
+{0, 0xc15ccccc, 0x4194ccce},
+{'q', 0x41066664, 0xc1033334},
+{0, 0x419ccccc, 0xc0fffff8},
+{'q', 0x410ddde0, 0x3e088800},
+{0, 0x41622224, 0x409ffff8},
+{'q', 0x40aaaab0, 0x409bbbc0},
+{0, 0x40ecccd0, 0x41455558},
+{'9', 0x003b0011, 0x0079000c},
+{'m', 0xc2362222, 0xc0111110},
+{'8', 0x45001ffd, 0x41152503},
+{'8', 0x1c3d1b13, 0xd35b013a},
+{'8', 0x9d26d121, 0xa6f5d305},
+{'8', 0xd1b8d3ef, 0x13baffd9},
+{'q', 0xc0777770, 0x40266660},
+{0, 0xc0ccccc8, 0x40d11110},
+{'l', 0xbf5ddde0, 0x40bbbbc0},
+{'@', 0x00000037, 0x00004c00},/*        7        x-advance: 76.000000 */
+{'M', 0x429eeeef, 0xc2c22223},
+{'l', 0xbfe66640, 0x413bbbc0},
+{'l', 0xc2455556, 0x42aaaaab},
+{'l', 0xc1a5dddf, 0x00000000},
+{'l', 0x4244888a, 0xc2a31112},
+{'l', 0xc239999a, 0x00000000},
+{'l', 0x401dddd8, 0xc1788888},
+{'l', 0x42855555, 0x00000000},
+{'@', 0x00000038, 0x00004c00},/*        8        x-advance: 76.000000 */
+{'M', 0x4286cccd, 0xc1d9999a},
+{'q', 0xbf5ddd80, 0x41633333},
+{0, 0xc1344444, 0x41ac4444},
+{'q', 0xc1266664, 0x40e8888c},
+{0, 0xc1bd5556, 0x40e00003},
+{'q', 0xc1455554, 0xbe4cccd0},
+{0, 0xc1a77778, 0xc0e66667},
+{'q', 0xc1099999, 0xc0e00002},
+{0, 0xc0f77776, 0xc1a11112},
+{'q', 0x3f199998, 0xc10ffffe},
+{0, 0x40bdddde, 0xc16eeeee},
+{'q', 0x40aaaaac, 0xc0bddde0},
+{0, 0x41522224, 0xc118888c},
+{'q', 0xc11ddddf, 0xc0f55550},
+{0, 0xc1122224, 0xc1a1999a},
+{'q', 0x3f3bbbc0, 0xc1577778},
+{0, 0x41255556, 0xc1a5dddc},
+{'q', 0x411aaaaa, 0xc0eaaab0},
+{0, 0x41b44445, 0xc0e22230},
+{'q', 0x413ddde0, 0x3e4cce00},
+{0, 0x419d5556, 0x40e66670},
+{'q', 0x40fbbbc0, 0x40dddde0},
+{0, 0x40e22220, 0x419bbbbc},
+{'8', 0x6bd740fc, 0x46a52adb},
+{'9', 0x0040005d, 0x00b30055},
+{'m', 0xc1511110, 0xc22eaaab},
+{'8', 0xbef4db04, 0xe2c7e3f0},
+{'8', 0x1eb6ffd3, 0x4ae020e5},
+{'8', 0x430b25fc, 0x1e3a1e10},
+{'8', 0xe14a012e, 0xb521df1b},
+{'m', 0xc0acccd0, 0x42295556},
+{'8', 0xb5f1d505, 0xdfbde0ec},
+{'8', 0x21abffcd, 0x53d922df},
+{'8', 0x4a0f2bfb, 0x1f431e15},
+{'8', 0xe0540133, 0xae28df22},
+{'@', 0x00000039, 0x00004c00},/*        9        x-advance: 76.000000 */
+{'M', 0x415bbbbc, 0x3f888889},
+{'4', 0xff7f000b, 0x00000016},
+{'q', 0x41c08889, 0xbf088890},
+{0, 0x4202aaac, 0xc1beeef0},
+{'q', 0xc1055558, 0x40f7777c},
+{0, 0xc18d5556, 0x40f33338},
+{'q', 0xc10eeef0, 0xbe088880},
+{0, 0xc1666668, 0xc09bbbc0},
+{'q', 0xc0aeeef0, 0xc0977778},
+{0, 0xc0f77778, 0xc1411110},
+{'q', 0xc0111114, 0xc0ecccd0},
+{0, 0xbfccccd0, 0xc1755558},
+{'q', 0x3f4cccd0, 0xc1166668},
+{0, 0x40b11112, 0xc18b3334},
+{'q', 0x40977776, 0xc1000000},
+{0, 0x41477777, 0xc14cccc8},
+{'q', 0x40f9999c, 0xc09999a0},
+{0, 0x418ccccd, 0xc0933340},
+{'q', 0x412cccd0, 0x3e4cce00},
+{0, 0x4188888a, 0x40c66670},
+{'q', 0x40c88888, 0x40c00000},
+{0, 0x4109999c, 0x41711110},
+{'9', 0x00480013, 0x0093000b},
+{'l', 0xbf6eee80, 0x40e44448},
+{'q', 0xc04888a0, 0x41b5ddde},
+{0, 0xc188888a, 0x42166666},
+{'9', 0x0076ff91, 0x0079fed1},
+{'6', 0x0000ffee, 0xfdfa0073},
+{'8', 0x5c0a2cfc, 0x31462f0f},
+{'9', 0x00020042, 0xffbe0071},
+{'l', 0x3f911100, 0xc0fdddd8},
+{'8', 0xbd01e403, 0xbeecdbfe},
+{'8', 0xe3c6e4ef, 0x33a7ffc6},
+{'q', 0xc0777770, 0x40d11120},
+{0, 0xc0933330, 0x414bbbc0},
+{'@', 0x0000003a, 0x00002611},/*        :        x-advance: 38.066406 */
+{'M', 0x40333334, 0xc1133334},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'m', 0x41177778, 0xc25a6667},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'@', 0x0000003b, 0x00002366},/*        ;        x-advance: 35.398438 */
+{'M', 0x41322223, 0xc27f3334},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'m', 0x41311111, 0x423d999a},
+{'l', 0xc0044440, 0x41511112},
+{'q', 0xbfaaaab0, 0x41033334},
+{0, 0xc0b9999c, 0x41766668},
+{'9', 0x0039ffdd, 0x0062ffaa},
+{'4', 0xffd6ffb2, 0xffad0032},
+{'9', 0xffd80017, 0xffa90020},
+{'l', 0x401dddde, 0xc1611112},
+{'l', 0x417dddde, 0x00000000},
+{'@', 0x0000003c, 0x00004377},/*        <        x-advance: 67.464844 */
+{'M', 0x42580001, 0xc119999a},
+{'l', 0xc24e2223, 0xc1c33333},
+{'l', 0x402eeeee, 0xc17aaaac},
+{'l', 0x42700001, 0xc1c2aaae},
+{'l', 0xc05999a0, 0x419bbbbe},
+{'l', 0xc21cccce, 0x415aaaac},
+{'l', 0x420a2223, 0x41566668},
+{'l', 0xc0488880, 0x418eeeef},
+{'@', 0x0000003d, 0x00004bcc},/*        =        x-advance: 75.796875 */
+{'M', 0x428e6667, 0xc282eeef},
+{'l', 0xc0333340, 0x417bbbb8},
+{'4', 0x0000fe31, 0xff830016},
+{'6', 0x000001cf, 0x00e6ffd8},
+{'l', 0xc02eeef0, 0x417aaaac},
+{'l', 0xc2680001, 0x00000000},
+{'l', 0x40333334, 0xc17aaaac},
+{'l', 0x4267bbbd, 0x00000000},
+{'@', 0x0000003e, 0x00004466},/*        >        x-advance: 68.398438 */
+{'M', 0x41577778, 0xc2922223},
+{'l', 0x42515556, 0x41c2aaac},
+{'l', 0xc0333330, 0x417bbbc0},
+{'l', 0xc272eef0, 0x41c2aaaa},
+{'l', 0x4059999c, 0xc19b3333},
+{'l', 0x42200000, 0xc15dddde},
+{'l', 0xc20d5556, 0xc1577778},
+{'l', 0x40488890, 0xc18d5558},
+{'@', 0x0000003f, 0x000041ee},/*        ?        x-advance: 65.929688 */
+{'M', 0x42177778, 0xc1eeeef0},
+{'l', 0xc183bbbc, 0x3d888900},
+{'q', 0x3f088880, 0xc0fddddc},
+{0, 0x40555558, 0xc1600002},
+{'8', 0xa747cf16, 0xc049d831},
+{'8', 0xb825e21e, 0xc4f8dd05},
+{'8', 0xe6cde7f4, 0x1abeffd6},
+{'9', 0x001bffe8, 0x0041ffe1},
+{'l', 0xc196eef0, 0x3e088800},
+{'q', 0x3f800000, 0xc1544448},
+{0, 0x41211112, 0xc1a2aaac},
+{'q', 0x41111112, 0xc0e22220},
+{0, 0x41b00000, 0xc0dbbbc0},
+{'q', 0x413bbbbc, 0x3e888900},
+{0, 0x4199999a, 0x40d999a0},
+{'q', 0x40f11118, 0x40d11110},
+{0, 0x40d55558, 0x4196eef0},
+{'q', 0xbf2aaa80, 0x41144444},
+{0, 0xc0d99998, 0x41777778},
+{'q', 0xc0c44448, 0x40c66668},
+{0, 0xc1500000, 0x413bbbbc},
+{'9', 0x002bffca, 0x0070ffba},
+{'6', 0x000dfffe, 0x00a6ff4c},
+{'8', 0xc516dd00, 0xe73be817},
+{'8', 0x153b0022, 0x391a1519},
+{'8', 0x3ce92400, 0x19c518e9},
+{'8', 0xebc500de, 0xc6e7eae8},
+{'@', 0x00000040, 0x00007688},/*        @        x-advance: 118.531250 */
+{'M', 0x428e4445, 0x41c3bbbc},
+{'8', 0x24a31bd7, 0x099b09cc},
+{'q', 0xc18e6668, 0xbe4ccc80},
+{0, 0xc1e22224, 0xc109999a},
+{'q', 0xc1266666, 0xc1066666},
+{0, 0xc1600000, 0xc1b11111},
+{'q', 0xc0622224, 0xc15cccce},
+{0, 0xbf4cccd4, 0xc1ef7779},
+{'q', 0x40333335, 0xc1855555},
+{0, 0x413ccccd, 0xc1faaaab},
+{'q', 0x41100000, 0xc16aaaa8},
+{0, 0x41b80000, 0xc1bddde0},
+{'q', 0x41611114, 0xc1111110},
+{0, 0x42000000, 0xc10dddd8},
+{'q', 0x4186eef0, 0x3e4ccc00},
+{0, 0x41d80004, 0x41066660},
+{'q', 0x41233330, 0x41022228},
+{0, 0x415dddd8, 0x41aaaaac},
+{'q', 0x406eef00, 0x41533334},
+{0, 0x3f9999c0, 0x41e44446},
+{'q', 0xbfb33340, 0x410bbbbc},
+{0, 0xc0acccd0, 0x418c4445},
+{'q', 0xc07bbbc0, 0x410bbbbc},
+{0, 0xc12ddde0, 0x41688888},
+{'q', 0xc0dbbbc0, 0x40b7777a},
+{0, 0xc1891110, 0x40aeeef1},
+{'8', 0xedb900da, 0xc7d4eee0},
+{'q', 0xc1055558, 0x4119999a},
+{0, 0xc18f7778, 0x41177778},
+{'8', 0xd8a6ffc3, 0xa3ded9e4},
+{'q', 0xbf888880, 0xc11bbbbd},
+{0, 0x40000000, 0xc19bbbbc},
+{'q', 0x40488890, 0xc11bbbc0},
+{0, 0x41055558, 0xc1877778},
+{'8', 0xab5ac62a, 0xe56ee431},
+{'8', 0x1153012e, 0x294a1025},
+{'l', 0xc1133338, 0x421a2222},
+{'8', 0x37fe1afb, 0x1f261d02},
+{'8', 0xdc500231, 0x9f32da1f},
+{'q', 0x40aaaab0, 0xc188888a},
+{0, 0x40377780, 0xc202eeef},
+{'q', 0xbfddde00, 0xc12ddde4},
+{0, 0xc10eeef0, 0xc18dddde},
+{'q', 0xc0e66670, 0xc0dddde0},
+{0, 0xc1abbbbc, 0xc0e44450},
+{'q', 0xc1677778, 0xbe888800},
+{0, 0xc1cbbbbe, 0x40e66670},
+{'q', 0xc1300000, 0x40ecccd0},
+{0, 0xc1922222, 0x419b3332},
+{'q', 0xc0e66668, 0x41400004},
+{0, 0xc11eeef0, 0x41c91113},
+{'q', 0xc02eeeec, 0x41511112},
+{0, 0xbf800000, 0x41c55556},
+{'q', 0x3fd55560, 0x41333334},
+{0, 0x410eeef0, 0x41933334},
+{'q', 0x40e88888, 0x40e44444},
+{0, 0x41ad5556, 0x40e88888},
+{'9', 0x00010059, 0xffdc00b4},
+{'6', 0x0054000f, 0xfe5bff3b},
+{'l', 0xbf5dddc0, 0x40d55554},
+{'8', 0x3b0521fd, 0x1c2a1a09},
+{'8', 0xe23e0123, 0xc326e01c},
+{'l', 0x41066668, 0xc1fd5555},
+{'8', 0xfadcfbee, 0x20a6ffca},
+{'8', 0x53ca22de, 0x5de431ed},
+{'@', 0x00000041, 0x00005933},/*        A        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'l', 0x41bbbbbe, 0x00000000},
+{'l', 0xc0acccd0, 0xc210cccd},
+{'l', 0xc1908888, 0x4210cccd},
+{'[', 0x007a0041, 0x000000cc},/*kerning*/
+{'@', 0x00000042, 0x00005488},/*        B        x-advance: 84.531250 */
+{'M', 0x42988889, 0xc1e88889},
+{'q', 0xbf800000, 0x41777778},
+{0, 0xc1411110, 0x41b2aaab},
+{'9', 0x0036ffa8, 0x0035ff37},
+{'4', 0x0000fed4, 0xfcf80086},
+{'l', 0x41f00001, 0x3d888800},
+{'q', 0x41a99998, 0x3d888800},
+{0, 0x41eccccc, 0x412bbbc0},
+{'q', 0x408cccd0, 0x40b33330},
+{0, 0x406eef00, 0x41722220},
+{'8', 0x6ad741fc, 0x42a229db},
+{'8', 0x414a1233, 0x62132e16},
+{'m', 0xc224cccd, 0xc24f3334},
+{'4', 0x00c3ffde, 0x00000063},
+{'8', 0xeb5e0033, 0xb234ea2b},
+{'8', 0xb8edcd08, 0xeab5ece6},
+{'6', 0x0000ff8a, 0x019c00af},
+{'9', 0xff9d000f, 0xff99ffaf},
+{'4', 0x0000ff6d, 0x00d1ffdc},
+{'l', 0x41766666, 0x3d888900},
+{'8', 0xe65c0033, 0xb032e729},
+{'@', 0x00000043, 0x000056bb},/*        C        x-advance: 86.730469 */
+{'M', 0x42744445, 0xc2011112},
+{'l', 0x419b3332, 0xbe088800},
+{'q', 0xbff77740, 0x41808889},
+{0, 0xc1600000, 0x41c88889},
+{'q', 0xc13ffffc, 0x41100001},
+{0, 0xc1dd5554, 0x410aaaab},
+{'q', 0xc1522224, 0xbe88887c},
+{0, 0xc1a5dddf, 0xc0e22222},
+{'q', 0xc0f11112, 0xc0dbbbbc},
+{0, 0xc1244445, 0xc18bbbbc},
+{'9', 0xffacffeb, 0xff4ffff7},
+{'l', 0x3f4cccd0, 0xc0caaaa8},
+{'q', 0x3fdddde0, 0xc1433334},
+{0, 0x40eeeef0, 0xc1b7777a},
+{'q', 0x40b77776, 0xc12cccc8},
+{0, 0x41766667, 0xc18bbbbc},
+{'q', 0x411aaaaa, 0xc0d55550},
+{0, 0x41b9999b, 0xc0ccccd0},
+{'q', 0x417ddddc, 0x3e888900},
+{0, 0x41c22222, 0x411bbbc0},
+{'9', 0x004b0043, 0x00c5004a},
+{'l', 0xc19bbbbc, 0xbd888c00},
+{'8', 0x9ae7c000, 0xd7a2dae7},
+{'8', 0x2393febc, 0x5fc124d7},
+{'q', 0xc02aaab0, 0x40eaaaa8},
+{0, 0xc07bbbc0, 0x41855556},
+{'q', 0xbf999990, 0x41144444},
+{0, 0xbf999990, 0x41855556},
+{'8', 0x61173800, 0x2a582817},
+{'q', 0x410ddde0, 0x3eaaaac0},
+{0, 0x41644444, 0xc0866666},
+{'q', 0x40acccd0, 0xc0933334},
+{0, 0x40e44448, 0xc1511114},
+{'@', 0x00000044, 0x00005622},/*        D        x-advance: 86.132812 */
+{'M', 0x3fb33334, 0x00000000},
+{'4', 0xfcf80086, 0x000000de},
+{'q', 0x41500000, 0x3e888900},
+{0, 0x41ac4446, 0x40d999a0},
+{'q', 0x41088888, 0x40ceeef0},
+{0, 0x41444440, 0x41877778},
+{'9', 0x0053001d, 0x00b40012},
+{'l', 0xbeaaab00, 0x40333330},
+{'q', 0xc0266660, 0x41a91111},
+{0, 0xc1822220, 0x42095556},
+{'9', 0x0069ff94, 0x006cfef9},
+{'6', 0x0000ff06, 0xfd7a0162},
+{'4', 0x0000ffab, 0x0205ffa6},
+{'l', 0x41022222, 0x3d888700},
+{'q', 0x41522224, 0x3d888900},
+{0, 0x41a2aaac, 0xc1066666},
+{'q', 0x40e88888, 0xc1077778},
+{0, 0x41155554, 0xc1a55556},
+{'q', 0x3feeef00, 0xc12eeef0},
+{0, 0x3f6eef00, 0xc19aaaaa},
+{'8', 0xa5dccafb, 0xd99fdbe2},
+{'@', 0x00000045, 0x00004a77},/*        E        x-advance: 74.464844 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x427c8888, 0x00000000},
+{'l', 0xc0377760, 0x4181999c},
+{'l', 0xc22ddddf, 0x00000000},
+{'l', 0xc0822224, 0x41b91110},
+{'l', 0x42151112, 0x00000000},
+{'l', 0xc0333340, 0x417aaaac},
+{'l', 0xc2148888, 0x00000000},
+{'l', 0xc0911114, 0x41cf7778},
+{'l', 0x422eeef0, 0x00000000},
+{'l', 0xc0333340, 0x41811112},
+{'l', 0xc27d5556, 0x00000000},
+{'[', 0x00540045, 0x00000155},/*kerning*/
+{'@', 0x00000046, 0x00004899},/*        F        x-advance: 72.597656 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x42762222, 0x00000000},
+{'l', 0xc0377780, 0x4181999c},
+{'l', 0xc2277777, 0x00000000},
+{'l', 0xc08cccd0, 0x41c88888},
+{'l', 0x42151111, 0x00000000},
+{'l', 0xc0333320, 0x41811112},
+{'l', 0xc214ccce, 0x00000000},
+{'l', 0xc0dddddc, 0x421eaaab},
+{'l', 0xc19cccce, 0x00000000},
+{'[', 0x00540046, 0x00000155},/*kerning*/
+{'@', 0x00000047, 0x00005a33},/*        G        x-advance: 90.199219 */
+{'M', 0x42a9ddde, 0xc24c0001},
+{'l', 0xc0c22220, 0x421b3334},
+{'q', 0xc0ccccd0, 0x40fddddf},
+{0, 0xc18aaaaa, 0x412cccce},
+{'q', 0xc12ddde0, 0x40377776},
+{0, 0xc1a33334, 0x402aaaaa},
+{'q', 0xc1555556, 0xbe088890},
+{0, 0xc1aaaaab, 0xc0dbbbbd},
+{'q', 0xc1000001, 0xc0d77778},
+{0, 0xc1311112, 0xc18aaaab},
+{'9', 0xffabffe8, 0xff4bfff4},
+{'l', 0x3f4cccd0, 0xc0b99998},
+{'q', 0x3fdddddc, 0xc1477778},
+{0, 0x40eeeeef, 0xc1ba2224},
+{'q', 0x40b7777a, 0xc12ddde0},
+{0, 0x41777779, 0xc18bbbbc},
+{'q', 0x411bbbbc, 0xc0d33330},
+{0, 0x41bbbbbc, 0xc0caaab0},
+{'q', 0x41799998, 0x3e888900},
+{0, 0x41c00000, 0x410cccd0},
+{'9', 0x00430043, 0x00bc004c},
+{'l', 0xc1966664, 0xbd888800},
+{'8', 0xa4e1c7fc, 0xdba8dde6},
+{'q', 0xc109999c, 0xbeaaab00},
+{0, 0xc1600000, 0x408cccd0},
+{'q', 0xc0aaaab0, 0x40955550},
+{0, 0xc1044446, 0x413dddd8},
+{'q', 0xc0377778, 0x40e44448},
+{0, 0xc0800000, 0x4166666c},
+{'8', 0x5af639f8, 0x420120ff},
+{'8', 0x60213804, 0x295f271c},
+{'9', 0x0002004d, 0xffdb0086},
+{'l', 0x40511110, 0xc185dddf},
+{'l', 0xc18d5556, 0x00000000},
+{'l', 0x40266670, 0xc16aaaac},
+{'l', 0x42148888, 0x00000000},
+{'@', 0x00000048, 0x00005daa},/*        H        x-advance: 93.664062 */
+{'M', 0x426aeef0, 0x00000000},
+{'l', 0x40e66660, 0xc2266667},
+{'l', 0xc216aaaa, 0x00000000},
+{'l', 0xc0e8888c, 0x42266667},
+{'l', 0xc19cccce, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x419ccccd, 0x00000000},
+{'l', 0xc0dbbbbc, 0x421d5556},
+{'l', 0x4216eef0, 0x00000000},
+{'l', 0x40d999a0, 0xc21d5556},
+{'l', 0x419c4444, 0x00000000},
+{'l', 0xc1866668, 0x42c22223},
+{'l', 0xc19c4444, 0x00000000},
+{'@', 0x00000049, 0x000026aa},/*        I        x-advance: 38.664062 */
+{'M', 0x421c0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'l', 0xc19c4445, 0x00000000},
+{'l', 0x41866667, 0xc2c22223},
+{'l', 0x419c4446, 0x00000000},
+{'@', 0x0000004a, 0x00004a00},/*        J        x-advance: 74.000000 */
+{'M', 0x42611112, 0xc2c22223},
+{'4', 0x0000009c, 0x0219ffa5},
+{'q', 0xbff77760, 0x41600001},
+{0, 0xc13aaaa8, 0x41b66667},
+{'q', 0xc11bbbbc, 0x410bbbbd},
+{0, 0xc1c11112, 0x41077778},
+{'q', 0xc15eeef1, 0xbe888878},
+{0, 0xc1aaaaac, 0xc1044444},
+{'9', 0xffc0ffc5, 0xff52ffc9},
+{'l', 0x419ccccd, 0x3d888900},
+{'8', 0x4d0b2cfe, 0x2142200e},
+{'8', 0xde520134, 0xad26dc1e},
+{'l', 0x41388888, 0xc2873334},
+{'@', 0x0000004b, 0x00005422},/*        K        x-advance: 84.132812 */
+{'M', 0x425f3334, 0x00000000},
+{'l', 0xc18aaaac, 0xc21b3334},
+{'l', 0xc14ccccc, 0x413ddde0},
+{'l', 0xc0955554, 0x41d77778},
+{'l', 0xc19cccce, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x419ccccd, 0x00000000},
+{'l', 0xc0eeeef0, 0x422aeef0},
+{'l', 0x411ccccc, 0xc1311110},
+{'l', 0x41ea2222, 0xc1fd5558},
+{'l', 0x41cbbbc0, 0x00000000},
+{'l', 0xc2273335, 0x42304445},
+{'l', 0x41c7777a, 0x42540001},
+{'l', 0xc1b22224, 0x00000000},
+{'@', 0x0000004c, 0x000047bb},/*        L        x-advance: 71.730469 */
+{'M', 0x42820000, 0xc1811112},
+{'l', 0xc0377770, 0x41811112},
+{'l', 0xc272eeef, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x419ccccd, 0x00000000},
+{'l', 0xc1611112, 0x42a1ddde},
+{'l', 0x4224cccc, 0x36800000},
+{'[', 0x0041004c, 0x00000144},/*kerning*/
+{'[', 0x00c0004c, 0x00000144},/*kerning*/
+{'[', 0x00c1004c, 0x00000144},/*kerning*/
+{'[', 0x00c2004c, 0x00000144},/*kerning*/
+{'[', 0x00c3004c, 0x00000144},/*kerning*/
+{'[', 0x00c4004c, 0x00000144},/*kerning*/
+{'[', 0x00c5004c, 0x00000144},/*kerning*/
+{'@', 0x0000004d, 0x00007400},/*        M        x-advance: 116.000000 */
+{'M', 0x425d1112, 0xc1d6eef0},
+{'l', 0x42111112, 0xc28c6667},
+{'l', 0x41cf7778, 0x00000000},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc19ccccc, 0x00000000},
+{'l', 0x40999990, 0xc1dd5556},
+{'l', 0x41177778, 0xc22c4445},
+{'l', 0xc2148889, 0x428d7778},
+{'l', 0xc1566664, 0x00000000},
+{'l', 0xc1500002, 0xc2926667},
+{'l', 0xc0caaaac, 0x423f3334},
+{'l', 0xc08ccccc, 0x41cb3334},
+{'l', 0xc19cccce, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41c91111, 0x00000000},
+{'l', 0x413ddde0, 0x428c6667},
+{'@', 0x0000004e, 0x00005d99},/*        N        x-advance: 93.597656 */
+{'M', 0x42be0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0xc1d80000, 0xc281999a},
+{'l', 0xc1344446, 0x4281999a},
+{'l', 0xc19cccce, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41977777, 0x00000000},
+{'l', 0x41d80002, 0x4281bbbc},
+{'l', 0x41344440, 0xc281bbbc},
+{'l', 0x419c4448, 0x00000000},
+{'@', 0x0000004f, 0x00005b77},/*        O        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'q', 0x3f911140, 0xc1077778},
+{0, 0x3f5dde00, 0xc17ffffc},
+{'@', 0x00000050, 0x00005577},/*        P        x-advance: 85.464844 */
+{'M', 0x4235ddde, 0xc208cccd},
+{'l', 0xc193bbbb, 0xbd888a00},
+{'l', 0xc0c00000, 0x42091112},
+{'4', 0x0000ff64, 0xfcf80086},
+{'l', 0x420e6666, 0x3d888800},
+{'q', 0x415eeef0, 0x3eaaab00},
+{0, 0x41b88888, 0x410aaab0},
+{'q', 0x41122228, 0x41044440},
+{0, 0x41000000, 0x41b66664},
+{'q', 0xbfa22200, 0x41800002},
+{0, 0xc1500000, 0x41bd5558},
+{'9', 0x003dffa3, 0x003dff2d},
+{'m', 0xc1266664, 0xc23aaaab},
+{'4', 0x00f3ffd6, 0x00010081},
+{'8', 0xe265003a, 0xa634e32b},
+{'8', 0xabf0cd07, 0xdbb3dee9},
+{'l', 0xc1933334, 0xbd888800},
+{'[', 0x00740050, 0x000000ee},/*kerning*/
+{'[', 0x00760050, 0x00000100},/*kerning*/
+{'[', 0x00790050, 0x00000100},/*kerning*/
+{'[', 0x00fd0050, 0x00000100},/*kerning*/
+{'[', 0x00ff0050, 0x00000100},/*kerning*/
+{'@', 0x00000051, 0x00005b77},/*        Q        x-advance: 91.464844 */
+{'M', 0x429a4445, 0x40dddddf},
+{'4', 0x0053ff96, 0xff7cff79},
+{'q', 0xc0822220, 0x3f088896},
+{0, 0xc0e66668, 0x3eeeef0c},
+{'q', 0xc1522220, 0xbe4cccd0},
+{0, 0xc1a77777, 0xc0e8888a},
+{'q', 0xc0f9999a, 0xc0e22223},
+{0, 0xc12bbbbc, 0xc18eeef0},
+{'9', 0xffaaffea, 0xff4dfff5},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1bb3334},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeef0, 0xc0d77780},
+{0, 0x41bcccce, 0xc0ceeef0},
+{'q', 0x41533330, 0x3e888800},
+{0, 0x41a80000, 0x40e88880},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaaa8, 0x418e6668},
+{'9', 0x00560017, 0x00b3000c},
+{'l', 0xbf088900, 0x408eeef0},
+{'q', 0xbfccccc0, 0x413eeef0},
+{0, 0xc0e44440, 0x41b4cccd},
+{'9', 0x0055ffd5, 0x008bff80},
+{'6', 0x006a006a, 0xfdc9ffb9},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc1099998, 0xbeaaab00},
+{0, 0xc1600000, 0x408eeef0},
+{'q', 0xc0acccd0, 0x40999990},
+{0, 0xc1066666, 0x41422220},
+{'q', 0xc0b9999c, 0x41655554},
+{0, 0xc0a00000, 0x42008889},
+{'8', 0x641c3902, 0x2c5a2a1a},
+{'8', 0xde6e0243, 0x9f43db2b},
+{'q', 0x40b99998, 0xc1644446},
+{0, 0x40a44448, 0xc201ddde},
+{'@', 0x00000052, 0x00005488},/*        R        x-advance: 84.531250 */
+{'M', 0x4259dddf, 0x00000000},
+{'l', 0xc1366668, 0xc20e6667},
+{'l', 0xc17ddde0, 0x00000000},
+{'l', 0xc0c66664, 0x420e6667},
+{'4', 0x0000ff64, 0xfcf80086},
+{'l', 0x42084444, 0x3d888800},
+{'q', 0x41555558, 0x3eaaab00},
+{0, 0x41b44444, 0x40e88890},
+{'q', 0x41133338, 0x40dbbbc0},
+{0, 0x41022228, 0x41abbbbc},
+{'9', 0x009ffff5, 0x00ddff56},
+{'4', 0x013b006c, 0x00080000},
+{'6', 0x0000ff5a, 0xfd7aff65},
+{'4', 0x00e9ffd8, 0x00010073},
+{'8', 0xe2630039, 0xa632e22a},
+{'q', 0x40000000, 0xc1588888},
+{0, 0xc1388888, 0xc1611110},
+{'l', 0xc1855556, 0xbd888800},
+{'@', 0x00000053, 0x00005166},/*        S        x-advance: 81.398438 */
+{'M', 0x425b3334, 0xc1cf7778},
+{'8', 0xb2dfc909, 0xd9aee8d6},
+{'8', 0xcd95ecca, 0xb5ace2cc},
+{'q', 0xc0800000, 0xc0b77778},
+{0, 0xc0622220, 0xc1622224},
+{'q', 0x3f088880, 0xc1199998},
+{0, 0x40ceeef0, 0xc17cccd0},
+{'q', 0x40bddddc, 0xc0c66660},
+{0, 0x41677776, 0xc1122220},
+{'q', 0x4109999c, 0xc03bbbc0},
+{0, 0x41891112, 0xc02eeee0},
+{'q', 0x41588888, 0x3e888800},
+{0, 0x41b3bbbc, 0x41033330},
+{'9', 0x003e0047, 0x00ae0045},
+{'l', 0xc19bbbbe, 0x00000000},
+{'q', 0x3f1999c0, 0xc15bbbc0},
+{0, 0xc14ddddc, 0xc1600000},
+{'8', 0x15a7ffd3, 0x48cd16d6},
+{'8', 0x350e20fb, 0x21331414},
+{'q', 0x40777780, 0x3fc44440},
+{0, 0x40d33338, 0x40222220},
+{'q', 0x41000000, 0x403bbbc0},
+{0, 0x41644444, 0x40dbbbc0},
+{'q', 0x40c88890, 0x407bbbc0},
+{0, 0x411ddde0, 0x411ddde0},
+{'q', 0x406aaaa0, 0x40bbbbb8},
+{0, 0x40444440, 0x41655554},
+{'q', 0xbf2aaa80, 0x411cccce},
+{0, 0xc0caaab0, 0x417eeef0},
+{'q', 0xc0b33330, 0x40c44445},
+{0, 0xc15eeeec, 0x410eeef0},
+{'q', 0xc1055558, 0x40333332},
+{0, 0xc1891112, 0x402aaaaa},
+{'q', 0xc168888a, 0xbe888888},
+{0, 0xc1c4ccce, 0xc1088889},
+{'9', 0xffbeffb0, 0xff44ffb3},
+{'l', 0x419c4444, 0x3d888800},
+{'q', 0xbf5dddc0, 0x417ddddf},
+{0, 0x4179999c, 0x4180888a},
+{'8', 0xec56002d, 0xba32eb29},
+{'@', 0x00000054, 0x000051ee},/*        T        x-advance: 81.929688 */
+{'M', 0x411aaaab, 0xc2a1bbbc},
+{'l', 0x40377778, 0xc181999c},
+{'l', 0x42997778, 0x00000000},
+{'l', 0xc0377780, 0x4181999c},
+{'l', 0xc1e5ddde, 0x00000000},
+{'l', 0xc1600000, 0x42a1bbbc},
+{'l', 0xc19c4444, 0x00000000},
+{'l', 0x41600000, 0xc2a1bbbc},
+{'l', 0xc1e3bbbc, 0x00000000},
+{'[', 0x00540054, 0x00000111},/*kerning*/
+{'[', 0x00560054, 0x00000111},/*kerning*/
+{'[', 0x00570054, 0x00000100},/*kerning*/
+{'[', 0x00590054, 0x00000111},/*kerning*/
+{'[', 0x00dd0054, 0x00000111},/*kerning*/
+{'@', 0x00000055, 0x00005733},/*        U        x-advance: 87.199219 */
+{'M', 0x428c4445, 0xc2c22223},
+{'4', 0x0000009c, 0x01ffffa9},
+{'q', 0xc00cccc0, 0x4181999a},
+{0, 0xc1566668, 0x41cc4445},
+{'q', 0xc1322220, 0x41144445},
+{0, 0xc1db3332, 0x41100000},
+{'q', 0xc1755558, 0xbe4cccb0},
+{0, 0xc1c2aaac, 0xc1188889},
+{'9', 0xffb6ffb9, 0xff39ffc7},
+{'4', 0xfe000056, 0x0000009c},
+{'l', 0xc12dddde, 0x42802223},
+{'8', 0x650d3bf8, 0x2b582916},
+{'8', 0xdb6d0245, 0x9734d829},
+{'l', 0x41300004, 0xc280ccce},
+{'@', 0x00000056, 0x00005699},/*        V        x-advance: 86.597656 */
+{'M', 0x42bf1112, 0xc2c22223},
+{'l', 0xc2400001, 0x42c22223},
+{'l', 0xc1a2aaac, 0x00000000},
+{'l', 0xc18bbbbc, 0xc2c22223},
+{'l', 0x41a77778, 0x00000000},
+{'l', 0x411ccccc, 0x42917778},
+{'l', 0x4202aaac, 0xc2917778},
+{'l', 0x41b33334, 0x00000000},
+{'[', 0x00290056, 0x00000155},/*kerning*/
+{'[', 0x005d0056, 0x00000122},/*kerning*/
+{'[', 0x007d0056, 0x00000144},/*kerning*/
+{'@', 0x00000057, 0x000073dd},/*        W        x-advance: 115.863281 */
+{'M', 0x42f60001, 0xc2c22223},
+{'l', 0xc2100000, 0x42c22223},
+{'l', 0xc19d5558, 0x00000000},
+{'l', 0xc0a44440, 0xc2815556},
+{'l', 0xc1cb3334, 0x42815556},
+{'l', 0xc19d5556, 0x00000000},
+{'l', 0xc0b9999c, 0xc2c22223},
+{'l', 0x41988889, 0x00000000},
+{'l', 0x3ff77780, 0x4288eef0},
+{'l', 0x41d11112, 0xc288eef0},
+{'l', 0x4184ccce, 0x00000000},
+{'l', 0x40955550, 0x42895556},
+{'l', 0x41bb3334, 0xc2895556},
+{'l', 0x419eeef0, 0x00000000},
+{'[', 0x00290057, 0x00000100},/*kerning*/
+{'[', 0x00540057, 0x000000ee},/*kerning*/
+{'[', 0x005d0057, 0x000000cc},/*kerning*/
+{'[', 0x007d0057, 0x000000ee},/*kerning*/
+{'@', 0x00000058, 0x00005433},/*        X        x-advance: 84.199219 */
+{'M', 0x42040000, 0xc2c22223},
+{'l', 0x41455558, 0x42051112},
+{'l', 0x41b66668, 0xc2051112},
+{'l', 0x41bbbbbc, 0x00000000},
+{'l', 0xc20e6667, 0x42444445},
+{'l', 0x41a0888a, 0x42400001},
+{'l', 0xc1acccce, 0x00000000},
+{'l', 0xc14bbbbc, 0xc2077778},
+{'l', 0xc1baaaac, 0x42077778},
+{'l', 0xc1be6667, 0x00000000},
+{'l', 0x42122222, 0xc2477778},
+{'l', 0xc19c4444, 0xc23cccce},
+{'l', 0x41ab3333, 0x00000000},
+{'[', 0x00560058, 0x000000ee},/*kerning*/
+{'@', 0x00000059, 0x000051ee},/*        Y        x-advance: 81.929688 */
+{'M', 0x41f6eef0, 0xc2c22223},
+{'l', 0x413ddde0, 0x422e6667},
+{'l', 0x41d88888, 0xc22e6667},
+{'l', 0x41b3bbbc, 0x00000000},
+{'l', 0xc229ddde, 0x427c0001},
+{'l', 0xc0bbbbc0, 0x42084445},
+{'l', 0xc19e6666, 0x00000000},
+{'l', 0x40caaaac, 0xc2115556},
+{'l', 0xc1a1999a, 0xc272aaac},
+{'l', 0x41a4cccd, 0xbd888800},
+{'[', 0x00290059, 0x00000155},/*kerning*/
+{'[', 0x00540059, 0x00000122},/*kerning*/
+{'[', 0x00560059, 0x00000133},/*kerning*/
+{'[', 0x00570059, 0x00000122},/*kerning*/
+{'[', 0x00580059, 0x000000dd},/*kerning*/
+{'[', 0x00590059, 0x00000133},/*kerning*/
+{'[', 0x005d0059, 0x00000133},/*kerning*/
+{'[', 0x007d0059, 0x00000144},/*kerning*/
+{'[', 0x00dd0059, 0x00000133},/*kerning*/
+{'@', 0x0000005a, 0x00005055},/*        Z        x-advance: 80.332031 */
+{'M', 0x413ccccd, 0xc2a1bbbc},
+{'l', 0x40377778, 0xc181999c},
+{'l', 0x428d7778, 0x00000000},
+{'l', 0xc00cccc0, 0x41477778},
+{'l', 0xc267bbbc, 0x4288aaab},
+{'l', 0x423c8888, 0x3e088900},
+{'l', 0xc0333320, 0x41811112},
+{'l', 0xc28f999a, 0x00000000},
+{'l', 0x400cccc0, 0xc14bbbbc},
+{'l', 0x42688889, 0xc2880000},
+{'l', 0xc2395556, 0xbe088800},
+{'[', 0x0041005a, 0x000000dd},/*kerning*/
+{'[', 0x00c0005a, 0x000000dd},/*kerning*/
+{'[', 0x00c1005a, 0x000000dd},/*kerning*/
+{'[', 0x00c2005a, 0x000000dd},/*kerning*/
+{'[', 0x00c3005a, 0x000000dd},/*kerning*/
+{'[', 0x00c4005a, 0x000000dd},/*kerning*/
+{'[', 0x00c5005a, 0x000000dd},/*kerning*/
+{'@', 0x0000005b, 0x000024dd},/*        [        x-advance: 36.863281 */
+{'M', 0x423d1112, 0xc2e20001},
+{'l', 0xc0155560, 0x416ddde0},
+{'l', 0xc1144444, 0x00000000},
+{'l', 0xc1844444, 0x42d3dddf},
+{'l', 0x41144444, 0xb6400000},
+{'l', 0xc0155558, 0x416ccccd},
+{'l', 0xc1e11112, 0x00000000},
+{'l', 0x41a9999b, 0xc307999a},
+{'l', 0x41e11112, 0x00000000},
+{'@', 0x0000005c, 0x000037ee},/*       \         x-advance: 55.929688 */
+{'M', 0x41faaaac, 0x41055556},
+{'l', 0xc1a8888a, 0xc2d2ccce},
+{'l', 0x4192aaac, 0x00000000},
+{'l', 0x41a88888, 0x42d2ccce},
+{'l', 0xc192aaaa, 0xb6000000},
+{'@', 0x0000005d, 0x000024dd},/*        ]        x-advance: 36.863281 */
+{'M', 0x411dddde, 0xc2c44445},
+{'l', 0x40155558, 0xc16ddde0},
+{'l', 0x41e11112, 0x00000000},
+{'l', 0xc1a9999a, 0x4307999a},
+{'l', 0xc1e11112, 0x36000000},
+{'l', 0x40155554, 0xc16ccccd},
+{'l', 0x41144445, 0x00000000},
+{'l', 0x4184cccd, 0xc2d3dddf},
+{'l', 0xc1155556, 0x00000000},
+{'@', 0x0000005e, 0x000039ee},/*        ^        x-advance: 57.929688 */
+{'M', 0x40777778, 0xc2426667},
+{'l', 0x41de6667, 0xc241dddf},
+{'l', 0x415aaaac, 0x00000000},
+{'l', 0x412ddde0, 0x4241dddf},
+{'l', 0xc1611114, 0x00000000},
+{'l', 0xc0bbbbb8, 0xc1f1999a},
+{'l', 0xc1844446, 0x41f1999a},
+{'l', 0xc17dddde, 0x00000000},
+{'@', 0x0000005f, 0x00003b33},/*        _        x-advance: 59.199219 */
+{'M', 0x42508889, 0x00000000},
+{'l', 0xc0266660, 0x41711112},
+{'l', 0xc26c4445, 0x00000000},
+{'l', 0x402aaaa8, 0xc1711112},
+{'l', 0x426c0000, 0x00000000},
+{'@', 0x00000060, 0x00002bdd},/*        `        x-advance: 43.863281 */
+{'M', 0x42044445, 0xc2ccccce},
+{'l', 0x41177778, 0x41a4ccd0},
+{'l', 0xc1611112, 0xbd888800},
+{'l', 0xc16ddde0, 0xc1a33334},
+{'l', 0x419bbbbd, 0xbe088a00},
+{'@', 0x00000061, 0x00004700},/*        a        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'@', 0x00000062, 0x00004a88},/*        b        x-advance: 74.531250 */
+{'M', 0x4215ddde, 0x3faaaaab},
+{'9', 0xfffeffa6, 0xffb7ff76},
+{'l', 0xc02eeef0, 0x40f99999},
+{'l', 0xc189999a, 0x00000000},
+{'4', 0xfccd008d, 0x00000097},
+{'l', 0xc0e66668, 0x42133334},
+{'q', 0x40f11110, 0xc1000000},
+{0, 0x418cccce, 0xc0f99990},
+{'q', 0x411eeef0, 0x3e088800},
+{0, 0x41711110, 0x40bbbbb0},
+{'q', 0x40a44440, 0x40b55560},
+{0, 0x40d55550, 0x41611114},
+{'9', 0x0042000c, 0x00840005},
+{'l', 0xbe088800, 0x3f888880},
+{'q', 0xc0444440, 0x41b4ccce},
+{0, 0xc1766668, 0x42011112},
+{'9', 0x0029ffcc, 0x0027ff7b},
+{'m', 0x40888890, 0xc26d1112},
+{'9', 0xfffeffbf, 0x003cff92},
+{'l', 0xc0a44444, 0x41e5ddde},
+{'8', 0x3b553913, 0xe84c0130},
+{'8', 0xbe29e61c, 0xb113d80d},
+{'8', 0xaf04d404, 0xbdf0da00},
+{'q', 0xc0000000, 0xc0666670},
+{0, 0xc0eeeee8, 0xc0733340},
+{'@', 0x00000063, 0x00004522},/*        c        x-advance: 69.132812 */
+{'M', 0x42000000, 0xc1622223},
+{'8', 0xea450129, 0xc124e81c},
+{'l', 0x418ddde0, 0xbd888800},
+{'q', 0xbf5dde00, 0x41433334},
+{0, 0xc1244448, 0x419b3334},
+{'q', 0xc1155554, 0x40e44444},
+{0, 0xc1a91111, 0x40dddddd},
+{'q', 0xc179999a, 0xbeaaaaac},
+{0, 0xc1b3bbbc, 0xc1333334},
+{'9', 0xffa9ffca, 0xff37ffd4},
+{'l', 0x3e4cccc0, 0xbff77780},
+{'q', 0x3fcccccc, 0xc1700000},
+{0, 0x41311112, 0xc1cf7778},
+{'q', 0x41177778, 0xc12eeef0},
+{0, 0x41cccccd, 0xc1299998},
+{'q', 0x4149999c, 0x3e888800},
+{0, 0x419c4446, 0x41022220},
+{'9', 0x003e0037, 0x00a10036},
+{'l', 0xc18cccce, 0x00000000},
+{'8', 0xbaefd800, 0xe0c2e2ee},
+{'q', 0xc12cccce, 0xbecccc80},
+{0, 0xc16bbbbc, 0x4148888c},
+{'q', 0xc0266668, 0x41077774},
+{0, 0xc0111110, 0x419a2222},
+{'8', 0x43112601, 0x1d3d1c11},
+{'@', 0x00000064, 0x00004aaa},/*        d        x-advance: 74.664062 */
+{'M', 0x422eaaab, 0x00000000},
+{'l', 0x3f8888a0, 0xc0f77778},
+{'q', 0xc1022224, 0x41155556},
+{0, 0xc1966668, 0x41111111},
+{'q', 0xc119999a, 0xbe4cccb0},
+{0, 0xc16ccccd, 0xc0bdddde},
+{'q', 0xc0a44445, 0xc0b9999a},
+{0, 0xc0dbbbbd, 0xc1622222},
+{'9', 0xffbefff3, 0xff7efffa},
+{'l', 0x3e088890, 0xbf8888a0},
+{'q', 0x40400001, 0xc1aeeef0},
+{0, 0x41744445, 0xc2000001},
+{'q', 0x40dbbbbc, 0xc0b55550},
+{0, 0x41899999, 0xc0acccc0},
+{'9', 0x00020051, 0x003f0082},
+{'l', 0x40e22220, 0xc2137778},
+{'4', 0x00000096, 0x0333ff73},
+{'6', 0x0000ff7a, 0xfee8ff56},
+{'8', 0x44fe1efd, 0x43112601},
+{'8', 0x1d3a1c10, 0xc66d023d},
+{'l', 0x40a44440, 0xc1e6eef0},
+{'8', 0xc5adc7ec, 0x19b5ffd2},
+{'8', 0x43d41be4, 0x4eed28f2},
+{'l', 0xbe088880, 0x3fb33320},
+{'@', 0x00000065, 0x00004799},/*        e        x-advance: 71.597656 */
+{'M', 0x427a2223, 0xc139999a},
+{'q', 0xc0933330, 0x40d9999a},
+{0, 0xc1477778, 0x411eeeef},
+{'q', 0xc0fbbbc0, 0x4048888a},
+{0, 0xc17ccccc, 0x40400002},
+{'q', 0xc16ddde0, 0xbe4cccd0},
+{0, 0xc1b9999b, 0xc1233334},
+{'9', 0xffb0ffbe, 0xff3cffc7},
+{'l', 0x3e4ccce0, 0xc02aaab0},
+{'q', 0x3f800000, 0xc1200000},
+{0, 0x40b77777, 0xc194cccc},
+{'q', 0x40977778, 0xc10aaaac},
+{0, 0x414bbbbd, 0xc15ddde4},
+{'q', 0x41000000, 0xc0a66660},
+{0, 0x4195dddf, 0xc09dddd0},
+{'q', 0x41722220, 0x3e888800},
+{0, 0x41accccc, 0x412eeeec},
+{'9', 0x00550033, 0x00c40027},
+{'4', 0x0041fff8, 0x0000fe9e},
+{'8', 0x571933ff, 0x2452231b},
+{'9', 0x0002004f, 0xffc10090},
+{'6', 0x00540045, 0xfe8dff4e},
+{'8', 0x24acffca, 0x53d226e3},
+{'4', 0x000000ce, 0xfff30003},
+{'8', 0xb6f4d506, 0xe0bee1ed},
+{'@', 0x00000066, 0x00002f77},/*        f        x-advance: 47.464844 */
+{'M', 0x42408889, 0xc2684445},
+{'l', 0xc15ddddc, 0x00000000},
+{'l', 0xc1211114, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44450, 0xc13eeef0},
+{0, 0x41133334, 0xc1966668},
+{'q', 0x40f55554, 0xc0dddde0},
+{0, 0x419eeeef, 0xc0d77780},
+{'9', 0x0000001c, 0x000b0052},
+{'l', 0xbfd55560, 0x41700000},
+{'8', 0xfad4fae9, 0x14bc00d8},
+{'9', 0x0014ffe4, 0x003effdd},
+{'l', 0xbf800000, 0x40bbbbc0},
+{'l', 0x415eeef0, 0x00000000},
+{'l', 0xc01ddde0, 0x41611114},
+{'[', 0x00220066, 0x00000111},/*kerning*/
+{'[', 0x00270066, 0x00000111},/*kerning*/
+{'[', 0x00290066, 0x00000155},/*kerning*/
+{'[', 0x005d0066, 0x00000133},/*kerning*/
+{'[', 0x007d0066, 0x00000144},/*kerning*/
+{'[', 0x201c0066, 0x00000111},/*kerning*/
+{'[', 0x201d0066, 0x00000111},/*kerning*/
+{'@', 0x00000067, 0x00004baa},/*        g        x-advance: 75.664062 */
+{'M', 0x42791112, 0xc01dddde},
+{'q', 0xc0044440, 0x416eeef0},
+{0, 0xc149999c, 0x41b88889},
+{'q', 0xc1277778, 0x41022224},
+{0, 0xc1caaaab, 0x40f9999c},
+{'q', 0xc0e66664, 0xbe4ccd00},
+{0, 0xc1600000, 0xc0444448},
+{'9', 0xffe9ffca, 0xffbcffa5},
+{'l', 0x41155556, 0xc1377778},
+{'q', 0x40c88888, 0x40fdddde},
+{0, 0x417dddde, 0x41022222},
+{'8', 0xe164013c, 0xa736df28},
+{'l', 0x3f9999a0, 0xc0977778},
+{'q', 0xc0f77778, 0x40fbbbbd},
+{0, 0xc18d5557, 0x40f77779},
+{'q', 0xc11bbbbc, 0xbe4cccd0},
+{0, 0xc1722222, 0xc0bbbbbd},
+{'q', 0xc0aaaaac, 0xc0b77778},
+{0, 0xc0e66668, 0xc1611111},
+{'9', 0xffbefff2, 0xff7dfff8},
+{'l', 0x3e088890, 0xbfbbbbc0},
+{'q', 0x3f911110, 0xc1111114},
+{0, 0x40a22222, 0xc18d5556},
+{'q', 0x407bbbc0, 0xc109999c},
+{0, 0x412eeef0, 0xc1611114},
+{'q', 0x40e22224, 0xc0b11110},
+{0, 0x418b3333, 0xc0a88880},
+{'9', 0x0001005a, 0x00420089},
+{'4', 0xffc80013, 0x0000008a},
+{'6', 0x022dffa2, 0xfefcfec2},
+{'8', 0x450020fd, 0x42142602},
+{'8', 0x1d3c1b12, 0xcc6d023e},
+{'l', 0x40b33338, 0xc1f33334},
+{'8', 0xcbaccdea, 0x3499febc},
+{'q', 0xc08ccccc, 0x40d99998},
+{0, 0xc0b9999c, 0x4182aaaa},
+{'@', 0x00000068, 0x00004a33},/*        h        x-advance: 74.199219 */
+{'M', 0x4223bbbc, 0xc2677778},
+{'9', 0xfffeffc4, 0x0033ff97},
+{'l', 0xc1122224, 0x424ddddf},
+{'l', 0xc1966667, 0x00000000},
+{'4', 0xfccd008d, 0x00000096},
+{'l', 0xc0eeeef0, 0x4218ccce},
+{'q', 0x41077778, 0xc1188888},
+{0, 0x419c4446, 0xc1144440},
+{'q', 0x41433330, 0x3e4ccc00},
+{0, 0x41833332, 0x410bbbb8},
+{'9', 0x00430021, 0x009a0019},
+{'4', 0x016bffc4, 0x0000ff6a},
+{'l', 0x40f55550, 0xc236eef0},
+{'8', 0xbcf9d705, 0xe4c6e5f4},
+{'@', 0x00000069, 0x00002322},/*        i        x-advance: 35.132812 */
+{'M', 0x417ddddf, 0xc2b4eef0},
+{'8', 0xc516dcff, 0xe83be918},
+{'8', 0x143b0022, 0x391a1519},
+{'8', 0x3be92400, 0x17c516e8},
+{'8', 0xecc501de, 0xc7e7ebe7},
+{'m', 0x41866666, 0x4192aaac},
+{'l', 0xc1488888, 0x42904445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41488888, 0xc2904445},
+{'l', 0x41977778, 0x00000000},
+{'@', 0x0000006a, 0x00002277},/*        j        x-advance: 34.464844 */
+{'M', 0x4179999a, 0xc2b4eef0},
+{'8', 0xc516dcff, 0xe83be918},
+{'8', 0x143b0022, 0x391a1519},
+{'8', 0x3be92400, 0x17c516e8},
+{'8', 0xecc500de, 0xc8e7ebe8},
+{'m', 0xbfeeeef0, 0x4192aaac},
+{'4', 0x00000097, 0x0261ff99},
+{'q', 0xbfbbbbb0, 0x41366667},
+{0, 0xc1055555, 0x41933334},
+{'q', 0xc0d9999a, 0x40e00000},
+{0, 0xc1966667, 0x40dddddc},
+{'9', 0xffffffdb, 0xfff6ffaf},
+{'l', 0x3fc44450, 0xc1755556},
+{'8', 0x062e061c, 0xb2560149},
+{'l', 0x41500000, 0xc297999a},
+{'@', 0x0000006b, 0x000046bb},/*        k        x-advance: 70.730469 */
+{'M', 0x4230cccd, 0x00000000},
+{'l', 0xc14ccccc, 0xc1e5dddf},
+{'l', 0xc10aaaac, 0x40f11114},
+{'l', 0xc06aaaa8, 0x41a9999a},
+{'l', 0xc1966667, 0x00000000},
+{'l', 0x418dddde, 0xc2cceef0},
+{'l', 0x4196eef0, 0x00000000},
+{'l', 0xc11aaaac, 0x425e2224},
+{'l', 0x406eeef0, 0xc07bbbc0},
+{'l', 0x41aa2224, 0xc1aa2224},
+{'l', 0x41c08888, 0x00000000},
+{'l', 0xc1fb3334, 0x41f7777a},
+{'l', 0x41a00000, 0x4224cccd},
+{'l', 0xc1a55556, 0x00000000},
+{'@', 0x0000006c, 0x00002322},/*        l        x-advance: 35.132812 */
+{'M', 0x42177778, 0xc2ccccce},
+{'l', 0xc18dddde, 0x42ccccce},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x418e6667, 0xc2ccccce},
+{'l', 0x4196eeef, 0x00000000},
+{'@', 0x0000006d, 0x000072aa},/*        m        x-advance: 114.664062 */
+{'M', 0x42237778, 0xc2677778},
+{'9', 0xffffffc8, 0x0035ff9a},
+{'l', 0xc1100000, 0x424c8889},
+{'l', 0xc196eeef, 0x00000000},
+{'4', 0xfdbf0063, 0x0000008c},
+{'l', 0xbfbbbbd0, 0x41022220},
+{'q', 0x4109999a, 0xc1199998},
+{0, 0x41a88889, 0xc1166660},
+{'8', 0x1553012d, 0x42341426},
+{'q', 0x41188888, 0xc1344444},
+{0, 0x41b33334, 0xc12ffffc},
+{'q', 0x41400000, 0x3e4ccc00},
+{0, 0x41800000, 0x41088888},
+{'9', 0x00420020, 0x00980018},
+{'4', 0x016fffc3, 0x0000ff6a},
+{'l', 0x40f77780, 0xc2388889},
+{'8', 0xbefada04, 0xe4c9e5f6},
+{'9', 0xffffffc4, 0x0040ff97},
+{'l', 0xbe888800, 0x3fe66660},
+{'4', 0x0181ffbd, 0x0000ff6a},
+{'l', 0x40f77778, 0xc237bbbc},
+{'8', 0xbefad904, 0xe4c8e5f5},
+{'@', 0x0000006e, 0x00004a33},/*        n        x-advance: 74.199219 */
+{'M', 0x4223bbbc, 0xc2677778},
+{'9', 0xfffeffc5, 0x0036ff96},
+{'l', 0xc1100000, 0x424c0001},
+{'l', 0xc1966667, 0x00000000},
+{'4', 0xfdbf0064, 0x0000008b},
+{'l', 0xbfbbbbc0, 0x41077778},
+{'q', 0x410ddde0, 0xc1200000},
+{0, 0x41a80000, 0xc11bbbb8},
+{'q', 0x413eeef0, 0x3e4ccc00},
+{0, 0x417cccd0, 0x410aaaa8},
+{'9', 0x0043001e, 0x00960016},
+{'4', 0x016fffc3, 0x0000ff6a},
+{'l', 0x40f77778, 0xc2388889},
+{'8', 0xbdf8d704, 0xe6c6e6f4},
+{'@', 0x0000006f, 0x00004add},/*        o        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'@', 0x00000070, 0x00004a88},/*        p        x-advance: 74.531250 */
+{'M', 0x4215ddde, 0x3fb33334},
+{'9', 0xfffeffad, 0xffc2ff7c},
+{'l', 0xc0d33336, 0x4208ccce},
+{'l', 0xc196eef0, 0xb6000000},
+{'4', 0xfce2008a, 0x0000008a},
+{'l', 0xbf911120, 0x40e66670},
+{'q', 0x40f33330, 0xc10999a0},
+{0, 0x4192aaaa, 0xc1077778},
+{'q', 0x411ddde0, 0x3e4ccc00},
+{0, 0x41700004, 0x40bdddd0},
+{'q', 0x40a66660, 0x40b55560},
+{0, 0x40d77770, 0x41600004},
+{'9', 0x0042000c, 0x00830006},
+{'l', 0xbe4ccc00, 0x3fbbbbc0},
+{'q', 0xbf800000, 0x410cccce},
+{0, 0xc0977780, 0x418b3334},
+{'q', 0xc06eeef0, 0x4109999a},
+{0, 0xc1277778, 0x41633334},
+{'9', 0x002cffcb, 0x002bff7a},
+{'m', 0x40844448, 0xc26d1112},
+{'9', 0xfffdffc0, 0x0037ff94},
+{'l', 0xc0accccc, 0x41edddde},
+{'8', 0x38553614, 0xe64b012e},
+{'8', 0xbd2be51c, 0xb214d80e},
+{'8', 0xb003d404, 0xbdefdaff},
+{'q', 0xc0044440, 0xc0666660},
+{0, 0xc0eaaaa8, 0xc0733330},
+{'@', 0x00000071, 0x00004acc},/*        q        x-advance: 74.796875 */
+{'M', 0x42920000, 0xc2904445},
+{'4', 0x031eff76, 0x0000ff69},
+{'l', 0x40d77778, 0xc2080001},
+{'q', 0xc0f11110, 0x40f7777b},
+{0, 0xc18bbbbb, 0x40f33337},
+{'q', 0xc11bbbbc, 0xbe4cccd0},
+{0, 0xc16ddddf, 0xc0c00001},
+{'q', 0xc0a44445, 0xc0b9999a},
+{0, 0xc0d9999b, 0xc1622223},
+{'q', 0xbfd55556, 0xc1066666},
+{0, 0xbf5ddddc, 0xc182aaab},
+{'q', 0x40488889, 0xc1c1999a},
+{0, 0x41833333, 0xc2073333},
+{'q', 0x40d33334, 0xc09999a0},
+{0, 0x4181999b, 0xc0911110},
+{'9', 0x0002005a, 0x00460089},
+{'4', 0xffc40018, 0x00000086},
+{'m', 0xc24a6666, 0x4213bbbd},
+{'8', 0x44fe1efd, 0x44112601},
+{'8', 0x1e3a1d10, 0xc86c023e},
+{'l', 0x40aeeef0, 0xc1f0888a},
+{'8', 0xcaadccec, 0x19b4ffd2},
+{'8', 0x43d41ae4, 0x4eec28f2},
+{'l', 0xbe088880, 0x3fb33340},
+{'@', 0x00000072, 0x00003066},/*        r        x-advance: 48.398438 */
+{'M', 0x422d1112, 0xc25b3334},
+{'9', 0xffffffaf, 0x003bff82},
+{'l', 0xc1066666, 0x423d5556},
+{'l', 0xc196eeef, 0x00000000},
+{'4', 0xfdbf0064, 0x0000008d},
+{'l', 0xbfd55550, 0x410cccd0},
+{'q', 0x40dbbbbc, 0xc1244448},
+{0, 0x41866667, 0xc1244448},
+{'9', 0x00000015, 0x00080033},
+{'l', 0xc0155560, 0x41944446},
+{'q', 0xc0a44440, 0xbf2aaac0},
+{0, 0xc0ccccc8, 0xbf2aaac0},
+{'[', 0x00220072, 0x00000111},/*kerning*/
+{'[', 0x00270072, 0x00000111},/*kerning*/
+{'[', 0x00660072, 0x00000155},/*kerning*/
+{'[', 0x00740072, 0x00000355},/*kerning*/
+{'[', 0x00760072, 0x00000133},/*kerning*/
+{'[', 0x00770072, 0x00000122},/*kerning*/
+{'[', 0x00790072, 0x00000133},/*kerning*/
+{'[', 0x00fd0072, 0x00000133},/*kerning*/
+{'[', 0x00ff0072, 0x00000133},/*kerning*/
+{'[', 0x201c0072, 0x00000111},/*kerning*/
+{'[', 0x201d0072, 0x00000111},/*kerning*/
+{'@', 0x00000073, 0x00004422},/*        s        x-advance: 68.132812 */
+{'M', 0x42280001, 0xc1a33334},
+{'9', 0xffda0008, 0xffc7ffd3},
+{'l', 0xc0c66668, 0xbfdddde0},
+{'q', 0xc1055556, 0xc0088888},
+{0, 0xc179999b, 0xc0dbbbbc},
+{'q', 0xc0e66667, 0xc0977778},
+{0, 0xc0dbbbbc, 0xc1677778},
+{'8', 0x9a26c302, 0xc35bd724},
+{'q', 0x40d9999c, 0xc0222220},
+{0, 0x415aaaac, 0xc0199980},
+{'q', 0x412ddde0, 0x3e088800},
+{0, 0x41988888, 0x40bdddd0},
+{'9', 0x002d0041, 0x008b0042},
+{'l', 0xc1955554, 0xbd888800},
+{'8', 0xb5b7b501, 0x10c600e2},
+{'8', 0x30df10e5, 0x2f1b23fa},
+{'8', 0x113a0b22, 0x1f5c0b30},
+{'8', 0x3549132c, 0x5c1a221c},
+{'8', 0x68d640fe, 0x3a9f28d9},
+{'q', 0xc0e44448, 0x40111112},
+{0, 0xc1622222, 0x4008888a},
+{'q', 0xc12eeef0, 0xbe4cccd0},
+{0, 0xc19b3334, 0xc0ceeef0},
+{'9', 0xffceffbd, 0xff70ffbb},
+{'l', 0x418e6667, 0x3e088880},
+{'8', 0x53585301, 0xf33e0020},
+{'q', 0x40777770, 0xbfe66660},
+{0, 0x40977778, 0xc0c66668},
+{'@', 0x00000074, 0x00002cbb},/*        t        x-advance: 44.730469 */
+{'M', 0x42104445, 0xbeccccce},
+{'q', 0xc09ddde0, 0x3fddddde},
+{0, 0xc12bbbbe, 0x3fccccce},
+{'q', 0xc1199999, 0xbe088888},
+{0, 0xc1600000, 0xc0c00000},
+{'9', 0xffd1ffde, 0xff87ffe4},
+{'l', 0x40c66668, 0xc2184444},
+{'l', 0xc1244445, 0xb6800000},
+{'l', 0x401dddde, 0xc1611114},
+{'l', 0x41233334, 0x00000000},
+{'l', 0x40488888, 0xc18e6664},
+{'l', 0x4196eeef, 0x00000000},
+{'l', 0xc0488880, 0x418e6664},
+{'l', 0x413eeeec, 0x00000000},
+{'4', 0x0070ffed, 0x0000ffa2},
+{'l', 0xc0c66668, 0x4210cccd},
+{'8', 0x29041afd, 0x0f240e07},
+{'q', 0x40088888, 0x3e0888c0},
+{0, 0x40b55554, 0xbeccccc0},
+{'l', 0xbfaaaaa0, 0x416bbbbd},
+{'@', 0x00000075, 0x00004a33},/*        u        x-advance: 74.199219 */
+{'M', 0x422b7778, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc0f11112},
+{'q', 0xc1011110, 0x41111112},
+{0, 0xc19f7778, 0x410dddde},
+{'q', 0xc13bbbbd, 0xbe4cccb0},
+{0, 0xc182aaab, 0xc1022222},
+{'9', 0xffc0ffdc, 0xff6bffe4},
+{'4', 0xfe8b003e, 0x00000096},
+{'l', 0xc0fddde0, 0x423b7778},
+{'8', 0x3c0722fc, 0x1b32190b},
+{'9', 0x00020046, 0xffca0074},
+{'l', 0x410eeef0, 0xc24c0001},
+{'l', 0x41977776, 0x00000000},
+{'l', 0xc1488888, 0x42904445},
+{'l', 0xc18c4444, 0x00000000},
+{'@', 0x00000076, 0x00004300},/*        v        x-advance: 67.000000 */
+{'M', 0x428eaaab, 0xc2904445},
+{'l', 0xc20b7778, 0x42904445},
+{'l', 0xc18f7777, 0x00000000},
+{'l', 0xc1466668, 0xc2904445},
+{'l', 0x41991112, 0x00000000},
+{'l', 0x40aaaaac, 0x4240ccce},
+{'l', 0x41a3bbbc, 0xc240ccce},
+{'l', 0x41a22222, 0x00000000},
+{'[', 0x00220076, 0x00000100},/*kerning*/
+{'[', 0x00270076, 0x00000100},/*kerning*/
+{'[', 0x00660076, 0x000000dd},/*kerning*/
+{'[', 0x03c00076, 0x000000bb},/*kerning*/
+{'[', 0x201c0076, 0x00000100},/*kerning*/
+{'[', 0x201d0076, 0x00000100},/*kerning*/
+{'@', 0x00000077, 0x00006155},/*        w        x-advance: 97.332031 */
+{'M', 0x42ca6667, 0xc2904445},
+{'l', 0xc1f22224, 0x42904445},
+{'l', 0xc17bbbb8, 0x00000000},
+{'l', 0xc0acccd0, 0xc234cccd},
+{'l', 0xc1a88889, 0x4234cccd},
+{'l', 0xc17bbbbd, 0x00000000},
+{'l', 0xc0aaaaac, 0xc2904445},
+{'l', 0x418cccce, 0x00000000},
+{'l', 0x3f999980, 0x4235999a},
+{'l', 0x41a44446, 0xc235999a},
+{'l', 0x41599998, 0x00000000},
+{'l', 0x40999998, 0x4236eef0},
+{'l', 0x41888888, 0xc236eef0},
+{'l', 0x4195dde0, 0x00000000},
+{'@', 0x00000078, 0x00004377},/*        x        x-advance: 67.464844 */
+{'M', 0x41d77778, 0xc2904445},
+{'l', 0x41000000, 0x41aaaaac},
+{'l', 0x41722224, 0xc1aaaaac},
+{'l', 0x41a91112, 0x00000000},
+{'l', 0xc1d11112, 0x4210ccce},
+{'l', 0x416aaaac, 0x420fbbbc},
+{'l', 0xc1980002, 0x00000000},
+{'l', 0xc10ffffe, 0xc1b4cccd},
+{'l', 0xc17ddddf, 0x41b4cccd},
+{'l', 0xc1aa2223, 0x00000000},
+{'l', 0x41d9999a, 0xc2177778},
+{'l', 0xc15fffff, 0xc2091112},
+{'l', 0x41991112, 0x00000000},
+{'@', 0x00000079, 0x00004288},/*        y        x-advance: 66.531250 */
+{'M', 0x41f11112, 0x412dddde},
+{'q', 0xc06aaab0, 0x40fbbbbc},
+{0, 0xc118888a, 0x41533334},
+{'q', 0xc0bbbbba, 0x40aaaaac},
+{0, 0xc1744444, 0x40aaaaac},
+{'9', 0x0000ffe6, 0xfff5ffb8},
+{'4', 0xff8b000b, 0x00010014},
+{'9', 0x0000004d, 0xffc20070},
+{'l', 0x40666668, 0xc0d55556},
+{'l', 0xc13ccccc, 0xc28e4445},
+{'l', 0x419bbbbc, 0x00000000},
+{'l', 0x40a44444, 0x4232eef0},
+{'l', 0x41a55557, 0xc232eef0},
+{'l', 0x41a6eeee, 0x00000000},
+{'l', 0xc228cccd, 0x42a60001},
+{'[', 0x00220079, 0x00000100},/*kerning*/
+{'[', 0x00270079, 0x00000100},/*kerning*/
+{'[', 0x00660079, 0x000000dd},/*kerning*/
+{'[', 0x03c00079, 0x000000bb},/*kerning*/
+{'[', 0x201c0079, 0x00000100},/*kerning*/
+{'[', 0x201d0079, 0x00000100},/*kerning*/
+{'@', 0x0000007a, 0x00004377},/*        z        x-advance: 67.464844 */
+{'M', 0x4109999a, 0xc2626667},
+{'l', 0x402eeef0, 0xc178888c},
+{'l', 0x4260ccce, 0x00000000},
+{'l', 0xc00888a0, 0x41455558},
+{'l', 0xc2226666, 0x42308889},
+{'l', 0x4207bbbc, 0x3e0888c0},
+{'l', 0xc02eeef0, 0x41788889},
+{'l', 0xc268ccce, 0x00000000},
+{'l', 0x400cccd0, 0xc14bbbbc},
+{'l', 0x42215556, 0xc22eeef0},
+{'l', 0xc1fddddf, 0xbe088800},
+{'@', 0x0000007b, 0x00002bcc},/*        {        x-advance: 43.796875 */
+{'M', 0x41377778, 0xc1a5ddde},
+{'8', 0xb6f8d405, 0xdfc2e3f3},
+{'l', 0x3fa22220, 0xc15cccd0},
+{'9', 0xfffc0062, 0xff8a0072},
+{'l', 0x40088888, 0xc1744448},
+{'9', 0xff53001f, 0xff1c00d7},
+{'l', 0x40488880, 0x41311110},
+{'8', 0x41b414cc, 0x63e22ce9},
+{'l', 0xbfe66660, 0x41511114},
+{'q', 0xbfe66660, 0x41644448},
+{0, 0xc1711112, 0x41a8888a},
+{'8', 0x48361c27, 0x5a0b2a0f},
+{'l', 0xbfe66670, 0x4159999a},
+{'8', 0x5d002efa, 0x44362d05},
+{'l', 0xc0888888, 0x412aaaab},
+{'q', 0xc12bbbbc, 0xc0666668},
+{0, 0xc17aaaab, 0xc13bbbbc},
+{'q', 0xc09bbbbc, 0xc1022222},
+{0, 0xc06aaaac, 0xc19a2223},
+{'l', 0x3feeeef0, 0xc15aaaaa},
+{'@', 0x0000007c, 0x00002188},/*        |        x-advance: 33.531250 */
+{'M', 0x41fcccce, 0xc2c22223},
+{'l', 0xc1900001, 0x42e62223},
+{'l', 0xc1377778, 0x00000000},
+{'l', 0x41900001, 0xc2e62223},
+{'l', 0x41377778, 0x00000000},
+{'@', 0x0000007d, 0x00002bcc},/*        }        x-advance: 43.796875 */
+{'M', 0x4202aaab, 0xc2777778},
+{'8', 0x4b082dfb, 0x213e1d0d},
+{'l', 0xbfa22220, 0x415cccd0},
+{'9', 0x0004ff9d, 0x0075ff8e},
+{'l', 0xc0044440, 0x416dddde},
+{'9', 0x00b1ffe1, 0x00e9ff28},
+{'l', 0xc048888a, 0xc1322223},
+{'8', 0xc04ced34, 0xa01ed417},
+{'l', 0x3ff7777c, 0xc1622223},
+{'q', 0x40000000, 0xc15eeef0},
+{0, 0x41755556, 0xc1a3bbbc},
+{'8', 0xb9c8e4d8, 0xa5f5d5f0},
+{'l', 0x3fe66668, 0xc159999c},
+{'8', 0xa300d206, 0xbccad3fb},
+{'l', 0x40888888, 0xc1288888},
+{'q', 0x412aaaac, 0x40622220},
+{0, 0x4179999a, 0x413aaaa8},
+{'q', 0x409ddddc, 0x41011110},
+{0, 0x406eeef8, 0x4199999c},
+{'l', 0xbfeeef00, 0x41599998},
+{'@', 0x0000007e, 0x000055ee},/*        ~        x-advance: 85.929688 */
+{'M', 0x42857778, 0xc253bbbc},
+{'l', 0x415bbbb8, 0xbd888a00},
+{'8', 0x6ae736fd, 0x55c233eb},
+{'8', 0x209921d7, 0xeeb800d8},
+{'8', 0xd0c3eee1, 0xd8d3e2e3},
+{'8', 0xf7def7f1, 0x1fc600d9},
+{'9', 0x001fffee, 0x0040ffe8},
+{'l', 0xc15eeef0, 0xbe4ccd00},
+{'8', 0x9719ca03, 0xad3ecd15},
+{'q', 0x40a44444, 0xc0822228},
+{0, 0x414dddde, 0xc0777780},
+{'q', 0x41155558, 0x3e4ccd00},
+{0, 0x418aaaac, 0x410bbbbc},
+{'8', 0x1e21100e, 0x0f2b0e13},
+{'8', 0xe13b0028, 0xbe19e013},
+{'@', 0x000000a0, 0x000021aa},/*                 x-advance: 33.664062 */
+{'@', 0x000000a1, 0x00002577},/*        ¡        x-advance: 37.464844 */
+{'M', 0x42055556, 0xc27e6667},
+{'8', 0x3ce92300, 0x18c518e9},
+{'8', 0xebc501dd, 0xc6e7eae8},
+{'8', 0xc516ddff, 0xe73ce818},
+{'8', 0x153bff22, 0x39191618},
+{'m', 0xc20f3334, 0x42b06667},
+{'l', 0x415ddddf, 0xc2866667},
+{'l', 0x417aaaab, 0x00000000},
+{'l', 0xc1177778, 0x42866667},
+{'l', 0xc1a08889, 0xb6000000},
+{'@', 0x000000a2, 0x00004c44},/*        ¢        x-advance: 76.265625 */
+{'M', 0x42817778, 0xc1c80001},
+{'q', 0xbf3bbc00, 0x412eeef0},
+{0, 0xc1044444, 0x418bbbbc},
+{'9', 0x0033ffc5, 0x0042ff73},
+{'4', 0x007cffe6, 0x0000ff98},
+{'l', 0x40555558, 0xc17bbbbc},
+{'q', 0xc149999b, 0xc037777a},
+{0, 0xc1877778, 0xc1566668},
+{'9', 0xffacffde, 0xff4fffe7},
+{'l', 0x3e4cccc0, 0xbff77780},
+{'q', 0x3fd55558, 0xc15ccccc},
+{0, 0x41177778, 0xc1be6666},
+{'9', 0xffb0003e, 0xff9e00b0},
+{'4', 0xff890019, 0x00000068},
+{'l', 0xc0488880, 0x41722220},
+{'q', 0x411ddddc, 0x401ddde0},
+{0, 0x41655554, 0x41233334},
+{'9', 0x003d0023, 0x008a0022},
+{'l', 0xc18c4446, 0x00000000},
+{'8', 0xbaefd800, 0xe0c2e2ef},
+{'8', 0x1cb1ffcf, 0x59d31de3},
+{'q', 0xc0000000, 0x40ecccd0},
+{0, 0xbfeeeef0, 0x4188888a},
+{'8', 0x43102600, 0x1d3d1c10},
+{'8', 0xea450129, 0xc124e81c},
+{'l', 0x418d5556, 0xbe088880},
+{'@', 0x000000a3, 0x00004ebb},/*        £        x-advance: 78.730469 */
+{'M', 0x3e4cccce, 0x00000000},
+{'4', 0xff7f000d, 0x00020031},
+{'8', 0xd829f41e, 0xc610e50b},
+{'l', 0x3faaaaa8, 0xc1255554},
+{'l', 0xc1288888, 0x00000000},
+{'4', 0xff830015, 0x00000050},
+{'l', 0x3fe66670, 0xc1722224},
+{'q', 0x3fc44440, 0xc1544448},
+{0, 0x4129999a, 0xc1aaaaac},
+{'q', 0x41122222, 0xc1011110},
+{0, 0x41b4cccd, 0xc0f77770},
+{'q', 0x414bbbc0, 0x3e888800},
+{0, 0x419ddde0, 0x40f77770},
+{'9', 0x003b0038, 0x00a00035},
+{'l', 0xc194cccc, 0xbd888800},
+{'8', 0xbff3da01, 0xe4c6e5f1},
+{'8', 0x20bbffd4, 0x48e220e8},
+{'l', 0xbfe66660, 0x41733334},
+{'l', 0x41a0888a, 0x00000000},
+{'4', 0x007dffeb, 0x0000ff65},
+{'l', 0xbf888880, 0x41144444},
+{'9', 0x003dfff8, 0x006affcb},
+{'l', 0x422a6668, 0xbe8888a0},
+{'l', 0xc03bbbc0, 0x41811112},
+{'l', 0xc2880001, 0x00000000},
+{'@', 0x000000a4, 0x00005baa},/*        ¤        x-advance: 91.664062 */
+{'M', 0x42a2eeef, 0xc0dddddf},
+{'4', 0x0045ffb1, 0xffbaffcb},
+{'q', 0xc1411110, 0x41088889},
+{0, 0xc1c55556, 0x41066667},
+{'9', 0xffffff98, 0xffbdff50},
+{'4', 0x0046ffae, 0xffacffbf},
+{'l', 0x41244445, 0xc1066668},
+{'q', 0xc0733336, 0xc1444446},
+{0, 0xc01ddde0, 0xc1b77778},
+{'9', 0xff8f000d, 0xff38005b},
+{'4', 0xffadffc3, 0xffbb004e},
+{'l', 0x40e8888c, 0x41188888},
+{'q', 0x413aaaaa, 0xc0f77770},
+{0, 0x41bccccd, 0xc0eeeef0},
+{'9', 0x00010063, 0x003d00ab},
+{'4', 0xffb2005a, 0x00540041},
+{'l', 0xc1333338, 0x41133330},
+{'q', 0x40822220, 0x414999a0},
+{0, 0x402eef00, 0x41bc4446},
+{'9', 0x006cfff4, 0x00c0ffad},
+{'6', 0x0050003b, 0xfef8fe12},
+{'q', 0xbfbbbbc0, 0x41266666},
+{0, 0x40777778, 0x419b3333},
+{'q', 0x40aaaaac, 0x410eeef0},
+{0, 0x41866667, 0x41155556},
+{'q', 0x41044444, 0x3e4cccc0},
+{0, 0x41722224, 0xc0800000},
+{'q', 0x40ddddd8, 0xc0888888},
+{0, 0x41366664, 0xc1333334},
+{'q', 0x40911110, 0xc0dddde0},
+{0, 0x40b55560, 0xc16bbbbc},
+{'q', 0x3fbbbbc0, 0xc1255558},
+{0, 0xc0777780, 0xc19a2222},
+{'q', 0xc0a88890, 0xc1100000},
+{0, 0xc185dde0, 0xc1155558},
+{'q', 0xc1044444, 0xbe888800},
+{0, 0xc1733334, 0x407bbbc0},
+{'q', 0xc0dbbbb8, 0x40866668},
+{0, 0xc1366666, 0x41322224},
+{'q', 0xc0911110, 0x40ddddd8},
+{0, 0xc0b55554, 0x416bbbbc},
+{'@', 0x000000a5, 0x00004700},/*        ¥        x-advance: 71.000000 */
+{'M', 0x426fbbbd, 0xc194cccd},
+{'l', 0xc194ccce, 0x00000000},
+{'l', 0xc0511110, 0x4194cccd},
+{'l', 0xc19bbbbd, 0x00000000},
+{'l', 0x40511118, 0xc194cccd},
+{'l', 0xc19e6667, 0x00000000},
+{'l', 0x3ffffffc, 0xc138888a},
+{'l', 0x419dddde, 0x00000000},
+{'l', 0x3fb33330, 0xc0f77778},
+{'l', 0xc19e6667, 0x00000000},
+{'l', 0x40000004, 0xc139999c},
+{'l', 0x4182aaac, 0x00000000},
+{'l', 0xc14aaaae, 0xc23e6667},
+{'l', 0x419bbbbc, 0x00000000},
+{'l', 0x41000002, 0x4215dddf},
+{'l', 0x41a80000, 0xc215dddf},
+{'l', 0x41aa2222, 0x00000000},
+{'l', 0xc1ea2222, 0x423ddddf},
+{'l', 0x415ddddc, 0x3e088800},
+{'l', 0xc00cccc0, 0x4139999c},
+{'l', 0xc1944446, 0x00000000},
+{'l', 0xbfaaaaa0, 0x40f77778},
+{'l', 0x41955556, 0x00000000},
+{'l', 0xc0044440, 0x4138888a},
+{'@', 0x000000a6, 0x00002166},/*        ¦        x-advance: 33.398438 */
+{'M', 0x420c4445, 0xc2c22223},
+{'l', 0xc10cccce, 0x424a2223},
+{'4', 0x0000ff79, 0xfe6c0046},
+{'6', 0x00000087, 0x0398ff61},
+{'l', 0xc1880001, 0x00000000},
+{'l', 0x41144445, 0xc2540000},
+{'l', 0x41877778, 0x00000000},
+{'l', 0xc1133335, 0x42540000},
+{'@', 0x000000a7, 0x00005333},/*        §        x-advance: 83.199219 */
+{'M', 0x4285bbbc, 0x40977778},
+{'q', 0xbf199980, 0x41177778},
+{0, 0xc0c66668, 0x41722222},
+{'q', 0xc0b33330, 0x40b33334},
+{0, 0xc15ccccc, 0x41011112},
+{'q', 0xc1022224, 0x40199998},
+{0, 0xc1833333, 0x40111110},
+{'q', 0xc157777a, 0xbe4ccc80},
+{0, 0xc1b80001, 0xc0d55554},
+{'9', 0xffccffb5, 0xff57ffb7},
+{'l', 0x41955556, 0xb5000000},
+{'8', 0x4b1e35ff, 0x15521520},
+{'8', 0xf2530028, 0xc234f02a},
+{'8', 0xcdf0e006, 0xe3cbedeb},
+{'l', 0xc0d99998, 0xc0111112},
+{'8', 0xd696efca, 0xbdade7cd},
+{'8', 0x93e5d6e0, 0xa621ca03},
+{'q', 0x40733334, 0xc0933338},
+{0, 0x41188889, 0xc0f77778},
+{'q', 0xc0ccccce, 0xc0f11118},
+{0, 0xc0b55556, 0xc192aaaa},
+{'q', 0x3f2aaab0, 0xc1155558},
+{0, 0x40caaaaa, 0xc1711118},
+{'q', 0x40b55558, 0xc0b99990},
+{0, 0x415ddde0, 0xc1066668},
+{'q', 0x41033334, 0xc0266660},
+{0, 0x4183bbbc, 0xc01dddc0},
+{'q', 0x41588888, 0x3e4ccc00},
+{0, 0x41b11112, 0x40e88880},
+{'9', 0x00380045, 0x00a90042},
+{'l', 0xc1955558, 0x00000000},
+{'8', 0x9a9d9c03, 0x10acffd6},
+{'8', 0x40cd11d6, 0x350d22fa},
+{'9', 0x00120014, 0x001c0034},
+{'l', 0x40e22220, 0x400cccc0},
+{'8', 0x2a6b1037, 0x44531934},
+{'8', 0x6e1b2a20, 0x5adf36fd},
+{'q', 0xc06aaaa0, 0x408eeef0},
+{0, 0xc1166668, 0x40f33336},
+{'9', 0x003b0032, 0x0093002c},
+{'m', 0xc1955556, 0xc1cbbbbc},
+{'8', 0xb03de034, 0xcaf2de06},
+{'9', 0xffecffeb, 0xffdcffc2},
+{'l', 0xc1655554, 0xc09ddde0},
+{'8', 0x50c71dd0, 0x380c23fa},
+{'q', 0x401999a0, 0x40266668},
+{0, 0x40d33338, 0x40844444},
+{'l', 0x41766664, 0x40a44448},
+{'@', 0x000000a8, 0x00003dcc},/*        ¨        x-advance: 61.796875 */
+{'M', 0x41600001, 0xc2b5bbbc},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4446, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000a9, 0x000067ee},/*        ©        x-advance: 103.929688 */
+{'M', 0x40dddddf, 0xc2408889},
+{'q', 0x3fb33334, 0xc1544444},
+{0, 0x4109999a, 0xc1c66666},
+{'q', 0x40e88888, 0xc1388890},
+{0, 0x41955555, 0xc194ccd0},
+{'q', 0x41366668, 0xc0e44440},
+{0, 0x41ca2224, 0xc0dbbbb0},
+{'q', 0x41544444, 0x3e4ccc00},
+{0, 0x41b44446, 0x40ecccc0},
+{'q', 0x41144440, 0x40e44450},
+{0, 0x415aaaa8, 0x4192aaac},
+{'q', 0x408cccd0, 0x41333334},
+{0, 0x40488880, 0x41bd5556},
+{'q', 0xbfb33340, 0x41522224},
+{0, 0xc10aaaa8, 0x41c5dddf},
+{'q', 0xc0e66670, 0x4139999b},
+{0, 0xc194cccc, 0x4195ddde},
+{'q', 0xc136666c, 0x40e44448},
+{0, 0xc1c9999c, 0x40dbbbbf},
+{'q', 0xc1555558, 0xbe4cccd0},
+{0, 0xc1b4cccd, 0xc0ecccce},
+{'q', 0xc1144446, 0xc0e66667},
+{0, 0xc15aaaac, 0xc1933333},
+{'9', 0xffa6ffdd, 0xff43ffe7},
+{'m', 0x41011112, 0x00000000},
+{'q', 0xbfb33340, 0x41222220},
+{0, 0x3fddddd0, 0x419bbbbc},
+{'q', 0x40488888, 0x41155556},
+{0, 0x41266668, 0x41766667},
+{'q', 0x40eaaaa8, 0x40c22223},
+{0, 0x41933334, 0x40c88889},
+{'q', 0x41399998, 0x3e888890},
+{0, 0x41aa2222, 0xc0b55555},
+{'q', 0x411bbbc0, 0xc0c00002},
+{0, 0x41808888, 0xc17aaaab},
+{'q', 0x40caaab0, 0xc11bbbbe},
+{0, 0x40fbbbc0, 0xc1a5dddf},
+{'q', 0x3fb33340, 0xc1211110},
+{0, 0xbfddddc0, 0xc19b3332},
+{'q', 0xc04888a0, 0xc1155558},
+{0, 0xc1277778, 0xc1755558},
+{'q', 0xc0e88890, 0xc0c22220},
+{0, 0xc1922224, 0xc0c88890},
+{'q', 0xc139999c, 0xbe888800},
+{0, 0xc1aaaaac, 0x40b55560},
+{'q', 0xc11bbbbc, 0x40bddde0},
+{0, 0xc1808888, 0x41799998},
+{'9', 0x004dffce, 0x00a5ffc2},
+{'m', 0x423b3334, 0x41066668},
+{'l', 0x41222220, 0xbd888a00},
+{'q', 0xbf2aaa80, 0x41211112},
+{0, 0xc0d99990, 0x417aaaac},
+{'q', 0xc0c22228, 0x40b33334},
+{0, 0xc1822224, 0x40aaaaac},
+{'q', 0xc12bbbbc, 0xbe888880},
+{0, 0xc17bbbbc, 0xc1011112},
+{'9', 0xffc2ffd9, 0xff73ffdf},
+{'l', 0x3f4ccce0, 0xc0fddde0},
+{'q', 0x3f888880, 0xc1277778},
+{0, 0x40f11114, 0xc1922222},
+{'q', 0x40ceeef0, 0xc0f999a0},
+{0, 0x418e6666, 0xc0f33330},
+{'q', 0x411bbbbc, 0x3e4ccc00},
+{0, 0x41700004, 0x40bbbbb0},
+{'9', 0x002c002a, 0x007a0029},
+{'l', 0xc1222220, 0xbe088800},
+{'8', 0xbbf2d502, 0xe5c1e6f0},
+{'8', 0x29a9ffc7, 0x5ddc2ae3},
+{'l', 0xbf6eeec0, 0x41011110},
+{'8', 0x58082bfc, 0x2d432b0d},
+{'q', 0x41344444, 0x3eeeef00},
+{0, 0x41555554, 0xc13eeeee},
+{'@', 0x000000aa, 0x00003acc},/*        ª        x-advance: 58.796875 */
+{'M', 0x42255556, 0xc23b3334},
+{'l', 0xbe4ccd00, 0xc0999998},
+{'8', 0x2c952cd0, 0xe1a800cb},
+{'8', 0xabdfe1de, 0xb11dcd00},
+{'8', 0xdb49e51d, 0xf656f62b},
+{'4', 0x00010038, 0xffe30006},
+{'8', 0xd3fde604, 0xecdbedf8},
+{'9', 0xfffeffc1, 0x0034ffb2},
+{'l', 0xc138888a, 0xbf5dde00},
+{'q', 0x3f0888a0, 0xc1044448},
+{0, 0x40dddde0, 0xc1400000},
+{'q', 0x40cccccc, 0xc0733340},
+{0, 0x41600002, 0xc06aaac0},
+{'8', 0x29660141, 0x6a212825},
+{'4', 0x00b9ffe4, 0x001ffffe},
+{'9', 0x00180000, 0x00310004},
+{'6', 0x0000ffa9, 0xffbbffa5},
+{'9', 0x00000024, 0xffdf0055},
+{'4', 0xffb7000e, 0x0000ffd4},
+{'8', 0x0ec001e0, 0x30da0de0},
+{'q', 0xbf6eeee0, 0x40a88888},
+{0, 0x40b77778, 0x40aeeef0},
+{'@', 0x000000ab, 0x000042cc},/*        «        x-advance: 66.796875 */
+{'M', 0x4193bbbc, 0xc1033334},
+{'l', 0xc1677778, 0xc1cf7778},
+{'l', 0x00000000, 0xbfb33340},
+{'l', 0x41b00001, 0xc1d08888},
+{'l', 0x4159999a, 0x00000000},
+{'4', 0x00ddff58, 0x00cb0055},
+{'6', 0x0001ffaa, 0x000000c7},
+{'l', 0xc1677778, 0xc1cf7778},
+{'l', 0x00000000, 0xbfb33340},
+{'l', 0x41b00000, 0xc1d08888},
+{'l', 0x415999a0, 0x00000000},
+{'l', 0xc1a80002, 0x41ddddde},
+{'l', 0x412aaaac, 0x41cbbbbc},
+{'l', 0xc12cccd0, 0x3e4ccd00},
+{'@', 0x000000ac, 0x00004900},/*        ¬        x-advance: 73.000000 */
+{'M', 0x41288889, 0xc256aaab},
+{'l', 0x4258888a, 0x00000000},
+{'l', 0xc0a00008, 0x41e5ddde},
+{'l', 0xc1511110, 0x00000000},
+{'l', 0x40444440, 0xc18aaaac},
+{'l', 0xc2248889, 0x00000000},
+{'l', 0x40000004, 0xc1366664},
+{'@', 0x000000ad, 0x00003366},/*        ­        x-advance: 51.398438 */
+{'M', 0x42351112, 0xc245999a},
+{'l', 0xc02eeef0, 0x41799998},
+{'l', 0xc2122223, 0x00000000},
+{'l', 0x40333334, 0xc1799998},
+{'l', 0x4211dddf, 0x00000000},
+{'@', 0x000000ae, 0x000067ee},/*        ®        x-advance: 103.929688 */
+{'M', 0x40dddddf, 0xc2408889},
+{'q', 0x3fb33334, 0xc1544444},
+{0, 0x4109999a, 0xc1c66666},
+{'q', 0x40e88888, 0xc1388890},
+{0, 0x41955555, 0xc194ccd0},
+{'q', 0x41366668, 0xc0e22220},
+{0, 0x41ca2224, 0xc0dbbbb0},
+{'q', 0x41544444, 0x3e4ccc00},
+{0, 0x41b44446, 0x40ecccc0},
+{'q', 0x41144440, 0x40e44450},
+{0, 0x415aaaa8, 0x4192aaac},
+{'q', 0x408cccd0, 0x41333334},
+{0, 0x40488880, 0x41bd5556},
+{'q', 0xbfb33340, 0x41522224},
+{0, 0xc10aaaa8, 0x41c5dddf},
+{'q', 0xc0e66670, 0x4139999b},
+{0, 0xc194cccc, 0x4195ddde},
+{'q', 0xc136666c, 0x40e44448},
+{0, 0xc1c9999c, 0x40dbbbbf},
+{'q', 0xc1555558, 0xbe4cccd0},
+{0, 0xc1b4cccd, 0xc0ecccce},
+{'q', 0xc1144446, 0xc0e66667},
+{0, 0xc15aaaac, 0xc1933333},
+{'9', 0xffa6ffdd, 0xff43ffe7},
+{'m', 0x41011112, 0x00000000},
+{'q', 0xbfbbbbc8, 0x41222220},
+{0, 0x3fd55550, 0x419bbbbc},
+{'q', 0x404cccc8, 0x41155556},
+{0, 0x41277778, 0x41766667},
+{'q', 0x40eaaaa8, 0x40c22223},
+{0, 0x4192aaaa, 0x40c88889},
+{'q', 0x413aaaac, 0x3e888890},
+{0, 0x41aaaaac, 0xc0b55555},
+{'q', 0x411bbbc0, 0xc0c00002},
+{0, 0x41808888, 0xc17aaaab},
+{'q', 0x40caaab0, 0xc11bbbbe},
+{0, 0x40fbbbc0, 0xc1a5dddf},
+{'q', 0x3fb33340, 0xc1211110},
+{0, 0xbfddddc0, 0xc19b3332},
+{'q', 0xc04888a0, 0xc1155558},
+{0, 0xc1277778, 0xc1755558},
+{'q', 0xc0e88890, 0xc0c22220},
+{0, 0xc1922224, 0xc0c88890},
+{'q', 0xc139999c, 0xbe888800},
+{0, 0xc1aaaaac, 0x40b55560},
+{'q', 0xc11bbbbc, 0x40bddde0},
+{0, 0xc1808888, 0x41799998},
+{'9', 0x004dffce, 0x00a5ffc2},
+{'m', 0x421c0001, 0x40977778},
+{'l', 0xc1322224, 0xbe088900},
+{'l', 0xc0622220, 0x41b3bbbd},
+{'4', 0x0000ffb1, 0xfe3b0047},
+{'l', 0x41888888, 0x3d888800},
+{'8', 0x216d013e, 0x652c2030},
+{'8', 0x3bea24ff, 0x28ce16ec},
+{'8', 0x3221131a, 0x3d041d06},
+{'9', 0x0031fffb, 0x003ffffc},
+{'4', 0x00210002, 0x000a0000},
+{'l', 0xc11ddde0, 0xbd888900},
+{'8', 0xdafeedfd, 0xbc06ea00},
+{'8', 0xcdf9df03, 0xecd2eef5},
+{'m', 0xc0e66668, 0xc1cbbbbc},
+{'4', 0x0083ffec, 0x0000003d},
+{'8', 0xf141ff20, 0xce28f221},
+{'8', 0xccf2d808, 0xf3c8f4ea},
+{'l', 0xc1166668, 0xbd888800},
+{'@', 0x000000af, 0x00004255},/*        ¯        x-advance: 66.332031 */
+{'M', 0x4280eeef, 0xc2c20001},
+{'l', 0xbfddddc0, 0x41322228},
+{'l', 0xc2333334, 0x00000000},
+{'l', 0x3fe66660, 0xc1322228},
+{'l', 0x4232eeef, 0x00000000},
+{'@', 0x000000b0, 0x00003377},/*        °        x-advance: 51.464844 */
+{'M', 0x41733334, 0xc29ecccd},
+{'8', 0x952cc401, 0xd369d22b},
+{'8', 0x2c5d0139, 0x62222b24},
+{'8', 0x69d53bff, 0x2c982dd6},
+{'8', 0xd6a2ffc7, 0x9fdcd6db},
+{'m', 0x41177778, 0xbe088a00},
+{'8', 0x2b0a18fd, 0x1228130e},
+{'8', 0xec32001d, 0xcf19eb15},
+{'8', 0xd4f7e803, 0xecdaecf4},
+{'8', 0x16cc00e3, 0x32e615ea},
+{'@', 0x000000b1, 0x00004733},/*        ±        x-advance: 71.199219 */
+{'M', 0x42846667, 0xc23b3334},
+{'l', 0xc1a9999a, 0x00000000},
+{'l', 0xc0733340, 0x41c2aaac},
+{'l', 0xc184cccd, 0x00000000},
+{'l', 0x40777780, 0xc1c2aaac},
+{'l', 0xc1ad5556, 0x00000000},
+{'l', 0x40222220, 0xc1808888},
+{'l', 0x41accccd, 0x00000000},
+{'l', 0x40666670, 0xc1b6eef0},
+{'l', 0x41844444, 0x00000000},
+{'4', 0x00b6ffe4, 0x000000aa},
+{'6', 0x0080ffec, 0x00f8ffcb},
+{'l', 0xc0222220, 0x417bbbbd},
+{'l', 0xc25fbbbd, 0xb3900000},
+{'l', 0x401ddde3, 0xc17bbbbd},
+{'l', 0x42600001, 0x00000000},
+{'@', 0x000000b2, 0x00003200},/*        ²        x-advance: 50.000000 */
+{'M', 0x423eaaab, 0xc25d999a},
+{'l', 0xc0000000, 0x412eeef0},
+{'4', 0x0000febf, 0xffb0000d},
+{'l', 0x41a77778, 0xc1866666},
+{'8', 0xd032e124, 0xdc11ef0d},
+{'8', 0xd7ded709, 0x12d500e5},
+{'9', 0x0011fff0, 0x002affeb},
+{'l', 0xc158888a, 0x3e088a00},
+{'q', 0x3eeeef00, 0xc1088890},
+{0, 0x40ccccd0, 0xc1588890},
+{'q', 0x40c00000, 0xc0a22220},
+{0, 0x41666666, 0xc0a00000},
+{'8', 0x1f6a003c, 0x612c1e2e},
+{'8', 0x61d43aff, 0x44aa25d6},
+{'l', 0xc10aaaaa, 0x40b55558},
+{'l', 0x41b33333, 0x3e088900},
+{'@', 0x000000b3, 0x00003200},/*        ³        x-advance: 50.000000 */
+{'M', 0x41b11112, 0xc2857778},
+{'4', 0xffb7000d, 0x00000025},
+{'8', 0xf42dff18, 0xda1bf515},
+{'8', 0xe4f7ed04, 0xf7e2f7f3},
+{'9', 0x0000ffd6, 0x0020ffc7},
+{'l', 0xc15ccccd, 0x3e088800},
+{'8', 0xa334c003, 0xe46ce331},
+{'8', 0x1a690036, 0x5a321a33},
+{'8', 0x3de527ff, 0x24c615e7},
+{'8', 0x5a3d143e, 0x4be42e00},
+{'8', 0x29bb1ce4, 0x0baf0cd7},
+{'8', 0xde95ffc2, 0x9ed2dfd4},
+{'l', 0x414eeeef, 0x3d888800},
+{'8', 0x2b362b03, 0xf42d0018},
+{'8', 0xdb1bf415, 0xdef6e705},
+{'q', 0xc0000000, 0xbf9999c0},
+{0, 0xc0977774, 0xbfa22240},
+{'l', 0xc0e44444, 0xbd888800},
+{'@', 0x000000b4, 0x00002c00},/*        ´        x-advance: 44.000000 */
+{'M', 0x41477778, 0xc2a3999a},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a99999, 0x41a4ccd0},
+{'l', 0xc1844445, 0x00000000},
+{'@', 0x000000b5, 0x00005188},/*        µ        x-advance: 81.531250 */
+{'M', 0x42044445, 0x3fbbbbbc},
+{'9', 0x0000ffcf, 0xffe7ffa7},
+{'l', 0xc0b9999c, 0x41ebbbbd},
+{'l', 0xc1966667, 0x00000000},
+{'4', 0xfce2008a, 0x00000096},
+{'l', 0xc0dbbbbc, 0x4225999a},
+{'8', 0x56012bfb, 0x2c3e2a06},
+{'9', 0x00020046, 0xffca0075},
+{'l', 0x41100000, 0xc24bbbbd},
+{'l', 0x4196eef2, 0x00000000},
+{'4', 0x0241ff9c, 0x0000ff7c},
+{'l', 0x3f1999c0, 0xc0933334},
+{'q', 0xc0e22228, 0x40c44445},
+{0, 0xc1766668, 0x40c22223},
+{'@', 0x000000b6, 0x000040ee},/*        ¶        x-advance: 64.929688 */
+{'M', 0x4245999a, 0x00000000},
+{'4', 0x0000ff8e, 0xfeeb0030},
+{'l', 0xc0822220, 0xbd888800},
+{'q', 0xc158888a, 0xbeaaab00},
+{0, 0xc1a9999a, 0xc10aaaac},
+{'q', 0xc0f55558, 0xc1066668},
+{0, 0xc0ceeef2, 0xc1af7778},
+{'q', 0x3faaaaa8, 0xc16bbbc0},
+{0, 0x41377779, 0xc1ba2224},
+{'9', 0xffbc0051, 0xffbc00c4},
+{'l', 0x41a6eef0, 0x3d888800},
+{'l', 0xc186eef0, 0x42c22223},
+{'@', 0x000000b7, 0x000027dd},/*        ·        x-advance: 39.863281 */
+{'M', 0x41233334, 0xc2388889},
+{'8', 0xc416dcff, 0xe73ce818},
+{'8', 0x153b0023, 0x3a1a1619},
+{'8', 0x3ce92400, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'@', 0x000000b8, 0x00002388},/*        ¸        x-advance: 35.531250 */
+{'M', 0x3f5ddddf, 0xbeccccce},
+{'4', 0xffff0070, 0x0022fff6},
+{'8', 0x56420d42, 0x51e03500},
+{'8', 0x26b21be0, 0x0ca80ad3},
+{'l', 0x3f088888, 0xc1344446},
+{'8', 0xd144fc3c, 0xe0ece505},
+{'q', 0xc0511112, 0xbf088880},
+{0, 0xc0b11112, 0xbf3bbbb0},
+{'l', 0x40377779, 0xc1177778},
+{'@', 0x000000b9, 0x00003200},/*        ¹        x-advance: 50.000000 */
+{'M', 0x422e2223, 0xc2c20001},
+{'l', 0xc108888c, 0x42522224},
+{'l', 0xc1544444, 0x00000000},
+{'l', 0x40c8888c, 0xc2111112},
+{'l', 0xc14bbbbd, 0x402aaaa0},
+{'l', 0x40000004, 0xc1333330},
+{'l', 0x41c44445, 0xc0f55560},
+{'l', 0x3fdddde0, 0xbd888800},
+{'@', 0x000000ba, 0x00003c99},/*        º        x-advance: 60.597656 */
+{'M', 0x41500001, 0xc28b3334},
+{'l', 0x3eccccc0, 0xc0a22220},
+{'q', 0x3f800000, 0xc1222220},
+{0, 0x40f55556, 0xc1888888},
+{'q', 0x40d77778, 0xc0dddde0},
+{0, 0x418aaaab, 0xc0d77780},
+{'q', 0x41222224, 0x3e888900},
+{0, 0x41766668, 0x40e66670},
+{'9', 0x0036002a, 0x00840024},
+{'l', 0xbeeeee80, 0x40a44440},
+{'q', 0xbf800000, 0x41222224},
+{0, 0xc0f55558, 0x41880002},
+{'q', 0xc0d33338, 0x40dbbbb8},
+{0, 0xc189999a, 0x40d55558},
+{'q', 0xc1222224, 0xbe888880},
+{0, 0xc177777a, 0xc0e44448},
+{'9', 0xffcaffd6, 0xff7cffdc},
+{'m', 0x41411111, 0xc0a44440},
+{'l', 0xbf1999a0, 0x40aaaab0},
+{'8', 0x490926fd, 0x243b230c},
+{'8', 0xdf4a0130, 0xb221dd1a},
+{'l', 0x3f1999c0, 0xc0a66660},
+{'8', 0xb7f7da03, 0xdcc6ddf4},
+{'8', 0x21b5fed0, 0x4de022e6},
+{'@', 0x000000bb, 0x000042cc},/*        »        x-advance: 66.796875 */
+{'M', 0x41a3bbbc, 0xc276eef0},
+{'l', 0x41688888, 0x41cf7778},
+{'l', 0x00000000, 0x3fb33340},
+{'l', 0xc1b11110, 0x41d08889},
+{'l', 0xc157777a, 0x00000000},
+{'4', 0xff2300a8, 0xff35ffab},
+{'6', 0xffff0056, 0x000000cb},
+{'l', 0x41688888, 0x41cf7778},
+{'l', 0x00000000, 0x3fb33340},
+{'l', 0xc1b11110, 0x41d08889},
+{'l', 0xc157777a, 0x00000000},
+{'l', 0x41a80001, 0xc1dddddf},
+{'l', 0xc12bbbbc, 0xc1cbbbbc},
+{'l', 0x412ccccc, 0xbe4ccd00},
+{'@', 0x000000bc, 0x00005fbb},/*        ¼        x-advance: 95.730469 */
+{'M', 0x4224cccd, 0xc2c1999a},
+{'l', 0xc1088888, 0x42522222},
+{'l', 0xc1544444, 0x00000000},
+{'l', 0x40caaaac, 0xc2111112},
+{'l', 0xc14bbbbd, 0x402aaac0},
+{'4', 0xffa70010, 0xffc300c4},
+{'6', 0x0000000d, 0x006e0151},
+{'l', 0xc269999a, 0x42962223},
+{'4', 0xffd3ffb7, 0xfda901d4},
+{'6', 0x002c0048, 0x0242000c},
+{'0', 0x55f200d3, 0xab0e0095},
+{'l', 0xc1b1999a, 0x00000000},
+{'l', 0x3f5dddc0, 0xc1200001},
+{'l', 0x41df7778, 0xc1ff7778},
+{'l', 0x41622228, 0x00000000},
+{'4', 0x00f6ffd6, 0x0000002d},
+{'6', 0x0059fff1, 0xffa6ff27},
+{'l', 0x41222220, 0x3e4ccd00},
+{'l', 0x403bbbc0, 0xc1655558},
+{'l', 0xbf999980, 0x3fd55560},
+{'l', 0xc13ddde0, 0x41477778},
+{'@', 0x000000bd, 0x00006577},/*        ½        x-advance: 101.464844 */
+{'M', 0x42a13334, 0xc2a60001},
+{'l', 0xc269999b, 0x42962223},
+{'4', 0xffd3ffb7, 0xfda901d4},
+{'6', 0x002c0048, 0xff8ffebd},
+{'l', 0xc1088888, 0x42522223},
+{'l', 0xc1544446, 0x00000000},
+{'l', 0x40caaaac, 0xc2111111},
+{'l', 0xc14bbbbc, 0x402aaaa0},
+{'4', 0xffa70010, 0xffc300c4},
+{'6', 0x0000000d, 0x02b20194},
+{'l', 0xc0000000, 0x412eeef0},
+{'4', 0x0000febf, 0xffb0000d},
+{'l', 0x41a9999a, 0xc1888888},
+{'8', 0xd230e323, 0xdc11ef0d},
+{'8', 0xd7ded708, 0x12d500e5},
+{'9', 0x0011fff1, 0x002affec},
+{'l', 0xc1588888, 0x3e088900},
+{'q', 0x3eeeef00, 0xc108888c},
+{0, 0x40ccccc8, 0xc158888c},
+{'q', 0x40c00008, 0xc0a22220},
+{0, 0x4166666c, 0xc0a00000},
+{'8', 0x1f6a003c, 0x612c1e2e},
+{'8', 0x61d43aff, 0x44aa25d6},
+{'l', 0xc10aaaa8, 0x40b55554},
+{'l', 0x41b33334, 0x3e088880},
+{'@', 0x000000be, 0x00006baa},/*        ¾        x-advance: 107.664062 */
+{'M', 0x42bb7778, 0xc2a60001},
+{'l', 0xc269999a, 0x42962223},
+{'4', 0xffd3ffb7, 0xfda901d4},
+{'6', 0x002c0048, 0x0242000b},
+{'0', 0x55f200d3, 0xab0e0095},
+{'l', 0xc1b1999c, 0x00000000},
+{'l', 0x3f5dde00, 0xc1200001},
+{'l', 0x41df7778, 0xc1ff7778},
+{'l', 0x41622220, 0x00000000},
+{'4', 0x00f6ffd6, 0x0000002d},
+{'6', 0x0059fff1, 0xffa6ff27},
+{'l', 0x41222228, 0x3e4ccd00},
+{'4', 0xff8e0017, 0x000dfff7},
+{'6', 0x0063ffa2, 0xfe9afeaa},
+{'4', 0xffb7000d, 0x00000025},
+{'8', 0xf42dff18, 0xda1bf515},
+{'8', 0xe4f7ed03, 0xf7e2f7f3},
+{'9', 0x0000ffd6, 0x0020ffc7},
+{'l', 0xc15ccccf, 0x3e088800},
+{'8', 0xa334c003, 0xe46ce331},
+{'8', 0x1a690035, 0x5a311a33},
+{'8', 0x3de627ff, 0x24c615e7},
+{'8', 0x5a3d143d, 0x4be42e00},
+{'8', 0x29bb1ce4, 0x0baf0cd7},
+{'8', 0xde95ffc2, 0x9ed2dfd4},
+{'l', 0x41500000, 0x3d888800},
+{'8', 0x2b362b03, 0xf42d0018},
+{'8', 0xdb1af415, 0xddf6e605},
+{'q', 0xc0000000, 0xbf911140},
+{0, 0xc0955550, 0xbf9999c0},
+{'l', 0xc0e44448, 0xbd888800},
+{'@', 0x000000bf, 0x000041ee},/*        ¿        x-advance: 65.929688 */
+{'M', 0x4245dddf, 0xc27eaaac},
+{'8', 0x3cea2301, 0x18c518e9},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'8', 0xc516ddff, 0xe73be818},
+{'8', 0x153bff22, 0x39191619},
+{'m', 0xc1b80002, 0x41a66668},
+{'l', 0x41833334, 0xbd888800},
+{'8', 0x6ee73ffd, 0x58bb2feb},
+{'8', 0x42b728d1, 0x4ed920e0},
+{'8', 0x390922fc, 0x1632160e},
+{'8', 0xe743012b, 0xbe20e519},
+{'l', 0x4196eef0, 0xbe088888},
+{'q', 0xbf800000, 0x41544445},
+{0, 0xc1211110, 0x41a33333},
+{'q', 0xc1100004, 0x40e44448},
+{0, 0xc1b00001, 0x40d9999c},
+{'q', 0xc13bbbbd, 0xbe4ccd00},
+{0, 0xc19aaaac, 0xc0d55554},
+{'q', 0xc0f33333, 0xc0ceeef2},
+{0, 0xc0d77777, 0xc1977778},
+{'q', 0x3f2aaaac, 0xc1155557},
+{0, 0x40e00001, 0xc17aaaac},
+{'8', 0xa269cd32, 0xc026e81d},
+{'q', 0x3f9999a0, 0xc0a44440},
+{0, 0x40733330, 0xc0eaaaa8},
+{'@', 0x000000c0, 0x00005933},/*        À        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfd4a00b2},
+{'l', 0x41177778, 0x41a4ccc8},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16ddde0, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088800},
+{'[', 0x007a00c0, 0x000000cc},/*kerning*/
+{'@', 0x000000c1, 0x00005933},/*        Á        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfdee006b},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a9999a, 0x41a4cccc},
+{'l', 0xc1844444, 0x00000000},
+{'[', 0x007a00c1, 0x000000cc},/*kerning*/
+{'@', 0x000000c2, 0x00005933},/*        Â        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfd4800f7},
+{'l', 0x418b3332, 0x4193bbb8},
+{'l', 0x3d888c00, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044448, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733332, 0x3eaaaa00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3333, 0xc1919998},
+{'l', 0x412aaaac, 0xbd888800},
+{'[', 0x007a00c2, 0x000000cc},/*kerning*/
+{'@', 0x000000c3, 0x00005933},/*        Ã        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfd4b0138},
+{'l', 0x412bbbb8, 0x3f3bbb80},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeef0, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00000, 0xbe088a00},
+{0, 0x40d55560, 0xc0d33340},
+{'[', 0x007a00c3, 0x000000cc},/*kerning*/
+{'@', 0x000000c4, 0x00005933},/*        Ä        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfda6fffe},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4444, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'[', 0x007a00c4, 0x000000cc},/*kerning*/
+{'@', 0x000000c5, 0x00005933},/*        Ã…        x-advance: 89.199219 */
+{'M', 0xc0dbbbbc, 0x00000000},
+{'l', 0x424f7778, 0xc2c22223},
+{'l', 0x4190888a, 0x00000000},
+{'l', 0x4193bbbe, 0x42c22223},
+{'l', 0xc1a0888a, 0x00000000},
+{'l', 0xc0400000, 0xc1a00001},
+{'4', 0x0000fef2, 0x00a0ffb0},
+{'6', 0x0000ff55, 0xfedf013b},
+{'4', 0x000000bb, 0xfedfffd5},
+{'6', 0x0121ff70, 0xfd8b0056},
+{'8', 0xaf23d000, 0xe053e024},
+{'8', 0x1e4d002c, 0x4b221d21},
+{'8', 0x50dd3100, 0x1fad1fdd},
+{'8', 0xe4b300d4, 0xb5dee3df},
+{'m', 0x40f11118, 0x00000000},
+{'8', 0x250815fd, 0x1022100b},
+{'8', 0xef2c0019, 0xd517ee13},
+{'8', 0xdbf8eb03, 0xf0def0f5},
+{'8', 0x12d300e7, 0x2bea12ed},
+{'[', 0x007a00c5, 0x000000cc},/*kerning*/
+{'@', 0x000000c6, 0x00007c88},/*        Æ        x-advance: 124.531250 */
+{'M', 0x42e93334, 0xc17bbbbd},
+{'l', 0xc0333340, 0x417bbbbd},
+{'l', 0xc2688889, 0x00000000},
+{'l', 0x40400000, 0xc1b22223},
+{'l', 0xc1e11111, 0x00000000},
+{'l', 0xc16bbbbc, 0x41b22223},
+{'l', 0xc1b9999a, 0x00000000},
+{'l', 0x42877778, 0xc2c22223},
+{'l', 0x4284aaab, 0x00000000},
+{'l', 0xc0333320, 0x417bbbc0},
+{'l', 0xc21a6668, 0x00000000},
+{'l', 0xc0488880, 0x41bccccc},
+{'l', 0x4201ddde, 0x00000000},
+{'l', 0xc02eef00, 0x417bbbbc},
+{'4', 0x0000ff02, 0x00d2ffe4},
+{'6', 0x00000140, 0xff47fda4},
+{'l', 0x419ddde0, 0x3e088900},
+{'l', 0x409ddde0, 0xc212eeef},
+{'l', 0xc1c55556, 0x42126666},
+{'@', 0x000000c7, 0x000056bb},/*        Ç        x-advance: 86.730469 */
+{'M', 0x42744445, 0xc2011112},
+{'l', 0x419b3332, 0xbe088800},
+{'q', 0xbff77740, 0x41808889},
+{0, 0xc1600000, 0x41c88889},
+{'q', 0xc13ffffc, 0x41100001},
+{0, 0xc1dd5554, 0x410aaaab},
+{'q', 0xc1522224, 0xbe88887c},
+{0, 0xc1a5dddf, 0xc0e22222},
+{'q', 0xc0f11112, 0xc0dbbbbc},
+{0, 0xc1244445, 0xc18bbbbc},
+{'9', 0xffacffeb, 0xff4ffff7},
+{'l', 0x3f4cccd0, 0xc0caaaa8},
+{'q', 0x3fdddde0, 0xc1433334},
+{0, 0x40eeeef0, 0xc1b7777a},
+{'q', 0x40b77776, 0xc12cccc8},
+{0, 0x41766667, 0xc18bbbbc},
+{'q', 0x411aaaaa, 0xc0d55550},
+{0, 0x41b9999b, 0xc0ccccd0},
+{'q', 0x417ddddc, 0x3e888900},
+{0, 0x41c22222, 0x411bbbc0},
+{'9', 0x004b0043, 0x00c5004a},
+{'l', 0xc19bbbbc, 0xbd888c00},
+{'8', 0x9ae7c000, 0xd7a2dae7},
+{'8', 0x2393febc, 0x5fc124d7},
+{'q', 0xc02aaab0, 0x40eaaaa8},
+{0, 0xc07bbbc0, 0x41855556},
+{'q', 0xbf999990, 0x41144444},
+{0, 0xbf999990, 0x41855556},
+{'8', 0x61173800, 0x2a582817},
+{'q', 0x410ddde0, 0x3eaaaac0},
+{0, 0x41644444, 0xc0866666},
+{'9', 0xffdc002b, 0xff980039},
+{'m', 0xc1f88889, 0x42004445},
+{'4', 0xffff0070, 0x0022fff6},
+{'8', 0x56420d42, 0x51e03500},
+{'8', 0x26b21be0, 0x0ca80ad3},
+{'l', 0x3f088880, 0xc1344444},
+{'8', 0xd144fc3c, 0xe0ece505},
+{'q', 0xc0511110, 0xbf088890},
+{0, 0xc0b11110, 0xbf3bbbc0},
+{'l', 0x40377778, 0xc1177778},
+{'@', 0x000000c8, 0x00004a77},/*        È        x-advance: 74.464844 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x427c8888, 0x00000000},
+{'l', 0xc0377760, 0x4181999c},
+{'l', 0xc22ddddf, 0x00000000},
+{'l', 0xc0822224, 0x41b91110},
+{'l', 0x42151112, 0x00000000},
+{'l', 0xc0333340, 0x417aaaac},
+{'l', 0xc2148888, 0x00000000},
+{'l', 0xc0911114, 0x41cf7778},
+{'4', 0x0000015d, 0x0081ffea},
+{'6', 0x0000fe06, 0xfc26018e},
+{'l', 0x41177774, 0x41a4cccc},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16dddde, 0xc1a33334},
+{'l', 0x419bbbbd, 0xbe088800},
+{'[', 0x005400c8, 0x00000155},/*kerning*/
+{'@', 0x000000c9, 0x00004a77},/*        É        x-advance: 74.464844 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x427c8888, 0x00000000},
+{'l', 0xc0377760, 0x4181999c},
+{'l', 0xc22ddddf, 0x00000000},
+{'l', 0xc0822224, 0x41b91110},
+{'l', 0x42151112, 0x00000000},
+{'l', 0xc0333340, 0x417aaaac},
+{'l', 0xc2148888, 0x00000000},
+{'l', 0xc0911114, 0x41cf7778},
+{'4', 0x0000015d, 0x0081ffea},
+{'6', 0x0000fe06, 0xfccb0148},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999a, 0x41a4cccc},
+{'l', 0xc1844446, 0x00000000},
+{'[', 0x005400c9, 0x00000155},/*kerning*/
+{'@', 0x000000ca, 0x00004a77},/*        Ê        x-advance: 74.464844 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x427c8888, 0x00000000},
+{'l', 0xc0377760, 0x4181999c},
+{'l', 0xc22ddddf, 0x00000000},
+{'l', 0xc0822224, 0x41b91110},
+{'l', 0x42151112, 0x00000000},
+{'l', 0xc0333340, 0x417aaaac},
+{'l', 0xc2148888, 0x00000000},
+{'l', 0xc0911114, 0x41cf7778},
+{'4', 0x0000015d, 0x0081ffea},
+{'6', 0x0000fe06, 0xfc2501d3},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666664, 0xbeaaaa00},
+{'l', 0xc1044448, 0xc1188890},
+{'l', 0xc13aaaa8, 0x41177778},
+{'l', 0xc1733336, 0x3eaaab00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3333, 0xc191999c},
+{'l', 0x412aaaac, 0xbd888800},
+{'[', 0x005400ca, 0x00000155},/*kerning*/
+{'@', 0x000000cb, 0x00004a77},/*        Ë        x-advance: 74.464844 */
+{'M', 0x3fb33334, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x427c8888, 0x00000000},
+{'l', 0xc0377760, 0x4181999c},
+{'l', 0xc22ddddf, 0x00000000},
+{'l', 0xc0822224, 0x41b91110},
+{'l', 0x42151112, 0x00000000},
+{'l', 0xc0333340, 0x417aaaac},
+{'l', 0xc2148888, 0x00000000},
+{'l', 0xc0911114, 0x41cf7778},
+{'4', 0x0000015d, 0x0081ffea},
+{'6', 0x0000fe06, 0xfc8300d9},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4444, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'[', 0x005400cb, 0x00000155},/*kerning*/
+{'@', 0x000000cc, 0x000026aa},/*        Ì        x-advance: 38.664062 */
+{'M', 0x421c0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'4', 0x0000ff64, 0xfcf80086},
+{'6', 0x0000009c, 0xff2fffb4},
+{'l', 0x41177776, 0x41a4cccc},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16ddddf, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088800},
+{'@', 0x000000cd, 0x000026aa},/*        Í        x-advance: 38.664062 */
+{'M', 0x421c0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'4', 0x0000ff64, 0xfcf80086},
+{'6', 0x0000009c, 0xffd4ff6d},
+{'l', 0x417eeef2, 0xc1a4cccc},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a9999a, 0x41a4cccc},
+{'l', 0xc1844445, 0x00000000},
+{'@', 0x000000ce, 0x000026aa},/*        ÃŽ        x-advance: 38.664062 */
+{'M', 0x421c0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'4', 0x0000ff64, 0xfcf80086},
+{'6', 0x0000009c, 0xff2efff9},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaaa00},
+{'l', 0xc1044444, 0xc1188890},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733334, 0x3eaaab00},
+{'l', 0x35000000, 0xbfc44440},
+{'l', 0x41ab3334, 0xc191999c},
+{'l', 0x412aaaac, 0xbd888800},
+{'@', 0x000000cf, 0x000026aa},/*        Ï        x-advance: 38.664062 */
+{'M', 0x421c0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'4', 0x0000ff64, 0xfcf80086},
+{'6', 0x0000009c, 0xff8bfeff},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4446, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000d0, 0x00005822},/*        Ð        x-advance: 88.132812 */
+{'M', 0x4059999a, 0x00000000},
+{'l', 0x40eccccd, 0xc22aeef0},
+{'l', 0xc119999a, 0x00000000},
+{'l', 0x4008888a, 0xc1433330},
+{'4', 0x0000004c, 0xfeaf003a},
+{'l', 0x41deeeef, 0x3d888800},
+{'q', 0x41500000, 0x3e888900},
+{0, 0x41ac4446, 0x40d999a0},
+{'q', 0x41088888, 0x40ceeef0},
+{0, 0x41444440, 0x41877778},
+{'9', 0x0053001d, 0x00b40012},
+{'l', 0xbeaaab00, 0x40333330},
+{'q', 0xc0266660, 0x41a91111},
+{0, 0xc1822220, 0x42095556},
+{'9', 0x0069ff94, 0x006cfef9},
+{'6', 0x0000ff06, 0xff7f00b3},
+{'l', 0x41022222, 0x3d888900},
+{'q', 0x41522224, 0x3d888900},
+{0, 0x41a2aaac, 0xc1066666},
+{'q', 0x40e88888, 0xc1077778},
+{0, 0x41155554, 0xc1a55556},
+{'q', 0x3feeeee0, 0xc12eeef0},
+{0, 0x3f6eef40, 0xc19aaaaa},
+{'8', 0xa5dccafb, 0xd99fdbe2},
+{'l', 0xc12aaaac, 0xbd888800},
+{'l', 0xc0911110, 0x41cf7778},
+{'l', 0x4181999a, 0x00000000},
+{'l', 0xc0088890, 0x41433330},
+{'l', 0xc181999a, 0x00000000},
+{'l', 0xc0933334, 0x41d4ccce},
+{'@', 0x000000d1, 0x00005d99},/*        Ñ        x-advance: 93.597656 */
+{'M', 0x42be0001, 0xc2c22223},
+{'l', 0xc1866668, 0x42c22223},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0xc1d80000, 0xc281999a},
+{'l', 0xc1344446, 0x4281999a},
+{'l', 0xc19cccce, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41977777, 0x00000000},
+{'4', 0x020600d8, 0xfdfa005a},
+{'6', 0x0000009c, 0xff32ff57},
+{'l', 0x412bbbc0, 0x3f3bbc00},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeef0, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00000, 0xbe088a00},
+{0, 0x40d55550, 0xc0d33340},
+{'@', 0x000000d2, 0x00005b77},/*        Ã’        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'9', 0xffbd0009, 0xff810006},
+{'m', 0xc1477778, 0xc26c4446},
+{'l', 0x41177778, 0x41a4cccc},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16ddde0, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088800},
+{'@', 0x000000d3, 0x00005b77},/*        Ó        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'9', 0xffbd0009, 0xff810006},
+{'m', 0xc1aaaaac, 0xc219dde0},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999a, 0x41a4cccc},
+{'l', 0xc1844446, 0x00000000},
+{'@', 0x000000d4, 0x00005b77},/*        Ô        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'9', 0xffbd0009, 0xff810006},
+{'m', 0xc0777780, 0xc26cccce},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044440, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733334, 0x3eaaaa00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3334, 0xc1919998},
+{'l', 0x412aaaa8, 0xbd888800},
+{'@', 0x000000d5, 0x00005b77},/*        Õ        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'9', 0xffbd0009, 0xff810006},
+{'m', 0x40888890, 0xc26bbbbe},
+{'l', 0x412bbbb8, 0x3f3bbc00},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeef0, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00000, 0xbe088a00},
+{0, 0x40d55560, 0xc0d33340},
+{'@', 0x000000d6, 0x00005b77},/*        Ö        x-advance: 91.464844 */
+{'M', 0x42af5556, 0xc24aaaab},
+{'l', 0xbf2aaa80, 0x40977778},
+{'q', 0xbfddde00, 0x41466664},
+{0, 0xc0f77780, 0x41baaaab},
+{'q', 0xc0bddde0, 0x412dddde},
+{0, 0xc17ddde0, 0x418c4444},
+{'q', 0xc11ddddc, 0x40d55558},
+{0, 0xc1bb3332, 0x40cccccf},
+{'q', 0xc1533336, 0xbe88888c},
+{0, 0xc1a80001, 0xc0e8888a},
+{'q', 0xc0f9999c, 0xc0e22223},
+{0, 0xc12bbbbd, 0xc18eeeef},
+{'9', 0xffaaffe9, 0xff4cfff4},
+{'l', 0x3f088888, 0xc08cccd0},
+{'q', 0x3fdddddc, 0xc1455554},
+{0, 0x40f55557, 0xc1baaaac},
+{'q', 0x40c00000, 0xc1311110},
+{0, 0x417dddde, 0xc18e6664},
+{'q', 0x411eeeee, 0xc0d999a0},
+{0, 0x41bccccd, 0xc0d11110},
+{'q', 0x41544448, 0x3e888800},
+{0, 0x41a80000, 0x40eaaaa0},
+{'q', 0x40f999a0, 0x40e00000},
+{0, 0x412aaab0, 0x418eeef0},
+{'9', 0x00560017, 0x00b4000c},
+{'m', 0xc19b3334, 0xc1555554},
+{'8', 0x9ee4c7fe, 0xd4a7d6e7},
+{'q', 0xc10aaaac, 0xbeaaab00},
+{0, 0xc1633334, 0x40933330},
+{'q', 0xc0aeeef0, 0x409bbbc0},
+{0, 0xc1077778, 0x41488888},
+{'q', 0xc0400000, 0x40f33330},
+{0, 0xc0822224, 0x41811112},
+{'q', 0xbf800000, 0x41077778},
+{0, 0xbf2aaaa0, 0x41788888},
+{'8', 0x631c3902, 0x2c5a2a1a},
+{'q', 0x4108888c, 0x3eaaaaa0},
+{0, 0x41600000, 0xc0911110},
+{'q', 0x40aeeef0, 0xc09ddde0},
+{0, 0x41066668, 0xc147777a},
+{'q', 0x40400000, 0xc0f11110},
+{0, 0x40822220, 0xc17eeef0},
+{'9', 0xffbd0009, 0xff810006},
+{'m', 0xc20c8889, 0xc23e2224},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4446, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000d7, 0x00004655},/*        ×        x-advance: 70.332031 */
+{'M', 0x427bbbbd, 0xc1c08889},
+{'l', 0xc1411114, 0x41266667},
+{'l', 0xc1811112, 0xc1a44444},
+{'l', 0xc1b9999a, 0x41a44444},
+{'l', 0xc11ddddd, 0xc1422222},
+{'l', 0x41bc4444, 0xc1a6eeef},
+{'l', 0xc1822222, 0xc1a66666},
+{'l', 0x41411112, 0xc1266668},
+{'l', 0x41808889, 0x41a4cccc},
+{'l', 0x41ba2222, 0xc1a4cccc},
+{'l', 0x411ddde0, 0x41422220},
+{'l', 0xc1bbbbbc, 0x41a6eef0},
+{'l', 0x4181999a, 0x41a66667},
+{'@', 0x000000d8, 0x00005b44},/*        Ø        x-advance: 91.265625 */
+{'M', 0x4221999a, 0x3fb33334},
+{'9', 0xffffffae, 0xffdaff6c},
+{'4', 0x004dffc5, 0x0000ff95},
+{'l', 0x414eeef0, 0xc1822223},
+{'9', 0xff84ffb7, 0xfedeffcc},
+{'l', 0x3f199998, 0xc08aaaa8},
+{'q', 0x3fdddde0, 0xc1477778},
+{0, 0x40f55556, 0xc1bb3336},
+{'q', 0x40bddde0, 0xc1300000},
+{0, 0x417ddde0, 0xc18ddddc},
+{'q', 0x411eeef0, 0xc0d999a0},
+{0, 0x41bccccc, 0xc0d55560},
+{'9', 0x00010059, 0x002c009d},
+{'4', 0xffbe0034, 0x0000006b},
+{'l', 0xc1433338, 0x41744448},
+{'9', 0x007a0041, 0x0119002d},
+{'l', 0xbf199980, 0x408aaaa8},
+{'q', 0xbfddde00, 0x41477778},
+{0, 0xc0f55560, 0x41bbbbbc},
+{'q', 0xc0bddde0, 0x412eeef0},
+{0, 0xc17ddde0, 0x418ddddf},
+{'9', 0x0035ffb1, 0x0034ff44},
+{'m', 0xc169999a, 0xc2188889},
+{'9', 0x0026fffe, 0x004c0002},
+{'l', 0x42195556, 0xc24bbbbd},
+{'q', 0xc06aaaa0, 0xc0733320},
+{0, 0xc1233330, 0xc07bbbc0},
+{'q', 0xc10ddde0, 0xbe888800},
+{0, 0xc169999c, 0x409ddde0},
+{'q', 0xc0b55558, 0x40a66670},
+{0, 0xc1100000, 0x41666668},
+{'9', 0x0049ffe6, 0x00bcffdc},
+{'6', 0x0013ffff, 0xff900155},
+{'9', 0xffab000c, 0xff770009},
+{'l', 0xc2166667, 0x42488888},
+{'8', 0x1749161c, 0xdd6f0244},
+{'q', 0x40acccd0, 0xc0999998},
+{0, 0x41066668, 0xc1400000},
+{'q', 0x40400010, 0xc0e66668},
+{0, 0x40866668, 0xc16ddde0},
+{'l', 0x3f3bbb80, 0xc0911110},
+{'@', 0x000000d9, 0x00005733},/*        Ù        x-advance: 87.199219 */
+{'M', 0x428c4445, 0xc2c22223},
+{'4', 0x0000009c, 0x01ffffa9},
+{'q', 0xc00cccc0, 0x4181999a},
+{0, 0xc1566668, 0x41cc4445},
+{'q', 0xc1322220, 0x41144445},
+{0, 0xc1db3332, 0x41100000},
+{'q', 0xc1755558, 0xbe4cccb0},
+{0, 0xc1c2aaac, 0xc1188889},
+{'9', 0xffb6ffb9, 0xff39ffc7},
+{'4', 0xfe000056, 0x0000009c},
+{'l', 0xc12dddde, 0x42802223},
+{'8', 0x650d3bf8, 0x2b582916},
+{'8', 0xdb6d0245, 0x9734d829},
+{'6', 0xfdfd0058, 0xff31ff7c},
+{'l', 0x41177778, 0x41a4cccc},
+{'l', 0xc1611114, 0xbd888800},
+{'l', 0xc16ddddc, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088800},
+{'@', 0x000000da, 0x00005733},/*        Ú        x-advance: 87.199219 */
+{'M', 0x428c4445, 0xc2c22223},
+{'4', 0x0000009c, 0x01ffffa9},
+{'q', 0xc00cccc0, 0x4181999a},
+{0, 0xc1566668, 0x41cc4445},
+{'q', 0xc1322220, 0x41144445},
+{0, 0xc1db3332, 0x41100000},
+{'q', 0xc1755558, 0xbe4cccb0},
+{0, 0xc1c2aaac, 0xc1188889},
+{'9', 0xffb6ffb9, 0xff39ffc7},
+{'4', 0xfe000056, 0x0000009c},
+{'l', 0xc12dddde, 0x42802223},
+{'8', 0x650d3bf8, 0x2b582916},
+{'8', 0xdb6d0245, 0x9734d829},
+{'6', 0xfdfd0058, 0xffd5ff35},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a99998, 0x41a4cccc},
+{'l', 0xc1844446, 0x00000000},
+{'@', 0x000000db, 0x00005733},/*        Û        x-advance: 87.199219 */
+{'M', 0x428c4445, 0xc2c22223},
+{'4', 0x0000009c, 0x01ffffa9},
+{'q', 0xc00cccc0, 0x4181999a},
+{0, 0xc1566668, 0x41cc4445},
+{'q', 0xc1322220, 0x41144445},
+{0, 0xc1db3332, 0x41100000},
+{'q', 0xc1755558, 0xbe4cccb0},
+{0, 0xc1c2aaac, 0xc1188889},
+{'9', 0xffb6ffb9, 0xff39ffc7},
+{'4', 0xfe000056, 0x0000009c},
+{'l', 0xc12dddde, 0x42802223},
+{'8', 0x650d3bf8, 0x2b582916},
+{'8', 0xdb6d0245, 0x9734d829},
+{'6', 0xfdfd0058, 0xff2fffc1},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044444, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733334, 0x3eaaaa00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3334, 0xc1919998},
+{'l', 0x412aaaac, 0xbd888800},
+{'@', 0x000000dc, 0x00005733},/*        Ü        x-advance: 87.199219 */
+{'M', 0x428c4445, 0xc2c22223},
+{'4', 0x0000009c, 0x01ffffa9},
+{'q', 0xc00cccc0, 0x4181999a},
+{0, 0xc1566668, 0x41cc4445},
+{'q', 0xc1322220, 0x41144445},
+{0, 0xc1db3332, 0x41100000},
+{'q', 0xc1755558, 0xbe4cccb0},
+{0, 0xc1c2aaac, 0xc1188889},
+{'9', 0xffb6ffb9, 0xff39ffc7},
+{'4', 0xfe000056, 0x0000009c},
+{'l', 0xc12dddde, 0x42802223},
+{'8', 0x650d3bf8, 0x2b582916},
+{'8', 0xdb6d0245, 0x9734d829},
+{'6', 0xfdfd0058, 0xff8dfec6},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4444, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000dd, 0x000051ee},/*        Ý        x-advance: 81.929688 */
+{'M', 0x41f6eef0, 0xc2c22223},
+{'l', 0x413ddde0, 0x422e6667},
+{'l', 0x41d88888, 0xc22e6667},
+{'l', 0x41b3bbbc, 0x00000000},
+{'l', 0xc229ddde, 0x427c0001},
+{'l', 0xc0bbbbc0, 0x42084445},
+{'l', 0xc19e6666, 0x00000000},
+{'4', 0xfede0032, 0xfe1bff5f},
+{'6', 0x000000a4, 0xffd5005b},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999c, 0x41a4cccc},
+{'l', 0xc1844444, 0x00000000},
+{'[', 0x002900dd, 0x00000155},/*kerning*/
+{'[', 0x005400dd, 0x00000122},/*kerning*/
+{'[', 0x005600dd, 0x00000133},/*kerning*/
+{'[', 0x005700dd, 0x00000122},/*kerning*/
+{'[', 0x005800dd, 0x000000dd},/*kerning*/
+{'[', 0x005900dd, 0x00000133},/*kerning*/
+{'[', 0x005d00dd, 0x00000133},/*kerning*/
+{'[', 0x007d00dd, 0x00000144},/*kerning*/
+{'[', 0x00dd00dd, 0x00000133},/*kerning*/
+{'@', 0x000000de, 0x00005099},/*        Þ        x-advance: 80.597656 */
+{'M', 0x421d5556, 0xc1988889},
+{'l', 0xc1777778, 0xbd888900},
+{'l', 0xc05999a0, 0x41991112},
+{'l', 0xc196eeef, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'4', 0x00000096, 0x008effe7},
+{'l', 0x41522224, 0x3d888800},
+{'q', 0x41544444, 0x3e888900},
+{0, 0x41b44444, 0x40f77780},
+{'q', 0x41144448, 0x40ecccc0},
+{0, 0x41033338, 0x41addddc},
+{'q', 0xbf4ccd00, 0x41266668},
+{0, 0xc0ccccd0, 0x4189999a},
+{'q', 0xc0b33330, 0x40d9999c},
+{0, 0xc1633334, 0x41222224},
+{'9', 0x001affbc, 0x001aff6f},
+{'m', 0xc0f9999c, 0xc232aaac},
+{'4', 0x00e8ffd8, 0x0001006a},
+{'8', 0xe2650039, 0xa735e22c},
+{'8', 0xafedcd08, 0xe1b3e3e5},
+{'l', 0xc177777a, 0xbd888800},
+{'@', 0x000000df, 0x00005388},/*        ß        x-advance: 83.531250 */
+{'M', 0x42040000, 0xc2926667},
+{'4', 0x0249ff9d, 0x0000ff6b},
+{'l', 0x4148888a, 0xc292eeef},
+{'q', 0x3feeeef0, 0xc1622228},
+{0, 0x412eeef0, 0xc1b3bbc0},
+{'q', 0x41111112, 0xc1066660},
+{0, 0x41bd5555, 0xc1011110},
+{'q', 0x412aaaac, 0x3e4cce00},
+{0, 0x418eeef0, 0x40d11110},
+{'q', 0x40e88890, 0x40caaab0},
+{0, 0x40ceeef0, 0x418cccd0},
+{'8', 0x48ec28fe, 0x3cdc1fee},
+{'8', 0x44e61eed, 0x3b0a1efb},
+{'8', 0x39281c10, 0x3c2a1c18},
+{'q', 0x40155560, 0x40777778},
+{0, 0x40088880, 0x41066666},
+{'q', 0xbf199980, 0x41533334},
+{0, 0xc1211110, 0x419c4445},
+{'q', 0xc1166664, 0x40caaaac},
+{0, 0xc1accccc, 0x40c66667},
+{'9', 0xffffffa9, 0xffe3ff6f},
+{'l', 0x40955554, 0xc1788889},
+{'8', 0x1c6c1d30, 0xed430025},
+{'8', 0xc625ed1e, 0xc4f5df05},
+{'8', 0xcad7e5f0, 0xc7d5e5e8},
+{'8', 0xbcf0e2ee, 0xbb14da02},
+{'8', 0xc225e112, 0xbc18e213},
+{'8', 0xcaf5e004, 0xe9cfebf0},
+{'8', 0x26b3feca, 0x55e328e9},
+{'@', 0x000000e0, 0x00004700},/*        à        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0x416eeeee, 0xc2b24445},
+{'l', 0x41177778, 0x41a4ccd0},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16ddde0, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088a00},
+{'@', 0x000000e1, 0x00004700},/*        á        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0x40c22224, 0xc2891111},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999c, 0x41a4ccd0},
+{'l', 0xc1844444, 0x00000000},
+{'@', 0x000000e2, 0x00004700},/*        â        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0x41bccccd, 0xc2b28889},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044444, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733332, 0x3eaaab00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3333, 0xc191999c},
+{'l', 0x412aaaac, 0xbd888800},
+{'@', 0x000000e3, 0x00004700},/*        ã        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0x41fddddf, 0xc2b20000},
+{'l', 0x412bbbbc, 0x3f3bbb80},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeeee, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00000, 0xbe088800},
+{0, 0x40d55558, 0xc0d33330},
+{'@', 0x000000e4, 0x00004700},/*        ä        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0xc0f77778, 0xc29b3333},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4445, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000e5, 0x00004700},/*        å        x-advance: 71.000000 */
+{'M', 0x42273334, 0x00000000},
+{'q', 0xbf5dde00, 0xc02eeef0},
+{0, 0xbf3bbbc0, 0xc0d11112},
+{'q', 0xc1000000, 0x41000000},
+{0, 0xc193bbbd, 0x40fbbbbd},
+{'q', 0xc1100000, 0xbe088890},
+{0, 0xc1766666, 0xc0bddddf},
+{'q', 0xc0ccccce, 0xc0b9999a},
+{0, 0xc0c22224, 0xc1722222},
+{'q', 0x3eaaaab0, 0xc1177778},
+{0, 0x40b77778, 0xc16bbbbc},
+{'q', 0x40acccce, 0xc0aaaab0},
+{0, 0x41555556, 0xc0eeeef0},
+{'9', 0xffef0040, 0xffef0080},
+{'4', 0x00010046, 0xffdd0008},
+{'8', 0xc4f8dd05, 0xe6cce7f3},
+{'9', 0xfffeffb4, 0x0045ffa6},
+{'l', 0xc196eef0, 0x3d888800},
+{'8', 0x972ac003, 0xc461d727},
+{'q', 0x40e66664, 0xc01ddde0},
+{0, 0x41655556, 0xc0155560},
+{'q', 0x41344444, 0x3e888900},
+{0, 0x41955556, 0x40dbbbc0},
+{'9', 0x0034003b, 0x00940032},
+{'4', 0x0102ffd7, 0x0033fffb},
+{'9', 0x0022fffd, 0x00410009},
+{'4', 0x000a0000, 0x0000ff6d},
+{'m', 0xc168888a, 0xc1544445},
+{'9', 0x00020041, 0xffc80071},
+{'4', 0xff9c0012, 0x0000ffcd},
+{'8', 0x15a800d3, 0x48cf15d6},
+{'8', 0x2d0b1cfc, 0x112c1010},
+{'m', 0x40622220, 0xc2a1ddde},
+{'8', 0xaf23d000, 0xe053e024},
+{'8', 0x1e4d002c, 0x4b221d21},
+{'8', 0x50dd3100, 0x1fad1fdd},
+{'8', 0xe4b300d4, 0xb5dee3df},
+{'m', 0x40f11114, 0x00000000},
+{'8', 0x250815fd, 0x1022100b},
+{'8', 0xef2c0019, 0xd517ee13},
+{'8', 0xdbf8eb03, 0xf0def0f5},
+{'8', 0x12d300e7, 0x2bea12ed},
+{'@', 0x000000e6, 0x00006fdd},/*        æ        x-advance: 111.863281 */
+{'M', 0x42ca8889, 0xc0d11112},
+{'8', 0x319d23d8, 0x0d910dc5},
+{'8', 0xee9800cc, 0xc4acefcd},
+{'q', 0xc1344444, 0x41211112},
+{0, 0xc1d77778, 0x411ccccd},
+{'q', 0xc1211112, 0xbe4cccb0},
+{0, 0xc1880000, 0xc0b77777},
+{'q', 0xc0dbbbbf, 0xc0b11111},
+{0, 0xc0ccccd0, 0xc182aaab},
+{'q', 0x3eccccd0, 0xc1122224},
+{0, 0x40bbbbbc, 0xc1600000},
+{'q', 0x40b11112, 0xc09ddde0},
+{0, 0x41566668, 0xc0d999a0},
+{'9', 0xfff2003f, 0xfff2007b},
+{'4', 0x00010059, 0xffe10006},
+{'8', 0xc5f8de05, 0xe6cde7f3},
+{'8', 0x0ec0ffde, 0x33db10e3},
+{'l', 0xc1966668, 0xbf9999a0},
+{'8', 0x962cbe03, 0xc663d829},
+{'q', 0x40eccccc, 0xc0111120},
+{0, 0x4168888a, 0xc00888a0},
+{'q', 0x415aaaac, 0x3e4cce00},
+{0, 0x41a11112, 0x40eaaab0},
+{'q', 0x411ffffc, 0xc0eeeef0},
+{0, 0x41b00002, 0xc0e66660},
+{'q', 0x415eeee8, 0x3eaaaa00},
+{0, 0x41a19998, 0x41200000},
+{'9', 0x004d0032, 0x00b40026},
+{'4', 0x0056fff3, 0x0000feab},
+{'8', 0x5a1438fb, 0x2354221a},
+{'8', 0xf652012b, 0xe34df526},
+{'6', 0x00660020, 0xfe65ff6a},
+{'8', 0x24a8fec8, 0x54d025e2},
+{'4', 0x000000c4, 0xfff00003},
+{'8', 0xbafada06, 0xdfc7e0f4},
+{'m', 0xc2580000, 0x42351112},
+{'9', 0x00010030, 0xffd60073},
+{'4', 0xff9b0014, 0x0000ffb6},
+{'8', 0x13b001d9, 0x3ed012d8},
+{'8', 0x2f1021fb, 0x0e330d15},
+{'@', 0x000000e7, 0x00004522},/*        ç        x-advance: 69.132812 */
+{'M', 0x42000000, 0xc1622223},
+{'8', 0xea450129, 0xc124e81c},
+{'l', 0x418ddde0, 0xbd888800},
+{'q', 0xbf5dde00, 0x41433334},
+{0, 0xc1244448, 0x419b3334},
+{'q', 0xc1155554, 0x40e44444},
+{0, 0xc1a91111, 0x40dddddd},
+{'q', 0xc179999a, 0xbeaaaaac},
+{0, 0xc1b3bbbc, 0xc1333334},
+{'9', 0xffa9ffca, 0xff37ffd4},
+{'l', 0x3e4cccc0, 0xbff77780},
+{'q', 0x3fcccccc, 0xc1700000},
+{0, 0x41311112, 0xc1cf7778},
+{'q', 0x41177778, 0xc12eeef0},
+{0, 0x41cccccd, 0xc1299998},
+{'q', 0x4149999c, 0x3e888800},
+{0, 0x419c4446, 0x41022220},
+{'9', 0x003e0037, 0x00a10036},
+{'l', 0xc18cccce, 0x00000000},
+{'8', 0xbaefd800, 0xe0c2e2ee},
+{'q', 0xc12cccce, 0xbecccc80},
+{0, 0xc16bbbbc, 0x4148888c},
+{'q', 0xc0266668, 0x41077774},
+{0, 0xc0111110, 0x419a2222},
+{'8', 0x43112601, 0x1d3d1c11},
+{'m', 0xc11ccccc, 0x415eeef0},
+{'4', 0xffff0070, 0x0022fff6},
+{'8', 0x56420d42, 0x51e03500},
+{'8', 0x26b21be0, 0x0ca80ad3},
+{'l', 0x3f088880, 0xc1344444},
+{'8', 0xd144fc3c, 0xe0ece505},
+{'q', 0xc0511118, 0xbf088890},
+{0, 0xc0b11114, 0xbf3bbbc0},
+{'l', 0x40377778, 0xc1177778},
+{'@', 0x000000e8, 0x00004799},/*        è        x-advance: 71.597656 */
+{'M', 0x427a2223, 0xc139999a},
+{'q', 0xc0933330, 0x40d9999a},
+{0, 0xc1477778, 0x411eeeef},
+{'q', 0xc0fbbbc0, 0x4048888a},
+{0, 0xc17ccccc, 0x40400002},
+{'q', 0xc16ddde0, 0xbe4cccd0},
+{0, 0xc1b9999b, 0xc1233334},
+{'9', 0xffb0ffbe, 0xff3cffc7},
+{'l', 0x3e4ccce0, 0xc02aaab0},
+{'q', 0x3f800000, 0xc1200000},
+{0, 0x40b77777, 0xc194cccc},
+{'q', 0x40977778, 0xc10aaaac},
+{0, 0x414bbbbd, 0xc15ddde4},
+{'q', 0x41000000, 0xc0a66660},
+{0, 0x4195dddf, 0xc09dddd0},
+{'q', 0x41722220, 0x3e888800},
+{0, 0x41accccc, 0x412eeeec},
+{'9', 0x00550033, 0x00c40027},
+{'4', 0x0041fff8, 0x0000fe9e},
+{'8', 0x571933ff, 0x2452231b},
+{'9', 0x0002004f, 0xffc10090},
+{'6', 0x00540045, 0xfe8dff4e},
+{'8', 0x24acffca, 0x53d226e3},
+{'4', 0x000000ce, 0xfff30003},
+{'8', 0xb6f4d506, 0xe0bee1ed},
+{'m', 0x3f3bbbc0, 0xc231dddf},
+{'l', 0x41177778, 0x41a4ccd0},
+{'l', 0xc1611114, 0xbd888800},
+{'l', 0xc16dddde, 0xc1a33334},
+{'l', 0x419bbbbd, 0xbe088a00},
+{'@', 0x000000e9, 0x00004799},/*        é        x-advance: 71.597656 */
+{'M', 0x427a2223, 0xc139999a},
+{'q', 0xc0933330, 0x40d9999a},
+{0, 0xc1477778, 0x411eeeef},
+{'q', 0xc0fbbbc0, 0x4048888a},
+{0, 0xc17ccccc, 0x40400002},
+{'q', 0xc16ddde0, 0xbe4cccd0},
+{0, 0xc1b9999b, 0xc1233334},
+{'9', 0xffb0ffbe, 0xff3cffc7},
+{'l', 0x3e4ccce0, 0xc02aaab0},
+{'q', 0x3f800000, 0xc1200000},
+{0, 0x40b77777, 0xc194cccc},
+{'q', 0x40977778, 0xc10aaaac},
+{0, 0x414bbbbd, 0xc15ddde4},
+{'q', 0x41000000, 0xc0a66660},
+{0, 0x4195dddf, 0xc09dddd0},
+{'q', 0x41722220, 0x3e888800},
+{0, 0x41accccc, 0x412eeeec},
+{'9', 0x00550033, 0x00c40027},
+{'4', 0x0041fff8, 0x0000fe9e},
+{'8', 0x571933ff, 0x2452231b},
+{'9', 0x0002004f, 0xffc10090},
+{'6', 0x00540045, 0xfe8dff4e},
+{'8', 0x24acffca, 0x53d226e3},
+{'4', 0x000000ce, 0xfff30003},
+{'8', 0xb6f4d506, 0xe0bee1ed},
+{'m', 0xc1011114, 0xc1beeeee},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a99998, 0x41a4ccd0},
+{'l', 0xc1844446, 0x00000000},
+{'@', 0x000000ea, 0x00004799},/*        ê        x-advance: 71.597656 */
+{'M', 0x427a2223, 0xc139999a},
+{'q', 0xc0933330, 0x40d9999a},
+{0, 0xc1477778, 0x411eeeef},
+{'q', 0xc0fbbbc0, 0x4048888a},
+{0, 0xc17ccccc, 0x40400002},
+{'q', 0xc16ddde0, 0xbe4cccd0},
+{0, 0xc1b9999b, 0xc1233334},
+{'9', 0xffb0ffbe, 0xff3cffc7},
+{'l', 0x3e4ccce0, 0xc02aaab0},
+{'q', 0x3f800000, 0xc1200000},
+{0, 0x40b77777, 0xc194cccc},
+{'q', 0x40977778, 0xc10aaaac},
+{0, 0x414bbbbd, 0xc15ddde4},
+{'q', 0x41000000, 0xc0a66660},
+{0, 0x4195dddf, 0xc09dddd0},
+{'q', 0x41722220, 0x3e888800},
+{0, 0x41accccc, 0x412eeeec},
+{'9', 0x00550033, 0x00c40027},
+{'4', 0x0041fff8, 0x0000fe9e},
+{'8', 0x571933ff, 0x2452231b},
+{'9', 0x0002004f, 0xffc10090},
+{'6', 0x00540045, 0xfe8dff4e},
+{'8', 0x24acffca, 0x53d226e3},
+{'4', 0x000000ce, 0xfff30003},
+{'8', 0xb6f4d506, 0xe0bee1ed},
+{'m', 0x41166664, 0xc2326667},
+{'l', 0x418b3336, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044448, 0xc1188888},
+{'l', 0xc13aaaa8, 0x41177778},
+{'l', 0xc1733336, 0x3eaaab00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3335, 0xc191999c},
+{'l', 0x412aaaa8, 0xbd888800},
+{'@', 0x000000eb, 0x00004799},/*        ë        x-advance: 71.597656 */
+{'M', 0x427a2223, 0xc139999a},
+{'q', 0xc0933330, 0x40d9999a},
+{0, 0xc1477778, 0x411eeeef},
+{'q', 0xc0fbbbc0, 0x4048888a},
+{0, 0xc17ccccc, 0x40400002},
+{'q', 0xc16ddde0, 0xbe4cccd0},
+{0, 0xc1b9999b, 0xc1233334},
+{'9', 0xffb0ffbe, 0xff3cffc7},
+{'l', 0x3e4ccce0, 0xc02aaab0},
+{'q', 0x3f800000, 0xc1200000},
+{0, 0x40b77777, 0xc194cccc},
+{'q', 0x40977778, 0xc10aaaac},
+{0, 0x414bbbbd, 0xc15ddde4},
+{'q', 0x41000000, 0xc0a66660},
+{0, 0x4195dddf, 0xc09dddd0},
+{'q', 0x41722220, 0x3e888800},
+{0, 0x41accccc, 0x412eeeec},
+{'9', 0x00550033, 0x00c40027},
+{'4', 0x0041fff8, 0x0000fe9e},
+{'8', 0x571933ff, 0x2452231b},
+{'9', 0x0002004f, 0xffc10090},
+{'6', 0x00540045, 0xfe8dff4e},
+{'8', 0x24acffca, 0x53d226e3},
+{'4', 0x000000ce, 0xfff30003},
+{'8', 0xb6f4d506, 0xe0bee1ed},
+{'m', 0xc1aeeef0, 0xc203bbbb},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4444, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000ec, 0x00002444},/*        ì        x-advance: 36.265625 */
+{'M', 0x42044445, 0xc2904445},
+{'l', 0xc148888a, 0x42904445},
+{'4', 0x0000ff6a, 0xfdbf0064},
+{'6', 0x00000096, 0xff16ffbc},
+{'l', 0x41177778, 0x41a4cccc},
+{'l', 0xc1611112, 0xbd888800},
+{'l', 0xc16dddde, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088800},
+{'@', 0x000000ed, 0x00002444},/*        í        x-advance: 36.265625 */
+{'M', 0x42044445, 0xc2904445},
+{'l', 0xc148888a, 0x42904445},
+{'4', 0x0000ff6a, 0xfdbf0064},
+{'6', 0x00000096, 0xffbbff75},
+{'l', 0x417eeef0, 0xc1a4cccc},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a9999a, 0x41a4cccc},
+{'l', 0xc1844444, 0x00000000},
+{'@', 0x000000ee, 0x00002444},/*        î        x-advance: 36.265625 */
+{'M', 0x42044445, 0xc2904445},
+{'l', 0xc148888a, 0x42904445},
+{'4', 0x0000ff6a, 0xfdbf0064},
+{'6', 0x00000096, 0xff150000},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044444, 0xc1188888},
+{'l', 0xc13aaaaa, 0x41177778},
+{'l', 0xc1733335, 0x3eaaab00},
+{'l', 0x34000000, 0xbfc44440},
+{'l', 0x41ab3333, 0xc191999c},
+{'l', 0x412aaaac, 0xbd888800},
+{'@', 0x000000ef, 0x00002444},/*        ï        x-advance: 36.265625 */
+{'M', 0x42044445, 0xc2904445},
+{'l', 0xc148888a, 0x42904445},
+{'4', 0x0000ff6a, 0xfdbf0064},
+{'6', 0x00000096, 0xff73ff07},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4445, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000f0, 0x00004c44},/*        ð        x-advance: 76.265625 */
+{'M', 0x42015556, 0x3fb33334},
+{'q', 0xc158888a, 0xbeaaaaac},
+{0, 0xc1abbbbd, 0xc118888a},
+{'q', 0xc0fbbbbc, 0xc1133332},
+{0, 0xc0d99999, 0xc1b44444},
+{'q', 0x3f999998, 0xc15eeef0},
+{0, 0x411eeef0, 0xc1c00000},
+{'q', 0x410bbbba, 0xc1222224},
+{0, 0x41bc4445, 0xc11ccccc},
+{'q', 0x41066664, 0x3e088800},
+{0, 0x417bbbbc, 0x40a44440},
+{'9', 0xffb6fffe, 0xff74ffd0},
+{'4', 0x0041ff90, 0xffbcffdf},
+{'l', 0x412bbbba, 0xc0c00000},
+{'9', 0xffdfffd7, 0xffc8ff84},
+{'l', 0x40e66668, 0xc16eeef0},
+{'9', 0x001c0075, 0x006000c5},
+{'4', 0xffc50065, 0x00450020},
+{'l', 0xc11bbbbc, 0x40a88890},
+{'q', 0x40bbbbb8, 0x41255550},
+{0, 0x41033334, 0x41a80000},
+{'9', 0x00540012, 0x00b40006},
+{'l', 0xbf199980, 0x409ddde0},
+{'q', 0xbfb33340, 0x41211112},
+{0, 0xc0ccccd0, 0x419aaaab},
+{'q', 0xc0a00008, 0x41133334},
+{0, 0xc1555558, 0x41700000},
+{'9', 0x002dffbe, 0x002bff65},
+{'m', 0xc1166668, 0xc2004445},
+{'8', 0x580c2efb, 0x2c482a12},
+{'8', 0xe54e0130, 0xba30e41e},
+{'9', 0xffd60011, 0xffaf0017},
+{'4', 0xffc90009, 0xfff70002},
+{'8', 0xd69dd7e6, 0x2e99ffbd},
+{'q', 0xc0911110, 0x40bbbbb8},
+{0, 0xc0accccc, 0x41577778},
+{'@', 0x000000f1, 0x00004a33},/*        ñ        x-advance: 74.199219 */
+{'M', 0x4223bbbc, 0xc2677778},
+{'9', 0xfffeffc5, 0x0036ff96},
+{'l', 0xc1100000, 0x424c0001},
+{'l', 0xc1966667, 0x00000000},
+{'4', 0xfdbf0064, 0x0000008b},
+{'l', 0xbfbbbbc0, 0x41077778},
+{'q', 0x410ddde0, 0xc1200000},
+{0, 0x41a80000, 0xc11bbbb8},
+{'q', 0x413eeef0, 0x3e4ccc00},
+{0, 0x417cccd0, 0x410aaaa8},
+{'9', 0x0043001e, 0x00960016},
+{'4', 0x016fffc3, 0x0000ff6a},
+{'l', 0x40f77778, 0xc2388889},
+{'8', 0xbdf8d704, 0xe6c6e6f4},
+{'m', 0x419d5556, 0xc231999a},
+{'l', 0x412bbbbc, 0x3f3bbb80},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeeee, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00008, 0xbe088800},
+{0, 0x40d55558, 0xc0d33330},
+{'@', 0x000000f2, 0x00004add},/*        ò        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'m', 0x41a33335, 0xc2842223},
+{'l', 0x41177778, 0x41a4ccd0},
+{'l', 0xc1611114, 0xbd888800},
+{'l', 0xc16dddde, 0xc1a33334},
+{'l', 0x419bbbbd, 0xbe088a00},
+{'@', 0x000000f3, 0x00004add},/*        ó        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'m', 0x4139999a, 0xc235ddde},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6666, 0x00000000},
+{'l', 0xc1a99998, 0x41a4ccd0},
+{'l', 0xc1844446, 0x00000000},
+{'@', 0x000000f4, 0x00004add},/*        ô        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'m', 0x41e88889, 0xc2846667},
+{'l', 0x418b3336, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044444, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733336, 0x3eaaab00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3335, 0xc191999c},
+{'l', 0x412aaaa8, 0xbd888800},
+{'@', 0x000000f5, 0x00004add},/*        õ        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'m', 0x4214ccce, 0xc283ddde},
+{'l', 0x412bbbc0, 0x3f3bbb80},
+{'8', 0x62df34fd, 0x2da62de3},
+{'8', 0xe8ba00d9, 0xe8bce8e2},
+{'9', 0x0001ffd8, 0x0033ffcb},
+{'l', 0xc12eeef0, 0xbf199980},
+{'8', 0x9e22cd03, 0xd35ad21f},
+{'8', 0x18450026, 0x1745181f},
+{'q', 0x40a00000, 0xbe088800},
+{0, 0x40d55558, 0xc0d33330},
+{'@', 0x000000f6, 0x00004add},/*        ö        x-advance: 74.863281 */
+{'M', 0x40666667, 0xc20bbbbc},
+{'q', 0x3fd55556, 0xc18d5556},
+{0, 0x41400000, 0xc1e1999a},
+{'q', 0x41266668, 0xc129999c},
+{0, 0x41cd5557, 0xc1255554},
+{'q', 0x41799998, 0x3e888800},
+{0, 0x41b66668, 0x41333330},
+{'q', 0x40e88880, 0x412eeef0},
+{0, 0x40c00000, 0x41cb3334},
+{'q', 0xbfbbbbc0, 0x41811112},
+{0, 0xc137777c, 0x41daaaac},
+{'q', 0xc11eeef0, 0x41333333},
+{0, 0xc1d1999a, 0x412ddddd},
+{'q', 0xc1777778, 0xbe88887c},
+{0, 0xc1b66667, 0xc1311111},
+{'9', 0xffaaffc6, 0xff37ffd0},
+{'m', 0x41980000, 0xbfb33340},
+{'l', 0xbe088880, 0x3fbbbbc0},
+{'q', 0xbf911110, 0x41411112},
+{0, 0x40444448, 0x418bbbbc},
+{'8', 0x1a3e1913, 0xca660246},
+{'q', 0x40800000, 0xc0e44444},
+{0, 0x409bbbc0, 0xc1688888},
+{'8', 0xac01d004, 0xbee9dafd},
+{'8', 0xe3c0e4ed, 0x1ab3ffd1},
+{'8', 0x43d41ae3, 0x50ed28f2},
+{'m', 0xc00cccc8, 0xc25a2222},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4444, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000f7, 0x00004b88},/*        ÷        x-advance: 75.531250 */
+{'M', 0x4201ddde, 0xc290aaab},
+{'8', 0xc517dc00, 0xe83ce918},
+{'8', 0x143cff23, 0x391a1519},
+{'8', 0x3be82400, 0x18c517e8},
+{'8', 0xecc400dd, 0xc7e6ebe7},
+{'m', 0x42226668, 0x4196eeee},
+{'l', 0xc02eef00, 0x41766668},
+{'4', 0x0000fdec, 0xff850015},
+{'6', 0x00000214, 0x011afe71},
+{'8', 0xc516dcff, 0xe83ce918},
+{'8', 0x143bff22, 0x391a1519},
+{'8', 0x3be92400, 0x18c417e8},
+{'8', 0xecc400de, 0xc7e7ebe7},
+{'@', 0x000000f8, 0x00004abb},/*        ø        x-advance: 74.730469 */
+{'M', 0x41fddddf, 0x3fbbbbbc},
+{'9', 0x0000ffd2, 0xfff0ffa4},
+{'4', 0x0050ffcb, 0x0000ffa4},
+{'l', 0x41211112, 0xc1666668},
+{'q', 0xc0b55557, 0xc0c66666},
+{0, 0xc0eeeef1, 0xc1611111},
+{'9', 0xffc1fff3, 0xff7ffff9},
+{'l', 0x3e888888, 0xc0000000},
+{'q', 0x40000000, 0xc1722224},
+{0, 0x41400001, 0xc1ceeef0},
+{'q', 0x41200001, 0xc12bbbbc},
+{0, 0x41d11112, 0xc127777c},
+{'9', 0x00000030, 0x00100060},
+{'4', 0xffb40033, 0x0000005d},
+{'l', 0xc1200004, 0x41633338},
+{'q', 0x40aeeef8, 0x40c88888},
+{0, 0x40e44448, 0x41611110},
+{'9', 0x003e000d, 0x007e0006},
+{'l', 0xbe088800, 0x3fbbbbc0},
+{'q', 0xbfeeef00, 0x41755554},
+{0, 0xc13ddddc, 0x41d22222},
+{'9', 0x0056ffb0, 0x0055ff2e},
+{'m', 0xc1244446, 0xc1ee6667},
+{'9', 0x001bfffe, 0x00370002},
+{'l', 0x41bd5555, 0xc2104445},
+{'8', 0xfaddfbf0, 0x13b800d5},
+{'q', 0xc06aaaa8, 0x401ddde0},
+{0, 0xc0d99998, 0x411ccccc},
+{'9', 0x003affe7, 0x008dffe3},
+{'m', 0x41f55556, 0xc1722222},
+{'9', 0xffe60001, 0xffccfffe},
+{'l', 0xc1bbbbbc, 0x420ddddf},
+{'8', 0x041e0411, 0xca6a0148},
+{'q', 0x40888888, 0xc0e22224},
+{0, 0x40b33330, 0xc16aaaaa},
+{'l', 0x3f800000, 0xc1000000},
+{'@', 0x000000f9, 0x00004a33},/*        ù        x-advance: 74.199219 */
+{'M', 0x422b7778, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc0f11112},
+{'q', 0xc1011110, 0x41111112},
+{0, 0xc19f7778, 0x410dddde},
+{'q', 0xc13bbbbd, 0xbe4cccb0},
+{0, 0xc182aaab, 0xc1022222},
+{'9', 0xffc0ffdc, 0xff6bffe4},
+{'4', 0xfe8b003e, 0x00000096},
+{'l', 0xc0fddde0, 0x423b7778},
+{'8', 0x3c0722fc, 0x1b32190b},
+{'9', 0x00020046, 0xffca0074},
+{'l', 0x410eeef0, 0xc24c0001},
+{'4', 0x00000097, 0x0241ff9c},
+{'6', 0x0000ff74, 0xfccd0005},
+{'l', 0x41177778, 0x41a4ccd0},
+{'l', 0xc1611110, 0xbd888800},
+{'l', 0xc16ddde0, 0xc1a33334},
+{'l', 0x419bbbbc, 0xbe088a00},
+{'@', 0x000000fa, 0x00004a33},/*        ú        x-advance: 74.199219 */
+{'M', 0x422b7778, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc0f11112},
+{'q', 0xc1011110, 0x41111112},
+{0, 0xc19f7778, 0x410dddde},
+{'q', 0xc13bbbbd, 0xbe4cccb0},
+{0, 0xc182aaab, 0xc1022222},
+{'9', 0xffc0ffdc, 0xff6bffe4},
+{'4', 0xfe8b003e, 0x00000096},
+{'l', 0xc0fddde0, 0x423b7778},
+{'8', 0x3c0722fc, 0x1b32190b},
+{'9', 0x00020046, 0xffca0074},
+{'l', 0x410eeef0, 0xc24c0001},
+{'4', 0x00000097, 0x0241ff9c},
+{'6', 0x0000ff74, 0xfd72ffc0},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999c, 0x41a4ccd0},
+{'l', 0xc1844444, 0x00000000},
+{'@', 0x000000fb, 0x00004a33},/*        û        x-advance: 74.199219 */
+{'M', 0x422b7778, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc0f11112},
+{'q', 0xc1011110, 0x41111112},
+{0, 0xc19f7778, 0x410dddde},
+{'q', 0xc13bbbbd, 0xbe4cccb0},
+{0, 0xc182aaab, 0xc1022222},
+{'9', 0xffc0ffdc, 0xff6bffe4},
+{'4', 0xfe8b003e, 0x00000096},
+{'l', 0xc0fddde0, 0x423b7778},
+{'8', 0x3c0722fc, 0x1b32190b},
+{'9', 0x00020046, 0xffca0074},
+{'l', 0x410eeef0, 0xc24c0001},
+{'4', 0x00000097, 0x0241ff9c},
+{'6', 0x0000ff74, 0xfccc004b},
+{'l', 0x418b3334, 0x4193bbbc},
+{'l', 0x3d888800, 0x3fb33340},
+{'l', 0xc1666668, 0xbeaaab00},
+{'l', 0xc1044444, 0xc1188888},
+{'l', 0xc13aaaac, 0x41177778},
+{'l', 0xc1733334, 0x3eaaab00},
+{'l', 0x00000000, 0xbfc44440},
+{'l', 0x41ab3334, 0xc191999c},
+{'l', 0x412aaaac, 0xbd888800},
+{'@', 0x000000fc, 0x00004a33},/*        ü        x-advance: 74.199219 */
+{'M', 0x422b7778, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc0f11112},
+{'q', 0xc1011110, 0x41111112},
+{0, 0xc19f7778, 0x410dddde},
+{'q', 0xc13bbbbd, 0xbe4cccb0},
+{0, 0xc182aaab, 0xc1022222},
+{'9', 0xffc0ffdc, 0xff6bffe4},
+{'4', 0xfe8b003e, 0x00000096},
+{'l', 0xc0fddde0, 0x423b7778},
+{'8', 0x3c0722fc, 0x1b32190b},
+{'9', 0x00020046, 0xffca0074},
+{'l', 0x410eeef0, 0xc24c0001},
+{'4', 0x00000097, 0x0241ff9c},
+{'6', 0x0000ff74, 0xfd2aff52},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4445, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'@', 0x000000fd, 0x00004288},/*        ý        x-advance: 66.531250 */
+{'M', 0x41f11112, 0x412dddde},
+{'q', 0xc06aaab0, 0x40fbbbbc},
+{0, 0xc118888a, 0x41533334},
+{'q', 0xc0bbbbba, 0x40aaaaac},
+{0, 0xc1744444, 0x40aaaaac},
+{'9', 0x0000ffe6, 0xfff5ffb8},
+{'4', 0xff8b000b, 0x00010014},
+{'9', 0x0000004d, 0xffc20070},
+{'l', 0x40666668, 0xc0d55556},
+{'l', 0xc13ccccc, 0xc28e4445},
+{'l', 0x419bbbbc, 0x00000000},
+{'l', 0x40a44444, 0x4232eef0},
+{'4', 0xfe9b00a5, 0x000000a6},
+{'6', 0x0298feaf, 0xfd1b000a},
+{'l', 0x417eeef0, 0xc1a4ccd0},
+{'l', 0x41ae6668, 0x00000000},
+{'l', 0xc1a9999c, 0x41a4ccd0},
+{'l', 0xc1844444, 0x00000000},
+{'[', 0x002200fd, 0x00000100},/*kerning*/
+{'[', 0x002700fd, 0x00000100},/*kerning*/
+{'[', 0x006600fd, 0x000000dd},/*kerning*/
+{'[', 0x03c000fd, 0x000000bb},/*kerning*/
+{'[', 0x201c00fd, 0x00000100},/*kerning*/
+{'[', 0x201d00fd, 0x00000100},/*kerning*/
+{'@', 0x000000fe, 0x00004b22},/*        þ        x-advance: 75.132812 */
+{'M', 0x42166667, 0x3fb33334},
+{'9', 0xfffeffad, 0xffc2ff7c},
+{'l', 0xc0d33336, 0x42088889},
+{'l', 0xc196eeef, 0x36000000},
+{'4', 0xfbef00b4, 0x00000097},
+{'l', 0xc0e6666c, 0x42126668},
+{'q', 0x40eeeef4, 0xc0f999a0},
+{0, 0x418c4445, 0xc0f33330},
+{'q', 0x411eeef0, 0x3e088800},
+{0, 0x41711110, 0x40bbbbb0},
+{'q', 0x40a44450, 0x40b55560},
+{0, 0x40d55560, 0x41611114},
+{'q', 0x3fccccc0, 0x41055558},
+{0, 0x3f4ccc80, 0x4183bbbc},
+{'q', 0xc04cccc0, 0x41bd5557},
+{0, 0xc1808888, 0x42062223},
+{'9', 0x0028ffcc, 0x0026ff7f},
+{'m', 0x40844448, 0xc26d5557},
+{'9', 0xfffeffc0, 0x0038ff94},
+{'l', 0xc0aaaaac, 0x41edddde},
+{'q', 0x40266668, 0x40dbbbbc},
+{0, 0x412aaaaa, 0x40e22222},
+{'q', 0x41633334, 0x3eaaaaa0},
+{0, 0x418c4446, 0xc1b6eef0},
+{'8', 0xbb02e203, 0xbdefdaff},
+{'q', 0xc0044440, 0xc06aaab0},
+{0, 0xc0eaaaa8, 0xc0777780},
+{'@', 0x000000ff, 0x00004288},/*        ÿ        x-advance: 66.531250 */
+{'M', 0x41f11112, 0x412dddde},
+{'q', 0xc06aaab0, 0x40fbbbbc},
+{0, 0xc118888a, 0x41533334},
+{'q', 0xc0bbbbba, 0x40aaaaac},
+{0, 0xc1744444, 0x40aaaaac},
+{'9', 0x0000ffe6, 0xfff5ffb8},
+{'4', 0xff8b000b, 0x00010014},
+{'9', 0x0000004d, 0xffc20070},
+{'l', 0x40666668, 0xc0d55556},
+{'l', 0xc13ccccc, 0xc28e4445},
+{'l', 0x419bbbbc, 0x00000000},
+{'l', 0x40a44444, 0x4232eef0},
+{'4', 0xfe9b00a5, 0x000000a6},
+{'6', 0x0298feaf, 0xfcd3ff9c},
+{'8', 0xcf14e300, 0xec32ed15},
+{'8', 0x1232001c, 0x30161216},
+{'8', 0x31ed1d01, 0x14ce13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'m', 0x41fc4445, 0x3d888800},
+{'8', 0xcf14e300, 0xec31ec14},
+{'8', 0x1233001c, 0x30171216},
+{'8', 0x31ec1d00, 0x14cf13ec},
+{'8', 0xeecd00e4, 0xd0eaeeeb},
+{'[', 0x002200ff, 0x00000100},/*kerning*/
+{'[', 0x002700ff, 0x00000100},/*kerning*/
+{'[', 0x006600ff, 0x000000dd},/*kerning*/
+{'[', 0x03c000ff, 0x000000bb},/*kerning*/
+{'[', 0x201c00ff, 0x00000100},/*kerning*/
+{'[', 0x201d00ff, 0x00000100},/*kerning*/
+{'@', 0x00000141, 0x000049dd},/*        Ł        x-advance: 73.863281 */
+{'M', 0x42864445, 0xc1811112},
+{'l', 0xc0377780, 0x41811112},
+{'l', 0xc272eef0, 0x00000000},
+{'l', 0x40ecccd0, 0xc22a2223},
+{'l', 0xc1111112, 0x40222220},
+{'l', 0x40044445, 0xc13aaaa8},
+{'l', 0x41100001, 0xc0222230},
+{'l', 0x40eeeef0, 0xc22b7778},
+{'l', 0x419cccce, 0x00000000},
+{'l', 0xc0ceeef0, 0x42140001},
+{'l', 0x416aaaa8, 0xc0822228},
+{'l', 0xc0044440, 0x413aaaac},
+{'l', 0xc169999a, 0x40844448},
+{'l', 0xc0b33334, 0x4200cccd},
+{'l', 0x4224ccce, 0x00000000},
+{'@', 0x000003c0, 0x00005544},/*        π        x-advance: 85.265625 */
+{'M', 0x40ccccce, 0xc265dddf},
+{'l', 0x40222220, 0xc16aaaac},
+{'l', 0x429bbbbc, 0x00000000},
+{'4', 0x0075ffec, 0x0000ffa8},
+{'l', 0xc0c22220, 0x420c0001},
+{'8', 0x29041afd, 0x0f240e07},
+{'9', 0x00010014, 0xfffe002e},
+{'l', 0xbfa22240, 0x416bbbbd},
+{'q', 0xc09ddde0, 0x3fdddddf},
+{0, 0xc12cccd0, 0x3fccccce},
+{'q', 0xc11bbbb8, 0xbe08888c},
+{0, 0xc1611110, 0xc0c00000},
+{'9', 0xffd2ffde, 0xff87ffe4},
+{'l', 0x40c00000, 0xc213bbbc},
+{'l', 0xc18dddde, 0xb6800000},
+{'l', 0xc11eeef0, 0x4265dddf},
+{'l', 0xc196eef0, 0x00000000},
+{'l', 0x41200002, 0xc265dddf},
+{'l', 0xc1366667, 0x00000000},
+{'@', 0x0000201c, 0x00003666},/*        “        x-advance: 54.398438 */
+{'M', 0x41466667, 0xc28bbbbc},
+{'l', 0x3fc44448, 0xc1200000},
+{'8', 0x922ac509, 0xa850cd21},
+{'l', 0x410ddde0, 0x40aeeef0},
+{'9', 0x0052ffc7, 0x0092ffba},
+{'4', 0x0059fff1, 0x0000ff89},
+{'m', 0x41b11112, 0x00000000},
+{'l', 0x3fc44440, 0xc1200000},
+{'8', 0x922ac509, 0xa850cd21},
+{'l', 0x410ddde0, 0x40aeeef0},
+{'9', 0x0052ffc7, 0x0092ffba},
+{'l', 0xbff77760, 0x41322228},
+{'l', 0xc16eeef0, 0x00000000},
+{'[', 0x0077201c, 0x000000bb},/*kerning*/
+{'@', 0x0000201d, 0x000036cc},/*        ”        x-advance: 54.796875 */
+{'M', 0x4210cccd, 0xc2ccccce},
+{'l', 0xbfccccc0, 0x41244448},
+{'8', 0x6ed83af8, 0x59b433e0},
+{'l', 0xc1177779, 0xc0b33330},
+{'9', 0xffad0039, 0xff6f0045},
+{'4', 0xffa50010, 0x00000077},
+{'m', 0x41b33334, 0x00000000},
+{'l', 0xbfccccc0, 0x41244448},
+{'8', 0x6ed83af8, 0x59b433e0},
+{'l', 0xc1177778, 0xc0b33330},
+{'9', 0xffad0039, 0xff6f0045},
+{'l', 0x40000000, 0xc1366668},
+{'l', 0x416eeef0, 0x00000000},
+{'[', 0x0077201d, 0x000000bb},/*kerning*/
+{'@', 0x00002022, 0x00002f99},/*        •        x-advance: 47.597656 */
+{'M', 0x41277778, 0xc2400001},
+{'l', 0x3d888880, 0xc02aaaa0},
+{'8', 0xa525ca02, 0xdd5bdc23},
+{'8', 0x22540035, 0x561f221f},
+{'l', 0xbd888800, 0x402eeef0},
+{'8', 0x59da36fe, 0x21a622dd},
+{'8', 0xdfac00cc, 0xace0dfe1},
+{'@', 0x00002026, 0x000062aa},/*        …        x-advance: 98.664062 */
+{'M', 0x4059999a, 0xc1133334},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'m', 0x41f4cccd, 0x00000000},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'m', 0x41f00000, 0x00000000},
+{'8', 0xc416dcff, 0xe73de818},
+{'8', 0x153b0023, 0x3a191619},
+{'8', 0x3cea2401, 0x18c418e8},
+{'8', 0xebc401dd, 0xc6e7eae8},
+{'@', 0x000020ac, 0x00004c00},/*        €        x-advance: 76.000000 */
+{'M', 0x4280eeef, 0xbf088889},
+{'q', 0xc1022220, 0x3fe66668},
+{0, 0xc1822222, 0x3fd55556},
+{'q', 0xc1788888, 0xbe4cccd0},
+{0, 0xc1c66666, 0xc11eeeef},
+{'9', 0xffb2ffb6, 0xff33ffc8},
+{'0', 0xaf0e01a3, 0xbe0b0056},
+{'4', 0x0000ffaa, 0xffb0000e},
+{'l', 0x41244445, 0x3d888a00},
+{'q', 0x408eeef0, 0xc1833334},
+{0, 0x4177777a, 0xc1d08888},
+{'q', 0x41311110, 0xc11aaab0},
+{0, 0x41e55556, 0xc1177778},
+{'9', 0x00010036, 0x0011007e},
+{'l', 0xc07bbbc0, 0x41819998},
+{'q', 0xc0b33340, 0xc00cccc0},
+{0, 0xc1377778, 0xc0155540},
+{'q', 0xc11eeef4, 0xbe4cce00},
+{0, 0xc17eeef4, 0x40a44440},
+{'9', 0x002affd1, 0x0073ffb9},
+{'l', 0x41b11112, 0xbd888a00},
+{'l', 0xbfdddde0, 0x41211114},
+{'l', 0xc1accccc, 0x00000000},
+{'l', 0xbfbbbbc0, 0x41055554},
+{'4', 0x000000ad, 0x0051fff2},
+{'l', 0xc1a8888a, 0x00000000},
+{'q', 0xbf9999a0, 0x410bbbbc},
+{0, 0x400cccd0, 0x41600000},
+{'8', 0x2b652a1b, 0xf0660130},
+{'l', 0x3f5dddc0, 0x41833334},
+{'@', 0x00002122, 0x000053aa},/*        â„¢        x-advance: 83.664062 */
+{'M', 0x428aaaab, 0xc2740001},
+{'l', 0x40777780, 0xc1adddde},
+{'l', 0xc1244444, 0x41ad5556},
+{'l', 0xc09999a0, 0x3e088800},
+{'l', 0xc0599990, 0xc1c2aaaa},
+{'l', 0xc0888888, 0x41c22222},
+{'l', 0xc1077778, 0x00000000},
+{'l', 0x40c88888, 0xc2104445},
+{'l', 0x41200000, 0x00000000},
+{'l', 0x40511110, 0x41c22224},
+{'l', 0x41444444, 0xc1c22224},
+{'4', 0x00000052, 0x0120ffce},
+{'6', 0x0000ffbd, 0xfee0ff35},
+{'l', 0xbfa22220, 0x40e44450},
+{'l', 0xc1055554, 0x00000000},
+{'l', 0xc0a00004, 0x41e5dddc},
+{'l', 0xc1166668, 0x00000000},
+{'l', 0x40a22224, 0xc1e5dddc},
+{'l', 0xc10ccccc, 0x00000000},
+{'l', 0x3fa22220, 0xc0e44450},
+{'l', 0x41d3bbbc, 0x00000000},
+{'@', 0x00002212, 0x00004999},/*        −        x-advance: 73.597656 */
+{'M', 0x42884445, 0xc25ddddf},
+{'l', 0xc02eef00, 0x417bbbc0},
+{'l', 0xc2600000, 0x00000000},
+{'l', 0x402eeeec, 0xc17bbbc0},
+{'l', 0x42600001, 0x00000000},
+{'@', 0x00002248, 0x00004c66},/*        ≈        x-advance: 76.398438 */
+{'M', 0x41000000, 0xc2351112},
+{'l', 0x3fb33338, 0xc17ccccc},
+{'q', 0x40e00002, 0xc0ddddd8},
+{0, 0x4183bbbc, 0xc0e00008},
+{'8', 0x0c430024, 0x1c3a0c20},
+{'8', 0x19350e1b, 0x0a3b0a1b},
+{'8', 0xec480028, 0xd23dec21},
+{'l', 0xbfc44480, 0x417ccccc},
+{'q', 0xc0e22218, 0x40e22220},
+{0, 0xc16cccc8, 0x40e22220},
+{'8', 0xf5c300df, 0xe5c7f5e4},
+{'8', 0xe5c7f0e3, 0xf5c3f5e5},
+{'9', 0x0001ffb6, 0x0043ff6e},
+{'m', 0xc09bbbbc, 0x41e00001},
+{'l', 0x3fbbbbc0, 0xc17cccce},
+{'q', 0x40dbbbbc, 0xc0dddde0},
+{0, 0x41800000, 0xc0e00000},
+{'8', 0x0b410023, 0x1b3b0b1e},
+{'8', 0x1a38101c, 0x0a3a0a1b},
+{'8', 0xec4a0028, 0xd23eec22},
+{'l', 0xbfbbbbc0, 0x417cccce},
+{'q', 0xc0e44448, 0x40e44444},
+{0, 0xc1755558, 0x40e00000},
+{'8', 0xf6c500e0, 0xe5c7f6e6},
+{'8', 0xe4c5efe2, 0xf5c2f5e4},
+{'q', 0xc10bbbbd, 0x3e088880},
+{0, 0xc18eeef0, 0x41066666},
+{'@', 0x00002423, 0x00005977},/*        ␣        x-advance: 89.464844 */
+{'M', 0xbfd55556, 0xc1155556},
+{'l', 0x41722223, 0x00000000},
+{'l', 0xc0400000, 0x41891112},
+{'l', 0x4247bbbc, 0xb5800000},
+{'l', 0x40400000, 0xc1891112},
+{'l', 0x41722228, 0x35800000},
+{'l', 0xc0b11120, 0x41ff7778},
+{'l', 0xc2a06666, 0x00000000},
+{'l', 0x40b1110a, 0xc1ff7778},
+{'@', 0x0000fb00, 0x00005733},/*        ff        x-advance: 87.199219 */
+{'M', 0x42408889, 0xc2684445},
+{'l', 0xc15ddddc, 0x00000000},
+{'l', 0xc1211114, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44450, 0xc13eeef0},
+{0, 0x41133334, 0xc1966668},
+{'q', 0x40f55554, 0xc0dddde0},
+{0, 0x419eeeef, 0xc0d77780},
+{'9', 0x0000001c, 0x000b0052},
+{'l', 0xbfd55560, 0x41700000},
+{'8', 0xfad4fae9, 0x14bc00d8},
+{'9', 0x0014ffe4, 0x003effdd},
+{'4', 0x002efff8, 0x0000006f},
+{'6', 0x0070ffed, 0x00000138},
+{'l', 0xc15ddde0, 0x00000000},
+{'l', 0xc1211110, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222224, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44460, 0xc13eeef0},
+{0, 0x41133334, 0xc1966668},
+{'q', 0x40f55560, 0xc0dddde0},
+{0, 0x419eeef0, 0xc0d77780},
+{'9', 0x0000001c, 0x000b0052},
+{'l', 0xbfd55580, 0x41700000},
+{'8', 0xfad4fae9, 0x14bc00d8},
+{'9', 0x0014ffe4, 0x003effdd},
+{'l', 0xbf800000, 0x40bbbbc0},
+{'l', 0x415eeef0, 0x00000000},
+{'l', 0xc01ddde0, 0x41611114},
+{'@', 0x0000fb01, 0x00005099},/*        fi        x-advance: 80.597656 */
+{'M', 0x423ddddf, 0xc2684445},
+{'l', 0xc15cccd0, 0x00000000},
+{'l', 0xc1211112, 0x42684445},
+{'l', 0xc1966666, 0x00000000},
+{'l', 0x41211111, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900014, 0x0000004d},
+{'l', 0x3f088880, 0xc0444440},
+{'q', 0x401ddde0, 0xc15eeef0},
+{0, 0x41377778, 0xc1ab3334},
+{'q', 0x41111110, 0xc0eeeef0},
+{0, 0x41baaaac, 0xc0eaaab0},
+{'8', 0x0a55002b, 0x1556092a},
+{'l', 0xc0844440, 0x4180888c},
+{'q', 0xc10eeef0, 0xc04ccce0},
+{0, 0xc1877778, 0xc0555560},
+{'8', 0x17ab00cf, 0x49d217dd},
+{'4', 0x0018fffc, 0x00000074},
+{'6', 0x0070ffed, 0xff9000f3},
+{'l', 0xc1477778, 0x42904445},
+{'l', 0xc1977776, 0x00000000},
+{'l', 0x41488888, 0xc2904445},
+{'l', 0x4196eeee, 0x00000000},
+{'@', 0x0000fb02, 0x00005122},/*        fl        x-advance: 81.132812 */
+{'M', 0x42408889, 0xc2684445},
+{'l', 0xc15ddddc, 0x00000000},
+{'l', 0xc1211114, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f2aaaa0, 0xc0a88880},
+{'q', 0x3fccccd0, 0xc1544448},
+{0, 0x41277778, 0xc19f7778},
+{'9', 0xffcb0047, 0xffcc00af},
+{'l', 0x41388888, 0x3eeeef00},
+{'l', 0x41a5dde0, 0x3fe66680},
+{'4', 0x032dff77, 0x0000ff6a},
+{'l', 0x4179999c, 0xc2af5556},
+{'8', 0xfbb0fbca, 0x14b200d4},
+{'9', 0x0014ffde, 0x0042ffd6},
+{'l', 0xbf5dde00, 0x40aaaaa0},
+{'l', 0x415eeef0, 0x00000000},
+{'l', 0xc01ddde0, 0x41611114},
+{'@', 0x0000fb03, 0x00007b00},/*        ffi        x-advance: 123.000000 */
+{'M', 0x423c8889, 0x00000000},
+{'l', 0x41211114, 0xc2684445},
+{'l', 0xc1b77778, 0x00000000},
+{'l', 0xc1211114, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44450, 0xc13eeef0},
+{0, 0x41133334, 0xc196eef0},
+{'q', 0x40f55554, 0xc0dddde0},
+{0, 0x419eeeef, 0xc0d77780},
+{'9', 0x0000001d, 0x000b0052},
+{'l', 0xbfd55560, 0x41700000},
+{'8', 0xfad4fbe9, 0x14bd00da},
+{'9', 0x0013ffe4, 0x003bffdc},
+{'4', 0x0032fff8, 0x000000b2},
+{'l', 0x3f199980, 0xc05ddde0},
+{'q', 0x40266670, 0xc15bbbb8},
+{0, 0x4139999c, 0xc1a88888},
+{'q', 0x41111110, 0xc0ecccd0},
+{0, 0x41b99998, 0xc0e66660},
+{'8', 0x0a57002c, 0x1555092b},
+{'l', 0xc08aaab0, 0x417ddde0},
+{'q', 0xc11aaaa8, 0xc0511120},
+{0, 0xc1880000, 0xc0511120},
+{'8', 0x17ac00cf, 0x49d317de},
+{'l', 0xbf199980, 0x40444440},
+{'l', 0x41677778, 0xbd888800},
+{'l', 0xc01ddde0, 0x41611114},
+{'4', 0x0000ff93, 0x01d0ffaf},
+{'6', 0x0000ff6a, 0xfdbf0249},
+{'l', 0xc1488880, 0x42904445},
+{'l', 0xc196eef0, 0x00000000},
+{'l', 0x41477778, 0xc2904445},
+{'l', 0x41977778, 0x00000000},
+{'@', 0x0000fb04, 0x00007b00},/*        ffl        x-advance: 123.000000 */
+{'M', 0x423c8889, 0x00000000},
+{'l', 0x41211114, 0xc2684445},
+{'l', 0xc1b77778, 0x00000000},
+{'l', 0xc1211114, 0x42684445},
+{'l', 0xc1977778, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44450, 0xc13eeef0},
+{0, 0x41144446, 0xc1966668},
+{'q', 0x40f77778, 0xc0dddde0},
+{0, 0x419eeef0, 0xc0d77780},
+{'9', 0x0000001c, 0x000b0051},
+{'l', 0xbfd55560, 0x41700000},
+{'8', 0xfad4fae9, 0x13bd00d9},
+{'9', 0x0014ffe5, 0x003bffdd},
+{'4', 0x0032fff8, 0x000000b7},
+{'l', 0x3f2aaac0, 0xc0a88880},
+{'q', 0x3fdddde0, 0xc1544448},
+{0, 0x41288888, 0xc19eeef0},
+{'q', 0x410cccd0, 0xc0d55560},
+{0, 0x41ae6668, 0xc0d33340},
+{'9', 0x00000041, 0x00060084},
+{'l', 0x417aaab0, 0x3fb33340},
+{'4', 0x032dff78, 0x0000ff6a},
+{'l', 0x41788890, 0xc2af5556},
+{'8', 0xfbb1fbcf, 0x14b200d5},
+{'9', 0x0014ffde, 0x0042ffd6},
+{'l', 0xbf5ddd80, 0x40aaaaa0},
+{'l', 0x415eeef0, 0x00000000},
+{'l', 0xc01ddde0, 0x41611114},
+{'l', 0xc15ddde0, 0x00000000},
+{'l', 0xc1222228, 0x42684445},
+{'l', 0xc196eeee, 0x00000000},
+{'@', 0x0000fb05, 0x000055aa},/*        ſt        x-advance: 85.664062 */
+{'M', 0x423eaaab, 0xc2d00001},
+{'q', 0x41066668, 0x3e088a00},
+{0, 0x41822224, 0x40155560},
+{'9', 0x0011003f, 0x0028007d},
+{'l', 0xc0733340, 0x41c44444},
+{'l', 0x41400000, 0x00000000},
+{'4', 0x0070ffed, 0x0000ffa1},
+{'l', 0xc0c66660, 0x4210cccd},
+{'8', 0x29041afd, 0x0f240e07},
+{'9', 0x00010011, 0xfffd002d},
+{'l', 0xbfa22240, 0x416bbbbd},
+{'8', 0x0caa0dda, 0xd091ffb4},
+{'9', 0xffd2ffdd, 0xff87ffe4},
+{'l', 0x40c66668, 0xc2184444},
+{'l', 0xc1233334, 0xb6800000},
+{'4', 0xff900013, 0x00000051},
+{'l', 0x40333330, 0xc1666668},
+{'8', 0xf0aef0e0, 0x53a000af},
+{'l', 0xc1566668, 0x429c2223},
+{'l', 0xc196eef0, 0x00000000},
+{'l', 0x41222223, 0xc2684445},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xff900013, 0x00000053},
+{'l', 0x3f4cccc0, 0xc0c66660},
+{'q', 0x3fc44450, 0xc1400000},
+{0, 0x41133334, 0xc1966668},
+{'q', 0x40f7777c, 0xc0dbbbc0},
+{0, 0x419eeeef, 0xc0d999a0},
+};
+#define ctx_font_Roboto_BoldItalic_name "Roboto Bold Italic"
+#endif
diff --git a/usermodule/uctx/fonts/Roboto-Italic.h b/usermodule/uctx/fonts/Roboto-Italic.h
new file mode 100644
index 0000000000000000000000000000000000000000..952124c2262aaa0b6b1aa2341dbb968f1a9acd2d
--- /dev/null
+++ b/usermodule/uctx/fonts/Roboto-Italic.h
@@ -0,0 +1,4979 @@
+#ifndef CTX_FONT_Roboto_Italic
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™−≈␣fffiflffifflſt  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Roboto_Italic[]={
+{15, 0x0000a008, 0x00001368},/* length:4968 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000f, 0x00000002},/* Roboto Italic*/
+{32, 0x6f626f52, 0x49206f74},
+{'t', 0x63696c61, 0x00000000},
+{')', 0x0000000f, 0x00000002},
+{'(', 0x0000004b, 0x00000009},/* Apache Licence, Version 2.0
+                                Copyright 2014 Christian Robertson - Apache 2*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x636e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x43203431},
+{'h', 0x74736972, 0x206e6169},
+{'R', 0x7265626f, 0x6e6f7374},
+{32, 0x7041202d, 0x65686361},
+{32, 0x00000032, 0x00000000},
+{')', 0x0000004b, 0x00000009},
+{'@', 0x00000020, 0x00002188},/*                 x-advance: 33.531250 */
+{'@', 0x00000021, 0x00002222},/*        !        x-advance: 34.132812 */
+{'M', 0x42055556, 0xc2c22223},
+{'l', 0xc14eeef0, 0x428b5556},
+{'4', 0x0000ffa9, 0xfdd30059},
+{'6', 0x00000065, 0x02d8ff1a},
+{'8', 0xd710e700, 0xef29ef10},
+{'8', 0x0f280018, 0x28101010},
+{'8', 0x29f01800, 0x11d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x00000022, 0x00002a66},/*        "        x-advance: 42.398438 */
+{'M', 0x41d22223, 0xc2b95556},
+{'l', 0xc0b11114, 0x41b91110},
+{'l', 0xc0eaaaaa, 0x00000000},
+{'4', 0xfefa0029, 0x00000049},
+{'6', 0x004dfff4, 0x0000008b},
+{'l', 0xc0b11118, 0x41b91110},
+{'l', 0xc0eaaaa8, 0x00000000},
+{'l', 0x40a66668, 0xc2037778},
+{'l', 0x41133334, 0x00000000},
+{'l', 0xbfc44440, 0x411bbbc0},
+{'[', 0x00770022, 0x000000bb},/*kerning*/
+{'@', 0x00000023, 0x00005188},/*        #        x-advance: 81.531250 */
+{'M', 0x4214cccd, 0x00000000},
+{'l', 0x41200000, 0xc1daaaab},
+{'l', 0xc185dddd, 0x00000000},
+{'l', 0xc11eeef0, 0x41daaaab},
+{'l', 0xc119999a, 0x00000000},
+{'l', 0x411eeef0, 0xc1daaaab},
+{'l', 0xc1766668, 0x00000000},
+{'l', 0x3fcccccc, 0xc1133336},
+{'l', 0x41888889, 0x00000000},
+{'l', 0x41088888, 0xc1bc4444},
+{'l', 0xc184cccd, 0x00000000},
+{'l', 0x3fccccd0, 0xc1144444},
+{'l', 0x4192aaaa, 0x00000000},
+{'l', 0x41211114, 0xc1dddde0},
+{'l', 0x411bbbbc, 0x00000000},
+{'l', 0xc1222224, 0x41dddde0},
+{'l', 0x4185ddde, 0x00000000},
+{'l', 0x41211110, 0xc1dddde0},
+{'l', 0x411aaab0, 0x00000000},
+{'l', 0xc1222228, 0x41dddde0},
+{'l', 0x41500008, 0x00000000},
+{'l', 0xbfcccd00, 0x41144444},
+{'l', 0xc16bbbb8, 0x00000000},
+{'l', 0xc108888c, 0x41bc4444},
+{'l', 0x41655554, 0x00000000},
+{'l', 0xbfccccc0, 0x41133336},
+{'4', 0x0000ff80, 0x00daffb1},
+{'6', 0x0000ffb3, 0xfedcffe5},
+{'l', 0x41855556, 0x00000000},
+{'l', 0x41099998, 0xc1bc4444},
+{'l', 0xc185ddde, 0x00000000},
+{'l', 0xc1088888, 0x41bc4444},
+{'@', 0x00000024, 0x00004a66},/*        $        x-advance: 74.398438 */
+{'M', 0x42822223, 0xc1ccccce},
+{'q', 0xbf5dde00, 0x41433335},
+{0, 0xc1111114, 0x4196eef0},
+{'9', 0x0034ffbf, 0x003eff63},
+{'4', 0x0065ffee, 0x0000ffb3},
+{'l', 0x40155558, 0xc14cccce},
+{'q', 0xc13bbbbc, 0xbfe66666},
+{0, 0xc1877778, 0xc1211111},
+{'9', 0xffbeffd7, 0xff64ffdd},
+{'l', 0x41411112, 0x00000000},
+{'8', 0x6b163efc, 0x2d602c1b},
+{'8', 0xe16d013d, 0x9f38e030},
+{'8', 0xa7e0c606, 0xcda8e0db},
+{'q', 0xc1211110, 0xc07bbbc0},
+{0, 0xc1844444, 0xc1266668},
+{'q', 0xc0ceeef0, 0xc0d11110},
+{0, 0xc0b33334, 0xc18f7776},
+{'q', 0x3f4cccc0, 0xc13999a0},
+{0, 0x41044444, 0xc193bbbc},
+{'9', 0xffca003b, 0xffbe0094},
+{'4', 0xff8c0014, 0x0000004e},
+{'l', 0xc02aaab0, 0x416cccc8},
+{'q', 0x4138888c, 0x400888a0},
+{0, 0x41766668, 0x41333338},
+{'9', 0x0048001e, 0x009c0019},
+{'l', 0xc13eeeec, 0x00000000},
+{'8', 0x94f0c903, 0xc9a9cbec},
+{'8', 0x219dffc5, 0x5dd322d9},
+{'8', 0x5b1e3cfa, 0x32581e25},
+{'q', 0x41222224, 0x40800000},
+{0, 0x41855556, 0x41266668},
+{'q', 0x40d11110, 0x40ccccd0},
+{0, 0x40b77780, 0x41900000},
+{'@', 0x00000025, 0x00006100},/*        %        x-advance: 97.000000 */
+{'M', 0x414bbbbc, 0xc2928889},
+{'l', 0x3eeeef00, 0xc0a22220},
+{'q', 0x3f5ddde0, 0xc1088888},
+{0, 0x40d77778, 0xc1677778},
+{'q', 0x40bddde0, 0xc0bddde0},
+{0, 0x416ccccc, 0xc0b77780},
+{'q', 0x41077778, 0x3e4cce00},
+{0, 0x41511114, 0x40c44450},
+{'9', 0x002e0024, 0x00700020},
+{'l', 0xbecccc80, 0x40a44440},
+{'q', 0xbf6eef00, 0x41077778},
+{0, 0xc0d999a0, 0x41655554},
+{'q', 0xc0bbbbb8, 0x40bbbbc0},
+{0, 0xc16aaaaa, 0x40b55558},
+{'8', 0xd097ffbd, 0x91dfd2db},
+{'m', 0x411aaaac, 0xc0a44440},
+{'l', 0xbf1999a0, 0x40a88880},
+{'8', 0x400c22fe, 0x1e371d0f},
+{'8', 0xe4420129, 0xbd1de318},
+{'l', 0x3f199980, 0xc0a66660},
+{'8', 0xbff4de02, 0xe1cae2f2},
+{'8', 0x1dbeffd7, 0x43e31de8},
+{'m', 0x42704444, 0xc08cccd0},
+{'l', 0xc26aaaaa, 0x42968889},
+{'4', 0xffdaffcc, 0xfda701d5},
+{'6', 0x00250034, 0x0201fef6},
+{'l', 0x3eeeef00, 0xc0a4444c},
+{'q', 0x3f5dde00, 0xc108888a},
+{0, 0x40d77778, 0xc1666666},
+{'q', 0x40bddde0, 0xc0bddde0},
+{0, 0x416bbbc0, 0xc0b77778},
+{'q', 0x41077778, 0x3e4ccd00},
+{0, 0x41511110, 0x40c22220},
+{'9', 0x002e0025, 0x00700021},
+{'l', 0xbeeeef00, 0x40a66668},
+{'q', 0xbf5dde00, 0x41088888},
+{0, 0xc0d77770, 0x41666666},
+{'q', 0xc0b999a0, 0x40bbbbbe},
+{0, 0xc16aaab0, 0x40b55557},
+{'q', 0xc1077774, 0xbe4cccc8},
+{0, 0xc1522220, 0xc0c22223},
+{'9', 0xffd2ffdb, 0xff90ffdf},
+{'m', 0x411aaaac, 0xc0a66668},
+{'l', 0xbeeeef00, 0x40accccc},
+{'8', 0x400b22fe, 0x1e361d0e},
+{'8', 0xe442012a, 0xbc1de318},
+{'l', 0x3f199980, 0xc0a8888c},
+{'8', 0xbff4dd02, 0xe2c9e3f2},
+{'8', 0x1cbeffd6, 0x43e31de8},
+{'@', 0x00000026, 0x00005266},/*        &        x-advance: 82.398438 */
+{'M', 0x42773334, 0x00000000},
+{'l', 0xc09bbbb8, 0xc0f33334},
+{'q', 0xc139999c, 0x41122223},
+{0, 0xc1cc4446, 0x410dddde},
+{'q', 0xc13cccce, 0xbe4cccb8},
+{0, 0xc19eeef0, 0xc0eaaaab},
+{'q', 0xc1011110, 0xc0e44445},
+{0, 0xc0e22221, 0xc19ccccd},
+{'q', 0x3f3bbbc0, 0xc11ccccc},
+{0, 0x40f55557, 0xc180888a},
+{'q', 0x40e00002, 0xc0c88888},
+{0, 0x416aaaab, 0xc1311110},
+{'8', 0xaed6d8ea, 0xa6f1d6ee},
+{'q', 0x3f4ccce0, 0xc12eeef0},
+{0, 0x41000002, 0xc18ccccc},
+{'q', 0x40e66668, 0xc0d77780},
+{0, 0x4191999a, 0xc0ceeef0},
+{'q', 0x41088888, 0x3e4ccc00},
+{0, 0x41699998, 0x40b33330},
+{'q', 0x40c44450, 0x40aaaaa0},
+{0, 0x40b33330, 0x41655558},
+{'8', 0x66d73bfd, 0x4aab2adb},
+{'4', 0x002bffbf, 0x00cb0084},
+{'9', 0xffbb0030, 0xff66003d},
+{'l', 0x41299998, 0x00000000},
+{'9', 0x0088fff3, 0x00e2ffa0},
+{'4', 0x00830053, 0x0000ff95},
+{'m', 0xc1f1999a, 0xc2957778},
+{'8', 0x400a21fd, 0x3a1e1e0e},
+{'l', 0x40e22220, 0xc09999a0},
+{'8', 0xd039eb20, 0xbd1de619},
+{'8', 0xc7eddd03, 0xebc7ebea},
+{'8', 0x21b600d3, 0x4cdf21e4},
+{'m', 0xc16eeef0, 0x42448889},
+{'8', 0x611a3cf8, 0x245e2323},
+{'8', 0xef51012b, 0xd546ee25},
+{'l', 0xc1911112, 0xc1e0888a},
+{'8', 0x4aa628c7, 0x4ddb21e0},
+{'@', 0x00000027, 0x00001722},/*        '        x-advance: 23.132812 */
+{'M', 0x41d22223, 0xc2ccccce},
+{'l', 0xbfa22220, 0x40f999a0},
+{'l', 0xc0a22224, 0x41c08888},
+{'l', 0xc1077778, 0x00000000},
+{'l', 0x40a22224, 0xc1feeef0},
+{'l', 0x411bbbbc, 0x00000000},
+{'[', 0x00770027, 0x000000bb},/*kerning*/
+{'@', 0x00000028, 0x00002d55},/*        (        x-advance: 45.332031 */
+{'M', 0x41077778, 0xc219ddde},
+{'l', 0x3e088880, 0xbf3bbbc0},
+{'q', 0x3ff77778, 0xc1511114},
+{0, 0x40e00000, 0xc1d7777a},
+{'q', 0x40a44444, 0xc15eeef0},
+{0, 0x415cccce, 0xc1cc4444},
+{'9', 0xffa30045, 0xff7100aa},
+{'l', 0x3feeef00, 0x41044448},
+{'q', 0xc1266668, 0x40f55550},
+{0, 0xc188888a, 0x41933334},
+{'q', 0xc0d55554, 0x412bbbb8},
+{0, 0xc1377776, 0x41df7776},
+{'q', 0xc0977778, 0x4189999a},
+{0, 0xc09ddde0, 0x42173334},
+{'q', 0xbe088880, 0x413dddde},
+{0, 0x40377778, 0x41b77778},
+{'9', 0x00580018, 0x00910058},
+{'l', 0xc0444440, 0x40ecccd0},
+{'q', 0xc128888a, 0xc0eaaaac},
+{0, 0xc17aaaac, 0xc19aaaac},
+{'q', 0xc0a44444, 0xc1411111},
+{0, 0xc0c66668, 0xc1cc4444},
+{'q', 0xbf888884, 0xc1566668},
+{0, 0x3eeeef00, 0xc1c77778},
+{'[', 0x00560028, 0x00000155},/*kerning*/
+{'[', 0x00570028, 0x00000133},/*kerning*/
+{'[', 0x00590028, 0x00000177},/*kerning*/
+{'[', 0x00dd0028, 0x00000177},/*kerning*/
+{'@', 0x00000029, 0x00002e22},/*        )        x-advance: 46.132812 */
+{'M', 0x42126667, 0xc21f3334},
+{'l', 0xbd888800, 0x3f3bbbc0},
+{'q', 0xbff77780, 0x41511112},
+{0, 0xc0e22224, 0x41d80001},
+{'q', 0xc0a22224, 0x415eeef0},
+{0, 0xc15cccce, 0x41ccccce},
+{'9', 0x005cffbb, 0x008eff56},
+{'l', 0xbfeeeef0, 0xc0f33334},
+{'q', 0x4169999a, 0xc1300000},
+{0, 0x41aeeef0, 0xc1e00001},
+{'9', 0xff78003a, 0xfeec004f},
+{'l', 0x3e4ccd00, 0xbf800000},
+{'q', 0x3faaaab0, 0xc1166668},
+{0, 0x3fb33330, 0xc1aa2224},
+{'q', 0x3d888900, 0xc13ccccc},
+{0, 0xc0400000, 0xc1b6eeee},
+{'9', 0xffa8ffe8, 0xff6fffaa},
+{'l', 0x40488888, 0xc0eeeef0},
+{'q', 0x41277779, 0x40eaaab0},
+{0, 0x41788889, 0x419aaaac},
+{'q', 0x40a44444, 0x41400000},
+{0, 0x40c8888c, 0x41cb3334},
+{'q', 0x3f911100, 0x41577778},
+{0, 0xbeeeef00, 0x41c80000},
+{'@', 0x0000002a, 0x00003911},/*        *        x-advance: 57.066406 */
+{'M', 0x41188889, 0xc23eeef0},
+{'l', 0x4180888a, 0xc1911110},
+{'l', 0xc193bbbd, 0xc0c00000},
+{'l', 0x40933334, 0xc1188888},
+{'l', 0x41944445, 0x40eeeef0},
+{'l', 0x40599998, 0xc1b9999c},
+{'l', 0x411eeef0, 0x00000000},
+{'l', 0xc0955558, 0x41b80000},
+{'l', 0x41a22224, 0xc0e88880},
+{'l', 0x3fa22220, 0x412aaaa8},
+{'l', 0xc1a80002, 0x40c22220},
+{'l', 0x411bbbbc, 0x4192aaac},
+{'l', 0xc1088888, 0x40b99998},
+{'l', 0xc10aaaac, 0xc19a2222},
+{'l', 0xc16ddddc, 0x41944444},
+{'l', 0xc0f33336, 0xc0ceeef0},
+{'@', 0x0000002b, 0x00004b22},/*        +        x-advance: 75.132812 */
+{'M', 0x428b7778, 0xc221ddde},
+{'l', 0xc1d22224, 0x00000000},
+{'l', 0xc0aaaaa8, 0x41f5ddde},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x40aaaaac, 0xc1f5ddde},
+{'l', 0xc1d2aaab, 0x00000000},
+{'l', 0x40044442, 0xc139999c},
+{'l', 0x41d22223, 0x00000000},
+{'l', 0x409ddde0, 0xc1e2aaaa},
+{'l', 0x41411110, 0x00000000},
+{'l', 0xc09ddde0, 0x41e2aaaa},
+{'l', 0x41d22224, 0x00000000},
+{'l', 0xc0000000, 0x4139999c},
+{'@', 0x0000002c, 0x00001a11},/*        ,        x-advance: 26.066406 */
+{'M', 0x417aaaac, 0xc16aaaab},
+{'l', 0xbfc44448, 0x41177778},
+{'9', 0x0078ffed, 0x00c4ff88},
+{'l', 0xc0d55556, 0xc0a00002},
+{'9', 0xffb3003e, 0xff69004d},
+{'l', 0x3fdddde0, 0xc1222222},
+{'l', 0x413cccce, 0x00000000},
+{'@', 0x0000002d, 0x00002499},/*        -        x-advance: 36.597656 */
+{'M', 0x420ccccd, 0xc2395556},
+{'l', 0xbfe66660, 0x41222224},
+{'l', 0xc1fd5556, 0x00000000},
+{'l', 0x3fe66666, 0xc1222224},
+{'l', 0x41fd5556, 0x00000000},
+{'@', 0x0000002e, 0x000022ee},/*        .        x-advance: 34.929688 */
+{'M', 0x40622223, 0xc0caaaab},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'@', 0x0000002f, 0x000036aa},/*        /        x-advance: 54.664062 */
+{'M', 0x42740001, 0xc2c22223},
+{'l', 0xc2662223, 0x42d2ccce},
+{'l', 0xc12eeef0, 0xb6000000},
+{'l', 0x42666667, 0xc2d2ccce},
+{'l', 0x412ddde0, 0x00000000},
+{'@', 0x00000030, 0x00004a66},/*        0        x-advance: 74.398438 */
+{'M', 0x428b3334, 0xc2611112},
+{'l', 0xc0111120, 0x416bbbbc},
+{'q', 0xbfccccc0, 0x412cccce},
+{0, 0xc0acccc8, 0x41a5dddf},
+{'q', 0xc06eeef0, 0x411eeef0},
+{0, 0xc1322224, 0x4181999a},
+{'q', 0xc0eaaab0, 0x40c8888a},
+{0, 0xc19d5556, 0x40bddddf},
+{'q', 0xc13dddde, 0xbe88888c},
+{0, 0xc189999a, 0xc0dddddf},
+{'q', 0xc0aaaaac, 0xc0d77778},
+{0, 0xc0c8888a, 0xc1844445},
+{'9', 0xffb2fff8, 0xff660001},
+{'l', 0x400cccce, 0xc16cccd0},
+{'q', 0x3fc44440, 0xc1288888},
+{0, 0x40a88888, 0xc1a22224},
+{'q', 0x40733338, 0xc11cccc8},
+{0, 0x41322222, 0xc1800000},
+{'q', 0x40ecccd0, 0xc0c66660},
+{0, 0x419dddde, 0xc0bbbbb0},
+{'q', 0x413ddde0, 0x3e888800},
+{0, 0x4189999a, 0x40d99990},
+{'q', 0x40acccd0, 0x40ceeef0},
+{0, 0x40ccccd0, 0x41808888},
+{'9', 0x004c0008, 0x009affff},
+{'m', 0xc12eeef4, 0xc16aaaa8},
+{'8', 0xa0ebca00, 0xd5add7eb},
+{'8', 0x2399febf, 0x60c826db},
+{'9', 0x0039ffee, 0x006fffe6},
+{'l', 0xc02eeef0, 0x41944446},
+{'8', 0x63fb2afb, 0x641439ff},
+{'8', 0x2d522b15, 0xe8590236},
+{'q', 0x408cccd0, 0xc0511114},
+{0, 0x40ecccd0, 0xc1211112},
+{'9', 0xffca0018, 0xff620028},
+{'l', 0x40222220, 0xc186eef0},
+{'q', 0x3f3bbbc0, 0xc0aeeef0},
+{0, 0x3f4cccc0, 0xc1477774},
+{'@', 0x00000031, 0x00004a66},/*        1        x-advance: 74.398438 */
+{'M', 0x42633334, 0xc2c33334},
+{'l', 0xc1844444, 0x42c33334},
+{'l', 0xc1411114, 0x00000000},
+{'l', 0x41644444, 0xc2a3bbbc},
+{'l', 0xc1ce6666, 0x41100000},
+{'l', 0x40088888, 0xc13aaab0},
+{'l', 0x420f7778, 0xc1511110},
+{'l', 0x40088880, 0x00000000},
+{'@', 0x00000032, 0x00004a66},/*        2        x-advance: 74.398438 */
+{'M', 0x4281ddde, 0xc1222223},
+{'l', 0xbfccccc0, 0x41222223},
+{'4', 0x0000fe13, 0xffb5000b},
+{'l', 0x420f7778, 0xc20bbbbc},
+{'q', 0x40aeeef0, 0xc0acccd0},
+{0, 0x413aaaac, 0xc1422224},
+{'q', 0x40c66668, 0xc0d99998},
+{0, 0x40e88888, 0xc1711114},
+{'8', 0xa3eaca06, 0xd7abd9e4},
+{'q', 0xc1144444, 0xbe888900},
+{0, 0xc16dddde, 0x40acccd0},
+{'9', 0x002dffd4, 0x0072ffca},
+{'l', 0xc13dddde, 0x3d888800},
+{'q', 0x3fa22228, 0xc1599998},
+{0, 0x412cccce, 0xc1aeeeec},
+{'q', 0x41188888, 0xc1044448},
+{0, 0x41b9999a, 0xc1000000},
+{'q', 0x41355558, 0x3e4ccc00},
+{0, 0x41966668, 0x40ddddd0},
+{'q', 0x40f11110, 0x40d55560},
+{0, 0x40ceeef0, 0x41944448},
+{'q', 0xbf5dde00, 0x41266664},
+{0, 0xc1011114, 0x41991110},
+{'9', 0x0045ffc7, 0x007bff8f},
+{'l', 0xc1edddde, 0x41e22222},
+{'l', 0x423b3333, 0x35800000},
+{'@', 0x00000033, 0x00004a66},/*        3        x-advance: 74.398438 */
+{'M', 0x41cf7778, 0xc231ddde},
+{'4', 0xffaf000c, 0x0000003f},
+{'q', 0x41022224, 0xbd888800},
+{0, 0x41677778, 0xc0888888},
+{'8', 0x9a3ade32, 0xa1ebc605},
+{'8', 0xdaa8dce6, 0x2498ffc2},
+{'9', 0x0024ffd7, 0x0061ffcd},
+{'l', 0xc13eeeef, 0x3d888800},
+{'q', 0x3f911110, 0xc1455558},
+{0, 0x41277777, 0xc19d5554},
+{'q', 0x41166666, 0xc0eaaab0},
+{0, 0x41ac4445, 0xc0e44450},
+{'q', 0x41400000, 0x3e888900},
+{0, 0x4198888a, 0x40f11120},
+{'q', 0x40e44440, 0x40e88880},
+{0, 0x40c44440, 0x419c4444},
+{'8', 0x6bd03ffc, 0x439f2bd5},
+{'8', 0x46501637, 0x69142e19},
+{'q', 0xbf800000, 0x41555556},
+{0, 0xc1288888, 0x41aa2223},
+{'q', 0xc118888c, 0x40fbbbbc},
+{0, 0xc1b55557, 0x40f33333},
+{'q', 0xc1400000, 0xbe88888c},
+{0, 0xc19d5556, 0xc0eeeef0},
+{'9', 0xffc6ffc4, 0xff64ffc8},
+{'l', 0x41400001, 0x3d888900},
+{'8', 0x611c3cfd, 0x255d2420},
+{'q', 0x410aaaaa, 0x3e4cccc0},
+{0, 0x41633336, 0xc09bbbbc},
+{'8', 0x9433d82c, 0x9ce3bd06},
+{'q', 0xc0933330, 0xc0888888},
+{0, 0xc1488888, 0xc0911110},
+{'l', 0xc1177778, 0xbd888800},
+{'@', 0x00000034, 0x00004a66},/*        4        x-advance: 74.398438 */
+{'M', 0x3fdddddf, 0xc1f3bbbd},
+{'l', 0x42555556, 0xc2853334},
+{'l', 0x41533334, 0x00000000},
+{'l', 0xc1322224, 0x4280ccce},
+{'l', 0x41522224, 0xb6800000},
+{'l', 0xbfe66680, 0x41222222},
+{'l', 0xc1511110, 0x00000000},
+{'l', 0xc07bbbb0, 0x41b44445},
+{'l', 0xc1411114, 0x00000000},
+{'4', 0xff4c001f, 0x0000fea8},
+{'6', 0xffc1000b, 0xffef0073},
+{'l', 0x41e6eef0, 0x00000000},
+{'l', 0x410bbbbc, 0xc23f7779},
+{'l', 0xc0044440, 0x403bbbc0},
+{'l', 0xc20e2223, 0x4233bbbd},
+{'@', 0x00000035, 0x00004a66},/*        5        x-advance: 74.398438 */
+{'M', 0x41c4cccd, 0xc2391112},
+{'l', 0xc11eeeef, 0xc02aaaa0},
+{'l', 0x41444445, 0xc240888a},
+{'l', 0x4241ddde, 0x00000000},
+{'4', 0x005bfff2, 0x0000fed0},
+{'l', 0xc0eeeef4, 0x41d3bbbc},
+{'q', 0x40e8888c, 0xc0888888},
+{0, 0x417dddde, 0xc0866660},
+{'q', 0x41100000, 0x3d888800},
+{0, 0x41677778, 0x40977778},
+{'q', 0x40b11118, 0x40933330},
+{0, 0x40f999a0, 0x413eeeec},
+{'q', 0x40155560, 0x40e88890},
+{0, 0x3fccccc0, 0x41755558},
+{'q', 0xbf999980, 0x41611112},
+{0, 0xc1233334, 0x41bcccce},
+{'q', 0xc10eeef0, 0x41188888},
+{0, 0xc1bd5556, 0x41133332},
+{'q', 0xc1422222, 0xbe4cccb0},
+{0, 0xc1980000, 0xc0f77777},
+{'9', 0xffc4ffca, 0xff66ffc6},
+{'l', 0x41355556, 0x00000000},
+{'8', 0x5f213903, 0x275b251d},
+{'q', 0x411aaaac, 0x3e4cccc0},
+{0, 0x41700004, 0xc0d9999a},
+{'q', 0x40aaaaa8, 0xc0e00002},
+{0, 0x40c66660, 0xc17ccccf},
+{'q', 0x3f4ccd00, 0xc0fbbbb8},
+{0, 0xc02eeef0, 0xc1655554},
+{'8', 0xcb9ecde4, 0x0cbcffda},
+{'q', 0xc06eeee8, 0x3fcccce0},
+{0, 0xc0eccccc, 0x40911110},
+{'@', 0x00000036, 0x00004a66},/*        6        x-advance: 74.398438 */
+{'M', 0x4285999a, 0xc2008889},
+{'q', 0xbfa22200, 0x4159999a},
+{0, 0xc1211110, 0x41bdddde},
+{'q', 0xc10bbbbc, 0x41222224},
+{0, 0xc1ba2224, 0x411cccce},
+{'q', 0xc11dddde, 0xbe888878},
+{0, 0xc17dddde, 0xc0bdddde},
+{'q', 0xc0bdddde, 0xc0b77778},
+{0, 0xc1044444, 0xc1644445},
+{'9', 0xffbcffee, 0xff77fff6},
+{'l', 0x3f3bbbb0, 0xc0bbbbc0},
+{'q', 0x4008888c, 0xc16eeef0},
+{0, 0x41044445, 0xc1dc4444},
+{'q', 0x40c66668, 0xc14aaab0},
+{0, 0x4189999b, 0xc1a1999c},
+{'9', 0xffc40058, 0xffc300dc},
+{'4', 0x0000000d, 0x0053fff8},
+{'l', 0xbfaaaaa0, 0x00000000},
+{'q', 0xc1777778, 0x3d888800},
+{0, 0xc1c4ccce, 0x41111110},
+{'q', 0xc1122222, 0x410eeef0},
+{0, 0xc15bbbbc, 0x41b66668},
+{'q', 0x410ddde0, 0xc1100004},
+{0, 0x41a8888a, 0xc10aaaac},
+{'q', 0x410aaaac, 0x3e4ccd00},
+{0, 0x41600000, 0x40999998},
+{'q', 0x40aaaaa8, 0x40933330},
+{0, 0x40eeeef0, 0x413ccccc},
+{'9', 0x00390011, 0x0076000c},
+{'m', 0xc23a6667, 0xc0555550},
+{'8', 0x590127fc, 0x551f3106},
+{'q', 0x40488888, 0x40911110},
+{0, 0x411aaaaa, 0x40977778},
+{'q', 0x4118888c, 0x3eaaaaa0},
+{0, 0x416bbbc0, 0xc0dddde0},
+{'q', 0x40a66660, 0xc0eaaaac},
+{0, 0x40c22220, 0xc17bbbbc},
+{'8', 0xb2fdda04, 0xbcdfd8f8},
+{'8', 0xe3bae5e8, 0x1d9fffcb},
+{'q', 0xc0accccc, 0x407bbbc0},
+{0, 0xc1066666, 0x4119999c},
+{'l', 0xbf1999a0, 0x40977778},
+{'@', 0x00000037, 0x00004a66},/*        7        x-advance: 74.398438 */
+{'M', 0x429b5556, 0xc2c22223},
+{'l', 0xbf9999c0, 0x40f33330},
+{'l', 0xc252eeee, 0x42b2eef0},
+{'l', 0xc1544448, 0x00000000},
+{'l', 0x42522223, 0xc2adddde},
+{'l', 0xc24aaaac, 0x00000000},
+{'l', 0x3fcccce0, 0xc1222228},
+{'l', 0x427eeef0, 0x00000000},
+{'@', 0x00000038, 0x00004a66},/*        8        x-advance: 74.398438 */
+{'M', 0x42817778, 0xc1d6eef0},
+{'q', 0xbf800000, 0x41566668},
+{0, 0xc12ddde0, 0x41a77778},
+{'q', 0xc11ccccc, 0x40f11114},
+{0, 0xc1b55556, 0x40e8888b},
+{'q', 0xc13dddde, 0xbe4cccd0},
+{0, 0xc19ccccd, 0xc0ecccce},
+{'q', 0xc0f55556, 0xc0e88889},
+{0, 0xc0d55556, 0xc19d5556},
+{'q', 0x3f3bbbc0, 0xc1111112},
+{0, 0x40c8888a, 0xc1722222},
+{'8', 0xb46ccf2c, 0xb8c3e4d7},
+{'q', 0xc01ddde0, 0xc0b11110},
+{0, 0xc0000000, 0xc13cccd0},
+{'q', 0x3f6eeee0, 0xc1499998},
+{0, 0x411cccce, 0xc1a00000},
+{'q', 0x410eeef0, 0xc0eeeef0},
+{0, 0x41aaaaaa, 0xc0e66660},
+{'q', 0x41366668, 0x3e4ccc00},
+{0, 0x4192aaae, 0x40eaaaa0},
+{'q', 0x40ddddd0, 0x40e22220},
+{0, 0x40c00000, 0x41955558},
+{'8', 0x6dd341fb, 0x47a12cd9},
+{'8', 0x4d4a1c31, 0x69143018},
+{'m', 0xc0caaab0, 0xc2355556},
+{'8', 0xa7ebcd05, 0xd9afdae5},
+{'8', 0x279bffc4, 0x63d228d8},
+{'8', 0x5a1434fb, 0x2652251a},
+{'8', 0xda64013c, 0x9d2ed829},
+{'m', 0xc0b55550, 0x42344445},
+{'8', 0x9de7c606, 0xd5a4d7e1},
+{'q', 0xc1066668, 0xbe4ccc00},
+{0, 0xc1644446, 0x40aaaab0},
+{'8', 0x6dcb2cd2, 0x62183cfa},
+{'q', 0x407bbbb8, 0x40977778},
+{0, 0x413aaaaa, 0x409dddde},
+{'q', 0x41066666, 0x3e4cccc0},
+{0, 0x41633336, 0xc09bbbbc},
+{'q', 0x40bbbbb8, 0xc0a44444},
+{0, 0x40d77778, 0xc158888a},
+{'@', 0x00000039, 0x00004a66},/*        9        x-advance: 74.398438 */
+{'M', 0x415bbbbc, 0x3e4cccce},
+{'4', 0xffad0008, 0x0000000d},
+{'q', 0x4182aaab, 0xbe088880},
+{0, 0x41c91111, 0xc10ccccd},
+{'q', 0x410cccd0, 0xc10aaaac},
+{0, 0x41500000, 0xc1bddddf},
+{'q', 0xc11eeeec, 0x4129999c},
+{0, 0xc1abbbbc, 0x41255558},
+{'q', 0xc10bbbbc, 0xbe4ccd00},
+{0, 0xc1600000, 0xc09ddde0},
+{'q', 0xc0a88888, 0xc0999998},
+{0, 0xc0ecccce, 0xc1411114},
+{'q', 0xc0088888, 0xc0e88888},
+{0, 0xbfb33330, 0xc16eeeec},
+{'q', 0x3f4cccd0, 0xc1111110},
+{0, 0x40a00000, 0xc186eef0},
+{'q', 0x4088888a, 0xc0fbbbc0},
+{0, 0x41366667, 0xc1499998},
+{'q', 0x40e66664, 0xc0977780},
+{0, 0x41880001, 0xc0911110},
+{'q', 0x41299998, 0x3e888800},
+{0, 0x4182aaaa, 0x40caaaa0},
+{'q', 0x40b99998, 0x40c22220},
+{0, 0x40f55558, 0x41711110},
+{'9', 0x0047000f, 0x008e0006},
+{'l', 0xbf2aab00, 0x409dddd8},
+{'q', 0xc00cccc0, 0x41744448},
+{0, 0xc1033330, 0x41dcccce},
+{'q', 0xc0c00000, 0x41444446},
+{0, 0xc1866666, 0x419bbbbd},
+{'9', 0x0039ffaa, 0x003aff25},
+{'6', 0x0000fff2, 0xfdf60044},
+{'8', 0x4e0325fc, 0x45202908},
+{'8', 0x1e461c18, 0xe25f0135},
+{'9', 0xffe0002a, 0xffb50044},
+{'l', 0x3f199980, 0xc09ddde0},
+{'8', 0xa6ffd904, 0xa8e3cefb},
+{'q', 0xc0444440, 0xc09999a0},
+{0, 0xc11bbbbc, 0xc0a00000},
+{'q', 0xc1188888, 0xbecccd00},
+{0, 0xc16ccccc, 0x40e66660},
+{'q', 0xc0a66668, 0x40f11120},
+{0, 0xc0c22224, 0x417eeef0},
+{'@', 0x0000003a, 0x000020bb},/*        :        x-advance: 32.730469 */
+{'M', 0x40333334, 0xc0caaaab},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'m', 0x41244445, 0xc26b7779},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'@', 0x0000003b, 0x00001caa},/*        ;        x-advance: 28.664062 */
+{'M', 0x41388889, 0xc2826667},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'m', 0x409dddde, 0x424a2223},
+{'l', 0xbfc44440, 0x41177778},
+{'9', 0x0078ffed, 0x00c4ff88},
+{'l', 0xc0d55556, 0xc0a00002},
+{'9', 0xffb3003e, 0xff69004d},
+{'l', 0x3fdddde0, 0xc1222222},
+{'l', 0x413ccccd, 0x00000000},
+{'@', 0x0000003c, 0x00004355},/*        <        x-advance: 67.332031 */
+{'M', 0x42540001, 0xc1566667},
+{'l', 0xc2426667, 0xc1ca2222},
+{'l', 0x3fd5554c, 0xc11aaaac},
+{'l', 0x4265999b, 0xc1c9999c},
+{'l', 0xc01999a0, 0x415aaab0},
+{'l', 0xc22d999a, 0x41891110},
+{'l', 0x42162223, 0x4186eef0},
+{'l', 0xc00cccd0, 0x41477779},
+{'@', 0x0000003d, 0x000048aa},/*        =        x-advance: 72.664062 */
+{'M', 0x42886667, 0xc2820000},
+{'l', 0xbff77780, 0x412bbbb8},
+{'4', 0x0000fe50, 0xffab000e},
+{'6', 0x000001b0, 0x00ddffda},
+{'l', 0xbff77760, 0x412bbbbc},
+{'l', 0xc2580001, 0x00000000},
+{'l', 0x3feeeef0, 0xc12bbbbc},
+{'l', 0x42584444, 0x00000000},
+{'@', 0x0000003e, 0x00004544},/*        >        x-advance: 69.265625 */
+{'M', 0x41677778, 0xc2920000},
+{'l', 0x424bbbbc, 0x41c99998},
+{'l', 0xbfddddc0, 0x411aaaac},
+{'l', 0xc26eeef0, 0x41caaaab},
+{'l', 0x40199996, 0xc1555556},
+{'l', 0x42377779, 0xc18c4444},
+{'l', 0xc21fbbbd, 0xc189999a},
+{'l', 0x400cccd0, 0xc1422220},
+{'@', 0x0000003f, 0x00003e99},/*        ?        x-advance: 62.597656 */
+{'M', 0x42051112, 0xc1daaaab},
+{'l', 0xc13ddde0, 0x3d888800},
+{'q', 0x3f6eeee0, 0xc10cccce},
+{0, 0x40955554, 0xc169999a},
+{'8', 0xa64fd21e, 0xb74dd531},
+{'8', 0xa828dc21, 0xb0f1d105},
+{'8', 0xdeb8dfeb, 0x1ba9ffcd},
+{'9', 0x001cffdd, 0x004effd3},
+{'l', 0xc1400001, 0x3d888800},
+{'q', 0x3faaaaa8, 0xc1377778},
+{0, 0x411bbbbb, 0xc18eeef0},
+{'q', 0x41077778, 0xc0ceeef0},
+{0, 0x419dddde, 0xc0c88890},
+{'q', 0x41311114, 0x3e888900},
+{0, 0x418a2224, 0x40e00000},
+{'q', 0x40c88880, 0x40d77780},
+{0, 0x40aaaaa8, 0x418eeef0},
+{'q', 0xbf5dddc0, 0x411cccd0},
+{0, 0xc0ecccd0, 0x41866668},
+{'q', 0xc0d11110, 0x40e00000},
+{0, 0xc1555554, 0x4149999c},
+{'9', 0x0030ffc5, 0x0086ffb8},
+{'m', 0xc184ccce, 0x41aaaaab},
+{'8', 0xd710e700, 0xef29ef10},
+{'8', 0x0f290019, 0x290f1010},
+{'8', 0x29f01800, 0x10d710f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x00000040, 0x000076ee},/*        @        x-advance: 118.929688 */
+{'M', 0x428e0000, 0x41c33334},
+{'q', 0xc1188884, 0x40bddddc},
+{0, 0xc1c44442, 0x40b99998},
+{'q', 0xc18cccce, 0xbe4ccc80},
+{0, 0xc1db3335, 0xc1133332},
+{'q', 0xc11ccccd, 0xc1111112},
+{0, 0xc14dddde, 0xc1b91112},
+{'q', 0xc0400002, 0xc1622224},
+{0, 0xbe888890, 0xc1eb3334},
+{'q', 0x403bbbba, 0xc181999b},
+{0, 0x4139999a, 0xc1f6eeef},
+{'q', 0x410bbbbc, 0xc16bbbc0},
+{0, 0x41b33333, 0xc1c00000},
+{'q', 0x415aaaac, 0xc1144448},
+{0, 0x41fbbbbc, 0xc1100000},
+{'q', 0x418cccd0, 0x3e4ccc00},
+{0, 0x41d9999c, 0x41144440},
+{'q', 0x411aaaa8, 0x41100000},
+{0, 0x41488888, 0x41b8888a},
+{'q', 0x403bbbc0, 0x41600000},
+{0, 0x3eaaab00, 0x41e9999a},
+{'q', 0xbfb33340, 0x41022222},
+{0, 0xc0a66670, 0x41833334},
+{'q', 0xc06eeee0, 0x41044444},
+{0, 0xc1244440, 0x415bbbbc},
+{'q', 0xc0ceeef0, 0x40acccce},
+{0, 0xc180888c, 0x40a44445},
+{'8', 0xe9b6ffd5, 0xbddbeae2},
+{'8', 0x3fc023e5, 0x1bab1cdc},
+{'8', 0xd8abffc4, 0xa4e4dae7},
+{'q', 0xbf088880, 0xc12aaaac},
+{0, 0x403bbbc0, 0xc1a77779},
+{'q', 0x405ddde0, 0xc1244444},
+{0, 0x41088888, 0xc189999a},
+{'8', 0xb154c929, 0xea61e82b},
+{'8', 0x104c002b, 0x28430e22},
+{'l', 0xc10bbbc0, 0x4214cccd},
+{'8', 0x31fb14fc, 0x33081cff},
+{'8', 0x1729150a, 0xdb5b0237},
+{'q', 0x408eeef0, 0xc09ddddc},
+{0, 0x40e66660, 0xc14aaaac},
+{'q', 0x402eef00, 0xc0f99998},
+{0, 0x40666680, 0xc1891111},
+{'q', 0x3f6eee80, 0xc1166668},
+{0, 0xbe888900, 0xc1911112},
+{'q', 0xbfd55540, 0xc13ffffc},
+{0, 0xc1155558, 0xc19dddde},
+{'q', 0xc0f33330, 0xc0f77780},
+{0, 0xc1b99998, 0xc0fddde0},
+{'q', 0xc169999c, 0xbe888800},
+{0, 0xc1cddde0, 0x40dddde0},
+{'q', 0xc1311110, 0x40e66660},
+{0, 0xc194cccd, 0x419aaaac},
+{'q', 0xc0f11110, 0x41411110},
+{0, 0xc12aaaaa, 0x41d00000},
+{'q', 0xc048888c, 0x415eeef0},
+{0, 0xbfa22228, 0x41dc4445},
+{'q', 0x3fccccc8, 0x41444444},
+{0, 0x41111111, 0x41a33334},
+{'q', 0x40f11114, 0x41022222},
+{0, 0x41b55556, 0x41044444},
+{'9', 0x0001005d, 0xffd700b4},
+{'6', 0x003d000e, 0xfe9fff23},
+{'8', 0x400924fe, 0x1d321b0c},
+{'8', 0xdd4a012c, 0xba31db1e},
+{'4', 0xfffb0000, 0xfef30046},
+{'8', 0xf1c7f2e5, 0x299bfec4},
+{'q', 0xc0a00000, 0x40aeeef0},
+{0, 0xc1033334, 0x41699998},
+{'q', 0xc04cccd0, 0x41122224},
+{0, 0xc06eeef0, 0x4190888a},
+{'@', 0x00000041, 0x00005666},/*        A        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'l', 0x41feeeef, 0x00000000},
+{'l', 0xc1011114, 0xc234ccce},
+{'l', 0xc1be6666, 0x4234ccce},
+{'[', 0x007a0041, 0x000000cc},/*kerning*/
+{'@', 0x00000042, 0x00005288},/*        B        x-advance: 82.531250 */
+{'M', 0x4291bbbc, 0xc1e44445},
+{'q', 0xbf911100, 0x41655556},
+{0, 0xc1344444, 0x41abbbbc},
+{'9', 0x0038ffaf, 0x0038ff44},
+{'4', 0x0000fef0, 0xfcf80086},
+{'l', 0x41f08889, 0x3d888800},
+{'q', 0x41411114, 0x3e888900},
+{0, 0x41a11110, 0x40c44450},
+{'q', 0x41011118, 0x40bbbbb0},
+{0, 0x40e00010, 0x41991110},
+{'8', 0x66d33efb, 0x40a228d8},
+{'8', 0x484e1537, 0x6a133218},
+{'m', 0xc2255556, 0xc2680002},
+{'4', 0x00f6ffd6, 0x00000090},
+{'8', 0xe06e003d, 0x9e3ae031},
+{'8', 0xa8e6c207, 0xe5a5e6df},
+{'6', 0x0000ff68, 0x01d100e7},
+{'9', 0xff7d0010, 0xff79ff8e},
+{'4', 0x0000ff52, 0x0117ffd0},
+{'l', 0x419e6667, 0x3d888880},
+{'q', 0x41077778, 0x00000000},
+{0, 0x416ccccc, 0xc0911112},
+{'q', 0x40ccccd0, 0xc0933334},
+{0, 0x40f11118, 0xc1577778},
+{'@', 0x00000043, 0x00005633},/*        C        x-advance: 86.199219 */
+{'M', 0x4283bbbc, 0xc1f66667},
+{'l', 0x41455558, 0xbe088880},
+{'q', 0xc03bbbc0, 0x41700000},
+{0, 0xc15bbbc0, 0x41be6667},
+{'q', 0xc12bbbb8, 0x410ccccd},
+{0, 0xc1d11110, 0x41077777},
+{'q', 0xc1455556, 0xbe88887c},
+{0, 0xc19aaaab, 0xc0e22222},
+{'q', 0xc0e00002, 0xc0d9999a},
+{0, 0xc1177779, 0xc1880000},
+{'9', 0xffaeffed, 0xff59fff8},
+{'l', 0x3fb33330, 0xc11aaaac},
+{'q', 0x3fe66668, 0xc13cccd0},
+{0, 0x40ecccce, 0xc1b1999c},
+{'q', 0x40b33334, 0xc1266660},
+{0, 0x416eeef2, 0xc185dddc},
+{'q', 0x41166664, 0xc0ccccd0},
+{0, 0x41b3bbbc, 0xc0c44440},
+{'q', 0x416bbbb8, 0x3eaaaa00},
+{0, 0x41b19998, 0x41166660},
+{'9', 0x0048003c, 0x00b9003f},
+{'l', 0xc1466668, 0x00000000},
+{'q', 0xbeaaaa00, 0xc1133338},
+{0, 0xc0888880, 0xc1777778},
+{'q', 0xc0777780, 0xc0c88890},
+{0, 0xc1600000, 0xc0d33330},
+{'q', 0xc11bbbc0, 0xbe888900},
+{0, 0xc182aaac, 0x409dddd0},
+{'q', 0xc0d33334, 0x40a44450},
+{0, 0xc1266668, 0x41544448},
+{'9', 0x0041ffe2, 0x0085ffd8},
+{'l', 0xbfb33330, 0x41166668},
+{'q', 0xbf6eef00, 0x40dddde0},
+{0, 0xbe088880, 0x416eeef0},
+{'8', 0x6c263f05, 0x2f692d21},
+{'q', 0x41333334, 0x3ecccce0},
+{0, 0x418c4446, 0xc0b11110},
+{'q', 0x40ccccc8, 0xc0bdddde},
+{0, 0x41166664, 0xc1811112},
+{'@', 0x00000044, 0x000056ee},/*        D        x-advance: 86.929688 */
+{'M', 0x407bbbbd, 0x00000000},
+{'4', 0xfcf80086, 0x000000c9},
+{'q', 0x41500000, 0x3d888800},
+{0, 0x41aaaaaa, 0x40ccccd0},
+{'q', 0x41055558, 0x40c88890},
+{0, 0x413bbbc0, 0x4185dde0},
+{'9', 0x0053001b, 0x00b3000f},
+{'l', 0xbf4ccd00, 0x40b99998},
+{'q', 0xc0377780, 0x419dddde},
+{0, 0xc1800000, 0x4202aaab},
+{'9', 0x0066ff97, 0x0067fef5},
+{'6', 0x0000ff2a, 0xfd4d0153},
+{'4', 0x0000ff8a, 0x0260ff97},
+{'l', 0x41444446, 0x3d888880},
+{'q', 0x41800000, 0x00000000},
+{0, 0x41cbbbbc, 0xc1244445},
+{'9', 0xffae004c, 0xff35005d},
+{'l', 0x3f4ccd00, 0xc0b11110},
+{'q', 0x3f911100, 0xc1088888},
+{0, 0xbecccd00, 0xc1833332},
+{'q', 0xbfbbbbc0, 0xc0fddde0},
+{0, 0xc0d55558, 0xc1511118},
+{'q', 0xc0a66668, 0xc0a44440},
+{0, 0xc1722224, 0xc0acccd0},
+{'@', 0x00000045, 0x00004b44},/*        E        x-advance: 75.265625 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x426d1112, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc23aaaac, 0x00000000},
+{'l', 0xc0acccc8, 0x41f9999c},
+{'l', 0x4222eeef, 0x00000000},
+{'l', 0xbfe66640, 0x41277778},
+{'l', 0xc222eef0, 0x00000000},
+{'l', 0xc0c00004, 0x4209999a},
+{'l', 0x423d999a, 0x00000000},
+{'l', 0xbfeeef00, 0x41277778},
+{'l', 0xc26fbbbc, 0x00000000},
+{'[', 0x00540045, 0x00000155},/*kerning*/
+{'@', 0x00000046, 0x00004933},/*        F        x-advance: 73.199219 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x4269999a, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc2373334, 0x00000000},
+{'l', 0xc0b77774, 0x4204888a},
+{'l', 0x421dddde, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc21d999a, 0x00000000},
+{'l', 0xc0eeeeec, 0x422b7778},
+{'l', 0xc149999b, 0x00000000},
+{'[', 0x00540046, 0x00000155},/*kerning*/
+{'@', 0x00000047, 0x00005a33},/*        G        x-advance: 90.199219 */
+{'M', 0x42a40001, 0xc2415556},
+{'l', 0xc0b77780, 0x420e2222},
+{'q', 0xc0bddde0, 0x41033336},
+{0, 0xc17ddde0, 0x41344447},
+{'q', 0xc11ddddc, 0x40400002},
+{0, 0xc19b3332, 0x4037777a},
+{'q', 0xc14ddde0, 0xbe4cccd0},
+{0, 0xc1a3bbbd, 0xc0e00001},
+{'q', 0xc0f11112, 0xc0d9999a},
+{0, 0xc1255556, 0xc18a2222},
+{'9', 0xffacffea, 0xff52fff6},
+{'l', 0x3f888888, 0xc0f11110},
+{'q', 0x3fe66668, 0xc1433338},
+{0, 0x40e6666a, 0xc1b66668},
+{'q', 0x40aeeeec, 0xc12aaaa8},
+{0, 0x416ccccc, 0xc1888888},
+{'q', 0x41166668, 0xc0ceeef0},
+{0, 0x41b80000, 0xc0c66660},
+{'q', 0x415ddde0, 0x3e888800},
+{0, 0x41ae6668, 0x41044440},
+{'9', 0x003f003f, 0x00ac0047},
+{'l', 0xc1466668, 0x00000000},
+{'8', 0x92d6bbfb, 0xd594d7dc},
+{'q', 0xc1222220, 0xbeaaab00},
+{0, 0xc185ddde, 0x40a00000},
+{'q', 0xc0d33334, 0x40a88880},
+{0, 0xc1233334, 0x415aaaa8},
+{'9', 0x0042ffe4, 0x0085ffda},
+{'l', 0xbf911110, 0x40f77778},
+{'q', 0xbf800000, 0x40f33338},
+{0, 0x3d888900, 0x417cccd0},
+{'q', 0x3f911110, 0x41022222},
+{0, 0x40b77778, 0x415dddde},
+{'q', 0x40955554, 0x40b55556},
+{0, 0x41633332, 0x40bbbbbc},
+{'9', 0x00020071, 0xffc800b2},
+{'l', 0x407bbbc0, 0xc1adddde},
+{'l', 0xc1aeeef0, 0x00000000},
+{'l', 0x3feeef00, 0xc1266668},
+{'l', 0x42091112, 0x00000000},
+{'@', 0x00000048, 0x00005e77},/*        H        x-advance: 94.464844 */
+{'M', 0x427fbbbd, 0x00000000},
+{'l', 0x40f99998, 0xc2337778},
+{'l', 0xc23d999a, 0x00000000},
+{'l', 0xc0f9999c, 0x42337778},
+{'l', 0xc149999b, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41499998, 0x00000000},
+{'l', 0xc0e88888, 0x4226eef0},
+{'l', 0x423d5555, 0x00000000},
+{'l', 0x40e88890, 0xc226eef0},
+{'l', 0x41488888, 0x00000000},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc1477774, 0x00000000},
+{'@', 0x00000049, 0x00002400},/*        I        x-advance: 36.000000 */
+{'M', 0x42091112, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc148888a, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x4148888c, 0x00000000},
+{'@', 0x0000004a, 0x00004911},/*        J        x-advance: 73.066406 */
+{'M', 0x42715556, 0xc2c22223},
+{'4', 0x00000063, 0x0225ffa3},
+{'q', 0xbff77760, 0x41577779},
+{0, 0xc1311110, 0x41ae6668},
+{'q', 0xc1111110, 0x41044444},
+{0, 0xc1b77778, 0x40ffffff},
+{'q', 0xc14eeef0, 0xbe888888},
+{0, 0xc19f7778, 0xc0fbbbbd},
+{'9', 0xffc4ffc8, 0xff5dffcf},
+{'l', 0x41488889, 0x00000000},
+{'8', 0x64153cfc, 0x295b271b},
+{'8', 0xd76e0244, 0x9736d52a},
+{'l', 0x413ddddc, 0xc28b3334},
+{'@', 0x0000004b, 0x00005311},/*        K        x-advance: 83.066406 */
+{'M', 0x42773334, 0x00000000},
+{'l', 0xc1cbbbbc, 0xc2344445},
+{'l', 0xc1633334, 0x414ccccc},
+{'l', 0xc0b33334, 0x42011112},
+{'l', 0xc149999b, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41499998, 0x00000000},
+{'l', 0xc1044444, 0x423cccce},
+{'l', 0x41488888, 0xc13cccd0},
+{'l', 0x4213bbbd, 0xc20d999a},
+{'l', 0x41811110, 0x00000000},
+{'l', 0xc2348889, 0x422d999b},
+{'l', 0x41f11112, 0x4256aaab},
+{'l', 0xc15eeef0, 0x00000000},
+{'@', 0x0000004c, 0x00004755},/*        L        x-advance: 71.332031 */
+{'M', 0x427c0001, 0xc1277778},
+{'l', 0xbfeeef00, 0x41277778},
+{'l', 0xc264cccd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x4149999a, 0x00000000},
+{'l', 0xc1711112, 0x42ad3334},
+{'l', 0x4232aaac, 0x00000000},
+{'[', 0x0041004c, 0x00000144},/*kerning*/
+{'[', 0x00c0004c, 0x00000144},/*kerning*/
+{'[', 0x00c1004c, 0x00000144},/*kerning*/
+{'[', 0x00c2004c, 0x00000144},/*kerning*/
+{'[', 0x00c3004c, 0x00000144},/*kerning*/
+{'[', 0x00c4004c, 0x00000144},/*kerning*/
+{'[', 0x00c5004c, 0x00000144},/*kerning*/
+{'@', 0x0000004d, 0x00007399},/*        M        x-advance: 115.597656 */
+{'M', 0x4256eef0, 0xc1908889},
+{'l', 0x4231ddde, 0xc29e0001},
+{'l', 0x41833334, 0x00000000},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc1477778, 0x00000000},
+{'l', 0x40d55550, 0xc219ddde},
+{'l', 0x40fddde0, 0xc21b7778},
+{'l', 0xc2300000, 0x429aaaab},
+{'l', 0xc1188888, 0x00000000},
+{'l', 0xc18aaaab, 0xc29e6667},
+{'l', 0xc0c22224, 0x4227bbbc},
+{'l', 0xc0ceeef0, 0x42151112},
+{'l', 0xc1488889, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x417ccccc, 0x00000000},
+{'l', 0x41891112, 0x429e0001},
+{'@', 0x0000004e, 0x00005e77},/*        N        x-advance: 94.464844 */
+{'M', 0x42baaaab, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc1433330, 0x00000000},
+{'l', 0xc20aaaab, 0xc296cccd},
+{'l', 0xc1511112, 0x4296cccd},
+{'l', 0xc149999b, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41422220, 0x00000000},
+{'l', 0x420b3334, 0x42973334},
+{'l', 0x41522220, 0xc2973334},
+{'l', 0x41477778, 0x00000000},
+{'@', 0x0000004f, 0x00005b22},/*        O        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'q', 0x3f088880, 0xc0caaaa8},
+{0, 0xbd888800, 0xc1500004},
+{'@', 0x00000050, 0x00005388},/*        P        x-advance: 83.531250 */
+{'M', 0x42388889, 0xc2180001},
+{'l', 0xc1b80000, 0xbd888800},
+{'l', 0xc0d33334, 0x42184445},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'l', 0x42080000, 0x3d888800},
+{'q', 0x41500000, 0x3eaaab00},
+{0, 0x41ab3334, 0x40fbbbc0},
+{'q', 0x41066668, 0x40eeeef0},
+{0, 0x40e66660, 0x41a9999c},
+{'q', 0xbfaaaa80, 0x41755554},
+{0, 0xc1411110, 0x41b55554},
+{'9', 0x003affab, 0x003aff37},
+{'m', 0xc169999a, 0xc2422223},
+{'4', 0x0130ffcc, 0x000000ac},
+{'q', 0x41177774, 0x00000000},
+{0, 0x4182aaaa, 0xc0977778},
+{'q', 0x40dbbbc0, 0xc0999998},
+{0, 0x41011110, 0xc16aaaa8},
+{'8', 0x95e5bd08, 0xd799d9dc},
+{'l', 0xc1b77779, 0xbd888800},
+{'[', 0x00740050, 0x000000ee},/*kerning*/
+{'[', 0x00760050, 0x00000100},/*kerning*/
+{'[', 0x00790050, 0x00000100},/*kerning*/
+{'[', 0x00fd0050, 0x00000100},/*kerning*/
+{'[', 0x00ff0050, 0x00000100},/*kerning*/
+{'@', 0x00000051, 0x00005b22},/*        Q        x-advance: 91.132812 */
+{'M', 0x4295999a, 0x410eeeef},
+{'4', 0x003bffb7, 0xff7fff79},
+{'q', 0xc0aaaaa8, 0x3f91110b},
+{0, 0xc11ddddc, 0x3f888883},
+{'q', 0xc14cccce, 0xbe4cccd0},
+{0, 0xc1a00001, 0xc0e8888a},
+{'q', 0xc0e44446, 0xc0e44445},
+{0, 0xc119999a, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f4cccc0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40e8888c, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12cccd0},
+{0, 0x41711112, 0xc18ccccc},
+{'q', 0x41188888, 0xc0dbbbc0},
+{0, 0x41b5ddde, 0xc0d33330},
+{'q', 0x414eeeec, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66660, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0008},
+{'l', 0xbf5dde00, 0x40c44448},
+{'q', 0xbfe66640, 0x41433330},
+{0, 0xc0e88880, 0x41b80000},
+{'9', 0x0055ffd5, 0x008bff7e},
+{'6', 0x00700073, 0xfd9dffef},
+{'8', 0x91d7bffa, 0xd091d3de},
+{'q', 0xc11eeef0, 0xbe888800},
+{0, 0xc1855556, 0x40a66670},
+{'q', 0xc0d55558, 0x40acccd0},
+{0, 0xc1277778, 0x415eeef0},
+{'9', 0x0043ffe2, 0x0089ffd8},
+{'l', 0xbf4ccce0, 0x40b999a0},
+{'q', 0xbf6eeee0, 0x40ecccc8},
+{0, 0xbd888800, 0x4179999a},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a44444, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41200000, 0x3eaaaaa0},
+{0, 0x4184cccc, 0xc0a00000},
+{'q', 0x40d33338, 0xc0aaaaac},
+{0, 0x41255554, 0xc15cccce},
+{'q', 0x406eef00, 0xc1077776},
+{0, 0x40a00000, 0xc1888889},
+{'8', 0x970bbb0a, 0xb8fedd01},
+{'@', 0x00000052, 0x00005199},/*        R        x-advance: 81.597656 */
+{'M', 0x426d5556, 0x00000000},
+{'l', 0xc15aaaac, 0xc21d5556},
+{'l', 0xc1b22222, 0x00000000},
+{'l', 0xc0dbbbbc, 0x421d5556},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'l', 0x41f33334, 0x3d888800},
+{'q', 0x41544440, 0x3e888900},
+{0, 0x41accccc, 0x40eaaab0},
+{'q', 0x41066668, 0x40e22220},
+{0, 0x40e44440, 0x41a9999c},
+{'q', 0xbf5ddd80, 0x411ffffc},
+{0, 0xc0e22220, 0x41855554},
+{'9', 0x0035ffcf, 0x004fff87},
+{'4', 0x01480078, 0x00060000},
+{'6', 0x0000ff96, 0xfd4cff22},
+{'4', 0x0125ffcd, 0x00000093},
+{'q', 0x410bbbbc, 0x00000000},
+{0, 0x417bbbbc, 0xc0977778},
+{'q', 0x40e00000, 0xc0999998},
+{0, 0x41033330, 0xc1611114},
+{'8', 0x97e4bb08, 0xda98dcdc},
+{'l', 0xc19b3333, 0xbd888800},
+{'@', 0x00000053, 0x00004eaa},/*        S        x-advance: 78.664062 */
+{'M', 0x4269999a, 0xc1c80001},
+{'8', 0xcafce004, 0xd4dce9f8},
+{'q', 0xc05ddde0, 0xc0266670},
+{0, 0xc1466668, 0xc0b55558},
+{'q', 0xc10eeef0, 0xc0444440},
+{0, 0xc1711112, 0xc0dbbbb8},
+{'8', 0xb9b6e2cf, 0x9cebd7e7},
+{'q', 0x3f3bbbb0, 0xc1100000},
+{0, 0x40c22220, 0xc1700008},
+{'q', 0x40acccd0, 0xc0c22220},
+{0, 0x41544446, 0xc1111110},
+{'q', 0x40fddde0, 0xc0444440},
+{0, 0x4181999a, 0xc0377760},
+{'q', 0x414ddde0, 0x3e888800},
+{0, 0x41ab3334, 0x41033330},
+{'9', 0x003e0044, 0x00a9003f},
+{'l', 0xc1488888, 0xbd888c00},
+{'8', 0x93e1bb05, 0xd795d9dc},
+{'q', 0xc0fddde0, 0xbe088a00},
+{0, 0xc16aaaac, 0x40733320},
+{'8', 0x63c31fcb, 0x32051cfd},
+{'8', 0x2926150a, 0x2a5e141c},
+{'q', 0x41055554, 0x40333330},
+{0, 0x41688888, 0x40ceeef0},
+{'8', 0x4a4e1d32, 0x6f172c1c},
+{'q', 0xbf3bbb80, 0x41144445},
+{0, 0xc0c88880, 0x41733335},
+{'q', 0xc0b11110, 0x40bbbbbb},
+{0, 0xc15aaaac, 0x410aaaab},
+{'q', 0xc1011110, 0x40333332},
+{0, 0xc1833334, 0x40266666},
+{'q', 0xc1500000, 0xbe4cccd0},
+{0, 0xc1b55556, 0xc0fddddf},
+{'9', 0xffc3ffb3, 0xff54ffb9},
+{'l', 0x41477778, 0x3d888800},
+{'q', 0xbf2aaaa0, 0x41155556},
+{0, 0x40a22222, 0x41622223},
+{'q', 0x40b77778, 0x40977778},
+{0, 0x4169999a, 0x409bbbbc},
+{'q', 0x40fbbbc0, 0x3e4ccd00},
+{0, 0x416eeef0, 0xc05ddddc},
+{'q', 0x40e22228, 0xc06eeef0},
+{0, 0x41044444, 0xc1466668},
+{'@', 0x00000054, 0x00004f00},/*        T        x-advance: 79.000000 */
+{'M', 0x41344445, 0xc2ad1112},
+{'l', 0x3feeeef0, 0xc1288888},
+{'l', 0x4291999a, 0x00000000},
+{'l', 0xbfeeeec0, 0x41288888},
+{'l', 0xc1f1999c, 0x00000000},
+{'l', 0xc1700000, 0x42ad1112},
+{'l', 0xc1466668, 0x00000000},
+{'l', 0x41700000, 0xc2ad1112},
+{'l', 0xc1f1999a, 0x00000000},
+{'[', 0x00540054, 0x00000111},/*kerning*/
+{'[', 0x00560054, 0x00000111},/*kerning*/
+{'[', 0x00570054, 0x00000100},/*kerning*/
+{'[', 0x00590054, 0x00000111},/*kerning*/
+{'[', 0x00dd0054, 0x00000111},/*kerning*/
+{'@', 0x00000055, 0x000055dd},/*        U        x-advance: 85.863281 */
+{'M', 0x42955556, 0xc2c22223},
+{'4', 0x00000064, 0x020cffa7},
+{'q', 0xc00ccce0, 0x41722220},
+{0, 0xc1500004, 0x41c19999},
+{'q', 0xc12bbbbc, 0x41100001},
+{0, 0xc1d0888a, 0x410bbbbc},
+{'q', 0xc1677778, 0xbe888878},
+{0, 0xc1b55556, 0xc1133333},
+{'9', 0xffb8ffbf, 0xff44ffcc},
+{'4', 0xfdf30059, 0x00000063},
+{'l', 0xc1322224, 0x42837778},
+{'q', 0xbf911110, 0x41177778},
+{0, 0x40488888, 0x417bbbbe},
+{'q', 0x4088888c, 0x40c66666},
+{0, 0x41644446, 0x40ceeeee},
+{'q', 0x41266668, 0x3eaaaac0},
+{0, 0x41891112, 0xc0b11110},
+{'q', 0x40d99998, 0xc0bdddde},
+{0, 0x41099998, 0xc17eeef1},
+{'l', 0x41355558, 0xc284eef0},
+{'@', 0x00000056, 0x00005455},/*        V        x-advance: 84.332031 */
+{'M', 0x42b7999a, 0xc2c22223},
+{'l', 0xc2484444, 0x42c22223},
+{'l', 0xc1322224, 0x00000000},
+{'l', 0xc19cccce, 0xc2c22223},
+{'l', 0x41522224, 0x00000000},
+{'l', 0x41622224, 0x429fbbbc},
+{'l', 0x421dddde, 0xc29fbbbc},
+{'l', 0x41611110, 0x00000000},
+{'[', 0x00290056, 0x00000155},/*kerning*/
+{'[', 0x005d0056, 0x00000122},/*kerning*/
+{'[', 0x007d0056, 0x00000144},/*kerning*/
+{'@', 0x00000057, 0x00007577},/*        W        x-advance: 117.464844 */
+{'M', 0x42f7999a, 0xc2c22223},
+{'l', 0xc217bbbc, 0x42c22223},
+{'l', 0xc1366668, 0x00000000},
+{'l', 0xc1066660, 0xc28e6667},
+{'l', 0xbe888900, 0xc0d77770},
+{'l', 0xc0333330, 0x40f77770},
+{'l', 0xc1f77778, 0x428c6667},
+{'l', 0xc1366668, 0x00000000},
+{'l', 0xc0f55556, 0xc2c22223},
+{'l', 0x41433333, 0x00000000},
+{'l', 0x40911114, 0x42860001},
+{'l', 0xbe4ccd00, 0x413ddddc},
+{'l', 0x40911114, 0xc13aaaac},
+{'l', 0x41e80000, 0xc2866667},
+{'l', 0x4128888c, 0x00000000},
+{'l', 0x40f55550, 0x42888889},
+{'l', 0x3f2aaa80, 0x41333336},
+{'l', 0x40888890, 0xc15bbbbe},
+{'l', 0x41c5dde0, 0xc2837778},
+{'l', 0x414dddd8, 0x00000000},
+{'[', 0x00290057, 0x00000100},/*kerning*/
+{'[', 0x00540057, 0x000000ee},/*kerning*/
+{'[', 0x005d0057, 0x000000cc},/*kerning*/
+{'[', 0x007d0057, 0x000000ee},/*kerning*/
+{'@', 0x00000058, 0x00005300},/*        X        x-advance: 83.000000 */
+{'M', 0x41dcccce, 0xc2c22223},
+{'l', 0x41866666, 0x42148889},
+{'l', 0x41e33334, 0xc2148889},
+{'l', 0x41766668, 0x00000000},
+{'l', 0xc2173334, 0x4242aaac},
+{'l', 0x41b4cccc, 0x4241999a},
+{'l', 0xc15ffffc, 0x00000000},
+{'l', 0xc18a2222, 0xc2177778},
+{'l', 0xc1e91113, 0x42177778},
+{'l', 0xc1788889, 0x00000000},
+{'l', 0x421aaaab, 0xc2466667},
+{'l', 0xc1b00000, 0xc23ddddf},
+{'l', 0x415ddde0, 0x00000000},
+{'[', 0x00560058, 0x000000ee},/*kerning*/
+{'@', 0x00000059, 0x00004f88},/*        Y        x-advance: 79.531250 */
+{'M', 0x41c6eef0, 0xc2c22223},
+{'l', 0x417eeef0, 0x4242aaac},
+{'l', 0x4203bbbc, 0xc242aaac},
+{'l', 0x41700000, 0x00000000},
+{'l', 0xc22e2223, 0x4275dddf},
+{'l', 0xc0c66660, 0x420e6667},
+{'l', 0xc148888c, 0x00000000},
+{'l', 0x40ceeef0, 0xc2140001},
+{'l', 0xc1adddde, 0xc2704445},
+{'l', 0x415aaaac, 0x00000000},
+{'[', 0x00290059, 0x00000155},/*kerning*/
+{'[', 0x00540059, 0x00000122},/*kerning*/
+{'[', 0x00560059, 0x00000133},/*kerning*/
+{'[', 0x00570059, 0x00000122},/*kerning*/
+{'[', 0x00580059, 0x000000dd},/*kerning*/
+{'[', 0x00590059, 0x00000133},/*kerning*/
+{'[', 0x005d0059, 0x00000133},/*kerning*/
+{'[', 0x007d0059, 0x00000144},/*kerning*/
+{'[', 0x00dd0059, 0x00000133},/*kerning*/
+{'@', 0x0000005a, 0x00004f55},/*        Z        x-advance: 79.332031 */
+{'M', 0x41677778, 0xc2ad1112},
+{'l', 0x3feeeef0, 0xc1288888},
+{'l', 0x42835556, 0x00000000},
+{'l', 0xbfddde00, 0x411eeef0},
+{'l', 0xc2813334, 0x42995556},
+{'l', 0x4255999c, 0x00000000},
+{'l', 0xbfeeef00, 0x41277778},
+{'l', 0xc2891112, 0x00000000},
+{'l', 0x3fe6667c, 0xc1244445},
+{'l', 0x4280cccd, 0xc2988889},
+{'l', 0xc249999a, 0x00000000},
+{'[', 0x0041005a, 0x000000dd},/*kerning*/
+{'[', 0x00c0005a, 0x000000dd},/*kerning*/
+{'[', 0x00c1005a, 0x000000dd},/*kerning*/
+{'[', 0x00c2005a, 0x000000dd},/*kerning*/
+{'[', 0x00c3005a, 0x000000dd},/*kerning*/
+{'[', 0x00c4005a, 0x000000dd},/*kerning*/
+{'[', 0x00c5005a, 0x000000dd},/*kerning*/
+{'@', 0x0000005b, 0x00002322},/*        [        x-advance: 35.132812 */
+{'M', 0x42340001, 0xc2dddddf},
+{'l', 0xbfd55560, 0x41222228},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0xc18b3334, 0x42deeeef},
+{'l', 0x41466668, 0x36400000},
+{'l', 0xbfccccd0, 0x41222223},
+{'l', 0xc1c33334, 0x00000000},
+{'l', 0x41a44445, 0xc303bbbc},
+{'l', 0x41c3bbbd, 0xb7000000},
+{'@', 0x0000005c, 0x00003666},/*       \         x-advance: 54.398438 */
+{'M', 0x42077778, 0x41055556},
+{'l', 0xc1a88889, 0xc2d2ccce},
+{'l', 0x412eeef0, 0x00000000},
+{'l', 0x41a80001, 0x42d2ccce},
+{'l', 0xc12ddde0, 0xb6000000},
+{'@', 0x0000005d, 0x00002322},/*        ]        x-advance: 35.132812 */
+{'M', 0x41211112, 0xc2c9999a},
+{'l', 0x3fd55550, 0xc1222228},
+{'l', 0x41c44446, 0x00000000},
+{'l', 0xc1a4ccce, 0x4303bbbc},
+{'l', 0xc1c44445, 0x36c00000},
+{'l', 0x3fcccccc, 0xc1222223},
+{'l', 0x41466667, 0x00000000},
+{'l', 0x418b3334, 0xc2deeeef},
+{'l', 0xc1477778, 0x00000000},
+{'@', 0x0000005e, 0x00003755},/*        ^        x-advance: 55.332031 */
+{'M', 0x40a88889, 0xc2426667},
+{'l', 0x41de6668, 0xc241dddf},
+{'l', 0x41055554, 0x00000000},
+{'l', 0x412ddde0, 0x4241dddf},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc0d55558, 0xc2000001},
+{'l', 0xc18f7777, 0x42000001},
+{'l', 0xc13cccce, 0x00000000},
+{'@', 0x0000005f, 0x00003bbb},/*        _        x-advance: 59.730469 */
+{'M', 0x4252eef0, 0x00000000},
+{'l', 0xbfe66680, 0x41222223},
+{'l', 0xc26d999a, 0x00000000},
+{'l', 0x3fe66668, 0xc1222223},
+{'l', 0x426d999b, 0x00000000},
+{'@', 0x00000060, 0x000028ee},/*        `        x-advance: 40.929688 */
+{'M', 0x41dcccce, 0xc2ccccce},
+{'l', 0x41166668, 0x419cccd0},
+{'l', 0xc117777a, 0x00000000},
+{'l', 0xc15aaaab, 0xc19cccd0},
+{'l', 0x415bbbbd, 0x00000000},
+{'@', 0x00000061, 0x00004811},/*        a        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'q', 0x404cccc8, 0x40488888},
+{0, 0x41088888, 0x404ccccc},
+{'@', 0x00000062, 0x00004a66},/*        b        x-advance: 74.398438 */
+{'M', 0x420c4445, 0x3fb33334},
+{'9', 0xfffdff98, 0xffb2ff66},
+{'l', 0xc01ddddc, 0x41066668},
+{'l', 0xc1333334, 0x00000000},
+{'4', 0xfccd008e, 0x00000061},
+{'l', 0xc0e66664, 0x4218888a},
+{'q', 0x4109999a, 0xc1177778},
+{0, 0x41a77779, 0xc1122220},
+{'q', 0x411ddddc, 0x3e4ccc00},
+{0, 0x416eeeec, 0x40c00000},
+{'q', 0x40a22228, 0x40b77770},
+{0, 0x40d11118, 0x41622220},
+{'q', 0x3fbbbbc0, 0x41066668},
+{0, 0x3f199980, 0x4183bbbc},
+{'q', 0xc0488880, 0x41b91112},
+{0, 0xc181999a, 0x4204ccce},
+{'9', 0x0029ffcb, 0x0027ff7c},
+{'m', 0x40e44440, 0xc2811111},
+{'9', 0xfffeffa7, 0x0059ff68},
+{'l', 0xc0aeeef0, 0x41fccccd},
+{'q', 0x40800000, 0x412dddde},
+{0, 0x41700000, 0x41344444},
+{'8', 0xe260013a, 0xaf3ae125},
+{'9', 0xffcf0014, 0xff9d001b},
+{'l', 0x3e088800, 0xbfb33340},
+{'8', 0xa501d505, 0xaee4d0fd},
+{'q', 0xc0444450, 0xc08aaab0},
+{0, 0xc1211114, 0xc0911110},
+{'@', 0x00000063, 0x00004555},/*        c        x-advance: 69.332031 */
+{'M', 0x4200cccd, 0xc10bbbbc},
+{'8', 0xe35d0134, 0xae36e129},
+{'l', 0x41377778, 0xbd888900},
+{'q', 0xbfc44440, 0x412dddde},
+{0, 0xc12aaaa8, 0x418ccccd},
+{'q', 0xc1122224, 0x40d77779},
+{0, 0xc19e6668, 0x40d11113},
+{'q', 0xc1222222, 0xbe088890},
+{0, 0xc1822222, 0xc0aaaaab},
+{'q', 0xc0c22224, 0xc0a66668},
+{0, 0xc108888a, 0xc1555556},
+{'9', 0xffbfffed, 0xff77fff4},
+{'l', 0x3e888890, 0xc0377780},
+{'q', 0x3f888888, 0xc11aaaac},
+{0, 0x40b11112, 0xc1900000},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x41422223, 0xc1555558},
+{'q', 0x40f33334, 0xc0a22220},
+{0, 0x41908889, 0xc0999990},
+{'q', 0x41366668, 0x3e888800},
+{0, 0x41911112, 0x40f55550},
+{'9', 0x003a0036, 0x00940036},
+{'l', 0xc1355558, 0xbd888800},
+{'8', 0xa7e3cdff, 0xd9addbe4},
+{'q', 0xc118888a, 0xbe888900},
+{0, 0xc17bbbbe, 0x40e00000},
+{'9', 0x0039ffcf, 0x00a4ffc3},
+{'l', 0xbe088880, 0x3fa22220},
+{'8', 0x5e022efc, 0x4e222e06},
+{'q', 0x40599998, 0x407bbbc0},
+{0, 0x41266666, 0x40844446},
+{'@', 0x00000064, 0x00004aaa},/*        d        x-advance: 74.664062 */
+{'M', 0x423d999a, 0x00000000},
+{'l', 0x3fa22220, 0xc0f77778},
+{'q', 0xc10bbbbc, 0x41155556},
+{0, 0xc1a88888, 0x41111111},
+{'q', 0xc1177778, 0xbe88887c},
+{0, 0xc169999b, 0xc0c22222},
+{'q', 0xc0a44445, 0xc0bbbbbc},
+{0, 0xc0d9999b, 0xc1633334},
+{'q', 0xbfd55554, 0xc1055556},
+{0, 0xbf5ddde0, 0xc1811112},
+{'q', 0x4048888a, 0xc1b9999a},
+{0, 0x4183bbbc, 0xc2059999},
+{'q', 0x40dbbbbc, 0xc0a88890},
+{0, 0x4185dddf, 0xc0a00000},
+{'9', 0x00010060, 0x00440094},
+{'l', 0x40ddddd8, 0xc2162224},
+{'4', 0x00000061, 0x0333ff73},
+{'6', 0x0000ffa8, 0xfee7ff12},
+{'8', 0x5a002afc, 0x521d3004},
+{'q', 0x40488888, 0x40888888},
+{0, 0x41200000, 0x408eeeee},
+{'9', 0x00020055, 0xffad0093},
+{'l', 0x40b99998, 0xc205999a},
+{'q', 0xc0800000, 0xc11ddde0},
+{0, 0xc1677778, 0xc1233334},
+{'8', 0x1da0fec7, 0x51c41fda},
+{'q', 0xc02eeef0, 0x40c44448},
+{0, 0xc0777778, 0x41633334},
+{'@', 0x00000065, 0x00004633},/*        e        x-advance: 70.199219 */
+{'M', 0x42711112, 0xc1488889},
+{'q', 0xc0977778, 0x40ddddde},
+{0, 0xc1400000, 0x41277778},
+{'q', 0xc0e88888, 0x40622222},
+{0, 0xc179999c, 0x4059999a},
+{'q', 0xc16bbbbc, 0xbe88888c},
+{0, 0xc1ad5556, 0xc12aaaac},
+{'9', 0xffadffc9, 0xff40ffd2},
+{'l', 0x3eccccd0, 0xc0622220},
+{'q', 0x3f888888, 0xc1133334},
+{0, 0x40b33334, 0xc18d5556},
+{'q', 0x40911112, 0xc1077778},
+{0, 0x41411111, 0xc15ccccc},
+{'q', 0x40f11114, 0xc0acccd0},
+{0, 0x418d5556, 0xc0a44440},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x41788888, 0x40acccc0},
+{'q', 0x40b55558, 0x40a66670},
+{0, 0x40f33330, 0x41533338},
+{'9', 0x00400010, 0x00850008},
+{'4', 0x002cfffb, 0x0000fe88},
+{'q', 0xbf6eeee0, 0x4108888a},
+{0, 0x40377778, 0x41808889},
+{'8', 0x3e6c3c1e, 0xec560130},
+{'9', 0xffea0026, 0xffc80046},
+{'6', 0x002e0036, 0xfe6aff60},
+{'q', 0xc1122224, 0xbeaaab00},
+{0, 0xc1644446, 0x40ccccc8},
+{'9', 0x0035ffd7, 0x0072ffc4},
+{'4', 0x00000118, 0xfff80001},
+{'8', 0x96efc708, 0xcda7cfe7},
+{'@', 0x00000066, 0x00002e11},/*        f        x-advance: 46.066406 */
+{'M', 0x42373334, 0xc27aaaac},
+{'l', 0xc16ddde0, 0x00000000},
+{'l', 0xc12dddde, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fb33340, 0xc12eeef0},
+{0, 0x41022224, 0xc18ccccc},
+{'q', 0x40d9999c, 0xc0d77780},
+{0, 0x41919999, 0xc0d33340},
+{'9', 0x00000018, 0x00080045},
+{'l', 0xbfbbbbc0, 0x41222220},
+{'8', 0xfacdfbe5, 0x20ae00cd},
+{'9', 0x001fffe2, 0x0051ffdb},
+{'l', 0xbf888880, 0x40e66660},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xbfd55560, 0x41177778},
+{'[', 0x00220066, 0x00000111},/*kerning*/
+{'[', 0x00270066, 0x00000111},/*kerning*/
+{'[', 0x00290066, 0x00000155},/*kerning*/
+{'[', 0x005d0066, 0x00000133},/*kerning*/
+{'[', 0x007d0066, 0x00000144},/*kerning*/
+{'[', 0x201c0066, 0x00000111},/*kerning*/
+{'[', 0x201d0066, 0x00000111},/*kerning*/
+{'@', 0x00000067, 0x00004a66},/*        g        x-advance: 74.398438 */
+{'M', 0x426bbbbd, 0xbfc44445},
+{'q', 0xbff77780, 0x41577779},
+{0, 0xc1311114, 0x41af7778},
+{'q', 0xc1111110, 0x41077778},
+{0, 0xc1b80000, 0x41011112},
+{'q', 0xc0e8888c, 0xbe4ccd00},
+{0, 0xc1600002, 0xc05ddde0},
+{'9', 0xffe6ffcb, 0xffb6ffab},
+{'l', 0x40dddddf, 0xc0e66668},
+{'q', 0x40d77779, 0x41188888},
+{0, 0x418a2223, 0x411eeef0},
+{'q', 0x41122224, 0x3e888880},
+{0, 0x416ddde0, 0xc0a00002},
+{'9', 0xffd6002e, 0xff92003c},
+{'l', 0x3fb33340, 0xc0d9999b},
+{'q', 0xc10bbbbc, 0x410dddde},
+{0, 0xc1a4ccce, 0x41088889},
+{'q', 0xc119999a, 0xbe4cccd8},
+{0, 0xc16aaaab, 0xc0c00001},
+{'q', 0xc0a22223, 0xc0bbbbbc},
+{0, 0xc0d77779, 0xc1633334},
+{'9', 0xffbefff4, 0xff7ffffb},
+{'l', 0x3e088880, 0xbfbbbbc0},
+{'q', 0x3f911110, 0xc10eeeec},
+{0, 0x40a00000, 0xc18c4444},
+{'q', 0x40777778, 0xc109999c},
+{0, 0x412ccccd, 0xc1622224},
+{'q', 0x40dddde0, 0xc0b11110},
+{0, 0x41891112, 0xc0a88880},
+{'9', 0x00020065, 0x004b0098},
+{'4', 0xffc00012, 0x00000057},
+{'6', 0x0234ffa1, 0xff4dfeb6},
+{'8', 0x521c3004, 0x23502219},
+{'8', 0xea550131, 0xc23fe824},
+{'l', 0x40b77778, 0xc2040001},
+{'q', 0xc07bbbc0, 0xc1211110},
+{0, 0xc169999c, 0xc1266664},
+{'8', 0x1e9ffec6, 0x52c520da},
+{'8', 0x63e431eb, 0x64ff39fb},
+{'@', 0x00000068, 0x000048ee},/*        h        x-advance: 72.929688 */
+{'M', 0x4228cccd, 0xc27c8889},
+{'8', 0x1aa9ffcf, 0x41bf1bdb},
+{'l', 0xc10eeef0, 0x424e6667},
+{'l', 0xc1411112, 0x00000000},
+{'4', 0xfccd008e, 0x00000060},
+{'l', 0xc0eaaaa8, 0x421bbbbd},
+{'q', 0x41177778, 0xc1233334},
+{0, 0x41adddde, 0xc11eeeec},
+{'q', 0x4139999c, 0x3e4ccc00},
+{0, 0x417aaaac, 0x40fddde0},
+{'9', 0x003d0021, 0x00910018},
+{'4', 0x017affc2, 0x0000ff9f},
+{'l', 0x41000000, 0xc23ddddf},
+{'8', 0xa9f4cd05, 0xdbb5dcef},
+{'@', 0x00000069, 0x00002033},/*        i        x-advance: 32.199219 */
+{'M', 0x41908889, 0xc2b62223},
+{'8', 0xd70fe700, 0xef29ef10},
+{'8', 0x0f290019, 0x28101010},
+{'8', 0x29f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x411aaaac, 0x41977778},
+{'l', 0xc148888a, 0x42904445},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x4148888a, 0xc2904445},
+{'l', 0x41411112, 0x00000000},
+{'@', 0x0000006a, 0x00001faa},/*        j        x-advance: 31.664062 */
+{'M', 0x41891112, 0xc2b62223},
+{'8', 0xd70fe700, 0xef29ef10},
+{'8', 0x0f290019, 0x28101010},
+{'8', 0x29f01900, 0x10d810f0},
+{'8', 0xf2d700e8, 0xd8f1f1f0},
+{'m', 0xc008888c, 0x41977778},
+{'4', 0x00000061, 0x0285ff93},
+{'q', 0xbf911110, 0x41111114},
+{0, 0xc0c88889, 0x41700002},
+{'q', 0xc0a44444, 0x40bddde0},
+{0, 0xc16eeef0, 0x40b77778},
+{'9', 0xffffffe2, 0xfff6ffc0},
+{'l', 0x3f911118, 0xc11eeeee},
+{'8', 0x062c061a, 0xae520044},
+{'l', 0x415cccce, 0xc2a17778},
+{'@', 0x0000006b, 0x00004322},/*        k        x-advance: 67.132812 */
+{'M', 0x4239dddf, 0x00000000},
+{'l', 0xc1933335, 0xc2055556},
+{'l', 0xc1177778, 0x41077778},
+{'l', 0xc08aaaaa, 0x41c6eef0},
+{'l', 0xc1422223, 0x00000000},
+{'l', 0x418e6667, 0xc2ccccce},
+{'l', 0x41422224, 0x00000000},
+{'l', 0xc12aaaac, 0x4274888a},
+{'l', 0x40e88888, 0xc0eaaaa8},
+{'l', 0x41cd5556, 0xc1bc4446},
+{'l', 0x417aaaa8, 0x3d888800},
+{'l', 0xc2048888, 0x41f4ccd0},
+{'l', 0x41b6eef0, 0x4225ddde},
+{'l', 0xc1544444, 0x00000000},
+{'@', 0x0000006c, 0x00002033},/*        l        x-advance: 32.199219 */
+{'M', 0x42040000, 0xc2ccccce},
+{'l', 0xc18e6666, 0x42ccccce},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x418ddddf, 0xc2ccccce},
+{'l', 0x41422220, 0x00000000},
+{'@', 0x0000006d, 0x00007422},/*        m        x-advance: 116.132812 */
+{'M', 0x4224cccd, 0xc27c4445},
+{'9', 0xfffdffa7, 0x0051ff71},
+{'l', 0xc1122223, 0x4253bbbc},
+{'l', 0xc1422223, 0x00000000},
+{'4', 0xfdbf0064, 0x0000005b},
+{'l', 0xbfc44440, 0x40fddde0},
+{'q', 0x41122224, 0xc1177778},
+{0, 0x41ae6666, 0xc1133330},
+{'8', 0x16590130, 0x45391529},
+{'q', 0x41255550, 0xc13ccccc},
+{0, 0x41beeeec, 0xc1388884},
+{'q', 0x413aaab0, 0x3e4ccc00},
+{0, 0x41822224, 0x40f77770},
+{'9', 0x003b0025, 0x0092001c},
+{'4', 0x017bffc1, 0x0000ff9f},
+{'l', 0x41000000, 0xc23e6667},
+{'8', 0xa7f2c905, 0xddb0deec},
+{'8', 0x229fffca, 0x58cb22d6},
+{'4', 0x017fffbf, 0x0000ffa0},
+{'l', 0x41000000, 0xc23e2223},
+{'8', 0xa8f0cb05, 0xdcb2ddeb},
+{'@', 0x0000006e, 0x00004922},/*        n        x-advance: 73.132812 */
+{'M', 0x4228cccd, 0xc27c8889},
+{'8', 0x1aa9ffcf, 0x41bf1bdb},
+{'l', 0xc10eeef0, 0x424e6667},
+{'l', 0xc1411112, 0x00000000},
+{'4', 0xfdbf0064, 0x0000005b},
+{'l', 0xbfdddde0, 0x41111114},
+{'q', 0x4117777a, 0xc127777c},
+{0, 0x41b08889, 0xc1255554},
+{'q', 0x4139999c, 0x3e4ccc00},
+{0, 0x417aaaac, 0x41000000},
+{'9', 0x003d0021, 0x00910018},
+{'4', 0x017affc2, 0x0000ff9f},
+{'l', 0x41000000, 0xc23ddddf},
+{'8', 0xa9f4cd05, 0xdbb5dcef},
+{'@', 0x0000006f, 0x00004b88},/*        o        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'@', 0x00000070, 0x00004a66},/*        p        x-advance: 74.398438 */
+{'M', 0x420c0000, 0x3fb33334},
+{'9', 0xfffeff9e, 0xffbdff67},
+{'l', 0xc0ceeef2, 0x420b3334},
+{'l', 0xc1422223, 0x00000000},
+{'4', 0xfce2008a, 0x00000058},
+{'l', 0xbfa22230, 0x41000000},
+{'q', 0x410dddde, 0xc1188888},
+{0, 0x41aa2223, 0xc1133330},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x416eeef0, 0x40c00000},
+{'q', 0x40a22228, 0x40b77770},
+{0, 0x40d11118, 0x41622220},
+{'q', 0x3fbbbbc0, 0x41055558},
+{0, 0x3f199980, 0x41833334},
+{'q', 0xc04ccce0, 0x41bcccce},
+{0, 0xc1844446, 0x42062223},
+{'9', 0x0027ffcc, 0x0025ff7f},
+{'m', 0x40d11118, 0xc2811111},
+{'9', 0xfffeffad, 0x004fff70},
+{'l', 0xc0c22220, 0x420aaaac},
+{'q', 0x40844444, 0x41177776},
+{0, 0x41699998, 0x411ccccc},
+{'8', 0xe261013a, 0xae3ce026},
+{'9', 0xffce0015, 0xff9c001c},
+{'l', 0x3e088900, 0xbfaaaac0},
+{'8', 0xa500d605, 0xade2d0fb},
+{'q', 0xc0488880, 0xc08aaab0},
+{0, 0xc1211110, 0xc0911110},
+{'@', 0x00000071, 0x00004b44},/*        q        x-advance: 75.265625 */
+{'M', 0x428d999a, 0xc2904445},
+{'4', 0x031eff76, 0x0000ffa0},
+{'l', 0x40d11110, 0xc209999a},
+{'q', 0xc1099998, 0x41033333},
+{0, 0xc1a19999, 0x40fddddd},
+{'q', 0xc119999a, 0xbe4cccd8},
+{0, 0xc16cccce, 0xc0bddddf},
+{'q', 0xc0a44446, 0xc0b9999a},
+{0, 0xc0d9999b, 0xc1622223},
+{'q', 0xbfcccccc, 0xc1055556},
+{0, 0xbf4cccd0, 0xc1822223},
+{'q', 0x404cccce, 0xc1bd5556},
+{0, 0x4185ddde, 0xc2066667},
+{'q', 0x40dbbbbc, 0xc0a22220},
+{0, 0x41855555, 0xc0999990},
+{'9', 0x00010060, 0x00450095},
+{'4', 0xffc60011, 0x00000059},
+{'m', 0xc2551112, 0x42140001},
+{'8', 0x5a002afc, 0x531e3005},
+{'q', 0x40488888, 0x408aaaac},
+{0, 0x41200002, 0x40911112},
+{'9', 0x00020051, 0xffb40090},
+{'l', 0x40c88888, 0xc20e6667},
+{'q', 0xc08aaaa8, 0xc1122220},
+{0, 0xc1666668, 0xc1166664},
+{'8', 0x1d9ffec6, 0x52c320da},
+{'q', 0xc02eeef0, 0x40c66668},
+{0, 0xc0777778, 0x41644444},
+{'@', 0x00000072, 0x00002cdd},/*        r        x-advance: 44.863281 */
+{'M', 0x42255556, 0xc2773334},
+{'9', 0xffffffa5, 0x0054ff6e},
+{'l', 0xc10dddde, 0x424d1112},
+{'l', 0xc1411112, 0x00000000},
+{'4', 0xfdbf0064, 0x0000005d},
+{'l', 0xbfdddde0, 0x41055558},
+{'q', 0x40e8888c, 0xc11eeef0},
+{0, 0x418e6667, 0xc11cccd0},
+{'9', 0x00000012, 0x0007002d},
+{'l', 0xbf911120, 0x4139999c},
+{'q', 0xc0488880, 0xbf1999c0},
+{0, 0xc0b33330, 0xbf2aaac0},
+{'[', 0x00220072, 0x00000111},/*kerning*/
+{'[', 0x00270072, 0x00000111},/*kerning*/
+{'[', 0x00660072, 0x00000100},/*kerning*/
+{'[', 0x00740072, 0x00000355},/*kerning*/
+{'[', 0x00760072, 0x00000133},/*kerning*/
+{'[', 0x00770072, 0x00000122},/*kerning*/
+{'[', 0x00790072, 0x00000133},/*kerning*/
+{'[', 0x00fd0072, 0x00000133},/*kerning*/
+{'[', 0x00ff0072, 0x00000133},/*kerning*/
+{'[', 0x201c0072, 0x00000111},/*kerning*/
+{'[', 0x201d0072, 0x00000111},/*kerning*/
+{'@', 0x00000073, 0x00004455},/*        s        x-advance: 68.332031 */
+{'M', 0x423aaaab, 0xc19c4445},
+{'8', 0xbde1cf06, 0xe3b2eddb},
+{'8', 0xe6b0f6d8, 0xceb7eed3},
+{'8', 0xace7e0e5, 0xa125c702},
+{'8', 0xc655da22, 0xee66ed33},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x418aaaac, 0x40c22220},
+{'9', 0x002e003a, 0x00840037},
+{'l', 0xc13eeef0, 0xbd888800},
+{'8', 0xb9e4d301, 0xe5b7e6e3},
+{'8', 0x14b000d6, 0x43d414da},
+{'8', 0x2e0e1efd, 0x182d1012},
+{'l', 0x40a44444, 0x3fbbbbc0},
+{'8', 0x23630f39, 0x3442142b},
+{'8', 0x52152018, 0x63da3cfd},
+{'8', 0x39a826dd, 0x119512cc},
+{'q', 0xc1288888, 0xbe4cccd0},
+{0, 0xc193bbbc, 0xc0c88889},
+{'9', 0xffd0ffc1, 0xff75ffc4},
+{'l', 0x41411112, 0x3d888900},
+{'8', 0x4f203400, 0x1b531b20},
+{'8', 0xee55002a, 0xbd32ed2b},
+{'@', 0x00000074, 0x00002b55},/*        t        x-advance: 43.332031 */
+{'M', 0x42015556, 0x00000000},
+{'8', 0x0aba0ae4, 0xd0a6ffbe},
+{'9', 0xffd2ffe9, 0xff97ffee},
+{'l', 0x40eaaaae, 0xc232eef0},
+{'l', 0xc14cccce, 0x00000000},
+{'l', 0x3fd55554, 0xc1177778},
+{'l', 0x414cccce, 0x00000000},
+{'l', 0x40444448, 0xc18c4444},
+{'l', 0x41411112, 0x00000000},
+{'l', 0xc0488890, 0x418c4444},
+{'l', 0x41522224, 0x00000000},
+{'4', 0x004bfff3, 0x0000ff98},
+{'l', 0xc0f11110, 0x4233bbbd},
+{'8', 0x2e051bfd, 0x13271308},
+{'q', 0x3f6eeee0, 0x00000000},
+{0, 0x40b99998, 0xbf2aaab0},
+{'l', 0xbf5dddc0, 0x41211112},
+{'@', 0x00000075, 0x00004900},/*        u        x-advance: 73.000000 */
+{'M', 0x42366667, 0x00000000},
+{'l', 0x3fc44440, 0xc0e66667},
+{'q', 0xc1055554, 0x410dddde},
+{0, 0xc1abbbbc, 0x41088889},
+{'q', 0xc13bbbbc, 0xbe4cccd0},
+{0, 0xc17eeef0, 0xc1055556},
+{'9', 0xffbfffdf, 0xff6cffe8},
+{'4', 0xfe8c003d, 0x00000060},
+{'l', 0xc0f99998, 0x423aeef0},
+{'8', 0x56092dfc, 0x2b44290d},
+{'9', 0x00030066, 0xffad009f},
+{'l', 0x41122224, 0xc2526668},
+{'l', 0x41422224, 0x00000000},
+{'l', 0xc148888c, 0x42904445},
+{'l', 0xc1377778, 0x00000000},
+{'@', 0x00000076, 0x00004022},/*        v        x-advance: 64.132812 */
+{'M', 0x42862223, 0xc2904445},
+{'l', 0xc211dddf, 0x42904445},
+{'l', 0xc1122224, 0x00000000},
+{'l', 0xc1622222, 0xc2904445},
+{'l', 0x413eeef0, 0x00000000},
+{'l', 0x41111110, 0x425c888a},
+{'l', 0x41d00001, 0xc25c888a},
+{'l', 0x414bbbc0, 0x00000000},
+{'[', 0x00220076, 0x00000100},/*kerning*/
+{'[', 0x00270076, 0x00000100},/*kerning*/
+{'[', 0x00660076, 0x000000dd},/*kerning*/
+{'[', 0x03c00076, 0x000000bb},/*kerning*/
+{'[', 0x201c0076, 0x00000100},/*kerning*/
+{'[', 0x201d0076, 0x00000100},/*kerning*/
+{'@', 0x00000077, 0x00006388},/*        w        x-advance: 99.531250 */
+{'M', 0x42cc8889, 0xc2904445},
+{'l', 0xc2033334, 0x42904445},
+{'l', 0xc11ccccc, 0x00000000},
+{'l', 0xc0eeeee8, 0xc259dddf},
+{'l', 0xc1d00002, 0x4259dddf},
+{'l', 0xc11dddde, 0x00000000},
+{'l', 0xc0f9999a, 0xc2904445},
+{'l', 0x413aaaab, 0x00000000},
+{'l', 0x408aaaac, 0x4256aaac},
+{'l', 0x41cccccd, 0xc256aaac},
+{'l', 0x411bbbbc, 0x00000000},
+{'l', 0x40e00000, 0x425b7778},
+{'l', 0x41b80000, 0xc25b7778},
+{'l', 0x41466668, 0x00000000},
+{'@', 0x00000078, 0x000041bb},/*        x        x-advance: 65.730469 */
+{'M', 0x41af7778, 0xc2904445},
+{'l', 0x41322224, 0x41d1999c},
+{'l', 0x419ccccc, 0xc1d1999c},
+{'l', 0x416ddde4, 0x00000000},
+{'l', 0xc1e7777a, 0x4210ccce},
+{'l', 0x418cccce, 0x420fbbbc},
+{'l', 0xc1522224, 0x00000000},
+{'l', 0xc13eeef0, 0xc1d80001},
+{'l', 0xc1a2aaac, 0x41d80001},
+{'l', 0xc16bbbbb, 0x00000000},
+{'l', 0x41edddde, 0xc2148889},
+{'l', 0xc1880000, 0xc20c0001},
+{'l', 0x41522224, 0x00000000},
+{'@', 0x00000079, 0x00003eaa},/*        y        x-advance: 62.664062 */
+{'M', 0x41c4cccd, 0x41333334},
+{'q', 0xc0599998, 0x40e22224},
+{0, 0xc1100000, 0x414aaaac},
+{'q', 0xc0b33332, 0x40b33334},
+{0, 0xc1622222, 0x40b11110},
+{'9', 0xffffffeb, 0xfff7ffc7},
+{'4', 0xffaf0005, 0x00020019},
+{'8', 0xea540234, 0xba36e720},
+{'l', 0x4088888a, 0xc1066667},
+{'l', 0xc148888a, 0xc28d3334},
+{'l', 0x4149999a, 0x00000000},
+{'l', 0x41022224, 0x42577778},
+{'l', 0x41cccccd, 0xc2577778},
+{'l', 0x41555554, 0x00000000},
+{'l', 0xc2295556, 0x42a6aaac},
+{'[', 0x00220079, 0x00000100},/*kerning*/
+{'[', 0x00270079, 0x00000100},/*kerning*/
+{'[', 0x00660079, 0x000000dd},/*kerning*/
+{'[', 0x03c00079, 0x000000bb},/*kerning*/
+{'[', 0x201c0079, 0x00000100},/*kerning*/
+{'[', 0x201d0079, 0x00000100},/*kerning*/
+{'@', 0x0000007a, 0x000041bb},/*        z        x-advance: 65.730469 */
+{'M', 0x41200001, 0xc277bbbd},
+{'l', 0x3feeeef0, 0xc1233334},
+{'l', 0x42548888, 0x00000000},
+{'l', 0xbfccccc0, 0x41155558},
+{'l', 0xc23e6666, 0x4252aaab},
+{'l', 0x42215555, 0x35800000},
+{'l', 0xbfe66660, 0x41222223},
+{'l', 0xc25e2223, 0x00000000},
+{'l', 0x3fd5555c, 0xc11aaaab},
+{'l', 0x423ccccd, 0xc2511112},
+{'l', 0xc216aaab, 0x00000000},
+{'@', 0x0000007b, 0x00002ccc},/*        {        x-advance: 44.796875 */
+{'M', 0x4169999a, 0xc1a33334},
+{'8', 0xaaf4cc05, 0xdab6deee},
+{'l', 0x3f888888, 0xc119999c},
+{'9', 0xfffc0073, 0xff7a0085},
+{'l', 0x3fe66670, 0xc157777c},
+{'9', 0xff44001b, 0xff0c00dc},
+{'l', 0x3feeeee0, 0x40f77780},
+{'q', 0xc1033334, 0x402aaaa0},
+{0, 0xc1433334, 0x41122220},
+{'9', 0x0033ffe0, 0x0075ffd7},
+{'l', 0xbfe66660, 0x41555558},
+{'q', 0xbff77780, 0x41655558},
+{0, 0xc1655558, 0x41a7777a},
+{'8', 0x49331c26, 0x5a082b0c},
+{'l', 0xbfe66660, 0x415ccccd},
+{'8', 0x6e0539f9, 0x4b48340c},
+{'l', 0xc0444448, 0x40f11114},
+{'q', 0xc12aaaaa, 0xc0622228},
+{0, 0xc1755556, 0xc13aaaac},
+{'q', 0xc0955556, 0xc1033334},
+{0, 0xc05ddde0, 0xc199999a},
+{'l', 0x3feeeef0, 0xc15cccce},
+{'@', 0x0000007c, 0x00002055},/*        |        x-advance: 32.332031 */
+{'M', 0x41f00001, 0xc2c22223},
+{'l', 0xc1900000, 0x42e62223},
+{'l', 0xc11bbbbe, 0x00000000},
+{'l', 0x41900001, 0xc2e62223},
+{'l', 0x411bbbbc, 0x00000000},
+{'@', 0x0000007d, 0x00002ccc},/*        }        x-advance: 44.796875 */
+{'M', 0x41f3bbbd, 0xc2766667},
+{'8', 0x560c34fb, 0x254a2212},
+{'l', 0xbf800000, 0x411aaaac},
+{'9', 0x0004ff8c, 0x0087ff7b},
+{'l', 0xbfeeeef0, 0x415bbbbd},
+{'9', 0x00baffe4, 0x00f1ff25},
+{'l', 0xbfeeeef8, 0xc0f99998},
+{'q', 0x41033334, 0xc02aaaa8},
+{0, 0x41433334, 0xc1111111},
+{'9', 0xffcd0020, 0xff8b0029},
+{'l', 0x3fe66668, 0xc1544445},
+{'q', 0x3ff77778, 0xc16bbbbe},
+{0, 0x41744445, 0xc1a80001},
+{'8', 0xbac7e6d5, 0xa4f7d4f2},
+{'l', 0x3fe66660, 0xc15ddde0},
+{'8', 0x92fbc707, 0xb4b8ccf4},
+{'l', 0x40444444, 0xc0eeeef0},
+{'q', 0x412aaaab, 0x40622220},
+{0, 0x41755557, 0x413bbbb8},
+{'q', 0x40955558, 0x41022220},
+{0, 0x405999a0, 0x41991114},
+{'l', 0xbfe66670, 0x415ddddc},
+{'@', 0x0000007e, 0x00005a11},/*        ~        x-advance: 90.066406 */
+{'M', 0x42931112, 0xc24eeef0},
+{'l', 0x41177778, 0xbe4ccc00},
+{'q', 0xbf5dde00, 0x41177778},
+{0, 0xc0d999a0, 0x418b3332},
+{'q', 0xc0bddde0, 0x40fddde0},
+{0, 0xc183bbbc, 0x40f9999c},
+{'8', 0xeaafffd4, 0xccbdebdc},
+{'8', 0xd7cfe2e2, 0xf5d8f6ee},
+{'8', 0x21baffd1, 0x4ae321ea},
+{'l', 0xc1266668, 0x3e4ccd00},
+{'q', 0x3f800000, 0xc117777a},
+{0, 0x40e00002, 0xc1891111},
+{'q', 0x40c00002, 0xc0f55558},
+{0, 0x4183bbbc, 0xc0ecccd0},
+{'8', 0x1650002c, 0x35431523},
+{'8', 0x29311f20, 0x0a280a12},
+{'8', 0xdd490030, 0xb320dc19},
+{'@', 0x000000a0, 0x00002188},/*                 x-advance: 33.531250 */
+{'@', 0x000000a1, 0x00002055},/*        ¡        x-advance: 32.332031 */
+{'M', 0x41dddddf, 0xc2853334},
+{'8', 0x29f01900, 0x11d810f1},
+{'8', 0xf2d700e8, 0xd8f0f0f0},
+{'8', 0xd710e700, 0xef29f010},
+{'8', 0x0e280018, 0x280f0f10},
+{'m', 0xc1e5dddf, 0x42b55556},
+{'l', 0x41500001, 0xc28b5556},
+{'l', 0x412ddddf, 0x36800000},
+{'l', 0xc1322224, 0x428b5556},
+{'l', 0xc14bbbbc, 0xb6000000},
+{'@', 0x000000a2, 0x00004877},/*        ¢        x-advance: 72.464844 */
+{'M', 0x427a6667, 0xc1b66667},
+{'q', 0xbfc44440, 0x411eeeef},
+{0, 0xc1111110, 0x417eeef0},
+{'9', 0x0030ffc5, 0x003dff7a},
+{'4', 0x007bffe8, 0x0000ff9f},
+{'l', 0x40488888, 0xc17bbbbc},
+{'8', 0xc49ef0c0, 0x9ad3d4de},
+{'9', 0xffc6fff6, 0xff8bfffc},
+{'l', 0x3e888880, 0xc0377780},
+{'q', 0x3fd55554, 0xc1522224},
+{0, 0x41133334, 0xc1b88888},
+{'9', 0xffb0003c, 0xff9d00a9},
+{'4', 0xff880017, 0x00000061},
+{'l', 0xc0400000, 0x41700000},
+{'q', 0x41155554, 0x40088880},
+{0, 0x415eeef0, 0x41144444},
+{'9', 0x00380025, 0x00820024},
+{'l', 0xc1366668, 0x00000000},
+{'8', 0xa7e5cd00, 0xd9addbe5},
+{'8', 0x1d9dfec5, 0x51c21fd8},
+{'9', 0x0031ffeb, 0x0065ffe4},
+{'l', 0xbe8888c0, 0x40111110},
+{'8', 0x5c002cfb, 0x50202e05},
+{'8', 0x2253201a, 0xe35e0135},
+{'q', 0x40a66668, 0xc07bbbc0},
+{0, 0x40dddde0, 0xc1244444},
+{'l', 0x41366664, 0xbd888900},
+{'@', 0x000000a3, 0x00004d00},/*        £        x-advance: 77.000000 */
+{'M', 0xbeeeeef0, 0x00000000},
+{'4', 0xffad0009, 0x00010028},
+{'8', 0xc835f225, 0xad15d610},
+{'0', 0x00aa920e, 0x0053ad0e},
+{'l', 0x40088888, 0xc18a2222},
+{'q', 0x3fc44440, 0xc14ddde0},
+{0, 0x4129999a, 0xc1a91110},
+{'q', 0x41111110, 0xc1055558},
+{0, 0x41b22222, 0xc1000000},
+{'q', 0x41399998, 0x3e888800},
+{0, 0x418eeef0, 0x40eeeef0},
+{'9', 0x00390032, 0x0094002d},
+{'l', 0xc1488888, 0xbd888800},
+{'8', 0xa9eccc03, 0xdbb0dde8},
+{'8', 0x2d9affc0, 0x68d22eda},
+{'l', 0xc0111118, 0x418b3332},
+{'l', 0x41a5dddf, 0x00000000},
+{'4', 0x0053fff2, 0x0000ff5e},
+{'l', 0xbff77770, 0x416aaaac},
+{'9', 0x004efff5, 0x0084ffc7},
+{'l', 0x423eaaaa, 0xbe4ccd00},
+{'l', 0xbfeeeec0, 0x41277778},
+{'l', 0xc2851112, 0x00000000},
+{'@', 0x000000a4, 0x00005e77},/*        ¤        x-advance: 94.464844 */
+{'M', 0x42a60001, 0xc0d77778},
+{'4', 0x0044ffb4, 0xffb7ffc8},
+{'q', 0xc1455554, 0x410eeeef},
+{0, 0xc1c91110, 0x410aaaaa},
+{'9', 0xffffff97, 0xffbbff4e},
+{'4', 0x0048ffad, 0xffb3ffc6},
+{'l', 0x4129999a, 0xc10dddde},
+{'q', 0xc0844444, 0xc13bbbbc},
+{0, 0xc02aaaa8, 0xc1ba2223},
+{'9', 0xff8f000e, 0xff36005c},
+{'4', 0xffadffc2, 0xffbd004b},
+{'l', 0x40f33334, 0x411ddde0},
+{'q', 0x413cccce, 0xc1000000},
+{0, 0x41c00001, 0xc0fbbbc0},
+{'9', 0x00010064, 0x004000ad},
+{'4', 0xffaf005c, 0x004d003b},
+{'l', 0xc1388888, 0x411bbbc0},
+{'q', 0x408cccd0, 0x413ddddc},
+{0, 0x40377780, 0x41bf7778},
+{'9', 0x006bfff3, 0x00c1ffab},
+{'6', 0x0050003c, 0xfef7fe0b},
+{'8', 0x6f0a39f9, 0x593a3511},
+{'q', 0x40a66668, 0x408eeef0},
+{0, 0x41511114, 0x40977778},
+{'q', 0x41088888, 0x3e4ccd00},
+{0, 0x41799998, 0xc0866666},
+{'q', 0x40e22228, 0xc08eeeee},
+{0, 0x4139999c, 0xc13aaaab},
+{'q', 0x40933330, 0xc0e66668},
+{0, 0x40b55550, 0xc1733334},
+{'8', 0x92f6c707, 0xa7c5cbef},
+{'q', 0xc0a44448, 0xc08eeef0},
+{0, 0xc1500000, 0xc0977770},
+{'q', 0xc1077778, 0xbe4cce00},
+{0, 0xc178888c, 0x40866660},
+{'q', 0xc0e22220, 0x408cccd0},
+{0, 0xc13aaaaa, 0x4139999c},
+{'q', 0xc0933334, 0x40e44448},
+{0, 0xc0b55558, 0x41722224},
+{'@', 0x000000a5, 0x00004599},/*        ¥        x-advance: 69.597656 */
+{'M', 0x426a6667, 0xc1abbbbc},
+{'l', 0xc1a80000, 0x00000000},
+{'l', 0xc06eeef0, 0x41abbbbc},
+{'l', 0xc148888a, 0x00000000},
+{'l', 0x40733338, 0xc1abbbbc},
+{'l', 0xc1a4ccce, 0x00000000},
+{'l', 0x3fbbbbc4, 0xc1044446},
+{'l', 0x41a3bbbc, 0x00000000},
+{'l', 0x40000008, 0xc1311112},
+{'l', 0xc1a4ccce, 0x00000000},
+{'l', 0x3fbbbbc0, 0xc1055554},
+{'l', 0x418a2223, 0x00000000},
+{'l', 0xc1766668, 0xc23fbbbd},
+{'l', 0x41566666, 0x00000000},
+{'l', 0x41422222, 0x4230888a},
+{'l', 0x41dcccce, 0xc230888a},
+{'l', 0x41688888, 0x00000000},
+{'l', 0xc2000000, 0x423fbbbd},
+{'l', 0x41844444, 0x00000000},
+{'l', 0xbfbbbba0, 0x41055554},
+{'l', 0xc1a33334, 0xbe4ccd00},
+{'l', 0xbeaaab00, 0x3ecccd00},
+{'l', 0xc0111110, 0x412dddde},
+{'l', 0x41a91112, 0x00000000},
+{'l', 0xbfbbbbc0, 0x41044446},
+{'@', 0x000000a6, 0x00001fcc},/*        ¦        x-advance: 31.796875 */
+{'M', 0x41fc4445, 0xc2c22223},
+{'l', 0xc10cccce, 0x424a2223},
+{'4', 0x0000ffa0, 0xfe6c0046},
+{'6', 0x00000060, 0x0398ff60},
+{'l', 0xc1411113, 0x00000000},
+{'l', 0x41133334, 0xc2533334},
+{'l', 0x41411111, 0x00000000},
+{'l', 0xc1133333, 0x42533334},
+{'@', 0x000000a7, 0x00005133},/*        §        x-advance: 81.199219 */
+{'M', 0x427b3334, 0x41011112},
+{'q', 0xbf2aaac0, 0x41100000},
+{0, 0xc0c00000, 0x41688888},
+{'q', 0xc0a88888, 0x40b11114},
+{0, 0xc1500000, 0x41011112},
+{'q', 0xc0f77778, 0x401ddde0},
+{0, 0xc17cccce, 0x401999a0},
+{'q', 0xc1566668, 0xbe888880},
+{0, 0xc1b11112, 0xc0eeeef0},
+{'9', 0xffc7ffbb, 0xff56ffc0},
+{'l', 0x41466667, 0xbe088860},
+{'8', 0x6e2347fb, 0x276e2629},
+{'q', 0x40e44444, 0x3e088880},
+{0, 0x41611112, 0xc0511118},
+{'8', 0xa641e538, 0xbceed506},
+{'8', 0xd8c1e7e7, 0xe8bef2db},
+{'8', 0xd394edc5, 0xbdb2e6cf},
+{'8', 0x93e9d6e3, 0xa425c804},
+{'q', 0x40866666, 0xc0955558},
+{0, 0x41255555, 0xc0f11110},
+{'q', 0xc0d77776, 0xc0e44448},
+{0, 0xc0b77776, 0xc191999c},
+{'q', 0x3f3bbbc0, 0xc10dddd8},
+{0, 0x40c22222, 0xc1666660},
+{'q', 0x40accccc, 0xc0b33340},
+{0, 0x41522222, 0xc1022228},
+{'q', 0x40f999a0, 0xc0222220},
+{0, 0x417bbbbc, 0xc01999a0},
+{'q', 0x41555558, 0x3e4cce00},
+{0, 0x41a88888, 0x40f55560},
+{'9', 0x003b003d, 0x00a80036},
+{'l', 0xc1400000, 0x00000000},
+{'8', 0x96e2bf04, 0xd69bd7de},
+{'q', 0xc0e88888, 0xbe088a00},
+{0, 0xc1633334, 0x404cccc0},
+{'8', 0x5bc01ac9, 0x46112dfa},
+{'8', 0x263d1918, 0x17430d25},
+{'8', 0x2c6c123a, 0x44501a32},
+{'q', 0x406eeee0, 0x40a88890},
+{0, 0x40444440, 0x415bbbbe},
+{'q', 0xbf888880, 0x414aaaac},
+{0, 0xc1733334, 0x41988889},
+{'9', 0x00390036, 0x0092002e},
+{'m', 0xc17ddde0, 0xc1beeef0},
+{'8', 0x9668e35c, 0xbbedd506},
+{'9', 0xffe6ffe7, 0xffd6ffbd},
+{'l', 0xc1055554, 0xc0400000},
+{'8', 0xe4aef1cd, 0x6a9b1aa7},
+{'8', 0x48112dfa, 0x28401918},
+{'l', 0x41766666, 0x40a66664},
+{'l', 0x405ddde0, 0x3faaaab0},
+{'@', 0x000000a8, 0x00003766},/*        ¨        x-advance: 55.398438 */
+{'M', 0x41688889, 0xc2b68889},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000a9, 0x00006811},/*        ©        x-advance: 104.066406 */
+{'M', 0x40e88889, 0xc2408889},
+{'q', 0x3fc44444, 0xc1544444},
+{0, 0x410ddde0, 0xc1c66666},
+{'q', 0x40eaaaa8, 0xc1388890},
+{0, 0x4195ddde, 0xc194ccd0},
+{'q', 0x41377778, 0xc0e44440},
+{0, 0x41caaaac, 0xc0dbbbb0},
+{'q', 0x41533330, 0x3e4ccc00},
+{0, 0x41b33334, 0x40ecccc0},
+{'q', 0x41133330, 0x40e44450},
+{0, 0x41588888, 0x41933334},
+{'q', 0x408aaab0, 0x41333338},
+{0, 0x403bbbc0, 0x41bcccce},
+{'q', 0xbfbbbbc0, 0x41522224},
+{0, 0xc10cccd0, 0x41c66668},
+{'q', 0xc0eaaab0, 0x4139999a},
+{0, 0xc1966668, 0x4195ddde},
+{'q', 0xc1366664, 0x40e44446},
+{0, 0xc1ca2222, 0x40dbbbbd},
+{'q', 0xc1544444, 0xbe4cccd0},
+{0, 0xc1b3bbbb, 0xc0ecccce},
+{'q', 0xc1133335, 0xc0e88889},
+{0, 0xc158888a, 0xc1944445},
+{'9', 0xffa6ffde, 0xff44ffe9},
+{'m', 0x40f11113, 0x00000000},
+{'q', 0xbfaaaab0, 0x41244444},
+{0, 0x3ff77770, 0x419dddde},
+{'q', 0x40555558, 0x41177778},
+{0, 0x412cccce, 0x4179999a},
+{'q', 0x40eeeeec, 0x40c22224},
+{0, 0x4194cccd, 0x40c8888a},
+{'q', 0x413bbbbc, 0x3e888890},
+{0, 0x41abbbbe, 0xc0b77778},
+{'q', 0x411cccc8, 0xc0c22222},
+{0, 0x41808888, 0xc17ddddf},
+{'q', 0x40caaab0, 0xc11ccccc},
+{0, 0x40f999a0, 0xc1a77778},
+{'q', 0x3faaaa80, 0xc1233334},
+{0, 0xc0000000, 0xc19cccce},
+{'q', 0xc0511120, 0xc1177778},
+{0, 0xc12bbbc0, 0xc1788888},
+{'q', 0xc0ecccd0, 0xc0c22220},
+{0, 0xc193bbbc, 0xc0c88890},
+{'q', 0xc13bbbbc, 0xbe888800},
+{0, 0xc1ac4446, 0x40b77780},
+{'q', 0xc11bbbba, 0x40bddde0},
+{0, 0xc1811111, 0x417bbbc0},
+{'9', 0x004dffce, 0x00a6ffc2},
+{'m', 0x42404444, 0x41055554},
+{'l', 0x41155558, 0xbd888800},
+{'q', 0xbf6eef00, 0x411eeef0},
+{0, 0xc0e22220, 0x4179999a},
+{'q', 0xc0c44448, 0x40b55558},
+{0, 0xc1822224, 0x40aaaaac},
+{'q', 0xc12ccccc, 0xbe888880},
+{0, 0xc1788888, 0xc1022222},
+{'9', 0xffc2ffdb, 0xff73ffe2},
+{'l', 0x3f4cccc0, 0xc0f55550},
+{'q', 0x3f9999a0, 0xc1266668},
+{0, 0x40f55554, 0xc191999c},
+{'q', 0x40d11110, 0xc0fbbbb0},
+{0, 0x418e6668, 0xc0f55550},
+{'q', 0x411aaaa8, 0x3e4ccc00},
+{0, 0x416cccd0, 0x40bbbbc0},
+{'9', 0x002c0029, 0x00790025},
+{'l', 0xc1177778, 0xbd888800},
+{'8', 0xb8f0d302, 0xe5bee6ee},
+{'8', 0x2aa8ffc6, 0x5fdc2be3},
+{'l', 0xbf5dddc0, 0x40f999a0},
+{'8', 0x5a0a2dfc, 0x2f472d0f},
+{'q', 0x41388888, 0x3eccccc0},
+{0, 0x415bbbbc, 0xc1466668},
+{'@', 0x000000aa, 0x00003b44},/*        ª        x-advance: 59.265625 */
+{'M', 0x4227bbbc, 0xc23bbbbc},
+{'l', 0xbe4ccc00, 0xc09ddde0},
+{'8', 0x2d922ece, 0xe2aa00cc},
+{'8', 0xabe1e1df, 0xb220ce02},
+{'8', 0xda49e51d, 0xf655f62b},
+{'4', 0x0000003a, 0xffe30005},
+{'8', 0xd0fbe404, 0xebd6ecf6},
+{'8', 0x0ccbffe2, 0x2be20dea},
+{'l', 0xc1266668, 0xbf4ccc80},
+{'q', 0x3f4cccc0, 0xc1022228},
+{0, 0x40e66668, 0xc13eeef0},
+{'q', 0x40ceeef0, 0xc0733340},
+{0, 0x41600002, 0xc06aaac0},
+{'8', 0x2a650142, 0x691d2823},
+{'4', 0x00b2ffe5, 0x0025fffe},
+{'9', 0x0018ffff, 0x00300003},
+{'6', 0x0000ffae, 0xffbfffa5},
+{'9', 0x0000002a, 0xffdc0059},
+{'4', 0xffb5000e, 0x0000ffcd},
+{'8', 0x0ebe01df, 0x32da0ddf},
+{'8', 0x240d1afd, 0x0a270a11},
+{'@', 0x000000ab, 0x00003ecc},/*        «        x-advance: 62.796875 */
+{'M', 0x41a91112, 0xc1200001},
+{'l', 0xc1733334, 0xc1ce6668},
+{'l', 0x3d888840, 0xbfb33320},
+{'l', 0x41b91112, 0xc1ceeef0},
+{'l', 0x41233334, 0x00000000},
+{'4', 0x00d9ff52, 0x00cf005d},
+{'6', 0x0000ffc0, 0x000000ab},
+{'l', 0xc1733336, 0xc1ce6668},
+{'l', 0x3d888900, 0xbfb33320},
+{'l', 0x41b91112, 0xc1ceeef0},
+{'l', 0x41233334, 0x00000000},
+{'l', 0xc1aeeef0, 0x41d91112},
+{'l', 0x413bbbbc, 0x41cf7778},
+{'l', 0xc1011110, 0xb5800000},
+{'@', 0x000000ac, 0x00004955},/*        ¬        x-advance: 73.332031 */
+{'M', 0x41288889, 0xc255999a},
+{'l', 0x42573334, 0x00000000},
+{'l', 0xc09ddde0, 0x41e2aaab},
+{'l', 0xc1411110, 0x00000000},
+{'l', 0x40444440, 0xc18c4445},
+{'l', 0xc2273334, 0x00000000},
+{'l', 0x3ff77788, 0xc12ccccc},
+{'@', 0x000000ad, 0x00002499},/*        ­        x-advance: 36.597656 */
+{'M', 0x420ccccd, 0xc2395556},
+{'l', 0xbfe66660, 0x41222224},
+{'l', 0xc1fd5556, 0x00000000},
+{'l', 0x3fe66666, 0xc1222224},
+{'l', 0x41fd5556, 0x00000000},
+{'@', 0x000000ae, 0x00006822},/*        ®        x-advance: 104.132812 */
+{'M', 0x40e88889, 0xc2408889},
+{'q', 0x3fbbbbbc, 0xc1544444},
+{0, 0x410cccce, 0xc1c66666},
+{'q', 0x40eaaaac, 0xc1388890},
+{0, 0x4195dddf, 0xc194ccd0},
+{'q', 0x41377778, 0xc0e44440},
+{0, 0x41caaaaa, 0xc0dbbbb0},
+{'q', 0x41544444, 0x3e4ccc00},
+{0, 0x41b33336, 0x40ecccc0},
+{'q', 0x41133330, 0x40e44450},
+{0, 0x41588888, 0x41933334},
+{'q', 0x408aaaa0, 0x41333338},
+{0, 0x403bbbc0, 0x41bcccce},
+{'q', 0xbfbbbbc0, 0x41522224},
+{0, 0xc10cccd0, 0x41c66668},
+{'q', 0xc0eaaab0, 0x4139999a},
+{0, 0xc1966668, 0x4195ddde},
+{'q', 0xc1366664, 0x40e44446},
+{0, 0xc1c9999a, 0x40dbbbbd},
+{'q', 0xc1555554, 0xbe4cccd0},
+{0, 0xc1b44444, 0xc0ecccce},
+{'q', 0xc1133334, 0xc0e88889},
+{0, 0xc1588889, 0xc1944445},
+{'9', 0xffa6ffde, 0xff44ffea},
+{'m', 0x40f11113, 0x00000000},
+{'q', 0xbfb33338, 0x41244444},
+{0, 0x3feeeef0, 0x419dddde},
+{'q', 0x40555558, 0x41177778},
+{0, 0x412ccccc, 0x4179999a},
+{'q', 0x40eeeef0, 0x40c22224},
+{0, 0x4194ccce, 0x40c8888a},
+{'q', 0x413bbbbc, 0x3e888890},
+{0, 0x41abbbbe, 0xc0b77778},
+{'q', 0x411cccc8, 0xc0c22222},
+{0, 0x41808888, 0xc17ddddf},
+{'q', 0x40caaaa0, 0xc11ccccc},
+{0, 0x40f99990, 0xc1a77778},
+{'q', 0x3faaaac0, 0xc1233334},
+{0, 0xc0000000, 0xc19cccce},
+{'q', 0xc0511100, 0xc1177778},
+{0, 0xc12bbbb8, 0xc1788888},
+{'q', 0xc0ecccd0, 0xc0c22220},
+{0, 0xc193bbbc, 0xc0c88890},
+{'q', 0xc13bbbbc, 0xbe888800},
+{0, 0xc1ac4446, 0x40b77780},
+{'q', 0xc11bbbbc, 0x40bddde0},
+{0, 0xc1811111, 0x417bbbc0},
+{'9', 0x004dffce, 0x00a6ffc3},
+{'m', 0x421d1112, 0x40911110},
+{'l', 0xc1333338, 0xbd888800},
+{'l', 0xc0622220, 0x41b44444},
+{'4', 0x0000ffb7, 0xfe3c0046},
+{'l', 0x4189999a, 0x3d888800},
+{'8', 0x206b013d, 0x632a1e2e},
+{'8', 0x40e626fe, 0x2ac919ea},
+{'8', 0x6b2c1b33, 0x3ffc2dfc},
+{'4', 0x00220001, 0x0009ffff},
+{'l', 0xc1133334, 0x00000000},
+{'9', 0xffedfffe, 0xffdaffff},
+{'l', 0x3f4cccc0, 0xc1055558},
+{'8', 0xcbf7dd03, 0xeccfeef4},
+{'m', 0xc0e66668, 0xc1ccccce},
+{'4', 0x0088ffeb, 0x0000004c},
+{'8', 0xef3dff1f, 0xcd23f01e},
+{'8', 0xcaefd706, 0xf3c5f4e8},
+{'l', 0xc1177778, 0xbd888800},
+{'@', 0x000000af, 0x00003cbb},/*        ¯        x-advance: 60.730469 */
+{'M', 0x42762223, 0xc2c0aaab},
+{'l', 0xbfc44440, 0x41177778},
+{'l', 0xc22dddde, 0x00000000},
+{'l', 0x3fc44430, 0xc1177778},
+{'l', 0x422dddde, 0x00000000},
+{'@', 0x000000b0, 0x00003177},/*        °        x-advance: 49.464844 */
+{'M', 0x417aaaac, 0xc2a11112},
+{'8', 0x9c2bc801, 0xd564d429},
+{'8', 0x2a560135, 0x5c1f2921},
+{'8', 0x64d638fe, 0x2a9e2bd8},
+{'8', 0xd7a8ffcb, 0xa5e0d8de},
+{'m', 0x41000000, 0xbe088800},
+{'8', 0x2d0c1afe, 0x132b1310},
+{'8', 0xeb33001d, 0xcd19ea15},
+{'8', 0xd3f5e703, 0xebd6ecf2},
+{'8', 0x16cc00e3, 0x33e616ea},
+{'@', 0x000000b1, 0x000046cc},/*        ±        x-advance: 70.796875 */
+{'M', 0x42853334, 0xc23b7778},
+{'l', 0xc1bb3336, 0x00000000},
+{'l', 0xc08aaaa8, 0x41dccccd},
+{'l', 0xc12eeef0, 0x00000000},
+{'l', 0x408aaab0, 0xc1dccccd},
+{'l', 0xc1c80002, 0x00000000},
+{'l', 0x3fd55558, 0xc1222224},
+{'l', 0x41c77778, 0x00000000},
+{'l', 0x408aaaa8, 0xc1dbbbbe},
+{'l', 0x412ddde0, 0x00000000},
+{'4', 0x00dbffde, 0x000000bc},
+{'6', 0x0051fff3, 0x0125ffbd},
+{'l', 0xbfcccce0, 0x41211113},
+{'l', 0xc2584445, 0xb3900000},
+{'l', 0x3fccccd4, 0xc1211112},
+{'l', 0x42584445, 0x00000000},
+{'@', 0x000000b2, 0x00003133},/*        ²        x-advance: 49.199219 */
+{'M', 0x4239dddf, 0xc2540001},
+{'l', 0xbfc44460, 0x4108888c},
+{'l', 0xc21aeeef, 0x00000000},
+{'4', 0xffc3000a, 0xff6e00ae},
+{'l', 0x40a66668, 0xc09bbbb0},
+{'8', 0xc61fe61b, 0xd9f6e703},
+{'8', 0xf1daf2f3, 0x14c800dd},
+{'9', 0x0013ffeb, 0x0034ffe4},
+{'l', 0xc1255556, 0x3d888800},
+{'q', 0x3f5ddde0, 0xc1055558},
+{0, 0x40d9999c, 0xc14eeef0},
+{'q', 0x40c00000, 0xc0955560},
+{0, 0x41622224, 0xc0933340},
+{'8', 0x1e610037, 0x5b261e29},
+{'8', 0x5bd633fe, 0x44b426d9},
+{'l', 0xc1511112, 0x411bbbbc},
+{'l', 0x41c9999b, 0x00000000},
+{'@', 0x000000b3, 0x00003133},/*        ³        x-advance: 49.199219 */
+{'M', 0x41e11112, 0xc286aaab},
+{'4', 0x0000ffce, 0xffc3000a},
+{'l', 0x4099999c, 0x00000000},
+{'8', 0xf239ff1d, 0xd220f31b},
+{'8', 0xd9f3e503, 0xf3d6f4ef},
+{'9', 0x0000ffc5, 0x0032ffb5},
+{'l', 0xc1266666, 0x00000000},
+{'8', 0xa734c406, 0xe468e32e},
+{'8', 0x1c610134, 0x572a1a2d},
+{'8', 0x3de526fe, 0x25c816e8},
+{'8', 0x5c3c163e, 0x61c742fe},
+{'q', 0xc0d77778, 0x40733330},
+{0, 0xc1622222, 0x406aaaa0},
+{'8', 0xe09bffc6, 0xa3d7e2d6},
+{'l', 0x41211111, 0x00000000},
+{'8', 0x2a121d00, 0x0d2f0d13},
+{'8', 0xf237001d, 0xd11ef11a},
+{'8', 0xd4efdf04, 0xf4cff5eb},
+{'@', 0x000000b4, 0x00002988},/*        ´        x-advance: 41.531250 */
+{'M', 0x41633334, 0xc2a5999a},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755554, 0x00000000},
+{'l', 0xc1a33333, 0x419cccd0},
+{'l', 0xc129999a, 0x00000000},
+{'@', 0x000000b5, 0x00004b11},/*        µ        x-advance: 75.066406 */
+{'M', 0x41f44445, 0x3fc44445},
+{'9', 0xffffffb7, 0xffd7ff8d},
+{'l', 0xc0bbbbbc, 0x41faaaac},
+{'l', 0xc13eeef0, 0x00000000},
+{'4', 0xfce2008a, 0x00000060},
+{'l', 0xc0dbbbc0, 0x42262223},
+{'8', 0x4bfd23fc, 0x45122800},
+{'q', 0x40111118, 0x40666668},
+{0, 0x41022224, 0x406eeef0},
+{'9', 0x00030062, 0xffaf0095},
+{'l', 0x41144444, 0xc2551112},
+{'l', 0x41411114, 0x00000000},
+{'4', 0x0241ff9c, 0x0000ffaa},
+{'l', 0x3faaaac0, 0xc0f55556},
+{'q', 0xc0ecccd0, 0x41133334},
+{0, 0xc191999b, 0x41133334},
+{'@', 0x000000b6, 0x000040cc},/*        ¶        x-advance: 64.796875 */
+{'M', 0x423c0001, 0x00000000},
+{'4', 0x0000ff9f, 0xfeeb0030},
+{'l', 0xc0999998, 0xbd888800},
+{'q', 0xc158888a, 0xbeaaab00},
+{0, 0xc1a88889, 0xc10bbbbc},
+{'q', 0xc0f11112, 0xc1066668},
+{0, 0xc0c44446, 0xc1aeeef0},
+{'q', 0x3fbbbbc0, 0xc16bbbc0},
+{0, 0x413aaaab, 0xc1ba2224},
+{'9', 0xffbc0052, 0xffbc00c5},
+{'l', 0x4193bbbc, 0x3d888800},
+{'l', 0xc1866666, 0x42c22223},
+{'@', 0x000000b7, 0x00002299},/*        ·        x-advance: 34.597656 */
+{'M', 0x41311112, 0xc241999a},
+{'8', 0xd510e600, 0xee2bef10},
+{'8', 0x102a001a, 0x2a101010},
+{'8', 0x2bef1a00, 0x11d610f0},
+{'8', 0xf1d600e7, 0xd7f0f0f0},
+{'@', 0x000000b8, 0x000020dd},/*        ¸        x-advance: 32.863281 */
+{'M', 0x40222223, 0x00000000},
+{'4', 0x00000044, 0x001dfff5},
+{'8', 0x56420e44, 0x46e32eff},
+{'8', 0x22bd18e5, 0x0ab309d9},
+{'l', 0x3e888888, 0xc0e66668},
+{'8', 0xf53bff1c, 0xd325f61f},
+{'8', 0xdbe9e104, 0xf7cffae5},
+{'l', 0x40400001, 0xc10eeeef},
+{'@', 0x000000b9, 0x00003133},/*        ¹        x-advance: 49.199219 */
+{'M', 0x42266667, 0xc2c22223},
+{'l', 0xc10ccccc, 0x42526668},
+{'l', 0xc1233336, 0x00000000},
+{'l', 0x40e00004, 0xc21f3334},
+{'l', 0xc16aaaac, 0x406eeee0},
+{'l', 0x3fccccd0, 0xc1111110},
+{'l', 0x41bccccd, 0xc0eeeef0},
+{'l', 0x3fbbbbc0, 0x00000000},
+{'@', 0x000000ba, 0x00003c44},/*        º        x-advance: 60.265625 */
+{'M', 0x41544445, 0xc28b1112},
+{'l', 0x3eeeeee0, 0xc0aaaaa0},
+{'q', 0x3f911118, 0xc1200000},
+{0, 0x40fbbbbc, 0xc1877778},
+{'q', 0x40d77778, 0xc0e00000},
+{0, 0x418a2223, 0xc0d77780},
+{'q', 0x41200000, 0x3e888900},
+{0, 0x41700000, 0x40e66670},
+{'9', 0x00370028, 0x00830021},
+{'l', 0xbf088880, 0x40acccc0},
+{'q', 0xbf911120, 0x41200004},
+{0, 0xc0f99998, 0x4187777a},
+{'q', 0xc0d33338, 0x40dbbbb8},
+{0, 0xc1891112, 0x40d33330},
+{'q', 0xc1200002, 0xbe888880},
+{0, 0xc1711112, 0xc0e44440},
+{'9', 0xffcaffd8, 0xff7dffde},
+{'m', 0x41344445, 0xc0acccc0},
+{'l', 0xbf1999a0, 0x40b11110},
+{'8', 0x4c0b28fd, 0x243e230e},
+{'8', 0xdf4c0131, 0xb021dd1b},
+{'l', 0x3f1999c0, 0xc0aeeef0},
+{'8', 0xb5f5d803, 0xdbc2dcf2},
+{'8', 0x21b3ffcf, 0x50df23e5},
+{'@', 0x000000bb, 0x00003ebb},/*        »        x-advance: 62.730469 */
+{'M', 0x419a2223, 0xc27d1112},
+{'l', 0x41733332, 0x41ce6668},
+{'l', 0xbe088800, 0x3fb33320},
+{'l', 0xc1b91112, 0x41ceeef0},
+{'l', 0xc1222223, 0x00000000},
+{'4', 0xff2700ae, 0xff31ffa2},
+{'6', 0x00000041, 0x000000b4},
+{'l', 0x41733334, 0x41ce6668},
+{'l', 0xbe088900, 0x3fb33320},
+{'l', 0xc1b91112, 0x41ceeef0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0x41aeeeef, 0xc1d91112},
+{'l', 0xc13ccccc, 0xc1cf7778},
+{'l', 0x41022224, 0x00000000},
+{'@', 0x000000bc, 0x000061aa},/*        ¼        x-advance: 97.664062 */
+{'M', 0x421c4445, 0xc2c1bbbc},
+{'l', 0xc10bbbbe, 0x42526666},
+{'l', 0xc1233332, 0x00000000},
+{'l', 0x40dddddc, 0xc21f3334},
+{'l', 0xc16aaaab, 0x406eef00},
+{'4', 0xffb8000c, 0xffc500bd},
+{'6', 0x0000000b, 0x006c015a},
+{'l', 0xc26aeeef, 0x42966667},
+{'4', 0xffdaffcc, 0xfda701d5},
+{'6', 0x00260034, 0x0203fee3},
+{'l', 0x41eeeef0, 0xc2073333},
+{'l', 0x412ddde0, 0x00000000},
+{'l', 0xc0b55560, 0x42026666},
+{'0', 0x45f40038, 0x5af000c9},
+{'l', 0xc1244440, 0x00000000},
+{'4', 0xffa60010, 0x0000ff3f},
+{'6', 0xffc50006, 0xfff70057},
+{'l', 0x415ddde4, 0x00000000},
+{'l', 0x40733320, 0xc19a2223},
+{'l', 0xbfaaaa80, 0x3ff77780},
+{'l', 0xc182aaae, 0x418aaaab},
+{'@', 0x000000bd, 0x00006766},/*        ½        x-advance: 103.398438 */
+{'M', 0x429f1112, 0xc2a68889},
+{'l', 0xc26aeef0, 0x42966667},
+{'4', 0xffdaffcc, 0xfda701d5},
+{'6', 0x00260034, 0xff94feba},
+{'l', 0xc10bbbba, 0x42526666},
+{'l', 0xc1233334, 0x00000000},
+{'l', 0x40dddde0, 0xc21f3334},
+{'l', 0xc16aaaac, 0x406eef00},
+{'4', 0xffb8000c, 0xffc500bd},
+{'6', 0x0000000b, 0x02c2019d},
+{'l', 0xbfc44440, 0x41088888},
+{'4', 0x0000fecb, 0xffc3000a},
+{'l', 0x41ac4442, 0xc1908889},
+{'8', 0xc53bd82e, 0xd810ee0d},
+{'8', 0xd9f6e703, 0xf1daf2f3},
+{'8', 0x14c800dd, 0x34e413eb},
+{'l', 0xc1255558, 0x3d888800},
+{'q', 0x3f5dddc0, 0xc1055558},
+{0, 0x40d99998, 0xc14eeef0},
+{'q', 0x40bdddd8, 0xc0955558},
+{0, 0x41622224, 0xc0933338},
+{'8', 0x1e610037, 0x5b261e29},
+{'8', 0x5bd633fd, 0x43b427d9},
+{'l', 0xc1511110, 0x411ccccd},
+{'l', 0x41c99998, 0x00000000},
+{'@', 0x000000be, 0x000067aa},/*        ¾        x-advance: 103.664062 */
+{'M', 0x42b53334, 0xc2a68889},
+{'l', 0xc26aeef0, 0x42966667},
+{'4', 0xffdaffcc, 0xfda701d5},
+{'6', 0x00260034, 0x0203fed1},
+{'l', 0x41eeeef2, 0xc2073333},
+{'l', 0x412dddd8, 0x00000000},
+{'l', 0xc0b55550, 0x42026666},
+{'0', 0x45f40038, 0x5af000c9},
+{'l', 0xc1244440, 0x00000000},
+{'4', 0xffa60010, 0x0000ff3f},
+{'6', 0xffc50006, 0xfff70057},
+{'l', 0x415ddddc, 0x00000000},
+{'4', 0xff66001e, 0x000ffff6},
+{'6', 0x008aff7e, 0xfe86fefe},
+{'4', 0x0000ffce, 0xffc3000a},
+{'l', 0x40977778, 0x00000000},
+{'8', 0xf239ff1d, 0xd220f31b},
+{'8', 0xd9f3e503, 0xf3d6f4ef},
+{'9', 0x0000ffc5, 0x0032ffb5},
+{'l', 0xc1266668, 0x00000000},
+{'8', 0xa735c406, 0xe468e32e},
+{'8', 0x1c620135, 0x572a1a2d},
+{'8', 0x3de526fe, 0x25c816e7},
+{'8', 0x5c3c163e, 0x61c742fe},
+{'q', 0xc0d77778, 0x40733330},
+{0, 0xc1622222, 0x406aaaa0},
+{'8', 0xe09bffc6, 0xa3d7e2d6},
+{'l', 0x41200000, 0x00000000},
+{'8', 0x2a131d00, 0x0d2e0d13},
+{'8', 0xf238001d, 0xd11ef11a},
+{'8', 0xd4efdf04, 0xf4cff5eb},
+{'@', 0x000000bf, 0x00003ebb},/*        ¿        x-advance: 62.730469 */
+{'M', 0x422ccccd, 0xc2855556},
+{'8', 0x29f01900, 0x11d810f1},
+{'8', 0xf2d700e8, 0xd8f0f0f0},
+{'8', 0xd710e700, 0xef28f010},
+{'8', 0x0e290019, 0x280f0f10},
+{'m', 0xc1844444, 0x41aaaaac},
+{'l', 0x413ddde0, 0xbd888800},
+{'8', 0x6cdf40fa, 0x5bb42ce6},
+{'8', 0x4cb32ece, 0x5bd724de},
+{'8', 0x521032fa, 0x214b2017},
+{'8', 0xe4570134, 0xb02de223},
+{'l', 0x41400000, 0xbd888850},
+{'q', 0xbfaaaaa0, 0x41377779},
+{0, 0xc11bbbbc, 0x41908889},
+{'q', 0xc1055554, 0x40d33334},
+{0, 0xc19dddde, 0x40cccccc},
+{'q', 0xc1322223, 0xbe888880},
+{0, 0xc18d5556, 0xc0d99998},
+{'q', 0xc0ceeef0, 0xc0d33336},
+{0, 0xc0aeeeef, 0xc1900001},
+{'q', 0x3f4ccccc, 0xc11bbbbc},
+{0, 0x40e22223, 0xc1866667},
+{'8', 0x996ac832, 0xbb27e71e},
+{'q', 0x3f9999a0, 0xc0b11118},
+{0, 0x40777778, 0xc0fbbbc0},
+{'@', 0x000000c0, 0x00005666},/*        À        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfd4700c5},
+{'l', 0x41166668, 0x419ccccc},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaac, 0xc19ccccc},
+{'l', 0x415bbbbc, 0x00000000},
+{'[', 0x007a00c0, 0x000000cc},/*kerning*/
+{'@', 0x000000c1, 0x00005666},/*        Á        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfde400a4},
+{'l', 0x417aaaa8, 0xc19ccccc},
+{'l', 0x41755554, 0x00000000},
+{'l', 0xc1a33332, 0x419ccccc},
+{'l', 0xc1299998, 0x00000000},
+{'[', 0x007a00c1, 0x000000cc},/*kerning*/
+{'@', 0x000000c2, 0x00005666},/*        Â        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfd47010f},
+{'l', 0x415bbbc0, 0x41908888},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211110, 0x3e4ccc00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900000},
+{'l', 0x40e22220, 0x00000000},
+{'[', 0x007a00c2, 0x000000cc},/*kerning*/
+{'@', 0x000000c3, 0x00005666},/*        Ã        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfd520169},
+{'l', 0x41000008, 0x3f2aaa80},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d8, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022224, 0xbeaaab00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbc0, 0xbe888900},
+{0, 0x40f77770, 0xc0f11110},
+{'[', 0x007a00c3, 0x000000cc},/*kerning*/
+{'@', 0x000000c4, 0x00005666},/*        Ä        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfda00041},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088a00},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'[', 0x007a00c4, 0x000000cc},/*kerning*/
+{'@', 0x000000c5, 0x00005666},/*        Ã…        x-advance: 86.398438 */
+{'M', 0xc0accccd, 0x00000000},
+{'l', 0x4252eef0, 0xc2c22223},
+{'l', 0x41311110, 0x00000000},
+{'l', 0x41991114, 0x42c22223},
+{'l', 0xc1455558, 0x00000000},
+{'l', 0xc0911118, 0xc1cb3334},
+{'4', 0x0000fec6, 0x00cbff95},
+{'6', 0x0000ff95, 0xfee10102},
+{'4', 0x000000fe, 0xfe97ffc0},
+{'6', 0x0169ff42, 0xfd89007e},
+{'8', 0xaf23d101, 0xde52de22},
+{'8', 0x1f4b002c, 0x4b1d1f1e},
+{'8', 0x51dd30ff, 0x20af20de},
+{'8', 0xe3b500d4, 0xb5e3e2e2},
+{'m', 0x40ccccd0, 0xbe088800},
+{'8', 0x280b16fe, 0x1125110d},
+{'8', 0xed2e001a, 0xd317ed14},
+{'8', 0xd7f6e903, 0xeedaeef3},
+{'8', 0x14d200e6, 0x2de914ec},
+{'[', 0x007a00c5, 0x000000cc},/*kerning*/
+{'@', 0x000000c6, 0x00007bcc},/*        Æ        x-advance: 123.796875 */
+{'M', 0x42e8eef0, 0xc1222223},
+{'l', 0xbfe66680, 0x41222223},
+{'l', 0xc264cccd, 0x00000000},
+{'l', 0x40488880, 0xc1bc4445},
+{'l', 0xc2104444, 0x00000000},
+{'l', 0xc18aaaac, 0x41bc4445},
+{'l', 0xc178888a, 0x00000000},
+{'l', 0x4293999a, 0xc2c22223},
+{'l', 0x42784446, 0x00000000},
+{'l', 0xbfe66680, 0x41222228},
+{'l', 0xc232aaaa, 0x00000000},
+{'l', 0xc0866670, 0x41faaaaa},
+{'l', 0x42191112, 0x00000000},
+{'l', 0xbfe66680, 0x41222224},
+{'4', 0x0000fed3, 0x011affdb},
+{'6', 0x0000016c, 0xff38fd66},
+{'l', 0x41e80002, 0x00000000},
+{'l', 0x40ceeef8, 0xc2404445},
+{'l', 0xc20ddddf, 0x42404445},
+{'@', 0x000000c7, 0x00005633},/*        Ç        x-advance: 86.199219 */
+{'M', 0x4283bbbc, 0xc1f66667},
+{'l', 0x41455558, 0xbe088880},
+{'q', 0xc03bbbc0, 0x41700000},
+{0, 0xc15bbbc0, 0x41be6667},
+{'q', 0xc12bbbb8, 0x410ccccd},
+{0, 0xc1d11110, 0x41077777},
+{'q', 0xc1455556, 0xbe88887c},
+{0, 0xc19aaaab, 0xc0e22222},
+{'q', 0xc0e00002, 0xc0d9999a},
+{0, 0xc1177779, 0xc1880000},
+{'9', 0xffaeffed, 0xff59fff8},
+{'l', 0x3fb33330, 0xc11aaaac},
+{'q', 0x3fe66668, 0xc13cccd0},
+{0, 0x40ecccce, 0xc1b1999c},
+{'q', 0x40b33334, 0xc1266660},
+{0, 0x416eeef2, 0xc185dddc},
+{'q', 0x41166664, 0xc0ccccd0},
+{0, 0x41b3bbbc, 0xc0c44440},
+{'q', 0x416bbbb8, 0x3eaaaa00},
+{0, 0x41b19998, 0x41166660},
+{'9', 0x0048003c, 0x00b9003f},
+{'l', 0xc1466668, 0x00000000},
+{'q', 0xbeaaaa00, 0xc1133338},
+{0, 0xc0888880, 0xc1777778},
+{'q', 0xc0777780, 0xc0c88890},
+{0, 0xc1600000, 0xc0d33330},
+{'q', 0xc11bbbc0, 0xbe888900},
+{0, 0xc182aaac, 0x409dddd0},
+{'q', 0xc0d33334, 0x40a44450},
+{0, 0xc1266668, 0x41544448},
+{'9', 0x0041ffe2, 0x0085ffd8},
+{'l', 0xbfb33330, 0x41166668},
+{'q', 0xbf6eef00, 0x40dddde0},
+{0, 0xbe088880, 0x416eeef0},
+{'8', 0x6c263f05, 0x2f692d21},
+{'q', 0x41333334, 0x3ecccce0},
+{0, 0x418c4446, 0xc0b11110},
+{'9', 0xffd10033, 0xff7f004b},
+{'m', 0xc2051111, 0x41fbbbbd},
+{'4', 0x00000044, 0x001dfff5},
+{'8', 0x56420e44, 0x46e32eff},
+{'8', 0x22bd18e5, 0x0ab309d9},
+{'l', 0x3e8888c0, 0xc0e66668},
+{'8', 0xf53bff1c, 0xd325f61f},
+{'8', 0xdbe9e104, 0xf7cffae5},
+{'l', 0x40400000, 0xc10eeeef},
+{'@', 0x000000c8, 0x00004b44},/*        È        x-advance: 75.265625 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x426d1112, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc23aaaac, 0x00000000},
+{'l', 0xc0acccc8, 0x41f9999c},
+{'l', 0x4222eeef, 0x00000000},
+{'l', 0xbfe66640, 0x41277778},
+{'l', 0xc222eef0, 0x00000000},
+{'l', 0xc0c00004, 0x4209999a},
+{'4', 0x0000017b, 0x0053fff2},
+{'6', 0x0000fe21, 0xfc220162},
+{'l', 0x41166664, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaa8, 0xc19cccd0},
+{'l', 0x415bbbbc, 0x00000000},
+{'[', 0x005400c8, 0x00000155},/*kerning*/
+{'@', 0x000000c9, 0x00004b44},/*        É        x-advance: 75.265625 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x426d1112, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc23aaaac, 0x00000000},
+{'l', 0xc0acccc8, 0x41f9999c},
+{'l', 0x4222eeef, 0x00000000},
+{'l', 0xbfe66640, 0x41277778},
+{'l', 0xc222eef0, 0x00000000},
+{'l', 0xc0c00004, 0x4209999a},
+{'4', 0x0000017b, 0x0053fff2},
+{'6', 0x0000fe21, 0xfcbe0142},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'[', 0x005400c9, 0x00000155},/*kerning*/
+{'@', 0x000000ca, 0x00004b44},/*        Ê        x-advance: 75.265625 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x426d1112, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc23aaaac, 0x00000000},
+{'l', 0xc0acccc8, 0x41f9999c},
+{'l', 0x4222eeef, 0x00000000},
+{'l', 0xbfe66640, 0x41277778},
+{'l', 0xc222eef0, 0x00000000},
+{'l', 0xc0c00004, 0x4209999a},
+{'4', 0x0000017b, 0x0053fff2},
+{'6', 0x0000fe21, 0xfc2201ac},
+{'l', 0x415bbbbc, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211114, 0x3e4cce00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900004},
+{'l', 0x40e22228, 0x00000000},
+{'[', 0x005400ca, 0x00000155},/*kerning*/
+{'@', 0x000000cb, 0x00004b44},/*        Ë        x-advance: 75.265625 */
+{'M', 0x407bbbbd, 0x00000000},
+{'l', 0x4186eeef, 0xc2c22223},
+{'l', 0x426d1112, 0x00000000},
+{'l', 0xbfeeef00, 0x41288888},
+{'l', 0xc23aaaac, 0x00000000},
+{'l', 0xc0acccc8, 0x41f9999c},
+{'l', 0x4222eeef, 0x00000000},
+{'l', 0xbfe66640, 0x41277778},
+{'l', 0xc222eef0, 0x00000000},
+{'l', 0xc0c00004, 0x4209999a},
+{'4', 0x0000017b, 0x0053fff2},
+{'6', 0x0000fe21, 0xfc7b00dd},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'[', 0x005400cb, 0x00000155},/*kerning*/
+{'@', 0x000000cc, 0x00002400},/*        Ì        x-advance: 36.000000 */
+{'M', 0x42091112, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'6', 0x00000064, 0xff2affc0},
+{'l', 0x41166666, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaab, 0xc19cccd0},
+{'l', 0x415bbbbd, 0x00000000},
+{'@', 0x000000cd, 0x00002400},/*        Í        x-advance: 36.000000 */
+{'M', 0x42091112, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'6', 0x00000064, 0xffc7ffa0},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'@', 0x000000ce, 0x00002400},/*        ÃŽ        x-advance: 36.000000 */
+{'M', 0x42091112, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'6', 0x00000064, 0xff2a0009},
+{'l', 0x415bbbbc, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211111, 0x3e4cce00},
+{'l', 0xbd888900, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900004},
+{'l', 0x40e22220, 0x00000000},
+{'@', 0x000000cf, 0x00002400},/*        Ï        x-advance: 36.000000 */
+{'M', 0x42091112, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'4', 0x0000ff9c, 0xfcf80086},
+{'6', 0x00000064, 0xff83ff3c},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000d0, 0x000058ee},/*        Ð        x-advance: 88.929688 */
+{'M', 0x40bddddf, 0x00000000},
+{'l', 0x40f77777, 0xc2315556},
+{'l', 0xc1288889, 0x00000000},
+{'l', 0x3fe66668, 0xc1222224},
+{'4', 0x00000053, 0xfeac003b},
+{'l', 0x41c9999b, 0x3d888800},
+{'q', 0x41500000, 0x3d888800},
+{0, 0x41aaaaaa, 0x40ccccd0},
+{'q', 0x41055558, 0x40c88890},
+{0, 0x413bbbc0, 0x4185dde0},
+{'9', 0x0053001b, 0x00b3000f},
+{'l', 0xbf4ccd00, 0x40b99998},
+{'q', 0xc0377780, 0x419dddde},
+{0, 0xc1800000, 0x4202aaab},
+{'9', 0x0066ff97, 0x0067fef5},
+{'6', 0x0000ff2a, 0xffad0073},
+{'l', 0x41444446, 0x3d888880},
+{'q', 0x41800000, 0x00000000},
+{0, 0x41cbbbbc, 0xc1244445},
+{'9', 0xffae004c, 0xff35005d},
+{'l', 0x3f4ccd00, 0xc0b11110},
+{'q', 0x3f911100, 0xc1088888},
+{0, 0xbecccd00, 0xc1833332},
+{'q', 0xbfbbbbc0, 0xc0fddde0},
+{0, 0xc0d55558, 0xc1511118},
+{'9', 0xffd7ffd7, 0xffd5ff87},
+{'l', 0xc16ddddc, 0xbd888800},
+{'l', 0xc0b11114, 0x42004445},
+{'l', 0x41922223, 0x00000000},
+{'l', 0xbfe66680, 0x41222224},
+{'l', 0xc1922222, 0x00000000},
+{'l', 0xc0bbbbbc, 0x42077778},
+{'@', 0x000000d1, 0x00005e77},/*        Ñ        x-advance: 94.464844 */
+{'M', 0x42baaaab, 0xc2c22223},
+{'l', 0xc186eef0, 0x42c22223},
+{'l', 0xc1433330, 0x00000000},
+{'l', 0xc20aaaab, 0xc296cccd},
+{'l', 0xc1511112, 0x4296cccd},
+{'l', 0xc149999b, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'l', 0x41422220, 0x00000000},
+{'4', 0x025c0116, 0xfda40069},
+{'6', 0x00000063, 0xff3bff72},
+{'l', 0x41000000, 0x3f2aaa80},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d8, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022224, 0xbeaaab00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbc0, 0xbe888900},
+{0, 0x40f77780, 0xc0f11110},
+{'@', 0x000000d2, 0x00005b22},/*        Ã’        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'9', 0xffce0004, 0xff980000},
+{'m', 0xc19a2224, 0xc25eeeee},
+{'l', 0x41166668, 0x419ccccc},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaac, 0xc19ccccc},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000d3, 0x00005b22},/*        Ó        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'9', 0xffce0004, 0xff980000},
+{'m', 0xc1bb3334, 0xc2108888},
+{'l', 0x417aaaa8, 0xc19ccccc},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419ccccc},
+{'l', 0xc1299998, 0x00000000},
+{'@', 0x000000d4, 0x00005b22},/*        Ô        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'9', 0xffce0004, 0xff980000},
+{'m', 0xc1211114, 0xc25eeeee},
+{'l', 0x415bbbbc, 0x41908888},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211110, 0x3e4cce00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900000},
+{'l', 0x40e22220, 0x00000000},
+{'@', 0x000000d5, 0x00005b22},/*        Õ        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'9', 0xffce0004, 0xff980000},
+{'m', 0x3f911100, 0xc2595556},
+{'l', 0x41000000, 0x3f2aab00},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d9, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022224, 0xbeaaaa00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbb0, 0xbe888900},
+{0, 0x40f77770, 0xc0f11120},
+{'@', 0x000000d6, 0x00005b22},/*        Ö        x-advance: 91.132812 */
+{'M', 0x42aaaaab, 0xc24e6667},
+{'l', 0xbf4ccc80, 0x40c44448},
+{'q', 0xbfddde00, 0x413ddddc},
+{0, 0xc0e88890, 0x41b5ddde},
+{'q', 0xc0b11110, 0x412ccccc},
+{0, 0xc1700000, 0x418ccccd},
+{'q', 0xc1166668, 0x40d77778},
+{0, 0xc1b66668, 0x40ceeeef},
+{'q', 0xc14ccccc, 0xbe88888c},
+{0, 0xc1a00000, 0xc0eaaaac},
+{'q', 0xc0e66666, 0xc0e44445},
+{0, 0xc11aaaab, 0xc18e6667},
+{'9', 0xffabffed, 0xff53fff8},
+{'l', 0x3f5ddde0, 0xc0c44448},
+{'q', 0x3fdddde0, 0xc13ccccc},
+{0, 0x40eaaaac, 0xc1b4ccce},
+{'q', 0x40b33334, 0xc12ddde0},
+{0, 0x41711110, 0xc18d5554},
+{'q', 0x41177778, 0xc0d999a0},
+{0, 0x41b55556, 0xc0d11110},
+{'q', 0x414eeef4, 0x3e888800},
+{0, 0x41a11112, 0x40eaaaa0},
+{'q', 0x40e66670, 0x40e00000},
+{0, 0x41199998, 0x418d5558},
+{'9', 0x00550013, 0x00ae0007},
+{'m', 0xc1433330, 0xc17eeef4},
+{'8', 0x92d7bffa, 0xcf91d2de},
+{'q', 0xc1233334, 0xbe888800},
+{0, 0xc1891112, 0x40b33340},
+{'q', 0xc0dbbbbc, 0x40b99990},
+{0, 0xc12dddde, 0x417aaaa8},
+{'q', 0xc0800000, 0x411ddde0},
+{0, 0xc0a44444, 0x41bbbbbc},
+{'q', 0xbf088880, 0x40c88888},
+{0, 0x3e4ccd00, 0x41500002},
+{'q', 0x3f4cccc0, 0x41044444},
+{0, 0x40a22220, 0x41622222},
+{'q', 0x408aaaac, 0x40bbbbbe},
+{0, 0x415ddde0, 0x40c66668},
+{'q', 0x41266668, 0x3eaaaaa0},
+{0, 0x418a2222, 0xc0aeeef0},
+{'q', 0x40dbbbc0, 0xc0bbbbbc},
+{0, 0x412cccd0, 0xc17cccce},
+{'q', 0x407bbbc0, 0xc11ffffe},
+{0, 0x40a22220, 0xc1be6667},
+{'9', 0xffce0004, 0xff980000},
+{'m', 0xc20f7778, 0xc2326666},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000d7, 0x000046aa},/*        ×        x-advance: 70.664062 */
+{'M', 0x42737778, 0xc1ab3334},
+{'l', 0xc1077778, 0x40f7777a},
+{'l', 0xc18ccccc, 0xc1b44444},
+{'l', 0xc1caaaac, 0x41b3bbbc},
+{'l', 0xc0d9999a, 0xc10cccce},
+{'l', 0x41caaaac, 0xc1b3bbbd},
+{'l', 0xc18b3335, 0xc1b22222},
+{'l', 0x4109999a, 0xc0f55550},
+{'l', 0x418aaaac, 0x41b22222},
+{'l', 0x41c91112, 0xc1b22222},
+{'l', 0x40d77770, 0x410dddd8},
+{'l', 0xc1c88888, 0x41b1999c},
+{'l', 0x418c4444, 0x41b3bbbc},
+{'@', 0x000000d8, 0x00005b22},/*        Ø        x-advance: 91.132812 */
+{'M', 0x421d999a, 0x3fb33334},
+{'9', 0xfffeffaa, 0xffd4ff6b},
+{'4', 0x0053ffbd, 0x0000ffaf},
+{'l', 0x414aaaac, 0xc178888a},
+{'q', 0xc0a00002, 0xc1022222},
+{0, 0xc0c44446, 0xc18bbbbc},
+{'q', 0xbfcccccc, 0xc1433334},
+{0, 0x3fc44448, 0xc1e11112},
+{'q', 0x40199998, 0xc1433334},
+{0, 0x41055556, 0xc1b11112},
+{'q', 0x40bddddc, 0xc11eeef0},
+{0, 0x416eeeee, 0xc17aaaa8},
+{'q', 0x41100000, 0xc0b999a0},
+{0, 0x41aa2224, 0xc0b33330},
+{'9', 0x0001006d, 0x004200b2},
+{'4', 0xffa80046, 0x0000004f},
+{'l', 0xc15cccd0, 0x41880000},
+{'q', 0x40511120, 0x40f55560},
+{0, 0x407bbbc0, 0x417eeef0},
+{'q', 0x3f4ccd00, 0x412aaab0},
+{0, 0xbfd55540, 0x41c55558},
+{'q', 0xc0088880, 0x41411110},
+{0, 0xc0fbbbc0, 0x41b33333},
+{'q', 0xc0b77770, 0x41244446},
+{0, 0xc16eeef0, 0x4183bbbc},
+{'9', 0x0031ffb7, 0x002fff50},
+{'m', 0xc1991111, 0xc207bbbd},
+{'9', 0x00350000, 0x00650011},
+{'l', 0x423d5556, 0xc2722222},
+{'q', 0xc0a00000, 0xc0dddde0},
+{0, 0xc1788888, 0xc0e88890},
+{'q', 0xc1200004, 0xbe888800},
+{0, 0xc1855556, 0x40a66670},
+{'q', 0xc0d55558, 0x40aeeef0},
+{0, 0xc127777a, 0x415eeef0},
+{'q', 0xc0733330, 0x41077774},
+{0, 0xc0aaaaac, 0x41955554},
+{'9', 0x0051fff5, 0x008afff5},
+{'m', 0x42573334, 0xc1ed5556},
+{'9', 0xffd60002, 0xffadfffc},
+{'l', 0xc2380002, 0x426c888a},
+{'q', 0x40a00008, 0x407ffffc},
+{0, 0x4147777c, 0x40844442},
+{'q', 0x41211110, 0x3e4cccc0},
+{0, 0x4184cccc, 0xc0a00000},
+{'q', 0x40d33338, 0xc0a8888a},
+{0, 0x41255554, 0xc1588889},
+{'q', 0x406eef00, 0xc1055558},
+{0, 0x40a22220, 0xc1891112},
+{'8', 0xa40cba0a, 0xd403ea02},
+{'@', 0x000000d9, 0x000055dd},/*        Ù        x-advance: 85.863281 */
+{'M', 0x42955556, 0xc2c22223},
+{'4', 0x00000064, 0x020cffa7},
+{'q', 0xc00ccce0, 0x41722220},
+{0, 0xc1500004, 0x41c19999},
+{'q', 0xc12bbbbc, 0x41100001},
+{0, 0xc1d0888a, 0x410bbbbc},
+{'q', 0xc1677778, 0xbe888878},
+{0, 0xc1b55556, 0xc1133333},
+{'9', 0xffb8ffbf, 0xff44ffcc},
+{'4', 0xfdf30059, 0x00000063},
+{'l', 0xc1322224, 0x42837778},
+{'q', 0xbf911110, 0x41177778},
+{0, 0x40488888, 0x417bbbbe},
+{'q', 0x4088888c, 0x40c66666},
+{0, 0x41644446, 0x40ceeeee},
+{'q', 0x41266668, 0x3eaaaac0},
+{0, 0x41891112, 0xc0b11110},
+{'9', 0xffd10036, 0xff810044},
+{'6', 0xfded005a, 0xff30ff45},
+{'l', 0x41166664, 0x419ccccc},
+{'l', 0xc1177774, 0x00000000},
+{'l', 0xc15aaaac, 0xc19ccccc},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000da, 0x000055dd},/*        Ú        x-advance: 85.863281 */
+{'M', 0x42955556, 0xc2c22223},
+{'4', 0x00000064, 0x020cffa7},
+{'q', 0xc00ccce0, 0x41722220},
+{0, 0xc1500004, 0x41c19999},
+{'q', 0xc12bbbbc, 0x41100001},
+{0, 0xc1d0888a, 0x410bbbbc},
+{'q', 0xc1677778, 0xbe888878},
+{0, 0xc1b55556, 0xc1133333},
+{'9', 0xffb8ffbf, 0xff44ffcc},
+{'4', 0xfdf30059, 0x00000063},
+{'l', 0xc1322224, 0x42837778},
+{'q', 0xbf911110, 0x41177778},
+{0, 0x40488888, 0x417bbbbe},
+{'q', 0x4088888c, 0x40c66666},
+{0, 0x41644446, 0x40ceeeee},
+{'q', 0x41266668, 0x3eaaaac0},
+{0, 0x41891112, 0xc0b11110},
+{'9', 0xffd10036, 0xff810044},
+{'6', 0xfded005a, 0xffcdff24},
+{'l', 0x417aaaac, 0xc19ccccc},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419ccccc},
+{'l', 0xc129999c, 0x00000000},
+{'@', 0x000000db, 0x000055dd},/*        Û        x-advance: 85.863281 */
+{'M', 0x42955556, 0xc2c22223},
+{'4', 0x00000064, 0x020cffa7},
+{'q', 0xc00ccce0, 0x41722220},
+{0, 0xc1500004, 0x41c19999},
+{'q', 0xc12bbbbc, 0x41100001},
+{0, 0xc1d0888a, 0x410bbbbc},
+{'q', 0xc1677778, 0xbe888878},
+{0, 0xc1b55556, 0xc1133333},
+{'9', 0xffb8ffbf, 0xff44ffcc},
+{'4', 0xfdf30059, 0x00000063},
+{'l', 0xc1322224, 0x42837778},
+{'q', 0xbf911110, 0x41177778},
+{0, 0x40488888, 0x417bbbbe},
+{'q', 0x4088888c, 0x40c66666},
+{0, 0x41644446, 0x40ceeeee},
+{'q', 0x41266668, 0x3eaaaac0},
+{0, 0x41891112, 0xc0b11110},
+{'9', 0xffd10036, 0xff810044},
+{'6', 0xfded005a, 0xff30ff8f},
+{'l', 0x415bbbbc, 0x41908888},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211114, 0x3e4ccc00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900000},
+{'l', 0x40e22228, 0x00000000},
+{'@', 0x000000dc, 0x000055dd},/*        Ü        x-advance: 85.863281 */
+{'M', 0x42955556, 0xc2c22223},
+{'4', 0x00000064, 0x020cffa7},
+{'q', 0xc00ccce0, 0x41722220},
+{0, 0xc1500004, 0x41c19999},
+{'q', 0xc12bbbbc, 0x41100001},
+{0, 0xc1d0888a, 0x410bbbbc},
+{'q', 0xc1677778, 0xbe888878},
+{0, 0xc1b55556, 0xc1133333},
+{'9', 0xffb8ffbf, 0xff44ffcc},
+{'4', 0xfdf30059, 0x00000063},
+{'l', 0xc1322224, 0x42837778},
+{'q', 0xbf911110, 0x41177778},
+{0, 0x40488888, 0x417bbbbe},
+{'q', 0x4088888c, 0x40c66666},
+{0, 0x41644446, 0x40ceeeee},
+{'q', 0x41266668, 0x3eaaaac0},
+{0, 0x41891112, 0xc0b11110},
+{'9', 0xffd10036, 0xff810044},
+{'6', 0xfded005a, 0xff89fec0},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088a00},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000dd, 0x00004f88},/*        Ý        x-advance: 79.531250 */
+{'M', 0x41c6eef0, 0xc2c22223},
+{'l', 0x417eeef0, 0x4242aaac},
+{'l', 0x4203bbbc, 0xc242aaac},
+{'l', 0x41700000, 0x00000000},
+{'l', 0xc22e2223, 0x4275dddf},
+{'l', 0xc0c66660, 0x420e6667},
+{'l', 0xc148888c, 0x00000000},
+{'4', 0xfed80033, 0xfe20ff53},
+{'6', 0x0000006d, 0xffcd0098},
+{'l', 0x417aaaac, 0xc19ccccc},
+{'l', 0x41755554, 0x00000000},
+{'l', 0xc1a33332, 0x419ccccc},
+{'l', 0xc129999c, 0x00000000},
+{'[', 0x002900dd, 0x00000155},/*kerning*/
+{'[', 0x005400dd, 0x00000122},/*kerning*/
+{'[', 0x005600dd, 0x00000133},/*kerning*/
+{'[', 0x005700dd, 0x00000122},/*kerning*/
+{'[', 0x005800dd, 0x000000dd},/*kerning*/
+{'[', 0x005900dd, 0x00000133},/*kerning*/
+{'[', 0x005d00dd, 0x00000133},/*kerning*/
+{'[', 0x007d00dd, 0x00000144},/*kerning*/
+{'[', 0x00dd00dd, 0x00000133},/*kerning*/
+{'@', 0x000000de, 0x00004e44},/*        Þ        x-advance: 78.265625 */
+{'M', 0x42191112, 0xc1a6eef0},
+{'l', 0xc195dddf, 0xbd888800},
+{'l', 0xc06aaaac, 0x41a77778},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x4186eef0, 0xc2c22223},
+{'4', 0x00000060, 0x009cffe5},
+{'l', 0x41891113, 0x3d888c00},
+{'q', 0x41466664, 0x3eaaaa00},
+{0, 0x41a33332, 0x40f11110},
+{'q', 0x41011110, 0x40e66660},
+{0, 0x40dddde0, 0x41a19998},
+{'q', 0xbf999980, 0x41644448},
+{0, 0xc13aaaac, 0x41acccce},
+{'9', 0x003affad, 0x003aff42},
+{'m', 0x41000000, 0xc23a2222},
+{'4', 0x0000ff6b, 0x0123ffce},
+{'l', 0x41899999, 0x3d888800},
+{'q', 0x410bbbbc, 0xbd888900},
+{0, 0x41766668, 0xc09bbbc0},
+{'8', 0x923fda35, 0x9be6c008},
+{'q', 0xc08aaab0, 0xc09999a0},
+{0, 0xc1433334, 0xc0a22220},
+{'@', 0x000000df, 0x00004ebb},/*        ß        x-advance: 78.730469 */
+{'M', 0x41d55556, 0xc2946667},
+{'4', 0x0251ff9c, 0x0000ffa0},
+{'l', 0x414aaaac, 0xc2944445},
+{'q', 0x3fd55558, 0xc1433330},
+{0, 0x410eeeef, 0xc1a80000},
+{'q', 0x40e88888, 0xc10cccd0},
+{0, 0x41a4ccce, 0xc1088888},
+{'q', 0x411eeef0, 0x3e888800},
+{0, 0x41808888, 0x40bddde0},
+{'q', 0x40c44440, 0x40b55550},
+{0, 0x40a88890, 0x41800000},
+{'8', 0x4ee72cfd, 0x43d522ec},
+{'8', 0x4ae321ea, 0x430d25fa},
+{'8', 0x39301d13, 0x3b321b1c},
+{'q', 0x402eef00, 0x40800000},
+{0, 0x401999a0, 0x41133334},
+{'q', 0xbf199980, 0x41377777},
+{0, 0xc10bbbbc, 0x418b3333},
+{'q', 0xc1011114, 0x40bddde0},
+{0, 0xc1977778, 0x40b9999b},
+{'9', 0xfffeffa3, 0xffdaff67},
+{'l', 0x406aaaa8, 0xc1266668},
+{'q', 0x40e44444, 0x40a00002},
+{0, 0x416aaaaa, 0x40a44446},
+{'8', 0xe8560030, 0xb52ee827},
+{'8', 0xbbf1d905, 0xc6cfe3ec},
+{'8', 0xc4cee4e4, 0xb4eee0eb},
+{'8', 0xb61ad703, 0xbf2ddf16},
+{'8', 0xb71ce017, 0xb8f3d705},
+{'8', 0xe0c0e2ed, 0x2f9cfebc},
+{'q', 0xc07bbbb8, 0x40c88880},
+{0, 0xc0a00000, 0x41599998},
+{'@', 0x000000e0, 0x00004811},/*        à        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0x41711112, 0xc2ba0001},
+{'l', 0x41166668, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaac, 0xc19cccd0},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000e1, 0x00004811},/*        á        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0x41300002, 0xc292cccd},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33336, 0x419cccd0},
+{'l', 0xc1299998, 0x00000000},
+{'@', 0x000000e2, 0x00004811},/*        â        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0x41c2aaab, 0xc2ba0001},
+{'l', 0x415bbbc0, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211110, 0x3e4cce00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900004},
+{'l', 0x40e22220, 0x00000000},
+{'@', 0x000000e3, 0x00004811},/*        ã        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0x420e2222, 0xc2b73334},
+{'l', 0x41000008, 0x3f2aab00},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d8, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022224, 0xbeaaab00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbc0, 0xbe888800},
+{0, 0x40f77778, 0xc0f11110},
+{'@', 0x000000e4, 0x00004811},/*        ä        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0xbfbbbbb0, 0xc2a3bbbc},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000e5, 0x00004811},/*        å        x-advance: 72.066406 */
+{'M', 0x42380001, 0x00000000},
+{'9', 0xfff1fffd, 0xffe2fffd},
+{'l', 0x3e088900, 0xc0733334},
+{'q', 0xc11eeef0, 0x41133334},
+{0, 0xc1a91113, 0x410eeeef},
+{'q', 0xc10eeeee, 0xbe088870},
+{0, 0xc1733333, 0xc0b99999},
+{'q', 0xc0c8888a, 0xc0b55557},
+{0, 0xc0b77778, 0xc1711112},
+{'q', 0x3f088888, 0xc1122222},
+{0, 0x40bbbbbc, 0xc1666666},
+{'q', 0x40aaaaac, 0xc0aaaab0},
+{0, 0x41522223, 0xc0f33338},
+{'9', 0xffee003e, 0xffee007d},
+{'4', 0x00000064, 0xffd20006},
+{'8', 0xb0edce05, 0xe0b4e2e8},
+{'8', 0x16ac00d4, 0x44ce16d8},
+{'l', 0xc1411112, 0x3d888a00},
+{'8', 0xa02bc705, 0xc75bda26},
+{'q', 0x40d7777c, 0xc0155560},
+{0, 0x41533336, 0xc0111120},
+{'q', 0x412ddddc, 0x3e4cce00},
+{0, 0x418aaaaa, 0x40d55560},
+{'9', 0x00330034, 0x008c002b},
+{'4', 0x011affd2, 0x002cfffd},
+{'9', 0x001dffff, 0x003a0006},
+{'4', 0x0009ffff, 0x0000ff9e},
+{'m', 0xc1977779, 0xc1166667},
+{'8', 0xea590130, 0xc144e829},
+{'4', 0xff8a0015, 0x0000ffb7},
+{'q', 0xc14dddde, 0x00000000},
+{0, 0xc19ccccd, 0x40a22224},
+{'8', 0x46db18e0, 0x44132bfb},
+{'9', 0x00190019, 0x00190044},
+{'m', 0x40c6666c, 0xc2a97778},
+{'8', 0xaf23d101, 0xde52de22},
+{'8', 0x1f4b002c, 0x4b1d1f1e},
+{'8', 0x51dd30ff, 0x20af20de},
+{'8', 0xe3b500d4, 0xb5e3e2e2},
+{'m', 0x40ccccc8, 0xbe088800},
+{'8', 0x280b16fe, 0x1125110d},
+{'8', 0xed2e001a, 0xd317ed14},
+{'8', 0xd7f6e903, 0xeedaeef3},
+{'8', 0x14d200e6, 0x2de914ec},
+{'@', 0x000000e6, 0x00006fdd},/*        æ        x-advance: 111.863281 */
+{'M', 0x42c9999a, 0xc0d77778},
+{'8', 0x32a123d8, 0x0e950eca},
+{'8', 0xea9400c8, 0xb7aeeacc},
+{'q', 0xc0b99998, 0x40c66667},
+{0, 0xc1588888, 0x41133334},
+{'q', 0xc0f55558, 0x403bbbba},
+{0, 0xc1811112, 0x40333332},
+{'q', 0xc1188889, 0xbe4cccd0},
+{0, 0xc1733334, 0xc0b9999a},
+{'q', 0xc0b55556, 0xc0b33335},
+{0, 0xc0a22222, 0xc1755556},
+{'8', 0x942abc04, 0xc860d826},
+{'9', 0xffef0039, 0xffef0075},
+{'4', 0x00000078, 0xffd30006},
+{'8', 0xacf3d005, 0xdbb7dced},
+{'8', 0x18a6ffcf, 0x4cce1ad7},
+{'l', 0xc13cccce, 0xbf911100},
+{'q', 0x3f911110, 0xc1355558},
+{0, 0x41277778, 0xc184cccc},
+{'q', 0x41166666, 0xc0a88890},
+{0, 0x419dddde, 0xc0a22230},
+{'8', 0x145f0131, 0x4343132e},
+{'q', 0x412eeef0, 0xc1355554},
+{0, 0x41be6668, 0xc12ffffc},
+{'q', 0x415eeef0, 0x3eaaaa00},
+{0, 0x419d5554, 0x411ffffc},
+{'9', 0x004c002d, 0x00b30021},
+{'4', 0x003efff7, 0x0000fe8a},
+{'q', 0xbf911120, 0x41100000},
+{0, 0x40199990, 0x4184cccd},
+{'q', 0x40666660, 0x40f11110},
+{0, 0x41600000, 0x40f77778},
+{'8', 0xf25a0130, 0xd751f029},
+{'6', 0x0049001b, 0xfe3bff72},
+{'q', 0xc1133330, 0xbe888880},
+{0, 0xc1677778, 0x40ceeef0},
+{'9', 0x0035ffd7, 0x0072ffc3},
+{'4', 0x00000115, 0xffef0003},
+{'8', 0x9af2c609, 0xd2a8d4e8},
+{'m', 0xc268cccc, 0x425b7778},
+{'9', 0x0001004a, 0xffbc009c},
+{'4', 0xff810016, 0x0000ff95},
+{'8', 0x1a9b00cd, 0x53c719ce},
+{'8', 0x40152afb, 0x1642151a},
+{'@', 0x000000e7, 0x00004555},/*        ç        x-advance: 69.332031 */
+{'M', 0x4200cccd, 0xc10bbbbc},
+{'8', 0xe35d0134, 0xae36e129},
+{'l', 0x41377778, 0xbd888900},
+{'q', 0xbfc44440, 0x412dddde},
+{0, 0xc12aaaa8, 0x418ccccd},
+{'q', 0xc1122224, 0x40d77779},
+{0, 0xc19e6668, 0x40d11113},
+{'q', 0xc1222222, 0xbe088890},
+{0, 0xc1822222, 0xc0aaaaab},
+{'q', 0xc0c22224, 0xc0a66668},
+{0, 0xc108888a, 0xc1555556},
+{'9', 0xffbfffed, 0xff77fff4},
+{'l', 0x3e888890, 0xc0377780},
+{'q', 0x3f888888, 0xc11aaaac},
+{0, 0x40b11112, 0xc1900000},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x41422223, 0xc1555558},
+{'q', 0x40f33334, 0xc0a22220},
+{0, 0x41908889, 0xc0999990},
+{'q', 0x41366668, 0x3e888800},
+{0, 0x41911112, 0x40f55550},
+{'9', 0x003a0036, 0x00940036},
+{'l', 0xc1355558, 0xbd888800},
+{'8', 0xa7e3cdff, 0xd9addbe4},
+{'q', 0xc118888a, 0xbe888900},
+{0, 0xc17bbbbe, 0x40e00000},
+{'9', 0x0039ffcf, 0x00a4ffc3},
+{'l', 0xbe088880, 0x3fa22220},
+{'8', 0x5e022efc, 0x4e222e06},
+{'9', 0x001f001b, 0x00210053},
+{'m', 0xc1066666, 0x41166667},
+{'4', 0x00000044, 0x001dfff5},
+{'8', 0x56420e44, 0x46e32eff},
+{'8', 0x22bd18e5, 0x0ab309d9},
+{'l', 0x3e888880, 0xc0e66668},
+{'8', 0xf53bff1c, 0xd325f61f},
+{'8', 0xdbe9e104, 0xf7cffae5},
+{'l', 0x40400000, 0xc10eeeef},
+{'@', 0x000000e8, 0x00004633},/*        è        x-advance: 70.199219 */
+{'M', 0x42711112, 0xc1488889},
+{'q', 0xc0977778, 0x40ddddde},
+{0, 0xc1400000, 0x41277778},
+{'q', 0xc0e88888, 0x40622222},
+{0, 0xc179999c, 0x4059999a},
+{'q', 0xc16bbbbc, 0xbe88888c},
+{0, 0xc1ad5556, 0xc12aaaac},
+{'9', 0xffadffc9, 0xff40ffd2},
+{'l', 0x3eccccd0, 0xc0622220},
+{'q', 0x3f888888, 0xc1133334},
+{0, 0x40b33334, 0xc18d5556},
+{'q', 0x40911112, 0xc1077778},
+{0, 0x41411111, 0xc15ccccc},
+{'q', 0x40f11114, 0xc0acccd0},
+{0, 0x418d5556, 0xc0a44440},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x41788888, 0x40acccc0},
+{'q', 0x40b55558, 0x40a66670},
+{0, 0x40f33330, 0x41533338},
+{'9', 0x00400010, 0x00850008},
+{'4', 0x002cfffb, 0x0000fe88},
+{'q', 0xbf6eeee0, 0x4108888a},
+{0, 0x40377778, 0x41808889},
+{'8', 0x3e6c3c1e, 0xec560130},
+{'9', 0xffea0026, 0xffc80046},
+{'6', 0x002e0036, 0xfe6aff60},
+{'q', 0xc1122224, 0xbeaaab00},
+{0, 0xc1644446, 0x40ccccc8},
+{'9', 0x0035ffd7, 0x0072ffc4},
+{'4', 0x00000118, 0xfff80001},
+{'8', 0x96efc708, 0xcda7cfe7},
+{'m', 0x00000000, 0xc21c0002},
+{'l', 0x41166664, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaaa, 0xc19cccd0},
+{'l', 0x415bbbbe, 0x00000000},
+{'@', 0x000000e9, 0x00004633},/*        é        x-advance: 70.199219 */
+{'M', 0x42711112, 0xc1488889},
+{'q', 0xc0977778, 0x40ddddde},
+{0, 0xc1400000, 0x41277778},
+{'q', 0xc0e88888, 0x40622222},
+{0, 0xc179999c, 0x4059999a},
+{'q', 0xc16bbbbc, 0xbe88888c},
+{0, 0xc1ad5556, 0xc12aaaac},
+{'9', 0xffadffc9, 0xff40ffd2},
+{'l', 0x3eccccd0, 0xc0622220},
+{'q', 0x3f888888, 0xc1133334},
+{0, 0x40b33334, 0xc18d5556},
+{'q', 0x40911112, 0xc1077778},
+{0, 0x41411111, 0xc15ccccc},
+{'q', 0x40f11114, 0xc0acccd0},
+{0, 0x418d5556, 0xc0a44440},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x41788888, 0x40acccc0},
+{'q', 0x40b55558, 0x40a66670},
+{0, 0x40f33330, 0x41533338},
+{'9', 0x00400010, 0x00850008},
+{'4', 0x002cfffb, 0x0000fe88},
+{'q', 0xbf6eeee0, 0x4108888a},
+{0, 0x40377778, 0x41808889},
+{'8', 0x3e6c3c1e, 0xec560130},
+{'9', 0xffea0026, 0xffc80046},
+{'6', 0x002e0036, 0xfe6aff60},
+{'q', 0xc1122224, 0xbeaaab00},
+{0, 0xc1644446, 0x40ccccc8},
+{'9', 0x0035ffd7, 0x0072ffc4},
+{'4', 0x00000118, 0xfff80001},
+{'8', 0x96efc708, 0xcda7cfe7},
+{'m', 0xc0822228, 0xc19b3334},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'@', 0x000000ea, 0x00004633},/*        ê        x-advance: 70.199219 */
+{'M', 0x42711112, 0xc1488889},
+{'q', 0xc0977778, 0x40ddddde},
+{0, 0xc1400000, 0x41277778},
+{'q', 0xc0e88888, 0x40622222},
+{0, 0xc179999c, 0x4059999a},
+{'q', 0xc16bbbbc, 0xbe88888c},
+{0, 0xc1ad5556, 0xc12aaaac},
+{'9', 0xffadffc9, 0xff40ffd2},
+{'l', 0x3eccccd0, 0xc0622220},
+{'q', 0x3f888888, 0xc1133334},
+{0, 0x40b33334, 0xc18d5556},
+{'q', 0x40911112, 0xc1077778},
+{0, 0x41411111, 0xc15ccccc},
+{'q', 0x40f11114, 0xc0acccd0},
+{0, 0x418d5556, 0xc0a44440},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x41788888, 0x40acccc0},
+{'q', 0x40b55558, 0x40a66670},
+{0, 0x40f33330, 0x41533338},
+{'9', 0x00400010, 0x00850008},
+{'4', 0x002cfffb, 0x0000fe88},
+{'q', 0xbf6eeee0, 0x4108888a},
+{0, 0x40377778, 0x41808889},
+{'8', 0x3e6c3c1e, 0xec560130},
+{'9', 0xffea0026, 0xffc80046},
+{'6', 0x002e0036, 0xfe6aff60},
+{'q', 0xc1122224, 0xbeaaab00},
+{0, 0xc1644446, 0x40ccccc8},
+{'9', 0x0035ffd7, 0x0072ffc4},
+{'4', 0x00000118, 0xfff80001},
+{'8', 0x96efc708, 0xcda7cfe7},
+{'m', 0x41133334, 0xc21c0002},
+{'l', 0x415bbbbc, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211112, 0x3e4cce00},
+{'l', 0xbd888900, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900004},
+{'l', 0x40e22228, 0x00000000},
+{'@', 0x000000eb, 0x00004633},/*        ë        x-advance: 70.199219 */
+{'M', 0x42711112, 0xc1488889},
+{'q', 0xc0977778, 0x40ddddde},
+{0, 0xc1400000, 0x41277778},
+{'q', 0xc0e88888, 0x40622222},
+{0, 0xc179999c, 0x4059999a},
+{'q', 0xc16bbbbc, 0xbe88888c},
+{0, 0xc1ad5556, 0xc12aaaac},
+{'9', 0xffadffc9, 0xff40ffd2},
+{'l', 0x3eccccd0, 0xc0622220},
+{'q', 0x3f888888, 0xc1133334},
+{0, 0x40b33334, 0xc18d5556},
+{'q', 0x40911112, 0xc1077778},
+{0, 0x41411111, 0xc15ccccc},
+{'q', 0x40f11114, 0xc0acccd0},
+{0, 0x418d5556, 0xc0a44440},
+{'q', 0x411eeef0, 0x3e4ccc00},
+{0, 0x41788888, 0x40acccc0},
+{'q', 0x40b55558, 0x40a66670},
+{0, 0x40f33330, 0x41533338},
+{'9', 0x00400010, 0x00850008},
+{'4', 0x002cfffb, 0x0000fe88},
+{'q', 0xbf6eeee0, 0x4108888a},
+{0, 0x40377778, 0x41808889},
+{'8', 0x3e6c3c1e, 0xec560130},
+{'9', 0xffea0026, 0xffc80046},
+{'6', 0x002e0036, 0xfe6aff60},
+{'q', 0xc1122224, 0xbeaaab00},
+{0, 0xc1644446, 0x40ccccc8},
+{'9', 0x0035ffd7, 0x0072ffc4},
+{'4', 0x00000118, 0xfff80001},
+{'8', 0x96efc708, 0xcda7cfe7},
+{'m', 0xc1844445, 0xc1deeef0},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeeef, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000ec, 0x000020cc},/*        ì        x-advance: 32.796875 */
+{'M', 0x41dd5556, 0xc2904445},
+{'l', 0xc1488889, 0x42904445},
+{'4', 0x0000ffa0, 0xfdbf0064},
+{'6', 0x00000060, 0xff0fffca},
+{'l', 0x41166666, 0x419ccccc},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaaa, 0xc19ccccc},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000ed, 0x000020cc},/*        í        x-advance: 32.796875 */
+{'M', 0x41dd5556, 0xc2904445},
+{'l', 0xc1488889, 0x42904445},
+{'4', 0x0000ffa0, 0xfdbf0064},
+{'6', 0x00000060, 0xffacffa9},
+{'l', 0x417aaaac, 0xc19ccccc},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33335, 0x419ccccc},
+{'l', 0xc129999a, 0x00000000},
+{'@', 0x000000ee, 0x000020cc},/*        î        x-advance: 32.796875 */
+{'M', 0x41dd5556, 0xc2904445},
+{'l', 0xc1488889, 0x42904445},
+{'4', 0x0000ffa0, 0xfdbf0064},
+{'6', 0x00000060, 0xff0f0012},
+{'l', 0x415bbbbe, 0x41908888},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211111, 0x3e4cce00},
+{'l', 0xbd8888c0, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900000},
+{'l', 0x40e22224, 0x00000000},
+{'@', 0x000000ef, 0x000020cc},/*        ï        x-advance: 32.796875 */
+{'M', 0x41dd5556, 0xc2904445},
+{'l', 0xc1488889, 0x42904445},
+{'4', 0x0000ffa0, 0xfdbf0064},
+{'6', 0x00000060, 0xff68ff45},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef0, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000f0, 0x00004daa},/*        ð        x-advance: 77.664062 */
+{'M', 0x42037778, 0x3fb33334},
+{'q', 0xc1533334, 0xbeaaaaac},
+{0, 0xc1a22223, 0xc11dddde},
+{'q', 0xc0e22222, 0xc119999a},
+{0, 0xc0bbbbbc, 0xc1b1999a},
+{'q', 0x3f5ddde0, 0xc1100000},
+{0, 0x40a44446, 0xc1880000},
+{'q', 0x408aaaaa, 0xc1000000},
+{0, 0x41399999, 0xc14ddde0},
+{'q', 0x40e8888c, 0xc09dddd8},
+{0, 0x41880000, 0xc0977778},
+{'q', 0x41244448, 0x3e888900},
+{0, 0x418cccce, 0x40f55558},
+{'9', 0xff9effff, 0xff4effc5},
+{'4', 0x004eff83, 0xffc6ffe2},
+{'l', 0x415bbbbe, 0xc1055558},
+{'9', 0xffd2ffc9, 0xffb7ff6c},
+{'l', 0x40955558, 0xc1299998},
+{'9', 0x001d0072, 0x006500c4},
+{'4', 0xffbc006e, 0x0039001e},
+{'l', 0xc1411114, 0x40e88890},
+{'9', 0x009d005e, 0x01630043},
+{'l', 0xbf6eef00, 0x40d11110},
+{'q', 0xbfaaaac0, 0x41133334},
+{0, 0xc0bbbbc0, 0x418eeeef},
+{'q', 0xc08eeef0, 0x4109999a},
+{0, 0xc1400000, 0x41611112},
+{'9', 0x002bffc4, 0x0029ff71},
+{'m', 0xc1600002, 0xc2004445},
+{'q', 0xbf5ddde0, 0x40f55558},
+{0, 0x402aaab0, 0x416aaaae},
+{'8', 0x3a62381c, 0xe05e0239},
+{'8', 0xa83bdd25, 0x9a1ccc15},
+{'8', 0xb109ce06, 0xcdcfddf0},
+{'q', 0xc0844440, 0xc0000000},
+{0, 0xc10ddddc, 0xc0088880},
+{'q', 0xc12aaaac, 0xbe888880},
+{0, 0xc185dddf, 0x40e88888},
+{'q', 0xc0c22224, 0x40eeeef0},
+{0, 0xc0e44448, 0x4189999a},
+{'@', 0x000000f1, 0x00004922},/*        ñ        x-advance: 73.132812 */
+{'M', 0x4228cccd, 0xc27c8889},
+{'8', 0x1aa9ffcf, 0x41bf1bdb},
+{'l', 0xc10eeef0, 0x424e6667},
+{'l', 0xc1411112, 0x00000000},
+{'4', 0xfdbf0064, 0x0000005b},
+{'l', 0xbfdddde0, 0x41111114},
+{'q', 0x4117777a, 0xc127777c},
+{0, 0x41b08889, 0xc1255554},
+{'q', 0x4139999c, 0x3e4ccc00},
+{0, 0x417aaaac, 0x41000000},
+{'9', 0x003d0021, 0x00910018},
+{'4', 0x017affc2, 0x0000ff9f},
+{'l', 0x41000000, 0xc23ddddf},
+{'8', 0xa9f4cd05, 0xdbb5dcef},
+{'m', 0x419e6668, 0xc2177779},
+{'l', 0x40fffff8, 0x3f2aab00},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d8, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022222, 0xbeaaab00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbb8, 0xbe888800},
+{0, 0x40f77778, 0xc0f11110},
+{'@', 0x000000f2, 0x00004b88},/*        ò        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'m', 0x41bbbbbc, 0xc2840001},
+{'l', 0x41166668, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaac, 0xc19cccd0},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000f3, 0x00004b88},/*        ó        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'m', 0x419b3334, 0xc239999a},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755554, 0x00000000},
+{'l', 0xc1a33332, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'@', 0x000000f4, 0x00004b88},/*        ô        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'m', 0x4202aaab, 0xc2840001},
+{'l', 0x415bbbbc, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211110, 0x3e4cce00},
+{'l', 0xbd888900, 0xbf800000},
+{'l', 0x4193bbbd, 0xc1900004},
+{'l', 0x40e22220, 0x00000000},
+{'@', 0x000000f5, 0x00004b88},/*        õ        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'m', 0x422fbbbc, 0xc2813334},
+{'l', 0x41000000, 0x3f2aab00},
+{'8', 0x5bdd32fc, 0x28aa28e2},
+{'8', 0xe5bb00d8, 0xe7bee5e4},
+{'9', 0x0001ffd3, 0x003bffc3},
+{'l', 0xc1022222, 0xbeaaab00},
+{'8', 0xa423ce05, 0xd757d61e},
+{'8', 0x1b430126, 0x19441a1d},
+{'q', 0x40bbbbc0, 0xbe888800},
+{0, 0x40f77778, 0xc0f11110},
+{'@', 0x000000f6, 0x00004b88},/*        ö        x-advance: 75.531250 */
+{'M', 0x40a88889, 0xc20b7778},
+{'l', 0x3e4ccce0, 0xbfc44440},
+{'q', 0x3f911110, 0xc11eeef0},
+{0, 0x40b9999a, 0xc1933334},
+{'q', 0x40955556, 0xc1088888},
+{0, 0x41466667, 0xc15bbbc0},
+{'q', 0x40f9999c, 0xc0a66660},
+{0, 0x41922222, 0xc09dddd0},
+{'q', 0x41222224, 0x3e4ccc00},
+{0, 0x41833334, 0x40b11110},
+{'q', 0x40caaab0, 0x40a88880},
+{0, 0x41100000, 0x41599998},
+{'9', 0x00420015, 0x008b000e},
+{'l', 0xbe088a00, 0x3fc44440},
+{'q', 0xbf911100, 0x411bbbbc},
+{0, 0xc0bbbbb8, 0x4191999a},
+{'q', 0xc0955550, 0x41077778},
+{0, 0xc1477778, 0x415aaaab},
+{'q', 0xc0f99998, 0x40a44446},
+{0, 0xc1922222, 0x409bbbbd},
+{'q', 0xc1211112, 0xbe4cccd0},
+{0, 0xc1833334, 0xc0acccce},
+{'q', 0xc0c88888, 0xc0a88889},
+{0, 0xc10eeeee, 0xc1577778},
+{'9', 0xffbeffeb, 0xff76fff2},
+{'m', 0x41433334, 0xbfc44440},
+{'l', 0xbe088880, 0x3fccccc0},
+{'8', 0x5d032dfc, 0x50242f08},
+{'8', 0x2254211c, 0xe262013a},
+{'8', 0xae3fe028, 0x9c1dce16},
+{'l', 0x3e088900, 0xbfc44440},
+{'8', 0xa3fdd304, 0xaedcd0f8},
+{'8', 0xddaddee4, 0x1e9dfec5},
+{'8', 0x53c221d8, 0x64e332ea},
+{'m', 0x40dbbbbc, 0xc25b7778},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef1, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000f7, 0x00004baa},/*        ÷        x-advance: 75.664062 */
+{'M', 0x420e6667, 0xc2920000},
+{'8', 0xd511e600, 0xee2aef10},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d610f0},
+{'8', 0xf1d600e7, 0xd7f0f0f0},
+{'m', 0x420eeeef, 0x41a5dddc},
+{'l', 0xc0088880, 0x41444444},
+{'4', 0x0000fdfb, 0xff9e0011},
+{'6', 0x00000204, 0x010dfe97},
+{'8', 0xd510e600, 0xee2bef10},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0f0},
+{'@', 0x000000f8, 0x00004b11},/*        ø        x-advance: 75.066406 */
+{'M', 0x41fcccce, 0x3fbbbbbc},
+{'9', 0xffffffce, 0xffecff9f},
+{'4', 0x0050ffca, 0x0000ffbb},
+{'l', 0x41177778, 0xc15bbbbc},
+{'q', 0xc0b77778, 0xc0c44446},
+{0, 0xc0eccccd, 0xc1622223},
+{'q', 0xbfccccd0, 0xc1011112},
+{0, 0xbf3bbbc0, 0xc1811112},
+{'q', 0x400cccce, 0xc18e6666},
+{0, 0x41477778, 0xc1e22222},
+{'q', 0x41255556, 0xc1277778},
+{0, 0x41c6eef0, 0xc1244448},
+{'9', 0x00010036, 0x00170068},
+{'4', 0xffb10036, 0x00000045},
+{'l', 0xc118888c, 0x415cccd0},
+{'q', 0x40a88888, 0x40c66668},
+{0, 0x40d99998, 0x41611114},
+{'9', 0x003e000c, 0x007d0005},
+{'l', 0xbe088800, 0x3f888880},
+{'q', 0xc00cccc0, 0x4186eeef},
+{0, 0xc1477778, 0x41d9999a},
+{'9', 0x0052ffae, 0x0051ff3a},
+{'m', 0xc1677778, 0xc2126667},
+{'8', 0x52fd28fb, 0x4e152a01},
+{'l', 0x41f4ccce, 0xc23a2223},
+{'8', 0xf0c2f0e4, 0x1c9fffc7},
+{'q', 0xc0a00000, 0x406eeef0},
+{0, 0xc1022222, 0x411cccd0},
+{'9', 0x0030ffe7, 0x0078ffdb},
+{'m', 0x4221999a, 0xc13aaaac},
+{'9', 0xffd8ffff, 0xffb4ffee},
+{'l', 0xc1f2aaac, 0x42388889},
+{'8', 0x0c390c1a, 0xe264013b},
+{'8', 0xae41e029, 0x9b20ce18},
+{'q', 0x3f5dde00, 0xc0d33338},
+{0, 0x3f2aaac0, 0xc1366668},
+{'@', 0x000000f9, 0x00004900},/*        ù        x-advance: 73.000000 */
+{'M', 0x42366667, 0x00000000},
+{'l', 0x3fc44440, 0xc0e66667},
+{'q', 0xc1055554, 0x410dddde},
+{0, 0xc1abbbbc, 0x41088889},
+{'q', 0xc13bbbbc, 0xbe4cccd0},
+{0, 0xc17eeef0, 0xc1055556},
+{'9', 0xffbfffdf, 0xff6cffe8},
+{'4', 0xfe8c003d, 0x00000060},
+{'l', 0xc0f99998, 0x423aeef0},
+{'8', 0x56092dfc, 0x2b44290d},
+{'9', 0x00030066, 0xffad009f},
+{'l', 0x41122224, 0xc2526668},
+{'4', 0x00000061, 0x0241ff9c},
+{'6', 0x0000ffa5, 0xfccdffdd},
+{'l', 0x41166668, 0x419cccd0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0xc15aaaac, 0xc19cccd0},
+{'l', 0x415bbbbc, 0x00000000},
+{'@', 0x000000fa, 0x00004900},/*        ú        x-advance: 73.000000 */
+{'M', 0x42366667, 0x00000000},
+{'l', 0x3fc44440, 0xc0e66667},
+{'q', 0xc1055554, 0x410dddde},
+{0, 0xc1abbbbc, 0x41088889},
+{'q', 0xc13bbbbc, 0xbe4cccd0},
+{0, 0xc17eeef0, 0xc1055556},
+{'9', 0xffbfffdf, 0xff6cffe8},
+{'4', 0xfe8c003d, 0x00000060},
+{'l', 0xc0f99998, 0x423aeef0},
+{'8', 0x56092dfc, 0x2b44290d},
+{'9', 0x00030066, 0xffad009f},
+{'l', 0x41122224, 0xc2526668},
+{'4', 0x00000061, 0x0241ff9c},
+{'6', 0x0000ffa5, 0xfd6affbc},
+{'l', 0x417aaaac, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33336, 0x419cccd0},
+{'l', 0xc1299998, 0x00000000},
+{'@', 0x000000fb, 0x00004900},/*        û        x-advance: 73.000000 */
+{'M', 0x42366667, 0x00000000},
+{'l', 0x3fc44440, 0xc0e66667},
+{'q', 0xc1055554, 0x410dddde},
+{0, 0xc1abbbbc, 0x41088889},
+{'q', 0xc13bbbbc, 0xbe4cccd0},
+{0, 0xc17eeef0, 0xc1055556},
+{'9', 0xffbfffdf, 0xff6cffe8},
+{'4', 0xfe8c003d, 0x00000060},
+{'l', 0xc0f99998, 0x423aeef0},
+{'8', 0x56092dfc, 0x2b44290d},
+{'9', 0x00030066, 0xffad009f},
+{'l', 0x41122224, 0xc2526668},
+{'4', 0x00000061, 0x0241ff9c},
+{'6', 0x0000ffa5, 0xfccd0026},
+{'l', 0x415bbbc0, 0x4190888c},
+{'0', 0xffb20700, 0x59a3a7c4},
+{'l', 0xc1211110, 0x3e4cce00},
+{'l', 0xbd888800, 0xbf800000},
+{'l', 0x4193bbbc, 0xc1900004},
+{'l', 0x40e22220, 0x00000000},
+{'@', 0x000000fc, 0x00004900},/*        ü        x-advance: 73.000000 */
+{'M', 0x42366667, 0x00000000},
+{'l', 0x3fc44440, 0xc0e66667},
+{'q', 0xc1055554, 0x410dddde},
+{0, 0xc1abbbbc, 0x41088889},
+{'q', 0xc13bbbbc, 0xbe4cccd0},
+{0, 0xc17eeef0, 0xc1055556},
+{'9', 0xffbfffdf, 0xff6cffe8},
+{'4', 0xfe8c003d, 0x00000060},
+{'l', 0xc0f99998, 0x423aeef0},
+{'8', 0x56092dfc, 0x2b44290d},
+{'9', 0x00030066, 0xffad009f},
+{'l', 0x41122224, 0xc2526668},
+{'4', 0x00000061, 0x0241ff9c},
+{'6', 0x0000ffa5, 0xfd26ff58},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeef1, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'@', 0x000000fd, 0x00003eaa},/*        ý        x-advance: 62.664062 */
+{'M', 0x41c4cccd, 0x41333334},
+{'q', 0xc0599998, 0x40e22224},
+{0, 0xc1100000, 0x414aaaac},
+{'q', 0xc0b33332, 0x40b33334},
+{0, 0xc1622222, 0x40b11110},
+{'9', 0xffffffeb, 0xfff7ffc7},
+{'4', 0xffaf0005, 0x00020019},
+{'8', 0xea540234, 0xba36e720},
+{'l', 0x4088888a, 0xc1066667},
+{'l', 0xc148888a, 0xc28d3334},
+{'l', 0x4149999a, 0x00000000},
+{'l', 0x41022224, 0x42577778},
+{'4', 0xfe5200cc, 0x0000006a},
+{'6', 0x029afeae, 0xfd100045},
+{'l', 0x417aaaa8, 0xc19cccd0},
+{'l', 0x41755558, 0x00000000},
+{'l', 0xc1a33334, 0x419cccd0},
+{'l', 0xc1299998, 0x00000000},
+{'[', 0x002200fd, 0x00000100},/*kerning*/
+{'[', 0x002700fd, 0x00000100},/*kerning*/
+{'[', 0x006600fd, 0x000000dd},/*kerning*/
+{'[', 0x03c000fd, 0x000000bb},/*kerning*/
+{'[', 0x201c00fd, 0x00000100},/*kerning*/
+{'[', 0x201d00fd, 0x00000100},/*kerning*/
+{'@', 0x000000fe, 0x00004c55},/*        þ        x-advance: 76.332031 */
+{'M', 0x420e6667, 0x3fb33334},
+{'9', 0xfffeff9d, 0xffbdff67},
+{'l', 0xc0ceeeee, 0x420b3334},
+{'l', 0xc1422223, 0x00000000},
+{'4', 0xfbef00b4, 0x00000060},
+{'l', 0xc0e22228, 0x4216aaac},
+{'q', 0x410bbbbc, 0xc10eeef0},
+{0, 0x41a5ddde, 0xc10aaaa8},
+{'q', 0x411ddde0, 0x3e4ccc00},
+{0, 0x416eeef0, 0x40c00000},
+{'q', 0x40a22228, 0x40b77770},
+{0, 0x40d11118, 0x41622220},
+{'q', 0x3fbbbbc0, 0x41066668},
+{0, 0x3f199980, 0x4183bbbc},
+{'q', 0xc0400000, 0x41b1999b},
+{0, 0xc1744444, 0x4201dddf},
+{'9', 0x002fffc8, 0x002dff75},
+{'m', 0x40d11110, 0xc2811111},
+{'9', 0xfffeffad, 0x004fff6f},
+{'l', 0xc0c00004, 0x420aaaac},
+{'q', 0x40844448, 0x41177776},
+{0, 0x4169999c, 0x411ccccc},
+{'8', 0xe261013a, 0xae3ce026},
+{'9', 0xffce0015, 0xff9c001c},
+{'l', 0x3e088900, 0xbfaaaac0},
+{'8', 0xa500d605, 0xade2d0fb},
+{'q', 0xc0488890, 0xc08aaab0},
+{0, 0xc1211114, 0xc0911110},
+{'@', 0x000000ff, 0x00003eaa},/*        ÿ        x-advance: 62.664062 */
+{'M', 0x41c4cccd, 0x41333334},
+{'q', 0xc0599998, 0x40e22224},
+{0, 0xc1100000, 0x414aaaac},
+{'q', 0xc0b33332, 0x40b33334},
+{0, 0xc1622222, 0x40b11110},
+{'9', 0xffffffeb, 0xfff7ffc7},
+{'4', 0xffaf0005, 0x00020019},
+{'8', 0xea540234, 0xba36e720},
+{'l', 0x4088888a, 0xc1066667},
+{'l', 0xc148888a, 0xc28d3334},
+{'l', 0x4149999a, 0x00000000},
+{'l', 0x41022224, 0x42577778},
+{'4', 0xfe5200cc, 0x0000006a},
+{'6', 0x029afeae, 0xfccdffe2},
+{'8', 0xd710e800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28ef1800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'m', 0x41deeeef, 0x3e088800},
+{'8', 0xd70fe800, 0xef29ef10},
+{'8', 0x0f290019, 0x29101010},
+{'8', 0x28f01800, 0x10d810f0},
+{'8', 0xf2d800e8, 0xd8f0f1f0},
+{'[', 0x002200ff, 0x00000100},/*kerning*/
+{'[', 0x002700ff, 0x00000100},/*kerning*/
+{'[', 0x006600ff, 0x000000dd},/*kerning*/
+{'[', 0x03c000ff, 0x000000bb},/*kerning*/
+{'[', 0x201c00ff, 0x00000100},/*kerning*/
+{'[', 0x201d00ff, 0x00000100},/*kerning*/
+{'@', 0x00000141, 0x00004755},/*        Ł        x-advance: 71.332031 */
+{'M', 0x427c0001, 0xc1277778},
+{'l', 0xbfeeef00, 0x41277778},
+{'l', 0xc264cccd, 0x00000000},
+{'l', 0x40f33332, 0xc22e6667},
+{'l', 0xc1133334, 0x402eeef0},
+{'l', 0x3fccccd2, 0xc10ccccc},
+{'l', 0x41122223, 0xc0333340},
+{'l', 0x40f77778, 0xc2326667},
+{'l', 0x4148888a, 0x00000000},
+{'l', 0xc0e22224, 0x4221dddf},
+{'l', 0x41900001, 0xc0aeeef0},
+{'l', 0xbfc44440, 0x410ccccc},
+{'l', 0xc1900001, 0x40b11110},
+{'l', 0xc0ceeef0, 0x42151112},
+{'l', 0x4232eef0, 0x00000000},
+{'@', 0x000003c0, 0x00004eee},/*        π        x-advance: 78.929688 */
+{'M', 0x40ccccce, 0xc277bbbd},
+{'l', 0x3fe66668, 0xc1233334},
+{'l', 0x428e0000, 0x00000000},
+{'4', 0x0051fff2, 0x0000ffb0},
+{'l', 0xc0ecccc8, 0x422eaaac},
+{'8', 0x2f051bfe, 0x13281308},
+{'9', 0x00000011, 0xfffb002d},
+{'l', 0xbf2aaa80, 0x41222222},
+{'8', 0x0aba0ade, 0xd1a5ffbd},
+{'9', 0xffd2ffe8, 0xff96ffee},
+{'l', 0x40e66668, 0xc22ddddf},
+{'l', 0xc1ce6667, 0x00000000},
+{'l', 0xc12bbbbe, 0x4277bbbd},
+{'l', 0xc1422222, 0x00000000},
+{'l', 0x412bbbbc, 0xc277bbbd},
+{'l', 0xc12eeeef, 0x00000000},
+{'@', 0x0000201c, 0x00002f77},/*        “        x-advance: 47.464844 */
+{'M', 0x41444445, 0xc28f1112},
+{'l', 0x3f888888, 0xc0e22220},
+{'9', 0xff860012, 0xff370076},
+{'l', 0x40dbbbb8, 0x40a22220},
+{'9', 0x004affc5, 0x0091ffb6},
+{'4', 0x0048fff4, 0x0000ffa2},
+{'m', 0x41a2aaac, 0x00000000},
+{'l', 0x3f888880, 0xc0e22220},
+{'9', 0xff860012, 0xff370076},
+{'l', 0x40dbbbb8, 0x40a22220},
+{'9', 0x004affc5, 0x0091ffb6},
+{'l', 0xbfcccce0, 0x41100000},
+{'l', 0xc13ddddc, 0x00000000},
+{'[', 0x0077201c, 0x000000bb},/*kerning*/
+{'@', 0x0000201d, 0x00003000},/*        ”        x-advance: 48.000000 */
+{'M', 0x42037778, 0xc2ccccce},
+{'l', 0xbf9999a0, 0x40f77780},
+{'9', 0x0079ffed, 0x00c8ff8b},
+{'l', 0xc0e00002, 0xc0a22220},
+{'9', 0xffb3003e, 0xff69004b},
+{'4', 0xffbb000c, 0x0000005f},
+{'m', 0x419e6666, 0x00000000},
+{'l', 0xbf999980, 0x40f77780},
+{'9', 0x0079ffed, 0x00c8ff8b},
+{'l', 0xc0dffffc, 0xc0a22220},
+{'9', 0xffb3003e, 0xff69004b},
+{'l', 0x3fc44440, 0xc10bbbc0},
+{'l', 0x413eeef0, 0x00000000},
+{'[', 0x0077201d, 0x000000bb},/*kerning*/
+{'@', 0x00002022, 0x00002caa},/*        •        x-advance: 44.664062 */
+{'M', 0x412bbbbc, 0xc2411112},
+{'l', 0x3e088880, 0xc0333330},
+{'8', 0xb220d102, 0xe14ee11d},
+{'8', 0x1e48002e, 0x4a1a1d1a},
+{'l', 0xbe088800, 0x40377780},
+{'8', 0x4cdf2efe, 0x1db21de2},
+{'8', 0xe4b800d4, 0xb7e6e4e6},
+{'@', 0x00002026, 0x00005944},/*        …        x-advance: 89.265625 */
+{'M', 0x40733334, 0xc0caaaab},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'m', 0x41e22224, 0x00000000},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'m', 0x41d66666, 0x00000000},
+{'8', 0xd510e600, 0xee2bef11},
+{'8', 0x102a001a, 0x2a101011},
+{'8', 0x2bef1a00, 0x11d611f0},
+{'8', 0xf1d600e7, 0xd6f0f0ef},
+{'@', 0x000020ac, 0x00004a66},/*        €        x-advance: 74.398438 */
+{'M', 0x4276eef0, 0xbf19999a},
+{'q', 0xc0fbbbc0, 0x3ff77778},
+{0, 0xc1777778, 0x3fe66667},
+{'q', 0xc1811112, 0xbe888888},
+{0, 0xc1bc4446, 0xc1333334},
+{'9', 0xffa8ffc5, 0xff2fffd6},
+{'0', 0xbe0b00a0, 0xb80c005c},
+{'4', 0x0000ffa4, 0xffbe000b},
+{'l', 0x41311113, 0x00000000},
+{'q', 0x40622220, 0xc17ddde0},
+{0, 0x41566666, 0xc1d2aaac},
+{'q', 0x411eeef0, 0xc1277778},
+{0, 0x41d9999a, 0xc1255558},
+{'9', 0x0000002f, 0x0010007e},
+{'l', 0xc00cccc0, 0x412ddde0},
+{'q', 0xc0dddde0, 0xc01999a0},
+{0, 0xc15bbbbc, 0xc0222220},
+{'q', 0xc1444448, 0xbe4ccc00},
+{0, 0xc1966668, 0x40f55560},
+{'9', 0x003effcc, 0x0095ffb7},
+{'l', 0x41ca2222, 0x00000000},
+{'l', 0xbfbbbbc0, 0x41055554},
+{'l', 0xc1c66666, 0x00000000},
+{'l', 0xbfcccce0, 0x41111114},
+{'4', 0x000000c6, 0x0042fff5},
+{'l', 0xc1c44445, 0x00000000},
+{'8', 0x650234fa, 0x50283009},
+{'q', 0x40800000, 0x40800000},
+{0, 0x413aaaac, 0x40844444},
+{'q', 0x40caaab0, 0x3e4cccc0},
+{0, 0x4169999c, 0xc0044444},
+{'l', 0x3e888880, 0x412bbbbc},
+{'@', 0x00002122, 0x000052dd},/*        â„¢        x-advance: 82.863281 */
+{'M', 0x42875556, 0xc2751112},
+{'l', 0x408eeef0, 0xc1caaaac},
+{'l', 0xc14eeef0, 0x41ca2224},
+{'l', 0xc05ddde0, 0x3e088800},
+{'l', 0xc0955558, 0xc1d66668},
+{'l', 0xc0977778, 0x41d5dde0},
+{'l', 0xc0bddde0, 0x00000000},
+{'l', 0x40c88888, 0xc20f3334},
+{'l', 0x40e22228, 0x00000000},
+{'l', 0x40955550, 0x41d33334},
+{'l', 0x415ddde0, 0xc1d33334},
+{'4', 0x0000003c, 0x011effce},
+{'6', 0x0000ffd2, 0xfee2ff30},
+{'l', 0xbf800000, 0x40acccd0},
+{'l', 0xc1188888, 0x00000000},
+{'l', 0xc0aaaaac, 0x41f33334},
+{'l', 0xc0bddde0, 0x00000000},
+{'l', 0x40a8888c, 0xc1f33334},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0x3f6eeee0, 0xc0acccd0},
+{'l', 0x41c88889, 0x00000000},
+{'@', 0x00002212, 0x00004bbb},/*        −        x-advance: 75.730469 */
+{'M', 0x42868889, 0xc2562223},
+{'l', 0xbfe66680, 0x41222224},
+{'l', 0xc2584444, 0x00000000},
+{'l', 0x3fe66660, 0xc1222224},
+{'l', 0x42584445, 0x00000000},
+{'@', 0x00002248, 0x00004a99},/*        ≈        x-advance: 74.597656 */
+{'M', 0x41044445, 0xc23e6667},
+{'l', 0x3f888888, 0xc1488888},
+{'q', 0x40eeeef0, 0xc0eaaaa8},
+{0, 0x4186eeef, 0xc0eaaaa8},
+{'8', 0x0b3d0022, 0x1b350b1b},
+{'8', 0x1b340f1a, 0x0b380b19},
+{'8', 0xec4a0028, 0xd13eec22},
+{'l', 0xbfaaaac0, 0x41488888},
+{'q', 0xc0ecccc8, 0x40ecccd0},
+{0, 0xc1808888, 0x40e88888},
+{'8', 0xf7cb00e3, 0xe6cbf7e8},
+{'8', 0xe4c8efe3, 0xf5c4f5e6},
+{'9', 0x0000ffbc, 0x0043ff74},
+{'m', 0xc09bbbbf, 0x41de6667},
+{'l', 0x3f888888, 0xc148888a},
+{'q', 0x40eaaaab, 0xc0e88888},
+{0, 0x41866667, 0xc0e88888},
+{'8', 0x0b3c0021, 0x1b360b1b},
+{'8', 0x1a340f1b, 0x0b380b19},
+{'8', 0xec4a0028, 0xd13dec22},
+{'l', 0xbfaaaac0, 0x41499998},
+{'q', 0xc0e88880, 0x40ecccd0},
+{0, 0xc1808888, 0x40e8888c},
+{'8', 0xf6c700e1, 0xe5ccf5e7},
+{'8', 0xe5cbf0e5, 0xf5c4f5e6},
+{'q', 0xc10aaaab, 0x3e088880},
+{0, 0xc18c4445, 0x41077778},
+{'@', 0x00002423, 0x00005666},/*        ␣        x-advance: 86.398438 */
+{'M', 0xbe088889, 0xc1155556},
+{'l', 0x41244445, 0x00000000},
+{'l', 0xc05ddde0, 0x41a00000},
+{'l', 0x425e2223, 0x35800000},
+{'l', 0x405ddde0, 0xc1a00000},
+{'l', 0x41255558, 0xb5800000},
+{'l', 0xc0a88890, 0x41f11112},
+{'l', 0xc2984445, 0x00000000},
+{'l', 0x40a8888c, 0xc1f11112},
+{'@', 0x0000fb00, 0x00005299},/*        ff        x-advance: 82.597656 */
+{'M', 0x42373334, 0xc27aaaac},
+{'l', 0xc16ddde0, 0x00000000},
+{'l', 0xc12dddde, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fb33340, 0xc12eeef0},
+{0, 0x41022224, 0xc18ccccc},
+{'q', 0x40d9999c, 0xc0d77780},
+{0, 0x41919999, 0xc0d33340},
+{'9', 0x00000018, 0x00080045},
+{'l', 0xbfbbbbc0, 0x41222220},
+{'8', 0xfacdfbe5, 0x20ae00cd},
+{'9', 0x001fffe2, 0x0051ffdb},
+{'4', 0x0039fff8, 0x00000076},
+{'6', 0x004bfff3, 0x0000011f},
+{'l', 0xc16ddde0, 0x00000000},
+{'l', 0xc12ddddc, 0x427aaaac},
+{'l', 0xc1411114, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fb33340, 0xc12eeef0},
+{0, 0x41022224, 0xc18ccccc},
+{'q', 0x40d99990, 0xc0d77780},
+{0, 0x41919998, 0xc0d33340},
+{'9', 0x00000018, 0x00080045},
+{'l', 0xbfbbbbc0, 0x41222220},
+{'8', 0xfacdfbe5, 0x20ae00cd},
+{'9', 0x001fffe2, 0x0051ffdb},
+{'l', 0xbf888880, 0x40e66660},
+{'l', 0x416dddd8, 0x00000000},
+{'l', 0xbfd55540, 0x41177778},
+{'@', 0x0000fb01, 0x00004966},/*        fi        x-advance: 73.398438 */
+{'M', 0x422d5556, 0xc27aaaac},
+{'l', 0xc1644446, 0x00000000},
+{'l', 0xc12dddde, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50d00a7, 0xcf060058},
+{'q', 0x3fd55560, 0xc13eeef0},
+{0, 0x41155556, 0xc1966668},
+{'q', 0x40f7777c, 0xc0dddde0},
+{0, 0x419f7779, 0xc0d77780},
+{'8', 0x0b4a0125, 0x15470924},
+{'l', 0xc03bbba0, 0x41288888},
+{'q', 0xc0fddde8, 0xc0666680},
+{0, 0xc1700004, 0xc0666680},
+{'9', 0xffffff89, 0x0071ff75},
+{'4', 0x0035fff8, 0x00000072},
+{'6', 0x004bfff3, 0xffb500ca},
+{'l', 0xc148888c, 0x42904445},
+{'l', 0xc1411110, 0x00000000},
+{'l', 0x41488888, 0xc2904445},
+{'l', 0x41411114, 0x00000000},
+{'@', 0x0000fb02, 0x00004b33},/*        fl        x-advance: 75.199219 */
+{'M', 0x42373334, 0xc27aaaac},
+{'l', 0xc16ddde0, 0x00000000},
+{'l', 0xc12dddde, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fbbbbc0, 0xc1344448},
+{0, 0x4109999a, 0xc18eeef0},
+{'q', 0x40e44448, 0xc0d33330},
+{0, 0x4195ddde, 0xc0ccccd0},
+{'9', 0x00010033, 0x000c0066},
+{'l', 0x41511110, 0x402eef00},
+{'4', 0x031dff79, 0x0000ffa0},
+{'l', 0x41800002, 0xc2b82223},
+{'8', 0xf59cf5bd, 0x1dac00cc},
+{'9', 0x001dffe0, 0x0050ffd8},
+{'l', 0xbf999980, 0x40f55550},
+{'l', 0x416eeef0, 0x00000000},
+{'l', 0xbfd55560, 0x41177778},
+{'@', 0x0000fb03, 0x00007111},/*        ffi        x-advance: 113.066406 */
+{'M', 0x42377778, 0x00000000},
+{'l', 0x412ddde0, 0xc27aaaac},
+{'l', 0xc1cddddf, 0x00000000},
+{'l', 0xc12eeef0, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fb33340, 0xc12ddde0},
+{0, 0x41022224, 0xc18d5554},
+{'q', 0x40d9999c, 0xc0d999a0},
+{0, 0x41919999, 0xc0d55560},
+{'9', 0x00000019, 0x00090045},
+{'l', 0xbfbbbbc0, 0x41233338},
+{'8', 0xfacdfbe5, 0x1eb000ce},
+{'9', 0x001dffe3, 0x004cffda},
+{'4', 0x0040fff6, 0x000000ce},
+{'l', 0x3f5dde00, 0xc0c88880},
+{'q', 0x3fccccc0, 0xc13ddde0},
+{0, 0x41144440, 0xc195dde0},
+{'q', 0x40f55560, 0xc0dddde0},
+{0, 0x419eeef0, 0xc0d999a0},
+{'8', 0x0a4a0025, 0x15480a24},
+{'l', 0xc03bbbc0, 0x41288888},
+{'q', 0xc0f99990, 0xc0622220},
+{0, 0xc1700000, 0xc0622220},
+{'9', 0xffffff8a, 0x0070ff76},
+{'l', 0xbf800000, 0x40d55550},
+{'l', 0x41655558, 0x00000000},
+{'l', 0xbfd55540, 0x41177778},
+{'4', 0x0000ff8e, 0x01f5ffaa},
+{'6', 0x0000ffa0, 0xfdbf01f3},
+{'l', 0xc1488888, 0x42904445},
+{'l', 0xc1411110, 0x00000000},
+{'l', 0x41488888, 0xc2904445},
+{'l', 0x41411110, 0x00000000},
+{'@', 0x0000fb04, 0x00007111},/*        ffl        x-advance: 113.066406 */
+{'M', 0x42377778, 0x00000000},
+{'l', 0x412ddde0, 0xc27aaaac},
+{'l', 0xc1cddddf, 0x00000000},
+{'l', 0xc12eeef0, 0x427aaaac},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fbbbbc0, 0xc12ddde0},
+{0, 0x41044446, 0xc18d5554},
+{'q', 0x40d99998, 0xc0d999a0},
+{0, 0x41911112, 0xc0d55560},
+{'9', 0x00000018, 0x00090044},
+{'l', 0xbfbbbbc0, 0x41233338},
+{'8', 0xfaccfbe5, 0x1db000ce},
+{'9', 0x001effe3, 0x004dffdb},
+{'4', 0x0040fff6, 0x000000ce},
+{'l', 0x3f8888a0, 0xc0f33330},
+{'q', 0x3fc44440, 0xc1344448},
+{0, 0x41088884, 0xc18eeef0},
+{'q', 0x40e22230, 0xc0d33330},
+{0, 0x4195dde0, 0xc0ccccd0},
+{'9', 0x00010033, 0x000c0069},
+{'l', 0x414cccd0, 0x402aaac0},
+{'4', 0x031dff79, 0x0000ffa0},
+{'l', 0x41811110, 0xc2b80001},
+{'8', 0xf59bf5bd, 0x1dac00cc},
+{'9', 0x001dffe0, 0x0050ffd8},
+{'l', 0xbf911140, 0x40f55550},
+{'l', 0x416eeef0, 0x00000000},
+{'l', 0xbfd55540, 0x41177778},
+{'l', 0xc16ddde0, 0x00000000},
+{'l', 0xc12ddddc, 0x427aaaac},
+{'l', 0xc1411114, 0x00000000},
+{'@', 0x0000fb05, 0x00005199},/*        ſt        x-advance: 81.597656 */
+{'M', 0x423b3334, 0xc2d00001},
+{'9', 0x0002005d, 0x003700cd},
+{'l', 0xc0822230, 0x41c77778},
+{'l', 0x41511118, 0x00000000},
+{'4', 0x004bfff3, 0x0000ff98},
+{'l', 0xc0f33330, 0x42337778},
+{'8', 0x2e051bfe, 0x13271308},
+{'9', 0x00000012, 0xfffb002c},
+{'l', 0xbf3bbc00, 0x41233334},
+{'8', 0x09bb09df, 0xd1a6ffbe},
+{'9', 0xffd2ffe8, 0xff97ffee},
+{'l', 0x40eaaaa8, 0xc232eef0},
+{'l', 0xc14ccccc, 0x00000000},
+{'4', 0xffb5000d, 0x00000066},
+{'l', 0x40599990, 0xc19a2220},
+{'q', 0xc0933330, 0xc01999a0},
+{0, 0xc13bbbbc, 0xc0222240},
+{'9', 0xffffffa0, 0x007aff8b},
+{'l', 0xc1566666, 0x429d5556},
+{'l', 0xc1411112, 0x00000000},
+{'l', 0x412eeef0, 0xc27aaaac},
+{'0', 0xb50c00a8, 0xc4080058},
+{'q', 0x3fb33340, 0xc1288888},
+{0, 0x40f55558, 0xc18bbbbc},
+{'q', 0x40caaaac, 0xc0dddde0},
+{0, 0x418c4445, 0xc0d999a0},
+};
+#define ctx_font_Roboto_Italic_name "Roboto Italic"
+#endif
diff --git a/usermodule/uctx/fonts/Roboto-Regular.h b/usermodule/uctx/fonts/Roboto-Regular.h
new file mode 100644
index 0000000000000000000000000000000000000000..9fbc6ed0ec68fd1e17a6ab4b8d7cb8908c64bbef
--- /dev/null
+++ b/usermodule/uctx/fonts/Roboto-Regular.h
@@ -0,0 +1,4848 @@
+#ifndef CTX_FONT_Roboto_Regular
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™−≈␣fffiflffifflſt  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Roboto_Regular[]={
+{15, 0x0000a008, 0x000012e5},/* length:4837 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x00000008, 0x00000001},/* Roboto*/
+{32, 0x6f626f52, 0x00006f74},
+{')', 0x00000008, 0x00000001},
+{'(', 0x0000004b, 0x00000009},/* Apache Licence, Version 2.0
+                                Copyright 2014 Christian Robertson - Apache 2*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x636e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x43203431},
+{'h', 0x74736972, 0x206e6169},
+{'R', 0x7265626f, 0x6e6f7374},
+{32, 0x7041202d, 0x65686361},
+{32, 0x00000032, 0x00000000},
+{')', 0x0000004b, 0x00000009},
+{'@', 0x00000020, 0x000021dd},/*                 x-advance: 33.863281 */
+{'@', 0x00000021, 0x00002333},/*        !        x-advance: 35.199219 */
+{'M', 0x41c08889, 0xc2c22223},
+{'l', 0xbf5ddde0, 0x428b5556},
+{'4', 0x0000ffa7, 0xfdd3fff9},
+{'6', 0x00000067, 0x02d6ff96},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x00000022, 0x00002bbb},/*        "        x-advance: 43.730469 */
+{'M', 0x41944445, 0xc2baaaab},
+{'l', 0xc0000000, 0x41be6664},
+{'l', 0xc0ecccce, 0x00000000},
+{'4', 0xfefa0000, 0x0000004b},
+{'6', 0x00480000, 0x00000090},
+{'l', 0xc0000000, 0x41be6664},
+{'l', 0xc0ecccd0, 0x00000000},
+{'l', 0x00000000, 0xc2037778},
+{'l', 0x41166668, 0x00000000},
+{'l', 0x00000000, 0x41111118},
+{'[', 0x00770022, 0x000000bb},/*kerning*/
+{'@', 0x00000023, 0x00005411},/*        #        x-advance: 84.066406 */
+{'M', 0x4236eef0, 0x00000000},
+{'l', 0x40aaaaa8, 0xc1daaaab},
+{'l', 0xc18cccce, 0x00000000},
+{'l', 0xc0aaaaa8, 0x41daaaab},
+{'l', 0xc118888a, 0x00000000},
+{'l', 0x40aaaaac, 0xc1daaaab},
+{'l', 0xc1800000, 0x00000000},
+{'l', 0xb5000000, 0xc1133336},
+{'l', 0x418e6667, 0x00000000},
+{'l', 0x40911110, 0xc1bc4444},
+{'l', 0xc18a2222, 0x00000000},
+{'l', 0xb5800000, 0xc1144444},
+{'l', 0x4198888a, 0x00000000},
+{'l', 0x40acccc8, 0xc1dddde0},
+{'l', 0x4119999c, 0x00000000},
+{'l', 0xc0acccd0, 0x41dddde0},
+{'l', 0x418cccce, 0x00000000},
+{'l', 0x40acccd0, 0xc1dddde0},
+{'l', 0x41188888, 0x00000000},
+{'l', 0xc0acccd0, 0x41dddde0},
+{'l', 0x41588888, 0x00000000},
+{'l', 0x00000000, 0x41144444},
+{'l', 0xc1755558, 0x00000000},
+{'l', 0xc0933330, 0x41bc4444},
+{'l', 0x416eeef0, 0x00000000},
+{'l', 0x00000000, 0x41133336},
+{'4', 0x0000ff7b, 0x00daffd6},
+{'6', 0x0000ffb4, 0xfedcffad},
+{'l', 0x418ccccc, 0x00000000},
+{'l', 0x40933338, 0xc1bc4444},
+{'l', 0xc18cccce, 0x00000000},
+{'l', 0xc0933330, 0x41bc4444},
+{'@', 0x00000024, 0x00004cbb},/*        $        x-advance: 76.730469 */
+{'M', 0x428aeeef, 0xc1c91112},
+{'q', 0x00000000, 0x4139999b},
+{0, 0xc0dffff8, 0x4192aaac},
+{'9', 0x0035ffc9, 0x003fff6b},
+{'4', 0x00650000, 0x0000ffb1},
+{'l', 0x00000000, 0xc14aaaac},
+{'q', 0xc1244446, 0xbf888887},
+{0, 0xc1933334, 0xc0f9999a},
+{'9', 0xffcaffc0, 0xff50ffc0},
+{'l', 0x41466666, 0x00000000},
+{'q', 0x00000000, 0x41344446},
+{0, 0x40c00004, 0x41744446},
+{'8', 0x1f641f30, 0xdf6e0047},
+{'8', 0xa527de27, 0xadddd000},
+{'q', 0xc08aaaa8, 0xc08cccd0},
+{0, 0xc1700000, 0xc0f99998},
+{'q', 0xc149999a, 0xc0800000},
+{0, 0xc19ccccd, 0xc129999c},
+{'q', 0xc0e00000, 0xc0d33330},
+{0, 0xc0e00000, 0xc1919998},
+{'q', 0x00000000, 0xc1311118},
+{0, 0x40cccccc, 0xc18f7778},
+{'9', 0xffc90033, 0xffbe008b},
+{'4', 0xff8c0000, 0x00000050},
+{'l', 0x00000000, 0x416aaaa8},
+{'q', 0x41333334, 0x3fbbbbc0},
+{0, 0x418b3334, 0x41166668},
+{'9', 0x003e0032, 0x00ac0032},
+{'l', 0xc1444448, 0x00000000},
+{'q', 0x00000000, 0xc10eeef0},
+{0, 0xc0888888, 0xc16aaaa8},
+{'8', 0xd29ed2de, 0x229d00bd},
+{'8', 0x59e122e1, 0x531f3200},
+{'q', 0x407bbbc0, 0x40822220},
+{0, 0x41844444, 0x41055554},
+{'q', 0x414aaaac, 0x40888890},
+{0, 0x4198888a, 0x412aaaac},
+{'q', 0x40ceeee8, 0x40caaab0},
+{0, 0x40ceeee8, 0x418d5556},
+{'@', 0x00000025, 0x00006400},/*        %        x-advance: 100.000000 */
+{'M', 0x40e00001, 0xc29ccccd},
+{'q', 0x00000000, 0xc1044448},
+{0, 0x40aaaaab, 0xc1622228},
+{'q', 0x40aaaaac, 0xc0bddde0},
+{0, 0x4168888a, 0xc0bddde0},
+{'q', 0x41155554, 0x00000000},
+{0, 0x41699998, 0x40bddde0},
+{'9', 0x002e002a, 0x0071002a},
+{'l', 0x00000000, 0x40a44440},
+{'q', 0x00000000, 0x41022220},
+{0, 0xc0a88888, 0x41611110},
+{'q', 0xc0a88888, 0x40bbbbc0},
+{0, 0xc168888a, 0x40bbbbc0},
+{'q', 0xc1144446, 0x00000000},
+{0, 0xc16aaaac, 0xc0bbbbc0},
+{'9', 0xffd1ffd6, 0xff90ffd6},
+{'6', 0xffd70000, 0x0029004a},
+{'8', 0x42142400, 0x1d411d15},
+{'8', 0xe43f002a, 0xbe14e314},
+{'l', 0x00000000, 0xc0a44440},
+{'8', 0xbeebdb00, 0xe3c0e3ec},
+{'8', 0x1dc000d6, 0x42ec1dec},
+{'6', 0x00290000, 0xffb001e7},
+{'l', 0xc23d999a, 0x4297bbbc},
+{'4', 0xffddffc9, 0xfda2017b},
+{'6', 0x00230037, 0x01dbff49},
+{'q', 0x00000000, 0xc1033330},
+{0, 0x40aaaaa8, 0xc1611110},
+{'q', 0x40aaaaa8, 0xc0bddde0},
+{0, 0x4168888c, 0xc0bddde0},
+{'q', 0x41155558, 0x00000000},
+{0, 0x41699998, 0x40bddde0},
+{'9', 0x002e002a, 0x0070002a},
+{'l', 0x00000000, 0x40a66668},
+{'q', 0x00000000, 0x41033333},
+{0, 0xc0a88890, 0x41622222},
+{'q', 0xc0a88880, 0x40bbbbbd},
+{0, 0xc1688888, 0x40bbbbbd},
+{'q', 0xc1155558, 0x00000000},
+{0, 0xc16aaaac, 0xc0bbbbbc},
+{'9', 0xffd1ffd6, 0xff8fffd6},
+{'6', 0xffd70000, 0x0029004a},
+{'8', 0x42142500, 0x1d411d15},
+{'8', 0xe440002b, 0xbd14e314},
+{'l', 0x00000000, 0xc0a66668},
+{'8', 0xbeebdb00, 0xe3c0e3ec},
+{'8', 0x1dc000d6, 0x42ec1cec},
+{'l', 0x00000000, 0x40a66668},
+{'@', 0x00000026, 0x000054ee},/*        &        x-advance: 84.929688 */
+{'M', 0x428b5556, 0x00000000},
+{'l', 0xc0ccccd0, 0xc0f55556},
+{'8', 0x35a323d8, 0x129512cb},
+{'q', 0xc168888a, 0xb4000000},
+{0, 0xc1b77778, 0xc0f77779},
+{'q', 0xc1066667, 0xc0f77778},
+{0, 0xc1066667, 0xc19dddde},
+{'q', 0x00000000, 0xc10aaaac},
+{0, 0x40a66668, 0xc1699998},
+{'8', 0xa26cd02a, 0xa6c0d0d8},
+{'q', 0xc03bbbbc, 0xc0a88890},
+{0, 0xc03bbbbc, 0xc1300000},
+{'q', 0x00000000, 0xc1355558},
+{0, 0x40d55556, 0xc18b3334},
+{'q', 0x40d55558, 0xc0c44440},
+{0, 0x418d5557, 0xc0c44440},
+{'q', 0x412bbbbc, 0x00000000},
+{0, 0x4186eeee, 0x40c44440},
+{'q', 0x40c66668, 0x40c22220},
+{0, 0x40c66668, 0x41655558},
+{'8', 0x5ee43800, 0x4ab426e4},
+{'4', 0x002bffc6, 0x00ce00ac},
+{'9', 0xffbb0024, 0xff660024},
+{'l', 0x41311110, 0x00000000},
+{'9', 0x00880000, 0x00e1ffbf},
+{'4', 0x0084006e, 0x0000ff8a},
+{'m', 0xc22a6668, 0xc2968889},
+{'9', 0x00310000, 0x0080003e},
+{'l', 0x40e44448, 0xc0a22220},
+{'8', 0xd233e823, 0xc311ea11},
+{'8', 0xc7e8e100, 0xe6bbe6e8},
+{'8', 0x1fba00d2, 0x49e81ee8},
+{'m', 0xc0fddddc, 0x42448889},
+{'q', 0x00000000, 0x40e22224},
+{0, 0x40955554, 0x41433334},
+{'q', 0x40955558, 0x40a44446},
+{0, 0x41655556, 0x40a44446},
+{'9', 0x0000004e, 0xffc5008f},
+{'4', 0xff1eff43, 0x0010ffea},
+{'8', 0x4dba2ac7, 0x34f423f4},
+{'@', 0x00000027, 0x000017dd},/*        '        x-advance: 23.863281 */
+{'M', 0x41877778, 0xc2ccccce},
+{'l', 0x00000000, 0x40eaaab0},
+{'l', 0xbfb33338, 0x41c44444},
+{'l', 0xc109999a, 0x00000000},
+{'l', 0x3d8888c0, 0xc1feeef0},
+{'l', 0x411eeef0, 0x00000000},
+{'[', 0x00770027, 0x000000bb},/*kerning*/
+{'@', 0x00000028, 0x00002ebb},/*        (        x-advance: 46.730469 */
+{'M', 0x410eeeef, 0xc21dddde},
+{'q', 0x00000000, 0xc19aaaac},
+{0, 0x40b11112, 0xc2073334},
+{'q', 0x40b11114, 0xc1677778},
+{0, 0x41522224, 0xc1bccccc},
+{'9', 0xffb7003c, 0xff9b006f},
+{'l', 0x40266660, 0x41022228},
+{'q', 0xc0fbbbb8, 0x40bdddd0},
+{0, 0xc1766666, 0x41a99998},
+{'q', 0xc0eeeef0, 0x41733338},
+{0, 0xc0eeeef0, 0x42262223},
+{'q', 0x00000000, 0x41caaaab},
+{0, 0x40eeeef0, 0x4222eeef},
+{'9', 0x007b003c, 0x00ae007b},
+{'l', 0xc0266660, 0x40eeeef0},
+{'q', 0xc0caaab0, 0xc05ddde0},
+{0, 0xc15eeef0, 0xc149999c},
+{'q', 0xc0f33334, 0xc1122222},
+{0, 0xc1522224, 0xc1bc4444},
+{'q', 0xc0b11112, 0xc167777a},
+{0, 0xc0b11112, 0xc20aaaab},
+{'[', 0x00560028, 0x00000155},/*kerning*/
+{'[', 0x00570028, 0x00000133},/*kerning*/
+{'[', 0x00590028, 0x00000177},/*kerning*/
+{'[', 0x00dd0028, 0x00000177},/*kerning*/
+{'@', 0x00000029, 0x00002f88},/*        )        x-advance: 47.531250 */
+{'M', 0x42173334, 0xc21b3334},
+{'q', 0x00000000, 0x419bbbbd},
+{0, 0xc0b11110, 0x4207bbbc},
+{'q', 0xc0b11114, 0x4167777a},
+{0, 0xc1533336, 0x41bcccce},
+{'9', 0x0049ffc4, 0x0064ff92},
+{'l', 0xc0266669, 0xc0eeeef0},
+{'q', 0x40f9999a, 0xc0bddde0},
+{0, 0x41755556, 0xc1ac4445},
+{'q', 0x40f11110, 0xc179999b},
+{0, 0x40f11110, 0xc227bbbc},
+{'q', 0x00000000, 0xc186eef2},
+{0, 0xc06eeef0, 0xc1eb3334},
+{'q', 0xc06eeef0, 0xc14999a0},
+{0, 0xc1111111, 0xc1a6eef0},
+{'9', 0xffbeffd6, 0xff9fffb0},
+{'l', 0x40266666, 0xc0f11110},
+{'q', 0x40c88889, 0x40622220},
+{0, 0x415dddde, 0x414aaab0},
+{'q', 0x40f55558, 0x41122220},
+{0, 0x41533336, 0x41bccccc},
+{'q', 0x40b11110, 0x41666668},
+{0, 0x40b11110, 0x4209ddde},
+{'@', 0x0000002a, 0x00003acc},/*        *        x-advance: 58.796875 */
+{'M', 0x4109999a, 0xc23ccccd},
+{'l', 0x41566668, 0xc1933336},
+{'l', 0xc1a11112, 0xc0c00000},
+{'l', 0x4048888a, 0xc1200000},
+{'l', 0x41a11112, 0x40ecccd0},
+{'l', 0xbf1999a0, 0xc1b77778},
+{'l', 0x41222222, 0x00000000},
+{'l', 0xbf2aaac0, 0x41baaaac},
+{'l', 0x419eeef0, 0xc0ecccd0},
+{'l', 0x40444450, 0x41233338},
+{'l', 0xc1a3bbbe, 0x40c22220},
+{'l', 0x41522224, 0x41908888},
+{'l', 0xc1044444, 0x40c66668},
+{'l', 0xc1455556, 0xc199999a},
+{'l', 0xc1411112, 0x4195ddde},
+{'l', 0xc1055556, 0xc0c22220},
+{'@', 0x0000002b, 0x00004d77},/*        +        x-advance: 77.464844 */
+{'M', 0x428f7778, 0xc221ddde},
+{'l', 0xc1d8888a, 0x00000000},
+{'l', 0x00000000, 0x41f5ddde},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc1f5ddde},
+{'l', 0xc1d91112, 0x00000000},
+{'l', 0xb5000000, 0xc139999c},
+{'l', 0x41d91112, 0x00000000},
+{'l', 0x00000000, 0xc1e2aaaa},
+{'l', 0x41455554, 0x00000000},
+{'l', 0x00000000, 0x41e2aaaa},
+{'l', 0x41d8888a, 0x00000000},
+{'l', 0x00000000, 0x4139999c},
+{'@', 0x0000002c, 0x00001add},/*        ,        x-advance: 26.863281 */
+{'M', 0x41a4cccd, 0xc16aaaab},
+{'l', 0x00000000, 0x411eeeef},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e00000, 0xc09bbbbe},
+{'9', 0xffb90033, 0xff6e0034},
+{'l', 0x00000000, 0xc12eeef0},
+{'l', 0x41411111, 0x00000000},
+{'@', 0x0000002d, 0x000025bb},/*        -        x-advance: 37.730469 */
+{'M', 0x420c4445, 0xc2395556},
+{'l', 0x00000000, 0x41222224},
+{'l', 0xc2022223, 0x00000000},
+{'l', 0x35400000, 0xc1222224},
+{'l', 0x42022223, 0x00000000},
+{'@', 0x0000002e, 0x00002400},/*        .        x-advance: 36.000000 */
+{'M', 0x4119999a, 0xc0d11112},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x0000002f, 0x00003855},/*        /        x-advance: 56.332031 */
+{'M', 0x42515556, 0xc2c22223},
+{'l', 0xc221ddde, 0x42d2ccce},
+{'l', 0xc129999c, 0xb6000000},
+{'l', 0x42222223, 0xc2d2ccce},
+{'l', 0x41288888, 0x00000000},
+{'@', 0x00000030, 0x00004cbb},/*        0        x-advance: 76.730469 */
+{'M', 0x428a0000, 0xc225ddde},
+{'q', 0x00000000, 0x41beeeef},
+{0, 0xc1044440, 0x42055555},
+{'q', 0xc1033334, 0x41177779},
+{0, 0xc1b2aaac, 0x41177779},
+{'q', 0xc15bbbbc, 0x34c00000},
+{0, 0xc1b11111, 0xc1133334},
+{'9', 0xffb7ffbe, 0xff00ffbc},
+{'l', 0x00000000, 0xc182aaac},
+{'q', 0x00000000, 0xc1be6668},
+{0, 0x41055555, 0xc203bbbc},
+{'q', 0x41055556, 0xc1133330},
+{0, 0x41b22224, 0xc1133330},
+{'q', 0x415eeef0, 0x00000000},
+{0, 0x41b1999a, 0x410eeee8},
+{'9', 0x00460042, 0x00fd0044},
+{'6', 0x00820000, 0xff7aff9d},
+{'q', 0x00000000, 0xc1833334},
+{0, 0xc0955558, 0xc1b9999c},
+{'8', 0xca93cadb, 0x349500bb},
+{'9', 0x0034ffdb, 0x00b3ffda},
+{'l', 0x00000000, 0x419e6668},
+{'q', 0x00000000, 0x41822222},
+{0, 0x40977778, 0x41bbbbbc},
+{'8', 0x396c3926, 0xc86c0048},
+{'q', 0x40933338, 0xc0e44446},
+{0, 0x40955558, 0xc1b88888},
+{'l', 0x00000000, 0xc19b3334},
+{'@', 0x00000031, 0x00004cbb},/*        1        x-advance: 76.730469 */
+{'M', 0x42426667, 0xc2c33334},
+{'l', 0x00000000, 0x42c33334},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc2a46667},
+{'l', 0xc1c6eef0, 0x41111110},
+{'l', 0xb5800000, 0xc1322220},
+{'l', 0x420d1111, 0xc1555558},
+{'l', 0x3ff77780, 0x00000000},
+{'@', 0x00000032, 0x00004cbb},/*        2        x-advance: 76.730469 */
+{'M', 0x428f5556, 0xc1222223},
+{'l', 0x00000000, 0x41222223},
+{'4', 0x0000fe04, 0xffba0000},
+{'l', 0x4203bbbc, 0xc212aaac},
+{'q', 0x41022220, 0xc1133330},
+{0, 0x412eeef0, 0xc1699994},
+{'8', 0xaa16d516, 0x9fddc700},
+{'q', 0xc08cccc8, 0xc0a22220},
+{0, 0xc1477778, 0xc0a22220},
+{'q', 0xc11bbbbc, 0x00000000},
+{0, 0xc1688888, 0x40b11110},
+{'9', 0x002cffda, 0x0071ffda},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x35000000, 0xc1444440},
+{0, 0x41011112, 0xc1a88888},
+{'q', 0x41011112, 0xc10cccc8},
+{0, 0x41bccccd, 0xc10cccc8},
+{'q', 0x415bbbbc, 0x00000000},
+{0, 0x41abbbbc, 0x40e44440},
+{'q', 0x40f999a0, 0x40e44440},
+{0, 0x40f999a0, 0x41966668},
+{'q', 0x00000000, 0x41088884},
+{0, 0xc0a88888, 0x41899998},
+{'9', 0x0044ffd6, 0x0087ff99},
+{'l', 0xc1d00001, 0x41e1999a},
+{'l', 0x4242aaac, 0x35800000},
+{'@', 0x00000033, 0x00004cbb},/*        3        x-advance: 76.730469 */
+{'M', 0x41d08889, 0xc231ddde},
+{'4', 0xffaf0000, 0x00000048},
+{'q', 0x41188888, 0xbd888800},
+{0, 0x41633334, 0xc0999998},
+{'q', 0x40955558, 0xc0977780},
+{0, 0x40955558, 0xc13cccd0},
+{'q', 0x00000000, 0xc1888888},
+{0, 0xc1877778, 0xc1888888},
+{'8', 0x249b00c2, 0x60da23da},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x35000000, 0xc1322220},
+{0, 0x41033334, 0xc1977778},
+{'q', 0x41044444, 0xc0f99990},
+{0, 0x41addddf, 0xc0f99990},
+{'q', 0x41522220, 0x00000000},
+{0, 0x41a9999a, 0x40e00000},
+{'q', 0x41022220, 0x40ddddd0},
+{0, 0x41022220, 0x41a3bbbc},
+{'8', 0x5ce32b00, 0x4ca431e4},
+{'8', 0x4d69194d, 0x691c341c},
+{'q', 0x00000000, 0x4159999a},
+{0, 0xc10ccccc, 0x41a80000},
+{'q', 0xc10ccccc, 0x40eccccf},
+{0, 0xc1af7778, 0x40eccccf},
+{'q', 0xc14aaaac, 0xb4000000},
+{0, 0xc1adddde, 0xc0e00001},
+{'9', 0xffc8ffb8, 0xff60ffb8},
+{'l', 0x41455556, 0x00000000},
+{'8', 0x62273d00, 0x246c2428},
+{'8', 0xdd6b0043, 0x9427dd27},
+{'q', 0x00000000, 0xc1111112},
+{0, 0xc0b33338, 0xc1555556},
+{'q', 0xc0b33330, 0xc08aaaa8},
+{0, 0xc1700000, 0xc08aaaa8},
+{'l', 0xc10cccce, 0x00000000},
+{'@', 0x00000034, 0x00004cbb},/*        4        x-advance: 76.730469 */
+{'M', 0x40622223, 0xc1ee6667},
+{'l', 0x422ddddf, 0xc2868889},
+{'l', 0x41522220, 0x00000000},
+{'l', 0x00000000, 0x4280ccce},
+{'l', 0x4158888c, 0xb6800000},
+{'l', 0x00000000, 0x41222222},
+{'l', 0xc158888c, 0x00000000},
+{'l', 0x00000000, 0x41b44445},
+{'l', 0xc1455554, 0x00000000},
+{'4', 0xff4c0000, 0x0000fe9e},
+{'6', 0xffc60000, 0xffea0070},
+{'l', 0x41f22223, 0x00000000},
+{'l', 0x00000000, 0xc23eaaab},
+{'l', 0xbfc44440, 0x402eeee0},
+{'l', 0xc1e5dddf, 0x4233bbbd},
+{'@', 0x00000035, 0x00004cbb},/*        5        x-advance: 76.730469 */
+{'M', 0x41bd5556, 0xc238cccd},
+{'l', 0xc11dddde, 0xc0222230},
+{'l', 0x409bbbbc, 0xc2415556},
+{'l', 0x42473333, 0x00000000},
+{'4', 0x005b0000, 0x0000fec6},
+{'l', 0xc03bbbc0, 0x41d33334},
+{'q', 0x40eaaab0, 0xc0866668},
+{0, 0x4181999a, 0xc0866668},
+{'q', 0x41566668, 0x00000000},
+{0, 0x41a91112, 0x410ddde0},
+{'q', 0x40f99998, 0x410ccccc},
+{0, 0x40f99998, 0x41bd5556},
+{'q', 0x00000000, 0x415eeef0},
+{0, 0xc0f33330, 0x41b91112},
+{'q', 0xc0f33338, 0x41122221},
+{0, 0xc1b91112, 0x41122221},
+{'q', 0xc13cccce, 0x34c00000},
+{0, 0xc1a33334, 0xc0d33333},
+{'9', 0xffcbffbc, 0xff5effb1},
+{'l', 0x413bbbbd, 0x00000000},
+{'q', 0x40155550, 0x4185ddde},
+{0, 0x4194cccd, 0x4185ddde},
+{'q', 0x410bbbbc, 0x35800000},
+{0, 0x41588888, 0xc0bdddde},
+{'q', 0x409999a0, 0xc0bdddde},
+{0, 0x409999a0, 0xc1808888},
+{'q', 0x00000000, 0xc1122224},
+{0, 0xc0a22228, 0xc1755558},
+{'q', 0xc0a00000, 0xc0c88888},
+{0, 0xc1655554, 0xc0c88888},
+{'8', 0x0db500cf, 0x24cd0de7},
+{'@', 0x00000036, 0x00004cbb},/*        6        x-advance: 76.730469 */
+{'M', 0x428c6667, 0xc1fd5556},
+{'q', 0x00000000, 0x415cccce},
+{0, 0xc0f77778, 0x41bb3334},
+{'q', 0xc0f55558, 0x41199999},
+{0, 0xc1b33334, 0x41199999},
+{'q', 0xc1277778, 0x34c00000},
+{0, 0xc18b3334, 0xc0b11111},
+{'q', 0xc0ddddde, 0xc0b33333},
+{0, 0xc1266667, 0xc1622222},
+{'9', 0xffbcffe5, 0xff74ffe5},
+{'l', 0x00000000, 0xc0b999a0},
+{'q', 0x00000000, 0xc15aaaa8},
+{0, 0x40733334, 0xc1d33334},
+{'q', 0x4077777c, 0xc14bbbb8},
+{0, 0x415eeef1, 0xc1a6eef0},
+{'9', 0xffbf0050, 0xffbf00e6},
+{'4', 0x00000008, 0x00530000},
+{'q', 0xc14eeef0, 0x00000000},
+{0, 0xc1a11112, 0x40911110},
+{'q', 0xc0e44448, 0x40911110},
+{0, 0xc12aaaac, 0x413cccd0},
+{'q', 0xc05ddde0, 0x40e66660},
+{0, 0xc0866668, 0x41777778},
+{'q', 0x40f77778, 0xc10bbbc0},
+{0, 0x41a6eef0, 0xc10bbbc0},
+{'q', 0x411aaaac, 0x00000000},
+{0, 0x417ccccc, 0x40955558},
+{'q', 0x40c66668, 0x40955558},
+{0, 0x41122224, 0x41411114},
+{'9', 0x003a0017, 0x007a0017},
+{'m', 0xc243bbbc, 0xc0777780},
+{'q', 0xb6000000, 0x414eeef2},
+{0, 0x40b77774, 0x419e6668},
+{'8', 0x3668362e, 0xcf690044},
+{'q', 0x40977778, 0xc0c88888},
+{0, 0x40977778, 0xc1800000},
+{'q', 0x00000000, 0xc10aaaaa},
+{0, 0xc08aaab0, 0xc178888a},
+{'8', 0xca96cade, 0x1ea300cd},
+{'q', 0xc0a8888c, 0x40777770},
+{0, 0xc0eaaaac, 0x41166668},
+{'l', 0x00000000, 0x40955550},
+{'@', 0x00000037, 0x00004cbb},/*        7        x-advance: 76.730469 */
+{'M', 0x428d999a, 0xc2c22223},
+{'l', 0x00000000, 0x40dddde0},
+{'l', 0xc220cccd, 0x42b44445},
+{'l', 0xc1500002, 0x00000000},
+{'l', 0x4220888a, 0xc2adddde},
+{'l', 0xc2522223, 0x00000000},
+{'l', 0xb5000000, 0xc1222228},
+{'l', 0x42833334, 0x00000000},
+{'@', 0x00000038, 0x00004cbb},/*        8        x-advance: 76.730469 */
+{'M', 0x428a8889, 0xc1d22223},
+{'q', 0x00000000, 0x41555556},
+{0, 0xc10eeef0, 0x41a3bbbc},
+{'q', 0xc10ddddc, 0x40e44447},
+{0, 0xc1af7778, 0x40e44447},
+{'q', 0xc1511112, 0xb4000000},
+{0, 0xc1b00000, 0xc0e44445},
+{'q', 0xc10ddddf, 0xc0e44446},
+{0, 0xc10ddddf, 0xc1a3bbbc},
+{'q', 0x00000000, 0xc1022224},
+{0, 0x408aaaac, 0xc1655558},
+{'8', 0xb55ece23, 0xbaaee7cd},
+{'q', 0xc06eeef0, 0xc0b77778},
+{0, 0xc06eeef0, 0xc14ddddc},
+{'q', 0x00000000, 0xc14bbbc0},
+{0, 0x41011112, 0xc19d5558},
+{'q', 0x41022222, 0xc0ddddd0},
+{0, 0x41a44445, 0xc0ddddd0},
+{'q', 0x41477778, 0x00000000},
+{0, 0x41a44444, 0x40ddddd0},
+{'q', 0x41022220, 0x40dddde0},
+{0, 0x41022220, 0x419d5558},
+{'8', 0x67e23900, 0x46ae2de2},
+{'q', 0x40f11110, 0x404cccd0},
+{0, 0x41400000, 0x41177778},
+{'9', 0x00320023, 0x00720023},
+{'m', 0xc169999c, 0xc2355556},
+{'8', 0xa1dcc600, 0xdba2dbdc},
+{'8', 0x24a300c6, 0x61dd23dd},
+{'8', 0x60233c00, 0x245e2423},
+{'8', 0xdc5d003a, 0xa024dc24},
+{'m', 0x400cccd0, 0x42344446},
+{'8', 0x96d7bf00, 0xd795d7d7},
+{'8', 0x299500bd, 0x6ad929d9},
+{'8', 0x68274300, 0x256c2528},
+{'8', 0xdb6c0044, 0x9827db27},
+{'@', 0x00000039, 0x00004cbb},/*        9        x-advance: 76.730469 */
+{'M', 0x42877778, 0xc25aaaab},
+{'q', 0x00000000, 0x41177778},
+{0, 0xbfd55540, 0x41991110},
+{'q', 0xbfcccd00, 0x4119999c},
+{0, 0xc0caaab0, 0x418ddddf},
+{'q', 0xc0955558, 0x41011112},
+{0, 0xc15ddde0, 0x41500001},
+{'9', 0x0027ffb7, 0x0027ff34},
+{'l', 0x00000000, 0xc1277778},
+{'q', 0x416bbbbe, 0x00000000},
+{0, 0x41aeeeef, 0xc0933334},
+{'q', 0x40e66668, 0xc0933334},
+{0, 0x41200004, 0xc1400000},
+{'q', 0x40377770, 0xc0eeeef0},
+{0, 0x404cccc0, 0xc17ddde0},
+{'8', 0x3bb624e2, 0x16a316d5},
+{'q', 0xc119999a, 0x00000000},
+{0, 0xc17bbbbc, 0xc09999a0},
+{'q', 0xc0c44446, 0xc0999998},
+{0, 0xc1111112, 0xc1433334},
+{'q', 0xc03bbbbc, 0xc0eeeef0},
+{0, 0xc03bbbbc, 0xc1766664},
+{'q', 0x00000000, 0xc15ddde0},
+{0, 0x40f33334, 0xc1bd5558},
+{'q', 0x40f55556, 0xc11dddd8},
+{0, 0x41b44446, 0xc11dddd8},
+{'q', 0x41311110, 0x00000000},
+{0, 0x418eeeee, 0x40b77770},
+{'q', 0x40dbbbc0, 0x40b77780},
+{0, 0x411eeef4, 0x416bbbc0},
+{'9', 0x00480019, 0x00960019},
+{'6', 0x00230000, 0xffaafe79},
+{'q', 0xb6000000, 0x410aaab0},
+{0, 0x408aaaa8, 0x417bbbc0},
+{'8', 0x386a3823, 0xe25b0032},
+{'9', 0xffe20029, 0xffb5003c},
+{'l', 0x00000000, 0xc09bbbc0},
+{'q', 0x00000000, 0xc1544448},
+{0, 0xc0b55558, 0xc1a2aaac},
+{'8', 0xc898c8d4, 0x349600bc},
+{'q', 0xc0955554, 0x40ceeef0},
+{0, 0xc0955554, 0x41811110},
+{'@', 0x0000003a, 0x00002111},/*        :        x-advance: 33.066406 */
+{'M', 0x410dddde, 0xc0d11112},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x3d888880, 0xc26b7778},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x0000003b, 0x00001cdd},/*        ;        x-advance: 28.863281 */
+{'M', 0x40eaaaab, 0xc282cccd},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x41611112, 0x424aeeef},
+{'l', 0x00000000, 0x411eeef0},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e00000, 0xc09bbbbe},
+{'9', 0xffb90033, 0xff6e0034},
+{'l', 0x00000000, 0xc12eeef0},
+{'l', 0x41411112, 0x00000000},
+{'@', 0x0000003c, 0x00004566},/*        <        x-advance: 69.398438 */
+{'M', 0x426d5556, 0xc1511112},
+{'l', 0xc25a2223, 0xc1ca2223},
+{'l', 0x35800000, 0xc11aaaac},
+{'l', 0x425a2223, 0xc1c9999a},
+{'l', 0x00000000, 0x41511114},
+{'l', 0xc2266667, 0x41891110},
+{'l', 0x42266667, 0x4186eef0},
+{'l', 0x00000000, 0x41511112},
+{'@', 0x0000003d, 0x00004aee},/*        =        x-advance: 74.929688 */
+{'M', 0x42837778, 0xc2820000},
+{'l', 0x00000000, 0x412bbbb8},
+{'4', 0x0000fe44, 0xffab0000},
+{'6', 0x000001bc, 0x00dd0000},
+{'l', 0x00000000, 0x412bbbbc},
+{'l', 0xc25e6667, 0x00000000},
+{'l', 0xb5800000, 0xc12bbbbc},
+{'l', 0x425e6667, 0x00000000},
+{'@', 0x0000003e, 0x00004766},/*        >        x-advance: 71.398438 */
+{'M', 0x41100000, 0xc292aaab},
+{'l', 0x4263bbbc, 0x41c9999a},
+{'l', 0x00000000, 0x411bbbbc},
+{'l', 0xc263bbbc, 0x41ca2222},
+{'l', 0x00000000, 0xc14bbbbc},
+{'l', 0x42308889, 0xc18c4444},
+{'l', 0xc2308889, 0xc189999a},
+{'l', 0x00000000, 0xc14bbbbc},
+{'@', 0x0000003f, 0x00004088},/*        ?        x-advance: 64.531250 */
+{'M', 0x4210cccd, 0xc1daaaab},
+{'l', 0xc1466666, 0x00000000},
+{'q', 0x3d888900, 0xc11aaaae},
+{0, 0x402aaaa8, 0xc167777a},
+{'8', 0xa646da14, 0xbb3fdc23},
+{'8', 0xa91bdf1b, 0xaae3ca00},
+{'8', 0xe0ace0e3, 0x19ad00d2},
+{'9', 0x0019ffdc, 0x0050ffdb},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x3e0888a0, 0xc1344448},
+{0, 0x41000001, 0xc18d5558},
+{'q', 0x40fdddde, 0xc0ccccc0},
+{0, 0x419bbbbc, 0xc0ccccc0},
+{'q', 0x414bbbbc, 0x00000000},
+{0, 0x419d5556, 0x40d99990},
+{'q', 0x40e00000, 0x40d999a0},
+{0, 0x40e00000, 0x41944444},
+{'q', 0x00000000, 0x410eeef0},
+{0, 0xc0a88888, 0x4180888a},
+{'q', 0xc0a88888, 0x40e22228},
+{0, 0xc1377778, 0x414cccd0},
+{'9', 0x002dffcf, 0x0086ffcf},
+{'m', 0xc14eeeee, 0x41a91111},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x00000040, 0x00007a99},/*        @        x-advance: 122.597656 */
+{'M', 0x42a8aaab, 0x41c22223},
+{'8', 0x23a318db, 0x0b970bc9},
+{'q', 0xc1caaaac, 0x00000000},
+{0, 0xc21cccce, 0xc1855556},
+{'q', 0xc15ccccb, 0xc185ddde},
+{0, 0xc1499998, 0xc235999a},
+{'q', 0x3f4cccd0, 0xc1922222},
+{0, 0x40fddde0, 0xc2026666},
+{'q', 0x40e66668, 0xc1666668},
+{0, 0x419d5556, 0xc1b55558},
+{'q', 0x41488888, 0xc1044440},
+{0, 0x41ea2224, 0xc1044440},
+{'q', 0x41cd5554, 0x00000000},
+{0, 0x421bbbbc, 0x4185dddc},
+{'q', 0x41555558, 0x4185ddde},
+{0, 0x41433330, 0x42348889},
+{'q', 0xbeaaaa00, 0x41033336},
+{0, 0xc0488880, 0x41822223},
+{'q', 0xc02eef00, 0x41011112},
+{0, 0xc10aaaa8, 0x41566668},
+{'q', 0xc0bbbbc0, 0x40a88889},
+{0, 0xc1777778, 0x40a88889},
+{'q', 0xc1488890, 0x00000000},
+{0, 0xc1800004, 0xc1355556},
+{'q', 0xc0e66660, 0x41355556},
+{0, 0xc18eeeee, 0x41355556},
+{'q', 0xc11ccccc, 0x35000000},
+{0, 0xc1677778, 0xc1011111},
+{'q', 0xc0955558, 0xc1011112},
+{0, 0xc05ddde0, 0xc1a9999a},
+{'q', 0x3fc44440, 0xc18c4444},
+{0, 0x41200000, 0xc1de6666},
+{'q', 0x4108888c, 0xc1255554},
+{0, 0x4196eef2, 0xc1255554},
+{'8', 0x115a0039, 0x273e1021},
+{'l', 0xc05999a0, 0x4213bbbc},
+{'8', 0x64114dfa, 0x16321618},
+{'q', 0x41011118, 0x00000000},
+{0, 0x41466668, 0xc0fbbbbc},
+{'q', 0x408cccd0, 0xc0fbbbbe},
+{0, 0x409bbbc0, 0xc1991112},
+{'q', 0x3f911100, 0xc1c6eeee},
+{0, 0xc1144448, 0xc21c0001},
+{'q', 0xc1255550, 0xc1622220},
+{0, 0xc2062222, 0xc1622220},
+{'q', 0xc1a80000, 0x00000000},
+{0, 0xc205ddde, 0x41733338},
+{'q', 0xc1477778, 0x41733330},
+{0, 0xc1577778, 0x421e6666},
+{'q', 0xbf9999a0, 0x41c77778},
+{0, 0x411eeeee, 0x421d5556},
+{'q', 0x41333336, 0x41666668},
+{0, 0x4201ddde, 0x41666668},
+{'8', 0xf55e002e, 0xe251f530},
+{'6', 0x003c0014, 0xfe5ffed8},
+{'q', 0xbf5dde00, 0x4116666a},
+{0, 0x3fe66660, 0x4168888c},
+{'8', 0x29442915, 0xe83a001b},
+{'9', 0xffe8001e, 0xffaf0034},
+{'4', 0xfffc0000, 0xfef50018},
+{'8', 0xf1c0f1e3, 0x3b9b00c6},
+{'q', 0xc0aaaaa8, 0x40eeeef0},
+{0, 0xc0d55550, 0x41b08888},
+{'@', 0x00000041, 0x00005911},/*        A        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'l', 0x4203bbbc, 0x00000000},
+{'l', 0xc183bbbc, 0xc2351112},
+{'l', 0xc183bbbc, 0x42351112},
+{'[', 0x007a0041, 0x000000cc},/*kerning*/
+{'@', 0x00000042, 0x00005511},/*        B        x-advance: 85.066406 */
+{'M', 0x429aaaab, 0xc1e00001},
+{'q', 0x00000000, 0x4159999b},
+{0, 0xc10cccc8, 0x41a66667},
+{'9', 0x0039ffbb, 0x0039ff46},
+{'4', 0x0000fef0, 0xfcf80000},
+{'l', 0x41fe6668, 0x00000000},
+{'q', 0x416eeef0, 0x00000000},
+{0, 0x41ba2222, 0x40c66670},
+{'q', 0x41066668, 0x40c44440},
+{0, 0x41066668, 0x419d5554},
+{'8', 0x60e23500, 0x40ad29e2},
+{'q', 0x41033338, 0x40111110},
+{0, 0x41488888, 0x41099998},
+{'9', 0x00320023, 0x00740023},
+{'m', 0xc254cccd, 0xc26a2224},
+{'4', 0x00f60000, 0x0000009a},
+{'8', 0xdf6a0042, 0xa528df28},
+{'9', 0xff8a0000, 0xff87ff70},
+{'6', 0x0000ff63, 0x01d50143},
+{'q', 0x00000000, 0xc1022220},
+{0, 0xc08eeef8, 0xc14ccccc},
+{'9', 0xffdbffdd, 0xffdbff8f},
+{'4', 0x0000ff53, 0x01170000},
+{'l', 0x41a91112, 0x00000000},
+{'q', 0x41122220, 0x00000000},
+{0, 0x41633334, 0xc0955556},
+{'q', 0x40a22228, 0xc0977776},
+{0, 0x40a22228, 0xc14bbbbd},
+{'@', 0x00000043, 0x000058dd},/*        C        x-advance: 88.863281 */
+{'M', 0x428bbbbc, 0xc1f6eef0},
+{'l', 0x414cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0x415cccce},
+{0, 0xc1266668, 0x41b80001},
+{'q', 0xc10eeef0, 0x41133333},
+{0, 0xc1d33334, 0x41133333},
+{'q', 0xc1877778, 0x34c00000},
+{0, 0xc1daaaab, 0xc1411111},
+{'9', 0xff9fffae, 0xfeffffac},
+{'l', 0x00000000, 0xc1266668},
+{'q', 0x00000000, 0xc1a33334},
+{0, 0x41277778, 0xc202eef0},
+{'q', 0x4128888a, 0xc1455550},
+{0, 0x41e44446, 0xc1455550},
+{'q', 0x4183bbbc, 0x00000000},
+{0, 0x41caaaaa, 0x41111110},
+{'9', 0x00480046, 0x00bb0052},
+{'l', 0xc14cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0xc1222228},
+{0, 0xc0d11110, 0xc1800000},
+{'q', 0xc0a22220, 0xc0bddde0},
+{0, 0xc182aaaa, 0xc0bddde0},
+{'q', 0xc14ddde0, 0x00000000},
+{0, 0xc19c4446, 0x41177778},
+{'9', 0x004bffcb, 0x00c7ffcb},
+{'l', 0x00000000, 0x411cccd0},
+{'q', 0x00000000, 0x41655556},
+{0, 0x40c22224, 0x41c3bbbc},
+{'q', 0x40c22220, 0x41211111},
+{0, 0x41980000, 0x41211111},
+{'q', 0x41444444, 0x00000000},
+{0, 0x418a2222, 0xc0b77778},
+{'q', 0x40a22228, 0xc0b77776},
+{0, 0x40d77778, 0xc1800000},
+{'@', 0x00000044, 0x00005999},/*        D        x-advance: 89.597656 */
+{'M', 0x41344445, 0x00000000},
+{'4', 0xfcf80000, 0x000000db},
+{'q', 0x41991112, 0x00000000},
+{0, 0x41f7777a, 0x41455558},
+{'9', 0x0062005e, 0x010a005e},
+{'l', 0x00000000, 0x40b99998},
+{'q', 0x00000000, 0x41a88889},
+{0, 0xc13eeef0, 0x42055556},
+{'9', 0x0062ffa2, 0x0062ff00},
+{'6', 0x0000ff2e, 0xfd4c0066},
+{'4', 0x02600000, 0x0000006b},
+{'q', 0x41788888, 0x00000000},
+{0, 0x41bb3334, 0xc119999a},
+{'9', 0xffb4003e, 0xff34003e},
+{'l', 0x00000000, 0xc0bddde0},
+{'q', 0x00000000, 0xc185ddde},
+{0, 0xc0fbbbb8, 0xc1ceeeee},
+{'q', 0xc0fbbbc0, 0xc1122228},
+{0, 0xc1b1999c, 0xc1122228},
+{'l', 0xc1699998, 0x00000000},
+{'@', 0x00000045, 0x00004d99},/*        E        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'l', 0x42433333, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc276aaab, 0x00000000},
+{'[', 0x00540045, 0x00000155},/*kerning*/
+{'@', 0x00000046, 0x00004b77},/*        F        x-advance: 75.464844 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42708889, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc23d1111, 0x00000000},
+{'l', 0x00000000, 0x4204888a},
+{'l', 0x4222aaab, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc222aaab, 0x00000000},
+{'l', 0x00000000, 0x422b7778},
+{'l', 0xc14ddddf, 0x00000000},
+{'[', 0x00540046, 0x00000155},/*kerning*/
+{'@', 0x00000047, 0x00005d00},/*        G        x-advance: 93.000000 */
+{'M', 0x42a60001, 0xc2415556},
+{'l', 0x00000000, 0x420e2222},
+{'q', 0xc02eef00, 0x40800006},
+{0, 0xc1266668, 0x41111114},
+{'q', 0xc0f55560, 0x40a22223},
+{0, 0xc1bf777a, 0x40a22223},
+{'q', 0xc18dddde, 0xb4000000},
+{0, 0xc1e91111, 0xc1422222},
+{'9', 0xff9fffa5, 0xfef0ffa5},
+{'l', 0x00000000, 0xc0f11110},
+{'q', 0x00000000, 0xc1ad5558},
+{0, 0x41222223, 0xc2077778},
+{'q', 0x41222222, 0xc1433330},
+{0, 0x41e77777, 0xc1433330},
+{'q', 0x41855556, 0x00000000},
+{0, 0x41ca2222, 0x41066660},
+{'9', 0x00430045, 0x00aa0054},
+{'l', 0xc14ddde0, 0x00000000},
+{'q', 0xbfaaaac0, 0xc0fbbbc0},
+{0, 0xc0d33338, 0xc1588888},
+{'q', 0xc0a66668, 0xc0b55550},
+{0, 0xc182aaac, 0xc0b55550},
+{'q', 0xc1566664, 0x00000000},
+{0, 0xc19dddde, 0x41177778},
+{'9', 0x004bffce, 0x00ccffcd},
+{'l', 0x00000000, 0x41000000},
+{'q', 0x00000000, 0x41866667},
+{0, 0x40f33334, 0x41d22223},
+{'q', 0x40f33338, 0x41166667},
+{0, 0x41a0888a, 0x41166667},
+{'q', 0x41255554, 0x00000000},
+{0, 0x416eeef0, 0xc0199998},
+{'9', 0xffed0024, 0xffdb0034},
+{'l', 0x00000000, 0xc1adddde},
+{'l', 0xc1b3bbbc, 0x00000000},
+{'l', 0x00000000, 0xc1266668},
+{'l', 0x420d1112, 0x00000000},
+{'@', 0x00000048, 0x00006166},/*        H        x-advance: 97.398438 */
+{'M', 0x42922223, 0x00000000},
+{'l', 0x00000000, 0xc2337778},
+{'l', 0xc243bbbd, 0x00000000},
+{'l', 0x00000000, 0x42337778},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x4226eef0},
+{'l', 0x4243bbbd, 0x00000000},
+{'l', 0x00000000, 0xc226eef0},
+{'l', 0x414cccc8, 0x00000000},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14cccc8, 0x00000000},
+{'@', 0x00000049, 0x00002522},/*        I        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14dddde, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414dddde, 0x00000000},
+{'@', 0x0000004a, 0x00004b55},/*        J        x-advance: 75.332031 */
+{'M', 0x42500001, 0xc2c22223},
+{'4', 0x00000066, 0x02250000},
+{'q', 0x00000000, 0x41666668},
+{0, 0xc10aaaac, 0x41b0888a},
+{'q', 0xc1099998, 0x40f33333},
+{0, 0xc1af7778, 0x40f33333},
+{'q', 0xc1566666, 0xb4000000},
+{0, 0xc1b08888, 0xc0dddddf},
+{'9', 0xffc9ffbc, 0xff56ffbc},
+{'l', 0x414ddddf, 0x00000000},
+{'8', 0x6b274900, 0x22662228},
+{'q', 0x40f33338, 0x00000000},
+{0, 0x414aaaac, 0xc09bbbbc},
+{'q', 0x40a44448, 0xc09bbbba},
+{0, 0x40a44448, 0xc1655555},
+{'l', 0x00000000, 0xc2897778},
+{'@', 0x0000004b, 0x000055aa},/*        K        x-advance: 85.664062 */
+{'M', 0x428caaab, 0x00000000},
+{'l', 0xc2095556, 0xc234cccd},
+{'l', 0xc13ddddc, 0x41455554},
+{'l', 0x00000000, 0x42037778},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x423f7779},
+{'l', 0x422c8889, 0xc23f7779},
+{'l', 0x41777778, 0x00000000},
+{'l', 0xc2188889, 0x422b7778},
+{'l', 0x42244445, 0x4258ccce},
+{'l', 0xc1755558, 0x00000000},
+{'@', 0x0000004c, 0x00004988},/*        L        x-advance: 73.531250 */
+{'M', 0x428c4445, 0xc1277778},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc26b7779, 0x00000000},
+{'l', 0x35800000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x42ad3334},
+{'l', 0x42380001, 0x00000000},
+{'[', 0x0041004c, 0x00000144},/*kerning*/
+{'[', 0x00c0004c, 0x00000144},/*kerning*/
+{'[', 0x00c1004c, 0x00000144},/*kerning*/
+{'[', 0x00c2004c, 0x00000144},/*kerning*/
+{'[', 0x00c3004c, 0x00000144},/*kerning*/
+{'[', 0x00c4004c, 0x00000144},/*kerning*/
+{'[', 0x00c5004c, 0x00000144},/*kerning*/
+{'@', 0x0000004d, 0x00007733},/*        M        x-advance: 119.199219 */
+{'M', 0x426e6667, 0xc18f7778},
+{'l', 0x41fdddde, 0xc29e4445},
+{'l', 0x41844444, 0x00000000},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14cccc8, 0x00000000},
+{'l', 0x00000000, 0xc2177778},
+{'l', 0x3fa22200, 0xc2226666},
+{'l', 0xc1ff7778, 0x429ceeef},
+{'l', 0xc11bbbbc, 0x00000000},
+{'l', 0xc1feeeef, 0xc29d3334},
+{'l', 0x3fa22220, 0x4222eef0},
+{'l', 0x00000000, 0x42177778},
+{'l', 0xc14ccccd, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x41844444, 0x00000000},
+{'l', 0x41fe6668, 0x429e4445},
+{'@', 0x0000004e, 0x00006166},/*        N        x-advance: 97.398438 */
+{'M', 0x42abddde, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14eeef0, 0x00000000},
+{'l', 0xc2437777, 0xc295bbbc},
+{'l', 0x00000000, 0x4295bbbc},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x42444445, 0x42962223},
+{'l', 0x00000000, 0xc2962223},
+{'l', 0x414bbbb8, 0x00000000},
+{'@', 0x0000004f, 0x00005dee},/*        O        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'q', 0x40dbbbc0, 0xc1144446},
+{0, 0x40dbbbc0, 0xc1d5ddde},
+{'l', 0x00000000, 0xc0c88890},
+{'@', 0x00000050, 0x00005622},/*        P        x-advance: 86.132812 */
+{'M', 0x41c11112, 0xc2184445},
+{'l', 0x00000000, 0x42184445},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'l', 0x420f3334, 0x00000000},
+{'q', 0x41844444, 0x00000000},
+{0, 0x41ca2222, 0x41055558},
+{'q', 0x410cccd0, 0x41055558},
+{0, 0x410cccd0, 0x41aa2224},
+{'q', 0x00000000, 0x41611110},
+{0, 0xc10cccd0, 0x41addddc},
+{'9', 0x003dffbb, 0x003dff36},
+{'6', 0x0000ff49, 0xfe7d0000},
+{'4', 0x01300000, 0x000000b7},
+{'q', 0x41355554, 0x00000000},
+{0, 0x41822222, 0xc0a88888},
+{'8', 0x9427d627, 0x96d9c500},
+{'q', 0xc09ddde0, 0xc0bbbbc0},
+{0, 0xc1822222, 0xc0bbbbc0},
+{'l', 0xc1b77778, 0x00000000},
+{'[', 0x00740050, 0x000000ee},/*kerning*/
+{'[', 0x00760050, 0x00000100},/*kerning*/
+{'[', 0x00790050, 0x00000100},/*kerning*/
+{'[', 0x00fd0050, 0x00000100},/*kerning*/
+{'[', 0x00ff0050, 0x00000100},/*kerning*/
+{'@', 0x00000051, 0x00005dee},/*        Q        x-advance: 93.929688 */
+{'M', 0x42ab7778, 0x41066667},
+{'4', 0x0040ffbb, 0xff7eff5d},
+{'q', 0xc0999998, 0x3f99999b},
+{0, 0xc1222220, 0x3f99999b},
+{'q', 0xc18a2224, 0x00000000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11112, 0xc1488888},
+{'q', 0x418cccce, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'l', 0x00000000, 0x40dddde0},
+{'q', 0x00000000, 0x415ffffe},
+{0, 0xc08eeef0, 0x41c22222},
+{'9', 0x0051ffdd, 0x007fff9d},
+{'6', 0x006d008a, 0xfe1fff98},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991112, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e8888c, 0x41133333},
+{0, 0x4199999b, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'q', 0x40dbbbc0, 0xc1144446},
+{0, 0x40dbbbc0, 0xc1d5ddde},
+{'l', 0x00000000, 0xc0c88890},
+{'@', 0x00000052, 0x00005422},/*        R        x-advance: 84.132812 */
+{'M', 0x42880000, 0x00000000},
+{'l', 0xc1a88888, 0xc21d5556},
+{'l', 0xc1b66666, 0x00000000},
+{'l', 0x00000000, 0x421d5556},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'l', 0x42008889, 0x00000000},
+{'q', 0x4182aaac, 0x00000000},
+{0, 0x41c91114, 0x40eeeef0},
+{'q', 0x410dddd8, 0x40eeeef0},
+{0, 0x410dddd8, 0x41ad5558},
+{'q', 0x00000000, 0x41111110},
+{0, 0xc09ddde0, 0x417ddddc},
+{'9', 0x0035ffda, 0x0050ff94},
+{'4', 0x014900b6, 0x00060000},
+{'6', 0x0000ff93, 0xfd4cfea2},
+{'4', 0x01250000, 0x0000009d},
+{'q', 0x41255554, 0x00000000},
+{0, 0x41788888, 0xc0a88888},
+{'8', 0x9a2ad62a, 0x95d8bd00},
+{'q', 0xc0a00000, 0xc0a44450},
+{0, 0xc1811112, 0xc0a44450},
+{'l', 0xc19a2222, 0x00000000},
+{'@', 0x00000053, 0x00005111},/*        S        x-advance: 81.066406 */
+{'M', 0x427c0001, 0xc1c44445},
+{'q', 0x00000000, 0xc0d55554},
+{0, 0xc0911110, 0xc12aaaaa},
+{'q', 0xc08eeef0, 0xc0800000},
+{0, 0xc196eef0, 0xc1033334},
+{'q', 0xc1666668, 0xc0888888},
+{0, 0xc1b66667, 0xc12cccd0},
+{'q', 0xc1055556, 0xc0d33330},
+{0, 0xc1055556, 0xc18e6664},
+{'q', 0x00000000, 0xc1355558},
+{0, 0x41100000, 0xc196eef0},
+{'q', 0x41111112, 0xc0f11110},
+{0, 0x41c00000, 0xc0f11110},
+{'q', 0x41833334, 0x00000000},
+{0, 0x41ca2224, 0x41100000},
+{'9', 0x00480047, 0x00a20047},
+{'l', 0xc14cccd0, 0x00000000},
+{'q', 0x00000000, 0xc1022220},
+{0, 0xc0a88888, 0xc1577778},
+{'q', 0xc0a88888, 0xc0aaaaa0},
+{0, 0xc1811112, 0xc0aaaaa0},
+{'q', 0xc1244444, 0x00000000},
+{0, 0xc1733332, 0x40911110},
+{'8', 0x59d923d9, 0x51293000},
+{'q', 0x40a88888, 0x40800000},
+{0, 0x41888889, 0x40eaaab0},
+{'q', 0x4186eef0, 0x40977778},
+{0, 0x41c4ccce, 0x413bbbbc},
+{'q', 0x40f77770, 0x40dddde0},
+{0, 0x40f77770, 0x41922222},
+{'q', 0x00000000, 0x413dddde},
+{0, 0xc1144440, 0x41977778},
+{'q', 0xc1144448, 0x40e22223},
+{0, 0xc1c4ccce, 0x40e22223},
+{'q', 0xc10eeef0, 0xb4000000},
+{0, 0xc18b3334, 0xc0555556},
+{'q', 0xc1066666, 0xc0555556},
+{0, 0xc15ddddf, 0xc11ddddf},
+{'9', 0xffccffd5, 0xff7effd5},
+{'l', 0x414cccce, 0x00000000},
+{'q', 0x00000000, 0x411eeef0},
+{0, 0x40e88888, 0x41677779},
+{'q', 0x40e88888, 0x40911110},
+{0, 0x4184ccce, 0x40911110},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41777778, 0xc0844444},
+{'q', 0x40aeeef0, 0xc0866666},
+{0, 0x40aeeef0, 0xc1344445},
+{'@', 0x00000054, 0x00005177},/*        T        x-advance: 81.464844 */
+{'M', 0x40555556, 0xc2ad1112},
+{'l', 0x00000000, 0xc1288888},
+{'l', 0x42960000, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc1f9999a, 0x00000000},
+{'l', 0x00000000, 0x42ad1112},
+{'l', 0xc14aaaac, 0x00000000},
+{'l', 0x00000000, 0xc2ad1112},
+{'l', 0xc1f91111, 0x00000000},
+{'[', 0x00540054, 0x00000111},/*kerning*/
+{'[', 0x00560054, 0x00000111},/*kerning*/
+{'[', 0x00570054, 0x00000100},/*kerning*/
+{'[', 0x00590054, 0x00000111},/*kerning*/
+{'[', 0x00dd0054, 0x00000111},/*kerning*/
+{'@', 0x00000055, 0x00005888},/*        U        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'q', 0x40c44448, 0xc0aeeef2},
+{0, 0x40c44448, 0xc186eef0},
+{'l', 0x00000000, 0xc2835556},
+{'@', 0x00000056, 0x000056ee},/*        V        x-advance: 86.929688 */
+{'M', 0x42aa4445, 0xc2c22223},
+{'l', 0xc20fbbbd, 0x42c22223},
+{'l', 0xc1366664, 0x00000000},
+{'l', 0xc20f7778, 0xc2c22223},
+{'l', 0x415eeeef, 0x00000000},
+{'l', 0x41dc4444, 0x42a00001},
+{'l', 0x41de6668, 0xc2a00001},
+{'l', 0x415eeef0, 0x00000000},
+{'[', 0x00290056, 0x00000155},/*kerning*/
+{'[', 0x005d0056, 0x00000122},/*kerning*/
+{'[', 0x007d0056, 0x00000144},/*kerning*/
+{'@', 0x00000057, 0x00007922},/*        W        x-advance: 121.132812 */
+{'M', 0x42ec6667, 0xc2c22223},
+{'l', 0xc1bbbbbc, 0x42c22223},
+{'l', 0xc13aaaa8, 0x00000000},
+{'l', 0xc1a00002, 0xc28d7778},
+{'l', 0xbfc44440, 0xc0ecccd0},
+{'l', 0xbfc44440, 0x40ecccd0},
+{'l', 0xc1a5ddde, 0x428d7778},
+{'l', 0xc13aaaac, 0x00000000},
+{'l', 0xc1bc4445, 0xc2c22223},
+{'l', 0x414ccccc, 0x00000000},
+{'l', 0x41755556, 0x4284ccce},
+{'l', 0x3ff77780, 0x414dddda},
+{'l', 0x402aaab0, 0xc1388888},
+{'l', 0x419a2222, 0xc2877778},
+{'l', 0x412bbbbc, 0x00000000},
+{'l', 0x4195dde0, 0x42877778},
+{'l', 0x402eeee0, 0x413cccce},
+{'l', 0x40044440, 0xc1533334},
+{'l', 0x41700000, 0xc284aaab},
+{'l', 0x414ddde0, 0x00000000},
+{'[', 0x00290057, 0x00000100},/*kerning*/
+{'[', 0x00540057, 0x000000ee},/*kerning*/
+{'[', 0x005d0057, 0x000000cc},/*kerning*/
+{'[', 0x007d0057, 0x000000ee},/*kerning*/
+{'@', 0x00000058, 0x00005599},/*        X        x-advance: 85.597656 */
+{'M', 0x419ccccd, 0xc2c22223},
+{'l', 0x41baaaab, 0x4214ccce},
+{'l', 0x41baaaac, 0xc214ccce},
+{'l', 0x41700000, 0x00000000},
+{'l', 0xc1f55556, 0x42404445},
+{'l', 0x41fb3336, 0x42440001},
+{'l', 0xc1722228, 0x00000000},
+{'l', 0xc1bf7778, 0xc217bbbc},
+{'l', 0xc1bf7777, 0x4217bbbc},
+{'l', 0xc1722224, 0x00000000},
+{'l', 0x41fb3335, 0xc2440001},
+{'l', 0xc1f55557, 0xc2404445},
+{'l', 0x41700000, 0x00000000},
+{'[', 0x00560058, 0x000000ee},/*kerning*/
+{'@', 0x00000059, 0x00005200},/*        Y        x-advance: 82.000000 */
+{'M', 0x417bbbbd, 0xc2c22223},
+{'l', 0x41c9999a, 0x4242eef0},
+{'l', 0x41ca2224, 0xc242eef0},
+{'l', 0x41699998, 0x00000000},
+{'l', 0xc205ddde, 0x42733334},
+{'l', 0x00000000, 0x42111112},
+{'l', 0xc14ddde0, 0x00000000},
+{'l', 0x00000000, 0xc2111112},
+{'l', 0xc205ddde, 0xc2733334},
+{'l', 0x416bbbbd, 0x00000000},
+{'[', 0x00290059, 0x00000155},/*kerning*/
+{'[', 0x00540059, 0x00000122},/*kerning*/
+{'[', 0x00560059, 0x00000133},/*kerning*/
+{'[', 0x00570059, 0x00000122},/*kerning*/
+{'[', 0x00580059, 0x000000dd},/*kerning*/
+{'[', 0x00590059, 0x00000133},/*kerning*/
+{'[', 0x005d0059, 0x00000133},/*kerning*/
+{'[', 0x007d0059, 0x00000144},/*kerning*/
+{'[', 0x00dd0059, 0x00000133},/*kerning*/
+{'@', 0x0000005a, 0x000051cc},/*        Z        x-advance: 81.796875 */
+{'M', 0x40d55556, 0xc2ad1112},
+{'l', 0x00000000, 0xc1288888},
+{'l', 0x42873334, 0x00000000},
+{'l', 0x00000000, 0x41155558},
+{'l', 0xc2555556, 0x429a8889},
+{'l', 0x425dddde, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc28d3333, 0x00000000},
+{'l', 0xb6400000, 0xc119999a},
+{'l', 0x4254ccce, 0xc299dddf},
+{'l', 0xc2515556, 0x00000000},
+{'[', 0x0041005a, 0x000000dd},/*kerning*/
+{'[', 0x00c0005a, 0x000000dd},/*kerning*/
+{'[', 0x00c1005a, 0x000000dd},/*kerning*/
+{'[', 0x00c2005a, 0x000000dd},/*kerning*/
+{'[', 0x00c3005a, 0x000000dd},/*kerning*/
+{'[', 0x00c4005a, 0x000000dd},/*kerning*/
+{'[', 0x00c5005a, 0x000000dd},/*kerning*/
+{'@', 0x0000005b, 0x00002433},/*        [        x-advance: 36.199219 */
+{'M', 0x420b7778, 0xc2dddddf},
+{'l', 0x00000000, 0x41222228},
+{'l', 0xc14bbbbc, 0x00000000},
+{'l', 0x00000000, 0x42deeeef},
+{'l', 0x414bbbbc, 0x36400000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc1c8888a, 0x00000000},
+{'l', 0x35800000, 0xc303bbbc},
+{'l', 0x41c8888a, 0xb7000000},
+{'@', 0x0000005c, 0x00003811},/*       \         x-advance: 56.066406 */
+{'M', 0x422d1112, 0x41055556},
+{'l', 0xc2222223, 0xc2d2ccce},
+{'l', 0x413bbbbc, 0x00000000},
+{'l', 0x42222223, 0x42d2ccce},
+{'l', 0xc13bbbbc, 0xb6000000},
+{'@', 0x0000005d, 0x00002433},/*        ]        x-advance: 36.199219 */
+{'M', 0x3f2aaaab, 0xc2c9999a},
+{'l', 0x00000000, 0xc1222228},
+{'l', 0x41c9999b, 0x00000000},
+{'l', 0x00000000, 0x4303bbbc},
+{'l', 0xc1c9999b, 0x36c00000},
+{'l', 0x35300000, 0xc1222223},
+{'l', 0x414ccccd, 0x00000000},
+{'l', 0x00000000, 0xc2deeeef},
+{'l', 0xc14ccccd, 0x00000000},
+{'@', 0x0000005e, 0x00003911},/*        ^        x-advance: 57.066406 */
+{'M', 0x40888889, 0xc2426667},
+{'l', 0x419f7778, 0xc241dddf},
+{'l', 0x41088888, 0x00000000},
+{'l', 0x419eeef0, 0x4241dddf},
+{'l', 0xc1377778, 0x00000000},
+{'l', 0xc14aaaaa, 0xc200cccd},
+{'l', 0xc14bbbbd, 0x4200cccd},
+{'l', 0xc1377778, 0x00000000},
+{'@', 0x0000005f, 0x00003d99},/*        _        x-advance: 61.597656 */
+{'M', 0x4275999a, 0x00000000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc2748889, 0x00000000},
+{'l', 0x34900000, 0xc1222223},
+{'l', 0x42748889, 0x00000000},
+{'@', 0x00000060, 0x00002a33},/*        `        x-advance: 42.199219 */
+{'M', 0x4195ddde, 0xc2ccccce},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999a, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeeee, 0x00000000},
+{'@', 0x00000061, 0x00004a44},/*        a        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'@', 0x00000062, 0x00004caa},/*        b        x-advance: 76.664062 */
+{'M', 0x428ceeef, 0xc20d1112},
+{'q', 0x00000000, 0x417cccd0},
+{0, 0xc0eaaaa8, 0x41d1999b},
+{'q', 0xc0eaaaa8, 0x41266667},
+{0, 0xc1a5ddde, 0x41266667},
+{'9', 0x0000ff93, 0xffb3ff58},
+{'l', 0xbf2aaaa0, 0x41055556},
+{'l', 0xc1355556, 0x00000000},
+{'4', 0xfccd0000, 0x00000063},
+{'l', 0x00000000, 0x42184446},
+{'q', 0x40eaaaac, 0xc1122220},
+{0, 0x41a44446, 0xc1122220},
+{'q', 0x41599998, 0x00000000},
+{0, 0x41a6eeee, 0x41222220},
+{'9', 0x0051003a, 0x00d5003a},
+{'6', 0x000b0000, 0xff22ff06},
+{'8', 0x1aa900cb, 0x3fcc19df},
+{'l', 0x00000000, 0x41fb3334},
+{'8', 0x40352613, 0x1a571a22},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41655554, 0xc0f55556},
+{'9', 0xffc30023, 0xff6d0023},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc12bbbbc},
+{0, 0xc0866668, 0xc1944446},
+{'q', 0xc0844440, 0xc0fbbbb8},
+{0, 0xc16aaaac, 0xc0fbbbb8},
+{'@', 0x00000063, 0x00004777},/*        c        x-advance: 71.464844 */
+{'M', 0x42191112, 0xc10ccccd},
+{'8', 0xe15c0034, 0xb02be128},
+{'l', 0x413bbbb8, 0x00000000},
+{'q', 0xbeeeee00, 0x411aaaab},
+{0, 0xc10ddddc, 0x41877778},
+{'q', 0xc1066664, 0x40e66667},
+{0, 0xc19eeeee, 0x40e66667},
+{'q', 0xc1822223, 0xb4000000},
+{0, 0xc1c1999b, 0xc12bbbbc},
+{'9', 0xffabffc2, 0xff36ffc2},
+{'l', 0x00000000, 0xc0333330},
+{'q', 0x00000000, 0xc168888c},
+{0, 0x40fbbbbd, 0xc1ca2224},
+{'q', 0x40fddde0, 0xc12bbbb8},
+{0, 0x41c1999b, 0xc12bbbb8},
+{'q', 0x414aaaa8, 0x00000000},
+{0, 0x41a3bbbc, 0x40f11110},
+{'9', 0x003b003e, 0x00940042},
+{'l', 0xc13bbbb8, 0x00000000},
+{'8', 0xa6d8cbfd, 0xdba1dbdc},
+{'8', 0x1ea100c4, 0x4ed01ede},
+{'9', 0x002ffff3, 0x0061fff3},
+{'l', 0x00000000, 0x40333330},
+{'8', 0x620d3200, 0x4e302f0d},
+{'q', 0x408aaaac, 0x40733334},
+{0, 0x41400002, 0x40733334},
+{'@', 0x00000064, 0x00004d00},/*        d        x-advance: 77.000000 */
+{'M', 0x425fbbbc, 0x00000000},
+{'l', 0xbf199980, 0xc0f77778},
+{'q', 0xc0ecccd0, 0x41111111},
+{0, 0xc1a4ccce, 0x41111111},
+{'q', 0xc14aaaaa, 0x34c00000},
+{0, 0xc1a3bbbc, 0xc1244444},
+{'9', 0xffaeffc2, 0xff32ffc1},
+{'l', 0x00000000, 0xbff77780},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f9999b, 0xc1d55556},
+{'q', 0x40fbbbbe, 0xc1222220},
+{0, 0x41a5ddde, 0xc1222220},
+{'9', 0x00000065, 0x004400a0},
+{'l', 0x00000000, 0xc215dde0},
+{'4', 0x00000063, 0x03330000},
+{'6', 0x0000ffa6, 0xfee6fed7},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40911114, 0x4193bbbd},
+{'q', 0x40911110, 0x40f55556},
+{0, 0x4168888a, 0x40f55556},
+{'9', 0x0000005b, 0xffad0088},
+{'l', 0x00000000, 0xc204ccce},
+{'q', 0xc0b11110, 0xc1244444},
+{0, 0xc1877778, 0xc1244444},
+{'q', 0xc1211110, 0x00000000},
+{0, 0xc16aaaaa, 0x40fbbbb8},
+{'q', 0xc0911114, 0x40f999a0},
+{0, 0xc0911114, 0x41944446},
+{'l', 0x00000000, 0x3fb33320},
+{'@', 0x00000065, 0x00004866},/*        e        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'@', 0x00000066, 0x00002f77},/*        f        x-advance: 47.464844 */
+{'M', 0x422c8889, 0xc27aaaac},
+{'l', 0xc1755556, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088880, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'l', 0x00000000, 0x41000000},
+{'l', 0x41755556, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'[', 0x00220066, 0x00000111},/*kerning*/
+{'[', 0x00270066, 0x00000111},/*kerning*/
+{'[', 0x00290066, 0x00000155},/*kerning*/
+{'[', 0x005d0066, 0x00000133},/*kerning*/
+{'[', 0x007d0066, 0x00000144},/*kerning*/
+{'[', 0x201c0066, 0x00000111},/*kerning*/
+{'[', 0x201d0066, 0x00000111},/*kerning*/
+{'@', 0x00000067, 0x00004caa},/*        g        x-advance: 76.664062 */
+{'M', 0x42133334, 0x41e3bbbd},
+{'8', 0xeb9300d4, 0xb298ebbf},
+{'l', 0x40ceeef0, 0xc0eaaaac},
+{'q', 0x41000000, 0x411bbbbc},
+{0, 0x419aaaab, 0x411bbbbc},
+{'q', 0x410bbbbc, 0x00000000},
+{0, 0x415eeef0, 0xc09bbbbc},
+{'9', 0xffd90029, 0xff8d0029},
+{'l', 0x00000000, 0xc0caaaab},
+{'q', 0xc0eaaab0, 0x4109999a},
+{0, 0xc1a1999a, 0x4109999a},
+{'q', 0xc1500002, 0xb4000000},
+{0, 0xc1a55556, 0xc1266668},
+{'9', 0xffadffc3, 0xff2fffc3},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f33334, 0xc1d55556},
+{'q', 0x40f55554, 0xc1222220},
+{0, 0x41a6eeef, 0xc1222220},
+{'9', 0x0000006a, 0x004a00a4},
+{'4', 0xffc00004, 0x00000059},
+{'l', 0x00000000, 0x428d3334},
+{'q', 0x00000000, 0x41655556},
+{0, 0xc1088888, 0x41b1999a},
+{'9', 0x003effbc, 0x003eff50},
+{'m', 0xc1900001, 0xc27eeef0},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x408eeef0, 0x4193bbbd},
+{'q', 0x40911110, 0x40f55556},
+{0, 0x4168888a, 0x40f55556},
+{'9', 0x0000005d, 0xffab0089},
+{'l', 0x00000000, 0xc2037778},
+{'8', 0xc5cdddee, 0xe8ace8df},
+{'q', 0xc1211110, 0x00000000},
+{0, 0xc169999a, 0x40fbbbb8},
+{'q', 0xc0911110, 0x40f999a0},
+{0, 0xc0911110, 0x41944446},
+{'l', 0x00000000, 0x3fb33320},
+{'@', 0x00000068, 0x00004b33},/*        h        x-advance: 75.199219 */
+{'M', 0x421d5556, 0xc27c4445},
+{'8', 0x19ad00d1, 0x42c719dc},
+{'l', 0x00000000, 0x424e2223},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfccd0000, 0x00000062},
+{'l', 0x00000000, 0x421b7779},
+{'q', 0x41033334, 0xc11eeeec},
+{0, 0x41aa2224, 0xc11eeeec},
+{'q', 0x41299998, 0x00000000},
+{0, 0x41866666, 0x40bdddd0},
+{'9', 0x002f0032, 0x009f0032},
+{'4', 0x017c0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23d999a},
+{'8', 0xa0e3bd00, 0xe4abe4e3},
+{'@', 0x00000069, 0x00002133},/*        i        x-advance: 33.199219 */
+{'M', 0x41177778, 0xc2b68889},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41555556, 0x41991110},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2904445},
+{'l', 0x41466667, 0x00000000},
+{'@', 0x0000006a, 0x000020aa},/*        j        x-advance: 32.664062 */
+{'M', 0x41077778, 0xc2b68889},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x3fa22220, 0x41991110},
+{'4', 0x00000063, 0x02850000},
+{'q', 0x00000000, 0x41a44446},
+{0, 0xc196eef0, 0x41a44446},
+{'9', 0x0000ffdf, 0xfff7ffc3},
+{'l', 0x3d888880, 0xc11eeef0},
+{'8', 0x042d0413, 0xb6430041},
+{'l', 0x00000000, 0xc2a31112},
+{'@', 0x0000006b, 0x00004533},/*        k        x-advance: 69.199219 */
+{'M', 0x425a6667, 0x00000000},
+{'l', 0xc1c80000, 0xc205ddde},
+{'l', 0xc0f9999c, 0x41011110},
+{'l', 0x00000000, 0x41cb3334},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2ccccce},
+{'l', 0x41466667, 0x00000000},
+{'l', 0x00000000, 0x42777779},
+{'l', 0x40d33334, 0xc0fbbbb8},
+{'l', 0x41b33334, 0xc1bddde0},
+{'l', 0x41711110, 0x00000000},
+{'l', 0xc1e11112, 0x41f0888a},
+{'l', 0x41fb3336, 0x42284445},
+{'l', 0xc168888c, 0x00000000},
+{'@', 0x0000006c, 0x00002133},/*        l        x-advance: 33.199219 */
+{'M', 0x41b66667, 0xc2ccccce},
+{'l', 0x00000000, 0x42ccccce},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2ccccce},
+{'l', 0x41466667, 0x00000000},
+{'@', 0x0000006d, 0x000077bb},/*        m        x-advance: 119.730469 */
+{'M', 0x42191112, 0xc27c4445},
+{'9', 0x0000ff9f, 0x0051ff7c},
+{'l', 0x00000000, 0x42537778},
+{'l', 0xc1466667, 0x00000000},
+{'4', 0xfdbf0000, 0x0000005d},
+{'l', 0x3eaaaa80, 0x40fbbbc0},
+{'q', 0x40f9999c, 0xc1133330},
+{0, 0x41aaaaab, 0xc1133330},
+{'8', 0x16620037, 0x4642152b},
+{'8', 0xbd4ad71c, 0xe76ce72e},
+{'q', 0x41399998, 0x00000000},
+{0, 0x418eeef0, 0x40c66660},
+{'9', 0x00310032, 0x009e0032},
+{'4', 0x017b0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23e2223},
+{'8', 0x9edfb800, 0xe6a7e6df},
+{'8', 0x23a300c5, 0x55d923de},
+{'4', 0x017e0000, 0x0000ff9e},
+{'l', 0x00000000, 0xc23ddddf},
+{'8', 0xa0dfbd00, 0xe4a7e4df},
+{'@', 0x0000006e, 0x00004b66},/*        n        x-advance: 75.398438 */
+{'M', 0x421d5556, 0xc27c4445},
+{'8', 0x19ad00d1, 0x42c719dc},
+{'l', 0x00000000, 0x424e2223},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfdbf0000, 0x0000005d},
+{'l', 0x3eccccc0, 0x41100004},
+{'q', 0x41033334, 0xc1255554},
+{0, 0x41ac4446, 0xc1255554},
+{'q', 0x41299998, 0x00000000},
+{0, 0x41866666, 0x40bdddd0},
+{'9', 0x002f0032, 0x009f0032},
+{'4', 0x017c0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23d999a},
+{'8', 0xa0e3bd00, 0xe4abe4e3},
+{'@', 0x0000006f, 0x00004ddd},/*        o        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'q', 0xc0a22224, 0x40fddde0},
+{0, 0xc0a22224, 0x41944444},
+{'l', 0x00000000, 0x3fc44440},
+{'@', 0x00000070, 0x00004caa},/*        p        x-advance: 76.664062 */
+{'M', 0x42295556, 0x3faaaaab},
+{'9', 0x0000ff98, 0xffbeff5c},
+{'l', 0x00000000, 0x420aeef0},
+{'l', 0xc1466666, 0xb6000000},
+{'4', 0xfce20000, 0x0000005a},
+{'l', 0x3f1999a0, 0x40fddde0},
+{'q', 0x40f33334, 0xc1144440},
+{0, 0x41a6eeef, 0xc1144440},
+{'q', 0x415aaaac, 0x00000000},
+{0, 0x41a77778, 0x41222220},
+{'9', 0x0051003a, 0x00d5003a},
+{'l', 0x00000000, 0x3fb33320},
+{'q', 0x00000000, 0x417cccd0},
+{0, 0xc0eaaaa8, 0x41d1999b},
+{'9', 0x0053ffc6, 0x0053ff5b},
+{'m', 0xc0733330, 0xc280cccd},
+{'9', 0x0000ffa7, 0x004fff7a},
+{'l', 0x00000000, 0x420a2222},
+{'q', 0x40b55558, 0x411ccccf},
+{0, 0x41877778, 0x411ccccf},
+{'q', 0x41200000, 0x00000000},
+{0, 0x4169999c, 0xc0fbbbbe},
+{'9', 0xffc20025, 0xff6c0025},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc12bbbbc},
+{0, 0xc0955558, 0xc1944446},
+{'q', 0xc0933338, 0xc0fbbbb8},
+{0, 0xc16bbbbc, 0xc0fbbbb8},
+{'@', 0x00000071, 0x00004d99},/*        q        x-advance: 77.597656 */
+{'M', 0x42866667, 0xc2904445},
+{'4', 0x031e0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc209999a},
+{'q', 0xc0ecccd0, 0x40ffffff},
+{0, 0xc19eeef0, 0x40ffffff},
+{'q', 0xc1555556, 0xb4000000},
+{0, 0xc1a80000, 0xc1266668},
+{'9', 0xffadffc4, 0xff2fffc4},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f33335, 0xc1d55556},
+{'q', 0x40f33334, 0xc1222220},
+{0, 0x41a91112, 0xc1222220},
+{'9', 0x00000066, 0x004400a2},
+{'4', 0xffc60004, 0x0000005a},
+{'m', 0xc241dddf, 0x42137778},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40933334, 0x4194ccce},
+{'q', 0x40955558, 0x40fbbbbe},
+{0, 0x416aaaae, 0x40fbbbbe},
+{'9', 0x00000058, 0xffb30086},
+{'l', 0x00000000, 0xc20d999a},
+{'q', 0xc0b99998, 0xc1177778},
+{0, 0xc1855556, 0xc1177778},
+{'q', 0xc1222222, 0x00000000},
+{0, 0xc16cccce, 0x41000000},
+{'q', 0xc0933334, 0x40fddde0},
+{0, 0xc0933334, 0x4195ddde},
+{'l', 0x00000000, 0x3faaaaa0},
+{'@', 0x00000072, 0x00002e44},/*        r        x-advance: 46.265625 */
+{'M', 0x4218cccd, 0xc2766667},
+{'9', 0x0000ffa0, 0x0053ff7d},
+{'l', 0x00000000, 0x424cccce},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfdbf0000, 0x00000060},
+{'l', 0x3e888880, 0x41044448},
+{'q', 0x40bddde0, 0xc1199998},
+{0, 0x41891112, 0xc1199998},
+{'9', 0x0000001b, 0x0007002b},
+{'l', 0xbd888a00, 0x4137777c},
+{'q', 0xc02eeef0, 0xbf088880},
+{0, 0xc0c00000, 0xbf088880},
+{'[', 0x00220072, 0x00000111},/*kerning*/
+{'[', 0x00270072, 0x00000111},/*kerning*/
+{'[', 0x00660072, 0x00000100},/*kerning*/
+{'[', 0x00740072, 0x00000355},/*kerning*/
+{'[', 0x00760072, 0x00000133},/*kerning*/
+{'[', 0x00770072, 0x00000122},/*kerning*/
+{'[', 0x00790072, 0x00000133},/*kerning*/
+{'[', 0x00fd0072, 0x00000133},/*kerning*/
+{'[', 0x00ff0072, 0x00000133},/*kerning*/
+{'[', 0x201c0072, 0x00000111},/*kerning*/
+{'[', 0x201d0072, 0x00000111},/*kerning*/
+{'@', 0x00000073, 0x00004677},/*        s        x-advance: 70.464844 */
+{'M', 0x424d999a, 0xc1991112},
+{'8', 0xc8e9e100, 0xd696e7ea},
+{'q', 0xc1411112, 0xc01dddd8},
+{0, 0xc199999a, 0xc0e44444},
+{'q', 0xc0e44446, 0xc0977778},
+{0, 0xc0e44446, 0xc15bbbbc},
+{'q', 0x00000000, 0xc108888c},
+{0, 0x40e8888a, 0xc16cccd0},
+{'q', 0x40eaaaac, 0xc0c88880},
+{0, 0x419bbbbd, 0xc0c88880},
+{'q', 0x414eeef0, 0x00000000},
+{0, 0x41a1999a, 0x40d33330},
+{'9', 0x0034003a, 0x007f003a},
+{'l', 0xc1455558, 0x00000000},
+{'8', 0xbde1dd00, 0xe0a7e0e1},
+{'8', 0x1aa800c3, 0x3ae61ae6},
+{'8', 0x33181f00, 0x25691319},
+{'q', 0x41544448, 0x40400000},
+{0, 0x419ddde0, 0x40fbbbb8},
+{'q', 0x40d11110, 0x409bbbc0},
+{0, 0x40d11110, 0x415bbbbe},
+{'q', 0x00000000, 0x41188889},
+{0, 0xc0f55558, 0x41777778},
+{'q', 0xc0f33330, 0x40bddddf},
+{0, 0xc1a1999a, 0x40bddddf},
+{'q', 0xc1655556, 0xb4000000},
+{0, 0xc1af7778, 0xc0eaaaac},
+{'9', 0xffc6ffc4, 0xff7effc4},
+{'l', 0x41466666, 0x00000000},
+{'8', 0x542e3d03, 0x165a162c},
+{'8', 0xe95c003c, 0xc520e920},
+{'@', 0x00000074, 0x00002caa},/*        t        x-advance: 44.664062 */
+{'M', 0x421fbbbc, 0x00000000},
+{'8', 0x0ab40adf, 0xdfa300ca},
+{'9', 0xffdfffda, 0xff88ffda},
+{'l', 0x00000000, 0xc232eef0},
+{'l', 0xc1533334, 0x00000000},
+{'l', 0xb4c00000, 0xc1177778},
+{'l', 0x41533334, 0x00000000},
+{'l', 0x00000000, 0xc18c4444},
+{'l', 0x41455556, 0x00000000},
+{'l', 0x00000000, 0x418c4444},
+{'l', 0x41577778, 0x00000000},
+{'4', 0x004b0000, 0x0000ff95},
+{'l', 0x00000000, 0x42333334},
+{'8', 0x38132c00, 0x0c2c0c13},
+{'q', 0x40155550, 0x00000000},
+{0, 0x40b99998, 0xbf4cccd0},
+{'l', 0x3d888800, 0x41211112},
+{'@', 0x00000075, 0x00004b44},/*        u        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'l', 0x41466664, 0x00000000},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc13ccccc, 0x00000000},
+{'@', 0x00000076, 0x00004222},/*        v        x-advance: 66.132812 */
+{'M', 0x427eaaac, 0xc2904445},
+{'l', 0xc1cf777a, 0x42904445},
+{'l', 0xc1166666, 0x00000000},
+{'l', 0xc1d11111, 0xc2904445},
+{'l', 0x414aaaab, 0x00000000},
+{'l', 0x4192aaaa, 0x425d1112},
+{'l', 0x418eeef0, 0xc25d1112},
+{'l', 0x4149999c, 0x00000000},
+{'[', 0x00220076, 0x00000100},/*kerning*/
+{'[', 0x00270076, 0x00000100},/*kerning*/
+{'[', 0x00660076, 0x000000dd},/*kerning*/
+{'[', 0x03c00076, 0x000000bb},/*kerning*/
+{'[', 0x201c0076, 0x00000100},/*kerning*/
+{'[', 0x201d0076, 0x00000100},/*kerning*/
+{'@', 0x00000077, 0x00006699},/*        w        x-advance: 102.597656 */
+{'M', 0x42c6cccd, 0xc2904445},
+{'l', 0xc1a77778, 0x42904445},
+{'l', 0xc1200000, 0x00000000},
+{'l', 0xc18c4444, 0xc25a6667},
+{'l', 0xc1888888, 0x425a6667},
+{'l', 0xc1211112, 0x00000000},
+{'l', 0xc1a77778, 0xc2904445},
+{'l', 0x41455556, 0x00000000},
+{'l', 0x41633334, 0x42577778},
+{'l', 0x41866666, 0xc2577778},
+{'l', 0x411eeef0, 0x00000000},
+{'l', 0x4188888a, 0x425c0001},
+{'l', 0x415eeef0, 0xc25c0001},
+{'l', 0x41444440, 0x00000000},
+{'@', 0x00000078, 0x000043bb},/*        x        x-advance: 67.730469 */
+{'M', 0x418dddde, 0xc2904445},
+{'l', 0x417cccd0, 0x41d22224},
+{'l', 0x41800000, 0xc1d22224},
+{'l', 0x41677774, 0x00000000},
+{'l', 0xc1bccccc, 0x420e6667},
+{'l', 0x41c2aaac, 0x42122223},
+{'l', 0xc1644444, 0x00000000},
+{'l', 0xc1855556, 0xc1d88889},
+{'l', 0xc1855556, 0x41d88889},
+{'l', 0xc1655557, 0x00000000},
+{'l', 0x41c22222, 0xc2122223},
+{'l', 0xc1bc4444, 0xc20e6667},
+{'l', 0x41633334, 0x00000000},
+{'@', 0x00000079, 0x00004099},/*        y        x-advance: 64.597656 */
+{'M', 0x42080000, 0x41322223},
+{'9', 0x0087ffcd, 0x008fff66},
+{'l', 0xc0044448, 0x3d888800},
+{'9', 0x0000ffe1, 0xfff8ffc9},
+{'4', 0xffb00000, 0x0002001a},
+{'8', 0xec4e0032, 0xb62eec1c},
+{'l', 0x402aaaa8, 0xc0eaaaac},
+{'l', 0xc1cdddde, 0xc28eaaab},
+{'l', 0x41577778, 0x00000000},
+{'l', 0x41908888, 0x42580001},
+{'l', 0x4185dde0, 0xc2580001},
+{'l', 0x41533334, 0x00000000},
+{'l', 0xc1e7777a, 0x42a68889},
+{'[', 0x00220079, 0x00000100},/*kerning*/
+{'[', 0x00270079, 0x00000100},/*kerning*/
+{'[', 0x00660079, 0x000000dd},/*kerning*/
+{'[', 0x03c00079, 0x000000bb},/*kerning*/
+{'[', 0x201c0079, 0x00000100},/*kerning*/
+{'[', 0x201d0079, 0x00000100},/*kerning*/
+{'@', 0x0000007a, 0x000043bb},/*        z        x-advance: 67.730469 */
+{'M', 0x40ceeef0, 0xc277bbbd},
+{'l', 0x00000000, 0xc1233334},
+{'l', 0x425aeef0, 0x00000000},
+{'l', 0x00000000, 0x410bbbc0},
+{'l', 0xc220888a, 0x42551111},
+{'l', 0x42284445, 0x35800000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc264cccd, 0x00000000},
+{'l', 0xb5000000, 0xc1111112},
+{'l', 0x421eeeef, 0xc2537778},
+{'l', 0xc21ccccd, 0xb6800000},
+{'@', 0x0000007b, 0x00002e33},/*        {        x-advance: 46.199219 */
+{'M', 0x40888889, 0xc210cccd},
+{'l', 0x00000000, 0xc11aaaac},
+{'9', 0x00000071, 0xff7f0071},
+{'l', 0x00000000, 0xc1577774},
+{'q', 0x00000000, 0xc1288890},
+{0, 0x40a22220, 0xc1966668},
+{'9', 0xffbe0028, 0xff9f0095},
+{'l', 0x40266670, 0x40f33340},
+{'q', 0xc0fddde0, 0x401ddde0},
+{0, 0xc12eeef0, 0x410dddd8},
+{'9', 0x0032ffe8, 0x0074ffe8},
+{'l', 0x00000000, 0x41533330},
+{'q', 0x00000000, 0x41744444},
+{0, 0xc1322222, 0x41aa2222},
+{'9', 0x002e0059, 0x00aa0059},
+{'l', 0x00000000, 0x41511112},
+{'q', 0x00000000, 0x41033334},
+{0, 0x40400008, 0x4168888a},
+{'9', 0x00320018, 0x00460057},
+{'l', 0xc0266670, 0x40f55558},
+{'q', 0xc159999a, 0xc0777778},
+{0, 0xc1955556, 0xc1433334},
+{'9', 0xffbeffd8, 0xff6affd8},
+{'l', 0x00000000, 0xc1555556},
+{'q', 0x00000000, 0xc1822222},
+{0, 0xc1622224, 0xc1822222},
+{'@', 0x0000007c, 0x00002155},/*        |        x-advance: 33.332031 */
+{'M', 0x41ad5556, 0xc2c22223},
+{'l', 0x00000000, 0x42e62223},
+{'l', 0xc11eeef0, 0x00000000},
+{'l', 0x00000000, 0xc2e62223},
+{'l', 0x411eeef0, 0x00000000},
+{'@', 0x0000007d, 0x00002e33},/*        }        x-advance: 46.199219 */
+{'M', 0x42273334, 0xc2377778},
+{'l', 0x00000000, 0x411aaaac},
+{'9', 0x0000ff8f, 0x0081ff8f},
+{'l', 0x00000000, 0x41577778},
+{'q', 0x00000000, 0x41277778},
+{0, 0xc0a22224, 0x41966667},
+{'9', 0x0042ffd8, 0x0061ff6b},
+{'l', 0xc026666a, 0xc0f55558},
+{'q', 0x40fbbbbd, 0xc01ddddc},
+{0, 0x412dddde, 0xc10ccccc},
+{'9', 0xffce0018, 0xff8c0018},
+{'l', 0x00000000, 0xc1544444},
+{'q', 0x00000000, 0xc17aaaae},
+{0, 0x41422223, 0xc1a91113},
+{'9', 0xffd5ff9f, 0xff57ff9f},
+{'l', 0x00000000, 0xc1544440},
+{'q', 0x00000000, 0xc1033338},
+{0, 0xc0400000, 0xc1688890},
+{'9', 0xffcdffe8, 0xffbaffa9},
+{'l', 0x40266669, 0xc0f33340},
+{'q', 0x415aaaab, 0x40777780},
+{0, 0x41955555, 0x41433338},
+{'9', 0x00420028, 0x00960028},
+{'l', 0x00000000, 0x41599998},
+{'q', 0x00000000, 0x41800000},
+{0, 0x41622224, 0x41800000},
+{'@', 0x0000007e, 0x00005cdd},/*        ~        x-advance: 92.863281 */
+{'M', 0x42942223, 0xc24f3334},
+{'l', 0x41222220, 0xbd888800},
+{'q', 0x00000000, 0x41244444},
+{0, 0xc0c22220, 0x418d5556},
+{'q', 0xc0c00000, 0x40eaaaa8},
+{0, 0xc178888c, 0x40eaaaa8},
+{'8', 0xeeae00d2, 0xcab4eedd},
+{'8', 0xdacee7e5, 0xf3cff3ea},
+{'8', 0x1cc100d8, 0x4eea1cea},
+{'l', 0xc12bbbbc, 0x3e088880},
+{'q', 0x00000000, 0xc127777a},
+{0, 0x40c00002, 0xc18bbbbd},
+{'q', 0x40c22222, 0xc0e00000},
+{0, 0x41788889, 0xc0e00000},
+{'8', 0x1351002d, 0x354b1223},
+{'8', 0x2c3b2328, 0x09290913},
+{'8', 0xe1420029, 0xaf19e119},
+{'@', 0x000000a0, 0x000021dd},/*                 x-advance: 33.863281 */
+{'@', 0x000000a1, 0x00002155},/*        ¡        x-advance: 33.332031 */
+{'M', 0x41b00001, 0xc275999a},
+{'8', 0x10d510f2, 0xf0d500e4},
+{'8', 0xd8f2f0f2, 0xd90ee900},
+{'8', 0xf02bf00f, 0x102b001c},
+{'8', 0x270e100e, 0x28f21700},
+{'m', 0xc138888a, 0x42aaeeef},
+{'l', 0x3f6eeef0, 0xc28b5556},
+{'l', 0x41322223, 0x36800000},
+{'l', 0x3f6eeee0, 0x428b5556},
+{'l', 0xc1500000, 0xb6000000},
+{'@', 0x000000a2, 0x00004abb},/*        ¢        x-advance: 74.730469 */
+{'M', 0x4287bbbc, 0xc1b66667},
+{'q', 0xbeeeef00, 0x41077778},
+{0, 0xc0e22220, 0x41733334},
+{'9', 0x0035ffcc, 0x0043ff7f},
+{'4', 0x007b0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc179999a},
+{'q', 0xc14cccd0, 0xc019999b},
+{0, 0xc198888a, 0xc1477778},
+{'9', 0xffb0ffcf, 0xff49ffcf},
+{'l', 0x00000000, 0xc0333330},
+{'q', 0x00000000, 0xc14ddde0},
+{0, 0x40c88889, 0xc1b77778},
+{'9', 0xffb00032, 0xff9d0098},
+{'4', 0xff880000, 0x00000063},
+{'l', 0x00000000, 0x416cccc8},
+{'q', 0x41255558, 0x3fd55580},
+{0, 0x41844446, 0x410cccd0},
+{'9', 0x00380031, 0x00870035},
+{'l', 0xc13bbbbc, 0x00000000},
+{'8', 0xa6d8cbfc, 0xdba1dbdc},
+{'8', 0x1ea100c4, 0x4ed01ede},
+{'9', 0x002ffff3, 0x0061fff3},
+{'l', 0x00000000, 0x40333330},
+{'8', 0x620d3200, 0x4e302f0d},
+{'8', 0x1e601e22, 0xe15c0034},
+{'q', 0x409ddde0, 0xc07bbbc0},
+{0, 0x40aeeef0, 0xc1211112},
+{'l', 0x413bbbbc, 0x00000000},
+{'@', 0x000000a3, 0x00004f66},/*        £        x-advance: 79.398438 */
+{'M', 0x40caaaab, 0x00000000},
+{'4', 0xffad0000, 0x00000029},
+{'8', 0xce26fa1b, 0xb10bd40b},
+{'l', 0xbf088880, 0xc16cccce},
+{'l', 0xc1311112, 0x00000000},
+{'4', 0xffad0000, 0x00000055},
+{'l', 0xbf1999a0, 0xc18a2222},
+{'q', 0x00000000, 0xc15cccd0},
+{0, 0x41066666, 0xc1abbbbc},
+{'q', 0x4107777a, 0xc0f55550},
+{0, 0x41a9999b, 0xc0f55550},
+{'q', 0x41511110, 0x00000000},
+{0, 0x41a22224, 0x40e66660},
+{'9', 0x0039003a, 0x0095003a},
+{'l', 0xc14ccccc, 0x00000000},
+{'8', 0xa2dabe00, 0xe4a8e4da},
+{'8', 0x26a700cc, 0x6edc26dc},
+{'l', 0x3f1999a0, 0x418a2222},
+{'l', 0x41aa2222, 0x00000000},
+{'4', 0x00530000, 0x0000ff59},
+{'l', 0x3f0888a0, 0x416bbbbe},
+{'9', 0x00510000, 0x0082ffe0},
+{'l', 0x42433334, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc289bbbc, 0x00000000},
+{'@', 0x000000a4, 0x00006166},/*        ¤        x-advance: 97.398438 */
+{'M', 0x42b6cccd, 0xc0eaaaab},
+{'4', 0x0049ffba, 0xffb6ffb8},
+{'q', 0xc12bbbc0, 0x410ccccd},
+{0, 0xc1c44446, 0x410ccccd},
+{'9', 0x0000ff93, 0xffbbff3e},
+{'4', 0x0048ffb9, 0xffb8ffbb},
+{'l', 0x41144445, 0xc1166666},
+{'q', 0xc0dddde0, 0xc129999a},
+{0, 0xc0dddde0, 0xc1be6668},
+{'9', 0xff920000, 0xff3b003b},
+{'4', 0xffb0ffb2, 0xffb80045},
+{'l', 0x411bbbbb, 0x411eeef0},
+{'q', 0x41266668, 0xc0fddde0},
+{0, 0x41bc4446, 0xc0fddde0},
+{'9', 0x00000069, 0x004000bd},
+{'4', 0xffaf004f, 0x00490046},
+{'l', 0xc1211110, 0x41244448},
+{'q', 0x40eaaab0, 0x412bbbb8},
+{0, 0x40eaaab0, 0x41c33332},
+{'9', 0x00680000, 0x00bcffcb},
+{'6', 0x004c004b, 0xffa3fe0e},
+{'q', 0x41044448, 0x410ddddf},
+{0, 0x419f777a, 0x410ddddf},
+{'q', 0x413aaaa8, 0x00000000},
+{0, 0x419eeeee, 0xc10ddddf},
+{'q', 0x41044448, 0xc10eeeee},
+{0, 0x41044448, 0xc1ac4445},
+{'q', 0x00000000, 0xc1499998},
+{0, 0xc1044448, 0xc1ab3334},
+{'q', 0xc1033334, 0xc10ddddc},
+{0, 0xc19eeeee, 0xc10ddddc},
+{'q', 0xc13aaaac, 0x00000000},
+{0, 0xc19f7779, 0x410ddddc},
+{'q', 0xc1044444, 0x410cccd0},
+{0, 0xc1044444, 0x41ab3334},
+{'q', 0x00000000, 0x4149999c},
+{0, 0x41044444, 0x41ac4445},
+{'@', 0x000000a5, 0x000047bb},/*        ¥        x-advance: 71.730469 */
+{'M', 0x427eaaac, 0xc1abbbbc},
+{'l', 0xc1ad5556, 0x00000000},
+{'l', 0x00000000, 0x41abbbbc},
+{'l', 0xc14cccd0, 0x00000000},
+{'l', 0x00000000, 0xc1abbbbc},
+{'l', 0xc1a9999a, 0x00000000},
+{'l', 0x00000000, 0xc1044446},
+{'l', 0x41a9999a, 0x00000000},
+{'l', 0x00000000, 0xc1311112},
+{'l', 0xc1a9999a, 0x00000000},
+{'l', 0x00000000, 0xc1055554},
+{'l', 0x418bbbbc, 0x00000000},
+{'l', 0xc1c3bbbc, 0xc23fbbbd},
+{'l', 0x41677778, 0x00000000},
+{'l', 0x41a3bbbc, 0x4230ccce},
+{'l', 0x41a44446, 0xc230ccce},
+{'l', 0x41633334, 0x00000000},
+{'l', 0xc1c2aaac, 0x423fbbbd},
+{'l', 0x418aaaac, 0x00000000},
+{'l', 0x00000000, 0x41055554},
+{'l', 0xc1acccce, 0x00000000},
+{'l', 0xbd888800, 0x3e088900},
+{'l', 0x00000000, 0x412eeeee},
+{'l', 0x41ad5556, 0x00000000},
+{'l', 0x00000000, 0x41044446},
+{'@', 0x000000a6, 0x000020cc},/*        ¦        x-advance: 32.796875 */
+{'M', 0x41b1999a, 0xc2c22223},
+{'l', 0x00000000, 0x424a2223},
+{'4', 0x0000ff9e, 0xfe6c0000},
+{'6', 0x00000062, 0x03980000},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc2533334},
+{'l', 0x41455556, 0x00000000},
+{'l', 0x00000000, 0x42533334},
+{'@', 0x000000a7, 0x000053bb},/*        §        x-advance: 83.730469 */
+{'M', 0x4292aaab, 0x4109999a},
+{'q', 0x00000000, 0x4139999a},
+{0, 0xc10ddde0, 0x41900001},
+{'q', 0xc10ddddc, 0x40ccccc8},
+{0, 0xc1bccccc, 0x40ccccc8},
+{'q', 0xc1088888, 0x00000000},
+{0, 0xc1844445, 0xc02aaaa8},
+{'q', 0xc1000000, 0xc02eeee8},
+{0, 0xc1522222, 0xc1100000},
+{'9', 0xffceffd7, 0xff78ffd7},
+{'l', 0x41455556, 0xbe088860},
+{'q', 0x00000000, 0x4129999a},
+{0, 0x40e88888, 0x416aaaac},
+{'q', 0x40e88888, 0x40822224},
+{0, 0x41733334, 0x40822224},
+{'q', 0x4119999c, 0x00000000},
+{0, 0x416ddde0, 0xc0822224},
+{'8', 0xb02ae02a, 0xb4d8cf00},
+{'q', 0xc09ddde0, 0xc05dddde},
+{0, 0xc1933334, 0xc0f11112},
+{'q', 0xc169999a, 0xc07bbbbc},
+{0, 0xc1b6eef0, 0xc11ddddf},
+{'q', 0xc1044444, 0xc0c00000},
+{0, 0xc1044444, 0xc193bbbb},
+{'q', 0x00000000, 0xc149999c},
+{0, 0x41422222, 0xc1922224},
+{'q', 0xc1122222, 0xc0d55558},
+{0, 0xc1122222, 0xc198888a},
+{'q', 0x00000000, 0xc1311110},
+{0, 0x410dddde, 0xc18ddddc},
+{'q', 0x410dddde, 0xc0d55560},
+{0, 0x41bddddf, 0xc0d55560},
+{'q', 0x41744444, 0x00000000},
+{0, 0x41c00002, 0x40eeeef0},
+{'9', 0x003b0045, 0x00aa0045},
+{'l', 0xc1455554, 0x00000000},
+{'q', 0x00000000, 0xc0f77770},
+{0, 0xc0a88888, 0xc1522220},
+{'q', 0xc0a66668, 0xc0aeeef0},
+{0, 0xc1722224, 0xc0aeeef0},
+{'q', 0xc1277778, 0x00000000},
+{0, 0xc1766668, 0x40866660},
+{'8', 0x4fda21da, 0x4e233400},
+{'q', 0x408cccd0, 0x40511110},
+{0, 0x419b3334, 0x40eeeef0},
+{'q', 0x41700000, 0x40866668},
+{0, 0x41b6eeee, 0x41211110},
+{'q', 0x40fbbbc0, 0x40bbbbc0},
+{0, 0x40fbbbc0, 0x41908889},
+{'q', 0x00000000, 0x414aaaac},
+{0, 0xc1455558, 0x41922223},
+{'9', 0x0034004a, 0x0098004a},
+{'m', 0xc1a08888, 0xc1c3bbbc},
+{'8', 0x9b55ea55, 0xb2d8ce00},
+{'q', 0xc0a22228, 0xc0666670},
+{0, 0xc195dde0, 0xc0f55558},
+{'8', 0xe4a8f2cc, 0x25c20ad6},
+{'8', 0x40ec1bec, 0x50233400},
+{'q', 0x408cccd0, 0x405999a0},
+{0, 0x41944446, 0x40eaaaac},
+{'q', 0x40e00000, 0x3ff77780},
+{0, 0x41388888, 0x406aaaac},
+{'@', 0x000000a8, 0x00003922},/*        ¨        x-advance: 57.132812 */
+{'M', 0x40d77778, 0xc2b6cccd},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5ddde, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000a9, 0x00006b44},/*        ©        x-advance: 107.265625 */
+{'M', 0x41488889, 0xc293ddde},
+{'q', 0x40ccccce, 0xc1355558},
+{0, 0x41891112, 0xc18eeef0},
+{'q', 0x412bbbbc, 0xc0d33330},
+{0, 0x41be6668, 0xc0d33330},
+{'q', 0x41511114, 0x00000000},
+{0, 0x41bdddde, 0x40d33330},
+{'q', 0x412bbbb8, 0x40d11110},
+{0, 0x41891110, 0x418eeef0},
+{'q', 0x40ccccd0, 0x41344440},
+{0, 0x40ccccd0, 0x41caaaaa},
+{'q', 0x00000000, 0x41611110},
+{0, 0xc0ccccd0, 0x41cb3334},
+{'q', 0xc0ccccd0, 0x41355555},
+{0, 0xc1891110, 0x41900000},
+{'q', 0xc12aaaa8, 0x40d33335},
+{0, 0xc1bdddde, 0x40d33335},
+{'q', 0xc1511114, 0x00000000},
+{0, 0xc1be6668, 0xc0d33334},
+{'q', 0xc12bbbbc, 0xc0d55557},
+{0, 0xc1891112, 0xc1900000},
+{'q', 0xc0cccccb, 0xc1355558},
+{0, 0xc0cccccb, 0xc1cb3334},
+{'9', 0xff900000, 0xff360033},
+{'m', 0x40d33336, 0x423aeeef},
+{'q', 0x40aaaaa8, 0x41188888},
+{0, 0x41655554, 0x41722222},
+{'q', 0x41111114, 0x40b11112},
+{0, 0x41a00002, 0x40b11112},
+{'q', 0x412eeeec, 0x00000000},
+{0, 0x419eeeee, 0xc0b11112},
+{'q', 0x41100000, 0xc0b33334},
+{0, 0x41655558, 0xc1722222},
+{'q', 0x40aaaab0, 0xc1188888},
+{0, 0x40aaaab0, 0xc1ab3334},
+{'q', 0x00000000, 0xc13ddde0},
+{0, 0xc0aaaab0, 0xc1aaaaaa},
+{'q', 0xc0aaaab0, 0xc1177778},
+{0, 0xc1655558, 0xc1700000},
+{'q', 0xc10eeef0, 0xc0b11120},
+{0, 0xc19eeeee, 0xc0b11120},
+{'q', 0xc12eeef0, 0x00000000},
+{0, 0xc1a00002, 0x40b11120},
+{'q', 0xc1100000, 0x40b11110},
+{0, 0xc1655554, 0x41700000},
+{'q', 0xc0aaaaac, 0x41177774},
+{0, 0xc0aaaaac, 0x41aaaaaa},
+{'9', 0x005e0000, 0x00ab002a},
+{'m', 0x42373333, 0xc14aaaac},
+{'l', 0x411bbbc0, 0x00000000},
+{'q', 0x00000000, 0x4128888a},
+{0, 0xc0c00000, 0x417bbbbc},
+{'q', 0xc0bddde0, 0x40a66668},
+{0, 0xc1811112, 0x40a66668},
+{'q', 0xc129999c, 0x00000000},
+{0, 0xc186eef0, 0xc0e44444},
+{'9', 0xffc7ffcf, 0xff6bffcf},
+{'l', 0x00000000, 0xc0f55550},
+{'q', 0x00000000, 0xc1377778},
+{0, 0x40c66664, 0xc194cccc},
+{'q', 0x40c88888, 0xc0e66670},
+{0, 0x4186eef0, 0xc0e66670},
+{'q', 0x41233334, 0x00000000},
+{0, 0x4181999a, 0x40a66670},
+{'9', 0x00290030, 0x007d0030},
+{'l', 0xc11bbbc0, 0x00000000},
+{'8', 0x9e9d9e00, 0x26b000cc},
+{'9', 0x0026ffe5, 0x0062ffe5},
+{'l', 0x00000000, 0x40f77778},
+{'8', 0x631b3c00, 0x2650261b},
+{'8', 0xea4a0031, 0xb419ea19},
+{'@', 0x000000aa, 0x00003d11},/*        ª        x-advance: 61.066406 */
+{'M', 0x42251112, 0xc23c4445},
+{'l', 0xbf911120, 0xc0999998},
+{'8', 0x2d932dd5, 0xe09e00c0},
+{'q', 0xc088888a, 0xc0844448},
+{0, 0xc088888a, 0xc1300004},
+{'9', 0xff880000, 0xff8500ab},
+{'4', 0x00000043, 0xffe40000},
+{'8', 0xb9beb900, 0x38b200b2},
+{'l', 0xc12bbbbd, 0xbf5ddd80},
+{'q', 0x00000000, 0xc0d77780},
+{0, 0x40b33336, 0xc1322228},
+{'q', 0x40b55554, 0xc08cccd0},
+{0, 0x41700000, 0xc08cccd0},
+{'8', 0x256e0044, 0x6d2a242a},
+{'l', 0x00000000, 0x41a7777a},
+{'9', 0x00360000, 0x0060000d},
+{'6', 0x0000ffa8, 0xffbfff9e},
+{'8', 0xf62e0017, 0xe726f518},
+{'4', 0xffb50000, 0x0000ffc7},
+{'8', 0x12b900d0, 0x2bea12ea},
+{'q', 0x00000000, 0x40c66668},
+{0, 0x41055556, 0x40c66668},
+{'@', 0x000000ab, 0x00004011},/*        «        x-advance: 64.066406 */
+{'M', 0x41d33334, 0xc1200001},
+{'l', 0xc19d5556, 0xc1cf7778},
+{'l', 0x00000000, 0xbfa22220},
+{'l', 0x419d5556, 0xc1ceeef0},
+{'l', 0x41177778, 0x00000000},
+{'4', 0x00d4ff77, 0x00d40089},
+{'6', 0x0000ffb5, 0x000000b0},
+{'l', 0xc19d5557, 0xc1cf7778},
+{'l', 0x00000000, 0xbfa22220},
+{'l', 0x419d5557, 0xc1ceeef0},
+{'l', 0x41177778, 0x00000000},
+{'l', 0xc189999c, 0x41d44444},
+{'l', 0x4189999c, 0x41d44446},
+{'l', 0xc1177778, 0xb5800000},
+{'@', 0x000000ac, 0x00004b99},/*        ¬        x-advance: 75.597656 */
+{'M', 0x41077778, 0xc255999a},
+{'l', 0x425d999a, 0x00000000},
+{'l', 0x00000000, 0x41e2aaab},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc18c4445},
+{'l', 0xc22c4445, 0x00000000},
+{'l', 0x00000000, 0xc12ccccc},
+{'@', 0x000000ad, 0x000025bb},/*        ­        x-advance: 37.730469 */
+{'M', 0x420c4445, 0xc2395556},
+{'l', 0x00000000, 0x41222224},
+{'l', 0xc2022223, 0x00000000},
+{'l', 0x35400000, 0xc1222224},
+{'l', 0x42022223, 0x00000000},
+{'@', 0x000000ae, 0x00006b55},/*        ®        x-advance: 107.332031 */
+{'M', 0x41477778, 0xc293ddde},
+{'q', 0x40cccccc, 0xc1355558},
+{0, 0x41891112, 0xc18eeef0},
+{'q', 0x412bbbbc, 0xc0d33330},
+{0, 0x41be6666, 0xc0d33330},
+{'q', 0x41500000, 0x00000000},
+{0, 0x41bddde0, 0x40d33330},
+{'q', 0x412bbbb8, 0x40d11110},
+{0, 0x41891110, 0x418eeef0},
+{'q', 0x40ccccd0, 0x41344440},
+{0, 0x40ccccd0, 0x41caaaaa},
+{'q', 0x00000000, 0x41611110},
+{0, 0xc0ccccd0, 0x41cb3334},
+{'q', 0xc0ccccd0, 0x41355555},
+{0, 0xc1891110, 0x41900000},
+{'q', 0xc12bbbc0, 0x40d33335},
+{0, 0xc1bddde0, 0x40d33335},
+{'q', 0xc1511110, 0x00000000},
+{0, 0xc1be6666, 0xc0d33334},
+{'q', 0xc12bbbbe, 0xc0d55557},
+{0, 0xc1891112, 0xc1900000},
+{'q', 0xc0cccccd, 0xc1355558},
+{0, 0xc0cccccd, 0xc1cb3334},
+{'9', 0xff900000, 0xff360033},
+{'m', 0x40d33334, 0x423aeeef},
+{'q', 0x40aaaaac, 0x41188888},
+{0, 0x41655556, 0x41722222},
+{'q', 0x41100000, 0x40b11112},
+{0, 0x41a00000, 0x40b11112},
+{'q', 0x412ddde0, 0x00000000},
+{0, 0x419eeef0, 0xc0b11112},
+{'q', 0x41100000, 0xc0b33334},
+{0, 0x41655558, 0xc1722222},
+{'q', 0x40aaaab0, 0xc1188888},
+{0, 0x40aaaab0, 0xc1ab3334},
+{'q', 0x00000000, 0xc13ddde0},
+{0, 0xc0aaaab0, 0xc1aaaaaa},
+{'q', 0xc0aaaab0, 0xc1177778},
+{0, 0xc1655558, 0xc1700000},
+{'q', 0xc1100000, 0xc0b11120},
+{0, 0xc19eeef0, 0xc0b11120},
+{'q', 0xc1300000, 0x00000000},
+{0, 0xc1a00000, 0x40b11120},
+{'q', 0xc1100000, 0x40b11110},
+{0, 0xc1655556, 0x41700000},
+{'q', 0xc0aaaaac, 0x41177774},
+{0, 0xc0aaaaac, 0x41aaaaaa},
+{'9', 0x005e0000, 0x00ab002a},
+{'m', 0x41c3bbbd, 0xc183bbbc},
+{'l', 0x00000000, 0x41b44444},
+{'4', 0x0000ffb5, 0xfe3c0000},
+{'l', 0x4193bbbc, 0x00000000},
+{'q', 0x411ddde0, 0x00000000},
+{0, 0x4179999c, 0x40888890},
+{'8', 0x652e212e, 0x64bc4100},
+{'9', 0x001a0041, 0x006d0041},
+{'l', 0x00000000, 0x40733330},
+{'9', 0x002c0000, 0x00430009},
+{'4', 0x00080000, 0x0000ffb3},
+{'8', 0xd9faf3fb, 0xc000e600},
+{'8', 0xc7edda00, 0xedc5eded},
+{'6', 0x0000ffaa, 0xff340000},
+{'4', 0x00880000, 0x00000053},
+{'8', 0xef3b0021, 0xd11af01a},
+{'8', 0xc9ebd900, 0xf0b5f0eb},
+{'l', 0xc1111110, 0x00000000},
+{'@', 0x000000af, 0x00003e99},/*        ¯        x-advance: 62.597656 */
+{'M', 0x42591112, 0xc2c0aaab},
+{'l', 0x00000000, 0x41177778},
+{'l', 0xc232eef0, 0x00000000},
+{'l', 0x35800000, 0xc1177778},
+{'l', 0x4232eef0, 0x00000000},
+{'@', 0x000000b0, 0x00003300},/*        °        x-advance: 51.000000 */
+{'M', 0x415bbbbc, 0xc2baaaab},
+{'8', 0xd760d728, 0x295e0037},
+{'8', 0x61272827, 0x61d93900},
+{'8', 0x28a228da, 0xd8a000c9},
+{'8', 0x9fd8d8d8, 0x9f28c700},
+{'m', 0x40511110, 0x41433330},
+{'8', 0x31141d00, 0x13311314},
+{'8', 0xed30001c, 0xcf13ed13},
+{'8', 0xceede300, 0xecd0eced},
+{'8', 0x14cf00e4, 0x32ec14ec},
+{'@', 0x000000b1, 0x00004900},/*        ±        x-advance: 73.000000 */
+{'M', 0x42871112, 0xc23b7778},
+{'l', 0xc1c1999c, 0x00000000},
+{'l', 0x00000000, 0x41dccccd},
+{'l', 0xc1322224, 0x00000000},
+{'l', 0x00000000, 0xc1dccccd},
+{'l', 0xc1cdddde, 0x00000000},
+{'l', 0x00000000, 0xc1222224},
+{'l', 0x41cdddde, 0x00000000},
+{'l', 0x00000000, 0xc1dbbbbe},
+{'l', 0x41322224, 0x00000000},
+{'4', 0x00db0000, 0x000000c1},
+{'6', 0x00510000, 0x0125ffea},
+{'l', 0x00000000, 0x41211113},
+{'l', 0xc25eaaac, 0xb3900000},
+{'l', 0x36000000, 0xc1211112},
+{'l', 0x425eaaac, 0x00000000},
+{'@', 0x000000b2, 0x00003211},/*        ²        x-advance: 50.066406 */
+{'M', 0x42362223, 0xc2540001},
+{'l', 0x00000000, 0x4108888c},
+{'4', 0x0000fec2, 0xffc70000},
+{'l', 0x41a22222, 0xc198888a},
+{'8', 0xa737cb37, 0xd6efe700},
+{'8', 0xf0d0f0ef, 0x14c500d8},
+{'9', 0x0014ffee, 0x0032ffee},
+{'l', 0xc128888a, 0x00000000},
+{'q', 0x35000000, 0xc0e44450},
+{0, 0x40a8888a, 0xc1444448},
+{'q', 0x40aaaaac, 0xc0a44440},
+{0, 0x416bbbbd, 0xc0a44440},
+{'q', 0x410eeef0, 0x00000000},
+{0, 0x41600000, 0x40888880},
+{'8', 0x5b282128, 0x4de52a00},
+{'9', 0x0022ffe5, 0x004cffb6},
+{'l', 0xc13aaaaa, 0x411bbbbc},
+{'l', 0x41d44445, 0x00000000},
+{'@', 0x000000b3, 0x00003211},/*        ³        x-advance: 50.066406 */
+{'M', 0x418dddde, 0xc286cccd},
+{'4', 0xffc30000, 0x0000002f},
+{'8', 0xc64bff4b, 0xd9efe900},
+{'8', 0xf0cbf0ef, 0x0dce00e2},
+{'9', 0x000dffed, 0x0024ffed},
+{'l', 0xc1277778, 0x00000000},
+{'8', 0xab2cca00, 0xe06ce02c},
+{'q', 0x410aaaaa, 0x00000000},
+{0, 0x41611112, 0x40777760},
+{'8', 0x582b1e2b, 0x5bb93f00},
+{'8', 0x624e164e, 0x5bd23a00},
+{'q', 0xc0b99998, 0x40800000},
+{0, 0xc168888a, 0x40800000},
+{'8', 0xe39300c4, 0xa2cfe3cf},
+{'l', 0x41277778, 0x00000000},
+{'8', 0x28151800, 0x10381015},
+{'8', 0xc54c004c, 0xc3b0c400},
+{'l', 0xc0c44448, 0x00000000},
+{'@', 0x000000b4, 0x00002acc},/*        ´        x-advance: 42.796875 */
+{'M', 0x41033334, 0xc2a5999a},
+{'l', 0x414eeef0, 0xc19cccd0},
+{'l', 0x416ddddc, 0x00000000},
+{'l', 0xc18eeeee, 0x419cccd0},
+{'l', 0xc11eeef0, 0x00000000},
+{'@', 0x000000b5, 0x00004d66},/*        µ        x-advance: 77.398438 */
+{'M', 0x42177778, 0x3fb33334},
+{'9', 0x0000ffb2, 0xffd9ff86},
+{'l', 0x00000000, 0x41fa2223},
+{'l', 0xc1444444, 0x00000000},
+{'4', 0xfce20000, 0x00000062},
+{'l', 0x00000000, 0x4229999a},
+{'q', 0x3e088880, 0x41500004},
+{0, 0x408cccd0, 0x41880002},
+{'q', 0x40888888, 0x40800000},
+{0, 0x41255556, 0x40800000},
+{'9', 0x0000006a, 0xffaf008b},
+{'l', 0x00000000, 0xc254ccce},
+{'l', 0x41455558, 0x00000000},
+{'4', 0x02410000, 0x0000ffa7},
+{'l', 0xbf088880, 0xc0f55556},
+{'q', 0xc0c44440, 0x41111112},
+{0, 0xc18c4444, 0x41111112},
+{'@', 0x000000b6, 0x000042cc},/*        ¶        x-advance: 66.796875 */
+{'M', 0x425e2223, 0x00000000},
+{'4', 0x0000ff9d, 0xfeeb0000},
+{'l', 0xc0c88888, 0x00000000},
+{'q', 0xc17aaaac, 0xbe088900},
+{0, 0xc1c00000, 0xc10eeef0},
+{'q', 0xc1055557, 0xc10ddde0},
+{0, 0xc1055557, 0xc1b22222},
+{'q', 0x00000000, 0xc1566668},
+{0, 0x41066667, 0xc1b22224},
+{'9', 0xffb90043, 0xffb900c3},
+{'l', 0x4191999a, 0x00000000},
+{'l', 0x00000000, 0x42c22223},
+{'@', 0x000000b7, 0x000023aa},/*        ·        x-advance: 35.664062 */
+{'M', 0x411dddde, 0xc2426667},
+{'8', 0xd60fe700, 0xef2def0f},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x10d310f1},
+{'8', 0xf0d300e3, 0xd7f1eff1},
+{'@', 0x000000b8, 0x000021dd},/*        ¸        x-advance: 33.863281 */
+{'M', 0x41222223, 0x00000000},
+{'4', 0x00000046, 0x001cfffa},
+{'8', 0x1938051e, 0x42191419},
+{'q', 0x00000000, 0x40c88888},
+{0, 0xc0a44444, 0x41222222},
+{'9', 0x001effd7, 0x001eff88},
+{'l', 0xbeeeef00, 0xc0e44444},
+{'8', 0xf43e0024, 0xd81af41a},
+{'8', 0xdcece600, 0xf3bff6ec},
+{'l', 0x40044444, 0xc1100000},
+{'@', 0x000000b9, 0x00003211},/*        ¹        x-advance: 50.066406 */
+{'M', 0x42040000, 0xc2c22223},
+{'l', 0x00000000, 0x42526668},
+{'l', 0xc1266666, 0x00000000},
+{'l', 0x00000000, 0xc2204446},
+{'l', 0xc1666666, 0x40733340},
+{'l', 0x00000000, 0xc1099998},
+{'l', 0x41bccccd, 0xc0f77780},
+{'l', 0x3f999990, 0x00000000},
+{'@', 0x000000ba, 0x00003e22},/*        º        x-advance: 62.132812 */
+{'M', 0x41033334, 0xc295ddde},
+{'q', 0x00000000, 0xc1244448},
+{0, 0x40c44444, 0xc186eef0},
+{'q', 0x40c66668, 0xc0d55560},
+{0, 0x41855556, 0xc0d55560},
+{'q', 0x4129999a, 0x00000000},
+{0, 0x41855555, 0x40d55560},
+{'9', 0x00340031, 0x00860031},
+{'l', 0x00000000, 0x40acccc0},
+{'q', 0x00000000, 0x41255558},
+{0, 0xc0c44448, 0x4187777a},
+{'q', 0xc0c22220, 0x40d11110},
+{0, 0xc1844444, 0x40d11110},
+{'q', 0xc129999a, 0x00000000},
+{0, 0xc1866667, 0xc0d11110},
+{'9', 0xffccffcf, 0xff79ffcf},
+{'6', 0xffd50000, 0x002b0056},
+{'8', 0x51173000, 0x20492018},
+{'8', 0xe046002f, 0xaf18e018},
+{'l', 0x00000000, 0xc0acccc0},
+{'8', 0xb0e8d100, 0xdfb8dfe9},
+{'8', 0x21b800d0, 0x50e920e9},
+{'l', 0x00000000, 0x40acccc0},
+{'@', 0x000000bb, 0x00004000},/*        »        x-advance: 64.000000 */
+{'M', 0x4182aaab, 0xc27d1112},
+{'l', 0x419d5555, 0x41cf7778},
+{'l', 0x00000000, 0x3fa22220},
+{'l', 0xc19d5555, 0x41ceeef0},
+{'l', 0xc1177778, 0x00000000},
+{'4', 0xff2c0089, 0xff2cff77},
+{'6', 0x0000004b, 0x000000ba},
+{'l', 0x419d5556, 0x41cf7778},
+{'l', 0x00000000, 0x3fa22220},
+{'l', 0xc19d5556, 0x41ceeef0},
+{'l', 0xc1177778, 0x00000000},
+{'l', 0x4189999a, 0xc1d44444},
+{'l', 0xc189999a, 0xc1d44446},
+{'l', 0x41177778, 0x00000000},
+{'@', 0x000000bc, 0x00006400},/*        ¼        x-advance: 100.000000 */
+{'M', 0x41f3bbbd, 0xc2c1bbbc},
+{'l', 0x00000000, 0x42526666},
+{'l', 0xc1266668, 0x00000000},
+{'l', 0x00000000, 0xc2204444},
+{'l', 0xc1666667, 0x40733320},
+{'4', 0xffbc0000, 0xffc300bc},
+{'6', 0x00000009, 0x00680174},
+{'l', 0xc23d999b, 0x4297bbbc},
+{'4', 0xffddffc9, 0xfda2017b},
+{'6', 0x00230037, 0x020dff38},
+{'l', 0x41c9999a, 0xc209dddf},
+{'l', 0x412aaaa8, 0x00000000},
+{'l', 0x00000000, 0x42026666},
+{'0', 0x45000039, 0x5a0000c7},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xffa60000, 0x0000ff39},
+{'6', 0xffcafffd, 0xfff20054},
+{'l', 0x416ddddc, 0x00000000},
+{'l', 0x00000000, 0xc1991111},
+{'l', 0xbf888880, 0x3fe66660},
+{'l', 0xc15ccccc, 0x418aaaab},
+{'@', 0x000000bd, 0x000069ee},/*        ½        x-advance: 105.929688 */
+{'M', 0x42942223, 0xc2a7999a},
+{'l', 0xc23d999b, 0x4297bbbc},
+{'4', 0xffddffc9, 0xfda2017b},
+{'6', 0x00230037, 0xff98fea1},
+{'l', 0x00000000, 0x42526666},
+{'l', 0xc1266668, 0x00000000},
+{'l', 0x00000000, 0xc2204444},
+{'l', 0xc1666666, 0x40733320},
+{'4', 0xffbc0000, 0xffc300bc},
+{'6', 0x00000009, 0x02c20224},
+{'l', 0x00000000, 0x41088888},
+{'4', 0x0000fec2, 0xffc70000},
+{'l', 0x41a22224, 0xc1988889},
+{'8', 0xa737cb37, 0xd6efe700},
+{'8', 0xf0d0f0ef, 0x14c500d8},
+{'9', 0x0014ffee, 0x0032ffee},
+{'l', 0xc128888c, 0x00000000},
+{'q', 0x00000000, 0xc0e44448},
+{0, 0x40a88888, 0xc1444444},
+{'q', 0x40aaaab0, 0xc0a44448},
+{0, 0x416bbbc0, 0xc0a44448},
+{'q', 0x410eeef0, 0x00000000},
+{0, 0x41600000, 0x40888888},
+{'8', 0x5b282128, 0x4de52a00},
+{'9', 0x0022ffe5, 0x004dffb6},
+{'l', 0xc13aaaa8, 0x411bbbbd},
+{'l', 0x41d44444, 0x00000000},
+{'@', 0x000000be, 0x00006a33},/*        ¾        x-advance: 106.199219 */
+{'M', 0x42aaeef0, 0xc2a7999a},
+{'l', 0xc23d999b, 0x4297bbbc},
+{'4', 0xffddffc9, 0xfda2017b},
+{'6', 0x00230037, 0x020dff26},
+{'l', 0x41c9999a, 0xc209dddf},
+{'l', 0x412aaab0, 0x00000000},
+{'l', 0x00000000, 0x42026666},
+{'0', 0x45000039, 0x5a0000c7},
+{'l', 0xc1277778, 0x00000000},
+{'4', 0xffa60000, 0x0000ff39},
+{'6', 0xffcafffd, 0xfff20054},
+{'l', 0x416ddde0, 0x00000000},
+{'4', 0xff670000, 0x000efff8},
+{'6', 0x008aff92, 0xfe85fe83},
+{'4', 0xffc30000, 0x0000002f},
+{'8', 0xc64bff4b, 0xd9efe900},
+{'8', 0xf0cbf0ef, 0x0dce00e2},
+{'9', 0x000dffed, 0x0024ffed},
+{'l', 0xc1277778, 0x00000000},
+{'8', 0xab2cca00, 0xe06ce02c},
+{'q', 0x410aaaaa, 0x00000000},
+{0, 0x41611112, 0x40733320},
+{'8', 0x592b1e2b, 0x5bb93f00},
+{'8', 0x624e164e, 0x5bd23a00},
+{'q', 0xc0b99998, 0x40800000},
+{0, 0xc168888a, 0x40800000},
+{'8', 0xe39300c4, 0xa2cfe3cf},
+{'l', 0x41277778, 0x00000000},
+{'8', 0x28151800, 0x10381015},
+{'8', 0xc54c004c, 0xc3b0c400},
+{'l', 0xc0c44444, 0x00000000},
+{'@', 0x000000bf, 0x000040aa},/*        ¿        x-advance: 64.664062 */
+{'M', 0x4217bbbc, 0xc275dddf},
+{'8', 0x10d510f2, 0xf0d500e4},
+{'8', 0xd9f2f0f2, 0xd90ee900},
+{'8', 0xf02bf00e, 0x102b001c},
+{'8', 0x270e100e, 0x27f21700},
+{'m', 0xc1311110, 0x41811112},
+{'l', 0x41466668, 0x00000000},
+{'q', 0xbd888a00, 0x41188888},
+{0, 0xc0266670, 0x41622224},
+{'8', 0x5abc24ed, 0x4abf34cf},
+{'q', 0xc0400000, 0x40844444},
+{0, 0xc0400000, 0x4129999a},
+{'q', 0x00000000, 0x416eeef0},
+{0, 0x416eeef0, 0x416eeef0},
+{'8', 0xe653002e, 0xae25e624},
+{'l', 0x41455558, 0x34c00000},
+{'q', 0xbe088900, 0x41355556},
+{0, 0xc1000000, 0x418eeeef},
+{'q', 0xc0fbbbc0, 0x40d11114},
+{0, 0xc19b3334, 0x40d11114},
+{'q', 0xc1500002, 0x00000000},
+{0, 0xc1a1999a, 0xc0d55558},
+{'q', 0xc0e44446, 0xc0d55556},
+{0, 0xc0e44446, 0xc1955556},
+{'q', 0x00000000, 0xc1111111},
+{0, 0x40a66666, 0xc1822222},
+{'q', 0x40a8888a, 0xc0e66668},
+{0, 0x41333334, 0xc14eeef0},
+{'q', 0x40bddde0, 0xc0b7777c},
+{0, 0x40bddde0, 0xc1844445},
+{'@', 0x000000c0, 0x00005911},/*        À        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfd470056},
+{'l', 0x414ddde0, 0x419ccccc},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc1899999, 0xc19ccccc},
+{'l', 0x416eeeee, 0x00000000},
+{'[', 0x007a00c0, 0x000000cc},/*kerning*/
+{'@', 0x000000c1, 0x00005911},/*        Á        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfde4004e},
+{'l', 0x414eeeec, 0xc19ccccc},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419ccccc},
+{'l', 0xc11eeeec, 0x00000000},
+{'[', 0x007a00c1, 0x000000cc},/*kerning*/
+{'@', 0x000000c2, 0x00005911},/*        Â        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfd4700a3},
+{'l', 0x41844446, 0x41919998},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0x00000000, 0xbf3bbc00},
+{'l', 0x4182aaab, 0xc1911110},
+{'l', 0x40eeeef0, 0x00000000},
+{'[', 0x007a00c2, 0x000000cc},/*kerning*/
+{'@', 0x000000c3, 0x00005911},/*        Ã        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfd520100},
+{'l', 0x41055554, 0x3f3bbb80},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc09999a0, 0xc0488880},
+{'8', 0xf4d0f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055556, 0xbecccd00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77760, 0xc00cccc0},
+{0, 0x3ff77760, 0xc0aaaaa0},
+{'[', 0x007a00c3, 0x000000cc},/*kerning*/
+{'@', 0x000000c4, 0x00005911},/*        Ä        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfd9fffda},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'[', 0x007a00c4, 0x000000cc},/*kerning*/
+{'@', 0x000000c5, 0x00005911},/*        Ã…        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'4', 0x00000107, 0xfe96ff7d},
+{'6', 0x016aff7d, 0xfd850012},
+{'8', 0xb220d300, 0xe052e021},
+{'8', 0x20510030, 0x4e212021},
+{'8', 0x4ddf2e00, 0x1eaf1edf},
+{'8', 0xe2ae00cf, 0xb3e0e2e0},
+{'m', 0x40d33334, 0x00000000},
+{'8', 0x2a111700, 0x122c1211},
+{'8', 0xee2c001b, 0xd511ee11},
+{'8', 0xd5efe700, 0xedd4edef},
+{'8', 0x13d400e5, 0x2bef12ef},
+{'[', 0x007a00c5, 0x000000cc},/*kerning*/
+{'@', 0x000000c6, 0x00007f99},/*        Æ        x-advance: 127.597656 */
+{'M', 0x42faaaac, 0xc1222223},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc26bbbbe, 0x00000000},
+{'l', 0xbf800000, 0xc1bc4445},
+{'l', 0xc2166666, 0x00000000},
+{'l', 0xc15aaaad, 0x41bc4445},
+{'l', 0xc1722223, 0x00000000},
+{'l', 0x426aeef0, 0xc2c22223},
+{'l', 0x427dddde, 0x00000000},
+{'l', 0x00000000, 0x41222228},
+{'l', 0xc2384444, 0x00000000},
+{'l', 0x3faaaa80, 0x41faaaaa},
+{'l', 0x421d5556, 0x00000000},
+{'l', 0x00000000, 0x41222224},
+{'4', 0x0000fec9, 0x011a000c},
+{'6', 0x00000177, 0xff38fd2a},
+{'l', 0x41f33330, 0x00000000},
+{'l', 0xc0044440, 0xc2437779},
+{'l', 0xc1e2aaaa, 0x42437779},
+{'@', 0x000000c7, 0x000058dd},/*        Ç        x-advance: 88.863281 */
+{'M', 0x428bbbbc, 0xc1f6eef0},
+{'l', 0x414cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0x415cccce},
+{0, 0xc1266668, 0x41b80001},
+{'q', 0xc10eeef0, 0x41133333},
+{0, 0xc1d33334, 0x41133333},
+{'q', 0xc1877778, 0x34c00000},
+{0, 0xc1daaaab, 0xc1411111},
+{'9', 0xff9fffae, 0xfeffffac},
+{'l', 0x00000000, 0xc1266668},
+{'q', 0x00000000, 0xc1a33334},
+{0, 0x41277778, 0xc202eef0},
+{'q', 0x4128888a, 0xc1455550},
+{0, 0x41e44446, 0xc1455550},
+{'q', 0x4183bbbc, 0x00000000},
+{0, 0x41caaaaa, 0x41111110},
+{'9', 0x00480046, 0x00bb0052},
+{'l', 0xc14cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0xc1222228},
+{0, 0xc0d11110, 0xc1800000},
+{'q', 0xc0a22220, 0xc0bddde0},
+{0, 0xc182aaaa, 0xc0bddde0},
+{'q', 0xc14ddde0, 0x00000000},
+{0, 0xc19c4446, 0x41177778},
+{'9', 0x004bffcb, 0x00c7ffcb},
+{'l', 0x00000000, 0x411cccd0},
+{'q', 0x00000000, 0x41655556},
+{0, 0x40c22224, 0x41c3bbbc},
+{'q', 0x40c22220, 0x41211111},
+{0, 0x41980000, 0x41211111},
+{'q', 0x41444444, 0x00000000},
+{0, 0x418a2222, 0xc0b77778},
+{'9', 0xffd30028, 0xff800035},
+{'m', 0xc1e4cccc, 0x41fc4445},
+{'4', 0x00000046, 0x001cfffa},
+{'8', 0x1938051e, 0x42191419},
+{'q', 0x00000000, 0x40c8888a},
+{0, 0xc0a44448, 0x41222223},
+{'9', 0x001effd7, 0x001eff88},
+{'l', 0xbeeeef00, 0xc0e44444},
+{'8', 0xf43e0024, 0xd81af41a},
+{'8', 0xdcece600, 0xf3bff6ec},
+{'l', 0x40044450, 0xc1100000},
+{'@', 0x000000c8, 0x00004d99},/*        È        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'4', 0x00000186, 0x00530000},
+{'6', 0x0000fe13, 0xfc2200c1},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeef0, 0x00000000},
+{'[', 0x005400c8, 0x00000155},/*kerning*/
+{'@', 0x000000c9, 0x00004d99},/*        É        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'4', 0x00000186, 0x00530000},
+{'6', 0x0000fe13, 0xfcbe00b9},
+{'l', 0x414eeef0, 0xc19cccd0},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419cccd0},
+{'l', 0xc11eeef0, 0x00000000},
+{'[', 0x005400c9, 0x00000155},/*kerning*/
+{'@', 0x000000ca, 0x00004d99},/*        Ê        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'4', 0x00000186, 0x00530000},
+{'6', 0x0000fe13, 0xfc22010d},
+{'l', 0x41844444, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222224, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaac, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'[', 0x005400ca, 0x00000155},/*kerning*/
+{'@', 0x000000cb, 0x00004d99},/*        Ë        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'4', 0x00000186, 0x00530000},
+{'6', 0x0000fe13, 0xfc7a0044},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088a00},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'[', 0x005400cb, 0x00000155},/*kerning*/
+{'@', 0x000000cc, 0x00002522},/*        Ì        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'6', 0x00000066, 0xff2aff9e},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999b, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeeef, 0x00000000},
+{'@', 0x000000cd, 0x00002522},/*        Í        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'6', 0x00000066, 0xffc7ff96},
+{'l', 0x414eeef1, 0xc19cccd0},
+{'l', 0x416dddde, 0x00000000},
+{'l', 0xc18eeef0, 0x419cccd0},
+{'l', 0xc11eeeef, 0x00000000},
+{'@', 0x000000ce, 0x00002522},/*        ÃŽ        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'6', 0x00000066, 0xff2affeb},
+{'l', 0x41844445, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0xb5000000, 0xbf3bbb80},
+{'l', 0x4182aaab, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000cf, 0x00002522},/*        Ï        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'6', 0x00000066, 0xff82ff21},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088a00},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000d0, 0x00005b99},/*        Ð        x-advance: 91.597656 */
+{'M', 0x401dddde, 0xc259dddf},
+{'4', 0x00000056, 0xfeac0000},
+{'l', 0x41dbbbbc, 0x00000000},
+{'q', 0x41991112, 0x00000000},
+{0, 0x41f7777a, 0x41455558},
+{'9', 0x0062005e, 0x010a005e},
+{'l', 0x00000000, 0x40b99998},
+{'q', 0x00000000, 0x41a88889},
+{0, 0xc13eeef0, 0x42055556},
+{'9', 0x0062ffa2, 0x0062ff00},
+{'l', 0xc1d22224, 0x00000000},
+{'4', 0xfe9e0000, 0x0000ffaa},
+{'6', 0xffaf0000, 0x00510153},
+{'4', 0x0000ff6a, 0x010e0000},
+{'l', 0x41599998, 0x00000000},
+{'q', 0x41766668, 0xbd888880},
+{0, 0x41b9999c, 0xc119999a},
+{'9', 0xffb4003e, 0xff36003e},
+{'l', 0x00000000, 0xc0c66668},
+{'q', 0x00000000, 0xc185ddde},
+{0, 0xc0fbbbb8, 0xc1ceeeee},
+{'9', 0xffb7ffc2, 0xffb7ff4f},
+{'l', 0xc1699998, 0x00000000},
+{'l', 0x00000000, 0x42004445},
+{'l', 0x41966666, 0x00000000},
+{'l', 0x00000000, 0x41222224},
+{'@', 0x000000d1, 0x00006166},/*        Ñ        x-advance: 97.398438 */
+{'M', 0x42abddde, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14eeef0, 0x00000000},
+{'l', 0xc2437777, 0xc295bbbc},
+{'l', 0x00000000, 0x4295bbbc},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'4', 0x02580188, 0xfda80000},
+{'6', 0x00000065, 0xff3bff4f},
+{'l', 0x41055558, 0x3f3bbb80},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc0999998, 0xc0488880},
+{'8', 0xf4d0f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055554, 0xbecccd00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77780, 0xc00cccc0},
+{0, 0x3ff77780, 0xc0aaaaa0},
+{'@', 0x000000d2, 0x00005dee},/*        Ã’        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'9', 0xffb60036, 0xff2b0036},
+{'6', 0xffce0000, 0xfdc4ff00},
+{'l', 0x414ddddc, 0x419ccccc},
+{'l', 0xc1299998, 0x00000000},
+{'l', 0xc189999b, 0xc19ccccc},
+{'l', 0x416eeef2, 0x00000000},
+{'@', 0x000000d3, 0x00005dee},/*        Ó        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'9', 0xffb60036, 0xff2b0036},
+{'6', 0xffce0000, 0xfe61fef9},
+{'l', 0x414eeef0, 0xc19ccccc},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419ccccc},
+{'l', 0xc11eeef0, 0x00000000},
+{'@', 0x000000d4, 0x00005dee},/*        Ô        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'9', 0xffb60036, 0xff2b0036},
+{'6', 0xffce0000, 0xfdc4ff4d},
+{'l', 0x41844444, 0x41919998},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaab, 0xc1911110},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000d5, 0x00005dee},/*        Õ        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'9', 0xffb60036, 0xff2b0036},
+{'6', 0xffce0000, 0xfdcfffaa},
+{'l', 0x41055554, 0x3f3bbc00},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc0999998, 0xc0488880},
+{'8', 0xf4d0f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055556, 0xbecccc00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77780, 0xc00cccc0},
+{0, 0x3ff77780, 0xc0aaaab0},
+{'@', 0x000000d6, 0x00005dee},/*        Ö        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'9', 0xffb60036, 0xff2b0036},
+{'6', 0xffce0000, 0xfe1cfe84},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5ddde, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000d7, 0x000048dd},/*        ×        x-advance: 72.863281 */
+{'M', 0x42840000, 0xc1af7778},
+{'l', 0xc0fdddd8, 0x41033334},
+{'l', 0xc1b0888a, 0xc1b44446},
+{'l', 0xc1b11110, 0x41b44446},
+{'l', 0xc0fddde1, 0xc1033334},
+{'l', 0x41b00000, 0xc1b3bbbc},
+{'l', 0xc1ae6667, 0xc1b22224},
+{'l', 0x40fddde0, 0xc1044440},
+{'l', 0x41af7777, 0x41b2aaaa},
+{'l', 0x41aeeef0, 0xc1b2aaaa},
+{'l', 0x40fddde0, 0x41044440},
+{'l', 0xc1ae6666, 0x41b22224},
+{'l', 0x41affffe, 0x41b3bbbc},
+{'@', 0x000000d8, 0x00005dee},/*        Ø        x-advance: 93.929688 */
+{'M', 0x423c4445, 0x3faaaaab},
+{'9', 0x0000ffa6, 0xffd4ff5f},
+{'4', 0x0053ffcd, 0x0000ffb4},
+{'l', 0x411aaaaa, 0xc1777778},
+{'9', 0xff9aff9b, 0xfedaff9b},
+{'l', 0xb5000000, 0xc0aeeef0},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'9', 0x00000072, 0x004200c1},
+{'4', 0xffa90036, 0x0000004a},
+{'l', 0xc1288888, 0x41877778},
+{'9', 0x00610048, 0x00fd004a},
+{'l', 0x00000000, 0x40e00008},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'9', 0x0063ffac, 0x0063ff1e},
+{'m', 0xc1d33334, 0xc23b3333},
+{'9', 0x00810000, 0x00cd0033},
+{'l', 0x4216aaab, 0xc2711112},
+{'q', 0xc0d55558, 0xc0ecccd0},
+{0, 0xc18eeef0, 0xc0ecccd0},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'6', 0x00320000, 0xffce01a4},
+{'9', 0xff9d0000, 0xff5affe3},
+{'l', 0xc2126668, 0x426b3334},
+{'q', 0x40c00000, 0x4088888e},
+{0, 0x41622224, 0x4088888e},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'q', 0x40dbbbc0, 0xc1144446},
+{0, 0x40dbbbc0, 0xc1d5ddde},
+{'l', 0x00000000, 0xc0c88890},
+{'@', 0x000000d9, 0x00005888},/*        Ù        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'9', 0xffd50031, 0xff7a0031},
+{'6', 0xfdf30000, 0xff30ff1f},
+{'l', 0x414ddde0, 0x419ccccc},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc189999a, 0xc19ccccc},
+{'l', 0x416eeef0, 0x00000000},
+{'@', 0x000000da, 0x00005888},/*        Ú        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'9', 0xffd50031, 0xff7a0031},
+{'6', 0xfdf30000, 0xffcdff17},
+{'l', 0x414eeef0, 0xc19ccccc},
+{'l', 0x416ddddc, 0x00000000},
+{'l', 0xc18eeeee, 0x419ccccc},
+{'l', 0xc11eeef0, 0x00000000},
+{'@', 0x000000db, 0x00005888},/*        Û        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'9', 0xffd50031, 0xff7a0031},
+{'6', 0xfdf30000, 0xff30ff6c},
+{'l', 0x41844446, 0x41919998},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222224, 0x00000000},
+{'l', 0x00000000, 0xbf3bbc00},
+{'l', 0x4182aaaa, 0xc1911110},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000dc, 0x00005888},/*        Ü        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'9', 0xffd50031, 0xff7a0031},
+{'6', 0xfdf30000, 0xff88fea2},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000dd, 0x00005200},/*        Ý        x-advance: 82.000000 */
+{'M', 0x417bbbbd, 0xc2c22223},
+{'l', 0x41c9999a, 0x4242eef0},
+{'l', 0x41ca2224, 0xc242eef0},
+{'l', 0x41699998, 0x00000000},
+{'l', 0xc205ddde, 0x42733334},
+{'l', 0x00000000, 0x42111112},
+{'l', 0xc14ddde0, 0x00000000},
+{'4', 0xfede0000, 0xfe1afef5},
+{'6', 0x00000075, 0xffcd0095},
+{'l', 0x414eeef0, 0xc19ccccc},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419ccccc},
+{'l', 0xc11eeef0, 0x00000000},
+{'[', 0x002900dd, 0x00000155},/*kerning*/
+{'[', 0x005400dd, 0x00000122},/*kerning*/
+{'[', 0x005600dd, 0x00000133},/*kerning*/
+{'[', 0x005700dd, 0x00000122},/*kerning*/
+{'[', 0x005800dd, 0x000000dd},/*kerning*/
+{'[', 0x005900dd, 0x00000133},/*kerning*/
+{'[', 0x005d00dd, 0x00000133},/*kerning*/
+{'[', 0x007d00dd, 0x00000144},/*kerning*/
+{'[', 0x00dd00dd, 0x00000133},/*kerning*/
+{'@', 0x000000de, 0x000050aa},/*        Þ        x-advance: 80.664062 */
+{'M', 0x41bbbbbc, 0xc1a77778},
+{'l', 0x00000000, 0x41a77778},
+{'l', 0xc1455555, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'4', 0x00000062, 0x009c0000},
+{'l', 0x41966668, 0x00000000},
+{'q', 0x41799998, 0x3d888c00},
+{0, 0x41beeef0, 0x41022228},
+{'q', 0x41055550, 0x41000000},
+{0, 0x41055550, 0x41a1999a},
+{'q', 0x00000000, 0x41433330},
+{0, 0xc1066660, 0x41a22222},
+{'9', 0x0040ffbe, 0x0040ff40},
+{'6', 0x0000ff6c, 0xfe8c0000},
+{'4', 0x01230000, 0x00000094},
+{'q', 0x412bbbbc, 0x00000000},
+{0, 0x41766664, 0xc0b33334},
+{'8', 0x9d25d325, 0x9bdbc800},
+{'q', 0xc0955550, 0xc0b77770},
+{0, 0xc1766664, 0xc0b77770},
+{'l', 0xc1944446, 0x00000000},
+{'@', 0x000000df, 0x00005133},/*        ß        x-advance: 81.199219 */
+{'M', 0x41accccd, 0x00000000},
+{'4', 0x0000ff9e, 0xfdad0000},
+{'q', 0x3d888880, 0xc1677778},
+{0, 0x40eaaaac, 0xc1ae6668},
+{'q', 0x40e88888, 0xc0ecccd0},
+{0, 0x4196eef0, 0xc0ecccd0},
+{'q', 0x412ddddc, 0x00000000},
+{0, 0x418f7778, 0x40aeeef0},
+{'q', 0x40e44440, 0x40aeeef0},
+{0, 0x40e44440, 0x41880000},
+{'8', 0x5aef3800, 0x3bde21ef},
+{'8', 0x3eef1aef, 0x401b2400},
+{'8', 0x36411b1c, 0x3e411b25},
+{'q', 0x40622220, 0x408aaaa8},
+{0, 0x40622220, 0x412ccccc},
+{'q', 0x00000000, 0x41366668},
+{0, 0xc0e88880, 0x41877778},
+{'q', 0xc0e66670, 0x40b11113},
+{0, 0xc1933336, 0x40b11113},
+{'8', 0xf5a500d5, 0xe6bdf5d1},
+{'l', 0x40333338, 0xc1255556},
+{'8', 0x1a350b12, 0x0e490e23},
+{'8', 0xe559003e, 0xbd1be51b},
+{'8', 0xbfe4db00, 0xc9bfe5e5},
+{'8', 0xc2bfe5db, 0xa6e5dde5},
+{'9', 0xffd60000, 0xffb80012},
+{'l', 0x40977778, 0xc0f33330},
+{'8', 0xbc11e411, 0xb0e3cb00},
+{'q', 0xc0666670, 0xc05999a0},
+{0, 0xc1111114, 0xc05999a0},
+{'q', 0xc1666666, 0x00000000},
+{0, 0xc169999a, 0x4196eef0},
+{'l', 0x00000000, 0x42955556},
+{'@', 0x000000e0, 0x00004a44},/*        à        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0xbf088880, 0xc2b9dddf},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeef0, 0x00000000},
+{'@', 0x000000e1, 0x00004a44},/*        á        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0xbfbbbbc0, 0xc292aaab},
+{'l', 0x414eeef0, 0xc19cccd0},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419cccd0},
+{'l', 0xc11eeef0, 0x00000000},
+{'@', 0x000000e2, 0x00004a44},/*        â        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0x41111114, 0xc2b9dddf},
+{'l', 0x41844444, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222224, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaac, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000e3, 0x00004a44},/*        ã        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0x41a55556, 0xc2b73334},
+{'l', 0x41055558, 0x3f3bbc00},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc09999a0, 0xc0488880},
+{'8', 0xf4d0f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055555, 0xbecccd00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77760, 0xc00ccce0},
+{0, 0x3ff77760, 0xc0aaaab0},
+{'@', 0x000000e4, 0x00004a44},/*        ä        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0xc1811111, 0xc2a3ddde},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000e5, 0x00004a44},/*        å        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'m', 0xc1100000, 0xc2aa6667},
+{'8', 0xb220d300, 0xe052e021},
+{'8', 0x20510030, 0x4e212021},
+{'8', 0x4ddf2e00, 0x1eaf1edf},
+{'8', 0xe2ae00cf, 0xb3e0e2e0},
+{'m', 0x40d33334, 0x00000000},
+{'8', 0x2a111700, 0x122c1211},
+{'8', 0xee2c001b, 0xd511ee11},
+{'8', 0xd5efe700, 0xedd4edef},
+{'8', 0x13d400e5, 0x2bef12ef},
+{'@', 0x000000e6, 0x00007355},/*        æ        x-advance: 115.332031 */
+{'M', 0x42db1112, 0xc0d9999a},
+{'q', 0xc00ccce0, 0x3fdddddc},
+{0, 0xc1066668, 0x40a00000},
+{'q', 0xc0c66660, 0x404cccce},
+{0, 0xc1877778, 0x404cccce},
+{'q', 0xc10eeef0, 0x00000000},
+{0, 0xc1799998, 0xc04cccce},
+{'8', 0xbaa9e7cb, 0x42ac23e5},
+{'q', 0xc0e22220, 0x40733336},
+{0, 0xc191999a, 0x40733336},
+{'q', 0xc1377778, 0x00000000},
+{0, 0xc18ccccd, 0xc0bbbbbc},
+{'q', 0xc0c22223, 0xc0bddddf},
+{0, 0xc0c22223, 0xc17cccce},
+{'q', 0x00000000, 0xc1288888},
+{0, 0x40f11113, 0xc182aaab},
+{'9', 0xffd2003c, 0xffd200b2},
+{'4', 0x00000076, 0xffd40000},
+{'8', 0xa7e3c700, 0xdfacdfe3},
+{'8', 0x1ea200c5, 0x46dd1ddd},
+{'l', 0xc1444446, 0xbf9999a0},
+{'q', 0x35000000, 0xc1155558},
+{0, 0x40fbbbbe, 0xc1777778},
+{'q', 0x40fdddde, 0xc0c44440},
+{0, 0x41a55556, 0xc0c44440},
+{'q', 0x4181999a, 0x00000000},
+{0, 0x41b5ddde, 0x41311110},
+{'q', 0x410cccd0, 0xc1333338},
+{0, 0x41b6eef0, 0xc1311110},
+{'q', 0x41655558, 0x00000000},
+{0, 0x41aeeef0, 0x410bbbb8},
+{'9', 0x0045003c, 0x00bd003c},
+{'4', 0x003e0000, 0x0000fe7c},
+{'q', 0x3eaaaa80, 0x41244444},
+{0, 0x40b33330, 0x418b3333},
+{'q', 0x40a88890, 0x40e22224},
+{0, 0x41833334, 0x40e22224},
+{'8', 0xed66003f, 0xdb41ed26},
+{'6', 0x00480022, 0xfe3cff1e},
+{'q', 0xc1011110, 0x00000000},
+{0, 0xc14ddde0, 0x40bddde0},
+{'9', 0x002effda, 0x0075ffd2},
+{'4', 0x0000011e, 0xfff00000},
+{'8', 0x98e2c400, 0xd497d4e2},
+{'m', 0xc247bbbc, 0x425aaaab},
+{'8', 0xec520028, 0xd142eb2a},
+{'4', 0xff820000, 0x0000ff8b},
+{'8', 0x1f9700bb, 0x49dd1fdd},
+{'8', 0x401a2500, 0x1a531a1b},
+{'@', 0x000000e7, 0x00004777},/*        ç        x-advance: 71.464844 */
+{'M', 0x42191112, 0xc10ccccd},
+{'8', 0xe15c0034, 0xb02be128},
+{'l', 0x413bbbb8, 0x00000000},
+{'q', 0xbeeeee00, 0x411aaaab},
+{0, 0xc10ddddc, 0x41877778},
+{'q', 0xc1066664, 0x40e66667},
+{0, 0xc19eeeee, 0x40e66667},
+{'q', 0xc1822223, 0xb4000000},
+{0, 0xc1c1999b, 0xc12bbbbc},
+{'9', 0xffabffc2, 0xff36ffc2},
+{'l', 0x00000000, 0xc0333330},
+{'q', 0x00000000, 0xc168888c},
+{0, 0x40fbbbbd, 0xc1ca2224},
+{'q', 0x40fddde0, 0xc12bbbb8},
+{0, 0x41c1999b, 0xc12bbbb8},
+{'q', 0x414aaaa8, 0x00000000},
+{0, 0x41a3bbbc, 0x40f11110},
+{'9', 0x003b003e, 0x00940042},
+{'l', 0xc13bbbb8, 0x00000000},
+{'8', 0xa6d8cbfd, 0xdba1dbdc},
+{'8', 0x1ea100c4, 0x4ed01ede},
+{'9', 0x002ffff3, 0x0061fff3},
+{'l', 0x00000000, 0x40333330},
+{'8', 0x620d3200, 0x4e302f0d},
+{'9', 0x001e0022, 0x001e0060},
+{'m', 0xc0d9999c, 0x41177778},
+{'4', 0x00000046, 0x001cfffa},
+{'8', 0x1938051e, 0x42191419},
+{'q', 0x00000000, 0x40c8888a},
+{0, 0xc0a44448, 0x41222223},
+{'9', 0x001effd7, 0x001eff88},
+{'l', 0xbeeeef00, 0xc0e44444},
+{'8', 0xf43e0024, 0xd81af41a},
+{'8', 0xdcece600, 0xf3bff6ec},
+{'l', 0x40044448, 0xc1100000},
+{'@', 0x000000e8, 0x00004866},/*        è        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'m', 0xc0bddddc, 0xc21c4446},
+{'l', 0x414dddde, 0x419cccd0},
+{'l', 0xc1299998, 0x00000000},
+{'l', 0xc189999b, 0xc19cccd0},
+{'l', 0x416eeef0, 0x00000000},
+{'@', 0x000000e9, 0x00004866},/*        é        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'m', 0xc0dbbbb8, 0xc19bbbbc},
+{'l', 0x414eeef0, 0xc19cccd0},
+{'l', 0x416ddddc, 0x00000000},
+{'l', 0xc18eeeee, 0x419cccd0},
+{'l', 0xc11eeef0, 0x00000000},
+{'@', 0x000000ea, 0x00004866},/*        ê        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'m', 0x406aaab0, 0xc21c4446},
+{'l', 0x41844446, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222224, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaab, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000eb, 0x00004866},/*        ë        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'m', 0xc1ac4444, 0xc1e08888},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5ddde, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000ec, 0x000021cc},/*        ì        x-advance: 33.796875 */
+{'M', 0x41b5ddde, 0xc2904445},
+{'l', 0x00000000, 0x42904445},
+{'4', 0x0000ff9e, 0xfdbf0000},
+{'6', 0x00000062, 0xff0fffa2},
+{'l', 0x414dddde, 0x419ccccc},
+{'l', 0xc129999a, 0x00000000},
+{'l', 0xc189999a, 0xc19ccccc},
+{'l', 0x416eeef0, 0x00000000},
+{'@', 0x000000ed, 0x000021cc},/*        í        x-advance: 33.796875 */
+{'M', 0x41b5ddde, 0xc2904445},
+{'l', 0x00000000, 0x42904445},
+{'4', 0x0000ff9e, 0xfdbf0000},
+{'6', 0x00000062, 0xffacff9b},
+{'l', 0x414eeeef, 0xc19ccccc},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419ccccc},
+{'l', 0xc11eeeef, 0x00000000},
+{'@', 0x000000ee, 0x000021cc},/*        î        x-advance: 33.796875 */
+{'M', 0x41b5ddde, 0xc2904445},
+{'l', 0x00000000, 0x42904445},
+{'4', 0x0000ff9e, 0xfdbf0000},
+{'6', 0x00000062, 0xff0fffef},
+{'l', 0x41844445, 0x41919998},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0xb5000000, 0xbf3bbc00},
+{'l', 0x4182aaab, 0xc1911110},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000ef, 0x000021cc},/*        ï        x-advance: 33.796875 */
+{'M', 0x41b5ddde, 0xc2904445},
+{'l', 0x00000000, 0x42904445},
+{'4', 0x0000ff9e, 0xfdbf0000},
+{'6', 0x00000062, 0xff67ff25},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5ddde, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000f0, 0x00005011},/*        ð        x-advance: 80.066406 */
+{'M', 0x428eaaab, 0xc20eaaab},
+{'q', 0x00000000, 0x4183bbbc},
+{0, 0xc10ddddc, 0x41d5ddde},
+{'q', 0xc10cccd0, 0x41244445},
+{0, 0xc1b2aaac, 0x41244445},
+{'q', 0xc1611112, 0x34c00000},
+{0, 0xc1b77778, 0xc1177778},
+{'q', 0xc10ccccd, 0xc1177777},
+{0, 0xc10ccccd, 0xc1b88888},
+{'q', 0x00000000, 0xc1766668},
+{0, 0x41077777, 0xc1c55556},
+{'q', 0x41077778, 0xc1155558},
+{0, 0x41ab3335, 0xc1155558},
+{'8', 0x1053002c, 0x2b431026},
+{'9', 0xff98ffe7, 0xff4eff9c},
+{'4', 0x004fff8c, 0xffcbffda},
+{'l', 0x414cccd0, 0xc10aaaa8},
+{'9', 0xffcfffba, 0xffb6ff58},
+{'l', 0x40733338, 0xc12aaab0},
+{'9', 0x001c007f, 0x006600dd},
+{'4', 0xffbc0064, 0x00340026},
+{'l', 0xc1333334, 0x40f33340},
+{'q', 0x40fbbbc0, 0x41055550},
+{0, 0x41444444, 0x419ccccc},
+{'9', 0x005a0023, 0x00c80023},
+{'6', 0x00340000, 0x0023fe6c},
+{'q', 0xb6000000, 0x41044444},
+{0, 0x40a22220, 0x41755555},
+{'q', 0x40a22220, 0x40e22224},
+{0, 0x41688888, 0x40e22224},
+{'q', 0x4109999c, 0x00000000},
+{0, 0x41588888, 0xc0f55556},
+{'9', 0xffc30028, 0xff670028},
+{'4', 0xffcb0000, 0xffe1ffff},
+{'8', 0xd0cee5f2, 0xeba6ebdd},
+{'q', 0xc11bbbba, 0x00000000},
+{0, 0xc1711110, 0x40ceeef0},
+{'q', 0xc0aaaaac, 0x40ccccd0},
+{0, 0xc0aaaaac, 0x418b3334},
+{'@', 0x000000f1, 0x00004b66},/*        ñ        x-advance: 75.398438 */
+{'M', 0x421d5556, 0xc27c4445},
+{'8', 0x19ad00d1, 0x42c719dc},
+{'l', 0x00000000, 0x424e2223},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfdbf0000, 0x0000005d},
+{'l', 0x3eccccc0, 0x41100004},
+{'q', 0x41033334, 0xc1255554},
+{0, 0x41ac4446, 0xc1255554},
+{'q', 0x41299998, 0x00000000},
+{0, 0x41866666, 0x40bdddd0},
+{'9', 0x002f0032, 0x009f0032},
+{'4', 0x017c0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23d999a},
+{'8', 0xa0e3bd00, 0xe4abe4e3},
+{'m', 0x41633334, 0xc2180001},
+{'l', 0x41055554, 0x3f3bbc00},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc0999998, 0xc0488880},
+{'8', 0xf4d0f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055557, 0xbecccd00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77780, 0xc00ccce0},
+{0, 0x3ff77780, 0xc0aaaab0},
+{'@', 0x000000f2, 0x00004ddd},/*        ò        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfde70070},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc1899999, 0xc19cccd0},
+{'l', 0x416eeeee, 0x00000000},
+{'@', 0x000000f3, 0x00004ddd},/*        ó        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfe840068},
+{'l', 0x414eeeee, 0xc19cccd0},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419cccd0},
+{'l', 0xc11eeeee, 0x00000000},
+{'@', 0x000000f4, 0x00004ddd},/*        ô        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfde700bc},
+{'l', 0x41844444, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222222, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaab, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000f5, 0x00004ddd},/*        õ        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfdf20119},
+{'l', 0x41055558, 0x3f3bbc00},
+{'8', 0x5edf3a00, 0x23af23df},
+{'9', 0x0000ffdc, 0xfff4ffc8},
+{'l', 0xc09999a0, 0xc0488880},
+{'8', 0xf4d1f4ee, 0x11db00ea},
+{'9', 0x0011fff2, 0x002afff2},
+{'l', 0xc1055556, 0xbecccd00},
+{'8', 0xa221c600, 0xdc51dc21},
+{'8', 0x0d34001e, 0x18290c16},
+{'8', 0x0c310c14, 0xef250016},
+{'q', 0x3ff77760, 0xc00ccce0},
+{0, 0x3ff77760, 0xc0aaaab0},
+{'@', 0x000000f6, 0x00004ddd},/*        ö        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfe3ffff4},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000f7, 0x00004e00},/*        ÷        x-advance: 78.000000 */
+{'M', 0x41f66667, 0xc2926667},
+{'8', 0xd60fe700, 0xef2def0f},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x10d310f1},
+{'8', 0xf0d300e3, 0xd7f1eff1},
+{'m', 0x4221ddde, 0x41a77778},
+{'l', 0x00000000, 0x41444444},
+{'4', 0x0000fdec, 0xff9e0000},
+{'6', 0x00000214, 0x010bfebd},
+{'8', 0xd60fe700, 0xef2def0f},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x000000f8, 0x00004d66},/*        ø        x-advance: 77.398438 */
+{'M', 0x421c0001, 0x3faaaaab},
+{'9', 0x0000ffca, 0xffedff9b},
+{'4', 0x0050ffd9, 0x0000ffbf},
+{'l', 0x40d77776, 0xc159999a},
+{'9', 0xffb0ff94, 0xff10ff93},
+{'l', 0x35000000, 0xc0088890},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'9', 0x0000003b, 0x0015006c},
+{'4', 0xffb20026, 0x00000041},
+{'l', 0xc0d77780, 0x415aaab0},
+{'9', 0x004f0065, 0x00ea0067},
+{'l', 0x00000000, 0x40155550},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ccccc, 0x41d11112},
+{'9', 0x0053ffba, 0x0053ff41},
+{'m', 0xc1a44446, 0xc2126667},
+{'9', 0x00680000, 0x00a20033},
+{'l', 0x41b6eef0, 0xc2391112},
+{'q', 0xc0800000, 0xc0088880},
+{0, 0xc10eeef0, 0xc0088880},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'9', 0x003fffd8, 0x0094ffd8},
+{'6', 0x000c0000, 0xfff40147},
+{'9', 0xff9f0000, 0xff64ffd2},
+{'l', 0xc1b4ccce, 0x42377778},
+{'q', 0x406aaab0, 0x3fd55558},
+{0, 0x41011114, 0x3fd55558},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'q', 0x40a44440, 0xc0f99998},
+{0, 0x40a66660, 0xc1944445},
+{'l', 0x00000000, 0xbfdddde0},
+{'@', 0x000000f9, 0x00004b44},/*        ù        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'4', 0x00000063, 0x02410000},
+{'6', 0x0000ffa2, 0xfccdff4f},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999c, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeef0, 0x00000000},
+{'@', 0x000000fa, 0x00004b44},/*        ú        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'4', 0x00000063, 0x02410000},
+{'6', 0x0000ffa2, 0xfd6aff47},
+{'l', 0x414eeeee, 0xc19cccd0},
+{'l', 0x416ddde0, 0x00000000},
+{'l', 0xc18eeef0, 0x419cccd0},
+{'l', 0xc11eeeee, 0x00000000},
+{'@', 0x000000fb, 0x00004b44},/*        û        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'4', 0x00000063, 0x02410000},
+{'6', 0x0000ffa2, 0xfccdff9c},
+{'l', 0x41844444, 0x4191999c},
+{'0', 0x00ae0500, 0x5ab1a6b0},
+{'l', 0xc1222224, 0x00000000},
+{'l', 0x00000000, 0xbf3bbb80},
+{'l', 0x4182aaac, 0xc1911114},
+{'l', 0x40eeeef0, 0x00000000},
+{'@', 0x000000fc, 0x00004b44},/*        ü        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'4', 0x00000063, 0x02410000},
+{'6', 0x0000ffa2, 0xfd25fed2},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5dddf, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x000000fd, 0x00004099},/*        ý        x-advance: 64.597656 */
+{'M', 0x42080000, 0x41322223},
+{'9', 0x0087ffcd, 0x008fff66},
+{'l', 0xc0044448, 0x3d888800},
+{'9', 0x0000ffe1, 0xfff8ffc9},
+{'4', 0xffb00000, 0x0002001a},
+{'8', 0xec4e0032, 0xb62eec1c},
+{'l', 0x402aaaa8, 0xc0eaaaac},
+{'l', 0xc1cdddde, 0xc28eaaab},
+{'l', 0x41577778, 0x00000000},
+{'l', 0x41908888, 0x42580001},
+{'4', 0xfe500085, 0x00000069},
+{'6', 0x029aff19, 0xfd11ffc9},
+{'l', 0x414eeef2, 0xc19cccd0},
+{'l', 0x416ddddc, 0x00000000},
+{'l', 0xc18eeeee, 0x419cccd0},
+{'l', 0xc11eeef2, 0x00000000},
+{'[', 0x002200fd, 0x00000100},/*kerning*/
+{'[', 0x002700fd, 0x00000100},/*kerning*/
+{'[', 0x006600fd, 0x000000dd},/*kerning*/
+{'[', 0x03c000fd, 0x000000bb},/*kerning*/
+{'[', 0x201c00fd, 0x00000100},/*kerning*/
+{'[', 0x201d00fd, 0x00000100},/*kerning*/
+{'@', 0x000000fe, 0x00004eaa},/*        þ        x-advance: 78.664062 */
+{'M', 0x422bbbbc, 0x3faaaaab},
+{'9', 0x0000ff98, 0xffbeff5c},
+{'l', 0x00000000, 0x420aeef0},
+{'l', 0xc1466667, 0xb6000000},
+{'4', 0xfbef0000, 0x00000063},
+{'l', 0x00000000, 0x4216aaac},
+{'q', 0x40f11114, 0xc10bbbb8},
+{0, 0x41a33335, 0xc10bbbb8},
+{'q', 0x415aaaa8, 0x00000000},
+{0, 0x41a77778, 0x41222220},
+{'9', 0x0051003a, 0x00d5003a},
+{'l', 0x00000000, 0x3fb33320},
+{'q', 0x00000000, 0x417cccd0},
+{0, 0xc0eaaaa8, 0x41d1999b},
+{'9', 0x0053ffc6, 0x0053ff5b},
+{'m', 0xc0733330, 0xc280cccd},
+{'9', 0x0000ffa7, 0x004fff7a},
+{'l', 0x00000000, 0x420a2222},
+{'q', 0x40b55558, 0x411ccccf},
+{0, 0x41877779, 0x411ccccf},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41699998, 0xc0fbbbbe},
+{'9', 0xffc20025, 0xff6c0025},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc12bbbbc},
+{0, 0xc0955558, 0xc1944446},
+{'q', 0xc0955558, 0xc0fbbbb8},
+{0, 0xc16bbbbc, 0xc0fbbbb8},
+{'@', 0x000000ff, 0x00004099},/*        ÿ        x-advance: 64.597656 */
+{'M', 0x42080000, 0x41322223},
+{'9', 0x0087ffcd, 0x008fff66},
+{'l', 0xc0044448, 0x3d888800},
+{'9', 0x0000ffe1, 0xfff8ffc9},
+{'4', 0xffb00000, 0x0002001a},
+{'8', 0xec4e0032, 0xb62eec1c},
+{'l', 0x402aaaa8, 0xc0eaaaac},
+{'l', 0xc1cdddde, 0xc28eaaab},
+{'l', 0x41577778, 0x00000000},
+{'l', 0x41908888, 0x42580001},
+{'4', 0xfe500085, 0x00000069},
+{'6', 0x029aff19, 0xfcccff54},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41e5ddde, 0x3e088800},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'[', 0x002200ff, 0x00000100},/*kerning*/
+{'[', 0x002700ff, 0x00000100},/*kerning*/
+{'[', 0x006600ff, 0x000000dd},/*kerning*/
+{'[', 0x03c000ff, 0x000000bb},/*kerning*/
+{'[', 0x201c00ff, 0x00000100},/*kerning*/
+{'[', 0x201d00ff, 0x00000100},/*kerning*/
+{'@', 0x00000141, 0x00004988},/*        Ł        x-advance: 73.531250 */
+{'M', 0x428c4445, 0xc1277778},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc26b7779, 0x00000000},
+{'l', 0x35800000, 0xc22fbbbc},
+{'l', 0xc10eeef0, 0x40377770},
+{'l', 0x35000000, 0xc1055554},
+{'l', 0x410eeef0, 0xc0377780},
+{'l', 0xb5800000, 0xc2333334},
+{'l', 0x414ccccd, 0x00000000},
+{'l', 0x00000000, 0x4222eef0},
+{'l', 0x418c4445, 0xc0b11110},
+{'l', 0x00000000, 0x41055554},
+{'l', 0xc18c4445, 0x40b11110},
+{'l', 0x00000000, 0x42162223},
+{'l', 0x42384446, 0x00000000},
+{'@', 0x000003c0, 0x00005166},/*        π        x-advance: 81.398438 */
+{'M', 0x402eeef0, 0xc277bbbd},
+{'l', 0x00000000, 0xc1233334},
+{'l', 0x42922222, 0x00000000},
+{'4', 0x00510000, 0x0000ffae},
+{'l', 0x00000000, 0x422e2223},
+{'8', 0x39132c00, 0x0c2c0c13},
+{'9', 0x00000012, 0xfffa002e},
+{'l', 0x3d888800, 0x41200000},
+{'8', 0x0bb40bdd, 0xdfa200ca},
+{'9', 0xffdeffda, 0xff87ffda},
+{'l', 0x00000000, 0xc22ddddf},
+{'l', 0xc1d55556, 0x00000000},
+{'l', 0x00000000, 0x4277bbbd},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc277bbbd},
+{'l', 0xc1344445, 0x00000000},
+{'@', 0x0000201c, 0x00003044},/*        “        x-advance: 48.265625 */
+{'M', 0x40e00001, 0xc28f1112},
+{'l', 0x00000000, 0xc1011110},
+{'8', 0x9a18d000, 0xa644ca18},
+{'l', 0x40e00004, 0x409bbbc0},
+{'9', 0x0047ffce, 0x0093ffcd},
+{'4', 0x00460000, 0x0000ff9f},
+{'m', 0x41a80001, 0x00000000},
+{'l', 0x00000000, 0xc1011110},
+{'8', 0x9a18d000, 0xa644ca18},
+{'l', 0x40e00000, 0x409bbbc0},
+{'9', 0x0047ffce, 0x0093ffcd},
+{'l', 0x00000000, 0x410dddd8},
+{'l', 0xc1433332, 0x00000000},
+{'[', 0x0077201c, 0x000000bb},/*kerning*/
+{'@', 0x0000201d, 0x000030cc},/*        ”        x-advance: 48.796875 */
+{'M', 0x41b55556, 0xc2ccccce},
+{'l', 0x00000000, 0x41088890},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e22224, 0xc09bbbc0},
+{'9', 0xffb90033, 0xff680033},
+{'4', 0xffbb0000, 0x00000062},
+{'m', 0x41a3bbbc, 0x00000000},
+{'l', 0x00000000, 0x41088890},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e22224, 0xc09bbbc0},
+{'9', 0xffb90033, 0xff680033},
+{'l', 0x00000000, 0xc10bbbc0},
+{'l', 0x41444444, 0x00000000},
+{'[', 0x0077201d, 0x000000bb},/*kerning*/
+{'@', 0x00002022, 0x00002e11},/*        •        x-advance: 46.066406 */
+{'M', 0x41144445, 0xc24e2223},
+{'8', 0xb51cd300, 0xe34fe31d},
+{'8', 0x1e500032, 0x4b1d1d1d},
+{'l', 0x00000000, 0x402eeef0},
+{'8', 0x4be32d00, 0x1db11de4},
+{'8', 0xe3b000ce, 0xb5e4e3e4},
+{'l', 0x00000000, 0xc02eeef0},
+{'@', 0x00002026, 0x00005b55},/*        …        x-advance: 91.332031 */
+{'M', 0x411dddde, 0xc0d11112},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x41e91113, 0x00000000},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x41dd5556, 0x00000000},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x000020ac, 0x00004cbb},/*        €        x-advance: 76.730469 */
+{'M', 0x428c6667, 0xbf2aaaab},
+{'q', 0xc0fbbbc0, 0x40000000},
+{0, 0xc1800000, 0x40000000},
+{'q', 0xc17aaaac, 0x34000000},
+{0, 0xc1cd5557, 0xc1155555},
+{'9', 0xffb5ffb0, 0xff1fffae},
+{'0', 0xbe0000a2, 0xb800005e},
+{'4', 0x0000ffa2, 0xffbe0000},
+{'l', 0x413eeef0, 0x00000000},
+{'q', 0x3f199980, 0xc1922224},
+{0, 0x41277778, 0xc1db3334},
+{'q', 0x411eeeee, 0xc1133330},
+{0, 0x41cb3333, 0xc1133330},
+{'9', 0x00000038, 0x00100080},
+{'l', 0xbfaaaac0, 0x412bbbb8},
+{'q', 0xc0e44440, 0xc0155540},
+{0, 0xc1699998, 0xc0155540},
+{'q', 0xc1244444, 0x00000000},
+{0, 0xc183bbbc, 0x40ccccc0},
+{'9', 0x0033ffcf, 0x009dffcb},
+{'l', 0x41cc4444, 0x00000000},
+{'l', 0x00000000, 0x41055554},
+{'l', 0xc1cccccd, 0x00000000},
+{'l', 0x00000000, 0x41111114},
+{'4', 0x000000cc, 0x00420000},
+{'l', 0xc1cccccd, 0x00000000},
+{'q', 0x3e8888c0, 0x415cccce},
+{0, 0x40d11114, 0x41a3bbbc},
+{'q', 0x40caaaa8, 0x40d33334},
+{0, 0x4185ddde, 0x40d33334},
+{'q', 0x40f33338, 0x00000000},
+{0, 0x41688888, 0xc0111110},
+{'l', 0x3faaaac0, 0x412aaaab},
+{'@', 0x00002122, 0x00005566},/*        â„¢        x-advance: 85.398438 */
+{'M', 0x42840000, 0xc2751112},
+{'l', 0x00000000, 0xc1d2aaac},
+{'l', 0xc1144440, 0x41d2aaac},
+{'l', 0xc05ddde0, 0x00000000},
+{'l', 0xc1155558, 0xc1d22224},
+{'l', 0x00000000, 0x41d22224},
+{'l', 0xc0c00000, 0x00000000},
+{'l', 0x00000000, 0xc20f3334},
+{'l', 0x40eeeef0, 0x00000000},
+{'l', 0x4119999c, 0x41d44444},
+{'l', 0x4118888c, 0xc1d44444},
+{'4', 0x0000003b, 0x011e0000},
+{'6', 0x0000ffd0, 0xfee2fef6},
+{'l', 0x00000000, 0x40acccd0},
+{'l', 0xc11dddde, 0x00000000},
+{'l', 0x00000000, 0x41f33334},
+{'l', 0xc0c22224, 0x00000000},
+{'l', 0x00000000, 0xc1f33334},
+{'l', 0xc11ccccc, 0x00000000},
+{'l', 0xb5000000, 0xc0acccd0},
+{'l', 0x41cdddde, 0x00000000},
+{'@', 0x00002212, 0x00004e11},/*        −        x-advance: 78.066406 */
+{'M', 0x4285bbbc, 0xc2562223},
+{'l', 0x00000000, 0x41222224},
+{'l', 0xc25eaaab, 0x00000000},
+{'l', 0x00000000, 0xc1222224},
+{'l', 0x425eaaab, 0x00000000},
+{'@', 0x00002248, 0x00004cee},/*        ≈        x-advance: 76.929688 */
+{'M', 0x40dbbbbc, 0xc23ddddf},
+{'l', 0xbd888880, 0xc1499998},
+{'q', 0x40d9999a, 0xc0eaaaa8},
+{0, 0x4182aaac, 0xc0eaaaa8},
+{'9', 0xffff002a, 0x000a0043},
+{'l', 0x415cccce, 0x40d999a0},
+{'q', 0x403bbbc0, 0x3fb33340},
+{0, 0x40fddde0, 0x3fb33340},
+{'9', 0x00000048, 0xffbc007d},
+{'l', 0x3d888c00, 0x41499998},
+{'q', 0xc0d77780, 0x40e88888},
+{0, 0xc17bbbc0, 0x40e88888},
+{'9', 0x0000ffd8, 0xfff6ffc2},
+{'l', 0xc15eeeee, 0xc0d99998},
+{'q', 0xc0488888, 0xbfbbbbc0},
+{0, 0xc1066666, 0xbfaaaac0},
+{'9', 0x0000ffb4, 0x0044ff7e},
+{'m', 0xbd888880, 0x41de6668},
+{'l', 0xbd888880, 0xc149999c},
+{'q', 0x40d77778, 0xc0e88888},
+{0, 0x4182aaab, 0xc0e88888},
+{'9', 0xffff002a, 0x000a0043},
+{'l', 0x415cccce, 0x40d99998},
+{'q', 0x40377770, 0x3faaaab0},
+{0, 0x40fbbbc0, 0x3faaaab0},
+{'9', 0x00000048, 0xffbc007d},
+{'l', 0x3d888800, 0x414aaaac},
+{'q', 0xc0d77770, 0x40e88888},
+{0, 0xc17bbbb8, 0x40e88888},
+{'9', 0x0000ffd8, 0xfff6ffc2},
+{'l', 0xc1600000, 0xc0dbbbbc},
+{'q', 0xc0444448, 0xbfbbbbb0},
+{0, 0xc1055556, 0xbfaaaaa0},
+{'q', 0xc1188889, 0x00000000},
+{0, 0xc1822222, 0x41088888},
+{'@', 0x00002423, 0x00005911},/*        ␣        x-advance: 89.066406 */
+{'M', 0x40aaaaab, 0xc1155556},
+{'l', 0x4128888a, 0x00000000},
+{'l', 0xb5800000, 0x41a00000},
+{'l', 0x42655556, 0x35800000},
+{'l', 0x00000000, 0xc1a00000},
+{'l', 0x41288888, 0xb5800000},
+{'l', 0x00000000, 0x41f11112},
+{'l', 0xc29ccccd, 0x00000000},
+{'l', 0xb6200000, 0xc1f11112},
+{'@', 0x0000fb00, 0x00005477},/*        ff        x-advance: 84.464844 */
+{'M', 0x422c8889, 0xc27aaaac},
+{'l', 0xc1755556, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088880, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'4', 0x00400000, 0x0000007a},
+{'6', 0x004b0000, 0x00000128},
+{'l', 0xc1755558, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088800, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'l', 0x00000000, 0x41000000},
+{'l', 0x41755558, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'@', 0x0000fb01, 0x00004baa},/*        fi        x-advance: 75.664062 */
+{'M', 0x42226667, 0xc27aaaac},
+{'l', 0xc16bbbbc, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455557, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xce00005b},
+{'q', 0x00000000, 0xc1444448},
+{0, 0x40e22222, 0xc1966668},
+{'q', 0x40e22224, 0xc0d33330},
+{0, 0x419aaaab, 0xc0d33330},
+{'9', 0x0000003b, 0x00200096},
+{'l', 0xc0044440, 0x41266668},
+{'q', 0xc10aaaac, 0xc05999a0},
+{0, 0xc17eeef0, 0xc05999a0},
+{'8', 0x1ca500c1, 0x55e51ce5},
+{'4', 0x00320000, 0x00000075},
+{'6', 0x004b0000, 0xffb500c2},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc2904445},
+{'l', 0x41455554, 0x00000000},
+{'@', 0x0000fb02, 0x00004d88},/*        fl        x-advance: 77.531250 */
+{'M', 0x422c8889, 0xc27aaaac},
+{'l', 0xc1755556, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xbf00005b},
+{'q', 0x3e088880, 0xc1355558},
+{0, 0x40d11114, 0xc18b3334},
+{'q', 0x40ceeef0, 0xc0c44440},
+{0, 0x41911111, 0xc0c44440},
+{'9', 0x00000035, 0x002000d5},
+{'4', 0x031d0000, 0x0000ff9e},
+{'l', 0x00000000, 0xc2b7ddde},
+{'8', 0xf695f6be, 0x69960098},
+{'l', 0x00000000, 0x41000000},
+{'l', 0x41755556, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'@', 0x0000fb03, 0x00007488},/*        ffi        x-advance: 116.531250 */
+{'M', 0x4259dddf, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'l', 0xc1d55557, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088880, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'4', 0x00400000, 0x000000d5},
+{'l', 0x00000000, 0xc0c88880},
+{'q', 0x00000000, 0xc1444448},
+{0, 0x40e00000, 0xc1966668},
+{'q', 0x40e22228, 0xc0d33330},
+{0, 0x419aaaaa, 0xc0d33330},
+{'8', 0x094a0026, 0x174d0924},
+{'l', 0xc0088880, 0x41266668},
+{'q', 0xc1077778, 0xc05999a0},
+{0, 0xc17ddde0, 0xc05999a0},
+{'8', 0x1ca500c1, 0x55e51ce5},
+{'l', 0x00000000, 0x40c88880},
+{'l', 0x416bbbc0, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'4', 0x0000ff8b, 0x01f50000},
+{'6', 0x0000ff9e, 0xfdbf019a},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc1455550, 0x00000000},
+{'l', 0x00000000, 0xc2904445},
+{'l', 0x41455550, 0x00000000},
+{'@', 0x0000fb04, 0x00007488},/*        ffl        x-advance: 116.531250 */
+{'M', 0x4259dddf, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'l', 0xc1d55557, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088880, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'4', 0x00400000, 0x000000d5},
+{'l', 0x00000000, 0xc1022220},
+{'q', 0x3e088800, 0xc1355558},
+{0, 0x40d11110, 0xc18b3334},
+{'q', 0x40ceeee8, 0xc0c44440},
+{0, 0x41911112, 0xc0c44440},
+{'9', 0x00000035, 0x002000d5},
+{'4', 0x031d0000, 0x0000ff9e},
+{'l', 0x00000000, 0xc2b7ddde},
+{'8', 0xf695f6be, 0x69960098},
+{'l', 0x00000000, 0x41000000},
+{'l', 0x41755558, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'l', 0xc1755558, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455554, 0x00000000},
+{'@', 0x0000fb05, 0x00005422},/*        ſt        x-advance: 84.132812 */
+{'M', 0x42180001, 0xc2cf999a},
+{'8', 0x0e6a002e, 0x266c0e3b},
+{'l', 0x00000000, 0x41c80000},
+{'l', 0x41577778, 0x00000000},
+{'4', 0x004b0000, 0x0000ff95},
+{'l', 0x00000000, 0x42333334},
+{'8', 0x38132c00, 0x0c2c0c13},
+{'9', 0x00000012, 0xfffa002e},
+{'l', 0x3d888800, 0x41211112},
+{'8', 0x0ab50adf, 0xdfa200ca},
+{'9', 0xffdfffda, 0xff88ffda},
+{'l', 0x00000000, 0xc232eef0},
+{'l', 0xc1533334, 0x00000000},
+{'4', 0xffb50000, 0x00000069},
+{'l', 0x00000000, 0xc1991110},
+{'8', 0xf3d2f8f0, 0xfbcbfbe3},
+{'9', 0x0000ff9f, 0x006fff9f},
+{'l', 0x00000000, 0x429f7778},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc200005b},
+{'q', 0x3d888880, 0xc1388888},
+{0, 0x40c22224, 0xc18d5554},
+{'q', 0x40c00000, 0xc0c44440},
+{0, 0x4183bbbd, 0xc0c44440},
+};
+#define ctx_font_Roboto_Regular_name "Roboto"
+#endif
diff --git a/usermodule/uctx/fonts/Tinos-Bold.h b/usermodule/uctx/fonts/Tinos-Bold.h
new file mode 100644
index 0000000000000000000000000000000000000000..a9ce344f9c75622dc866f759907739e05626012d
--- /dev/null
+++ b/usermodule/uctx/fonts/Tinos-Bold.h
@@ -0,0 +1,5459 @@
+#ifndef CTX_FONT_Tinos_Bold
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Tinos_Bold[]={
+{15, 0x0000a008, 0x00001548},/* length:5448 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000c, 0x00000002},/* Tinos Bold*/
+{32, 0x6f6e6954, 0x6f422073},
+{'l', 0x00000064, 0x00000000},
+{')', 0x0000000c, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x0000241e},/*                 x-advance: 36.117188 */
+{'@', 0x00000021, 0x0000301c},/*        !        x-advance: 48.109375 */
+{'M', 0x41e00e73, 0xc1ed097c},
+{'l', 0xc101ce56, 0x00000000},
+{'4', 0xfdf9ffcd, 0x000000a8},
+{'6', 0x0207ffcd, 0x00fdffe0},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x00000022, 0x00005036},/*        "        x-advance: 80.210938 */
+{'M', 0x41801ce6, 0xc2bd34d4},
+{'l', 0x41919bc4, 0x00000000},
+{'4', 0x010fffd4, 0x0000ffc6},
+{'6', 0xfef1ffd6, 0x000000f0},
+{'l', 0x41919bc6, 0x00000000},
+{'l', 0xc0b015b0, 0x4207bb60},
+{'l', 0xc0eac790, 0x00000000},
+{'l', 0xc0ab91d8, 0xc207bb60},
+{'@', 0x00000023, 0x0000483d},/*        #        x-advance: 72.238281 */
+{'M', 0x425119bd, 0xc1e7f52a},
+{'l', 0xc0ab91d8, 0x41e7f52a},
+{'l', 0xc1216934, 0x00000000},
+{'l', 0x40ab91d8, 0xc1e7f52a},
+{'l', 0xc1986187, 0x00000000},
+{'l', 0xc0a70e00, 0x41e7f52a},
+{'l', 0xc124cc14, 0x00000000},
+{'l', 0x40ab91d8, 0xc1e7f52a},
+{'l', 0xc13136a2, 0x00000000},
+{'l', 0xb4c00000, 0xc10ad604},
+{'l', 0x414d6e9e, 0x00000000},
+{'l', 0x406f4b68, 0xc1a1f9ae},
+{'l', 0xc184a0bc, 0x00000000},
+{'l', 0xb4c00000, 0xc10ad604},
+{'l', 0x41919bc4, 0x00000000},
+{'l', 0x40a4cc14, 0xc1e00e74},
+{'l', 0x41228a2a, 0x00000000},
+{'l', 0xc0a70e00, 0x41e00e74},
+{'l', 0x41986186, 0x00000000},
+{'l', 0x40a70e00, 0xc1e00e74},
+{'l', 0x41216930, 0x00000000},
+{'l', 0xc0a70df8, 0x41e00e74},
+{'l', 0x413015ac, 0x00000000},
+{'l', 0x00000000, 0x410ad604},
+{'l', 0xc148eac8, 0x00000000},
+{'l', 0xc06643c0, 0x41a1f9ae},
+{'4', 0x00000081, 0x00450000},
+{'6', 0x0000ff70, 0xff19ff43},
+{'l', 0xc06f4b60, 0x41a1f9ae},
+{'l', 0x41986185, 0x00000000},
+{'l', 0x4073cf40, 0xc1a1f9ae},
+{'l', 0xc198f201, 0x00000000},
+{'@', 0x00000024, 0x0000483d},/*        $        x-advance: 72.238281 */
+{'M', 0x42037fc6, 0x3fb49983},
+{'q', 0xc0f18d50, 0xbe107ad0},
+{0, 0xc17bb5f4, 0xbfd8b837},
+{'9', 0xfff4ffc0, 0xffe6ffa1},
+{'4', 0xff4c0000, 0x00000034},
+{'l', 0x40228a2c, 0x4151f275},
+{'8', 0x29401710, 0x1354122f},
+{'l', 0x00000000, 0xc209b50e},
+{'q', 0xc13da12e, 0xc094fea0},
+{0, 0xc184a0bb, 0xc1065228},
+{'8', 0xb6c5e2db, 0x91ecd4ec},
+{'q', 0x00000000, 0xc1228a28},
+{0, 0x40e885a4, 0xc184a0bc},
+{'9', 0xffcd003a, 0xffc5009a},
+{'4', 0xffb80000, 0x00000039},
+{'l', 0x00000000, 0x410f59d8},
+{'9', 0x00030055, 0x001800ac},
+{'4', 0x009d0000, 0x0000ffcd},
+{'l', 0xc0107ad0, 0xc1216930},
+{'8', 0xe4d4f0f0, 0xf1c6f4e4},
+{'l', 0x00000000, 0x41ea3716},
+{'8', 0x2c631c46, 0x22330f1c},
+{'8', 0x2b261216, 0x3a191810},
+{'q', 0x3f998280, 0x40853138},
+{0, 0x3f998280, 0x41186186},
+{'q', 0x00000000, 0x414587e7},
+{0, 0xc0f3cf38, 0x419fb7c3},
+{'9', 0x003cffc4, 0x0043ff5d},
+{'4', 0x004f0000, 0x0000ffc7},
+{'6', 0xffb40000, 0xff3b00a1},
+{'8', 0xd1f6e500, 0xdfe3edf6},
+{'9', 0xfff2ffed, 0xffe2ffc1},
+{'l', 0x00000000, 0x41fe885a},
+{'8', 0xd44cf732, 0x9e1bdc1b},
+{'m', 0xc1fd6765, 0xc24ff8c6},
+{'8', 0x2c081900, 0x1f191208},
+{'9', 0x000c0010, 0x001d003a},
+{'l', 0x00000000, 0xc1d3a3e4},
+{'8', 0x22bc06d4, 0x46e91be9},
+{'@', 0x00000025, 0x0000907a},/*        %        x-advance: 144.476562 */
+{'M', 0x4302ef4c, 0xc1c345fc},
+{'q', 0x00000000, 0x41d282f0},
+{0, 0xc1b9add8, 0x41d282f0},
+{'q', 0xc135ba78, 0xb4c00000},
+{0, 0xc1889418, 0xc0d6764c},
+{'q', 0xc0b49980, 0xc0d6764c},
+{0, 0xc0b49980, 0xc19ce55d},
+{'q', 0x00000000, 0xc148eac8},
+{0, 0x40b6db70, 0xc199827c},
+{'q', 0x40b6db70, 0xc0d67648},
+{0, 0x418b667c, 0xc0d67648},
+{'q', 0x41337890, 0x00000000},
+{0, 0x418803a0, 0x40cfb088},
+{'9', 0x0033002e, 0x009b002e},
+{'m', 0xc28c6356, 0xc23723ac},
+{'q', 0x36800000, 0x41d1f276},
+{0, 0xc1ba3e4c, 0x41d1f276},
+{'q', 0xc135ba7a, 0x00000000},
+{0, 0xc188039e, 0xc0d67648},
+{'q', 0xc0b49980, 0xc0d67650},
+{0, 0xc0b49980, 0xc19c54e4},
+{'q', 0x00000000, 0xc1cf200c},
+{0, 0x41b88cde, 0xc1cf200c},
+{'q', 0x4133788c, 0x00000000},
+{0, 0x4188039e, 0x40cfb080},
+{'9', 0x0033002e, 0x009b002e},
+{'m', 0xc1797408, 0x428f35bb},
+{'l', 0xc1294fec, 0x34c00000},
+{'4', 0xfcf50217, 0x00000055},
+{'6', 0x030bfde9, 0xff320234},
+{'q', 0x00000000, 0xc124cc14},
+{0, 0xbffcd6c0, 0xc16be884},
+{'8', 0xdcd0dcf1, 0x22d300e1},
+{'q', 0xbfe1bfc0, 0x4089b510},
+{0, 0xbfe1bfc0, 0x416f4b68},
+{'q', 0x00000000, 0x412ef4b7},
+{0, 0x3fe1bfc0, 0x4174f033},
+{'8', 0x222d220e, 0xdc300020},
+{'9', 0xffdc000f, 0xff88000f},
+{'m', 0xc28c8773, 0xc23723ac},
+{'q', 0x00000000, 0xc124cc10},
+{0, 0xbffcd700, 0xc16be880},
+{'8', 0xdcd0dcf1, 0x22d300e1},
+{'q', 0xbfe1bfe0, 0x4089b500},
+{0, 0xbfe1bfe0, 0x416f4b60},
+{'q', 0x00000000, 0x412ef4b8},
+{0, 0x3fe1bfe0, 0x4174f034},
+{'8', 0x222d220e, 0xdc300020},
+{'q', 0x3ffcd700, 0xc092bcb8},
+{0, 0x3ffcd700, 0xc1718d54},
+{'@', 0x00000026, 0x0000785a},/*        &        x-advance: 120.351562 */
+{'M', 0x42932916, 0xc29764af},
+{'8', 0x4af02a00, 0x37cf1ff0},
+{'9', 0x0017ffe1, 0x0032ff9e},
+{'l', 0x41d6764c, 0x41c1948a},
+{'9', 0xffb7001c, 0xff530021},
+{'l', 0xc0fa9500, 0xbfeac780},
+{'l', 0x00000000, 0xc0907ad0},
+{'l', 0x42069a6a, 0x00000000},
+{'4', 0x00240000, 0x000effc2},
+{'l', 0xbff3cf40, 0x40cd6ea0},
+{'9', 0x0074ffde, 0x00bfffac},
+{'l', 0x41785310, 0x415f7df8},
+{'l', 0x4102ef50, 0x3fe1bfe0},
+{'4', 0x00230000, 0x0000ff28},
+{'l', 0xc1065230, 0xc0f85314},
+{'q', 0xc146a8d8, 0x4112bcba},
+{0, 0xc1fa0482, 0x4112bcba},
+{'q', 0xc19b33ed, 0x34c00000},
+{0, 0xc1e6d435, 0xc0d4345f},
+{'q', 0xc1161f9b, 0xc0d43461},
+{0, 0xc1161f9b, 0xc19f2748},
+{'8', 0xa213ca00, 0xbb36d813},
+{'q', 0x408bf6f8, 0xc06ac790},
+{0, 0x414c4daa, 0xc0df7df8},
+{'q', 0xc10e38e4, 0xc123ab20},
+{0, 0xc10e38e4, 0xc1b5ba78},
+{'q', 0x00000000, 0xc11ce560},
+{0, 0x40dd3c0c, 0xc174f038},
+{'q', 0x40dd3c0c, 0xc0b015a0},
+{0, 0x419d75d7, 0xc0b015a0},
+{'q', 0x414587e8, 0x00000000},
+{0, 0x41974090, 0x40a70e00},
+{'9', 0x00290035, 0x00790035},
+{'m', 0xc1d827ba, 0x428b425f},
+{'9', 0x00000075, 0xffbd00bf},
+{'l', 0xc2069a69, 0xc1fa9500},
+{'8', 0x40c919da, 0x5ef026f0},
+{'q', 0x00000000, 0x41216934},
+{0, 0x40a0483c, 0x416f4b67},
+{'9', 0x00260028, 0x0026006e},
+{'m', 0xc0ef4b68, 0xc28d844b},
+{'8', 0x430b2400, 0x46301f0c},
+{'8', 0xca3ae92a, 0xac0fe10f},
+{'8', 0x9fc19f00, 0x18c900da},
+{'q', 0xc002ef50, 0x40422500},
+{0, 0xc002ef50, 0x41119bc0},
+{'@', 0x00000027, 0x00002824},/*        '        x-advance: 40.140625 */
+{'M', 0x413015ac, 0xc2bd34d4},
+{'l', 0x41919bc5, 0x00000000},
+{'l', 0xc0b015ac, 0x4207bb60},
+{'l', 0xc0eac790, 0x00000000},
+{'l', 0xc0ab91d8, 0xc207bb60},
+{'@', 0x00000028, 0x0000301c},/*        (        x-advance: 48.109375 */
+{'M', 0x41ccde24, 0xc20b667e},
+{'q', 0x00000000, 0x4185c1b2},
+{0, 0x3fe1bfe0, 0x41d79742},
+{'q', 0x3feac790, 0x4123ab1d},
+{0, 0x40b6db70, 0x418fea54},
+{'9', 0x003e001f, 0x00650052},
+{'l', 0x00000000, 0x4100ad62},
+{'q', 0xc15f7df8, 0xc0ed097c},
+{0, 0xc1aef4b7, 0xc1813ddc},
+{'q', 0xc0fa94fe, 0xc10d17ee},
+{0, 0xc1391d58, 0xc1a55c8e},
+{'q', 0xc06ac792, 0xc13ec226},
+{0, 0xc06ac792, 0xc1e6d435},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x406ac792, 0xc1e522c4},
+{'q', 0x406f4b64, 0xc13da134},
+{0, 0x41391d58, 0xc1a4cc16},
+{'9', 0xffbb003f, 0xff8000ae},
+{'l', 0x00000000, 0x4100ad60},
+{'q', 0xc0cd6ea0, 0x409bc470},
+{0, 0xc124cc14, 0x4148eac8},
+{'q', 0xc0785310, 0x40f61130},
+{0, 0xc0b6db6c, 0x418f59da},
+{'q', 0xbfeac790, 0x4123ab20},
+{0, 0xbfeac790, 0x41d706c6},
+{'@', 0x00000029, 0x0000301c},/*        )        x-advance: 48.109375 */
+{'M', 0x4094fea5, 0x41f61129},
+{'l', 0x00000000, 0xc100ad62},
+{'q', 0x40cd6e9f, 0xc09e0650},
+{0, 0x4124cc14, 0xc14b2cb2},
+{'q', 0x407cd6f0, 0xc0f85314},
+{0, 0x40b6db70, 0xc1907acf},
+{'q', 0x3feac790, 0xc125ed0a},
+{0, 0x3feac790, 0xc1d6764c},
+{'q', 0x00000000, 0xc185c1b2},
+{0, 0xbfeac790, 0xc1d79740},
+{'q', 0xbfeac790, 0xc123ab20},
+{0, 0xc0b6db6e, 0xc18ec960},
+{'9', 0xffc4ffe1, 0xff9cffae},
+{'l', 0xb5000000, 0xc100ad60},
+{'q', 0x4161bfe4, 0x40f18d50},
+{0, 0x41af8532, 0x41825ed0},
+{'q', 0x40fa94fc, 0x410ad608},
+{0, 0x4137fc62, 0x41a43b9c},
+{'q', 0x406ac790, 0x413c8038},
+{0, 0x406ac790, 0x41e401ce},
+{'q', 0x00000000, 0x4186e2a7},
+{0, 0xc06ac790, 0x41e643ba},
+{'q', 0xc06ac790, 0x413da12f},
+{0, 0xc1391d58, 0x41a55c8e},
+{'q', 0xc0fa9500, 0x410bf6fa},
+{0, 0xc1aef4b7, 0x4181ce57},
+{'@', 0x0000002a, 0x0000483d},/*        *        x-advance: 72.238281 */
+{'M', 0x421ce55d, 0xc27c8ead},
+{'l', 0x40a4cc10, 0x41b25798},
+{'l', 0xc1837fc6, 0x00000000},
+{'l', 0x409e0650, 0xc1b49982},
+{'l', 0xc1a1f9ae, 0x41853136},
+{'l', 0xc0d4345d, 0xc1706c5c},
+{'l', 0x41ad4346, 0xc0c6a8e0},
+{'l', 0xc1ad4346, 0xc0cb2cb0},
+{'l', 0x40d4345e, 0xc1706c60},
+{'l', 0x41a1f9ae, 0x41837fc8},
+{'l', 0xc09e0650, 0xc1b2e814},
+{'l', 0x41837fc6, 0x00000000},
+{'l', 0xc0a4cc10, 0x41b2e814},
+{'l', 0x41a28a28, 0xc1801ce4},
+{'l', 0x40d67648, 0x416be880},
+{'l', 0xc1b015ac, 0x40c6a8e0},
+{'l', 0x41b015ac, 0x40c22508},
+{'l', 0xc0d67648, 0x416e2a70},
+{'l', 0xc1a28a28, 0xc180ad60},
+{'@', 0x0000002b, 0x00005253},/*        +        x-advance: 82.324219 */
+{'M', 0x4238d51c, 0xc22b91d6},
+{'l', 0x00000000, 0x41e4924a},
+{'l', 0xc1216934, 0x00000000},
+{'l', 0x00000000, 0xc1e4924a},
+{'l', 0xc1e401cf, 0x00000000},
+{'l', 0x35000000, 0xc1216934},
+{'l', 0x41e401cf, 0x00000000},
+{'l', 0x00000000, 0xc1e522c2},
+{'l', 0x41216934, 0x00000000},
+{'l', 0x00000000, 0x41e522c2},
+{'l', 0x41e49248, 0x00000000},
+{'l', 0x00000000, 0x41216934},
+{'l', 0xc1e49248, 0x00000000},
+{'@', 0x0000002c, 0x0000241e},/*        ,        x-advance: 36.117188 */
+{'M', 0x41f4f033, 0xc0ef4b67},
+{'q', 0x00000000, 0x413015ac},
+{0, 0xc0eac790, 0x4194fea6},
+{'9', 0x003cffc6, 0x0059ff55},
+{'l', 0xb4c00000, 0xc0cfb088},
+{'8', 0xe43cf623, 0xda26ef19},
+{'8', 0xd80eeb0e, 0xebf8f400},
+{'8', 0xe9dff7f8, 0xbbd6ead6},
+{'8', 0xc919dc00, 0xed40ed19},
+{'8', 0x1f4f002f, 0x4f1f1e1f},
+{'@', 0x0000002d, 0x0000301c},/*        -        x-advance: 48.109375 */
+{'M', 0x40a94feb, 0xc1deed7d},
+{'l', 0x00000000, 0xc14466f2},
+{'l', 0x42161f9b, 0x00000000},
+{'l', 0x00000000, 0x414466f2},
+{'l', 0xc2161f9b, 0x00000000},
+{'@', 0x0000002e, 0x0000241e},/*        .        x-advance: 36.117188 */
+{'M', 0x41907acf, 0x4002ef4c},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x0000002f, 0x00002824},/*        /        x-advance: 40.140625 */
+{'M', 0x41089418, 0x3fb49983},
+{'l', 0xc11f2748, 0x00000000},
+{'l', 0x4204a0bc, 0xc2c1282f},
+{'l', 0x411e0654, 0x00000000},
+{'l', 0xc204587f, 0x42c1282f},
+{'@', 0x00000030, 0x0000483d},/*        0        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc23ec225},
+{'q', 0x00000000, 0x424466f1},
+{0, 0xc1f85312, 0x424466f1},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc148eac8},
+{'q', 0xc0f3cf3c, 0xc148eac8},
+{0, 0xc0f3cf3c, 0xc2122c3f},
+{'q', 0x00000000, 0xc1bbefbe},
+{0, 0x40f3cf3e, 0xc20fa217},
+{'q', 0x40f3cf3e, 0xc147c9d0},
+{0, 0x41b91d5a, 0xc147c9d0},
+{'q', 0x416f4b68, 0x00000000},
+{0, 0x41b5ba78, 0x414587e8},
+{'9', 0x0062003e, 0x0120003e},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1b015ae},
+{0, 0xc01e0650, 0xc1fcd6ea},
+{'8', 0xb3c2b3ed, 0x4ac500d7},
+{'q', 0xc00bf6f8, 0x4114fea8},
+{0, 0xc00bf6f8, 0x41ffa952},
+{'q', 0x00000000, 0x41b7fc63},
+{0, 0x40107ad0, 0x42021693},
+{'8', 0x4c3b4c12, 0xb33d0029},
+{'q', 0x40228a30, 0xc11ce55d},
+{0, 0x40228a30, 0xc2013ddb},
+{'@', 0x00000031, 0x0000483d},/*        1        x-advance: 72.238281 */
+{'M', 0x42414c4e, 0xc0f85314},
+{'l', 0x41837fc8, 0x3fd8b838},
+{'l', 0x00000000, 0x40c22506},
+{'l', 0xc254c4dc, 0x00000000},
+{'l', 0x35800000, 0xc0c22506},
+{'l', 0x4182ef4c, 0xbfd8b838},
+{'l', 0x00000000, 0xc28ea540},
+{'l', 0xc1825ed0, 0x40ab91d0},
+{'l', 0xb5800000, 0xc0bfe310},
+{'l', 0x41d55556, 0xc17a9500},
+{'l', 0x4120483c, 0x00000000},
+{'l', 0x00000000, 0x42af3cf4},
+{'@', 0x00000032, 0x0000483d},/*        2        x-advance: 72.238281 */
+{'M', 0x42841041, 0x00000000},
+{'4', 0x0000fe21, 0xff960000},
+{'q', 0x40c22506, 0xc0cfb088},
+{0, 0x4133788d, 0xc13a3e4e},
+{'q', 0x41349982, 0xc1325798},
+{0, 0x41841042, 0xc18bf6f8},
+{'q', 0x40a70e00, 0xc0cd6ea0},
+{0, 0x40f3cf38, 0xc1543460},
+{'q', 0x401e0650, 0xc0dafa28},
+{0, 0x401e0650, 0xc179740c},
+{'8', 0x9de3c300, 0xdbb1dbe3},
+{'8', 0x07c900de, 0x16da07ec},
+{'4', 0x006dffe8, 0x0000ffcf},
+{'l', 0x00000000, 0xc1ac2250},
+{'8', 0xf058f62d, 0xf95ef92b},
+{'q', 0x41797408, 0x00000000},
+{0, 0x41bec224, 0x40cd6ea0},
+{'q', 0x41053138, 0x40cd6ea0},
+{0, 0x41053138, 0x41922c40},
+{'8', 0x6bed3b00, 0x5dc22fed},
+{'q', 0xc0a94fe8, 0x40b6db68},
+{0, 0xc1a94fea, 0x4194fea5},
+{'9', 0x0027ffd0, 0x0059ff98},
+{'l', 0x4239add4, 0x00000000},
+{'l', 0x00000000, 0x417f18d5},
+{'@', 0x00000033, 0x0000483d},/*        3        x-advance: 72.238281 */
+{'M', 0x42869a6a, 0xc1cdff19},
+{'q', 0x00000000, 0x414e8f94},
+{0, 0xc113ddb0, 0x41a0483e},
+{'q', 0xc113ddb0, 0x40e401cd},
+{0, 0xc1cd6e9e, 0x40e401cd},
+{'9', 0x0000ff98, 0xffeaff30},
+{'4', 0xff49fffa, 0x00000033},
+{'l', 0x406ac790, 0x4172ae48},
+{'8', 0x1b661b31, 0xd56a0044},
+{'q', 0x40998280, 0xc0b015ac},
+{0, 0x40998280, 0xc174f032},
+{'8', 0x98e1bc00, 0xd79ddce2},
+{'4', 0xfffdffbf, 0xffbc0000},
+{'l', 0x40fcd6ec, 0xbf107ac0},
+{'8', 0xdc49fd32, 0x9b18df18},
+{'8', 0x9de4c100, 0xdcb0dce4},
+{'8', 0x09ce00e2, 0x13dc09ed},
+{'4', 0x006dffe8, 0x0000ffcf},
+{'l', 0x00000000, 0xc1ac2250},
+{'8', 0xed63f239, 0xfb52fb29},
+{'q', 0x41fe885a, 0x00000000},
+{0, 0x41fe885a, 0x41ba3e50},
+{'q', 0x00000000, 0x41198278},
+{0, 0xc0a28a28, 0x41785310},
+{'q', 0xc0a28a28, 0x40bda130},
+{0, 0xc16885a4, 0x40eac790},
+{'q', 0x41bec226, 0x40391d60},
+{0, 0x41bec226, 0x41be31ab},
+{'@', 0x00000034, 0x0000483d},/*        4        x-advance: 72.238281 */
+{'M', 0x42706c5c, 0xc1958f20},
+{'l', 0x00000000, 0x41958f20},
+{'l', 0xc197d10a, 0x00000000},
+{'l', 0x00000000, 0xc1958f20},
+{'l', 0xc21c9d20, 0x00000000},
+{'l', 0x35a00000, 0xc137fc64},
+{'l', 0x422a70e1, 0xc281ce56},
+{'l', 0x41785310, 0x00000000},
+{'l', 0x00000000, 0x4277c298},
+{'4', 0x0000004b, 0x00730000},
+{'6', 0x0000ffb5, 0xfeadff69},
+{'9', 0xffc10000, 0xff890005},
+{'l', 0xc1e12f69, 0x422bda14},
+{'l', 0x41db8a9d, 0x00000000},
+{'l', 0x00000000, 0xc1e00e74},
+{'@', 0x00000035, 0x0000483d},/*        5        x-advance: 72.238281 */
+{'M', 0x42077322, 0xc25fc636},
+{'q', 0x4186522c, 0x00000000},
+{0, 0x41c73958, 0x40dd3c10},
+{'q', 0x4102ef48, 0x40dd3c10},
+{0, 0x4102ef48, 0x41a70dff},
+{'q', 0x00000000, 0x416401cf},
+{0, 0xc10e38e0, 0x41af8532},
+{'q', 0xc10d17f0, 0x40f3cf3d},
+{0, 0xc1ca9c38, 0x40f3cf3d},
+{'9', 0x0000ff98, 0xffeaff30},
+{'4', 0xff49fffa, 0x00000033},
+{'l', 0x406ac790, 0x4172ae48},
+{'8', 0x14360c16, 0x073a0720},
+{'q', 0x4181ce56, 0x00000000},
+{0, 0x4181ce56, 0xc1add3c2},
+{'q', 0x00000000, 0xc1349980},
+{0, 0xc0853138, 0xc1825ed0},
+{'8', 0xd898d8e0, 0x0eb700d8},
+{'l', 0xc00bf6f8, 0x3f6ac780},
+{'l', 0xc0e1bfe2, 0x00000000},
+{'l', 0x00000000, 0xc2422507},
+{'l', 0x424587e7, 0x00000000},
+{'4', 0x007d0000, 0x0000feb4},
+{'l', 0x00000000, 0x41c6a8dc},
+{'q', 0x4109b50e, 0xbff3cf40},
+{0, 0x41785314, 0xbff3cf40},
+{'@', 0x00000036, 0x0000483d},/*        6        x-advance: 72.238281 */
+{'M', 0x4288039d, 0xc1eac790},
+{'q', 0x00000000, 0x416e2a70},
+{0, 0xc0f61128, 0x41b6db6e},
+{'q', 0xc0f61128, 0x40fcd6e9},
+{0, 0xc1aef4b8, 0x40fcd6e9},
+{'q', 0xc181ce55, 0xb4000000},
+{0, 0xc1c73957, 0xc14587e8},
+{'q', 0xc109b50d, 0xc14587e6},
+{0, 0xc109b50d, 0xc20f119c},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0x40907ad0, 0xc1d282f0},
+{'q', 0x4092bcba, 0xc13136a0},
+{0, 0x414c4da9, 0xc186e2a8},
+{'q', 0x4102ef4c, 0xc0b91d50},
+{0, 0x4196b015, 0xc0b91d50},
+{'9', 0x00000058, 0x001800a9},
+{'4', 0x00ac0000, 0x0000ffcf},
+{'l', 0xc0422510, 0xc15afa20},
+{'8', 0xe3abe3da, 0x48a500c8},
+{'q', 0xc08bf6f8, 0x41107ad0},
+{0, 0xc0a4cc14, 0x41ca0bc0},
+{'q', 0x40f61128, 0xc0543470},
+{0, 0x4173cf3c, 0xc0543470},
+{'q', 0x414e8f94, 0x00000000},
+{0, 0x419f2748, 0x40e885a8},
+{'9', 0x003a0038, 0x00a70038},
+{'m', 0xc1eebaec, 0x41bd10b4},
+{'q', 0x40a4cc10, 0x35800000},
+{0, 0x40e401d0, 0xc0b25796},
+{'q', 0x3ffcd6e0, 0xc0b25796},
+{0, 0x3ffcd6e0, 0xc185c1b2},
+{'q', 0x00000000, 0xc11f2748},
+{0, 0xc03015b0, 0xc174f030},
+{'8', 0xd6bfd6ea, 0x0cab00d7},
+{'l', 0x00000000, 0x3eb49980},
+{'q', 0x00000000, 0x4223f35c},
+{0, 0x4147c9d4, 0x4223f35c},
+{'@', 0x00000037, 0x0000483d},/*        7        x-advance: 72.238281 */
+{'M', 0x416643ba, 0xc2872ae5},
+{'l', 0xc0c466f2, 0x00000000},
+{'l', 0x00000000, 0xc1d827bc},
+{'l', 0x4271d590, 0x00000000},
+{'l', 0x00000000, 0x40b257a0},
+{'l', 0xc21304f8, 0x42b20f5a},
+{'l', 0xc186e2a7, 0x00000000},
+{'l', 0x421f6f86, 0xc29dbe15},
+{'l', 0xc21546e3, 0x00000000},
+{'l', 0xc04fb088, 0x41349980},
+{'@', 0x00000038, 0x0000483d},/*        8        x-advance: 72.238281 */
+{'M', 0x428282ef, 0xc28ea540},
+{'8', 0x6ae23e00, 0x3fab2be2},
+{'q', 0x4101ce54, 0x40422500},
+{0, 0x4146a8dc, 0x41161f98},
+{'q', 0x4089b508, 0x40cb2cb8},
+{0, 0x4089b508, 0x4173cf3e},
+{'q', 0x00000000, 0x4156764c},
+{0, 0xc0f85310, 0x41a16934},
+{'q', 0xc0f61128, 0x40d8b835},
+{0, 0xc1bfe31a, 0x40d8b835},
+{'q', 0xc1f7321f, 0xb4000000},
+{0, 0xc1f7321f, 0xc1d79741},
+{'q', 0x00000000, 0xc1107ace},
+{0, 0x408bf6f8, 0xc1761126},
+{'8', 0xb761ce22, 0xc0acecca},
+{'q', 0xc06f4b68, 0xc0add3c0},
+{0, 0xc06f4b68, 0xc1555554},
+{'q', 0x00000000, 0xc1391d58},
+{0, 0x40f3cf3e, 0xc1907ad0},
+{'q', 0x40f6112a, 0xc0cfb080},
+{0, 0x41ad4346, 0xc0cfb080},
+{'q', 0x415afa20, 0x00000000},
+{0, 0x41aa70e0, 0x40d43460},
+{'9', 0x0034003d, 0x0091003d},
+{'m', 0xc18ec95c, 0x423723ac},
+{'q', 0x00000000, 0xc12dd3c4},
+{0, 0xc0349980, 0xc17cd6ec},
+{'8', 0xd9b9d9ea, 0x26be00d2},
+{'q', 0xc0228a28, 0x40998280},
+{0, 0xc0228a28, 0x417f18d6},
+{'q', 0x00000000, 0x412ef4b7},
+{0, 0x40228a28, 0x41761129},
+{'8', 0x23422314, 0xdb470030},
+{'9', 0xffdb0016, 0xff870016},
+{'m', 0xc00bf700, 0xc23723ac},
+{'8', 0x95eeb700, 0xdfc8dfee},
+{'8', 0x21cb00dc, 0x6bf021f0},
+{'8', 0x6c104c00, 0x1f351f10},
+{'8', 0xe0390026, 0x9512e012},
+{'@', 0x00000039, 0x0000483d},/*        9        x-advance: 72.238281 */
+{'M', 0x407cd6ea, 0xc2837fc6},
+{'q', 0x00000000, 0xc16643c0},
+{0, 0x41041042, 0xc1b136a4},
+{'q', 0x41041040, 0xc0f85310},
+{0, 0x41b76be8, 0xc0f85310},
+{'q', 0x4184a0bc, 0x00000000},
+{0, 0x41c1948c, 0x413a3e50},
+{'q', 0x40f61128, 0x413a3e50},
+{0, 0x40f61128, 0x4211e402},
+{'q', 0x00000000, 0x417f18d4},
+{0, 0xc0907ad0, 0x41d706c5},
+{'q', 0xc08e38e0, 0x412ef4b7},
+{0, 0xc14d6e9c, 0x41841041},
+{'q', 0xc106522c, 0x40b25799},
+{0, 0xc1a16934, 0x40b25799},
+{'9', 0x0000ffa3, 0xffe8ff51},
+{'4', 0xff540000, 0x00000031},
+{'l', 0x40422508, 0x415afa21},
+{'8', 0x162e0e13, 0x0735071b},
+{'q', 0x40f3cf3c, 0x00000000},
+{0, 0x413da12e, 0xc109b50d},
+{'q', 0x4089b510, 0xc10ad604},
+{0, 0x40a04840, 0xc1c85a4e},
+{'q', 0xc0eac790, 0x40270e00},
+{0, 0xc169a69a, 0x40270e00},
+{'q', 0xc14c4daa, 0x00000000},
+{0, 0xc1a16934, 0xc0f3cf38},
+{'9', 0xffc4ffc6, 0xff55ffc6},
+{'m', 0x41a5ed0a, 0x3e907a00},
+{'q', 0x00000000, 0x41a16934},
+{0, 0x413015ae, 0x41a16934},
+{'9', 0x0000002a, 0xfff60054},
+{'l', 0x00000000, 0xbf7cd6c0},
+{'q', 0x00000000, 0xc1a31aa4},
+{0, 0xc01e0650, 0xc1f580b0},
+{'q', 0xc0198280, 0xc124cc10},
+{0, 0xc1089418, 0xc124cc10},
+{'q', 0xc1294fea, 0x00000000},
+{0, 0xc1294fea, 0x41b88cdc},
+{'@', 0x0000003a, 0x0000301c},/*        :        x-advance: 48.109375 */
+{'M', 0x41bbefbf, 0xc23136a2},
+{'8', 0xe5be00d9, 0xbee6e5e6},
+{'8', 0xbe19d900, 0xe543e51a},
+{'8', 0x1b420028, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'m', 0x00000000, 0x42396597},
+{'8', 0xe5be00d9, 0xbee6e5e6},
+{'8', 0xbe1ad900, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x0000003b, 0x0000301c},/*        ;        x-advance: 48.109375 */
+{'M', 0x42110b4a, 0xc0ef4b67},
+{'q', 0x00000000, 0x413015ac},
+{0, 0xc0eac790, 0x41946e2b},
+{'9', 0x003cffc6, 0x005aff55},
+{'l', 0xb5000000, 0xc0cfb088},
+{'8', 0xe43cf623, 0xda27ef19},
+{'8', 0xd80eeb0e, 0xebf7f400},
+{'8', 0xe9def7f7, 0xbbd5ead5},
+{'8', 0xca18df00, 0xec43ec18},
+{'8', 0x1f4f002e, 0x4f201e20},
+{'m', 0xc14a0bbe, 0xc2134d35},
+{'8', 0xe5be00d9, 0xbee6e5e6},
+{'8', 0xbe19d900, 0xe543e51a},
+{'8', 0x1b420028, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x0000003c, 0x00005253},/*        <        x-advance: 82.324219 */
+{'M', 0x40e643ba, 0xc2333050},
+{'l', 0x00000000, 0xc0cb2cb0},
+{'l', 0x4286522c, 0xc2041042},
+{'l', 0x00000000, 0x41216938},
+{'l', 0xc2586ff9, 0x41d0d17e},
+{'l', 0x42586ff9, 0x41d161fa},
+{'l', 0x00000000, 0x41216934},
+{'l', 0xc286522c, 0xc204587f},
+{'@', 0x0000003d, 0x00005253},/*        =        x-advance: 82.324219 */
+{'M', 0x4294b668, 0xc21a5b34},
+{'l', 0x00000000, 0x41228a28},
+{'4', 0x0000fde7, 0xffaf0000},
+{'6', 0x00000219, 0xff1a0000},
+{'l', 0x00000000, 0x41216930},
+{'l', 0xc286522c, 0x00000000},
+{'l', 0xb6400000, 0xc1216930},
+{'l', 0x4286522c, 0x00000000},
+{'@', 0x0000003e, 0x00005253},/*        >        x-advance: 82.324219 */
+{'M', 0x40eac790, 0xc13b5f44},
+{'l', 0x00000000, 0xc1216934},
+{'l', 0x4258b837, 0xc1d161fa},
+{'l', 0xc258b837, 0xc1d0d17e},
+{'l', 0x00000000, 0xc1216938},
+{'l', 0x4286522c, 0x42041042},
+{'l', 0x00000000, 0x40cb2cb0},
+{'l', 0xc286522c, 0x4204587f},
+{'@', 0x0000003f, 0x0000483d},/*        ?        x-advance: 72.238281 */
+{'M', 0x420a8dc6, 0xc1dc1b17},
+{'4', 0x0000ffc6, 0xff50ffe0},
+{'l', 0x40d67648, 0xbfe1bfe0},
+{'8', 0xcd51f13a, 0x9e17dc17},
+{'8', 0x91e5b300, 0xdea6dee5},
+{'9', 0x0000ffd1, 0x0017ffac},
+{'4', 0x006dffe8, 0x0000ffce},
+{'l', 0x00000000, 0xc1a67d84},
+{'q', 0x413b5f43, 0xc0422500},
+{0, 0x41b6db6e, 0xc0422500},
+{'q', 0x42001ce6, 0x00000000},
+{0, 0x42001ce6, 0x41c85a4c},
+{'q', 0x00000000, 0x4123ab20},
+{0, 0xc0b015b0, 0x418a4588},
+{'9', 0x0038ffd5, 0x004fff85},
+{'4', 0x000dffcf, 0x0072fff1},
+{'m', 0xc04fb090, 0x41ec7900},
+{'8', 0xe5be00d9, 0xbee6e5e6},
+{'8', 0xbe1ad900, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x00000040, 0x00008664},/*        @        x-advance: 134.390625 */
+{'M', 0x42fdafa2, 0xc2543460},
+{'q', 0x00000000, 0x41543460},
+{0, 0xc0dafa20, 0x41c8eac8},
+{'q', 0xc0dafa20, 0x413c803a},
+{0, 0xc194fea4, 0x4197d10c},
+{'q', 0xc13c8038, 0x40e643b7},
+{0, 0xc1c6a8dc, 0x40e643b7},
+{'9', 0x0000ffbb, 0xffbaffb8},
+{'l', 0xc06ac790, 0x40422504},
+{'q', 0xc0e1bfe8, 0x40b91d59},
+{0, 0xc1773220, 0x40b91d59},
+{'8', 0xd9b400d0, 0x96e4d9e4},
+{'q', 0x00000000, 0xc1119bc4},
+{0, 0x406643c0, 0xc18da869},
+{'q', 0x406643b0, 0xc10ad604},
+{0, 0x411f2748, 0xc16e2a70},
+{'q', 0x40cd6ea0, 0xc0c8eac8},
+{0, 0x416522c4, 0xc1174090},
+{'q', 0x40fcd6e8, 0xc04b2cc0},
+{0, 0x41a31aa2, 0xc04b2cc0},
+{'9', 0x00000031, 0x00060067},
+{'l', 0xc1089418, 0x4218a9c4},
+{'8', 0x31f714fb, 0x27fd1cfd},
+{'8', 0x16040c00, 0x09170905},
+{'q', 0x40d43460, 0x00000000},
+{0, 0x41422508, 0xc0b49982},
+{'q', 0x40b015a0, 0xc0b49984},
+{0, 0x410ad600, 0xc1785316},
+{'q', 0x404fb080, 0xc11e0650},
+{0, 0x404fb080, 0xc1a4cc14},
+{'q', 0x00000000, 0xc1892492},
+{0, 0xc1216930, 0xc1d4c4da},
+{'q', 0xc1204840, 0xc1186188},
+{0, 0xc1dd3c0c, 0xc1186188},
+{'q', 0xc17f18d8, 0x00000000},
+{0, 0xc1e4924c, 0x40ff18e0},
+{'q', 0xc148eac4, 0x40fcd6e0},
+{0, 0xc19e96cc, 0x41b529fc},
+{'q', 0xc0e643bc, 0x416ac790},
+{0, 0xc0e643bc, 0x42037fc6},
+{'q', 0x00000000, 0x41555557},
+{0, 0x40a4cc14, 0x41be31ab},
+{'q', 0x40a4cc14, 0x4125ed0a},
+{0, 0x416be888, 0x41813ddb},
+{'q', 0x411aa370, 0x40b6db70},
+{0, 0x41b5ba78, 0x40b6db70},
+{'q', 0x4125ed0c, 0x00000000},
+{0, 0x419bc466, 0xc0349988},
+{'9', 0xffea0048, 0xffb40095},
+{'l', 0x4046a8e0, 0x40907ad0},
+{'q', 0xc1204840, 0x4100ad60},
+{0, 0xc1a43b98, 0x413a3e4e},
+{'q', 0xc1282ef8, 0x406643c0},
+{0, 0xc1b76bea, 0x406643c0},
+{'q', 0xc180ad60, 0x00000000},
+{0, 0xc1e1bfe2, 0xc0d43460},
+{'q', 0xc1422508, 0xc0d43462},
+{0, 0xc1958f21, 0xc1958f21},
+{'q', 0xc0cfb08a, 0xc1422506},
+{0, 0xc0cfb08a, 0xc1dd3c0d},
+{'q', 0x00000000, 0xc1a16933},
+{0, 0x41119bc5, 0xc211e402},
+{'q', 0x41119bc4, 0xc1825ed0},
+{0, 0x41c6a8dd, 0xc1ca0bc0},
+{'q', 0x417bb5f4, 0xc10f59d8},
+{0, 0x420baeba, 0xc10f59d8},
+{'q', 0x41c07398, 0x00000000},
+{0, 0x4214fea6, 0x4135ba78},
+{'9', 0x005a0069, 0x00fe0069},
+{'m', 0xc29546e2, 0x41f61128},
+{'8', 0x3e0b2800, 0x141c140c},
+{'8', 0xf52c0013, 0xe52af519},
+{'l', 0x41077320, 0xc21e4e90},
+{'8', 0xfedefef7, 0x1da800c7},
+{'q', 0xc073cf40, 0x406ac790},
+{0, 0xc0cd6ea0, 0x414a0bbc},
+{'q', 0xc0270e00, 0x410f59da},
+{0, 0xc0270e00, 0x418fea54},
+{'@', 0x00000041, 0x00006856},/*        A        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'l', 0xc1797408, 0x4227563c},
+{'l', 0x41f61128, 0x00000000},
+{'l', 0xc172ae48, 0xc227563c},
+{'@', 0x00000042, 0x0000605d},/*        B        x-advance: 96.363281 */
+{'M', 0x4019827c, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x414345fc, 0xbff3cf3c},
+{'l', 0x00000000, 0xc2a120f6},
+{'4', 0xfff2ff9f, 0xffd70000},
+{'l', 0x4237b426, 0x00000000},
+{'q', 0x4196b014, 0x00000000},
+{0, 0x41de5d04, 0x40a28a30},
+{'q', 0x410f59d8, 0x40a04840},
+{0, 0x410f59d8, 0x41825ed0},
+{'q', 0x00000000, 0x41077320},
+{0, 0xc0a94ff0, 0x4169a69c},
+{'q', 0xc0a94ff0, 0x40c466f0},
+{0, 0xc162e0d8, 0x4100ad60},
+{'q', 0x41531368, 0x3fab91e0},
+{0, 0x419fb7c4, 0x40e643b8},
+{'q', 0x40d8b830, 0x40b91d60},
+{0, 0x40d8b830, 0x417cd6ec},
+{'q', 0x00000000, 0x415c1b17},
+{0, 0xc1228a28, 0x41a70dff},
+{'9', 0x0039ffaf, 0x0039ff17},
+{'4', 0xfffdfeff, 0x0000ff6d},
+{'m', 0x42855555, 0xc1dcab92},
+{'q', 0x00000000, 0xc1161f9c},
+{0, 0xc0974090, 0xc15f7df8},
+{'9', 0xffdcffdb, 0xffdcff86},
+{'4', 0x0000ff9f, 0x01330000},
+{'q', 0x41228a28, 0x3ed8b800},
+{0, 0x41801ce6, 0x3ed8b800},
+{'q', 0x41041040, 0x00000000},
+{0, 0x414345f8, 0xc0a0483e},
+{'9', 0xffd80020, 0xff870020},
+{'m', 0xc0e401c8, 0xc22eac79},
+{'8', 0xa1e4be00, 0xe3a3e3e4},
+{'4', 0x0000ffb2, 0x01070000},
+{'l', 0x4125ed08, 0x00000000},
+{'8', 0xe159003c, 0x951ce11c},
+{'@', 0x00000043, 0x00006856},/*        C        x-advance: 104.335938 */
+{'M', 0x4265fb7d, 0x3fb49983},
+{'q', 0xc1be31ac, 0x00000000},
+{0, 0xc2146e2b, 0xc14a0bbd},
+{'q', 0xc1555556, 0xc14a0bbd},
+{0, 0xc1555556, 0xc20bf6f9},
+{'q', 0xb5000000, 0xc1c22504},
+{0, 0x414b2cb2, 0xc2134d34},
+{'q', 0x414c4da8, 0xc14a0bc0},
+{0, 0x4216b016, 0xc14a0bc0},
+{'9', 0x00000083, 0x00250110},
+{'4', 0x00b50003, 0x0000ffce},
+{'l', 0xbffcd700, 0xc15afa20},
+{'q', 0xc114fea8, 0xc0cb2cb0},
+{0, 0xc1ad4346, 0xc0cb2cb0},
+{'q', 0xc182ef4c, 0x00000000},
+{0, 0xc1bf52a0, 0x4123ab18},
+{'q', 0xc0f18d54, 0x41228a30},
+{0, 0xc0f18d54, 0x41fcd6ec},
+{'q', 0x00000000, 0x419e96cd},
+{0, 0x40fcd6ec, 0x41f18d52},
+{'q', 0x40fcd6e8, 0x4125ed0a},
+{0, 0x41b7fc64, 0x4125ed0a},
+{'8', 0xf06f003f, 0xd84bf02f},
+{'4', 0xff840012, 0x00000033},
+{'l', 0xbed8b800, 0x41bfe31b},
+{'q', 0xc0cb2cb0, 0x401e0654},
+{0, 0xc1841044, 0x40877323},
+{'q', 0xc1228a28, 0x3fd8b837},
+{0, 0xc197408e, 0x3fd8b837},
+{'@', 0x00000044, 0x00006856},/*        D        x-advance: 104.335938 */
+{'M', 0x423de96d, 0xc2bd34d4},
+{'q', 0x41cbbd2e, 0x00000000},
+{0, 0x421667d9, 0x41391d60},
+{'q', 0x414345f8, 0x4137fc60},
+{0, 0x414345f8, 0x420ccfb0},
+{'q', 0x00000000, 0x41c2b581},
+{0, 0xc13a3e50, 0x42110b4a},
+{'9', 0x005effa3, 0x005efee7},
+{'l', 0xc23f9add, 0xbe907ac0},
+{'l', 0xb5e00000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x00000000, 0xc2a120f6},
+{'4', 0xfff2ff9f, 0xffd70000},
+{'6', 0x00000167, 0x017a00d3},
+{'q', 0x00000000, 0xc1a3ab1e},
+{0, 0xc0ef4b60, 0xc1efdbe2},
+{'9', 0xffb4ffc5, 0xffb4ff3e},
+{'4', 0x0000ffd7, 0x02760000},
+{'q', 0x40d8b838, 0x3f107ac8},
+{0, 0x414466f0, 0x3f107ac8},
+{'q', 0x4112bcbc, 0x00000000},
+{0, 0x416764b0, 0xc07cd6ea},
+{'q', 0x40ab91d8, 0xc07cd6ec},
+{0, 0x40fa9508, 0xc14587e6},
+{'q', 0x401e0640, 0xc1077324},
+{0, 0x401e0640, 0xc1bbefc0},
+{'@', 0x00000045, 0x0000605d},/*        E        x-advance: 96.363281 */
+{'M', 0x401e0652, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x42a120f5, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc16ac790, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x41c61862, 0x00000000},
+{'l', 0x400bf6f0, 0xc1270e00},
+{'l', 0x40c8eac8, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac8, 0x00000000},
+{'l', 0xc00bf6f0, 0xc12b91d4},
+{'4', 0x0000ff3a, 0x01230000},
+{'l', 0x418ec95e, 0xb6000000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad70, 0xc18bf6f8},
+{'l', 0x40cd6e90, 0x00000000},
+{'l', 0xbfab91c0, 0x41d3136a},
+{'l', 0xc2aa4cc1, 0x00000000},
+{'l', 0xb6600000, 0xc0a4cc14},
+{'@', 0x00000046, 0x00005841},/*        F        x-advance: 88.253906 */
+{'M', 0x42134d35, 0xc2216933},
+{'l', 0x00000000, 0x42053137},
+{'l', 0x417bb5f4, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc244af2f, 0x00000000},
+{'l', 0x35c00000, 0xc0a4cc14},
+{'l', 0x4133788e, 0xbff3cf3c},
+{'l', 0xb5800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x429dbe15, 0x00000000},
+{'4', 0x00cb0000, 0x0000ffcb},
+{'l', 0xc0107ae0, 0xc185c1b4},
+{'8', 0xfba5fde5, 0xfe9cfec1},
+{'l', 0xc13a3e50, 0x00000000},
+{'l', 0x00000000, 0x421aebae},
+{'l', 0x41b88cde, 0x00000000},
+{'l', 0x400bf700, 0xc13fe318},
+{'l', 0x40c8eac0, 0x00000000},
+{'l', 0x00000000, 0x41ff18d5},
+{'l', 0xc0c8eac0, 0x00000000},
+{'l', 0xc00bf700, 0xc1422506},
+{'l', 0xc1b88cde, 0x00000000},
+{'@', 0x00000047, 0x00007061},/*        G        x-advance: 112.378906 */
+{'M', 0x42c6609f, 0xc09e0652},
+{'q', 0xc10bf6f8, 0x40391d58},
+{0, 0xc1a28a28, 0x4094fea5},
+{'q', 0xc1391d58, 0x3fd8b837},
+{0, 0xc1a67d84, 0x3fd8b837},
+{'q', 0xc1773220, 0x00000000},
+{0, 0xc1d827bc, 0xc0b49983},
+{'q', 0xc137fc64, 0xc0b49982},
+{0, 0xc18e38e4, 0xc1837fc6},
+{'q', 0xc0c6a8dd, 0xc12cb2ce},
+{0, 0xc0c6a8dd, 0xc1cc4daa},
+{'q', 0x00000000, 0xc1be31ac},
+{0, 0x4158b836, 0xc212747c},
+{'q', 0x4159d92c, 0xc14d6ea0},
+{0, 0x421b33ec, 0xc14d6ea0},
+{'8', 0x03590031, 0x0a4b0328},
+{'9', 0x00060022, 0x00210080},
+{'4', 0x00ad0000, 0x0000ffce},
+{'l', 0xbfd8b840, 0xc14466f0},
+{'8', 0xd19ee2d4, 0xf092f0cb},
+{'q', 0xc1837fc6, 0x00000000},
+{0, 0xc1bfe31a, 0x4123ab18},
+{'q', 0xc0ef4b6c, 0x4123ab20},
+{0, 0xc0ef4b6c, 0x41fd6766},
+{'q', 0x00000000, 0x419fb7c4},
+{0, 0x40fcd6ec, 0x41f21dce},
+{'q', 0x40ff18d8, 0x4123ab1e},
+{0, 0x41b7fc64, 0x4123ab1e},
+{'9', 0x00000041, 0xffed007c},
+{'l', 0x00000000, 0xc1dafa22},
+{'l', 0xc1422508, 0xbfeac780},
+{'l', 0x00000000, 0xc0a70e00},
+{'l', 0x422e643c, 0x00000000},
+{'l', 0x00000000, 0x40a70e00},
+{'l', 0xc113ddb0, 0x3feac780},
+{'l', 0x00000000, 0x41f6112a},
+{'@', 0x00000048, 0x00007061},/*        H        x-advance: 112.378906 */
+{'M', 0x401e0652, 0x00000000},
+{'l', 0x00000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x35800000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f612, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1422508, 0x3ff3cf40},
+{'l', 0x00000000, 0x420bf6f8},
+{'l', 0x421aa371, 0x00000000},
+{'l', 0x00000000, 0xc20bf6f8},
+{'l', 0xc1422504, 0xbff3cf40},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x423a868d, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1434600, 0x3ff3cf40},
+{'l', 0x00000000, 0x42a0fcd7},
+{'l', 0x41434600, 0x3feac784},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc23a868d, 0x00000000},
+{'l', 0x00000000, 0xc0a70dff},
+{'l', 0x41422504, 0xbfeac790},
+{'l', 0x00000000, 0xc216f854},
+{'l', 0xc21aa371, 0x00000000},
+{'l', 0x00000000, 0x4216f854},
+{'l', 0x41422508, 0x3feac784},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f612, 0x00000000},
+{'@', 0x00000049, 0x00003839},/*        I        x-advance: 56.222656 */
+{'M', 0x421ce55d, 0xc0e1bfe3},
+{'l', 0x41422504, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f611, 0x00000000},
+{'l', 0xb5000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f611, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1422504, 0x3ff3cf40},
+{'l', 0x00000000, 0x42a0fcd7},
+{'@', 0x0000004a, 0x0000483d},/*        J        x-advance: 72.238281 */
+{'M', 0x420d602c, 0xc2af3cf4},
+{'l', 0xc1422508, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42345146, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x4264924a},
+{'q', 0x00000000, 0x4174f030},
+{0, 0xc1077324, 0x41bd10b4},
+{'q', 0xc1077320, 0x41041040},
+{0, 0xc1c10410, 0x41041040},
+{'8', 0xfcad00d6, 0xf4c0fbd8},
+{'4', 0xff550000, 0x00000032},
+{'l', 0x40077324, 0x414a0bbe},
+{'8', 0x141e0c0a, 0x072b0713},
+{'8', 0xe5400026, 0xb019e519},
+{'l', 0x00000000, 0xc2884bda},
+{'@', 0x0000004b, 0x00007061},/*        K        x-advance: 112.378906 */
+{'M', 0x42cf442d, 0xc2bd34d4},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1391d58, 0x3feac780},
+{'l', 0xc1fa0482, 0x41dcab92},
+{'l', 0x42267d85, 0x4253ec23},
+{'l', 0x410d17e8, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1f7321c, 0x00000000},
+{'l', 0xc20d602c, 0xc2364af3},
+{'l', 0xc102ef4c, 0x40e1bfe0},
+{'l', 0x00000000, 0x41fbb5f5},
+{'l', 0x4159d92c, 0x3ff3cf40},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc23fe31b, 0x00000000},
+{'l', 0x35000000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x423a3e4f, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc14345fc, 0x3feac780},
+{'l', 0x00000000, 0x421a12f7},
+{'l', 0x422c6a8f, 0xc21a12f7},
+{'l', 0xc10ad608, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42018618, 0x00000000},
+{'@', 0x0000004c, 0x0000605d},/*        L        x-advance: 96.363281 */
+{'M', 0x424db6dc, 0xc2b2e812},
+{'4', 0x000eff8c, 0x02810000},
+{'l', 0x419a12f6, 0xb6600000},
+{'9', 0x00000078, 0xfff500b0},
+{'l', 0x40b91d60, 0xc19d75d7},
+{'l', 0x40cb2cb0, 0x00000000},
+{'l', 0xc02b91e0, 0x41e49249},
+{'l', 0xc2aa4cc1, 0x00000000},
+{'l', 0xb6600000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1410411, 0xbfeac780},
+{'l', 0x34800000, 0xc0a4cc20},
+{'l', 0x42438e39, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'@', 0x0000004d, 0x0000885d},/*        M        x-advance: 136.363281 */
+{'M', 0x4278e38f, 0x00000000},
+{'l', 0xc0785320, 0x00000000},
+{'l', 0xc20baebb, 0xc29fdbe2},
+{'l', 0x00000000, 0x4291bfe4},
+{'l', 0x414b2cb4, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2069a6a, 0x00000000},
+{'l', 0x35000000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4214b668, 0x00000000},
+{'l', 0x41d827be, 0x4278e38f},
+{'l', 0x41dcab90, 0xc278e38f},
+{'l', 0x4217d10c, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1422508, 0x3feac780},
+{'l', 0x00000000, 0x42a120f6},
+{'l', 0x41422508, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc23c37fe, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x414b2cb8, 0xbff3cf3c},
+{'l', 0x00000000, 0xc291bfe4},
+{'l', 0xc20e8121, 0x429fdbe2},
+{'@', 0x0000004e, 0x00006856},/*        N        x-advance: 104.335938 */
+{'M', 0x42a2f685, 0xc2af3cf4},
+{'l', 0xc14b2cb0, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42069a6a, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1422508, 0x3feac780},
+{'l', 0x00000000, 0x42af3cf4},
+{'l', 0xc1041040, 0x00000000},
+{'l', 0xc2695e5e, 0xc2981949},
+{'l', 0x00000000, 0x4289fd4b},
+{'l', 0x414b2cb4, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2069a6a, 0x00000000},
+{'l', 0xb5800000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x00000000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42018618, 0x00000000},
+{'l', 0x42396597, 0x4271d590},
+{'l', 0x00000000, 0xc255e5d0},
+{'@', 0x0000004f, 0x00007061},/*        O        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'q', 0xc0c466f4, 0x41161fa0},
+{0, 0xc0c466f4, 0x41fdf7e0},
+{'@', 0x00000050, 0x00005841},/*        P        x-advance: 88.253906 */
+{'M', 0x42139572, 0xc2146e2b},
+{'l', 0x00000000, 0x41f06c5d},
+{'l', 0x417bb5f8, 0x3ff3cf40},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc244f76d, 0x00000000},
+{'l', 0x35c00000, 0xc0a4cc14},
+{'l', 0x4133788e, 0xbff3cf3c},
+{'l', 0xb5800000, 0xc2a120f6},
+{'4', 0xfff2ff9f, 0xffd70000},
+{'l', 0x4226c5c2, 0x00000000},
+{'q', 0x41a0d8ba, 0x00000000},
+{0, 0x41f06c5e, 0x40d8b840},
+{'q', 0x411f2748, 0x40d67650},
+{0, 0x411f2748, 0x41a8bf70},
+{'9', 0x00ed0000, 0x00edfeec},
+{'6', 0x0000ff9b, 0xff1500c4},
+{'q', 0x00000000, 0xc1349980},
+{0, 0xc0877320, 0xc17bb5f0},
+{'9', 0xffdcffdf, 0xffdcff8b},
+{'4', 0x0000ffd4, 0x014f0000},
+{'l', 0x40bb5f48, 0x00000000},
+{'q', 0x411ce55c, 0x00000000},
+{0, 0x416401d0, 0xc09e0650},
+{'q', 0x408e38e0, 0xc09e0658},
+{0, 0x408e38e0, 0xc186522e},
+{'@', 0x00000051, 0x00007061},/*        Q        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'9', 0x01180000, 0x0169ff2d},
+{'l', 0x4061bfe0, 0x4089b50e},
+{'q', 0x4125ed08, 0x414fb089},
+{0, 0x418e38e4, 0x414fb089},
+{'9', 0x0000001d, 0xfffc002e},
+{'l', 0x00000000, 0x40c22504},
+{'8', 0x0ec905f5, 0x08b308d6},
+{'8', 0xf9b700d7, 0xe9c5f9e1},
+{'8', 0xd6cbf0e5, 0x9aabe6e7},
+{'q', 0xc1bbefbf, 0xbe107ab8},
+{0, 0xc20fa216, 0xc148eac8},
+{'9', 0xff9dff9d, 0xfedeff9d},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'q', 0xc0c466f4, 0x41161fa0},
+{0, 0xc0c466f4, 0x41fdf7e0},
+{'@', 0x00000052, 0x00006856},/*        R        x-advance: 104.335938 */
+{'M', 0x42139572, 0xc220483e},
+{'l', 0x00000000, 0x42041042},
+{'l', 0x41422508, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2369331, 0x00000000},
+{'l', 0x35c00000, 0xc0a4cc14},
+{'l', 0x4133788e, 0xbff3cf3c},
+{'l', 0xb5800000, 0xc2a120f6},
+{'4', 0xfff2ff9f, 0xffd70000},
+{'l', 0x4234e1c0, 0x00000000},
+{'q', 0x41a70dfe, 0x00000000},
+{0, 0x41f9740a, 0x40cd6ea0},
+{'q', 0x4124cc18, 0x40cd6ea0},
+{0, 0x4124cc18, 0x41a04840},
+{'9', 0x00a20000, 0x00d0ff68},
+{'l', 0x41ca0bbc, 0x420bf6f9},
+{'l', 0x4123ab20, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'4', 0x0000ff0c, 0xfec0ff2d},
+{'6', 0x0000ffa3, 0xff2100f2},
+{'q', 0x00000000, 0xc1294fe8},
+{0, 0xc08bf6f0, 0xc16ac790},
+{'9', 0xffdfffde, 0xffdfff80},
+{'4', 0x0000ffb1, 0x01380000},
+{'l', 0x4123ab20, 0x00000000},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x41773220, 0xc0907ad0},
+{'q', 0x4092bcb0, 0xc0907ad0},
+{0, 0x4092bcb0, 0xc17a9500},
+{'@', 0x00000053, 0x0000505a},/*        S        x-advance: 80.351562 */
+{'M', 0x40f61129, 0xc1e7f52a},
+{'4', 0x00000031, 0x00790019},
+{'8', 0x2e471b17, 0x1263122f},
+{'q', 0x41a1f9ae, 0x00000000},
+{0, 0x41a1f9ae, 0xc1853136},
+{'8', 0xbae1d700, 0xcda0e4e2},
+{'q', 0xc1422506, 0xc080ad68},
+{0, 0xc18bf6f9, 0xc0cfb090},
+{'8', 0xd1b9ecd6, 0xbfd2e5e3},
+{'q', 0xc00bf6f8, 0xc09bc460},
+{0, 0xc00bf6f8, 0xc13ec224},
+{'q', 0x00000000, 0xc147c9d0},
+{0, 0x41077323, 0xc197d10c},
+{'q', 0x41089416, 0xc0d1f270},
+{0, 0x41c73958, 0xc0d1f270},
+{'9', 0x0000005e, 0x001800d1},
+{'4', 0x00b40000, 0x0000ffce},
+{'l', 0xc04b2cb0, 0xc14fb088},
+{'q', 0xc0e643b8, 0xc0a70e00},
+{0, 0xc186522c, 0xc0a70e00},
+{'8', 0x199600bb, 0x4edb19db},
+{'8', 0x401f2500, 0x2f611a1f},
+{'q', 0x41813ddc, 0x40a94fe8},
+{0, 0x41b136a2, 0x4113ddb0},
+{'8', 0x4d491f30, 0x6c192e19},
+{'q', 0x00000000, 0x41f0fcd7},
+{0, 0xc20df0a7, 0x41f0fcd7},
+{'q', 0xc101ce56, 0x34c00000},
+{0, 0xc184a0bc, 0xbfab91d3},
+{'q', 0xc106522d, 0xbfb49983},
+{0, 0xc16764b0, 0xc06ac790},
+{'l', 0x35000000, 0xc1cb2cb3},
+{'@', 0x00000054, 0x0000605d},/*        T        x-advance: 96.363281 */
+{'M', 0x41aef4b7, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'4', 0xfff10078, 0xfd800000},
+{'l', 0xc06643b0, 0x00000000},
+{'9', 0x0000ff7f, 0x000bff4b},
+{'l', 0xbff3cf48, 0x418c8774},
+{'l', 0xc0cd6e9e, 0x00000000},
+{'l', 0xb4800000, 0xc1d3a3e8},
+{'l', 0x42b7d845, 0x00000000},
+{'4', 0x00d30000, 0x0000ffcd},
+{'l', 0xbff3cf40, 0xc18c8774},
+{'9', 0xfff6ffd2, 0xfff6ff47},
+{'l', 0xc05d3c10, 0x00000000},
+{'l', 0x00000000, 0x429fdbe2},
+{'l', 0x41706c60, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc25161fa, 0x00000000},
+{'@', 0x00000055, 0x00006856},/*        U        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc109b50d},
+{'q', 0x41294fec, 0x00000000},
+{0, 0x4182ef4a, 0xc0bda130},
+{'9', 0xffd1002e, 0xff75002e},
+{'l', 0x00000000, 0xc25ea540},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad62, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x425c6355},
+{'q', 0x00000000, 0x4182ef4b},
+{0, 0xc1174090, 0x41c8eac7},
+{'q', 0xc1174090, 0x410bf6f9},
+{0, 0xc1d827bc, 0x410bf6f9},
+{'q', 0xc197d10c, 0xb4800000},
+{0, 0xc1e91620, 0xc10d17ee},
+{'9', 0xffb9ffb0, 0xff34ffb0},
+{'l', 0x00000000, 0xc25a2169},
+{'l', 0xc12b91d6, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x42345145, 0x00000000},
+{'4', 0x00290000, 0x000eff9f},
+{'l', 0x00000000, 0x425e14c5},
+{'q', 0x00000000, 0x4135ba78},
+{0, 0x40b6db70, 0x418b667e},
+{'q', 0x40b91d58, 0x40c22506},
+{0, 0x4186e2a8, 0x40c22506},
+{'@', 0x00000056, 0x00006856},/*        V        x-advance: 104.335938 */
+{'M', 0x42cd6e9e, 0xc2bd34d4},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc10f59d8, 0x3ff3cf40},
+{'l', 0xc2122c3f, 0x42b3788d},
+{'l', 0xc1161f9c, 0xb5e00000},
+{'l', 0xc219cab9, 0xc2b3788d},
+{'l', 0xc0f85316, 0xbff3cf40},
+{'l', 0x34800000, 0xc0a4cc20},
+{'l', 0x422483d7, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc11ce55c, 0x3ff3cf40},
+{'l', 0x41d4c4da, 0x42780ad6},
+{'l', 0x41c6a8de, 0xc2780ad6},
+{'l', 0xc1186188, 0xbff3cf40},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x41deed7c, 0x00000000},
+{'@', 0x00000057, 0x0000907a},/*        W        x-advance: 144.476562 */
+{'M', 0x42d3c804, 0x400bf6f9},
+{'l', 0xc10ad600, 0x00000000},
+{'l', 0xc1bc803c, 0xc2695e5e},
+{'l', 0xc1baceca, 0x42695e5e},
+{'l', 0xc10ad600, 0xb5e00000},
+{'l', 0xc1fa9500, 0xc2b39cac},
+{'l', 0xc1041041, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4229e065, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc13136a0, 0x3feac780},
+{'l', 0x41a16932, 0x426177a6},
+{'l', 0x41b136a2, 0xc25d3c0e},
+{'l', 0x410d17f0, 0x00000000},
+{'l', 0x41b1c71c, 0x425cab93},
+{'l', 0x4185c1b0, 0xc260e72b},
+{'l', 0xc13ec220, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x41f4f034, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1041040, 0x3feac780},
+{'l', 0xc1e09ef0, 0x42b39cac},
+{'@', 0x00000058, 0x00006856},/*        X        x-advance: 104.335938 */
+{'M', 0x41ba3e4f, 0xc0e1bfe3},
+{'l', 0x413b5f46, 0x3ff3cf3c},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2013ddc, 0x00000000},
+{'l', 0x35c00000, 0xc0a4cc14},
+{'l', 0x41270e00, 0xbff3cf3c},
+{'l', 0x41f33ec1, 0xc21aa372},
+{'l', 0xc1d8b836, 0xc2279e7a},
+{'l', 0xc12a70e0, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x423844a1, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc13fe31c, 0x3feac780},
+{'l', 0x41841042, 0x41cc4da8},
+{'l', 0x41a0d8b8, 0xc1cc4da8},
+{'l', 0xc13b5f40, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42018618, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1270e00, 0x3feac780},
+{'l', 0xc1cdff1a, 0x4202a70e},
+{'l', 0x41f7c29a, 0x423f9ade},
+{'l', 0x412b91d8, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc23844a2, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x413fe318, 0xbff3cf3c},
+{'l', 0xc1a3ab1c, 0xc1fc466f},
+{'l', 0xc1c6a8dd, 0x41fc466f},
+{'@', 0x00000059, 0x00006856},/*        Y        x-advance: 104.335938 */
+{'M', 0x42808942, 0xc214fea5},
+{'l', 0x00000000, 0x41f18d51},
+{'l', 0x41706c58, 0x3ff3cf40},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc25161fa, 0x00000000},
+{'l', 0x36000000, 0xc0a4cc14},
+{'l', 0x41706c5e, 0xbff3cf3c},
+{'l', 0x00000000, 0xc1ee2a71},
+{'l', 0xc1e643bb, 0xc24b2cb3},
+{'l', 0xc12a70e0, 0xbfeac780},
+{'l', 0x34800000, 0xc0a4cc20},
+{'l', 0x4242b581, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc14b2cb4, 0x3feac780},
+{'l', 0x41acb2ca, 0x421e96cd},
+{'l', 0x41a70e00, 0xc21e96cd},
+{'l', 0xc1391d58, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad60, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1204840, 0x3feac780},
+{'l', 0xc1da69a4, 0x42497b43},
+{'@', 0x0000005a, 0x0000605d},/*        Z        x-advance: 96.363281 */
+{'M', 0x40dd3c0d, 0xc100ad60},
+{'4', 0xfd8801a2, 0x0000ff79},
+{'9', 0x0000ff80, 0x000bff4c},
+{'l', 0xc00bf6f8, 0x416e2a70},
+{'l', 0xc0c8eac6, 0x00000000},
+{'l', 0x00000000, 0xc1be31ac},
+{'l', 0x42922c40, 0x00000000},
+{'4', 0x003b0000, 0x027efe5b},
+{'l', 0x419e0654, 0x00000000},
+{'q', 0x4100ad60, 0x00000000},
+{0, 0x417cd6e8, 0xbf46a8e0},
+{'9', 0xfffa003e, 0xfff4005a},
+{'l', 0x40853140, 0xc1907acf},
+{'l', 0x40cb2cb0, 0x00000000},
+{'l', 0xbff3cf40, 0x41ddcc88},
+{'l', 0xc2a06c5c, 0x00000000},
+{'l', 0xb5c00000, 0xc100ad60},
+{'@', 0x0000005b, 0x0000301c},/*        [        x-advance: 48.109375 */
+{'M', 0x412b91d6, 0x419aa372},
+{'l', 0x00000000, 0xc2ef2748},
+{'l', 0x4200ad60, 0x00000000},
+{'l', 0x00000000, 0x40974090},
+{'l', 0xc16522c6, 0x40391d60},
+{'l', 0x00000000, 0x42d0ad60},
+{'l', 0x416522c6, 0x40391d6c},
+{'l', 0x00000000, 0x40974092},
+{'l', 0xc200ad60, 0x00000000},
+{'@', 0x0000005c, 0x00002824},/*       \         x-advance: 40.140625 */
+{'M', 0xbfb49983, 0xc2be55c9},
+{'l', 0x411e0652, 0x00000000},
+{'l', 0x4204a0bc, 0x42c1282f},
+{'l', 0xc11f2746, 0x34c00000},
+{'l', 0xc204587f, 0xc2c1282f},
+{'@', 0x0000005d, 0x0000301c},/*        ]        x-advance: 48.109375 */
+{'M', 0x40a70dff, 0x419aa372},
+{'l', 0x00000000, 0xc0974092},
+{'l', 0x416522c4, 0xc0391d5c},
+{'l', 0x00000000, 0xc2d0ad60},
+{'l', 0xc16522c4, 0xc0391d60},
+{'l', 0xb5000000, 0xc0974090},
+{'l', 0x4200ad60, 0x00000000},
+{'l', 0x00000000, 0x42ef2748},
+{'l', 0xc200ad60, 0x36800000},
+{'@', 0x0000005e, 0x000053f3},/*        ^        x-advance: 83.949219 */
+{'M', 0x428282ef, 0xc1db8a9d},
+{'l', 0xc1ba3e4c, 0xc256be88},
+{'l', 0xc1ba3e50, 0x4256be88},
+{'l', 0xc1216933, 0xb6000000},
+{'l', 0x41f18d52, 0xc286522d},
+{'l', 0x40cb2cb8, 0x00000000},
+{'l', 0x41f18d52, 0x4286522d},
+{'l', 0xc1216938, 0xb6000000},
+{'@', 0x0000005f, 0x0000483d},/*        _        x-advance: 72.238281 */
+{'M', 0xbf907acf, 0x41a0d8b8},
+{'l', 0x00000000, 0xc1228a28},
+{'l', 0x4294fea5, 0x00000000},
+{'l', 0x00000000, 0x41228a28},
+{'l', 0xc294fea5, 0x00000000},
+{'@', 0x00000060, 0x0000301c},/*        `        x-advance: 48.109375 */
+{'M', 0x41ff18d5, 0xc29dbe15},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x35000000, 0xc0270e00},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c2250c, 0x00000000},
+{'@', 0x00000061, 0x0000483d},/*        a        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'q', 0x40998278, 0x00000000},
+{0, 0x41270e00, 0xc01e0652},
+{'l', 0x00000000, 0xc1bda130},
+{'@', 0x00000062, 0x0000505a},/*        b        x-advance: 80.351562 */
+{'M', 0x4109b50d, 0xc2bc13de},
+{'l', 0xc0d8b836, 0xbfcfb080},
+{'4', 0xffdc0000, 0x000000d9},
+{'l', 0x00000000, 0x41c2b580},
+{'8', 0x6afb3400, 0xe140ee16},
+{'q', 0x40ab91d0, 0xbfcfb0c0},
+{0, 0x41270dfc, 0xbfcfb0c0},
+{'q', 0x416643bc, 0x00000000},
+{0, 0x41a82ef4, 0x40fcd6f0},
+{'q', 0x40d43460, 0x40fcd6e8},
+{0, 0x40d43460, 0x41c97b42},
+{'q', 0x00000000, 0x41889419},
+{0, 0xc1089410, 0x41d5e5d2},
+{'q', 0xc1077324, 0x411aa370},
+{0, 0xc1bf52a2, 0x411aa370},
+{'9', 0x0000ffa5, 0xffdafef5},
+{'6', 0xfd2b0000, 0x01d70169},
+{'q', 0x00000000, 0xc150d180},
+{0, 0xc04fb080, 0xc198f200},
+{'8', 0xd0acd0e7, 0x05d200eb},
+{'9', 0x0004ffe7, 0x000effd7},
+{'l', 0x00000000, 0x424ae476},
+{'8', 0x09580924, 0xca520037},
+{'q', 0x4058b830, 0xc0dafa22},
+{0, 0x4058b830, 0xc1b25798},
+{'@', 0x00000063, 0x00004020},/*        c        x-advance: 64.125000 */
+{'M', 0x42721dcd, 0xc080ad60},
+{'8', 0x1fba14e7, 0x0ba50bd4},
+{'q', 0xc18da868, 0x00000000},
+{0, 0xc1d4345f, 0xc1089418},
+{'q', 0xc10bf6f9, 0xc1089418},
+{0, 0xc10bf6f9, 0xc1d0d180},
+{'q', 0x00000000, 0xc12ef4b4},
+{0, 0x407cd6ec, 0xc1958f20},
+{'q', 0x4080ad60, 0xc0fa9500},
+{0, 0x4136db6e, 0xc13ec224},
+{'q', 0x40ed097c, 0xc0853140},
+{0, 0x4189b50d, 0xc0853140},
+{'9', 0x0000004f, 0x001300ac},
+{'4', 0x009c0000, 0x0000ffd8},
+{'l', 0xc03da130, 0xc13a3e4c},
+{'8', 0xeddbf2ed, 0xfbcffbee},
+{'8', 0x1ac400df, 0x4bd61ae5},
+{'q', 0xbfeac790, 0x40bfe320},
+{0, 0xbfeac790, 0x416643bc},
+{'q', 0x00000000, 0x4162e0d8},
+{0, 0x408bf6f8, 0x41a1f9ae},
+{'q', 0x408e38e0, 0x40c22504},
+{0, 0x41609eec, 0x40c22504},
+{'q', 0x411bc468, 0x00000000},
+{0, 0x41853138, 0xc002ef4c},
+{'l', 0x00000000, 0x40add3c2},
+{'@', 0x00000064, 0x0000505a},/*        d        x-advance: 80.351562 */
+{'M', 0x424ed7d1, 0xc06f4b67},
+{'8', 0x1bd014e1, 0x0ada06f0},
+{'q', 0xc02b91d0, 0x3efcd6ec},
+{0, 0xc0bda130, 0x3efcd6ec},
+{'q', 0xc16ac790, 0x00000000},
+{0, 0xc1aef4b6, 0xc106522c},
+{'q', 0xc0e643bc, 0xc1077322},
+{0, 0xc0e643bc, 0xc1cfb08a},
+{'q', 0x00000000, 0xc189b50c},
+{0, 0x40f61128, 0xc1d161fa},
+{'q', 0x40f85314, 0xc10f59dc},
+{0, 0x41b3788d, 0xc10f59dc},
+{'q', 0x40f61128, 0x00000000},
+{0, 0x41785314, 0x3ff3cf40},
+{'9', 0xffeefffd, 0xffa9fffd},
+{'l', 0x00000000, 0xc1865230},
+{'l', 0xc0d8b838, 0xbfd8b800},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41d948b0, 0x00000000},
+{'l', 0x00000000, 0x42bbcba1},
+{'l', 0x40e885b0, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff34},
+{'6', 0xffe3fff5, 0xff12ff37},
+{'q', 0x00000000, 0x4153136a},
+{0, 0x40543460, 0x41a16933},
+{'8', 0x374c371a, 0xe85d002d},
+{'l', 0x00000000, 0xc247c9d2},
+{'8', 0xf5a7f5d4, 0x37b100ce},
+{'q', 0xc061bfe0, 0x40dd3c10},
+{0, 0xc061bfe0, 0x41a31aa4},
+{'@', 0x00000065, 0x00004020},/*        e        x-advance: 64.125000 */
+{'M', 0x420b667e, 0xc287df7e},
+{'q', 0x41579740, 0x00000000},
+{0, 0x419bc466, 0x40e643b8},
+{'9', 0x00390030, 0x00b20030},
+{'4', 0x002e0000, 0x0000feea},
+{'l', 0x00000000, 0x3f907ad0},
+{'q', 0x00000000, 0x41282ef6},
+{0, 0x3fd8b830, 0x416f4b68},
+{'8', 0x362c230d, 0x1253121e},
+{'9', 0x00000031, 0xfff0007d},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb012e1, 0x0ba10bcf},
+{'q', 0xc1825ed1, 0x00000000},
+{0, 0xc1c10410, 0xc1077322},
+{'q', 0xc0f85316, 0xc1089418},
+{0, 0xc0f85316, 0xc1d3136a},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40ed097c, 0xc1cf200e},
+{'9', 0xffbc003b, 0xffbc00b4},
+{'m', 0xbf46a900, 0x40e401c8},
+{'q', 0xc0877320, 0x00000000},
+{0, 0xc0cb2cb0, 0x4092bcc0},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x41761128, 0x00000000},
+{'8', 0x96fbb500, 0xd3efe1fb},
+{'q', 0xbfbda120, 0xbfeac7a0},
+{0, 0xc0853138, 0xbfeac7a0},
+{'@', 0x00000066, 0x0000301c},/*        f        x-advance: 48.109375 */
+{'M', 0x413136a2, 0xc26be886},
+{'0', 0xda0000b0, 0xc700ea50},
+{'q', 0x00000000, 0xc158b838},
+{0, 0x40dd3c0c, 0xc1a5ed08},
+{'q', 0x40dd3c0c, 0xc0e885a0},
+{0, 0x419e96ce, 0xc0e885a0},
+{'9', 0x00000037, 0x000a005d},
+{'4', 0x007e0000, 0x0000ffdc},
+{'l', 0xc002ef50, 0xc0f61120},
+{'q', 0xbfd8b820, 0xbfd8b840},
+{0, 0xc08e38e0, 0xbfd8b840},
+{'9', 0x0000ffc8, 0x008fffc8},
+{'0', 0x006b4d00, 0x00953a00},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x412cb2ca, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc219827c, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'@', 0x00000067, 0x0000483d},/*        g        x-advance: 72.238281 */
+{'M', 0x41910b4a, 0xc1c3d677},
+{'q', 0xc148eac8, 0xc0a94fe8},
+{0, 0xc148eac8, 0xc1a55c8f},
+{'q', 0x00000000, 0xc13015ac},
+{0, 0x40f61128, 0xc1877322},
+{'q', 0x40f61128, 0xc0bfe320},
+{0, 0x41b015ac, 0xc0bfe320},
+{'8', 0x043e0018, 0x09370326},
+{'4', 0xffc2007e, 0x00180013},
+{'l', 0xc100ad5c, 0x4136db70},
+{'q', 0x408bf6f8, 0x40ab91d8},
+{0, 0x408bf6f8, 0x416885a4},
+{'q', 0x00000000, 0x41337890},
+{0, 0xc0f3cf40, 0x418a4589},
+{'q', 0xc0f18d50, 0x40bfe318},
+{0, 0xc1b0a626, 0x40bfe318},
+{'9', 0x0000ffd4, 0xfffaffaa},
+{'l', 0xbfd8b830, 0x40ab91d4},
+{'8', 0x1f141001, 0x0e300e13},
+{'l', 0x4177321e, 0x00000000},
+{'q', 0x41c1948c, 0x00000000},
+{0, 0x41c1948c, 0x4194fea5},
+{'8', 0x6adf3d00, 0x449e2cdf},
+{'q', 0xc101ce58, 0x4046a8d8},
+{0, 0xc1a1f9ae, 0x4046a8d8},
+{'q', 0xc16643ba, 0x00000000},
+{0, 0xc1b25798, 0xc082ef48},
+{'8', 0xa6c1dfc1, 0xcf14e700},
+{'8', 0xc650e914, 0xd3c7f4df},
+{'9', 0xffe0ffe9, 0xffbdffe9},
+{'6', 0xff95005e, 0x01210129},
+{'9', 0xffcb0000, 0xffcbffb9},
+{'l', 0xc1b2e812, 0x00000000},
+{'8', 0x51cf24cf, 0x36222400},
+{'q', 0x408bf6f8, 0x40107ad0},
+{0, 0x413ec224, 0x40107ad0},
+{'q', 0x4123ab20, 0x00000000},
+{0, 0x417bb5f4, 0xc0543460},
+{'9', 0xffe6002c, 0xffb7002c},
+{'m', 0xc1a43b98, 0xc2228a29},
+{'8', 0xe03c0029, 0x9f12e012},
+{'8', 0xa1eec000, 0xe1c4e1ee},
+{'8', 0x1fc700da, 0x5fef1eef},
+{'8', 0x61114000, 0x20392011},
+{'@', 0x00000068, 0x0000505a},/*        h        x-advance: 80.351562 */
+{'M', 0x41f61129, 0xc28f119c},
+{'9', 0x00250000, 0x0058fffd},
+{'l', 0x409bc468, 0xc01e0650},
+{'q', 0x4120483c, 0xc0a28a30},
+{0, 0x418fea54, 0xc0a28a30},
+{'9', 0x00000092, 0x009c0092},
+{'l', 0x00000000, 0x4228bf70},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002f},
+{'l', 0x00000000, 0xc21dbe15},
+{'8', 0xb7ecd100, 0xe6c7e6ed},
+{'9', 0x0000ffd6, 0x0013ffab},
+{'l', 0x00000000, 0x424660a0},
+{'l', 0x40c22504, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40cfb08a, 0xbfd8b838},
+{'l', 0x00000000, 0xc2af18d6},
+{'l', 0xc0d8b837, 0xbfd8b800},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41d948b2, 0x00000000},
+{'l', 0x00000000, 0x41e5b340},
+{'@', 0x00000069, 0x00002824},/*        i        x-advance: 40.140625 */
+{'M', 0x41f61129, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0d8b837, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d9},
+{'6', 0x01df0000, 0xfd68ff58},
+{'8', 0xc319dc00, 0xe83de819},
+{'8', 0x193c0024, 0x3c191819},
+{'8', 0x3de82300, 0x19c319e8},
+{'8', 0xe8c300dc, 0xc2e7e7e7},
+{'@', 0x0000006a, 0x0000301c},/*        j        x-advance: 48.109375 */
+{'M', 0x4219cab9, 0x403015ac},
+{'q', 0x00000000, 0x41543461},
+{0, 0xc0e643b8, 0x41a55c8e},
+{'q', 0xc0e401cc, 0x40eac794},
+{0, 0xc1a28a28, 0x40eac794},
+{'9', 0x0000ffce, 0xfff6ff9f},
+{'4', 0xff820000, 0x00000024},
+{'l', 0x40422506, 0x4100ad60},
+{'8', 0x0a1b0a0d, 0xdb2f001e},
+{'9', 0xffdb0012, 0xff960012},
+{'l', 0x00000000, 0xc2808942},
+{'l', 0xc13b5f44, 0xc0198270},
+{'4', 0xffdb0000, 0x00000100},
+{'6', 0x02280000, 0xfd1f0004},
+{'8', 0x3de72400, 0x19c419e8},
+{'8', 0xe8c300dc, 0xc2e7e7e7},
+{'8', 0xc418dd00, 0xe73ee719},
+{'8', 0x193c0023, 0x3c191819},
+{'@', 0x0000006b, 0x0000505a},/*        k        x-advance: 80.351562 */
+{'M', 0x41f61129, 0xc1fe885b},
+{'l', 0x41cf200f, 0xc1e1bfe3},
+{'l', 0xc0e1bfe8, 0xbfcfb080},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ca0bbe, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0f3cf40, 0x3fc6a8e0},
+{'l', 0xc17cd6e8, 0x41853136},
+{'l', 0x41b64af4, 0x42146e2b},
+{'l', 0x40bda130, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc1ff18d6, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x40785310, 0xbfd8b838},
+{'l', 0xc1543460, 0xc1b9add4},
+{'l', 0xc101ce56, 0x40b49984},
+{'l', 0x00000000, 0x418c8773},
+{'l', 0x40d1f274, 0x3fd8b83c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc204e8fa, 0x00000000},
+{'l', 0x36000000, 0xc094fea5},
+{'l', 0x40c8eac8, 0xbfd8b838},
+{'l', 0x00000000, 0xc2af18d6},
+{'l', 0xc0d8b837, 0xbfd8b800},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41d948b2, 0x00000000},
+{'l', 0x00000000, 0x4288dc55},
+{'@', 0x0000006c, 0x00002824},/*        l        x-advance: 40.140625 */
+{'M', 0x41f33ec3, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc2af18d6},
+{'l', 0xc0d8b837, 0xbfd8b800},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41d948b2, 0x00000000},
+{'l', 0x00000000, 0x42bbcba1},
+{'@', 0x0000006d, 0x0000785a},/*        m        x-advance: 120.351562 */
+{'M', 0x41f4f033, 0xc2721dcd},
+{'l', 0x4099827c, 0xc01e0650},
+{'q', 0x411e0654, 0xc0a28a30},
+{0, 0x418da868, 0xc0a28a30},
+{'q', 0x413da134, 0x00000000},
+{0, 0x417cd6ec, 0x4109b510},
+{'q', 0x416764b0, 0xc109b510},
+{0, 0x41c345fc, 0xc109b510},
+{'9', 0x0000008f, 0x009c008f},
+{'l', 0x00000000, 0x4228bf70},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002f},
+{'l', 0x00000000, 0xc21dbe15},
+{'8', 0xb7eed100, 0xe6c9e6ee},
+{'8', 0x17a600d7, 0x36051705},
+{'l', 0x00000000, 0x4228bf70},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002f},
+{'l', 0x00000000, 0xc21dbe15},
+{'8', 0xb7eed100, 0xe6c9e6ee},
+{'9', 0x0000ffdb, 0x0016ffab},
+{'l', 0x00000000, 0x4244f76d},
+{'l', 0x40c22504, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40cfb08a, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0cfb08a, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41cdff1a, 0x00000000},
+{'l', 0x3f7cd6e0, 0x40b91d58},
+{'@', 0x0000006e, 0x0000505a},/*        n        x-advance: 80.351562 */
+{'M', 0x41f4f033, 0xc2721dcd},
+{'l', 0x4099827c, 0xc01e0650},
+{'q', 0x411e0654, 0xc0a28a30},
+{0, 0x418e38e4, 0xc0a28a30},
+{'9', 0x00000092, 0x009c0092},
+{'l', 0x00000000, 0x4228bf70},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002f},
+{'l', 0x00000000, 0xc21dbe15},
+{'8', 0xb7ecd100, 0xe6c7e6ed},
+{'9', 0x0000ffd6, 0x0013ffab},
+{'l', 0x00000000, 0x424660a0},
+{'l', 0x40c22504, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40cfb08a, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0cfb08a, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41cdff1a, 0x00000000},
+{'l', 0x3f7cd6e0, 0x40b91d58},
+{'@', 0x0000006f, 0x0000483d},/*        o        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'q', 0x4014fea0, 0xc0c466f4},
+{0, 0x4014fea0, 0xc1ae643c},
+{'@', 0x00000070, 0x0000505a},/*        p        x-advance: 80.351562 */
+{'M', 0x41e6d435, 0xc27bb5f5},
+{'q', 0x40f18d54, 0xc0a4cc18},
+{0, 0x4192bcb9, 0xc0a4cc18},
+{'q', 0x415d3c10, 0x00000000},
+{0, 0x41a43b9a, 0x4101ce58},
+{'q', 0x40d8b830, 0x4101ce58},
+{0, 0x40d8b830, 0x41ccde24},
+{'q', 0x00000000, 0x418ad603},
+{0, 0xc0fa94f0, 0x41d4c4db},
+{'q', 0xc0fa9508, 0x4112bcba},
+{0, 0xc1b4090a, 0x4112bcba},
+{'q', 0xc0ef4b68, 0x34c00000},
+{0, 0xc1718d52, 0xbff3cf3a},
+{'9', 0x00250003, 0x00530003},
+{'l', 0x00000000, 0x416764b0},
+{'l', 0x411bc468, 0x3fd8b830},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc21546e3, 0x00000000},
+{'l', 0xb4c00000, 0xc094fea8},
+{'l', 0x40e643bb, 0xbfd8b830},
+{'l', 0x00000000, 0xc2a8bf70},
+{'l', 0xc0e885a6, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d7},
+{'6', 0x001b0001, 0x00e800c7},
+{'q', 0x00000000, 0xc1d3136a},
+{0, 0xc14466f0, 0xc1d3136a},
+{'9', 0x0000ffcc, 0x0015ffa0},
+{'l', 0x00000000, 0x42481210},
+{'q', 0x40b6db70, 0x3fbda128},
+{0, 0x413ec224, 0x3fbda128},
+{'q', 0x4146a8dc, 0x00000000},
+{0, 0x4146a8dc, 0xc1de5d02},
+{'@', 0x00000071, 0x0000505a},/*        q        x-advance: 80.351562 */
+{'M', 0x428fa217, 0x41c345fc},
+{'l', 0x40e643b0, 0x3fd8b830},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc21546e2, 0x00000000},
+{'4', 0xffdb0000, 0xfff3004d},
+{'l', 0x00000000, 0xc172ae48},
+{'q', 0x00000000, 0xc0d1f275},
+{0, 0x3f349980, 0xc1555556},
+{'q', 0xc0dd3c10, 0x40b015ad},
+{0, 0xc18a4588, 0x40b015ad},
+{'q', 0xc16be888, 0xb4000000},
+{0, 0xc1aef4b7, 0xc10ad603},
+{'q', 0xc0e1bfe4, 0xc10bf6fa},
+{0, 0xc0e1bfe4, 0xc1d161fb},
+{'q', 0x00000000, 0xc188039c},
+{0, 0x40fcd6ea, 0xc1ce8f94},
+{'q', 0x40ff18d6, 0xc10d17f0},
+{0, 0x41bbefc0, 0xc10d17f0},
+{'9', 0x00000028, 0x000c009d},
+{'4', 0xffe80043, 0x00000033},
+{'6', 0x02ef0000, 0xfe40fe97},
+{'q', 0xb6000000, 0x414b2cb2},
+{0, 0x404fb080, 0x4197d10c},
+{'8', 0x3156311a, 0xfb2d0015},
+{'9', 0xfffa0018, 0xfff10028},
+{'l', 0x00000000, 0xc24a0bbe},
+{'8', 0xf7abf7da, 0x39ab00c7},
+{'q', 0xc05d3c08, 0x40e401d0},
+{0, 0xc05d3c08, 0x41b0a628},
+{'@', 0x00000072, 0x00004020},/*        r        x-advance: 64.125000 */
+{'M', 0x42021693, 0xc2523ab2},
+{'8', 0x9f6cbd3c, 0xe358e330},
+{'l', 0x4073cf40, 0x00000000},
+{'4', 0x00c10000, 0x0000ffe1},
+{'l', 0xc0853138, 0xc10e38e4},
+{'8', 0x0fb000dd, 0x24b10fd3},
+{'l', 0x00000000, 0x422120f6},
+{'l', 0x412a70e0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc21e96cd, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x4109b50d, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc109b50d, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41deed7e, 0x00000000},
+{'l', 0x3f46a8c0, 0x415c1b18},
+{'@', 0x00000073, 0x00003839},/*        s        x-advance: 56.222656 */
+{'M', 0x4252cb2d, 0xc1a82ef5},
+{'q', 0x00000000, 0x413136a2},
+{0, 0xc0dafa20, 0x4186522c},
+{'q', 0xc0d8b838, 0x40b49985},
+{0, 0xc19e0653, 0x40b49985},
+{'8', 0xf7a200d6, 0xedb3f7cd},
+{'4', 0xff700000, 0x00000025},
+{'l', 0x402b91d8, 0x4114fea5},
+{'8', 0x21331313, 0x0c410c20},
+{'8', 0xec480031, 0xca18eb18},
+{'8', 0xcfe9e100, 0xd69beee9},
+{'q', 0xc123ab1e, 0xc04b2cb8},
+{0, 0xc16885a5, 0xc10ad602},
+{'q', 0xc0877321, 0xc0b015b0},
+{0, 0xc0877321, 0xc158b838},
+{'q', 0x00000000, 0xc1107ad0},
+{0, 0x40d6764b, 0xc16643b8},
+{'q', 0x40d6764c, 0xc0ab91e0},
+{0, 0x418a4588, 0xc0ab91e0},
+{'9', 0x0000003a, 0x0010009c},
+{'4', 0x00880000, 0x0000ffdb},
+{'l', 0xc0107ad0, 0xc0f85310},
+{'8', 0xe6d2f0f0, 0xf6c9f6e3},
+{'8', 0x10c400d8, 0x2ded10ed},
+{'8', 0x31181d00, 0x29631318},
+{'q', 0x4124cc14, 0x404b2cc0},
+{0, 0x4169a698, 0x41065230},
+{'q', 0x4089b510, 0x40a4cc10},
+{0, 0x4089b510, 0x414e8f92},
+{'@', 0x00000074, 0x0000301c},/*        t        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0x3fb49983},
+{'q', 0xc1186186, 0x00000000},
+{0, 0xc16be886, 0xc089b50d},
+{'9', 0xffdeffd7, 0xff9dffd7},
+{'l', 0x00000000, 0xc22eac79},
+{'l', 0xc10ad603, 0x00000000},
+{'l', 0x34800000, 0xc092bcb8},
+{'l', 0x4123ab1f, 0xc03015b0},
+{'l', 0x41041042, 0xc1706c60},
+{'l', 0x41294fea, 0x00000000},
+{'l', 0x00000000, 0x41706c60},
+{'l', 0x415f7df8, 0x00000000},
+{'4', 0x003a0000, 0x0000ff91},
+{'l', 0x00000000, 0x42299828},
+{'8', 0x370f2400, 0x1228120f},
+{'9', 0x0000001d, 0xfff70049},
+{'l', 0x00000000, 0x40bfe31b},
+{'8', 0x15c60bf0, 0x09b609d8},
+{'@', 0x00000075, 0x0000505a},/*        u        x-advance: 80.351562 */
+{'M', 0x4246f11a, 0xc0b91d59},
+{'l', 0xc0998278, 0x401e0652},
+{'q', 0xc11e0654, 0x40a28a29},
+{0, 0xc18e38e5, 0x40a28a29},
+{'9', 0x0000ff6e, 0xff64ff6e},
+{'l', 0x00000000, 0xc228bf70},
+{'l', 0xc0d43460, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x423723ac},
+{'8', 0x49132f00, 0x1a391a14},
+{'9', 0x0000002a, 0xffed0055},
+{'l', 0x00000000, 0xc24660a0},
+{'l', 0xc0c22508, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e8, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc1cdff18, 0x00000000},
+{'l', 0xbf7cd700, 0xc0b91d59},
+{'@', 0x00000076, 0x0000483d},/*        v        x-advance: 72.238281 */
+{'M', 0x4223ab1e, 0x3fb49983},
+{'l', 0xc1089414, 0x00000000},
+{'l', 0xc1ddcc89, 0xc27580ae},
+{'l', 0xc094fea4, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x4207bb5f, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0fcd6e8, 0x3feac780},
+{'l', 0x4188039e, 0x42174091},
+{'l', 0x4174f030, 0xc217d10c},
+{'l', 0xc0f85310, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0998280, 0x3fb49980},
+{'l', 0xc1d43460, 0x4276a1a3},
+{'@', 0x00000077, 0x00006856},/*        w        x-advance: 104.335938 */
+{'M', 0x4276a1a3, 0xc26ebaec},
+{'l', 0x4174f034, 0x4216f854},
+{'l', 0x414d6ea0, 0xc218194a},
+{'l', 0xc0f85310, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ac2250, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0a28a30, 0x3fb49980},
+{'l', 0xc1b25798, 0x4276a1a3},
+{'l', 0xc1089418, 0x34c00000},
+{'l', 0xc172ae44, 0xc214b668},
+{'l', 0xc1718d54, 0x4214b668},
+{'l', 0xc1089416, 0x34c00000},
+{'l', 0xc1bbefc0, 0xc27580ae},
+{'l', 0xc09e0651, 0xbfd8b820},
+{'l', 0x34400000, 0xc094fea8},
+{'l', 0x42033789, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0fcd6e8, 0x3feac780},
+{'l', 0x416401d0, 0x421788ce},
+{'l', 0x41761128, 0xc216f853},
+{'l', 0x40d67648, 0x00000000},
+{'@', 0x00000078, 0x0000483d},/*        x        x-advance: 72.238281 */
+{'M', 0x400bf6f9, 0xc276e9e1},
+{'l', 0x00000000, 0xc092bcb8},
+{'l', 0x420da868, 0x00000000},
+{'l', 0x00000000, 0x4092bcb8},
+{'l', 0xc0ed0978, 0x3ff3cf40},
+{'l', 0x411aa370, 0x416e2a70},
+{'l', 0x414c4dac, 0xc1706c5c},
+{'l', 0xc0d43460, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc092bcb8},
+{'l', 0x41b49980, 0x00000000},
+{'l', 0x00000000, 0x4092bcb8},
+{'l', 0xc0bb5f40, 0x3fbda140},
+{'l', 0xc194fea4, 0x41aef4b6},
+{'l', 0x41a82ef4, 0x42013ddb},
+{'l', 0x40cb2cb0, 0x3fbda138},
+{'l', 0x00000000, 0x4092bcba},
+{'l', 0xc20da868, 0x00000000},
+{'l', 0x00000000, 0xc092bcba},
+{'l', 0x40ed0978, 0xbfcfb08c},
+{'l', 0xc1391d5a, 0xc18ec95f},
+{'l', 0xc1761128, 0x418fea54},
+{'l', 0x40d43460, 0x3fbda138},
+{'l', 0x00000000, 0x4092bcba},
+{'l', 0xc1b49983, 0x00000000},
+{'l', 0x35700000, 0xc092bcba},
+{'l', 0x40bda130, 0xbf907ad0},
+{'l', 0x41a94fea, 0xc1c6a8dc},
+{'l', 0xc1986186, 0xc1eb580c},
+{'l', 0xc0cd6e9c, 0xbfe1bfe0},
+{'@', 0x00000079, 0x0000483d},/*        y        x-advance: 72.238281 */
+{'M', 0x42025ed1, 0x4002ef4c},
+{'l', 0xc1d43460, 0xc2780ad7},
+{'l', 0xc094fea7, 0xbfd8b820},
+{'l', 0xb4000000, 0xc094fea8},
+{'l', 0x4207bb60, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0fcd6ec, 0x3feac780},
+{'l', 0x4179740a, 0x4212bcba},
+{'l', 0x415e5d00, 0xc2134d35},
+{'l', 0xc0f85310, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ad4346, 0x00000000},
+{'4', 0x00250000, 0x000bffda},
+{'l', 0xc1d161fa, 0x4280d17f},
+{'q', 0xc0907ac8, 0x4137fc63},
+{0, 0xc0fcd6e8, 0x4185c1b1},
+{'8', 0x3ec429e5, 0x14b514e0},
+{'9', 0x0000ffd3, 0xfff6ffa3},
+{'4', 0xff780000, 0x00000021},
+{'l', 0x40422506, 0x410e38e3},
+{'8', 0x0c290c10, 0xf6250015},
+{'8', 0xe31ef610, 0xd21bed0e},
+{'q', 0x3fcfb090, 0xc061bfe4},
+{0, 0x40974094, 0xc1270dff},
+{'@', 0x0000007a, 0x00004020},/*        z        x-advance: 64.125000 */
+{'M', 0x40349983, 0x00000000},
+{'4', 0xffe70000, 0xfe3a00f3},
+{'l', 0xc0f18d54, 0x00000000},
+{'8', 0x05c400e1, 0x0ed805e3},
+{'l', 0xc00bf6f8, 0x412ef4b8},
+{'l', 0xc0a28a29, 0x00000000},
+{'l', 0x00000000, 0xc19e0652},
+{'l', 0x424dff19, 0x00000000},
+{'4', 0x001b0000, 0x01c4ff0d},
+{'l', 0x41294fea, 0xb5c00000},
+{'8', 0xf9430020, 0xed32f923},
+{'l', 0x406f4b60, 0xc174f032},
+{'l', 0x40a28a28, 0x00000000},
+{'l', 0xbff3cf40, 0x41c7c9d2},
+{'l', 0xc260e72b, 0x00000000},
+{'@', 0x0000007b, 0x000038ee},/*        {        x-advance: 56.929688 */
+{'M', 0x42270dff, 0x419aa372},
+{'q', 0xc1294fea, 0x00000000},
+{0, 0xc1825ed0, 0xc0add3c2},
+{'9', 0xffd5ffd3, 0xff86ffd3},
+{'l', 0x00000000, 0xc1a67d85},
+{'8', 0xa6e3c500, 0xe0a5e2e4},
+{'l', 0x35000000, 0xc0bfe320},
+{'8', 0xe359ff39, 0xa420e420},
+{'l', 0x00000000, 0xc1a5ed0a},
+{'q', 0x00000000, 0xc11f2748},
+{0, 0x40b015ac, 0xc174f030},
+{'9', 0xffd6002c, 0xffd60083},
+{'4', 0x0000004c, 0x00310000},
+{'l', 0xc08bf6f8, 0x00000000},
+{'8', 0x18c900da, 0x49f018f0},
+{'l', 0x00000000, 0x41ba3e50},
+{'8', 0x5be13500, 0x31ae26e1},
+{'l', 0x00000000, 0x3e58b900},
+{'8', 0x31530b35, 0x5d1e251e},
+{'l', 0x00000000, 0x41bc803a},
+{'8', 0x49103000, 0x18371810},
+{'l', 0x408bf6f8, 0x00000000},
+{'l', 0x00000000, 0x40c466f4},
+{'l', 0xc1186188, 0x00000000},
+{'@', 0x0000007c, 0x00001fd1},/*        |        x-advance: 31.816406 */
+{'M', 0x412dd3c1, 0x41f97409},
+{'l', 0x00000000, 0xc3036db7},
+{'l', 0x41216933, 0x00000000},
+{'l', 0x00000000, 0x43036db7},
+{'l', 0xc1216933, 0x36000000},
+{'@', 0x0000007d, 0x000038ee},/*        }        x-advance: 56.929688 */
+{'M', 0x40b49983, 0x419aa372},
+{'4', 0xffcf0000, 0x00000022},
+{'8', 0xe8370026, 0xb710e710},
+{'l', 0x00000000, 0xc1bc803a},
+{'8', 0xa31ec900, 0xcf53db1e},
+{'l', 0x00000000, 0xbe58b900},
+{'8', 0xd0aef6cd, 0xa3e1dae1},
+{'l', 0x00000000, 0xc1ba3e50},
+{'8', 0xb7f0cf00, 0xe8c9e8f0},
+{'4', 0x0000ffde, 0xffcf0000},
+{'l', 0x41186186, 0x00000000},
+{'q', 0x412ef4b6, 0x00000000},
+{0, 0x41837fc6, 0x40ab91e0},
+{'9', 0x002a002c, 0x007a002c},
+{'l', 0x00000000, 0x41a5ed0a},
+{'8', 0x5c1f4000, 0x1d591b20},
+{'l', 0x00000000, 0x40bfe320},
+{'8', 0x21a402c1, 0x59e41ee4},
+{'l', 0x00000000, 0x41a67d85},
+{'q', 0x00000000, 0x411e0652},
+{0, 0xc0b6db70, 0x4174f033},
+{'q', 0xc0b6db70, 0x40add3c2},
+{0, 0xc181ce56, 0x40add3c2},
+{'l', 0xc1186186, 0x00000000},
+{'@', 0x0000007e, 0x00004b21},/*        ~        x-advance: 75.128906 */
+{'M', 0x4256be89, 0xc207bb5f},
+{'8', 0xf0be00e0, 0xcdb4f0de},
+{'8', 0xcab8d8d0, 0xf2d7f2e9},
+{'8', 0x1fc600d8, 0x68e71fee},
+{'l', 0xc11f2748, 0x00000000},
+{'q', 0x3f877322, 0xc1282ef8},
+{0, 0x4058b836, 0xc17df7e0},
+{'8', 0xbe33d612, 0xe955e921},
+{'8', 0x0f40001f, 0x36510f21},
+{'8', 0x3544262c, 0x0e290e18},
+{'8', 0xe0370025, 0x981be012},
+{'l', 0x41228a28, 0x00000000},
+{'q', 0xbfb49980, 0x412a70e0},
+{0, 0xc073cf40, 0x41801ce6},
+{'8', 0x42cd2aed, 0x17af17e0},
+{'@', 0x000000a0, 0x0000241e},/*                 x-advance: 36.117188 */
+{'@', 0x000000a1, 0x0000301c},/*        ¡        x-advance: 48.109375 */
+{'M', 0x419fb7c3, 0xc2107acf},
+{'l', 0x4101ce56, 0x00000000},
+{'4', 0x02070033, 0x0000ff58},
+{'6', 0xfdf90033, 0xff030020},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'@', 0x000000a2, 0x0000483d},/*        ¢        x-advance: 72.238281 */
+{'M', 0x4282cb2d, 0xc193ddb0},
+{'8', 0x1cc012e8, 0x0daf0ad9},
+{'4', 0x00690000, 0x0000ffcd},
+{'l', 0x00000000, 0xc153136a},
+{'q', 0xc209b50d, 0xbfab91d8},
+{0, 0xc209b50d, 0xc20a4588},
+{'q', 0x00000000, 0xc12dd3c4},
+{0, 0x40853136, 0xc1958f20},
+{'q', 0x40853138, 0xc0fa9500},
+{0, 0x413da131, 0xc13ec228},
+{'9', 0xffdf003e, 0xffdf0092},
+{'0', 0xa0000001, 0x62000033},
+{'9', 0x00050049, 0x00110085},
+{'4', 0x009c0000, 0x0000ffd8},
+{'l', 0xc073cf40, 0xc13a3e54},
+{'9', 0xffeeffe4, 0xffe9ffc2},
+{'l', 0x00000000, 0x4254c4da},
+{'9', 0x00000052, 0xfff00091},
+{'6', 0x002b0000, 0xff13fecc},
+{'q', 0xb6000000, 0x413a3e50},
+{0, 0x4058b830, 0x418ec95e},
+{'9', 0x0031001b, 0x003e0054},
+{'l', 0x00000000, 0xc251aa36},
+{'q', 0xc0cfb088, 0x3fab91c0},
+{0, 0xc123ab1e, 0x41077320},
+{'q', 0xc06ac790, 0x40e401d0},
+{0, 0xc06ac790, 0x4192bcba},
+{'@', 0x000000a3, 0x0000483d},/*        £        x-advance: 72.238281 */
+{'M', 0x42877322, 0xc17bb5f5},
+{'l', 0x00000000, 0x417bb5f5},
+{'4', 0x0000fe14, 0xffbb0000},
+{'l', 0x40a0483f, 0xc08bf6f8},
+{'q', 0x41216932, 0xc1077323},
+{0, 0x41216932, 0xc18a4588},
+{'8', 0xcdf7e700, 0xc9eae6f7},
+{'4', 0x0000ffa5, 0xffc70000},
+{'l', 0x40c6a8dd, 0x00000000},
+{'q', 0xc0974091, 0xc12a70e4},
+{0, 0xc0974091, 0xc1a0d8b8},
+{'q', 0x00000000, 0xc13da130},
+{0, 0x41053136, 0xc1922c40},
+{'q', 0x4106522e, 0xc0cd6ea0},
+{0, 0x41c85a4e, 0xc0cd6ea0},
+{'8', 0x03440021, 0x146a0322},
+{'4', 0x00ac0000, 0x0000ffcf},
+{'l', 0xc0422500, 0xc15afa20},
+{'q', 0xc0c466f0, 0xc06f4b60},
+{0, 0xc14c4da8, 0xc06f4b60},
+{'q', 0xc14a0bbe, 0x00000000},
+{0, 0xc14a0bbe, 0x418c8774},
+{'9', 0x004b0000, 0x00a0000e},
+{'4', 0x0000008d, 0x00390000},
+{'l', 0xc186522b, 0x00000000},
+{'8', 0x56073207, 0x50f12f00},
+{'q', 0xbff3cf40, 0x4082ef4c},
+{0, 0xc08e38e4, 0x40e885a6},
+{'l', 0x42294fea, 0xbd907b00},
+{'@', 0x000000a4, 0x0000483d},/*        ¤        x-advance: 72.238281 */
+{'M', 0x424f684c, 0xc1c6a8dd},
+{'q', 0xc0dafa20, 0x409bc468},
+{0, 0xc17bb5f4, 0x409bc468},
+{'9', 0x0000ffbd, 0xffdaff83},
+{'4', 0x003affc5, 0xffc7ffc8},
+{'l', 0x40e643ba, 0xc0e885a4},
+{'q', 0xc0974092, 0xc0e401d0},
+{0, 0xc0974092, 0xc17bb5f4},
+{'9', 0xffbb0000, 0xff830025},
+{'4', 0xffc5ffc7, 0xffc6003a},
+{'l', 0x40e401d0, 0x40f18d50},
+{'q', 0x40ed097c, 0xc09e0650},
+{0, 0x417bb5f4, 0xc09e0650},
+{'9', 0x00000042, 0x0027007d},
+{'4', 0xffc5003b, 0x00380039},
+{'l', 0xc0eac788, 0x40f18d50},
+{'q', 0x409bc468, 0x40e885a0},
+{0, 0x409bc468, 0x417bb5f4},
+{'9', 0x00430000, 0x007dffda},
+{'4', 0x003a003a, 0x0039ffc8},
+{'6', 0xffc6ffc4, 0xfeb9ff83},
+{'8', 0x2a9b00c5, 0x65d72ad7},
+{'8', 0x65293b00, 0x2965292a},
+{'8', 0xd765003b, 0x9b2ad72a},
+{'8', 0x9ad6c500, 0xd69ad6d6},
+{'@', 0x000000a5, 0x0000483d},/*        ¥        x-advance: 72.238281 */
+{'M', 0x3e107acf, 0xc2b3e4e9},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x420ccfb1, 0x00000000},
+{'l', 0x00000000, 0x4094feb0},
+{'l', 0xc0fcd6ec, 0x3feac780},
+{'l', 0x416885a6, 0x42186186},
+{'l', 0x416f4b64, 0xc218f200},
+{'l', 0xc0f85310, 0xbfd8b840},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41b76bea, 0x00000000},
+{'l', 0x00000000, 0x4094feb0},
+{'l', 0xc0c22510, 0x3fb49980},
+{'l', 0xc1910b48, 0x422dd3c1},
+{'l', 0x417f18d4, 0x00000000},
+{'l', 0x00000000, 0x40e643b8},
+{'l', 0xc189b50e, 0x00000000},
+{'l', 0x00000000, 0x411bc466},
+{'l', 0x4189b50e, 0x00000000},
+{'l', 0x00000000, 0x40e643bc},
+{'l', 0xc189b50e, 0x00000000},
+{'l', 0x00000000, 0x4169a69a},
+{'l', 0x41216934, 0x3fd8b83c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc221f9ae, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x4120483e, 0xbfd8b838},
+{'l', 0x00000000, 0xc169a69a},
+{'l', 0xc1910b4a, 0x00000000},
+{'l', 0x00000000, 0xc0e643bc},
+{'l', 0x41910b4a, 0x00000000},
+{'l', 0x00000000, 0xc11bc466},
+{'l', 0xc1910b4a, 0x00000000},
+{'l', 0x00000000, 0xc0e643b8},
+{'l', 0x41837fc6, 0x00000000},
+{'l', 0xc193ddb0, 0xc22cb2cb},
+{'l', 0xc0bda12e, 0xbfd8b840},
+{'@', 0x000000a6, 0x00001fd1},/*        ¦        x-advance: 31.816406 */
+{'M', 0x412dd3c1, 0x41f97409},
+{'l', 0x00000000, 0xc22f8531},
+{'4', 0x00000050, 0x015f0000},
+{'6', 0x0000ffb0, 0xfd430000},
+{'l', 0x00000000, 0xc22ef4b6},
+{'l', 0x4120483d, 0x00000000},
+{'l', 0x00000000, 0x422ef4b7},
+{'l', 0xc120483d, 0x00000000},
+{'@', 0x000000a7, 0x0000483d},/*        §        x-advance: 72.238281 */
+{'M', 0x42714515, 0xc03da130},
+{'q', 0x00000000, 0x4120483e},
+{0, 0xc0dd3c10, 0x41785314},
+{'q', 0xc0dafa20, 0x40add3c0},
+{0, 0xc19d75d8, 0x40add3c0},
+{'8', 0xf7a200d6, 0xedb3f7cd},
+{'4', 0xff6d0000, 0x00000025},
+{'l', 0x402b91d8, 0x4114fea6},
+{'8', 0x23361616, 0x0d3f0d20},
+{'8', 0xec46002d, 0xca18eb18},
+{'8', 0xc4e9df00, 0xcdbbe5e9},
+{'l', 0xc0d8b834, 0xc061bfe4},
+{'8', 0xc7a8e1c4, 0xc6d4e7e4},
+{'8', 0xb5f1dff1, 0x9f20c800},
+{'8', 0xc75ad820, 0xbeb3e4cb},
+{'q', 0xc03da130, 0xc0974090},
+{0, 0xc03da130, 0xc1325798},
+{'q', 0x00000000, 0xc1107ad0},
+{0, 0x40d6764a, 0xc16643c0},
+{'q', 0x40d6764c, 0xc0ab91d0},
+{0, 0x418a4589, 0xc0ab91d0},
+{'9', 0x0000003a, 0x0010009c},
+{'4', 0x00880000, 0x0000ffdb},
+{'l', 0xc0107ad0, 0xc0f85320},
+{'8', 0xe6d2f0f0, 0xf6c9f6e3},
+{'8', 0x10c400d8, 0x2ded10ed},
+{'8', 0x38162000, 0x2d471816},
+{'q', 0x41325798, 0x409bc460},
+{0, 0x4169a69c, 0x40e1bfe0},
+{'8', 0x262f101c, 0x2f1d1513},
+{'8', 0x3e0a1a0a, 0x6adf3e00},
+{'8', 0x3ea22cdf, 0x4b502136},
+{'9', 0x00290019, 0x005e0019},
+{'m', 0xc137fc64, 0xc21546e3},
+{'8', 0xd6f5e800, 0xdfe0eef6},
+{'8', 0xdab5f1ec, 0x1cc304dc},
+{'8', 0x31e717e7, 0x2a0b1700},
+{'8', 0x2420130b, 0x2e4c1015},
+{'8', 0xe03cfa25, 0xc918e618},
+{'@', 0x000000a8, 0x0000301c},/*        ¨        x-advance: 48.109375 */
+{'M', 0x420fea54, 0xc29f6f85},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000a9, 0x00006bef},/*        ©        x-advance: 107.933594 */
+{'M', 0x40c6a8dd, 0xc23d10b5},
+{'q', 0x00000000, 0xc1555554},
+{0, 0x40d1f275, 0xc1c4f76a},
+{'q', 0x40d4345e, 0xc135ba80},
+{0, 0x418e38e4, 0xc18e38e4},
+{'q', 0x4133788c, 0xc0cd6ea0},
+{0, 0x41c2b582, 0xc0cd6ea0},
+{'q', 0x4153136c, 0x00000000},
+{0, 0x41c3d676, 0x40cfb080},
+{'q', 0x41349980, 0x40cfb090},
+{0, 0x418e38e4, 0x418e38e4},
+{'q', 0x40d1f270, 0x41337890},
+{0, 0x40d1f270, 0x41c466f2},
+{'q', 0x00000000, 0x4150d180},
+{0, 0xc0cd6ea0, 0x41c22506},
+{'q', 0xc0cb2cb0, 0x41325798},
+{0, 0xc18da868, 0x418e38e4},
+{'q', 0xc1349980, 0x40d43461},
+{0, 0xc1c587e6, 0x40d43461},
+{'q', 0xc151f278, 0xb4000000},
+{0, 0xc1c345fd, 0xc0cfb08a},
+{'q', 0xc1349982, 0xc0cfb089},
+{0, 0xc18e38e4, 0xc18e38e4},
+{'9', 0xffa6ffcd, 0xff3dffcd},
+{'m', 0x4242b581, 0xc22b91d5},
+{'q', 0xc135ba7c, 0x00000000},
+{0, 0xc1a94fec, 0x40b6db70},
+{'q', 0xc11ce55c, 0x40b6db60},
+{0, 0xc1785312, 0x417a94f8},
+{'q', 0xc0b49984, 0x411f274c},
+{0, 0xc0b49984, 0x41ac2252},
+{'q', 0x00000000, 0x4137fc64},
+{0, 0x40b49984, 0x41ac2251},
+{'q', 0x40b6db6c, 0x411f2748},
+{0, 0x4177321e, 0x417a94ff},
+{'q', 0x411ce55c, 0x40b49982},
+{0, 0x41a9e066, 0x40b49982},
+{'q', 0x41349984, 0x00000000},
+{0, 0x41a8bf6e, 0xc0b49982},
+{'q', 0x411e0658, 0xc0b6db6e},
+{0, 0x41797408, 0xc17bb5f5},
+{'q', 0x40b91d60, 0xc120483c},
+{0, 0x40b91d60, 0xc1ab91d6},
+{'q', 0x00000000, 0xc136db6c},
+{0, 0xc0b49980, 0xc1aa70de},
+{'q', 0xc0b49980, 0xc11f2748},
+{0, 0xc1773220, 0xc17bb5f8},
+{'9', 0xffd2ffb3, 0xffd2ff55},
+{'m', 0x401e0650, 0x42907acf},
+{'q', 0xc1609ef0, 0xb6000000},
+{0, 0xc1b0a628, 0xc0fa9504},
+{'q', 0xc0ff18d4, 0xc0fa94fc},
+{0, 0xc0ff18d4, 0xc1a8bf6f},
+{'q', 0x00000000, 0xc16ac794},
+{0, 0x40f85314, 0xc1b25798},
+{'q', 0x40fa9500, 0xc0f61130},
+{0, 0x41b3788e, 0xc0f61130},
+{'9', 0x00000042, 0x00100097},
+{'4', 0x00740002, 0x0000ffda},
+{'l', 0xbfab9200, 0xc0ed0980},
+{'8', 0xebd2f2e9, 0xf9c9f9e9},
+{'q', 0xc112bcb8, 0x00000000},
+{0, 0xc151f274, 0x40ab91e0},
+{'q', 0xc07cd6f0, 0x40ab91d0},
+{0, 0xc07cd6f0, 0x41961f9a},
+{'q', 0x00000000, 0x413a3e4c},
+{0, 0x406f4b70, 0x418c8773},
+{'8', 0x2e672e1e, 0xdf6e0044},
+{'4', 0xffbd000c, 0x00000027},
+{'l', 0xbe907a00, 0x4177321e},
+{'q', 0xc10f59e0, 0x403015b0},
+{0, 0xc19fb7c4, 0x403015b0},
+{'@', 0x000000aa, 0x00002b50},/*        ª        x-advance: 43.312500 */
+{'M', 0x41b64af3, 0xc2c02b58},
+{'8', 0x1a590038, 0x48201a20},
+{'l', 0x00000000, 0x41bda130},
+{'l', 0x407cd6f0, 0x3f877320},
+{'4', 0x001b0000, 0x0000ff88},
+{'l', 0xbefcd700, 0xc0422500},
+{'8', 0x17da0ef2, 0x07cf07e8},
+{'8', 0xa2960096, 0xb523ce00},
+{'9', 0xffe70023, 0xffe50077},
+{'4', 0xffff0022, 0xffda0000},
+{'8', 0xd6f1e400, 0xf2daf2f1},
+{'8', 0x05e100ee, 0x0ce605f5},
+{'4', 0x002bfff4, 0x0000ffe5},
+{'l', 0x00000000, 0xc12cb2d0},
+{'8', 0xf652f73b, 0xff2eff17},
+{'m', 0x403da130, 0x41a82ef4},
+{'l', 0xc07cd6e8, 0x3e107a00},
+{'8', 0x10d101de, 0x31f40ff4},
+{'8', 0x32233200, 0xf139001a},
+{'l', 0x00000000, 0xc14c4da8},
+{'@', 0x000000ab, 0x0000483d},/*        «        x-advance: 72.238281 */
+{'M', 0x40ef4b67, 0xc20bf6f9},
+{'l', 0x41ba3e4f, 0xc1c8eac6},
+{'l', 0x40e401cc, 0x00000000},
+{'l', 0xc14e8f94, 0x41db8a9c},
+{'l', 0x414e8f94, 0x41db8a9c},
+{'4', 0x0000ffc7, 0xff38ff46},
+{'6', 0xffdb0000, 0x000000e7},
+{'l', 0x41ba3e4e, 0xc1c8eac6},
+{'l', 0x40e1bfe0, 0x00000000},
+{'l', 0xc14d6e9c, 0x41db8a9c},
+{'l', 0x414d6e9c, 0x41db8a9c},
+{'l', 0xc0e1bfe0, 0x35000000},
+{'l', 0xc1ba3e4e, 0xc1c8eac8},
+{'l', 0x00000000, 0xc094fea8},
+{'@', 0x000000ac, 0x00005253},/*        ¬        x-advance: 82.324219 */
+{'M', 0x4294da87, 0xc2543460},
+{'l', 0x00000000, 0x421aebaf},
+{'l', 0xc1204840, 0x00000000},
+{'l', 0x00000000, 0xc1e4924a},
+{'l', 0xc264da87, 0x00000000},
+{'l', 0x35800000, 0xc1228a28},
+{'l', 0x4286764b, 0x00000000},
+{'@', 0x000000ad, 0x0000301c},/*        ­        x-advance: 48.109375 */
+{'M', 0x40a94feb, 0xc1deed7d},
+{'l', 0x00000000, 0xc14466f2},
+{'l', 0x42161f9b, 0x00000000},
+{'l', 0x00000000, 0x414466f2},
+{'l', 0xc2161f9b, 0x00000000},
+{'@', 0x000000ae, 0x00006bef},/*        ®        x-advance: 107.933594 */
+{'M', 0x42cf684c, 0xc23d10b5},
+{'q', 0x00000000, 0x4150d180},
+{0, 0xc0cd6ea0, 0x41c22506},
+{'q', 0xc0cb2cb0, 0x41325798},
+{0, 0xc18da868, 0x418e38e4},
+{'q', 0xc1349980, 0x40d43461},
+{0, 0xc1c587e6, 0x40d43461},
+{'q', 0xc151f278, 0xb4000000},
+{0, 0xc1c345fd, 0xc0cfb08a},
+{'q', 0xc1349982, 0xc0cfb089},
+{0, 0xc18e38e4, 0xc18e38e4},
+{'q', 0xc0cfb087, 0xc1349984},
+{0, 0xc0cfb087, 0xc1c345fc},
+{'q', 0x00000000, 0xc1555554},
+{0, 0x40d1f275, 0xc1c4f76a},
+{'q', 0x40d4345e, 0xc135ba80},
+{0, 0x418e38e4, 0xc18e38e4},
+{'q', 0x4133788c, 0xc0cd6ea0},
+{0, 0x41c2b582, 0xc0cd6ea0},
+{'q', 0x4153136c, 0x00000000},
+{0, 0x41c3d676, 0x40cfb080},
+{'q', 0x41349980, 0x40cfb090},
+{0, 0x418e38e4, 0x418e38e4},
+{'9', 0x00590034, 0x00c40034},
+{'m', 0xc24345fb, 0xc22b91d5},
+{'q', 0xc135ba7c, 0x00000000},
+{0, 0xc1a94fec, 0x40b6db70},
+{'q', 0xc11ce55c, 0x40b6db60},
+{0, 0xc1785312, 0x417a94f8},
+{'q', 0xc0b49984, 0x411f274c},
+{0, 0xc0b49984, 0x41ac2252},
+{'q', 0x00000000, 0x4137fc64},
+{0, 0x40b49984, 0x41ac2251},
+{'q', 0x40b6db6c, 0x411f2748},
+{0, 0x4177321e, 0x417a94ff},
+{'q', 0x411ce55c, 0x40b49982},
+{0, 0x41a9e066, 0x40b49982},
+{'q', 0x41349984, 0x00000000},
+{0, 0x41a8bf6e, 0xc0b49982},
+{'q', 0x411e0658, 0xc0b6db6e},
+{0, 0x41797408, 0xc17bb5f5},
+{'q', 0x40b91d60, 0xc120483c},
+{0, 0x40b91d60, 0xc1ab91d6},
+{'q', 0x00000000, 0xc136db6c},
+{0, 0xc0b49980, 0xc1aa70de},
+{'q', 0xc0b49980, 0xc11f2748},
+{0, 0xc1773220, 0xc17bb5f8},
+{'9', 0xffd2ffb3, 0xffd2ff55},
+{'m', 0x41555554, 0x428d602b},
+{'l', 0xc181ce56, 0xc1c1948a},
+{'l', 0xc05d3c10, 0x00000000},
+{'l', 0x00000000, 0x4197d10b},
+{'l', 0x40d43460, 0x3f907ad0},
+{'l', 0x00000000, 0x4082ef4c},
+{'l', 0xc1c345fb, 0x00000000},
+{'l', 0x00000000, 0xc082ef4c},
+{'l', 0x40ab91d4, 0xbf907ad0},
+{'l', 0x00000000, 0xc23a3e4e},
+{'4', 0xfff7ffd1, 0xffe10000},
+{'l', 0x41c587e8, 0x00000000},
+{'q', 0x413015ac, 0x00000000},
+{0, 0x41853136, 0x4082ef50},
+{'8', 0x5b2d202d, 0x4ce72b00},
+{'9', 0x0020ffe7, 0x0030ffb5},
+{'l', 0x4169a6a0, 0x41a31aa3},
+{'4', 0x00090027, 0x00200000},
+{'6', 0x0000ff82, 0xfeb8ffe1},
+{'8', 0xc0e9d200, 0xeea5eee9},
+{'4', 0x0000fff6, 0x00b00000},
+{'l', 0x3fcfb080, 0x00000000},
+{'8', 0xec55003a, 0xb81bec1b},
+{'@', 0x000000af, 0x0000483d},/*        ¯        x-advance: 72.238281 */
+{'M', 0x429304f8, 0xc2c466f1},
+{'l', 0xc2956b02, 0x00000000},
+{'l', 0x35000000, 0xc1282ef8},
+{'l', 0x42956b02, 0x00000000},
+{'l', 0x00000000, 0x41282ef8},
+{'@', 0x000000b0, 0x000039c7},/*        °        x-advance: 57.777344 */
+{'M', 0x40dd3c0d, 0xc2944a0c},
+{'8', 0xa917d200, 0xc03fd817},
+{'8', 0xe958e929, 0x1757002e},
+{'8', 0x3f401728, 0x58172817},
+{'8', 0x58e82f00, 0x3fc028e9},
+{'q', 0xc0a28a28, 0x40349980},
+{0, 0xc12dd3c0, 0x40349980},
+{'q', 0xc112bcba, 0x00000000},
+{0, 0xc1785314, 0xc0cb2cb0},
+{'9', 0xffceffce, 0xff84ffce},
+{'m', 0x41ae643c, 0xc1609ef0},
+{'8', 0x20b400d3, 0x50e120e1},
+{'8', 0x4f1f2e00, 0x204c201f},
+{'8', 0xe04c002d, 0xb11fe01f},
+{'8', 0xb0e1d000, 0xe0b3e0e1},
+{'@', 0x000000b1, 0x00004f4b},/*        ±        x-advance: 79.292969 */
+{'M', 0x42329fd5, 0xc22b91d6},
+{'l', 0x00000000, 0x41e4924a},
+{'l', 0xc1216934, 0x00000000},
+{'l', 0x00000000, 0xc1e4924a},
+{'l', 0xc1e401ce, 0x00000000},
+{'l', 0xb5800000, 0xc1228a28},
+{'l', 0x41e401ce, 0x00000000},
+{'l', 0x00000000, 0xc1e49248},
+{'l', 0x41216934, 0x00000000},
+{'l', 0x00000000, 0x41e49248},
+{'4', 0x000000e5, 0x00510000},
+{'6', 0x0000ff1b, 0x010700e5},
+{'l', 0x00000000, 0x411f2748},
+{'l', 0xc286764c, 0x00000000},
+{'l', 0x36400000, 0xc11f2748},
+{'l', 0x4286764c, 0x00000000},
+{'@', 0x000000b2, 0x00002b50},/*        ²        x-advance: 43.312500 */
+{'M', 0x421fb7c3, 0xc2174091},
+{'4', 0x0000fee1, 0xffc10000},
+{'8', 0xb14cd22b, 0xc237e021},
+{'8', 0xc421e316, 0xb40be10b},
+{'8', 0xc8f0db00, 0xedd2edf0},
+{'9', 0x0000ffe3, 0x0011ffce},
+{'4', 0x0041fff2, 0x0000ffde},
+{'l', 0x00000000, 0xc159d930},
+{'q', 0x40ff18d6, 0xbfeac780},
+{0, 0x4159d92c, 0xbfeac780},
+{'q', 0x41161f9c, 0x00000000},
+{0, 0x416522c6, 0x40785320},
+{'8', 0x57281f28, 0x44f42600},
+{'8', 0x3cd81ef4, 0x4ea91de5},
+{'l', 0xc0f85312, 0x40d67648},
+{'l', 0x41d3a3e6, 0x00000000},
+{'l', 0x00000000, 0x411f2748},
+{'@', 0x000000b3, 0x00002b50},/*        ³        x-advance: 43.312500 */
+{'M', 0x422120f6, 0xc254c4db},
+{'q', 0x00000000, 0x40f61128},
+{0, 0xc0add3c0, 0x413fe31c},
+{'q', 0xc0add3c4, 0x4089b510},
+{0, 0xc1785314, 0x4089b510},
+{'9', 0x0000ffbd, 0xfff3ff83},
+{'4', 0xff8dfffd, 0x00000024},
+{'l', 0x40107ad0, 0x4114fea4},
+{'8', 0x0e370e19, 0xa3540054},
+{'8', 0xc4eed900, 0xe8c4ebef},
+{'4', 0xfffeffdc, 0xffd20000},
+{'l', 0x408bf6f8, 0xbe907b00},
+{'8', 0xec2cfe1e, 0xc50eee0e},
+{'8', 0xb5c2b500, 0x0fd200eb},
+{'4', 0x0043fff2, 0x0000ffde},
+{'l', 0x00000000, 0xc159d930},
+{'q', 0x40e643b9, 0xbfeac780},
+{0, 0x4159d92c, 0xbfeac780},
+{'q', 0x41986186, 0x00000000},
+{0, 0x41986186, 0x415f7df8},
+{'8', 0x48ea2a00, 0x25b91dea},
+{'8', 0x2356073a, 0x4e1b1b1b},
+{'@', 0x000000b4, 0x0000301c},/*        ´        x-advance: 48.109375 */
+{'M', 0x4123ab1e, 0xc29dbe15},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff19, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000b5, 0x0000533e},/*        µ        x-advance: 83.242188 */
+{'M', 0x4258b836, 0xc0cfb08a},
+{'8', 0x31bf23dd, 0x0dc40de3},
+{'q', 0xc0cb2cb0, 0x00000000},
+{0, 0xc1228a2a, 0xc06ac790},
+{'9', 0x003e0000, 0x0108fff9},
+{'4', 0x0000ff61, 0xffe70000},
+{'9', 0xff6e000d, 0xfeea000d},
+{'l', 0x00000000, 0xc25282ef},
+{'l', 0xc0d43461, 0xbfe1bfe0},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x4237fc64},
+{'8', 0x4b153300, 0x17421715},
+{'9', 0x00000035, 0xffd4006b},
+{'l', 0x00000000, 0xc2391d59},
+{'l', 0xc0c22500, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e6, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fe1bfd8},
+{'l', 0x00000000, 0x4092bcba},
+{'l', 0xc1c97b42, 0x00000000},
+{'l', 0xbfab91e0, 0xc0cfb08a},
+{'@', 0x000000b6, 0x00004e06},/*        ¶        x-advance: 78.023438 */
+{'M', 0x42841041, 0xc2afa950},
+{'l', 0x00000000, 0x42d41041},
+{'l', 0xc11e0650, 0x36000000},
+{'l', 0x00000000, 0xc2d41041},
+{'l', 0xc1186188, 0x00000000},
+{'4', 0x03500000, 0x0000ffb1},
+{'l', 0x00000000, 0xc262989c},
+{'q', 0xc15afa24, 0xbefcd680},
+{0, 0xc1ae643c, 0xc100ad5c},
+{'q', 0xc101ce57, 0xc0f3cf40},
+{0, 0xc101ce57, 0xc1a55c8e},
+{'q', 0x00000000, 0xc151f278},
+{0, 0x40ff18d6, 0xc1a1f9b0},
+{'9', 0xffc7003f, 0xffc700b5},
+{'l', 0x4209b50c, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc0bb5f40, 0x3fcfb080},
+{'@', 0x000000b7, 0x0000302e},/*        ·        x-advance: 48.179688 */
+{'M', 0x41c07396, 0xc2103292},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x000000b8, 0x0000301c},/*        ¸        x-advance: 48.109375 */
+{'M', 0x419fb7c3, 0x41ee2a71},
+{'9', 0x0000ffce, 0xffefffa6},
+{'l', 0x00000000, 0xc0cb2cb4},
+{'8', 0x0a4c0a28, 0xd0330033},
+{'8', 0xdbefe800, 0xf0c8f3ef},
+{'4', 0xff92001c, 0x0000003e},
+{'l', 0xbfcfb090, 0x40f85314},
+{'8', 0x5e680f68, 0x53d83500},
+{'q', 0xc0a28a24, 0x406f4b68},
+{0, 0xc154345e, 0x406f4b68},
+{'@', 0x000000b9, 0x00002b50},/*        ¹        x-advance: 43.312500 */
+{'M', 0x41ddcc88, 0xc22dd3c1},
+{'l', 0x411e0650, 0x3f7cd700},
+{'l', 0x00000000, 0x40974090},
+{'l', 0xc200f59d, 0x00000000},
+{'l', 0xb5800000, 0xc0974090},
+{'l', 0x411ce55d, 0xbf7cd700},
+{'l', 0x00000000, 0xc222d267},
+{'l', 0xc11ce55d, 0x404fb0a0},
+{'l', 0x00000000, 0xc094feb0},
+{'l', 0x41801ce6, 0xc1174090},
+{'l', 0x40cb2cb0, 0x00000000},
+{'l', 0x00000000, 0x424e4757},
+{'@', 0x000000ba, 0x00002fb0},/*        º        x-advance: 47.687500 */
+{'M', 0x422e643c, 0xc2968bf7},
+{'q', 0x00000000, 0x41228a28},
+{0, 0xc0a04840, 0x41797408},
+{'q', 0xc09e0650, 0x40ab91d8},
+{0, 0xc1706c5c, 0x40ab91d8},
+{'q', 0xc1186186, 0x00000000},
+{0, 0xc16885a5, 0xc0a94ff0},
+{'q', 0xc0a0483e, 0xc0ab91d8},
+{0, 0xc0a0483e, 0xc17a94fc},
+{'q', 0x00000000, 0xc1228a28},
+{0, 0x40a0483e, 0xc1773220},
+{'q', 0x40a0483e, 0xc0a94ff0},
+{0, 0x416d097b, 0xc0a94ff0},
+{'q', 0x41186186, 0x00000000},
+{0, 0x4169a69a, 0x40a70e00},
+{'9', 0x00290029, 0x007c0029},
+{'m', 0xc146a8de, 0x00000000},
+{'q', 0x00000000, 0xc17bb5f8},
+{0, 0xc0f18d50, 0xc17bb5f8},
+{'8', 0x1dd400e3, 0x5ff31df3},
+{'8', 0x610d4200, 0x1e2c1e0e},
+{'8', 0xe22d001e, 0x9f0fe10f},
+{'@', 0x000000bb, 0x0000483d},/*        »        x-advance: 72.238281 */
+{'M', 0x42818619, 0xc1f2ae48},
+{'l', 0xc1ba3e50, 0x41c8eac8},
+{'l', 0xc0e401d0, 0x35000000},
+{'l', 0x414e8f94, 0xc1db8a9c},
+{'l', 0xc14e8f94, 0xc1db8a9c},
+{'4', 0x00000039, 0x00c800ba},
+{'6', 0x00250000, 0x0000ff19},
+{'l', 0xc1ba3e4e, 0x41c8eac8},
+{'l', 0xc0e1bfe4, 0x35000000},
+{'l', 0x414d6e9e, 0xc1db8a9c},
+{'l', 0xc14d6e9e, 0xc1db8a9c},
+{'l', 0x40e1bfe4, 0x00000000},
+{'l', 0x41ba3e4e, 0x41c8eac6},
+{'l', 0x00000000, 0x4094fea8},
+{'@', 0x000000bc, 0x00006c5c},/*        ¼        x-advance: 108.359375 */
+{'M', 0x41d9d92c, 0x00000000},
+{'l', 0xc10ad602, 0x00000000},
+{'4', 0xfd0c0220, 0x00000043},
+{'6', 0x02f4fde2, 0xfea50009},
+{'l', 0x411e0654, 0x3f7cd700},
+{'l', 0x00000000, 0x40974090},
+{'l', 0xc200f59e, 0x00000000},
+{'l', 0xb5800000, 0xc0974090},
+{'l', 0x411ce55d, 0xbf7cd700},
+{'l', 0x00000000, 0xc222d267},
+{'l', 0xc11ce55d, 0x404fb0a0},
+{'l', 0x00000000, 0xc094feb0},
+{'4', 0xffb50080, 0x00000032},
+{'6', 0x019c0000, 0x01030204},
+{'l', 0x00000000, 0x4133788f},
+{'l', 0xc13da130, 0x34700000},
+{'l', 0x00000000, 0xc133788d},
+{'l', 0xc1b88cdc, 0x00000000},
+{'l', 0x00000000, 0xc0dd3c0c},
+{'l', 0x41cbbd2c, 0xc21bc467},
+{'l', 0x41174090, 0x00000000},
+{'l', 0x00000000, 0x4214b668},
+{'4', 0x0000002d, 0x00450000},
+{'6', 0x0000ffd3, 0xfeffffa2},
+{'l', 0xbe58b800, 0xb6800000},
+{'l', 0xc172ae48, 0x41bbefc0},
+{'l', 0x41761128, 0x00000000},
+{'l', 0x00000000, 0xc1bbefc0},
+{'@', 0x000000bd, 0x00006c5c},/*        ½        x-advance: 108.359375 */
+{'M', 0x41db8a9d, 0x00000000},
+{'l', 0xc10ad604, 0x00000000},
+{'4', 0xfd0c0220, 0x00000043},
+{'6', 0x02f4fde2, 0xfea50003},
+{'l', 0x411e0654, 0x3f7cd700},
+{'l', 0x00000000, 0x40974090},
+{'l', 0xc200f59e, 0x00000000},
+{'l', 0x00000000, 0xc0974090},
+{'l', 0x411ce55d, 0xbf7cd700},
+{'l', 0x00000000, 0xc222d267},
+{'l', 0xc11ce55d, 0x404fb0a0},
+{'l', 0x00000000, 0xc094feb0},
+{'4', 0xffb50080, 0x00000032},
+{'6', 0x019c0000, 0x015a0256},
+{'4', 0x0000fee1, 0xffc10000},
+{'8', 0xb14cd22b, 0xc237e021},
+{'8', 0xc421e316, 0xb40be10b},
+{'8', 0xc8f0db00, 0xedd2edf0},
+{'9', 0x0000ffe3, 0x0011ffce},
+{'4', 0x0041fff2, 0x0000ffde},
+{'l', 0x00000000, 0xc159d92c},
+{'q', 0x40ff18d0, 0xbfeac7a0},
+{0, 0x4159d928, 0xbfeac7a0},
+{'q', 0x41161fa0, 0x00000000},
+{0, 0x416522c8, 0x40785310},
+{'8', 0x57281f28, 0x44f42600},
+{'8', 0x3cd81ef4, 0x4ea91de5},
+{'l', 0xc0f85310, 0x40d6764a},
+{'l', 0x41d3a3e4, 0x00000000},
+{'l', 0x00000000, 0x411f2748},
+{'@', 0x000000be, 0x00006c5c},/*        ¾        x-advance: 108.359375 */
+{'M', 0x41d9d92c, 0x00000000},
+{'l', 0xc10ad602, 0x00000000},
+{'4', 0xfd0c0220, 0x00000043},
+{'6', 0x02f4fde2, 0xfe570085},
+{'q', 0x00000000, 0x40f61128},
+{0, 0xc0add3c0, 0x413fe31c},
+{'q', 0xc0add3c0, 0x4089b510},
+{0, 0xc1785312, 0x4089b510},
+{'9', 0x0000ffbd, 0xfff3ff83},
+{'4', 0xff8dfffd, 0x00000024},
+{'l', 0x40107ad0, 0x4114fea4},
+{'8', 0x0e370e19, 0xa3540054},
+{'8', 0xc4eed900, 0xe8c4ebef},
+{'4', 0xfffeffdc, 0xffd20000},
+{'l', 0x408bf6fc, 0xbe907b00},
+{'8', 0xec2cfe1e, 0xc50eee0e},
+{'8', 0xb5c2b500, 0x0fd200eb},
+{'4', 0x0043fff2, 0x0000ffde},
+{'l', 0x00000000, 0xc159d930},
+{'q', 0x40e643ba, 0xbfeac780},
+{0, 0x4159d92d, 0xbfeac780},
+{'q', 0x41986186, 0x00000000},
+{0, 0x41986186, 0x415f7df8},
+{'8', 0x48ea2a00, 0x25b91dea},
+{'8', 0x2356073a, 0x4e1b1b1b},
+{'m', 0x424a53fb, 0x42287732},
+{'l', 0x00000000, 0x4133788f},
+{'l', 0xc13da130, 0x34700000},
+{'l', 0x00000000, 0xc133788d},
+{'l', 0xc1b88cde, 0x00000000},
+{'l', 0x00000000, 0xc0dd3c0c},
+{'l', 0x41cbbd2e, 0xc21bc467},
+{'l', 0x41174090, 0x00000000},
+{'l', 0x00000000, 0x4214b668},
+{'4', 0x0000002d, 0x00450000},
+{'6', 0x0000ffd3, 0xfeffffa2},
+{'l', 0xbe58b800, 0xb6800000},
+{'l', 0xc172ae48, 0x41bbefc0},
+{'l', 0x41761128, 0x00000000},
+{'l', 0x00000000, 0xc1bbefc0},
+{'@', 0x000000bf, 0x0000483d},/*        ¿        x-advance: 72.238281 */
+{'M', 0x4216f853, 0xc218f201},
+{'4', 0x0000003a, 0x00b00020},
+{'l', 0xc0d67648, 0x3fe1bfe0},
+{'8', 0x33ae0fc6, 0x62e924e9},
+{'q', 0x00000000, 0x411aa371},
+{0, 0x4058b830, 0x41609eed},
+{'8', 0x225a221b, 0xe954002f},
+{'4', 0xff930018, 0x00000032},
+{'l', 0x00000000, 0x41a67d84},
+{'q', 0xc13b5f44, 0x40422508},
+{0, 0xc1b6db6e, 0x40422508},
+{'q', 0xc2001ce6, 0x00000000},
+{0, 0xc2001ce6, 0xc1c85a4d},
+{'q', 0x35800000, 0xc123ab1f},
+{0, 0x40add3c2, 0xc18a4588},
+{'9', 0xffc8002c, 0xffb1007c},
+{'4', 0xfff30031, 0xff8e000f},
+{'m', 0x404fb090, 0xc1ec7902},
+{'8', 0x1b420027, 0x421b1b1b},
+{'8', 0x42e52700, 0x1bbe1be6},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'@', 0x000000c0, 0x00006856},/*        À        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xff560062},
+{'l', 0xc1cd6e9f, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x413a3e4c, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22500, 0x00000000},
+{'@', 0x000000c1, 0x00006856},/*        Á        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xff56ffea},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff18, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000c2, 0x00006856},/*        Â        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xff56ff82},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x41761128, 0xc1a55c8c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x41a55c8c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d0, 0x00000000},
+{'l', 0xc18bf6fa, 0xc136db68},
+{'l', 0xc18bf6f8, 0x4136db68},
+{'l', 0xc0ab91d8, 0x00000000},
+{'@', 0x000000c3, 0x00006856},/*        Ã        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xff550078},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed0978, 0x00000000},
+{'q', 0x3f46a8e0, 0xc12dd3c0},
+{0, 0x40907ad0, 0xc1785310},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0980, 0x00000000},
+{'q', 0xbf46a900, 0x412b91d8},
+{0, 0xc0907ad0, 0x41773220},
+{'q', 0xc06ac7a0, 0x40974090},
+{0, 0xc12a70e4, 0x40974090},
+{'@', 0x000000c4, 0x00006856},/*        Ä        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xff4f0094},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000c5, 0x00006856},/*        Ã…        x-advance: 104.335938 */
+{'M', 0x41f18d52, 0xc0a4cc14},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1e643ba, 0x00000000},
+{'l', 0x34c00000, 0xc0a4cc14},
+{'l', 0x40e1bfe3, 0xbff3cf3c},
+{'l', 0x42069a6a, 0xc2b0a627},
+{'l', 0x41a3ab20, 0x00000000},
+{'l', 0x420609ee, 0x42b0a627},
+{'l', 0x40e643c0, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2287732, 0x00000000},
+{'l', 0x00000000, 0xc0a4cc14},
+{'l', 0x412ef4b8, 0xbff3cf3c},
+{'l', 0xc1107ad4, 0xc1c3d676},
+{'4', 0x0000fede, 0x00c3ffbb},
+{'6', 0x000f0061, 0xfda10078},
+{'4', 0x014eff84, 0x000000f6},
+{'6', 0xfeb2ff87, 0xffbc0033},
+{'8', 0xdeac00cf, 0xabdedede},
+{'8', 0xac22ce00, 0xde54de22},
+{'8', 0x22540031, 0x54222122},
+{'8', 0x55de3200, 0x22ac22de},
+{'m', 0x00000000, 0xc1b015ac},
+{'8', 0x10da00ea, 0x26f010f0},
+{'8', 0x26101600, 0x10261010},
+{'8', 0xf0260016, 0xda10f010},
+{'8', 0xdaf0ea00, 0xf0daf0f0},
+{'@', 0x000000c6, 0x0000907a},/*        Æ        x-advance: 144.476562 */
+{'M', 0x42695e5d, 0xc2b0a627},
+{'l', 0xc1216930, 0xbfa28a40},
+{'l', 0x00000000, 0xc0a04840},
+{'l', 0x42a5a4cc, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff6c},
+{'l', 0xc161bfe8, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x419fb7c4, 0x00000000},
+{'l', 0x400bf700, 0xc1270e00},
+{'l', 0x40c8eac0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac0, 0x00000000},
+{'l', 0xc00bf700, 0xc12b91d4},
+{'4', 0x0000ff61, 0x01230000},
+{'l', 0x418a4588, 0xb6000000},
+{'9', 0x0000006f, 0xfff7009c},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x40cd6ea0, 0x00000000},
+{'l', 0xbfab9200, 0x41d3136a},
+{'l', 0xc2a0b49a, 0x00000000},
+{'l', 0x36800000, 0xc0a4cc14},
+{'l', 0x41422504, 0xbff3cf3c},
+{'l', 0x00000000, 0xc1c3d676},
+{'l', 0xc2021693, 0x00000000},
+{'l', 0xc16764b0, 0x41c3d676},
+{'l', 0x412b91d6, 0x3ff3cf40},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc1f18d52, 0x00000000},
+{'4', 0xffd70000, 0xfff10044},
+{'6', 0xfd760185, 0x01880048},
+{'l', 0x00000000, 0xc23f9ade},
+{'l', 0xc1df7df8, 0x423f9ade},
+{'l', 0x41df7df8, 0x00000000},
+{'@', 0x000000c7, 0x00006856},/*        Ç        x-advance: 104.335938 */
+{'M', 0x4265fb7d, 0x3fb49983},
+{'q', 0xc1be31ac, 0x00000000},
+{0, 0xc2146e2b, 0xc14a0bbd},
+{'q', 0xc1555556, 0xc14a0bbd},
+{0, 0xc1555556, 0xc20bf6f9},
+{'q', 0xb5000000, 0xc1c22504},
+{0, 0x414b2cb2, 0xc2134d34},
+{'q', 0x414c4da8, 0xc14a0bc0},
+{0, 0x4216b016, 0xc14a0bc0},
+{'9', 0x00000083, 0x00250110},
+{'4', 0x00b50003, 0x0000ffce},
+{'l', 0xbffcd700, 0xc15afa20},
+{'q', 0xc114fea8, 0xc0cb2cb0},
+{0, 0xc1ad4346, 0xc0cb2cb0},
+{'q', 0xc182ef4c, 0x00000000},
+{0, 0xc1bf52a0, 0x4123ab18},
+{'q', 0xc0f18d54, 0x41228a30},
+{0, 0xc0f18d54, 0x41fcd6ec},
+{'q', 0x00000000, 0x419e96cd},
+{0, 0x40fcd6ec, 0x41f18d52},
+{'q', 0x40fcd6e8, 0x4125ed0a},
+{0, 0x41b7fc64, 0x4125ed0a},
+{'8', 0xf06f003f, 0xd84bf02f},
+{'4', 0xff840012, 0x00000033},
+{'l', 0xbed8b800, 0x41bfe31b},
+{'q', 0xc0cb2cb0, 0x401e0654},
+{0, 0xc1841044, 0x40877323},
+{'9', 0x000dffaf, 0x000dff69},
+{'m', 0xc0a94ff0, 0x41e2e0d9},
+{'9', 0x0000ffce, 0xffefffa6},
+{'l', 0x00000000, 0xc0cb2cb4},
+{'8', 0x0a4c0a28, 0xd0330033},
+{'8', 0xdbefe800, 0xf0c8f3ef},
+{'4', 0xff92001c, 0x0000003e},
+{'l', 0xbfcfb080, 0x40f85314},
+{'8', 0x5e680f68, 0x53d83500},
+{'q', 0xc0a28a30, 0x406f4b68},
+{0, 0xc1543464, 0x406f4b68},
+{'@', 0x000000c8, 0x0000605d},/*        È        x-advance: 96.363281 */
+{'M', 0x401e0652, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x42a120f5, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc16ac790, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x41c61862, 0x00000000},
+{'l', 0x400bf6f0, 0xc1270e00},
+{'l', 0x40c8eac8, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac8, 0x00000000},
+{'l', 0xc00bf6f0, 0xc12b91d4},
+{'4', 0x0000ff3a, 0x01230000},
+{'l', 0x418ec95e, 0xb6000000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad70, 0xc18bf6f8},
+{'l', 0x40cd6e90, 0x00000000},
+{'4', 0x00d3fff6, 0x0000fd57},
+{'6', 0xffd70000, 0xfcf601ac},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000c9, 0x0000605d},/*        É        x-advance: 96.363281 */
+{'M', 0x401e0652, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x42a120f5, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc16ac790, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x41c61862, 0x00000000},
+{'l', 0x400bf6f0, 0xc1270e00},
+{'l', 0x40c8eac8, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac8, 0x00000000},
+{'l', 0xc00bf6f0, 0xc12b91d4},
+{'4', 0x0000ff3a, 0x01230000},
+{'l', 0x418ec95e, 0xb6000000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad70, 0xc18bf6f8},
+{'l', 0x40cd6e90, 0x00000000},
+{'4', 0x00d3fff6, 0x0000fd57},
+{'6', 0xffd70000, 0xfcf6011b},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8b6, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff18, 0x41974090},
+{'l', 0xc0c22500, 0x00000000},
+{'@', 0x000000ca, 0x0000605d},/*        Ê        x-advance: 96.363281 */
+{'M', 0x401e0652, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x42a120f5, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc16ac790, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x41c61862, 0x00000000},
+{'l', 0x400bf6f0, 0xc1270e00},
+{'l', 0x40c8eac8, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac8, 0x00000000},
+{'l', 0xc00bf6f0, 0xc12b91d4},
+{'4', 0x0000ff3a, 0x01230000},
+{'l', 0x418ec95e, 0xb6000000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad70, 0xc18bf6f8},
+{'l', 0x40cd6e90, 0x00000000},
+{'4', 0x00d3fff6, 0x0000fd57},
+{'6', 0xffd70000, 0xfcf600b6},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc1a55c8c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f030, 0x41a55c8c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d0, 0x00000000},
+{'l', 0xc18bf6f8, 0xc136db68},
+{'l', 0xc18bf6f9, 0x4136db68},
+{'l', 0xc0ab91d8, 0x00000000},
+{'@', 0x000000cb, 0x0000605d},/*        Ë        x-advance: 96.363281 */
+{'M', 0x401e0652, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x35800000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x42a120f5, 0x00000000},
+{'4', 0x00c00000, 0x0000ffcd},
+{'l', 0xc0107ae0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc16ac790, 0x00000000},
+{'l', 0x00000000, 0x420ad602},
+{'l', 0x41c61862, 0x00000000},
+{'l', 0x400bf6f0, 0xc1270e00},
+{'l', 0x40c8eac8, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0c8eac8, 0x00000000},
+{'l', 0xc00bf6f0, 0xc12b91d4},
+{'4', 0x0000ff3a, 0x01230000},
+{'l', 0x418ec95e, 0xb6000000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad70, 0xc18bf6f8},
+{'l', 0x40cd6e90, 0x00000000},
+{'4', 0x00d3fff6, 0x0000fd57},
+{'6', 0xffd70000, 0xfcef01cd},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda12e, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000cc, 0x00003839},/*        Ì        x-advance: 56.222656 */
+{'M', 0x421ce55d, 0xc0e1bfe3},
+{'l', 0x41422504, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f611, 0x00000000},
+{'l', 0xb5000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f611, 0x00000000},
+{'4', 0x00290000, 0x000fff9f},
+{'6', 0x02830000, 0xfd05ffe3},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x35800000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000cd, 0x00003839},/*        Í        x-advance: 56.222656 */
+{'M', 0x421ce55d, 0xc0e1bfe3},
+{'l', 0x41422504, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f611, 0x00000000},
+{'l', 0xb5000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f611, 0x00000000},
+{'4', 0x00290000, 0x000fff9f},
+{'6', 0x02830000, 0xfd05ff4d},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f46, 0xc199827c},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff1a, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000ce, 0x00003839},/*        ÃŽ        x-advance: 56.222656 */
+{'M', 0x421ce55d, 0xc0e1bfe3},
+{'l', 0x41422504, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f611, 0x00000000},
+{'l', 0xb5000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f611, 0x00000000},
+{'4', 0x00290000, 0x000fff9f},
+{'6', 0x02830000, 0xfd05feef},
+{'l', 0xb5800000, 0xc014fea0},
+{'l', 0x41761129, 0xc1a55c8c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x41a55c8c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d8, 0x00000000},
+{'l', 0xc18bf6f9, 0xc136db68},
+{'l', 0xc18bf6f8, 0x4136db68},
+{'l', 0xc0ab91d6, 0x00000000},
+{'@', 0x000000cf, 0x00003839},/*        Ï        x-advance: 56.222656 */
+{'M', 0x421ce55d, 0xc0e1bfe3},
+{'l', 0x41422504, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f611, 0x00000000},
+{'l', 0xb5000000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f611, 0x00000000},
+{'4', 0x00290000, 0x000fff9f},
+{'6', 0x02830000, 0xfcff0005},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda12f, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000d0, 0x00006856},/*        Ð        x-advance: 104.335938 */
+{'M', 0x42441eb4, 0xc2bd34d4},
+{'q', 0x41cbbd2c, 0x00000000},
+{0, 0x421667d8, 0x41391d60},
+{'q', 0x41434600, 0x4137fc60},
+{0, 0x41434600, 0x420ccfb0},
+{'q', 0x00000000, 0x41c2b581},
+{0, 0xc13a3e50, 0x42110b4a},
+{'9', 0x005effa3, 0x005efee7},
+{'l', 0xc2396597, 0xbe907ac0},
+{'l', 0x35c00000, 0xc0a4cc14},
+{'l', 0x41294fea, 0xbff3cf3c},
+{'l', 0x00000000, 0xc20fa217},
+{'l', 0xc14a0bbe, 0x00000000},
+{'l', 0x35000000, 0xc109b510},
+{'l', 0x414a0bbe, 0x00000000},
+{'l', 0x00000000, 0xc2103291},
+{'4', 0xfff2ff9f, 0xffd70000},
+{'6', 0x00000167, 0x017a00d3},
+{'q', 0x00000000, 0xc1a3ab1e},
+{0, 0xc0ef4b70, 0xc1efdbe2},
+{'9', 0xffb4ffc5, 0xffb4ff3e},
+{'l', 0xc0a70e00, 0x00000000},
+{'l', 0x00000000, 0x420d17ed},
+{'l', 0x41907ace, 0x00000000},
+{'4', 0x00440000, 0x0000ff70},
+{'l', 0x00000000, 0x420baebb},
+{'q', 0x40d8b838, 0x3f107ac8},
+{0, 0x414466f0, 0x3f107ac8},
+{'q', 0x4112bcbc, 0x00000000},
+{0, 0x416764b0, 0xc07cd6ea},
+{'q', 0x40ab91d0, 0xc07cd6ec},
+{0, 0x40fa9500, 0xc14587e6},
+{'q', 0x401e0660, 0xc1077324},
+{0, 0x401e0660, 0xc1bbefc0},
+{'@', 0x000000d1, 0x00006856},/*        Ñ        x-advance: 104.335938 */
+{'M', 0x42a2f685, 0xc2af3cf4},
+{'l', 0xc14b2cb0, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x42069a6a, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc1422508, 0x3feac780},
+{'l', 0x00000000, 0x42af3cf4},
+{'l', 0xc1041040, 0x00000000},
+{'l', 0xc2695e5e, 0xc2981949},
+{'l', 0x00000000, 0x4289fd4b},
+{'l', 0x414b2cb4, 0x3ff3cf30},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc2069a6a, 0x00000000},
+{'l', 0xb5800000, 0xc0a4cc14},
+{'l', 0x41422506, 0xbff3cf3c},
+{'l', 0x00000000, 0xc2a120f6},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'4', 0x00000103, 0x01e30172},
+{'6', 0xfe550000, 0xff89ff62},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed0978, 0x00000000},
+{'q', 0x3f46a8e0, 0xc12dd3c0},
+{0, 0x40907ad0, 0xc1785310},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0980, 0x00000000},
+{'q', 0xbf46a900, 0x412b91d8},
+{0, 0xc0907ad0, 0x41773220},
+{'q', 0xc06ac7a0, 0x40974090},
+{0, 0xc12a70e4, 0x40974090},
+{'@', 0x000000d2, 0x00007061},/*        Ã’        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x41eebaed, 0xc25c1b18},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000d3, 0x00007061},/*        Ó        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x41946e2b, 0xc25c1b18},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8ba, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff1a, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000d4, 0x00007061},/*        Ô        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x40391d58, 0xc25c1b18},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x41761128, 0xc1a55c8c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x41a55c8c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d0, 0x00000000},
+{'l', 0xc18bf6fa, 0xc136db68},
+{'l', 0xc18bf6f8, 0x4136db68},
+{'l', 0xc0ab91d8, 0x00000000},
+{'@', 0x000000d5, 0x00007061},/*        Õ        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x42092494, 0xc25cab92},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed0978, 0x00000000},
+{'q', 0x3f46a8c0, 0xc12dd3c0},
+{0, 0x40907ad0, 0xc1785310},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0980, 0x00000000},
+{'q', 0xbf46a900, 0x412b91d8},
+{0, 0xc0907ad0, 0x41773220},
+{'q', 0xc06ac7a0, 0x40974090},
+{0, 0xc12a70e0, 0x40974090},
+{'@', 0x000000d6, 0x00007061},/*        Ö        x-advance: 112.378906 */
+{'M', 0x40e1bfe3, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4244af2f, 0xc2410410},
+{'q', 0x41c22506, 0x00000000},
+{0, 0x4212bcbb, 0x414466f0},
+{'q', 0x4146a8d8, 0x41434600},
+{0, 0x4146a8d8, 0x420fea54},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'q', 0xc1bf52a0, 0x34c00000},
+{0, 0xc2122c3f, 0xc14587e7},
+{'9', 0xff9eff9b, 0xfeddff9b},
+{'m', 0x41bb5f44, 0x00000000},
+{'q', 0x00000000, 0x41b40909},
+{0, 0x40c466f4, 0x4200ad61},
+{'q', 0x40c6a8d8, 0x4119827a},
+{0, 0x419ce55c, 0x4119827a},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'q', 0x00000000, 0xc1b2e810},
+{0, 0xc0c6a8e0, 0xc1fdf7e0},
+{'q', 0xc0c466f0, 0xc1161f98},
+{0, 0xc19bc466, 0xc1161f98},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x4218194a, 0xc25f7df8},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000d7, 0x00005253},/*        ×        x-advance: 82.324219 */
+{'M', 0x42231aa4, 0xc2231aa4},
+{'l', 0xc1b76be9, 0x41b6db6f},
+{'l', 0xc0e401d0, 0xc0e643bc},
+{'l', 0x41b6db6d, 0xc1b7fc64},
+{'l', 0xc1b6db6d, 0xc1b5ba78},
+{'l', 0x40eac790, 0xc0eac790},
+{'l', 0x41b5ba79, 0x41b6db6e},
+{'l', 0x41b7fc62, 0xc1b6db6e},
+{'l', 0x40e401d8, 0x40e643c0},
+{'l', 0xc1b6db70, 0x41b6db6c},
+{'l', 0x41b6db70, 0x41b7fc64},
+{'l', 0xc0e401d8, 0x40e643bc},
+{'l', 0xc1b7fc62, 0xc1b6db6f},
+{'@', 0x000000d8, 0x00007061},/*        Ø        x-advance: 112.378906 */
+{'M', 0x41a43b99, 0xc1228a29},
+{'q', 0xc1579740, 0xc14587e7},
+{0, 0xc1579740, 0xc214fea6},
+{'q', 0xb5000000, 0xc2410410},
+{0, 0x4244af2e, 0xc2410410},
+{'9', 0x0000008e, 0x003500ea},
+{'4', 0xffb7003c, 0x00000051},
+{'l', 0xc136db68, 0x415e5d08},
+{'q', 0x41555550, 0x414345f8},
+{0, 0x41555550, 0x42134d34},
+{'q', 0x00000000, 0x41c07396},
+{0, 0xc148eac8, 0x4211e402},
+{'q', 0xc148eac8, 0x414587e8},
+{0, 0xc2122c3f, 0x414587e8},
+{'9', 0x0000ff75, 0xffcbff17},
+{'4', 0x0049ffc4, 0x0000ffac},
+{'6', 0xff90005c, 0xfed7004f},
+{'9', 0x00700000, 0x00b40011},
+{'l', 0x422f3cf4, 0xc253ec22},
+{'q', 0xc0c22500, 0xc12a70e0},
+{0, 0xc1a1f9ae, 0xc12a70e0},
+{'q', 0xc156764c, 0x00000000},
+{0, 0xc19ce55c, 0x41161f98},
+{'9', 0x004bffcf, 0x00fdffcf},
+{'m', 0x424db6dc, 0x00000000},
+{'9', 0xff930000, 0xff51ffef},
+{'l', 0xc22eac78, 0x42543460},
+{'q', 0x40c22500, 0x412a70de},
+{0, 0x41a16932, 0x412a70de},
+{'q', 0x41555554, 0x35000000},
+{0, 0x419bc466, 0xc11aa371},
+{'q', 0x40c6a8e0, 0xc11aa371},
+{0, 0x40c6a8e0, 0xc2006523},
+{'@', 0x000000d9, 0x00006856},/*        Ù        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc109b50d},
+{'q', 0x41294fec, 0x00000000},
+{0, 0x4182ef4a, 0xc0bda130},
+{'9', 0xffd1002e, 0xff75002e},
+{'l', 0x00000000, 0xc25ea540},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad62, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x425c6355},
+{'q', 0x00000000, 0x4182ef4b},
+{0, 0xc1174090, 0x41c8eac7},
+{'q', 0xc1174090, 0x410bf6f9},
+{0, 0xc1d827bc, 0x410bf6f9},
+{'q', 0xc197d10c, 0xb4800000},
+{0, 0xc1e91620, 0xc10d17ee},
+{'9', 0xffb9ffb0, 0xff34ffb0},
+{'l', 0x00000000, 0xc25a2169},
+{'l', 0xc12b91d6, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x42345145, 0x00000000},
+{'4', 0x00290000, 0x000eff9f},
+{'l', 0x00000000, 0x425e14c5},
+{'q', 0x00000000, 0x4135ba78},
+{0, 0x40b6db70, 0x418b667e},
+{'9', 0x0030002e, 0x00300086},
+{'m', 0x3f46a8c0, 0xc2bba782},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e54, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22510, 0x00000000},
+{'@', 0x000000da, 0x00006856},/*        Ú        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc109b50d},
+{'q', 0x41294fec, 0x00000000},
+{0, 0x4182ef4a, 0xc0bda130},
+{'9', 0xffd1002e, 0xff75002e},
+{'l', 0x00000000, 0xc25ea540},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad62, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x425c6355},
+{'q', 0x00000000, 0x4182ef4b},
+{0, 0xc1174090, 0x41c8eac7},
+{'q', 0xc1174090, 0x410bf6f9},
+{0, 0xc1d827bc, 0x410bf6f9},
+{'q', 0xc197d10c, 0xb4800000},
+{0, 0xc1e91620, 0xc10d17ee},
+{'9', 0xffb9ffb0, 0xff34ffb0},
+{'l', 0x00000000, 0xc25a2169},
+{'l', 0xc12b91d6, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x42345145, 0x00000000},
+{'4', 0x00290000, 0x000eff9f},
+{'l', 0x00000000, 0x425e14c5},
+{'q', 0x00000000, 0x4135ba78},
+{0, 0x40b6db70, 0x418b667e},
+{'9', 0x0030002e, 0x00300086},
+{'m', 0xc114fea8, 0xc2bba782},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f48, 0xc199827c},
+{'l', 0x41a0d8b6, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff18, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000db, 0x00006856},/*        Û        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc109b50d},
+{'q', 0x41294fec, 0x00000000},
+{0, 0x4182ef4a, 0xc0bda130},
+{'9', 0xffd1002e, 0xff75002e},
+{'l', 0x00000000, 0xc25ea540},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad62, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x425c6355},
+{'q', 0x00000000, 0x4182ef4b},
+{0, 0xc1174090, 0x41c8eac7},
+{'q', 0xc1174090, 0x410bf6f9},
+{0, 0xc1d827bc, 0x410bf6f9},
+{'q', 0xc197d10c, 0xb4800000},
+{0, 0xc1e91620, 0xc10d17ee},
+{'9', 0xffb9ffb0, 0xff34ffb0},
+{'l', 0x00000000, 0xc25a2169},
+{'l', 0xc12b91d6, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x42345145, 0x00000000},
+{'4', 0x00290000, 0x000eff9f},
+{'l', 0x00000000, 0x425e14c5},
+{'q', 0x00000000, 0x4135ba78},
+{0, 0x40b6db70, 0x418b667e},
+{'9', 0x0030002e, 0x00300086},
+{'m', 0xc1cb2cb4, 0xc2bba782},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x41761128, 0xc1a55c8c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f038, 0x41a55c8c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91e0, 0x00000000},
+{'l', 0xc18bf6f8, 0xc136db68},
+{'l', 0xc18bf6f8, 0x4136db68},
+{'l', 0xc0ab91d8, 0x00000000},
+{'@', 0x000000dc, 0x00006856},/*        Ü        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc109b50d},
+{'q', 0x41294fec, 0x00000000},
+{0, 0x4182ef4a, 0xc0bda130},
+{'9', 0xffd1002e, 0xff75002e},
+{'l', 0x00000000, 0xc25ea540},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad62, 0x00000000},
+{'4', 0x00290000, 0x000effab},
+{'l', 0x00000000, 0x425c6355},
+{'q', 0x00000000, 0x4182ef4b},
+{0, 0xc1174090, 0x41c8eac7},
+{'q', 0xc1174090, 0x410bf6f9},
+{0, 0xc1d827bc, 0x410bf6f9},
+{'q', 0xc197d10c, 0xb4800000},
+{0, 0xc1e91620, 0xc10d17ee},
+{'9', 0xffb9ffb0, 0xff34ffb0},
+{'l', 0x00000000, 0xc25a2169},
+{'l', 0xc12b91d6, 0xbfeac780},
+{'l', 0x35000000, 0xc0a4cc20},
+{'l', 0x42345145, 0x00000000},
+{'4', 0x00290000, 0x000eff9f},
+{'l', 0x00000000, 0x425e14c5},
+{'q', 0x00000000, 0x4135ba78},
+{0, 0x40b6db70, 0x418b667e},
+{'9', 0x0030002e, 0x00300086},
+{'m', 0x410f59dc, 0xc2bd58f2},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda132, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000dd, 0x00006856},/*        Ý        x-advance: 104.335938 */
+{'M', 0x42808942, 0xc214fea5},
+{'l', 0x00000000, 0x41f18d51},
+{'l', 0x41706c58, 0x3ff3cf40},
+{'l', 0x00000000, 0x40a4cc14},
+{'l', 0xc25161fa, 0x00000000},
+{'l', 0x36000000, 0xc0a4cc14},
+{'l', 0x41706c5e, 0xbff3cf3c},
+{'l', 0x00000000, 0xc1ee2a71},
+{'l', 0xc1e643bb, 0xc24b2cb3},
+{'l', 0xc12a70e0, 0xbfeac780},
+{'l', 0x34800000, 0xc0a4cc20},
+{'l', 0x4242b581, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc14b2cb4, 0x3feac780},
+{'l', 0x41acb2ca, 0x421e96cd},
+{'l', 0x41a70e00, 0xc21e96cd},
+{'l', 0xc1391d58, 0xbfeac780},
+{'l', 0x00000000, 0xc0a4cc20},
+{'l', 0x4200ad60, 0x00000000},
+{'4', 0x00290000, 0x000effb0},
+{'6', 0x0192ff26, 0xfdf7ff69},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff18, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000de, 0x00005841},/*        Þ        x-advance: 88.253906 */
+{'M', 0x42158f20, 0xc0e1bfe3},
+{'l', 0x41422508, 0x3feac790},
+{'l', 0x00000000, 0x40a70dff},
+{'l', 0xc239f612, 0x00000000},
+{'l', 0x35c00000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x00000000, 0xc2a0fcd7},
+{'l', 0xc1422506, 0xbff3cf40},
+{'l', 0xb5000000, 0xc0a4cc20},
+{'l', 0x4239f612, 0x00000000},
+{'0', 0x0f9f2900, 0x001f5900},
+{'q', 0x41a0d8b8, 0x00000000},
+{0, 0x41f06c5e, 0x40d8b830},
+{'q', 0x411f2748, 0x40d67648},
+{0, 0x411f2748, 0x41a8bf70},
+{'9', 0x00ed0000, 0x00edfeec},
+{'4', 0x0000ffb5, 0x005e0000},
+{'m', 0x41a9e066, 0xc2255c8e},
+{'q', 0x00000000, 0xc1349988},
+{0, 0xc0877320, 0xc17bb5f8},
+{'9', 0xffdcffdf, 0xffdcff8b},
+{'4', 0x0000ffee, 0x014f0000},
+{'l', 0x40228a30, 0x00000000},
+{'q', 0x411ce55c, 0x00000000},
+{0, 0x416401cc, 0xc09e0650},
+{'q', 0x408e38e8, 0xc09e0650},
+{0, 0x408e38e8, 0xc186522c},
+{'@', 0x000000df, 0x0000505a},/*        ß        x-advance: 80.351562 */
+{'M', 0x421788ce, 0xc25d844a},
+{'8', 0xa719ce00, 0xc745d919},
+{'q', 0xbed8b800, 0xc1282ef8},
+{0, 0xc0391d50, 0xc17a9500},
+{'8', 0xd7c1d7ed, 0x2dc400d5},
+{'9', 0x002dfff0, 0x00adfff0},
+{'l', 0x00000000, 0x4286522c},
+{'l', 0xc1d161fa, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002e},
+{'l', 0x00000000, 0xc2733ec2},
+{'q', 0x00000000, 0xc18da86c},
+{0, 0x40f18d54, 0xc1d0d180},
+{'q', 0x40f18d50, 0xc1077320},
+{0, 0x41b7fc64, 0xc1077320},
+{'q', 0x41efdbe0, 0x00000000},
+{0, 0x41f6a1a4, 0x4200f59c},
+{'8', 0x14a800c6, 0x3ce314e3},
+{'8', 0x3d0f1f00, 0x46381d0f},
+{'8', 0x49423231, 0x33181710},
+{'q', 0x3f877340, 0x4061bfe0},
+{0, 0x3f877340, 0x40f3cf3c},
+{'q', 0x00000000, 0x411bc467},
+{0, 0xc0d1f270, 0x41761128},
+{'q', 0xc0d1f278, 0x40b25799},
+{0, 0xc18fea56, 0x40b25799},
+{'8', 0xf9b000da, 0xf1c7f9d7},
+{'4', 0xff750000, 0x00000025},
+{'l', 0x402b91e0, 0x4120483f},
+{'9', 0x001e0018, 0x001e003e},
+{'l', 0x3f349980, 0x00000000},
+{'8', 0xe82dff1b, 0xc812e912},
+{'8', 0xc3efe000, 0xbbc5e3ef},
+{'8', 0xc8d1e9e9, 0xbfdfdfe9},
+{'q', 0xbf998280, 0xc080ad60},
+{0, 0xbf998280, 0xc1089418},
+{'@', 0x000000e0, 0x0000483d},/*        à        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfe940006},
+{'l', 0xc1cd6e9d, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x413a3e4c, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000e1, 0x0000483d},/*        á        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfe94ff75},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff19, 0x41974090},
+{'l', 0xc0c22504, 0x00000000},
+{'@', 0x000000e2, 0x0000483d},/*        â        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfe94ff11},
+{'l', 0x35800000, 0xc014fea0},
+{'l', 0x41761129, 0xc1a55c90},
+{'l', 0x41706c5a, 0x00000000},
+{'l', 0x4174f034, 0x41a55c90},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d8, 0x00000000},
+{'l', 0xc18bf6f8, 0xc136db70},
+{'l', 0xc18bf6f8, 0x4136db70},
+{'l', 0xc0ab91d6, 0x00000000},
+{'@', 0x000000e3, 0x0000483d},/*        ã        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfe92000b},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed097a, 0x00000000},
+{'q', 0x3f46a8e0, 0xc12dd3c8},
+{0, 0x40907ace, 0xc1785318},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0978, 0x00000000},
+{'q', 0xbf46a8c0, 0x412b91d8},
+{0, 0xc0907ad0, 0x41773220},
+{'q', 0xc06ac790, 0x40974090},
+{0, 0xc12a70e0, 0x40974090},
+{'@', 0x000000e4, 0x0000483d},/*        ä        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfe8d0028},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000e5, 0x0000483d},/*        å        x-advance: 72.238281 */
+{'M', 0x421a12f7, 0xc2879741},
+{'9', 0x000000c7, 0x009200c7},
+{'l', 0x00000000, 0x422c6a8e},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff3d},
+{'l', 0xbfc6a8e0, 0xc0a28a29},
+{'8', 0x29b11dd4, 0x0ab90add},
+{'q', 0xc1a43b9a, 0x00000000},
+{0, 0xc1a43b9a, 0xc19e0652},
+{'8', 0xa118c500, 0xcb45dc18},
+{'9', 0xffef002d, 0xffed008f},
+{'4', 0xffff0044, 0xffb30000},
+{'8', 0xa1b2a100, 0x1d9600d1},
+{'4', 0x0042ffeb, 0x0000ffdb},
+{'l', 0x00000000, 0xc1801ce4},
+{'q', 0x412a70e1, 0xbfcfb080},
+{0, 0x417a94ff, 0xc002ef60},
+{'9', 0xfffd0028, 0xfffd0051},
+{'m', 0x40907ad0, 0x4209fd4b},
+{'l', 0xc0bda130, 0x3e58b800},
+{'8', 0x1cb402ca, 0x55ec1aec},
+{'8', 0x46102f00, 0x162c1610},
+{'9', 0x00000026, 0xffed0053},
+{'6', 0xff430000, 0xfeb5ffcd},
+{'8', 0xdeac00cf, 0xabdedede},
+{'8', 0xac22ce00, 0xde54de22},
+{'8', 0x22540031, 0x54222122},
+{'8', 0x55de3200, 0x22ac22de},
+{'m', 0x00000000, 0xc1b015ac},
+{'8', 0x10da00ea, 0x26f010f0},
+{'8', 0x26101600, 0x10261010},
+{'8', 0xf0260016, 0xda10f010},
+{'8', 0xdaf0ea00, 0xf0daf0f0},
+{'@', 0x000000e6, 0x00006856},/*        æ        x-advance: 104.335938 */
+{'M', 0x428b667e, 0xc28827bc},
+{'q', 0x416764b0, 0x00000000},
+{0, 0x41ae643c, 0x40f18d58},
+{'9', 0x003b003a, 0x00b1003a},
+{'4', 0x002e0000, 0x0000fed9},
+{'l', 0x00000000, 0x406f4b68},
+{'8', 0x63104101, 0x3530220f},
+{'8', 0x12571220, 0xfb3c0019},
+{'9', 0xfffb0023, 0xfff5003a},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb613e3, 0x0ba70bd3},
+{'q', 0xc1198278, 0x00000000},
+{0, 0xc17a94fc, 0xc00bf6f8},
+{'q', 0xc0bfe320, 0xc0107ad0},
+{0, 0xc11bc468, 0xc0d1f276},
+{'q', 0xc1325798, 0x410d17ee},
+{0, 0xc1c85a4d, 0x410d17ee},
+{'q', 0xc1228a29, 0x34c00000},
+{0, 0xc174f033, 0xc099827b},
+{'q', 0xc0a28a29, 0xc09bc467},
+{0, 0xc0a28a29, 0xc16f4b66},
+{'8', 0xb80dd600, 0xce27e20d},
+{'q', 0x40543460, 0xc0228a30},
+{0, 0x410bf6f9, 0xc0785310},
+{'9', 0xfff5002b, 0xfff2007b},
+{'4', 0xffff0037, 0xffb40000},
+{'8', 0xb7edce00, 0xe9c5e9ed},
+{'9', 0x0000ffcd, 0x001cff9b},
+{'4', 0x0042ffea, 0x0000ffdc},
+{'l', 0x00000000, 0xc17f18d0},
+{'q', 0x414587e7, 0xc0228a40},
+{0, 0x41bd10b6, 0xc0228a40},
+{'q', 0x41325798, 0x00000000},
+{0, 0x4182ef4c, 0x409e0658},
+{'9', 0xffd70034, 0xffd70088},
+{'m', 0xc2134d36, 0x4273cf3e},
+{'8', 0xf63a001f, 0xe733f61a},
+{'8', 0xc7e8eef2, 0xaaf7d8f7},
+{'4', 0xffe30000, 0x0001ffd7},
+{'8', 0x0dc502d8, 0x23e40bed},
+{'8', 0x41f718f7, 0x46122f00},
+{'9', 0x00160012, 0x0016002d},
+{'m', 0x4217d10c, 0xc256be89},
+{'q', 0xc0907ad0, 0x00000000},
+{0, 0xc0d67650, 0x4094fea8},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x4180ad60, 0x00000000},
+{'q', 0x00000000, 0xc13c803c},
+{0, 0xbfd8b840, 0xc1825ed2},
+{'q', 0xbfcfb080, 0xc0907ad0},
+{0, 0xc0b25790, 0xc0907ad0},
+{'@', 0x000000e7, 0x00004020},/*        ç        x-advance: 64.125000 */
+{'M', 0x42721dcd, 0xc080ad60},
+{'8', 0x1fba14e7, 0x0ba50bd4},
+{'q', 0xc18da868, 0x00000000},
+{0, 0xc1d4345f, 0xc1089418},
+{'q', 0xc10bf6f9, 0xc1089418},
+{0, 0xc10bf6f9, 0xc1d0d180},
+{'q', 0x00000000, 0xc12ef4b4},
+{0, 0x407cd6ec, 0xc1958f20},
+{'q', 0x4080ad60, 0xc0fa9500},
+{0, 0x4136db6e, 0xc13ec224},
+{'q', 0x40ed097c, 0xc0853140},
+{0, 0x4189b50d, 0xc0853140},
+{'9', 0x0000004f, 0x001300ac},
+{'4', 0x009c0000, 0x0000ffd8},
+{'l', 0xc03da130, 0xc13a3e4c},
+{'8', 0xeddbf2ed, 0xfbcffbee},
+{'8', 0x1ac400df, 0x4bd61ae5},
+{'q', 0xbfeac790, 0x40bfe320},
+{0, 0xbfeac790, 0x416643bc},
+{'q', 0x00000000, 0x4162e0d8},
+{0, 0x408bf6f8, 0x41a1f9ae},
+{'q', 0x408e38e0, 0x40c22504},
+{0, 0x41609eec, 0x40c22504},
+{'9', 0x0000004d, 0xfff00085},
+{'6', 0x002b0000, 0x010eff15},
+{'9', 0x0000ffce, 0xffefffa6},
+{'l', 0x00000000, 0xc0cb2cb4},
+{'8', 0x0a4c0a28, 0xd0330033},
+{'8', 0xdbefe800, 0xf0c8f3ef},
+{'4', 0xff92001c, 0x0000003e},
+{'l', 0xbfcfb0a0, 0x40f85314},
+{'8', 0x5e680f68, 0x53d83500},
+{'q', 0xc0a28a28, 0x406f4b68},
+{0, 0xc1543460, 0x406f4b68},
+{'@', 0x000000e8, 0x00004020},/*        è        x-advance: 64.125000 */
+{'M', 0x420b667e, 0xc287df7e},
+{'q', 0x41579740, 0x00000000},
+{0, 0x419bc466, 0x40e643b8},
+{'9', 0x00390030, 0x00b20030},
+{'4', 0x002e0000, 0x0000feea},
+{'l', 0x00000000, 0x3f907ad0},
+{'q', 0x00000000, 0x41282ef6},
+{0, 0x3fd8b830, 0x416f4b68},
+{'8', 0x362c230d, 0x1253121e},
+{'9', 0x00000031, 0xfff0007d},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb012e1, 0x0ba10bcf},
+{'q', 0xc1825ed1, 0x00000000},
+{0, 0xc1c10410, 0xc1077322},
+{'q', 0xc0f85316, 0xc1089418},
+{0, 0xc0f85316, 0xc1d3136a},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40ed097c, 0xc1cf200e},
+{'9', 0xffbc003b, 0xffbc00b4},
+{'m', 0xbf46a900, 0x40e401c8},
+{'q', 0xc0877320, 0x00000000},
+{0, 0xc0cb2cb0, 0x4092bcc0},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x41761128, 0x00000000},
+{'8', 0x96fbb500, 0xd3efe1fb},
+{'9', 0xfff2fff5, 0xfff2ffdf},
+{'m', 0x40c6a8e0, 0xc1907ace},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0xb5800000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000e9, 0x00004020},/*        é        x-advance: 64.125000 */
+{'M', 0x420b667e, 0xc287df7e},
+{'q', 0x41579740, 0x00000000},
+{0, 0x419bc466, 0x40e643b8},
+{'9', 0x00390030, 0x00b20030},
+{'4', 0x002e0000, 0x0000feea},
+{'l', 0x00000000, 0x3f907ad0},
+{'q', 0x00000000, 0x41282ef6},
+{0, 0x3fd8b830, 0x416f4b68},
+{'8', 0x362c230d, 0x1253121e},
+{'9', 0x00000031, 0xfff0007d},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb012e1, 0x0ba10bcf},
+{'q', 0xc1825ed1, 0x00000000},
+{0, 0xc1c10410, 0xc1077322},
+{'q', 0xc0f85316, 0xc1089418},
+{0, 0xc0f85316, 0xc1d3136a},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40ed097c, 0xc1cf200e},
+{'9', 0xffbc003b, 0xffbc00b4},
+{'m', 0xbf46a900, 0x40e401c8},
+{'q', 0xc0877320, 0x00000000},
+{0, 0xc0cb2cb0, 0x4092bcc0},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x41761128, 0x00000000},
+{'8', 0x96fbb500, 0xd3efe1fb},
+{'9', 0xfff2fff5, 0xfff2ffdf},
+{'m', 0xc10d17ee, 0xc1907ace},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f46, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff19, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000ea, 0x00004020},/*        ê        x-advance: 64.125000 */
+{'M', 0x420b667e, 0xc287df7e},
+{'q', 0x41579740, 0x00000000},
+{0, 0x419bc466, 0x40e643b8},
+{'9', 0x00390030, 0x00b20030},
+{'4', 0x002e0000, 0x0000feea},
+{'l', 0x00000000, 0x3f907ad0},
+{'q', 0x00000000, 0x41282ef6},
+{0, 0x3fd8b830, 0x416f4b68},
+{'8', 0x362c230d, 0x1253121e},
+{'9', 0x00000031, 0xfff0007d},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb012e1, 0x0ba10bcf},
+{'q', 0xc1825ed1, 0x00000000},
+{0, 0xc1c10410, 0xc1077322},
+{'q', 0xc0f85316, 0xc1089418},
+{0, 0xc0f85316, 0xc1d3136a},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40ed097c, 0xc1cf200e},
+{'9', 0xffbc003b, 0xffbc00b4},
+{'m', 0xbf46a900, 0x40e401c8},
+{'q', 0xc0877320, 0x00000000},
+{0, 0xc0cb2cb0, 0x4092bcc0},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x41761128, 0x00000000},
+{'8', 0x96fbb500, 0xd3efe1fb},
+{'9', 0xfff2fff5, 0xfff2ffdf},
+{'m', 0xc1b9add4, 0xc1907ace},
+{'l', 0x35800000, 0xc014fea0},
+{'l', 0x41761129, 0xc1a55c90},
+{'l', 0x41706c5e, 0x00000000},
+{'l', 0x4174f030, 0x41a55c90},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d0, 0x00000000},
+{'l', 0xc18bf6fa, 0xc136db70},
+{'l', 0xc18bf6f8, 0x4136db70},
+{'l', 0xc0ab91d6, 0x00000000},
+{'@', 0x000000eb, 0x00004020},/*        ë        x-advance: 64.125000 */
+{'M', 0x420b667e, 0xc287df7e},
+{'q', 0x41579740, 0x00000000},
+{0, 0x419bc466, 0x40e643b8},
+{'9', 0x00390030, 0x00b20030},
+{'4', 0x002e0000, 0x0000feea},
+{'l', 0x00000000, 0x3f907ad0},
+{'q', 0x00000000, 0x41282ef6},
+{0, 0x3fd8b830, 0x416f4b68},
+{'8', 0x362c230d, 0x1253121e},
+{'9', 0x00000031, 0xfff0007d},
+{'l', 0x00000000, 0x40add3c2},
+{'8', 0x1fb012e1, 0x0ba10bcf},
+{'q', 0xc1825ed1, 0x00000000},
+{0, 0xc1c10410, 0xc1077322},
+{'q', 0xc0f85316, 0xc1089418},
+{0, 0xc0f85316, 0xc1d3136a},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40ed097c, 0xc1cf200e},
+{'9', 0xffbc003b, 0xffbc00b4},
+{'m', 0xbf46a900, 0x40e401c8},
+{'q', 0xc0877320, 0x00000000},
+{0, 0xc0cb2cb0, 0x4092bcc0},
+{'9', 0x0024fff0, 0x0081fff0},
+{'l', 0x41761128, 0x00000000},
+{'8', 0x96fbb500, 0xd3efe1fb},
+{'9', 0xfff2fff5, 0xfff2ffdf},
+{'m', 0x41337890, 0xc197408e},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda131, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000ec, 0x00002824},/*        ì        x-advance: 40.140625 */
+{'M', 0x41f61129, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0d8b837, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d9},
+{'6', 0x01df0000, 0xfdbcffd1},
+{'l', 0xc1cd6e9f, 0xc1974090},
+{'l', 0x35200000, 0xc0270e00},
+{'l', 0x41a0d8b9, 0x00000000},
+{'l', 0x413a3e4e, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22504, 0x00000000},
+{'@', 0x000000ed, 0x00002824},/*        í        x-advance: 40.140625 */
+{'M', 0x41f61129, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0d8b837, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d9},
+{'6', 0x01df0000, 0xfdbcff5b},
+{'l', 0x35800000, 0xc014fea0},
+{'l', 0x413b5f45, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff19, 0x41974090},
+{'l', 0xc0c22506, 0x00000000},
+{'@', 0x000000ee, 0x00002824},/*        î        x-advance: 40.140625 */
+{'M', 0x41f61129, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0d8b837, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d9},
+{'6', 0x01df0000, 0xfdbcfef6},
+{'l', 0xb4800000, 0xc014fea0},
+{'l', 0x41761128, 0xc1a55c90},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f032, 0x41a55c90},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d0, 0x00000000},
+{'l', 0xc18bf6f9, 0xc136db70},
+{'l', 0xc18bf6f9, 0x4136db70},
+{'l', 0xc0ab91d4, 0x00000000},
+{'@', 0x000000ef, 0x00002824},/*        ï        x-advance: 40.140625 */
+{'M', 0x41f61129, 0xc0cb2cb3},
+{'l', 0x40e885a4, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35400000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0d8b837, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d9},
+{'6', 0x01df0000, 0xfdb6000d},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000f0, 0x0000483d},/*        ð        x-advance: 72.238281 */
+{'M', 0x41813ddb, 0xc29d99f6},
+{'l', 0x414345fc, 0xc0e1bff0},
+{'9', 0xffdbffce, 0xffcaff99},
+{'l', 0x00000000, 0xc0f3cf40},
+{'9', 0x00160061, 0x004700b2},
+{'4', 0xffa300a0, 0x00450000},
+{'l', 0xc1579740, 0x40fa9500},
+{'9', 0x009100af, 0x01a400b3},
+{'l', 0x00000000, 0x401e0658},
+{'q', 0x00000000, 0x4202ef4c},
+{0, 0xc1f85312, 0x4202ef4c},
+{'q', 0xc16f4b68, 0xb5d00000},
+{0, 0xc1b49984, 0xc106522e},
+{'q', 0xc0f3cf3c, 0xc106522d},
+{0, 0xc0f3cf3c, 0xc1c2b581},
+{'q', 0x00000000, 0xc17bb5f6},
+{0, 0x40f3cf3e, 0xc1c07395},
+{'q', 0x40f3cf3e, 0xc1053138},
+{0, 0x41b91d5a, 0xc1053138},
+{'q', 0x4094fea0, 0x00000000},
+{0, 0x40e885a0, 0x3f107ac0},
+{'9', 0xffb3ffee, 0xff77ffb5},
+{'4', 0x0053ff71, 0xffb90000},
+{'m', 0x41ef4b67, 0x423da12f},
+{'q', 0x00000000, 0xc153136c},
+{0, 0xc01e0650, 0xc19a12f6},
+{'8', 0xd0c2d0ed, 0x2ec500d7},
+{'q', 0xc0107ad0, 0x40b91d58},
+{0, 0xc0107ad0, 0x419c54e2},
+{'q', 0x00000000, 0x4161bfe4},
+{0, 0x40107ad0, 0x419fb7c3},
+{'8', 0x2e3b2e12, 0xce3e002a},
+{'q', 0x401e0650, 0xc0cb2cb2},
+{0, 0x401e0650, 0xc19bc468},
+{'@', 0x000000f1, 0x0000505a},/*        ñ        x-advance: 80.351562 */
+{'M', 0x41f4f033, 0xc2721dcd},
+{'l', 0x4099827c, 0xc01e0650},
+{'q', 0x411e0654, 0xc0a28a30},
+{0, 0x418e38e4, 0xc0a28a30},
+{'9', 0x00000092, 0x009c0092},
+{'l', 0x00000000, 0x4228bf70},
+{'l', 0x40d43460, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffdb0000, 0xfff3002f},
+{'l', 0x00000000, 0xc21dbe15},
+{'8', 0xb7ecd100, 0xe6c7e6ed},
+{'9', 0x0000ffd6, 0x0013ffab},
+{'l', 0x00000000, 0x424660a0},
+{'l', 0x40c22504, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc203c804, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40cfb08a, 0xbfd8b838},
+{'l', 0x00000000, 0xc256764c},
+{'l', 0xc0cfb08a, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000cd},
+{'6', 0x002e0007, 0xff6c009a},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed097c, 0x00000000},
+{'q', 0x3f46a8e0, 0xc12dd3c8},
+{0, 0x40907ad0, 0xc1785318},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0978, 0x00000000},
+{'q', 0xbf46a880, 0x412b91d8},
+{0, 0xc0907ac8, 0x41773220},
+{'q', 0xc06ac790, 0x40974090},
+{0, 0xc12a70e0, 0x40974090},
+{'@', 0x000000f2, 0x0000483d},/*        ò        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'9', 0xffcf0012, 0xff520012},
+{'m', 0xc08bf6f8, 0xc235723b},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000f3, 0x0000483d},/*        ó        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'9', 0xffcf0012, 0xff520012},
+{'m', 0xc19ce55d, 0xc235723b},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f46, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff1a, 0x41974090},
+{'l', 0xc0c22504, 0x00000000},
+{'@', 0x000000f4, 0x0000483d},/*        ô        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'9', 0xffcf0012, 0xff520012},
+{'m', 0xc203c804, 0xc235723b},
+{'l', 0x35800000, 0xc014fea0},
+{'l', 0x41761129, 0xc1a55c90},
+{'l', 0x41706c5a, 0x00000000},
+{'l', 0x4174f034, 0x41a55c90},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d8, 0x00000000},
+{'l', 0xc18bf6f8, 0xc136db70},
+{'l', 0xc18bf6f8, 0x4136db70},
+{'l', 0xc0ab91d6, 0x00000000},
+{'@', 0x000000f5, 0x0000483d},/*        õ        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'9', 0xffcf0012, 0xff520012},
+{'m', 0xbfd8b840, 0xc2369331},
+{'8', 0xcf9100d1, 0xe7cee7e0},
+{'8', 0x0ce600ed, 0x33f40cf9},
+{'l', 0xc0ed097c, 0x00000000},
+{'q', 0x3f46a8d0, 0xc12dd3c8},
+{0, 0x40907ad0, 0xc1785318},
+{'8', 0xdb55db1e, 0x0a31001b},
+{'8', 0x263e0a16, 0x19321922},
+{'8', 0xfd10000a, 0xf40afd06},
+{'9', 0xfff80004, 0xffd1000b},
+{'l', 0x40ed0978, 0x00000000},
+{'q', 0xbf46a8c0, 0x412b91d8},
+{0, 0xc0907ad0, 0x41773220},
+{'q', 0xc06ac790, 0x40974090},
+{0, 0xc12a70e0, 0x40974090},
+{'@', 0x000000f6, 0x0000483d},/*        ö        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'q', 0xc173cf40, 0x34c00000},
+{0, 0xc1b5ba79, 0xc109b50d},
+{'q', 0xc0ef4b68, 0xc10ad603},
+{0, 0xc0ef4b68, 0xc1d282f0},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'q', 0x417bb5f4, 0x00000000},
+{0, 0x41b88cde, 0x410d17f0},
+{'9', 0x0045003b, 0x00cd003b},
+{'m', 0xc1a55c8e, 0x00000000},
+{'q', 0x00000000, 0xc1785314},
+{0, 0xc014fea0, 0xc1ab91d6},
+{'8', 0xd1c1d1ee, 0x2dc400d5},
+{'q', 0xc0077320, 0x40b6db70},
+{0, 0xc0077320, 0x41add3c2},
+{'q', 0x00000000, 0x41825ed1},
+{0, 0x40077320, 0x41b0a627},
+{'8', 0x2e3c2e11, 0xd03f002c},
+{'9', 0xffcf0012, 0xff520012},
+{'m', 0x3ff3cf40, 0xc238d51b},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000f7, 0x00004f4b},/*        ÷        x-advance: 79.292969 */
+{'M', 0x4292747d, 0xc253ec23},
+{'l', 0x00000000, 0x41216934},
+{'4', 0x0000fde7, 0xffb00000},
+{'6', 0x00000219, 0x0140fef3},
+{'8', 0xeacb00e1, 0xcbeaeaea},
+{'8', 0xcb16e100, 0xea35ea16},
+{'8', 0x1635001f, 0x35161616},
+{'8', 0x35ea1f00, 0x16cb16ea},
+{'m', 0x00000000, 0xc24cde23},
+{'8', 0xeacb00e1, 0xcbeaeaea},
+{'8', 0xcb16e100, 0xea35ea16},
+{'8', 0x1635001f, 0x35161616},
+{'8', 0x35ea1f00, 0x16cb16ea},
+{'@', 0x000000f8, 0x0000483d},/*        ø        x-advance: 72.238281 */
+{'M', 0x4158b836, 0xc0d43460},
+{'q', 0xc100ad60, 0xc109b50d},
+{0, 0xc100ad60, 0xc1d706c6},
+{'q', 0x00000000, 0xc18c8774},
+{0, 0x40f18d52, 0xc1d04104},
+{'q', 0x40f3cf3e, 0xc108941c},
+{0, 0x41b9add4, 0xc108941c},
+{'9', 0x00000051, 0x001d0086},
+{'4', 0xffc2002a, 0x00000045},
+{'l', 0xc1053134, 0x41434600},
+{'q', 0x40fcd6e8, 0x4109b50c},
+{0, 0x40fcd6e8, 0x41d3136a},
+{'q', 0x00000000, 0x418ec95e},
+{0, 0xc0f61128, 0x41d3136a},
+{'q', 0xc0f3cf38, 0x41089418},
+{0, 0xc1bacec8, 0x41089418},
+{'9', 0x0000ffb3, 0xffe4ff7e},
+{'4', 0x0040ffd5, 0x0000ffb8},
+{'6', 0xff9c0044, 0xff290065},
+{'4', 0x00220000, 0x001f0001},
+{'l', 0x4192bcba, 0xc1d6764b},
+{'8', 0xcbe7ddf8, 0xeed3eef0},
+{'q', 0xc0add3bc, 0x00000000},
+{0, 0xc0f18d50, 0x40b6db68},
+{'9', 0x002dfff0, 0x00adfff0},
+{'m', 0x419f2748, 0x00000000},
+{'4', 0xffc5ffff, 0x00d7ff6d},
+{'8', 0x32172107, 0x102a100f},
+{'q', 0x40b25798, 0x00000000},
+{0, 0x40fcd6f0, 0xc0c22505},
+{'q', 0x4014fea0, 0xc0c466f4},
+{0, 0x4014fea0, 0xc1ae643c},
+{'@', 0x000000f9, 0x0000505a},/*        ù        x-advance: 80.351562 */
+{'M', 0x4246f11a, 0xc0b91d59},
+{'l', 0xc0998278, 0x401e0652},
+{'q', 0xc11e0654, 0x40a28a29},
+{0, 0xc18e38e5, 0x40a28a29},
+{'9', 0x0000ff6e, 0xff64ff6e},
+{'l', 0x00000000, 0xc228bf70},
+{'l', 0xc0d43460, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x423723ac},
+{'8', 0x49132f00, 0x1a391a14},
+{'9', 0x0000002a, 0xffed0055},
+{'l', 0x00000000, 0xc24660a0},
+{'l', 0xc0c22508, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e8, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff33},
+{'6', 0xffd2fff9, 0xfdb8ffd7},
+{'l', 0xc1cd6e9e, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x413a3e50, 0x419a12f8},
+{'l', 0x00000000, 0x40107ac0},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000fa, 0x0000505a},/*        ú        x-advance: 80.351562 */
+{'M', 0x4246f11a, 0xc0b91d59},
+{'l', 0xc0998278, 0x401e0652},
+{'q', 0xc11e0654, 0x40a28a29},
+{0, 0xc18e38e5, 0x40a28a29},
+{'9', 0x0000ff6e, 0xff64ff6e},
+{'l', 0x00000000, 0xc228bf70},
+{'l', 0xc0d43460, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x423723ac},
+{'8', 0x49132f00, 0x1a391a14},
+{'9', 0x0000002a, 0xffed0055},
+{'l', 0x00000000, 0xc24660a0},
+{'l', 0xc0c22508, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e8, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff33},
+{'6', 0xffd2fff9, 0xfdb8ff5d},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f44, 0xc199827c},
+{'l', 0x41a0d8ba, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff1a, 0x41974090},
+{'l', 0xc0c22508, 0x00000000},
+{'@', 0x000000fb, 0x0000505a},/*        û        x-advance: 80.351562 */
+{'M', 0x4246f11a, 0xc0b91d59},
+{'l', 0xc0998278, 0x401e0652},
+{'q', 0xc11e0654, 0x40a28a29},
+{0, 0xc18e38e5, 0x40a28a29},
+{'9', 0x0000ff6e, 0xff64ff6e},
+{'l', 0x00000000, 0xc228bf70},
+{'l', 0xc0d43460, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x423723ac},
+{'8', 0x49132f00, 0x1a391a14},
+{'9', 0x0000002a, 0xffed0055},
+{'l', 0x00000000, 0xc24660a0},
+{'l', 0xc0c22508, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e8, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff33},
+{'6', 0xffd2fff9, 0xfdb8fefa},
+{'l', 0xb6000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc1a55c90},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x41a55c90},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0ab91d8, 0x00000000},
+{'l', 0xc18bf6f8, 0xc136db70},
+{'l', 0xc18bf6f9, 0x4136db70},
+{'l', 0xc0ab91d8, 0x00000000},
+{'@', 0x000000fc, 0x0000505a},/*        ü        x-advance: 80.351562 */
+{'M', 0x4246f11a, 0xc0b91d59},
+{'l', 0xc0998278, 0x401e0652},
+{'q', 0xc11e0654, 0x40a28a29},
+{0, 0xc18e38e5, 0x40a28a29},
+{'9', 0x0000ff6e, 0xff64ff6e},
+{'l', 0x00000000, 0xc228bf70},
+{'l', 0xc0d43460, 0xbfd8b820},
+{'4', 0xffdb0000, 0x000000d8},
+{'l', 0x00000000, 0x423723ac},
+{'8', 0x49132f00, 0x1a391a14},
+{'9', 0x0000002a, 0xffed0055},
+{'l', 0x00000000, 0xc24660a0},
+{'l', 0xc0c22508, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41d3a3e8, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40cfb080, 0x3fd8b82c},
+{'4', 0x00250000, 0x0000ff33},
+{'6', 0xffd2fff9, 0xfdb10010},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda12f, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x000000fd, 0x0000483d},/*        ý        x-advance: 72.238281 */
+{'M', 0x42025ed1, 0x4002ef4c},
+{'l', 0xc1d43460, 0xc2780ad7},
+{'l', 0xc094fea7, 0xbfd8b820},
+{'l', 0xb4000000, 0xc094fea8},
+{'l', 0x4207bb60, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0fcd6ec, 0x3feac780},
+{'l', 0x4179740a, 0x4212bcba},
+{'l', 0x415e5d00, 0xc2134d35},
+{'l', 0xc0f85310, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ad4346, 0x00000000},
+{'4', 0x00250000, 0x000bffda},
+{'l', 0xc1d161fa, 0x4280d17f},
+{'q', 0xc0907ac8, 0x4137fc63},
+{0, 0xc0fcd6e8, 0x4185c1b1},
+{'8', 0x3ec429e5, 0x14b514e0},
+{'9', 0x0000ffd3, 0xfff6ffa3},
+{'4', 0xff780000, 0x00000021},
+{'l', 0x40422506, 0x410e38e3},
+{'8', 0x0c290c10, 0xf6250015},
+{'8', 0xe31ef610, 0xd21bed0e},
+{'9', 0xffe4000c, 0xffad0025},
+{'m', 0xc061bfe8, 0xc2a1d58f},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x413b5f46, 0xc199827c},
+{'l', 0x41a0d8b8, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1cdff1a, 0x41974090},
+{'l', 0xc0c22504, 0x00000000},
+{'@', 0x000000fe, 0x0000505a},/*        þ        x-advance: 80.351562 */
+{'M', 0x41119bc5, 0xc2bc13de},
+{'l', 0xc101ce56, 0xbfcfb080},
+{'4', 0xffdc0000, 0x000000e4},
+{'l', 0x00000000, 0x41c2b580},
+{'8', 0x67fb3700, 0xe044e921},
+{'q', 0x4089b510, 0xbf907b00},
+{0, 0x41107ad0, 0xbf907b00},
+{'q', 0x416ac790, 0x00000000},
+{0, 0x41b015ac, 0x41077324},
+{'q', 0x40ed0980, 0x4106522c},
+{0, 0x40ed0980, 0x41cf2010},
+{'q', 0x00000000, 0x41877322},
+{0, 0xc0f85310, 0x41d04104},
+{'q', 0xc0f85318, 0x41119bc4},
+{0, 0xc1b5ba7a, 0x41119bc4},
+{'q', 0xc10ad604, 0x34c00000},
+{0, 0xc1825ed1, 0xbff3cf3a},
+{'9', 0x00250003, 0x00530003},
+{'l', 0x00000000, 0x416764b0},
+{'l', 0x411bc468, 0x3fd8b830},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc21546e3, 0x00000000},
+{'4', 0xffdb0000, 0xfff30039},
+{'6', 0xfc4d0000, 0x01e70170},
+{'q', 0x00000000, 0xc150d180},
+{0, 0xc05d3c10, 0xc1a0483e},
+{'8', 0xc8b3c8e5, 0x189d00cd},
+{'l', 0x00000000, 0x4247c9d2},
+{'8', 0x0b5f0b2d, 0xc9500032},
+{'q', 0x406f4b60, 0xc0df7dfa},
+{0, 0x406f4b60, 0xc1a3ab1e},
+{'@', 0x000000ff, 0x0000483d},/*        ÿ        x-advance: 72.238281 */
+{'M', 0x42025ed1, 0x4002ef4c},
+{'l', 0xc1d43460, 0xc2780ad7},
+{'l', 0xc094fea7, 0xbfd8b820},
+{'l', 0xb4000000, 0xc094fea8},
+{'l', 0x4207bb60, 0x00000000},
+{'l', 0x00000000, 0x4094fea8},
+{'l', 0xc0fcd6ec, 0x3feac780},
+{'l', 0x4179740a, 0x4212bcba},
+{'l', 0x415e5d00, 0xc2134d35},
+{'l', 0xc0f85310, 0xbfd8b820},
+{'l', 0x00000000, 0xc094fea8},
+{'l', 0x41ad4346, 0x00000000},
+{'4', 0x00250000, 0x000bffda},
+{'l', 0xc1d161fa, 0x4280d17f},
+{'q', 0xc0907ac8, 0x4137fc63},
+{0, 0xc0fcd6e8, 0x4185c1b1},
+{'8', 0x3ec429e5, 0x14b514e0},
+{'9', 0x0000ffd3, 0xfff6ffa3},
+{'4', 0xff780000, 0x00000021},
+{'l', 0x40422506, 0x410e38e3},
+{'8', 0x0c290c10, 0xf6250015},
+{'8', 0xe31ef610, 0xd21bed0e},
+{'9', 0xffe4000c, 0xffad0025},
+{'m', 0x418a4588, 0xc2a386ff},
+{'8', 0xedd100e5, 0xd0ececec},
+{'8', 0xd114e400, 0xed2fed14},
+{'8', 0x132f001b, 0x2f131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'m', 0xc1bda130, 0x00000000},
+{'8', 0xecd100e5, 0xd1ececec},
+{'8', 0xd214e500, 0xec2fec14},
+{'8', 0x142f001b, 0x2e131313},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'@', 0x00000141, 0x0000605d},/*        Ł        x-advance: 96.363281 */
+{'M', 0x4169a69b, 0xc2325798},
+{'l', 0x00000000, 0xc22bda12},
+{'l', 0xc13fe31b, 0xbff3cf40},
+{'l', 0xb4800000, 0xc0a4cc20},
+{'l', 0x424345fc, 0x00000000},
+{'l', 0x00000000, 0x40a4cc20},
+{'l', 0xc169a69c, 0x3ff3cf40},
+{'l', 0x00000000, 0x41f18d50},
+{'l', 0x4186e2a8, 0xc11bc468},
+{'l', 0x00000000, 0x41174094},
+{'4', 0x004dff7a, 0x01430000},
+{'l', 0x419a12f6, 0x35000000},
+{'9', 0x00000073, 0xfff500b0},
+{'l', 0x40b91d60, 0xc19d75d8},
+{'l', 0x40cb2cb0, 0x00000000},
+{'l', 0xc03015c0, 0x41e522c4},
+{'l', 0xc2aa28a2, 0x00000000},
+{'l', 0xb6600000, 0xc0a70dff},
+{'l', 0x41422506, 0xbfeac790},
+{'l', 0x35800000, 0xc1e00e73},
+{'l', 0xc1391d5a, 0x40d6764c},
+{'l', 0x35000000, 0xc119827e},
+{'l', 0x41391d5a, 0xc0d43460},
+{'@', 0x000003c0, 0x00004f27},/*        π        x-advance: 79.152344 */
+{'M', 0x428da869, 0xc0ed097c},
+{'9', 0x00000018, 0xfff90036},
+{'l', 0x00000000, 0x40d6764c},
+{'8', 0x11ce0aee, 0x06bf06e0},
+{'9', 0x0000ff69, 0xff7bff69},
+{'4', 0xfea30000, 0x0000ff87},
+{'l', 0xc0077320, 0x41ffa950},
+{'9', 0x0070fffa, 0x00d8ffe8},
+{'4', 0x0000ff83, 0xffe70000},
+{'q', 0x40974090, 0xc09bc466},
+{0, 0x40cd6e9e, 0xc119827c},
+{'9', 0xffda000d, 0xff8b0013},
+{'l', 0x4014fea8, 0xc1fc466f},
+{'l', 0xc0e1bfe6, 0x00000000},
+{'l', 0xc0974090, 0x413da130},
+{'l', 0xc0b6db6e, 0x00000000},
+{'l', 0x3fbda130, 0xc199827c},
+{'l', 0x4294b668, 0x00000000},
+{'4', 0x003a0000, 0x0000ff98},
+{'l', 0x00000000, 0x42299828},
+{'q', 0x00000000, 0x4112bcba},
+{0, 0x40c6a8e0, 0x4112bcba},
+{'@', 0x0000201c, 0x0000483d},/*        “        x-advance: 72.238281 */
+{'M', 0x40df7df8, 0xc2841041},
+{'q', 0x00000000, 0xc12ef4b8},
+{0, 0x40e885a6, 0xc1946e2c},
+{'9', 0xffc3003a, 0xffa500ac},
+{'l', 0x00000000, 0x40cfb080},
+{'8', 0x1bc40add, 0x26d910e8},
+{'8', 0x29f215f2, 0x16080c00},
+{'8', 0x16220809, 0x452b172b},
+{'8', 0x37e72200, 0x14be14e8},
+{'8', 0xe2b100d1, 0xb2e1e1e1},
+{'m', 0x41fdf7e0, 0x00000000},
+{'q', 0x00000000, 0xc12ef4b8},
+{0, 0x40e885a8, 0xc1946e2c},
+{'9', 0xffc3003a, 0xffa500ac},
+{'l', 0x00000000, 0x40cfb080},
+{'8', 0x1bc40add, 0x26d910e8},
+{'8', 0x29f215f2, 0x16080c00},
+{'8', 0x16220809, 0x452b172b},
+{'8', 0x37e72200, 0x14be14e8},
+{'8', 0xe2b100d1, 0xb2e1e1e1},
+{'@', 0x0000201d, 0x0000483d},/*        ”        x-advance: 72.238281 */
+{'M', 0x42089418, 0xc2a4a7f5},
+{'q', 0x00000000, 0x412ef4b0},
+{0, 0xc0ed0980, 0x4194fea4},
+{'9', 0x003cffc6, 0x005aff56},
+{'l', 0x35000000, 0xc0d1f278},
+{'8', 0xe43cf623, 0xda26ef19},
+{'8', 0xd80eeb0e, 0xe9f6f300},
+{'8', 0xebe0f6f6, 0xbbd5ead5},
+{'8', 0xca18de00, 0xec42ec19},
+{'8', 0x1f4f002f, 0x4e1f1f1f},
+{'m', 0x41fcd6e8, 0x00000000},
+{'q', 0x00000000, 0x413015a8},
+{0, 0xc0e643b0, 0x41946e2a},
+{'9', 0x003cffc7, 0x005aff55},
+{'l', 0x00000000, 0xc0d1f278},
+{'8', 0xe43cf623, 0xda26ef19},
+{'8', 0xd80eeb0e, 0xe9f6f300},
+{'8', 0xebe0f6f6, 0xbbd5ead5},
+{'8', 0xca18de00, 0xec42ec19},
+{'8', 0x1f4e002f, 0x4f1f1e1f},
+{'@', 0x00002022, 0x00003294},/*        •        x-advance: 50.578125 */
+{'M', 0x41ca0bbd, 0xc1e2505e},
+{'8', 0xd39200c0, 0x91d3d3d3},
+{'8', 0x922dbf00, 0xd36ed32e},
+{'8', 0x2d6e0040, 0x6e2e2d2e},
+{'8', 0x6fd24100, 0x2d922dd3},
+{'@', 0x00002026, 0x0000907a},/*        …        x-advance: 144.476562 */
+{'M', 0x41bda130, 0x4002ef4c},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'m', 0x4242b580, 0x00000000},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'m', 0x4242b582, 0x00000000},
+{'8', 0xe5be00da, 0xbee5e5e5},
+{'8', 0xbe1bda00, 0xe542e51b},
+{'8', 0x1b420026, 0x421b1b1b},
+{'8', 0x42e52600, 0x1bbe1be5},
+{'@', 0x000020ac, 0x0000483d},/*        €        x-advance: 72.238281 */
+{'M', 0x3feac790, 0xc2279e7a},
+{'0', 0xdbff003e, 0xea01eb00},
+{'4', 0x0000ffc2, 0xffc70000},
+{'l', 0x41053137, 0x00000000},
+{'q', 0x40877322, 0xc211e402},
+{0, 0x420fa217, 0xc211e402},
+{'8', 0x04600039, 0x0e570427},
+{'4', 0x00a00002, 0x0000ffce},
+{'l', 0xbffcd6e0, 0xc1294fe8},
+{'q', 0xc0bda130, 0xc092bcc0},
+{0, 0xc1543460, 0xc092bcc0},
+{'9', 0x0000ff85, 0x00e9ff75},
+{'l', 0x41a0483e, 0x00000000},
+{'4', 0x00390000, 0x0000ff5f},
+{'l', 0xbe58b800, 0x40a04838},
+{'9', 0x001f0000, 0x00290001},
+{'4', 0x000000a1, 0x00390000},
+{'l', 0xc1a0483e, 0x00000000},
+{'q', 0x3f998270, 0x416ac790},
+{0, 0x40bfe318, 0x41ae643b},
+{'8', 0x39603926, 0xd36f0047},
+{'4', 0xffa3000f, 0x00000032},
+{'l', 0xbe907b00, 0x41a82ef5},
+{'q', 0xc136db6c, 0x4061bfe2},
+{0, 0xc1bda130, 0x4061bfe2},
+{'q', 0xc1785312, 0xb4000000},
+{0, 0xc1c73957, 0xc114fea6},
+{'9', 0xffb5ffb5, 0xff29ffa4},
+{'l', 0xc1053137, 0x00000000},
+{'l', 0x00000000, 0xc0e401d0},
+{'@', 0x00002122, 0x0000907a},/*        â„¢        x-advance: 144.476562 */
+{'M', 0x42c38e39, 0xc217d10c},
+{'l', 0xc014fea0, 0x00000000},
+{'l', 0xc19ce55c, 0xc23602b6},
+{'l', 0x00000000, 0x4220907c},
+{'l', 0x40e885a0, 0x3f907ac0},
+{'l', 0x00000000, 0x40877320},
+{'l', 0xc1a70dfe, 0x00000000},
+{'l', 0x00000000, 0xc0877320},
+{'l', 0x40e885a8, 0xbf907ac0},
+{'l', 0x00000000, 0xc23844a2},
+{'l', 0xc0e885a8, 0xbf907ac0},
+{'l', 0x00000000, 0xc0877320},
+{'l', 0x41bd10b6, 0x00000000},
+{'l', 0x41718d50, 0x420baebb},
+{'l', 0x41761128, 0xc20baebb},
+{'l', 0x41b5ba78, 0x00000000},
+{'l', 0x00000000, 0x40877320},
+{'l', 0xc0e885a0, 0x3f907ac0},
+{'l', 0x00000000, 0x423844a2},
+{'l', 0x40e885a0, 0x3f907ac0},
+{'l', 0x00000000, 0x40877320},
+{'l', 0xc1e1bfe4, 0x00000000},
+{'l', 0x00000000, 0xc0877320},
+{'4', 0xfff7003c, 0xfeb60000},
+{'6', 0x0175ff5b, 0x0000fd74},
+{'l', 0x36800000, 0xc0877320},
+{'4', 0xfff70048, 0xfe8b0000},
+{'l', 0xc00bf6f8, 0x00000000},
+{'8', 0x01d700e9, 0x06d201ef},
+{'l', 0xbf907ad0, 0x41282ef0},
+{'l', 0xc0a0483e, 0x00000000},
+{'l', 0x00000000, 0xc1825ed0},
+{'l', 0x425161fa, 0x00000000},
+{'4', 0x00820000, 0x0000ffd8},
+{'l', 0xbf907ae0, 0xc1282ef0},
+{'9', 0xfff9ffd8, 0xfff9ffa6},
+{'l', 0xc0077320, 0x00000000},
+{'l', 0x00000000, 0x423a3e50},
+{'l', 0x41107ad0, 0x3f907ac0},
+{'l', 0x00000000, 0x40877320},
+{'l', 0xc1fb257a, 0x00000000},
+{'@', 0x00002190, 0x0000907a},/*        ←        x-advance: 144.476562 */
+{'M', 0x4234e1c0, 0xc1f0fcd7},
+{'9', 0x00250020, 0x006f0043},
+{'l', 0xc0a28a28, 0x00000000},
+{'9', 0xffacffb9, 0xff83ff68},
+{'l', 0x00000000, 0xc0228a28},
+{'9', 0xffd70050, 0xff830098},
+{'l', 0x40a28a28, 0x00000000},
+{'9', 0x0049ffde, 0x006fffbd},
+{'l', 0x428b8a9d, 0x00000000},
+{'l', 0x00000000, 0x40c22504},
+{'l', 0xc28b8a9d, 0x00000000},
+{'@', 0x00002191, 0x0000483d},/*        ↑        x-advance: 72.238281 */
+{'M', 0x4204587f, 0xc282ef4c},
+{'9', 0x0020ffdb, 0x0043ff91},
+{'l', 0x00000000, 0xc0a28a28},
+{'9', 0xffb90054, 0xff68007d},
+{'l', 0x40228a20, 0x00000000},
+{'9', 0x00500029, 0x0098007d},
+{'l', 0x00000000, 0x40a28a28},
+{'9', 0xffdeffb7, 0xffbdff91},
+{'l', 0x00000000, 0x428b8a9d},
+{'l', 0xc0c22500, 0xb5c00000},
+{'l', 0x00000000, 0xc28b8a9d},
+{'@', 0x00002192, 0x0000907a},/*        →        x-advance: 144.476562 */
+{'M', 0x42c684be, 0xc210c30c},
+{'9', 0xffdbffe0, 0xff91ffbd},
+{'l', 0x40a28a30, 0x00000000},
+{'9', 0x00540047, 0x007d0098},
+{'l', 0x00000000, 0x40228a28},
+{'9', 0x0029ffb0, 0x007dff68},
+{'l', 0xc0a28a30, 0x00000000},
+{'9', 0xffb70022, 0xff910043},
+{'l', 0xc28b8a9c, 0x00000000},
+{'l', 0xb6800000, 0xc0c22504},
+{'l', 0x428b8a9c, 0x00000000},
+{'@', 0x00002193, 0x0000483d},/*        ↓        x-advance: 72.238281 */
+{'M', 0x421c9d1f, 0xc136db6e},
+{'9', 0xffe00025, 0xffbd006f},
+{'l', 0x00000000, 0x40a28a28},
+{'9', 0x0047ffac, 0x0098ff83},
+{'l', 0xc0228a20, 0x35000000},
+{'9', 0xffb0ffd7, 0xff68ff83},
+{'l', 0x00000000, 0xc0a28a28},
+{'9', 0x00220049, 0x0043006f},
+{'l', 0x00000000, 0xc28b8a9c},
+{'l', 0x40c22500, 0x00000000},
+{'l', 0x00000000, 0x428b8a9c},
+{'@', 0x00002212, 0x00005253},/*        −        x-advance: 82.324219 */
+{'M', 0x42958f20, 0xc253ec23},
+{'l', 0x00000000, 0x41216934},
+{'l', 0xc286522c, 0x00000000},
+{'l', 0xb5c00000, 0xc1216934},
+{'l', 0x4286522c, 0x00000000},
+{'@', 0x00002248, 0x00004f4b},/*        ≈        x-advance: 79.292969 */
+{'M', 0x425ea540, 0xc246a8dd},
+{'8', 0xf0be00e0, 0xcdb4f0de},
+{'8', 0xcab8d8d0, 0xf2d7f2e9},
+{'8', 0x1fc600d8, 0x68e71fee},
+{'l', 0xc11f2748, 0x00000000},
+{'q', 0x3f877324, 0xc1282ef4},
+{0, 0x4058b838, 0xc17df7dc},
+{'8', 0xbe33d612, 0xe955e921},
+{'8', 0x0f40001f, 0x36510f21},
+{'8', 0x3544262c, 0x0e290e18},
+{'8', 0xe0370025, 0x981be012},
+{'l', 0x41228a28, 0x00000000},
+{'q', 0xbfb49980, 0x412a70e0},
+{0, 0xc073cf40, 0x41801ce6},
+{'8', 0x42cd2aed, 0x17af17e0},
+{'m', 0x00000000, 0x41ea3716},
+{'8', 0xf0be00e0, 0xcdb4f0de},
+{'8', 0xcab8d8d0, 0xf2d7f2e9},
+{'8', 0x1fc600d8, 0x68e71fee},
+{'l', 0xc11f2748, 0x00000000},
+{'q', 0x3f877324, 0xc1282ef4},
+{0, 0x4058b838, 0xc17df7e0},
+{'8', 0xbe33d612, 0xe955e921},
+{'8', 0x0f40001f, 0x36510f21},
+{'8', 0x3544262c, 0x0e290e18},
+{'8', 0xe0370025, 0x981be012},
+{'l', 0x41228a28, 0x00000000},
+{'q', 0xbfb49980, 0x412a70e0},
+{0, 0xc073cf40, 0x41801ce5},
+{'8', 0x42cd2aed, 0x17af17e0},
+{'@', 0x000025bc, 0x00008eff},/*        â–¼        x-advance: 142.996094 */
+{'M', 0x42e37154, 0xc2a53870},
+{'l', 0xc228bf70, 0x42a907ad},
+{'l', 0xc2294fea, 0xc2a907ad},
+{'l', 0x42a907ad, 0x00000000},
+{'@', 0x00002660, 0x00004cc1},/*        â™         x-advance: 76.753906 */
+{'M', 0x4219827c, 0xc2adafa2},
+{'q', 0x3fe1bfe0, 0x40d8b830},
+{0, 0x40a4cc10, 0x414c4da8},
+{'q', 0x4058b840, 0x40bda130},
+{0, 0x41609ef0, 0x417bb5f4},
+{'8', 0x6c63474f, 0x4d142513},
+{'8', 0x5adc3600, 0x24ab24dc},
+{'q', 0xc13136a0, 0x00000000},
+{0, 0xc1907ace, 0xc1579740},
+{'q', 0x3e58b800, 0x4133788e},
+{0, 0x403da130, 0x41889418},
+{'q', 0x40349980, 0x40bb5f44},
+{0, 0x41089418, 0x4112bcba},
+{'9', 0x001a002e, 0x001f0078},
+{'4', 0x00140004, 0x0000fe42},
+{'l', 0x3ed8b860, 0xc0270dff},
+{'q', 0x410bf6f9, 0x00000000},
+{0, 0x416d097b, 0xc058b837},
+{'q', 0x40c22508, 0xc05d3c0e},
+{0, 0x41119bc6, 0xc1186186},
+{'9', 0xffd00018, 0xff7e0018},
+{'l', 0x00000000, 0xbf7cd6e0},
+{'q', 0xc0cb2cb8, 0x41579740},
+{0, 0xc192bcbb, 0x41579740},
+{'8', 0xdcaa00ce, 0xa8dcdcdc},
+{'8', 0xa818ce00, 0xac51da19},
+{'q', 0x411ce55c, 0xc106522c},
+{0, 0x416764ae, 0xc16f4b64},
+{'q', 0x4094fea4, 0xc0d1f280},
+{0, 0x40cfb08c, 0xc1761128},
+{'@', 0x00002663, 0x00005ed0},/*        ♣        x-advance: 94.812500 */
+{'M', 0x429a5b34, 0x00000000},
+{'4', 0x0000fe25, 0xffed0004},
+{'8', 0xe26df14c, 0xcf3cf121},
+{'8', 0xb529df1b, 0xab0fd60f},
+{'l', 0xbe107b00, 0xc0543460},
+{'8', 0x65ae43e0, 0x219c21ce},
+{'8', 0xebb000d5, 0xc7c9ebdc},
+{'8', 0xb1eddded, 0x9329c000},
+{'8', 0xd35dd429, 0x1c5b0022},
+{'8', 0xc5e1dceb, 0xd6faecfa},
+{'8', 0x922dbc00, 0xd66dd62d},
+{'8', 0x2d6e0041, 0x692d2d2d},
+{'8', 0x67da3000, 0xe838ea2f},
+{'8', 0xfc22fc0c, 0x2c61003b},
+{'q', 0x40a4cc20, 0x40ab91d8},
+{0, 0x40a4cc20, 0x4158b834},
+{'q', 0x00000000, 0x4102ef4e},
+{0, 0xc0b015b0, 0x41609ef0},
+{'8', 0x2e932ed4, 0xf3c000e1},
+{'8', 0xdbc4f2df, 0xaec4e9e6},
+{'q', 0x3eb49980, 0x410e38e2},
+{0, 0x4002ef40, 0x416522c2},
+{'8', 0x4c2c2a0e, 0x3142211f},
+{'q', 0x40907ac0, 0x3feac790},
+{0, 0x4148eac8, 0x40543460},
+{'l', 0x3f107a80, 0x401e0652},
+{'@', 0x00002665, 0x000055c8},/*        ♥        x-advance: 85.781250 */
+{'M', 0x422c2251, 0x3fcfb08a},
+{'q', 0xbfc6a8e0, 0xc0c22506},
+{0, 0xc0998280, 0xc147c9d2},
+{'9', 0xffcdffe7, 0xff48ff84},
+{'l', 0xc0cb2cb4, 0xc10ad604},
+{'8', 0xa4c7c8d6, 0xb7f1dcf1},
+{'8', 0x9e26c400, 0xda60da27},
+{'8', 0x20590031, 0x633e2028},
+{'8', 0x9d3bbd13, 0xdf59df28},
+{'8', 0x265e0036, 0x5d282628},
+{'q', 0x00000000, 0x40c22508},
+{0, 0xc046a8e0, 0x414c4dac},
+{'q', 0xc046a8e0, 0x40d67648},
+{0, 0xc12ef4b8, 0x4182ef4c},
+{'q', 0xc11e0650, 0x414a0bbc},
+{0, 0xc16764ac, 0x41a16932},
+{'q', 0xc0907ad0, 0x40ef4b69},
+{0, 0xc0e1bfe0, 0x4184a0bd},
+{'@', 0x00002666, 0x000049b8},/*        ♦        x-advance: 73.718750 */
+{'M', 0x4212747d, 0xc2ac8ead},
+{'q', 0x40a28a28, 0x410d17f0},
+{0, 0x416643b8, 0x41acb2cc},
+{'q', 0x41161f9c, 0x414b2cb4},
+{0, 0x418fea56, 0x41b2e812},
+{'q', 0xc0998280, 0x409e0658},
+{0, 0xc179740c, 0x419aa372},
+{'q', 0xc12cb2cc, 0x416522c5},
+{0, 0xc1853136, 0x41c61862},
+{'q', 0xc0270e00, 0xc0a0483d},
+{0, 0xc112bcbc, 0xc162e0d9},
+{'q', 0xc0cfb088, 0xc113ddaf},
+{0, 0xc13b5f44, 0xc17f18d5},
+{'q', 0xc0a70e00, 0xc0d8b834},
+{0, 0xc133788e, 0xc15f7dfa},
+{'q', 0x4102ef4c, 0xc11aa370},
+{0, 0x418a4588, 0xc1ae643a},
+{'q', 0x4112bcbc, 0xc1434600},
+{0, 0x416ac792, 0xc1b136a4},
+{'@', 0x0000fb01, 0x0000505a},/*        fi        x-advance: 80.351562 */
+{'M', 0x4290c30c, 0xc0cb2cb3},
+{'l', 0x40e885b0, 0x3fd8b838},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x40e643b8, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'l', 0xc1a43b99, 0x00000000},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40e885a4, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'0', 0xda0000b0, 0xd300ea50},
+{'q', 0x00000000, 0xc15d3c08},
+{0, 0x410f59da, 0xc1acb2cc},
+{'q', 0x41107ace, 0xc0fa94f0},
+{0, 0x41c6a8dc, 0xc0fa94f0},
+{'8', 0x064e0022, 0x0d3e062c},
+{'4', 0x00840000, 0x0000ffdc},
+{'l', 0xc03015b0, 0xc100ad60},
+{'8', 0xefe3f7f7, 0xf8d4f8ed},
+{'9', 0x0000ff8d, 0x009bff8d},
+{'l', 0x00000000, 0x41041040},
+{'l', 0x4223ab1e, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'@', 0x0000fb02, 0x0000505a},/*        fl        x-advance: 80.351562 */
+{'M', 0x413136a2, 0xc26be886},
+{'0', 0xda0000b0, 0xc700ea50},
+{'q', 0x00000000, 0xc1567648},
+{0, 0x40e401d0, 0xc1a55c8c},
+{'q', 0x40e643b8, 0xc0eac790},
+{0, 0x41a28a29, 0xc0eac790},
+{'9', 0x00000025, 0x000b0090},
+{'l', 0x4172ae48, 0x00000000},
+{'l', 0x00000000, 0x42bbcba1},
+{'l', 0x40e885a0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667d, 0x00000000},
+{'4', 0xffdb0000, 0xfff30039},
+{'l', 0x00000000, 0xc2a8e38f},
+{'8', 0xe7a7e7d0, 0x24cc00de},
+{'9', 0x0024ffef, 0x0065ffef},
+{'0', 0x006b5200, 0x00953a00},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40ff18d4, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20e38e4, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'@', 0x0000fb03, 0x00007945},/*        ffi        x-advance: 121.269531 */
+{'M', 0x413136a2, 0xc26be886},
+{'0', 0xda0000b0, 0xc700ea50},
+{'q', 0x00000000, 0xc158b838},
+{0, 0x40dd3c0c, 0xc1a5ed08},
+{'q', 0x40dd3c0c, 0xc0e885a0},
+{0, 0x419e96ce, 0xc0e885a0},
+{'9', 0x00000037, 0x000a005d},
+{'4', 0x007e0000, 0x0000ffdc},
+{'l', 0xc002ef50, 0xc0f61120},
+{'q', 0xbfd8b820, 0xbfd8b840},
+{0, 0xc08e38e0, 0xbfd8b840},
+{'9', 0x0000ffc8, 0x008fffc8},
+{'4', 0x004d0000, 0x000000a4},
+{'l', 0x00000000, 0xc0bfe320},
+{'q', 0x00000000, 0xc15d3c08},
+{0, 0x410f59d8, 0xc1acb2cc},
+{'q', 0x41107ad4, 0xc0fa94f0},
+{0, 0x41c6a8de, 0xc0fa94f0},
+{'8', 0x064e0022, 0x0d3e062c},
+{'4', 0x00840000, 0x0000ffdc},
+{'l', 0xc03015c0, 0xc100ad60},
+{'8', 0xefe3f7f7, 0xf8d4f8ed},
+{'9', 0x0000ff8d, 0x009bff8d},
+{'l', 0x00000000, 0x41041040},
+{'l', 0x4223ab20, 0x00000000},
+{'l', 0x00000000, 0x426fdbe2},
+{'l', 0x40e885a0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x40e643c0, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'l', 0xc1a43b9c, 0x00000000},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40e885b0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x40e643b8, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'l', 0xc1a43b99, 0x00000000},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40e885a4, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'@', 0x0000fb04, 0x00007933},/*        ffl        x-advance: 121.199219 */
+{'M', 0x424fb08a, 0xc26be886},
+{'l', 0xc1a3ab1f, 0x00000000},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40e885a4, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'l', 0x35800000, 0xc094fea5},
+{'l', 0x40e643ba, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+{'0', 0xda0000b0, 0xc700ea50},
+{'q', 0x00000000, 0xc158b838},
+{0, 0x40dd3c0c, 0xc1a5ed08},
+{'q', 0x40dd3c0c, 0xc0e885a0},
+{0, 0x419e96ce, 0xc0e885a0},
+{'9', 0x00000037, 0x000a005d},
+{'4', 0x007e0000, 0x0000ffdc},
+{'l', 0xc002ef50, 0xc0f61120},
+{'q', 0xbfd8b820, 0xbfd8b840},
+{0, 0xc08e38e0, 0xbfd8b840},
+{'9', 0x0000ffc8, 0x008fffc8},
+{'4', 0x004d0000, 0x000000a3},
+{'l', 0x00000000, 0xc0ed0980},
+{'q', 0x00000000, 0xc1567648},
+{0, 0x40e401c8, 0xc1a55c8c},
+{'q', 0x40e643b8, 0xc0eac790},
+{0, 0x41a28a2a, 0xc0eac790},
+{'9', 0x00000025, 0x000b0090},
+{'l', 0x4172ae48, 0x00000000},
+{'l', 0x00000000, 0x42bbcba1},
+{'l', 0x40e885a0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20b667e, 0x00000000},
+{'4', 0xffdb0000, 0xfff30039},
+{'l', 0x00000000, 0xc2a8e38f},
+{'8', 0xe7a7e7d0, 0x24cc00de},
+{'9', 0x0024ffef, 0x0065ffef},
+{'0', 0x006b5200, 0x00953a00},
+{'l', 0x00000000, 0x425282f0},
+{'l', 0x40ff18d0, 0x3fd8b82c},
+{'l', 0x00000000, 0x4094fea5},
+{'l', 0xc20e38e4, 0x00000000},
+{'l', 0x00000000, 0xc094fea5},
+{'l', 0x40e643c0, 0xbfd8b838},
+{'l', 0x00000000, 0xc25282f0},
+};
+#define ctx_font_Tinos_Bold_name "Tinos Bold"
+#endif
diff --git a/usermodule/uctx/fonts/Tinos-Regular.h b/usermodule/uctx/fonts/Tinos-Regular.h
new file mode 100644
index 0000000000000000000000000000000000000000..d36786679527b2e3d4a019333b3c322033d612a3
--- /dev/null
+++ b/usermodule/uctx/fonts/Tinos-Regular.h
@@ -0,0 +1,5489 @@
+#ifndef CTX_FONT_Tinos_Regular
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔ
+  ÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŁπ“”•…€™←↑→↓−≈▼♠♣♥♦fiflffiffl  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_Tinos_Regular[]={
+{15, 0x0000a008, 0x00001566},/* length:5478 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x0000000f, 0x00000002},/* Tinos Regular*/
+{32, 0x6f6e6954, 0x65522073},
+{'g', 0x72616c75, 0x00000000},
+{')', 0x0000000f, 0x00000002},
+{'(', 0x0000003b, 0x00000007},/* Apache License, Version 2.0
+                                Copyright 2013 Steve Matteson*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x736e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x53203331},
+{'t', 0x20657665, 0x7474614d},
+{'e', 0x006e6f73, 0x00000000},
+{')', 0x0000003b, 0x00000007},
+{'@', 0x00000020, 0x0000241e},/*                 x-advance: 36.117188 */
+{'@', 0x00000021, 0x0000301c},/*        !        x-advance: 48.109375 */
+{'M', 0x41825ed1, 0xc2bd34d4},
+{'l', 0x41761128, 0x00000000},
+{'4', 0x0219ffde, 0x0000ffcb},
+{'6', 0xfde7ffde, 0x02c00081},
+{'8', 0x2fed1b00, 0x14d014ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x1330001c, 0x30131313},
+{'@', 0x00000022, 0x00003afa},/*        "        x-advance: 58.976562 */
+{'M', 0x410f59d9, 0xc2bd34d4},
+{'l', 0x415e5d03, 0x00000000},
+{'4', 0x010fffde, 0x0000ffd7},
+{'6', 0xfef1ffde, 0x000000d9},
+{'l', 0x415e5d04, 0x00000000},
+{'l', 0xc08bf6f8, 0x4207bb60},
+{'l', 0xc0a70e00, 0x00000000},
+{'l', 0xc089b510, 0xc207bb60},
+{'@', 0x00000023, 0x0000483d},/*        #        x-advance: 72.238281 */
+{'M', 0x428b425f, 0xc213ddb0},
+{'l', 0x00000000, 0x40e643bc},
+{'l', 0xc192bcba, 0x00000000},
+{'l', 0xc0b015b0, 0x41ee2a71},
+{'l', 0xc0eac790, 0x00000000},
+{'l', 0x40b015b0, 0xc1ee2a71},
+{'l', 0xc1aef4b7, 0x00000000},
+{'l', 0xc0add3c0, 0x41ee2a71},
+{'l', 0xc0ed097c, 0x00000000},
+{'l', 0x40b015ac, 0xc1ee2a71},
+{'l', 0xc1422506, 0x00000000},
+{'l', 0xb4800000, 0xc0e643bc},
+{'l', 0x4158b836, 0x00000000},
+{'l', 0x4082ef4c, 0xc1ad4346},
+{'l', 0xc18d17ee, 0x00000000},
+{'l', 0xb4800000, 0xc0e885a8},
+{'l', 0x41974091, 0x00000000},
+{'l', 0x40ab91d4, 0xc1e5b340},
+{'l', 0x40eac790, 0x00000000},
+{'l', 0xc0a94fe8, 0x41e5b340},
+{'l', 0x41ae643c, 0x00000000},
+{'l', 0x40ab91d0, 0xc1e5b340},
+{'l', 0x40eac790, 0x00000000},
+{'l', 0xc0ab91d0, 0x41e5b340},
+{'l', 0x41391d58, 0x00000000},
+{'l', 0x00000000, 0x40e885a8},
+{'4', 0x0000ff9a, 0x00adffe0},
+{'6', 0x00000086, 0x0000fe90},
+{'l', 0x41ae643c, 0x00000000},
+{'l', 0x4080ad60, 0xc1ad4346},
+{'l', 0xc1ae643c, 0x00000000},
+{'l', 0xc080ad60, 0x41ad4346},
+{'@', 0x00000024, 0x0000483d},/*        $        x-advance: 72.238281 */
+{'M', 0x4207bb5f, 0x3fb49983},
+{'q', 0xc0f18d50, 0xbe107ad0},
+{0, 0xc17bb5f2, 0xbfd8b837},
+{'9', 0xfff4ffc0, 0xffe6ffa1},
+{'4', 0xff4c0000, 0x00000025},
+{'l', 0x4019827c, 0x41579741},
+{'8', 0x2c421711, 0x17631431},
+{'l', 0x00000000, 0xc21fb7c2},
+{'8', 0xdca2e9bd, 0xe3d0f3e5},
+{'8', 0xdadbf0eb, 0xcee9eaf1},
+{'q', 0xbf7cd6e8, 0xc06643b0},
+{0, 0xbf7cd6e8, 0xc0ff18d8},
+{'q', 0x00000000, 0xc1228a28},
+{0, 0x40e643b9, 0xc184a0bc},
+{'9', 0xffcd003a, 0xffc5009a},
+{'4', 0xffb80000, 0x0000002e},
+{'l', 0x00000000, 0x410f59d8},
+{'9', 0x00030056, 0x001800ad},
+{'4', 0x009d0000, 0x0000ffdc},
+{'l', 0xc002ef40, 0xc1391d58},
+{'8', 0xe5cdf1f0, 0xf2bcf5df},
+{'4', 0x010d0000, 0x00130035},
+{'q', 0x413a3e50, 0x4089b510},
+{0, 0x41841042, 0x412a70e0},
+{'q', 0x409bc468, 0x40c8eac8},
+{0, 0x409bc468, 0x417bb5f6},
+{'q', 0x00000000, 0x414587e7},
+{0, 0xc0f3cf40, 0x419fb7c3},
+{'9', 0x003cffc4, 0x0043ff5d},
+{'4', 0x004f0000, 0x0000ffd2},
+{'6', 0xffb40000, 0xff3b00ae},
+{'8', 0xa9e5cb00, 0xc29bdee5},
+{'l', 0x00000000, 0x42158f20},
+{'8', 0xd25ff73e, 0x9a21db21},
+{'m', 0xc211e402, 0xc24ff8c6},
+{'8', 0x390a2100, 0x2820170b},
+{'9', 0x00100014, 0x00260049},
+{'l', 0x00000000, 0xc1fa0482},
+{'8', 0x25aa07c8, 0x4ce31de3},
+{'@', 0x00000025, 0x0000785a},/*        %        x-advance: 120.351562 */
+{'M', 0x42e6d435, 0xc1c345fc},
+{'q', 0x00000000, 0x41d282f0},
+{0, 0xc1b9add4, 0x41d282f0},
+{'q', 0xc135ba78, 0xb4c00000},
+{0, 0xc1889418, 0xc0d6764c},
+{'q', 0xc0b49980, 0xc0d6764c},
+{0, 0xc0b49980, 0xc19ce55d},
+{'q', 0x00000000, 0xc148eac8},
+{0, 0x40b6db60, 0xc199827c},
+{'q', 0x40b6db70, 0xc0d67648},
+{0, 0x418b6680, 0xc0d67648},
+{'q', 0x41337890, 0x00000000},
+{0, 0x4188039c, 0x40cfb088},
+{'9', 0x0033002e, 0x009b002e},
+{'m', 0xc28119bd, 0xc23723ac},
+{'q', 0x00000000, 0x41d1f276},
+{0, 0xc1ba3e4e, 0x41d1f276},
+{'q', 0xc135ba78, 0x00000000},
+{0, 0xc188039c, 0xc0d67648},
+{'q', 0xc0b49986, 0xc0d67650},
+{0, 0xc0b49986, 0xc19c54e4},
+{'q', 0x00000000, 0xc1cf200c},
+{0, 0x41b88cde, 0xc1cf200c},
+{'q', 0x41337890, 0x00000000},
+{0, 0x4188039e, 0x40cfb080},
+{'9', 0x0033002e, 0x009b002e},
+{'m', 0x4256764c, 0x423723ac},
+{'q', 0x00000000, 0xc12b91d4},
+{0, 0xc03da140, 0xc17a9500},
+{'8', 0xd8b6d8e9, 0x25b900cf},
+{'q', 0xc03015c0, 0x4094fea0},
+{0, 0xc03015c0, 0x417f18d4},
+{'q', 0x00000000, 0x41391d5a},
+{0, 0x40349980, 0x4182ef4c},
+{'8', 0x25472516, 0xd84a0032},
+{'9', 0xffd80017, 0xff800017},
+{'m', 0xc2813ddc, 0xc23723ac},
+{'q', 0x36800000, 0xc12b91d0},
+{0, 0xc03da120, 0xc17a9500},
+{'8', 0xd8b6d8e9, 0x25b900cf},
+{'q', 0xc03015a8, 0x4094fea0},
+{0, 0xc03015a8, 0x417f18d0},
+{'q', 0x00000000, 0x41391d5c},
+{0, 0x40349980, 0x4182ef4e},
+{'8', 0x25472516, 0xd84a0032},
+{'9', 0xffd80017, 0xff800017},
+{'m', 0xc10d17ec, 0x428f35bb},
+{'l', 0xc0f85314, 0x34c00000},
+{'l', 0x4285c1b1, 0xc2c2fdbe},
+{'l', 0x40fa9500, 0x00000000},
+{'l', 0xc285e5d0, 0x42c2fdbe},
+{'@', 0x00000026, 0x00007061},/*        &        x-advance: 112.378906 */
+{'M', 0x428b8a9c, 0xc298cde2},
+{'8', 0x4ced2c00, 0x39cb20ee},
+{'9', 0x0018ffde, 0x0037ff8d},
+{'l', 0x41ee2a72, 0x41d8b836},
+{'9', 0xff910036, 0xff34003a},
+{'l', 0xc1204840, 0xbff3cf40},
+{'l', 0x00000000, 0xc06f4b60},
+{'4', 0x00000101, 0x001d0000},
+{'l', 0xc11ce558, 0x3ff3cf40},
+{'9', 0x0095ffd6, 0x00f8ff92},
+{'l', 0x4180ad60, 0x416ac790},
+{'l', 0x413a3e50, 0x3fe1bfe2},
+{'4', 0x001d0000, 0x0000ff3e},
+{'l', 0xc1410410, 0xc12ef4b7},
+{'q', 0xc0eac790, 0x40d1f275},
+{0, 0xc1761128, 0x41174091},
+{'q', 0xc0ff18d8, 0x40391d5a},
+{0, 0xc18bf6fa, 0x40391d5a},
+{'q', 0xc18bf6f8, 0xb4000000},
+{0, 0xc1d282ee, 0xc0d8b837},
+{'q', 0xc10bf6fa, 0xc0dafa22},
+{0, 0xc10bf6fa, 0xc19e0652},
+{'8', 0xa214ca00, 0xbd37d914},
+{'q', 0x408bf6fa, 0xc061bfe0},
+{0, 0x415d3c0d, 0xc0e401c8},
+{'q', 0xc12a70e0, 0xc124cc14},
+{0, 0xc12a70e0, 0xc1b88cde},
+{'q', 0x00000000, 0xc1216938},
+{0, 0x40d8b834, 0xc174f038},
+{'q', 0x40d8b838, 0xc0a94fe0},
+{0, 0x419ce55d, 0xc0a94fe0},
+{'q', 0x414466f0, 0x00000000},
+{0, 0x41961f9c, 0x40a04840},
+{'9', 0x00280033, 0x00750033},
+{'m', 0xc1da69a6, 0x428f7df8},
+{'9', 0x0000007a, 0xffaa00d0},
+{'l', 0xc20ccfb0, 0xc200f59e},
+{'8', 0x44ab19c5, 0x69e62be6},
+{'q', 0x00000000, 0x4123ab1f},
+{0, 0x40bda12c, 0x417bb5f5},
+{'9', 0x002c002f, 0x002c0089},
+{'m', 0xc13da12e, 0xc2907acf},
+{'q', 0x00000000, 0x4137fc60},
+{0, 0x412dd3c2, 0x419d75d6},
+{'8', 0xd94eec36, 0xd124ed18},
+{'8', 0xbb0ce40c, 0x949a9400},
+{'8', 0x1bab00c5, 0x51e71be7},
+{'@', 0x00000027, 0x00001a08},/*        '        x-advance: 26.031250 */
+{'M', 0x40c22506, 0xc2bd34d4},
+{'l', 0x415e5d03, 0x00000000},
+{'l', 0xc08bf6fa, 0x4207bb60},
+{'l', 0xc0a70dfe, 0x00000000},
+{'l', 0xc089b50e, 0xc207bb60},
+{'@', 0x00000028, 0x0000301c},/*        (        x-advance: 48.109375 */
+{'M', 0x419fb7c3, 0xc20b667e},
+{'q', 0x00000000, 0x4192bcbb},
+{0, 0x401e0650, 0x41ea3716},
+{'q', 0x401e0650, 0x412dd3c2},
+{0, 0x40f85314, 0x4192bcba},
+{'9', 0x003b002a, 0x0060006a},
+{'l', 0x00000000, 0x40bda130},
+{'q', 0xc15f7df8, 0xc0ed097c},
+{0, 0xc1aef4b7, 0xc1813ddc},
+{'q', 0xc0fa94fe, 0xc10d17ee},
+{0, 0xc1391d58, 0xc1a55c8e},
+{'q', 0xc06ac792, 0xc13ec226},
+{0, 0xc06ac792, 0xc1e643bb},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x406ac792, 0xc1e49248},
+{'q', 0x406ac790, 0xc13da130},
+{0, 0x4137fc64, 0xc1a4cc14},
+{'9', 0xffbb003e, 0xff7f00af},
+{'l', 0x00000000, 0x40bda130},
+{'q', 0xc109b50c, 0x409e0650},
+{0, 0xc15afa22, 0x414b2cb8},
+{'q', 0xc0a28a28, 0x40f61120},
+{0, 0xc0ef4b64, 0x418fea52},
+{'q', 0xc014fea8, 0x4124cc14},
+{0, 0xc014fea8, 0x41e643ba},
+{'@', 0x00000029, 0x0000301c},/*        )        x-advance: 48.109375 */
+{'M', 0x4094fea5, 0x41f61129},
+{'l', 0x00000000, 0xc0bda130},
+{'q', 0x40ff18d5, 0xc092bcbc},
+{0, 0x41543460, 0xc1410411},
+{'q', 0x40a94fec, 0xc0f18d53},
+{0, 0x40f85314, 0xc1934d35},
+{'q', 0x401e0658, 0xc12ef4b7},
+{0, 0x401e0658, 0xc1e9a69c},
+{'q', 0x00000000, 0xc193ddb0},
+{0, 0xc0198280, 0xc1e643ba},
+{'q', 0xc014fea8, 0xc124cc14},
+{0, 0xc0ed097c, 0xc18fea52},
+{'9', 0xffc2ffd8, 0xff9bff93},
+{'l', 0x35000000, 0xc0bda130},
+{'q', 0x4161bfe4, 0x40f18d50},
+{0, 0x41af8532, 0x41825ed0},
+{'q', 0x40fa94fc, 0x410ad608},
+{0, 0x4137fc62, 0x41a43b9c},
+{'q', 0x406ac790, 0x413c8038},
+{0, 0x406ac790, 0x41e49248},
+{'q', 0x00000000, 0x4186522d},
+{0, 0xc06ac790, 0x41e5b340},
+{'q', 0xc06ac790, 0x413da12f},
+{0, 0xc137fc62, 0x41a4cc14},
+{'q', 0xc0fa9500, 0x410bf6f8},
+{0, 0xc1af8532, 0x41825ed1},
+{'@', 0x0000002a, 0x0000483d},/*        *        x-advance: 72.238281 */
+{'M', 0x40e1bfe3, 0xc29643ba},
+{'l', 0x40907acf, 0xc1216930},
+{'l', 0x41b1c71e, 0x415afa20},
+{'l', 0xc0422508, 0xc1b88ce0},
+{'l', 0x413015aa, 0x00000000},
+{'l', 0xc0543460, 0x41b88ce0},
+{'l', 0x41b2e814, 0xc1567648},
+{'l', 0x40907ac8, 0x411f2748},
+{'l', 0xc1bb5f44, 0x40dd3c00},
+{'l', 0x41bb5f44, 0x40dafa28},
+{'l', 0xc0907ac8, 0x411f2748},
+{'l', 0xc1b2e814, 0xc154345c},
+{'l', 0x40543460, 0x41b76be6},
+{'l', 0xc13015aa, 0x00000000},
+{'l', 0x40422508, 0xc1b91d5a},
+{'l', 0xc1b1c71e, 0x415c1b1c},
+{'l', 0xc0907acd, 0xc1216934},
+{'l', 0x41b91d59, 0xc0df7e00},
+{'l', 0xc1b91d59, 0xc0e1bfe0},
+{'@', 0x0000002b, 0x0000517b},/*        +        x-advance: 81.480469 */
+{'M', 0x42317edf, 0xc2317edf},
+{'l', 0x00000000, 0x41f06c5c},
+{'l', 0xc0e885a0, 0x00000000},
+{'l', 0x00000000, 0xc1f06c5c},
+{'l', 0xc1ef4b68, 0x00000000},
+{'l', 0x35800000, 0xc0e643c0},
+{'l', 0x41ef4b68, 0x00000000},
+{'l', 0x00000000, 0xc1f06c5a},
+{'l', 0x40e885a0, 0x00000000},
+{'l', 0x00000000, 0x41f06c5a},
+{'l', 0x41f06c5e, 0x00000000},
+{'l', 0x00000000, 0x40e643c0},
+{'l', 0xc1f06c5e, 0x00000000},
+{'@', 0x0000002c, 0x0000241e},/*        ,        x-advance: 36.117188 */
+{'M', 0x41d827bc, 0xc05d3c0d},
+{'q', 0x00000000, 0x411aa372},
+{0, 0xc0b49984, 0x4181ce56},
+{'9', 0x0033ffd4, 0x004bff82},
+{'l', 0x00000000, 0xc0add3c4},
+{'8', 0xa263e163, 0xecf8f500},
+{'8', 0xede3f7f8, 0xc9daedda},
+{'8', 0xd213e200, 0xf031f013},
+{'8', 0x193a0024, 0x41161916},
+{'@', 0x0000002d, 0x0000301c},/*        -        x-advance: 48.109375 */
+{'M', 0x40ab91d6, 0xc1e522c4},
+{'l', 0x00000000, 0xc12cb2cc},
+{'l', 0x42161f9b, 0x00000000},
+{'l', 0x00000000, 0x412cb2cc},
+{'l', 0xc2161f9b, 0x00000000},
+{'@', 0x0000002e, 0x0000241e},/*        .        x-advance: 36.117188 */
+{'M', 0x41d4c4db, 0xc0cfb08a},
+{'8', 0x2fed1b00, 0x14d014ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x1330001c, 0x30131313},
+{'@', 0x0000002f, 0x00002824},/*        /        x-advance: 40.140625 */
+{'M', 0x40e1bfe3, 0x3fb49983},
+{'l', 0xc0e1bfe3, 0x00000000},
+{'l', 0x4204e8f9, 0xc2c14c4e},
+{'l', 0x40dd3c10, 0x00000000},
+{'l', 0xc204587f, 0x42c14c4e},
+{'@', 0x00000030, 0x0000483d},/*        0        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc23ec225},
+{'q', 0x00000000, 0x424466f1},
+{0, 0xc1f85312, 0x424466f1},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc148eac8},
+{'q', 0xc0f3cf3c, 0xc148eac8},
+{0, 0xc0f3cf3c, 0xc2122c3f},
+{'q', 0x00000000, 0xc1bbefbe},
+{0, 0x40f3cf3e, 0xc20fa217},
+{'q', 0x40f3cf3e, 0xc147c9d0},
+{0, 0x41b91d5a, 0xc147c9d0},
+{'q', 0x416f4b68, 0x00000000},
+{0, 0x41b5ba78, 0x414587e8},
+{'9', 0x0062003e, 0x0120003e},
+{'m', 0xc14fb088, 0x00000000},
+{'q', 0x00000000, 0xc1b5ba7a},
+{0, 0xc089b510, 0xc202ef4b},
+{'8', 0xb092b0de, 0x4b9700b7},
+{'q', 0xc080ad60, 0x41174090},
+{0, 0xc080ad60, 0x42053137},
+{'q', 0x00000000, 0x41bfe31a},
+{0, 0x4082ef4c, 0x42072ae4},
+{'8', 0x4d684d20, 0xaf6d004a},
+{'q', 0x408bf6f8, 0xc124cc14},
+{0, 0x408bf6f8, 0xc2053136},
+{'@', 0x00000031, 0x0000483d},/*        1        x-advance: 72.238281 */
+{'M', 0x4230ee64, 0xc0b49983},
+{'l', 0x419aa372, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc24b74f0, 0x00000000},
+{'l', 0xb5800000, 0xc06f4b67},
+{'l', 0x419b33ec, 0xbff3cf3e},
+{'l', 0x00000000, 0xc29a5b34},
+{'l', 0xc198f201, 0x40dafa20},
+{'l', 0x00000000, 0xc06f4b60},
+{'l', 0x41dcab91, 0xc17a9500},
+{'l', 0x406ac790, 0x00000000},
+{'l', 0x00000000, 0x42b3788d},
+{'@', 0x00000032, 0x0000483d},/*        2        x-advance: 72.238281 */
+{'M', 0x42808942, 0x00000000},
+{'4', 0x0000fe31, 0xffae0000},
+{'l', 0x4151f274, 0xc13ec226},
+{'q', 0x414a0bbe, 0xc13136a0},
+{0, 0x41946e2b, 0xc18f59d8},
+{'q', 0x40bda130, 0xc0dafa28},
+{0, 0x41077320, 0xc161bfe4},
+{'q', 0x40270e00, 0xc0e885a8},
+{0, 0x40270e00, 0xc1853136},
+{'8', 0x91dfb700, 0xda94dadf},
+{'8', 0x08c300e3, 0x15c907e1},
+{'4', 0x005cffed, 0x0000ffdb},
+{'l', 0x00000000, 0xc1919bc4},
+{'q', 0x414d6e9e, 0xc0422500},
+{0, 0x41ae643c, 0xc0422500},
+{'q', 0x41785312, 0x00000000},
+{0, 0x41ba3e4f, 0x40cfb080},
+{'q', 0x40fa9500, 0x40cd6ea0},
+{0, 0x40fa9500, 0x41919bc8},
+{'q', 0x00000000, 0x40fcd6e8},
+{0, 0xc046a8e0, 0x416f4b64},
+{'q', 0xc0422500, 0x40df7df8},
+{0, 0xc1161f9c, 0x415f7df8},
+{'q', 0xc0cb2cb0, 0x40dd3c10},
+{0, 0xc1a82ef4, 0x419b33ec},
+{'9', 0x002affce, 0x005eff96},
+{'l', 0x4242b582, 0x00000000},
+{'l', 0x00000000, 0x412dd3c1},
+{'@', 0x00000033, 0x0000483d},/*        3        x-advance: 72.238281 */
+{'M', 0x42853137, 0xc1cdff19},
+{'q', 0x00000000, 0x414c4da8},
+{0, 0xc10bf6f8, 0x419fb7c3},
+{'q', 0xc10bf6fc, 0x40e643b9},
+{0, 0xc1c61862, 0x40e643b9},
+{'9', 0x0000ff95, 0xffe8ff35},
+{'4', 0xff61fffa, 0x00000025},
+{'l', 0x404b2cb4, 0x41543461},
+{'8', 0x153e0c16, 0x094b0928},
+{'q', 0x413136a4, 0x00000000},
+{0, 0x4182ef4c, 0xc0a28a28},
+{'q', 0x40a94fe8, 0xc0a28a2a},
+{0, 0x40a94fe8, 0xc1877322},
+{'q', 0x00000000, 0xc114fea6},
+{0, 0xc09bc468, 0xc161bfe2},
+{'9', 0xffdaffda, 0xffd6ff88},
+{'4', 0xfffcffb0, 0xffd20000},
+{'l', 0x41216934, 0xbf228a00},
+{'8', 0xd95efd3f, 0x931edc1e},
+{'8', 0x92dfb400, 0xde98dee0},
+{'8', 0x08c200e3, 0x15c707e0},
+{'4', 0x005cffed, 0x0000ffdb},
+{'l', 0x00000000, 0xc1919bc4},
+{'8', 0xed60f237, 0xfb50fb28},
+{'q', 0x41f2ae48, 0x00000000},
+{0, 0x41f2ae48, 0x41ba3e50},
+{'q', 0x00000000, 0x411ce558},
+{0, 0xc0add3c0, 0x417a94fc},
+{'q', 0xc0ab91d8, 0x40b91d58},
+{0, 0xc173cf3c, 0x40e643b8},
+{'q', 0x414d6e9c, 0x3fbda140},
+{0, 0x41974090, 0x40ed0980},
+{'q', 0x40c22508, 0x40bb5f40},
+{0, 0x40c22508, 0x4182ef4b},
+{'@', 0x00000034, 0x0000483d},/*        4        x-advance: 72.238281 */
+{'M', 0x42649249, 0xc1a67d85},
+{'l', 0x00000000, 0x41a67d85},
+{'l', 0xc1422504, 0x00000000},
+{'l', 0x00000000, 0xc1a67d85},
+{'l', 0xc228bf70, 0x00000000},
+{'l', 0x35400000, 0xc1161f9a},
+{'l', 0x4238d51c, 0xc281ce56},
+{'l', 0x4101ce54, 0x00000000},
+{'l', 0x00000000, 0x42806522},
+{'4', 0x00000066, 0x00500000},
+{'6', 0x0000ff9a, 0xfe33ff9f},
+{'l', 0xbeb49980, 0x00000000},
+{'l', 0xc2077322, 0x423e79e7},
+{'l', 0x4208dc55, 0x00000000},
+{'l', 0x00000000, 0xc23e79e7},
+{'@', 0x00000035, 0x0000483d},/*        5        x-advance: 72.238281 */
+{'M', 0x4208dc55, 0xc25d3c0d},
+{'q', 0x4182ef4c, 0x00000000},
+{0, 0x41c2b582, 0x40d67648},
+{'q', 0x4100ad60, 0x40d67650},
+{0, 0x4100ad60, 0x41a3ab1f},
+{'q', 0x00000000, 0x416401cf},
+{0, 0xc10ad604, 0x41af8532},
+{'q', 0xc10ad604, 0x40f3cf3d},
+{0, 0xc1c6a8dc, 0x40f3cf3d},
+{'9', 0x0000ff95, 0xffe8ff41},
+{'4', 0xff61fffa, 0x00000025},
+{'l', 0x404b2cb4, 0x41543461},
+{'8', 0x163b0d18, 0x08420822},
+{'q', 0x41325798, 0x00000000},
+{0, 0x4182ef4c, 0xc0a70e00},
+{'q', 0x40a94fe8, 0xc0a94fea},
+{0, 0x40a94fe8, 0xc18e38e4},
+{'8', 0x97eebb00, 0xcbc7dcee},
+{'8', 0xf096f0d9, 0x0d9c00cd},
+{'l', 0xc0d8b836, 0x00000000},
+{'l', 0x00000000, 0xc23ba783},
+{'l', 0x423fe31b, 0x00000000},
+{'4', 0x00560000, 0x0000feb4},
+{'l', 0xb6000000, 0x41f18d52},
+{'q', 0x40f3cf40, 0xbfd8b840},
+{0, 0x41825ed1, 0xbfd8b840},
+{'@', 0x00000036, 0x0000483d},/*        6        x-advance: 72.238281 */
+{'M', 0x4287df7e, 0xc1eac790},
+{'q', 0x00000000, 0x416be885},
+{0, 0xc0ef4b68, 0x41b64af3},
+{'q', 0xc0ed0978, 0x40ff18d5},
+{0, 0xc1ab91d4, 0x40ff18d5},
+{'q', 0xc17f18d8, 0xb4000000},
+{0, 0xc1c345fc, 0xc146a8dc},
+{'q', 0xc106522e, 0xc146a8dc},
+{0, 0xc106522e, 0xc20ec95f},
+{'q', 0x35000000, 0xc173cf3c},
+{0, 0x408e38e4, 0xc1d282f0},
+{'q', 0x408e38e4, 0xc13136a0},
+{0, 0x4146a8dc, 0xc186e2a8},
+{'q', 0x4100ad62, 0xc0b91d50},
+{0, 0x41946e2c, 0xc0b91d50},
+{'9', 0x00000052, 0x001300a4},
+{'4', 0x00820000, 0x0000ffdb},
+{'l', 0xc01e0660, 0xc11aa378},
+{'8', 0xefcef6ee, 0xf9c7f9e1},
+{'q', 0xc124cc16, 0x00000000},
+{0, 0xc180ad61, 0x41204840},
+{'q', 0xc0b6db70, 0x411f2748},
+{0, 0xc0c8eac8, 0x41e9161e},
+{'q', 0x4137fc64, 0xc0c22508},
+{0, 0x41b88cdf, 0xc0c22508},
+{'q', 0x4147c9d0, 0x00000000},
+{0, 0x41986186, 0x40e1bfe8},
+{'9', 0x00370034, 0x00a10034},
+{'m', 0xc1e9a69a, 0x41c97b42},
+{'q', 0x41089418, 0x35000000},
+{0, 0x414587e8, 0xc0b015ac},
+{'q', 0x4073cf40, 0xc0b25796},
+{0, 0x4073cf40, 0xc192bcba},
+{'q', 0x00000000, 0xc1391d5a},
+{0, 0xc06ac790, 0xc185c1b1},
+{'q', 0xc06643c0, 0xc0a4cc18},
+{0, 0xc137fc64, 0xc0a4cc18},
+{'q', 0xc11aa374, 0x00000000},
+{0, 0xc1a43b9a, 0x4061bfe0},
+{'q', 0x00000000, 0x41ac2251},
+{0, 0x409bc468, 0x41ff18d6},
+{'q', 0x409bc468, 0x4124cc14},
+{0, 0x416ac790, 0x4124cc14},
+{'@', 0x00000037, 0x0000483d},/*        7        x-advance: 72.238281 */
+{'M', 0x4162e0d9, 0xc2907acf},
+{'l', 0xc094fea6, 0x00000000},
+{'l', 0x00000000, 0xc1b2e814},
+{'l', 0x426a3716, 0x00000000},
+{'l', 0x00000000, 0x40add3c0},
+{'l', 0xc228bf70, 0x42b25798},
+{'l', 0xc1119bc8, 0x00000000},
+{'l', 0x4225a4cd, 0xc2a79e7a},
+{'l', 0xc2263548, 0x00000000},
+{'l', 0xc01e064c, 0x41391d58},
+{'@', 0x00000038, 0x0000483d},/*        8        x-advance: 72.238281 */
+{'M', 0x427f6113, 0xc28f119c},
+{'8', 0x69e23e00, 0x41af2ae3},
+{'q', 0x4100ad60, 0x403da130},
+{0, 0x4146a8dc, 0x4114fea4},
+{'q', 0x408e38e0, 0x40c8eac8},
+{0, 0x408e38e0, 0x4174f032},
+{'q', 0x00000000, 0x4156764c},
+{0, 0xc0f18d50, 0x41a16934},
+{'q', 0xc0f18d50, 0x40d8b835},
+{0, 0xc1bbefbe, 0x40d8b835},
+{'q', 0xc1f18d53, 0xb4000000},
+{0, 0xc1f18d53, 0xc1d79741},
+{'q', 0x00000000, 0xc1161f9a},
+{0, 0x40907ad0, 0xc1785312},
+{'8', 0xb861cf24, 0xbfb0eacf},
+{'q', 0xc073cf40, 0xc0ab91d8},
+{0, 0xc073cf40, 0xc153136c},
+{'q', 0x00000000, 0xc13b5f48},
+{0, 0x40e401d0, 0xc1910b48},
+{'q', 0x40e643b8, 0xc0cd6ea0},
+{0, 0x41a5ed0a, 0xc0cd6ea0},
+{'q', 0x4151f274, 0x00000000},
+{0, 0x41a28a28, 0x40cd6ea0},
+{'9', 0x0032003a, 0x0091003a},
+{'m', 0xc11ce55c, 0x4237fc64},
+{'q', 0x00000000, 0xc1349984},
+{0, 0xc08e38e8, 0xc182ef4c},
+{'8', 0xd891d8de, 0x269500b6},
+{'q', 0xc082ef4c, 0x40998278},
+{0, 0xc082ef4c, 0x4184a0bb},
+{'q', 0x00000000, 0x413ec226},
+{0, 0x40853134, 0x41853137},
+{'8', 0x256a2521, 0xda6e004b},
+{'9', 0xffd90024, 0xff7c0024},
+{'m', 0xc0391d60, 0xc237fc63},
+{'q', 0x00000000, 0xc11bc468},
+{0, 0xc073cf40, 0xc16522c8},
+{'8', 0xdca5dce2, 0x23a700c5},
+{'q', 0xc06643b8, 0x408e38e0},
+{0, 0xc06643b8, 0x416764b0},
+{'q', 0x00000000, 0x411ce55c},
+{0, 0x4061bfe0, 0x4161bfe4},
+{'8', 0x2159211c, 0xde5c003f},
+{'q', 0x406f4b60, 0xc08bf6f8},
+{0, 0x406f4b60, 0xc1609eec},
+{'@', 0x00000039, 0x0000483d},/*        9        x-advance: 72.238281 */
+{'M', 0x4094fea5, 0xc2837fc6},
+{'q', 0x00000000, 0xc16401d0},
+{0, 0x40ff18d5, 0xc1b0a628},
+{'q', 0x40ff18d6, 0xc0fa9500},
+{0, 0x41b40908, 0xc0fa9500},
+{'q', 0x41813ddc, 0x00000000},
+{0, 0x41bd10b6, 0x413a3e50},
+{'q', 0x40f18d50, 0x413a3e50},
+{0, 0x40f18d50, 0x4211e402},
+{'q', 0x00000000, 0x41be31aa},
+{0, 0xc11aa370, 0x42119bc4},
+{'q', 0xc11aa374, 0x4148eac8},
+{0, 0xc1d948b2, 0x4148eac8},
+{'9', 0x0000ffa5, 0xffedff58},
+{'4', 0xff7e0000, 0x00000024},
+{'l', 0x401e0650, 0x41228a29},
+{'8', 0x0f300812, 0x063d061e},
+{'q', 0x41349982, 0x00000000},
+{0, 0x418ad603, 0xc11e0652},
+{'q', 0x40c22508, 0xc11f2748},
+{0, 0x40d67648, 0xc1e9a69a},
+{'q', 0xc12b91d4, 0x40bfe318},
+{0, 0xc1ae643b, 0x40bfe318},
+{'q', 0xc147c9d2, 0x00000000},
+{0, 0xc19d75d8, 0xc0ed0980},
+{'9', 0xffc5ffc7, 0xff5affc7},
+{'m', 0x41f4f033, 0xc1c22508},
+{'q', 0xc18d17ee, 0x00000000},
+{0, 0xc18d17ee, 0x41c466f0},
+{'q', 0x00000000, 0x412cb2d0},
+{0, 0x40877324, 0x417f18d8},
+{'q', 0x40877320, 0x40a4cc18},
+{0, 0x4151f276, 0x40a4cc18},
+{'q', 0x41119bc4, 0x00000000},
+{0, 0x4192bcba, 0xc06f4b70},
+{'q', 0x00000000, 0xc1ad4344},
+{0, 0xc089b510, 0xc1fdf7e0},
+{'q', 0xc0877320, 0xc1228a28},
+{0, 0xc15c1b18, 0xc1228a28},
+{'@', 0x0000003a, 0x00002824},/*        :        x-advance: 40.140625 */
+{'M', 0x41e37154, 0xc0cfb08a},
+{'8', 0x2fed1b00, 0x14d114ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x132f001c, 0x30131313},
+{'m', 0x00000000, 0xc253136b},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'8', 0xedd000e4, 0xd0ededed},
+{'8', 0xd113e500, 0xec31ec13},
+{'8', 0x142f001c, 0x2f131413},
+{'@', 0x0000003b, 0x00002824},/*        ;        x-advance: 40.140625 */
+{'M', 0x41e885a5, 0xc05d3c0d},
+{'q', 0x00000000, 0x411aa372},
+{0, 0xc0b49984, 0x4181ce56},
+{'9', 0x0033ffd4, 0x004bff81},
+{'l', 0xb5000000, 0xc0add3c4},
+{'8', 0xa263e163, 0xecf7f500},
+{'8', 0xede3f7f7, 0xc9daedda},
+{'8', 0xd213e200, 0xf031f013},
+{'8', 0x193a0024, 0x41161916},
+{'m', 0xbf228a20, 0xc25f35bb},
+{'8', 0x30ed1c00, 0x13d113ed},
+{'8', 0xedd000e4, 0xd0ededed},
+{'8', 0xd113e500, 0xec31ec13},
+{'8', 0x142f001c, 0x2f131413},
+{'@', 0x0000003c, 0x0000517b},/*        <        x-advance: 81.480469 */
+{'M', 0x40e643ba, 0xc238d51c},
+{'l', 0x00000000, 0xc061bfe0},
+{'l', 0x4286764b, 0xc204587e},
+{'l', 0x00000000, 0x40e885a0},
+{'l', 0xc2644a0c, 0x41dcab92},
+{'l', 0x42644a0c, 0x41dcab92},
+{'l', 0x00000000, 0x40e885a6},
+{'l', 0xc286764b, 0xc204587f},
+{'@', 0x0000003d, 0x0000517b},/*        =        x-advance: 81.480469 */
+{'M', 0x4294da87, 0xc2146e2b},
+{'l', 0x00000000, 0x40e643bc},
+{'4', 0x0000fde7, 0xffc70000},
+{'6', 0x00000219, 0xff190000},
+{'l', 0x00000000, 0x40e643b8},
+{'l', 0xc286764b, 0x00000000},
+{'l', 0xb6400000, 0xc0e643b8},
+{'l', 0x4286764b, 0x00000000},
+{'@', 0x0000003e, 0x0000517b},/*        >        x-advance: 81.480469 */
+{'M', 0x40eac790, 0xc151f275},
+{'l', 0x00000000, 0xc0e885a6},
+{'l', 0x42644a0c, 0xc1dcab92},
+{'l', 0xc2644a0c, 0xc1dcab92},
+{'l', 0x00000000, 0xc0e885a0},
+{'l', 0x4286764b, 0x4204587e},
+{'l', 0x00000000, 0x4061bfe0},
+{'l', 0xc286764b, 0x4204587f},
+{'@', 0x0000003f, 0x00004020},/*        ?        x-advance: 64.125000 */
+{'M', 0x41f85314, 0xc1c587e7},
+{'4', 0x0000ffd3, 0xff44fff2},
+{'l', 0x41216934, 0xc002ef40},
+{'q', 0x40c22508, 0xbf998280},
+{0, 0x410d17ec, 0xc0c466f0},
+{'q', 0x403015b0, 0xc09e0658},
+{0, 0x403015b0, 0xc16643bc},
+{'q', 0x00000000, 0xc125ed08},
+{0, 0xc06f4b60, 0xc169a698},
+{'8', 0xde97dee3, 0x1b9300c1},
+{'4', 0x005cffed, 0x0000ffdb},
+{'l', 0x00000000, 0xc18f59d8},
+{'q', 0x41325796, 0xc0422500},
+{0, 0x41a67d84, 0xc0422500},
+{'q', 0x41ef4b68, 0x00000000},
+{0, 0x41ef4b68, 0x41bfe31c},
+{'q', 0x00000000, 0x4137fc60},
+{0, 0xc0b6db70, 0x4193ddae},
+{'9', 0x0037ffd3, 0x0049ff7c},
+{'4', 0x0007ffe0, 0x0092fff9},
+{'m', 0x40cb2cb0, 0x41919bc4},
+{'8', 0x2fed1b00, 0x14d114ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x132f001c, 0x30131313},
+{'@', 0x00000040, 0x0000850d},/*        @        x-advance: 133.050781 */
+{'M', 0x42cdb6dc, 0x414fb08a},
+{'q', 0xc11f2748, 0x40f85314},
+{0, 0xc1a0d8b8, 0x41325798},
+{'q', 0xc1216938, 0x40543460},
+{0, 0xc1ae643e, 0x40543460},
+{'q', 0xc17df7e0, 0x00000000},
+{0, 0xc1e00e72, 0xc0d43460},
+{'q', 0xc1410412, 0xc0d6764e},
+{0, 0xc1958f20, 0xc196b016},
+{'q', 0xc0d1f277, 0xc1422507},
+{0, 0xc0d1f277, 0xc1dc1b18},
+{'q', 0x00000000, 0xc1a0483d},
+{0, 0x410d17ee, 0xc2110b4a},
+{'q', 0x410e38e4, 0xc181ce58},
+{0, 0x41c3d677, 0xc1ca9c38},
+{'q', 0x417a9500, 0xc1119bc8},
+{0, 0x420ad602, 0xc1119bc8},
+{'q', 0x41bda130, 0x00000000},
+{0, 0x4212bcbc, 0x4135ba78},
+{'q', 0x4150d178, 0x4135ba78},
+{0, 0x4150d178, 0x41fe885c},
+{'q', 0x00000000, 0x4156764c},
+{0, 0xc0dafa20, 0x41ca0bbd},
+{'q', 0xc0dafa20, 0x413c803a},
+{0, 0xc193ddb0, 0x41974091},
+{'q', 0xc13a3e50, 0x40e401cf},
+{0, 0xc1c22504, 0x40e401cf},
+{'8', 0xe4dc00dc, 0xba04e400},
+{'8', 0x4aa031cf, 0x18ab18d1},
+{'8', 0xe2c100d8, 0xaeeae1ea},
+{'q', 0x00000000, 0xc106522c},
+{0, 0x40077320, 0xc182ef4c},
+{'q', 0x400bf700, 0xc100ad60},
+{0, 0x40c22508, 0xc16401cc},
+{'8', 0xac4ecf1f, 0xd15cde2f},
+{'9', 0xfff4002d, 0xfff40076},
+{'l', 0x40228a40, 0x00000000},
+{'9', 0x00000015, 0x00030030},
+{'l', 0xc100ad60, 0x42158f20},
+{'8', 0x33f713fc, 0x2efd20fd},
+{'8', 0x1c0a1400, 0x061f060a},
+{'q', 0x4102ef48, 0x00000000},
+{0, 0x416f4b68, 0xc0b6db6e},
+{'q', 0x40d8b830, 0xc0b91d58},
+{0, 0x412b91d0, 0xc1801ce6},
+{'q', 0x407cd700, 0xc123ab1e},
+{0, 0x407cd700, 0xc1a8bf6f},
+{'q', 0x00000000, 0xc18e38e6},
+{0, 0xc13015b0, 0xc1dd3c0e},
+{'q', 0xc13015a8, 0xc11e0650},
+{0, 0xc1f2ae48, 0xc11e0650},
+{'q', 0xc1837fc6, 0x00000000},
+{0, 0xc1ed097a, 0x4100ad60},
+{'q', 0xc151f278, 0x40ff18d0},
+{0, 0xc1a5ed0b, 0x41b91d58},
+{'q', 0xc0f18d50, 0x41718d54},
+{0, 0xc0f18d50, 0x420609f0},
+{'q', 0x00000000, 0x415c1b15},
+{0, 0x40add3c0, 0x41c3d675},
+{'q', 0x40b015ac, 0x412b91d7},
+{0, 0x417df7e2, 0x4186522d},
+{'q', 0x4125ed08, 0x40bfe31c},
+{0, 0x41c3d676, 0x40bfe31c},
+{'q', 0x41270dfc, 0x00000000},
+{0, 0x4199827a, 0xc02b91d8},
+{'9', 0xffea0046, 0xffb50091},
+{'6', 0x001c0012, 0xfdd1ff4c},
+{'l', 0xc05d3c20, 0xbe907a80},
+{'q', 0xc112bcb8, 0x00000000},
+{0, 0xc1761124, 0x404b2cb0},
+{'q', 0xc0c466f8, 0x4046a8e0},
+{0, 0xc11e0654, 0x4146a8dc},
+{'q', 0xc06ac790, 0x4114fea8},
+{0, 0xc06ac790, 0x419e96ce},
+{'8', 0x542d5400, 0xef48001f},
+{'q', 0x40a70e00, 0xc00bf6f8},
+{0, 0x41186188, 0xc0bb5f46},
+{'l', 0x4101ce58, 0xc21667d8},
+{'@', 0x00000041, 0x00006856},/*        A        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'l', 0xc181ce55, 0x4237b426},
+{'l', 0x4203c804, 0x00000000},
+{'l', 0xc185c1b2, 0xc237b426},
+{'@', 0x00000042, 0x0000605d},/*        B        x-advance: 96.363281 */
+{'M', 0x40853137, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'4', 0xfff2ff9f, 0xffe30000},
+{'l', 0x422cfb09, 0x00000000},
+{'q', 0x418fea54, 0x00000000},
+{0, 0x41d282f0, 0x40ab91e0},
+{'q', 0x41053138, 0x40a94fe0},
+{0, 0x41053138, 0x4186e2a8},
+{'q', 0x00000000, 0x41053130},
+{0, 0xc0a4cc20, 0x4162e0d4},
+{'q', 0xc0a28a20, 0x40bb5f48},
+{0, 0xc16522c0, 0x40fa9500},
+{'q', 0x414c4da8, 0x3fab91e0},
+{0, 0x419e0650, 0x40ef4b68},
+{'q', 0x40df7e00, 0x40c22508},
+{0, 0x40df7e00, 0x417a9500},
+{'q', 0x00000000, 0x4159d92c},
+{0, 0xc1174090, 0x41a55c8f},
+{'9', 0x0037ffb5, 0x0037ff25},
+{'4', 0xfffdff0f, 0x0000ff70},
+{'m', 0x428d17ee, 0xc1d79741},
+{'q', 0x00000000, 0xc11f2746},
+{0, 0xc0d43460, 0xc16885a6},
+{'9', 0xffdbffcb, 0xffdbff57},
+{'4', 0x0000ff79, 0x013e0000},
+{'q', 0x411bc466, 0x3ed8b800},
+{0, 0x41a5ed09, 0x3ed8b800},
+{'q', 0x41410410, 0x00000000},
+{0, 0x41907ad0, 0xc0a28a28},
+{'9', 0xffd7002f, 0xff81002f},
+{'m', 0xc0e401d0, 0xc232e812},
+{'q', 0x00000000, 0xc10ad608},
+{0, 0xc0add3c8, 0xc14a0bc0},
+{'9', 0xffe1ffd5, 0xffe1ff73},
+{'4', 0x0000ff8c, 0x011e0000},
+{'l', 0x4177321e, 0x00000000},
+{'q', 0x4136db6c, 0x00000000},
+{0, 0x4186522c, 0xc0907ad0},
+{'q', 0x40add3c8, 0xc0907ad0},
+{0, 0x40add3c8, 0xc16ac78c},
+{'@', 0x00000043, 0x0000605d},/*        C        x-advance: 96.363281 */
+{'M', 0x425a69a7, 0x3fb49983},
+{'q', 0xc1b7fc64, 0x00000000},
+{0, 0xc20f59da, 0xc147c9d2},
+{'q', 0xc14d6e9c, 0xc148eac8},
+{0, 0xc14d6e9c, 0xc20c8774},
+{'q', 0x00000000, 0xc1c345fc},
+{0, 0x414587e6, 0xc2139572},
+{'q', 0x414587e8, 0xc148eac8},
+{0, 0x4212747e, 0xc148eac8},
+{'9', 0x00000075, 0x001c00fd},
+{'4', 0x00a50003, 0x0000ffdb},
+{'l', 0xc0077320, 0xc14466f0},
+{'8', 0xdba5e8d9, 0xf396f3cd},
+{'q', 0xc1910b4a, 0x00000000},
+{0, 0xc1d3a3e6, 0x412a70e0},
+{'q', 0xc1053136, 0x412a70e0},
+{0, 0xc1053136, 0x42041041},
+{'q', 0x00000000, 0x41a4cc15},
+{0, 0x410ad602, 0x41fbb5f6},
+{'q', 0x410bf6f8, 0x412dd3c0},
+{0, 0x41cb2cb4, 0x412dd3c0},
+{'q', 0x4100ad60, 0x00000000},
+{0, 0x4172ae48, 0xbff3cf40},
+{'9', 0xfff10039, 0xffd7005a},
+{'4', 0xff900014, 0x00000024},
+{'l', 0xbed8b800, 0x41b1c71c},
+{'q', 0xc1785318, 0x408e38e5},
+{0, 0xc2057975, 0x408e38e5},
+{'@', 0x00000044, 0x00006856},/*        D        x-advance: 104.335938 */
+{'M', 0x423c803a, 0xc2bd34d4},
+{'q', 0x41d161fc, 0x00000000},
+{0, 0x421b33ec, 0x413b5f48},
+{'q', 0x414a0bc0, 0x413a3e50},
+{0, 0x414a0bc0, 0x420c3f36},
+{'q', 0x00000000, 0x41bda12f},
+{0, 0xc1434600, 0x420fa217},
+{'9', 0x0061ff9f, 0x0061fede},
+{'l', 0xc2376be9, 0xbe907ac0},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'4', 0xfff2ff9f, 0xffe30000},
+{'6', 0x00000157, 0x01750125},
+{'q', 0x00000000, 0xc19e96ce},
+{0, 0xc12b91d8, 0xc1f06c5e},
+{'9', 0xffafffab, 0xffafff0d},
+{'4', 0x0000ff9b, 0x028c0000},
+{'q', 0x41077322, 0x3f107ad0},
+{0, 0x41a0d8b9, 0x3f107ad0},
+{'q', 0x418ad604, 0x00000000},
+{0, 0x41cc4da8, 0xc123ab1f},
+{'q', 0x41041040, 0xc123ab1e},
+{0, 0x41041040, 0xc1fd6765},
+{'@', 0x00000045, 0x00005841},/*        E        x-advance: 88.253906 */
+{'M', 0x40853137, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x41cc4da9, 0x00000000},
+{'l', 0x400bf6f0, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc00bf6f0, 0xc136db70},
+{'4', 0x0000ff34, 0x01340000},
+{'l', 0x4194fea5, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x4094feb0, 0x00000000},
+{'l', 0xbfab9200, 0x41c7c9d2},
+{'l', 0xc2971c72, 0x00000000},
+{'l', 0x36600000, 0xc06f4b67},
+{'@', 0x00000046, 0x0000505a},/*        F        x-advance: 80.351562 */
+{'M', 0x41ef4b67, 0xc229e065},
+{'l', 0x00000000, 0x42134d35},
+{'l', 0x417bb5f6, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc22241ec, 0x00000000},
+{'l', 0x35000000, 0xc06f4b67},
+{'l', 0x4133788e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x421dbe14},
+{'l', 0x41deed7d, 0x00000000},
+{'l', 0x400bf700, 0xc1349980},
+{'l', 0x4089b510, 0x00000000},
+{'l', 0x00000000, 0x41e885a4},
+{'l', 0xc089b510, 0x00000000},
+{'l', 0xc00bf700, 0xc136db6c},
+{'l', 0xc1deed7d, 0x00000000},
+{'@', 0x00000047, 0x00006856},/*        G        x-advance: 104.335938 */
+{'M', 0x42b529fe, 0xc09e0652},
+{'q', 0xc102ef50, 0x402b91d5},
+{0, 0xc18803a0, 0x40907acf},
+{'q', 0xc10d17e8, 0x3feac78f},
+{0, 0xc197d10a, 0x3feac78f},
+{'q', 0xc1b7fc64, 0x00000000},
+{0, 0xc20f59da, 0xc146a8dc},
+{'q', 0xc14d6e9c, 0xc146a8dc},
+{0, 0xc14d6e9c, 0xc20ccfb1},
+{'q', 0x00000000, 0xc1c6a8dc},
+{0, 0x4146a8dc, 0xc2146e2a},
+{'q', 0x4147c9d2, 0xc14587e8},
+{0, 0x42122c40, 0xc14587e8},
+{'9', 0x00000089, 0x00210109},
+{'4', 0x00a20000, 0x0000ffdb},
+{'l', 0xbff3cf40, 0xc13b5f40},
+{'q', 0xc09bc460, 0xc05d3c20},
+{0, 0xc13b5f48, 0xc0a94ff0},
+{'q', 0xc0d8b830, 0xbff3cf40},
+{0, 0xc16522c0, 0xbff3cf40},
+{'q', 0xc1907ad0, 0x00000000},
+{0, 0xc1d3a3e6, 0x412cb2c8},
+{'q', 0xc1053136, 0x412b91d8},
+{0, 0xc1053136, 0x42037fc7},
+{'q', 0x00000000, 0x41a67d85},
+{0, 0x4109b50e, 0x41fcd6eb},
+{'q', 0x4109b50c, 0x412b91d6},
+{0, 0x41cbbd2e, 0x412b91d6},
+{'8', 0xf563002f, 0xe54ff533},
+{'l', 0x00000000, 0xc1d706c7},
+{'l', 0xc1422508, 0xbfeac780},
+{'l', 0x00000000, 0xc073cf40},
+{'l', 0x420baebc, 0x00000000},
+{'l', 0x00000000, 0x4073cf40},
+{'l', 0xc113ddb0, 0x3feac780},
+{'l', 0x00000000, 0x41f6112a},
+{'@', 0x00000048, 0x00006856},/*        H        x-advance: 104.335938 */
+{'M', 0x40853137, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x421788ce, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422506, 0x3feac780},
+{'l', 0x00000000, 0x4214b668},
+{'l', 0x42320f5a, 0x00000000},
+{'l', 0x00000000, 0xc214b668},
+{'l', 0xc1422508, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x42174090, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422500, 0x3feac780},
+{'l', 0x00000000, 0x42a6c5c2},
+{'l', 0x41422500, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174090, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x41422508, 0xbff3cf3e},
+{'l', 0x00000000, 0xc21f6f86},
+{'l', 0xc2320f5a, 0x00000000},
+{'l', 0xb6000000, 0x421f6f86},
+{'l', 0x41422506, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc21788ce, 0x00000000},
+{'@', 0x00000049, 0x0000301c},/*        I        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0xc0b49983},
+{'l', 0x41422508, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422508, 0x3feac780},
+{'l', 0x00000000, 0x42a6c5c2},
+{'@', 0x0000004a, 0x00003839},/*        J        x-advance: 56.222656 */
+{'M', 0x41e764b0, 0xc2b20f5a},
+{'l', 0xc1422508, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x42119bc5, 0x00000000},
+{'4', 0x001d0000, 0x000effab},
+{'l', 0x00000000, 0x426a3716},
+{'q', 0x00000000, 0x4117408e},
+{0, 0xc0391d50, 0x4184a0ba},
+{'8', 0x59ba38e9, 0x209820d2},
+{'9', 0x0000ffb8, 0xfff0ff8c},
+{'4', 0xff770000, 0x00000025},
+{'l', 0x40077322, 0x411ce55c},
+{'8', 0x141e0c0a, 0x072b0713},
+{'q', 0x411e0654, 0x00000000},
+{0, 0x411e0654, 0xc156764c},
+{'l', 0x00000000, 0xc28df0a6},
+{'@', 0x0000004b, 0x00006856},/*        K        x-advance: 104.335938 */
+{'M', 0x42bee644, 0xc2bd34d4},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc12ef4b8, 0x3feac780},
+{'l', 0xc2013ddb, 0x41fcd6ea},
+{'l', 0x4221b171, 0x424f200f},
+{'l', 0x4123ab20, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1b91d5c, 0x00000000},
+{'l', 0xc21425ec, 0xc23f52a0},
+{'l', 0xc14c4daa, 0x4123ab20},
+{'l', 0x00000000, 0x41ffa94f},
+{'l', 0x4158b836, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc21d2d9a, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x421788ce, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422506, 0x3feac780},
+{'l', 0x00000000, 0x42325797},
+{'l', 0x423529fc, 0xc2325797},
+{'l', 0xc1161f98, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41ed097c, 0x00000000},
+{'@', 0x0000004c, 0x00005841},/*        L        x-advance: 88.253906 */
+{'M', 0x42320f5a, 0xc2b5ba78},
+{'4', 0x000eff8c, 0x02970000},
+{'l', 0x4194fea5, 0xb6400000},
+{'9', 0x00000078, 0xfff500b0},
+{'l', 0x408bf6f0, 0xc19d75d7},
+{'l', 0x4092bcc0, 0x00000000},
+{'l', 0xbfa28a40, 0x41d948b1},
+{'l', 0xc2944a0c, 0x00000000},
+{'l', 0x36600000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42216933, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'@', 0x0000004d, 0x00008077},/*        M        x-advance: 128.464844 */
+{'M', 0x42733ec3, 0x00000000},
+{'l', 0xc01e0660, 0x00000000},
+{'l', 0xc20a8dc5, 0xc2a2ae48},
+{'l', 0x00000000, 0x429764b0},
+{'l', 0x414b2cb4, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc200f59e, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x41e522c4, 0x00000000},
+{'l', 0x41f61128, 0x428fea54},
+{'l', 0x4206522d, 0xc28fea54},
+{'l', 0x41d8b834, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422500, 0x3feac780},
+{'l', 0x00000000, 0x42a6c5c2},
+{'l', 0x41422500, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc219827a, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0x00000000, 0xc29764b0},
+{'l', 0xc216f853, 0x42a2ae48},
+{'@', 0x0000004e, 0x00006856},/*        N        x-advance: 104.335938 */
+{'M', 0x42a2f685, 0xc2b20f5a},
+{'l', 0xc14b2cb0, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59c, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422500, 0x3feac780},
+{'l', 0x00000000, 0x42b20f5a},
+{'l', 0xc0dafa20, 0x00000000},
+{'l', 0xc2695e5e, 0xc2aa28a3},
+{'l', 0x00000000, 0x429edf0b},
+{'l', 0x414b2cb4, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc200f59e, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x41e522c4, 0x00000000},
+{'l', 0x4242b581, 0x428c1b18},
+{'l', 0x00000000, 0xc280f59e},
+{'@', 0x0000004f, 0x00006856},/*        O        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'q', 0xc0f18d50, 0x411f2748},
+{0, 0xc0f18d50, 0x42025ed0},
+{'@', 0x00000050, 0x0000505a},/*        P        x-advance: 80.351562 */
+{'M', 0x41ef4b67, 0xc2146e2b},
+{'l', 0x00000000, 0x41fbb5f5},
+{'l', 0x41706c5e, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc21f6f86, 0x00000000},
+{'l', 0x35000000, 0xc06f4b67},
+{'l', 0x4133788e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'4', 0xfff2ff9f, 0xffe30000},
+{'l', 0x420ec95e, 0x00000000},
+{'q', 0x420ad603, 0x00000000},
+{0, 0x420ad603, 0x41deed80},
+{'q', 0x00000000, 0x416885a4},
+{0, 0xc10d17f0, 0x41b0a626},
+{'9', 0x003cffbb, 0x003cff37},
+{'6', 0x0000ffab, 0xff1500f4},
+{'q', 0x00000000, 0xc13a3e50},
+{0, 0xc0add3c0, 0xc1853138},
+{'9', 0xffd8ffd5, 0xffd8ff6e},
+{'4', 0x0000ffc9, 0x01660000},
+{'l', 0x40eac78c, 0x00000000},
+{'q', 0x413ec228, 0x00000000},
+{0, 0x418c8774, 0xc0add3c0},
+{'q', 0x40b6db70, 0xc0add3c0},
+{0, 0x40b6db70, 0xc18da86a},
+{'@', 0x00000051, 0x00006856},/*        Q        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23d10b5},
+{'q', 0x00000000, 0xc241948b},
+{0, 0x4238d51c, 0xc241948b},
+{'q', 0x41b5ba78, 0x00000000},
+{0, 0x4209fd4a, 0x414466f0},
+{'q', 0x413c8038, 0x41434600},
+{0, 0x413c8038, 0x42107acf},
+{'9', 0x01150000, 0x0167ff38},
+{'l', 0x4061bfe0, 0x408bf6f6},
+{'8', 0x58543e31, 0x1a441a22},
+{'4', 0xfffe002e, 0x00250000},
+{'8', 0x0dcf05f4, 0x07c207dd},
+{'8', 0xf4b900d8, 0xd6c2f3e1},
+{'q', 0xc07cd6e0, 0xc06ac790},
+{0, 0xc1531368, 0xc1761128},
+{'q', 0xc0228a30, 0x3e907acc},
+{0, 0xc0bda130, 0x3e907acc},
+{'q', 0xc1b529fe, 0x00000000},
+{0, 0xc209b50e, 0xc14587e7},
+{'9', 0xff9dffa2, 0xfedeffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af3},
+{0, 0x40f3cf3c, 0x4203c804},
+{'q', 0x40f3cf40, 0x41228a28},
+{0, 0x41bec226, 0x41228a28},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc1216933},
+{'q', 0x40f61130, 0xc1216933},
+{0, 0x40f61130, 0xc2041041},
+{'q', 0x00000000, 0xc1b64af2},
+{0, 0xc0f85310, 0xc202ef4b},
+{'q', 0xc0f61130, 0xc1204840},
+{0, 0xc1be31ac, 0xc1204840},
+{'q', 0xc181ce56, 0x00000000},
+{0, 0xc1bec226, 0x41216930},
+{'q', 0xc0f3cf3c, 0x41204840},
+{0, 0xc0f3cf3c, 0x4202a70f},
+{'@', 0x00000052, 0x0000605d},/*        R        x-advance: 96.363281 */
+{'M', 0x41ef4b67, 0xc225ed0a},
+{'l', 0x00000000, 0x420f59da},
+{'l', 0x416522c2, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc21c9d1f, 0x00000000},
+{'l', 0x35000000, 0xc06f4b67},
+{'l', 0x4133788e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'4', 0xfff2ff9f, 0xffe30000},
+{'l', 0x422362e1, 0x00000000},
+{'q', 0x418e38e4, 0x00000000},
+{0, 0x41d1f274, 0x40bfe320},
+{'q', 0x41077320, 0x40bfe320},
+{0, 0x41077320, 0x419a12f8},
+{'q', 0x00000000, 0x41174090},
+{0, 0xc0a4cc10, 0x4182ef4a},
+{'9', 0x0036ffd7, 0x004cff8e},
+{'l', 0x41ccde22, 0x42174091},
+{'l', 0x4123ab20, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'4', 0x0000ff4b, 0xfeb5ff2c},
+{'6', 0x0000ff78, 0xff29011e},
+{'q', 0x00000000, 0xc12cb2d0},
+{0, 0xc0a94ff0, 0xc174f038},
+{'9', 0xffdcffd7, 0xffdcff6d},
+{'4', 0x0000ffa0, 0x01430000},
+{'l', 0x4147c9d2, 0x00000000},
+{'q', 0x414a0bbc, 0x00000000},
+{0, 0x418f59da, 0xc094fea8},
+{'q', 0x40ab91d8, 0xc0974090},
+{0, 0x40ab91d8, 0xc17df7dc},
+{'@', 0x00000053, 0x0000505a},/*        S        x-advance: 80.351562 */
+{'M', 0x411ce55d, 0xc1cbbd2e},
+{'4', 0x00000024, 0x00660013},
+{'8', 0x2e471a14, 0x14651433},
+{'q', 0x411e0654, 0x00000000},
+{0, 0x41761128, 0xc0a0483d},
+{'8', 0x912cd82c, 0xbdefd800},
+{'8', 0xd4d3e6f0, 0xe1c1eee5},
+{'8', 0xe7b7f4dd, 0xe4b8f4db},
+{'8', 0xd8c1f1dd, 0xc5d3e8e5},
+{'q', 0xc0077320, 0xc0907ad8},
+{0, 0xc0077320, 0xc13136a4},
+{'q', 0x00000000, 0xc1349980},
+{0, 0x41077322, 0xc18da868},
+{'q', 0x41077322, 0xc0cd6ea0},
+{0, 0x41bbefc0, 0xc0cd6ea0},
+{'9', 0x0000005b, 0x001800c6},
+{'4', 0x009d0000, 0x0000ffdc},
+{'l', 0xc01e0660, 0xc1391d58},
+{'q', 0xc0e643b8, 0xc0a70e00},
+{0, 0xc18e38e2, 0xc0a70e00},
+{'q', 0xc1174094, 0x00000000},
+{0, 0xc16d097e, 0x40785300},
+{'8', 0x54d61ed6, 0x3c102400},
+{'8', 0x292d1811, 0x1d3f101c},
+{'8', 0x19490c24, 0x1d490c25},
+{'8', 0x2a3f1024, 0x3e2d191c},
+{'q', 0x400bf700, 0x4092bcc0},
+{0, 0x400bf700, 0x4135ba7a},
+{'q', 0x00000000, 0x415afa22},
+{0, 0xc1065230, 0x41a9e066},
+{'q', 0xc106522c, 0x40ef4b65},
+{0, 0xc1c1948c, 0x40ef4b65},
+{'q', 0xc0f3cf3c, 0xb4000000},
+{0, 0xc174f032, 0xbfab91d7},
+{'q', 0xc0f61128, 0xbfab91d6},
+{0, 0xc15afa21, 0xc06ac790},
+{'l', 0x00000000, 0xc1aef4b7},
+{'@', 0x00000054, 0x00005841},/*        T        x-advance: 88.253906 */
+{'M', 0x41b1c71d, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'4', 0xfff10078, 0xfd690000},
+{'l', 0xc06643b0, 0x00000000},
+{'9', 0x0000ff72, 0x000bff3d},
+{'l', 0xbff3cf40, 0x416be888},
+{'l', 0xc0974090, 0x00000000},
+{'l', 0xb4800000, 0xc1b1c720},
+{'l', 0x42a67d85, 0x00000000},
+{'4', 0x00b10000, 0x0000ffda},
+{'l', 0xbff3cf40, 0xc16be888},
+{'q', 0xc0077320, 0xbefcd700},
+{0, 0xc113ddb0, 0xbf58b880},
+{'9', 0xfffdffc7, 0xfffdff84},
+{'l', 0xc05d3c10, 0x00000000},
+{'l', 0x00000000, 0x42a580ae},
+{'l', 0x41706c60, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc22eac7a, 0x00000000},
+{'@', 0x00000055, 0x00006856},/*        U        x-advance: 104.335938 */
+{'M', 0x42a38700, 0xc2b20f5a},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59e, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42620821},
+{'q', 0x00000000, 0x4188039c},
+{0, 0xc1161fa0, 0x41cbbd2d},
+{'q', 0xc114fea8, 0x41077322},
+{0, 0xc1d8b836, 0x41077322},
+{'q', 0xc196b016, 0x34c00000},
+{0, 0xc1e1bfe3, 0xc1077322},
+{'9', 0xffbcffb6, 0xff3fffb6},
+{'l', 0x00000000, 0xc26764b0},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42632916},
+{'q', 0x00000000, 0x41cdff1a},
+{0, 0x41c85a4d, 0x41cdff1a},
+{'q', 0x4158b838, 0xb5800000},
+{0, 0x41a5ed08, 0xc0cd6ea0},
+{'q', 0x40e885b0, 0xc0cd6ea0},
+{0, 0x40e885b0, 0xc1986186},
+{'l', 0x00000000, 0xc2644a0c},
+{'@', 0x00000056, 0x00006856},/*        V        x-advance: 104.335938 */
+{'M', 0x42cd6e9e, 0xc2bd34d4},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc125ed08, 0x3feac780},
+{'l', 0xc2181949, 0x42b66f12},
+{'l', 0xc06643b0, 0xb5e00000},
+{'l', 0xc219caba, 0xc2b66f12},
+{'l', 0xc12a70df, 0xbfeac780},
+{'l', 0x34800000, 0xc06f4b80},
+{'l', 0x4218f201, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc14b2cb2, 0x3feac780},
+{'l', 0x41e522c5, 0x428b425f},
+{'l', 0x41e4924a, 0xc28b425f},
+{'l', 0xc146a8e0, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41f61128, 0x00000000},
+{'@', 0x00000057, 0x0000885d},/*        W        x-advance: 136.363281 */
+{'M', 0x42c1dcc9, 0x400bf6f9},
+{'l', 0xc06f4b60, 0x00000000},
+{'l', 0xc1c466f4, 0xc2825ed1},
+{'l', 0xc1c97b42, 0x42825ed1},
+{'l', 0xc06f4b60, 0xb5e00000},
+{'l', 0xc1fa9500, 0xc2b66f12},
+{'l', 0xc1041041, 0xbfeac780},
+{'l', 0x34700000, 0xc06f4b80},
+{'l', 0x42107acf, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc15e5d04, 0x3feac780},
+{'l', 0x41b40908, 0x42855556},
+{'l', 0x41cbbd2e, 0xc283378a},
+{'l', 0x404b2cc0, 0x00000000},
+{'l', 0x41c466f0, 0x4283378a},
+{'l', 0x41ab91d4, 0xc2855556},
+{'l', 0xc16be880, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41fa94fc, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1041040, 0x3feac780},
+{'l', 0xc1f7321c, 0x42b66f12},
+{'@', 0x00000058, 0x00006856},/*        X        x-advance: 104.335938 */
+{'M', 0x41b2e812, 0xc0b49983},
+{'l', 0x413b5f44, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f7321e, 0x00000000},
+{'l', 0x35400000, 0xc06f4b67},
+{'l', 0x41270dff, 0xbff3cf3e},
+{'l', 0x4200ad60, 0xc22b015b},
+{'l', 0xc1db8a9c, 0xc2228a29},
+{'l', 0xc12a70e0, 0xbfeac780},
+{'l', 0x35000000, 0xc06f4b80},
+{'l', 0x421c0ca5, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc13fe31c, 0x3feac780},
+{'l', 0x419ce55c, 0x41e9a69a},
+{'l', 0x41af8532, 0xc1e9a69a},
+{'l', 0xc13b5f48, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41f7c29c, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1270e00, 0x3feac780},
+{'l', 0xc1d4c4dc, 0x420da869},
+{'l', 0x42021694, 0x423fe31b},
+{'l', 0x412b91d0, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc21c0ca4, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x413fe320, 0xbff3cf3e},
+{'l', 0xc1c6a8de, 0xc212bcbb},
+{'l', 0xc1dc1b18, 0x4212bcbb},
+{'@', 0x00000059, 0x00006856},/*        Y        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc214fea5},
+{'l', 0x00000000, 0x41fcd6e9},
+{'l', 0x41706c5c, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc22eac7a, 0x00000000},
+{'l', 0x36000000, 0xc06f4b67},
+{'l', 0x41706c5e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc1f97409},
+{'l', 0xc204e8fa, 0xc250d17f},
+{'l', 0xc12a70df, 0xbfeac780},
+{'l', 0x34800000, 0xc06f4b80},
+{'l', 0x42200001, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc14b2cb4, 0x3feac780},
+{'l', 0x41d948b0, 0x422eac79},
+{'l', 0x41ce8f94, 0xc22eac79},
+{'l', 0xc13fe318, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41f61128, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc125ed08, 0x3feac780},
+{'l', 0xc1f9740a, 0x424f200f},
+{'@', 0x0000005a, 0x00005841},/*        Z        x-advance: 88.253906 */
+{'M', 0x40dd3c0d, 0xc0d43460},
+{'4', 0xfd7101a8, 0x0000ff73},
+{'9', 0x0000ff75, 0x000bff41},
+{'l', 0xc00bf6f8, 0x416e2a70},
+{'l', 0xc09bc466, 0x00000000},
+{'l', 0x00000000, 0xc1b2e814},
+{'l', 0x4280d17f, 0x00000000},
+{'4', 0x00300000, 0x0294fe55},
+{'l', 0x41a3ab1e, 0x00000000},
+{'q', 0x4102ef4c, 0x00000000},
+{0, 0x4184a0bc, 0xbf46a8d8},
+{'9', 0xfffa0043, 0xfff4005f},
+{'l', 0x40853140, 0xc1907ad0},
+{'l', 0x409e0650, 0x00000000},
+{'l', 0xbff3cf40, 0x41d282f0},
+{'l', 0xc28f119c, 0x00000000},
+{'l', 0xb5c00000, 0xc0d43460},
+{'@', 0x0000005b, 0x0000301c},/*        [        x-advance: 48.109375 */
+{'M', 0x412b91d6, 0x419aa372},
+{'l', 0x00000000, 0xc2ef2748},
+{'l', 0x4200ad60, 0x00000000},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc1a79e7b, 0x40391d60},
+{'l', 0x00000000, 0x42d6522d},
+{'l', 0x41a79e7b, 0x40391d50},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc200ad60, 0x00000000},
+{'@', 0x0000005c, 0x00002824},/*       \         x-advance: 40.140625 */
+{'M', 0x00000000, 0xc2be79e8},
+{'l', 0x40dd3c0d, 0x00000000},
+{'l', 0x4204e8f9, 0x42c14c4e},
+{'l', 0xc0e1bfe0, 0x34c00000},
+{'l', 0xc204587f, 0xc2c14c4e},
+{'@', 0x0000005d, 0x0000301c},/*        ]        x-advance: 48.109375 */
+{'M', 0x40a70dff, 0x419aa372},
+{'l', 0x00000000, 0xc0543460},
+{'l', 0x41a79e7a, 0xc0391d5c},
+{'l', 0x00000000, 0xc2d6522d},
+{'l', 0xc1a79e7a, 0xc0391d60},
+{'l', 0xb5000000, 0xc0543460},
+{'l', 0x4200ad60, 0x00000000},
+{'l', 0x00000000, 0x42ef2748},
+{'l', 0xc200ad60, 0x36800000},
+{'@', 0x0000005e, 0x000043cb},/*        ^        x-advance: 67.792969 */
+{'M', 0x4200f59e, 0xc2bd34d4},
+{'l', 0x405d3c10, 0x00000000},
+{'l', 0x41f18d52, 0x4286522d},
+{'l', 0xc0e885a8, 0xb6000000},
+{'l', 0xc1c587e8, 0xc2644a0c},
+{'l', 0xc1c587e6, 0x42644a0c},
+{'l', 0xc0e643ba, 0xb6000000},
+{'l', 0x41f18d52, 0xc286522d},
+{'@', 0x0000005f, 0x0000483d},/*        _        x-advance: 72.238281 */
+{'M', 0xbf907acf, 0x4194fea5},
+{'l', 0x00000000, 0xc0e643b8},
+{'l', 0x4294fea5, 0x00000000},
+{'l', 0x00000000, 0x40e643b8},
+{'l', 0xc294fea5, 0x00000000},
+{'@', 0x00000060, 0x0000301c},/*        `        x-advance: 48.109375 */
+{'M', 0x42057974, 0xc29de234},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x00000061, 0x00004020},/*        a        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'q', 0x4061bff0, 0xbf907ad0},
+{0, 0x40e1bfe8, 0xc0349980},
+{'l', 0x00000000, 0xc1bc803b},
+{'@', 0x00000062, 0x0000483d},/*        b        x-advance: 72.238281 */
+{'M', 0x411aa372, 0xc2bec225},
+{'l', 0xc11aa372, 0xbfd8b840},
+{'4', 0xffe70000, 0x000000ab},
+{'l', 0x00000000, 0x41bda130},
+{'q', 0x00000000, 0x4073cf40},
+{0, 0xbed8b840, 0x415f7df8},
+{'q', 0x40e1bfe4, 0xc0b015b0},
+{0, 0x418e38e4, 0xc0b015b0},
+{'q', 0x4158b838, 0x00000000},
+{0, 0x41a5ed0a, 0x41041044},
+{'q', 0x40e885a0, 0x4102ef4c},
+{0, 0x40e885a0, 0x41c6a8dc},
+{'q', 0x00000000, 0x418ec960},
+{0, 0xc0ff18d0, 0x41d948b2},
+{'q', 0xc0fcd6f0, 0x4113ddb0},
+{0, 0xc1b76bea, 0x4113ddb0},
+{'8', 0xf69500d0, 0xe49af6c6},
+{'6', 0xfd210000, 0x01e30162},
+{'q', 0x00000000, 0xc14fb088},
+{0, 0xc0907ad0, 0xc19aa370},
+{'8', 0xce91cedc, 0x06be00df},
+{'9', 0x0005ffe0, 0x000cffd1},
+{'l', 0x00000000, 0x42523ab2},
+{'q', 0x40bda130, 0x3f907acc},
+{0, 0x4162e0da, 0x3f907acc},
+{'q', 0x411bc468, 0x00000000},
+{0, 0x4161bfe4, 0xc0f3cf3d},
+{'q', 0x408bf6f8, 0xc0f3cf3e},
+{0, 0x408bf6f8, 0xc1b5ba7a},
+{'@', 0x00000063, 0x00004020},/*        c        x-advance: 64.125000 */
+{'M', 0x426ebaec, 0xc080ad60},
+{'8', 0x20b414e5, 0x0b9d0bd0},
+{'q', 0xc200f59e, 0x00000000},
+{0, 0xc200f59e, 0xc20c3f36},
+{'q', 0x36000000, 0xc184a0bc},
+{0, 0x4102ef4e, 0xc1cbbd2e},
+{'q', 0x41041040, 0xc10f59dc},
+{0, 0x41bc8039, 0xc10f59dc},
+{'9', 0x0000004c, 0x001100a6},
+{'4', 0x00930000, 0x0000ffe1},
+{'l', 0xc0422500, 0xc13b5f44},
+{'q', 0xc0bb5f40, 0xc0543460},
+{0, 0xc1609eec, 0xc0543460},
+{'q', 0xc1974091, 0x00000000},
+{0, 0xc1974091, 0x41e643ba},
+{'q', 0x00000000, 0x416f4b68},
+{0, 0x40b6db6c, 0x41ab015c},
+{'q', 0x40b91d58, 0x40cb2cb0},
+{0, 0x418ec95e, 0x40cb2cb0},
+{'q', 0x4124cc14, 0x00000000},
+{0, 0x418f59da, 0xc014fea4},
+{'l', 0x00000000, 0x40877322},
+{'@', 0x00000064, 0x0000483d},/*        d        x-advance: 72.238281 */
+{'M', 0x424c056b, 0xc09e0652},
+{'q', 0xc0ff18d0, 0x40cb2cb3},
+{0, 0xc194fea4, 0x40cb2cb3},
+{'q', 0xc1d948b2, 0xb4000000},
+{0, 0xc1d948b2, 0xc207bb5f},
+{'q', 0xb5000000, 0xc18b667e},
+{0, 0x40f61128, 0xc1d3a3e6},
+{'q', 0x40f61128, 0xc1119bc8},
+{0, 0x41b529fe, 0xc1119bc8},
+{'q', 0x40f3cf38, 0x00000000},
+{0, 0x4177321c, 0x3fcfb0c0},
+{'9', 0xffeefffd, 0xffa3fffd},
+{'l', 0x00000000, 0xc189b50c},
+{'l', 0xc1325798, 0xbfd8b840},
+{'l', 0x00000000, 0xc04b2cc0},
+{'l', 0x41b6db6e, 0x00000000},
+{'l', 0x00000000, 0x42be9e07},
+{'l', 0x4102ef48, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6c},
+{'6', 0xffd9fffa, 0xff24fef8},
+{'q', 0xb6000000, 0x4156764a},
+{0, 0x40907acc, 0x41a0483d},
+{'q', 0x40907ad0, 0x40d1f274},
+{0, 0x415d3c0e, 0x40d1f274},
+{'9', 0x0000003f, 0xffea0072},
+{'l', 0x00000000, 0xc251aa37},
+{'q', 0xc0c8eac8, 0xbf998280},
+{0, 0xc16522c4, 0xbf998280},
+{'q', 0xc192bcbb, 0x00000000},
+{0, 0xc192bcbb, 0x41ee2a72},
+{'@', 0x00000065, 0x00004020},/*        e        x-advance: 64.125000 */
+{'M', 0x4192bcba, 0xc2057974},
+{'l', 0x00000000, 0x3fa28a20},
+{'q', 0x00000000, 0x411bc468},
+{0, 0x40077320, 0x4172ae48},
+{'8', 0x41352a11, 0x165e1624},
+{'8', 0xfb48001e, 0xf544fb29},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1eb711e5, 0x0ca20cd2},
+{'q', 0xc177321e, 0x00000000},
+{0, 0xc1b529fe, 0xc1053137},
+{'q', 0xc0e401cd, 0xc1053136},
+{0, 0xc0e401cd, 0xc1d5e5d1},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40e885a5, 0xc1cf200e},
+{'q', 0x40e885a4, 0xc108941c},
+{0, 0x41a5ed0a, 0xc108941c},
+{'9', 0x000000cb, 0x00e700cb},
+{'4', 0x002e0000, 0x0000feba},
+{'m', 0x4174f034, 0xc1e885a6},
+{'q', 0xc0eac790, 0x00000000},
+{0, 0xc1349984, 0x40bda130},
+{'9', 0x002fffe1, 0x008bffe1},
+{'l', 0x41e2e0d8, 0x00000000},
+{'q', 0x00000000, 0xc14a0bbc},
+{0, 0xc04fb080, 0xc18fea54},
+{'q', 0xc04fb090, 0xc0add3c0},
+{0, 0xc11f2748, 0xc0add3c0},
+{'@', 0x00000066, 0x0000301c},/*        f        x-advance: 48.109375 */
+{'M', 0x417df7e0, 0xc2718d52},
+{'0', 0xe50000a5, 0xdb00ea5b},
+{'q', 0x00000000, 0xc16ac790},
+{0, 0x40b91d58, 0xc1b49984},
+{'q', 0x40bb5f44, 0xc0fcd6e0},
+{0, 0x4182ef4c, 0xc0fcd6e0},
+{'9', 0x0000002b, 0x000a0050},
+{'4', 0x00730000, 0x0000ffe5},
+{'l', 0xc04b2cb0, 0xc10ad608},
+{'8', 0xf5d2f5ed, 0x1fce00dd},
+{'9', 0x001ffff2, 0x0076fff2},
+{'l', 0x00000000, 0x413015b0},
+{'l', 0x418d17ee, 0x00000000},
+{'l', 0x00000000, 0x40bda130},
+{'l', 0xc18d17ee, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x416522c4, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc20f59d9, 0x00000000},
+{'l', 0xb5800000, 0xc04b2cb3},
+{'l', 0x411ce55d, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'@', 0x00000067, 0x0000483d},/*        g        x-advance: 72.238281 */
+{'M', 0x427580ae, 0xc235723b},
+{'q', 0x00000000, 0x4136db70},
+{0, 0xc0dafa20, 0x418a4588},
+{'q', 0xc0dafa28, 0x40bb5f44},
+{0, 0xc19d75d8, 0x40bb5f44},
+{'9', 0x0000ffd2, 0xfff8ffab},
+{'l', 0xc08e38e4, 0x4113ddb0},
+{'8', 0x12160901, 0x08320814},
+{'l', 0x419ce55c, 0x00000000},
+{'q', 0x412b91d8, 0x00000000},
+{0, 0x417df7e4, 0x4094fea6},
+{'8', 0x66292529, 0x67df3b00},
+{'q', 0xc082ef48, 0x40b015ac},
+{0, 0xc1410410, 0x41089416},
+{'q', 0xc0ff18d0, 0x403da130},
+{0, 0xc19aa372, 0x403da130},
+{'q', 0xc158b834, 0x00000000},
+{0, 0xc1a55c8e, 0xc0853134},
+{'8', 0xa2c8dfc8, 0xc614e300},
+{'8', 0xbc4ae314, 0xdccaf6e0},
+{'9', 0xffe7ffea, 0xffc9ffea},
+{'l', 0x41325798, 0xc148eac9},
+{'q', 0xc1325798, 0xc0a70dfc},
+{0, 0xc1325798, 0xc1a43b99},
+{'q', 0x00000000, 0xc12dd3c0},
+{0, 0x40dafa22, 0xc186522c},
+{'q', 0x40dd3c0e, 0xc0bda138},
+{0, 0x41a0483e, 0xc0bda138},
+{'8', 0x04350014, 0x09320320},
+{'4', 0xffc2007c, 0x00180013},
+{'l', 0xc11ce558, 0x41228a2c},
+{'9', 0x002a0025, 0x007c0025},
+{'m', 0xc0391d60, 0x425948b1},
+{'8', 0xceede000, 0xeec5eeed},
+{'l', 0xc1cd6e9e, 0xb3800000},
+{'8', 0x33da14e9, 0x3af21ff2},
+{'8', 0x45223000, 0x146b1422},
+{'q', 0x413c803c, 0x00000000},
+{0, 0x41910b4a, 0xc08bf6f8},
+{'9', 0xffde0033, 0xff9f0033},
+{'m', 0xc1bbefbe, 0xc2122c3f},
+{'8', 0xde56003d, 0x9519dd19},
+{'8', 0x96e6b500, 0xe0abe0e6},
+{'8', 0x20aa00c5, 0x6ae520e5},
+{'8', 0x6c1b4a00, 0x2156211b},
+{'@', 0x00000068, 0x0000483d},/*        h        x-advance: 72.238281 */
+{'M', 0x41b7fc64, 0xc28f119c},
+{'8', 0x54fd3a00, 0xd85be928},
+{'8', 0xf057f033, 0x28670044},
+{'9', 0x00280022, 0x00740022},
+{'l', 0x00000000, 0x422e643c},
+{'l', 0x4100ad60, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e4924a, 0x00000000},
+{'4', 0xffe70000, 0xfff20046},
+{'l', 0x00000000, 0xc22b015b},
+{'q', 0x00000000, 0xc1422508},
+{0, 0xc13b5f44, 0xc1422508},
+{'9', 0x0000ffcb, 0x0010ff82},
+{'l', 0x00000000, 0x42535ba8},
+{'l', 0x410f59d8, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e885a5, 0x00000000},
+{'l', 0x34800000, 0xc04b2cb3},
+{'l', 0x4106522d, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc2b4e1c0},
+{'l', 0xc11e0653, 0xbfd8b840},
+{'l', 0x34c00000, 0xc04b2cc0},
+{'l', 0x41acb2cc, 0x00000000},
+{'l', 0x00000000, 0x41e5b340},
+{'@', 0x00000069, 0x00002824},/*        i        x-advance: 40.140625 */
+{'M', 0x41d04104, 0xc09e0652},
+{'l', 0x4135ba78, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096cd0, 0x00000000},
+{'l', 0x35c00000, 0xc04b2cb3},
+{'l', 0x41349982, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc1161f9b, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a8},
+{'6', 0x01eb0000, 0xfd680005},
+{'8', 0x2aee1800, 0x12d512ee},
+{'8', 0xeed600e8, 0xd6eeeeee},
+{'8', 0xd512e700, 0xee2aee12},
+{'8', 0x122b0019, 0x2b121212},
+{'@', 0x0000006a, 0x00002824},/*        j        x-advance: 40.140625 */
+{'M', 0x41d827bc, 0x403015ac},
+{'q', 0x00000000, 0x415c1b17},
+{0, 0xc0ab91d8, 0x41a70e00},
+{'q', 0xc0a94fe8, 0x40e401cc},
+{0, 0xc1797409, 0x40e401cc},
+{'9', 0x0000ffde, 0xfff6ffaf},
+{'4', 0xff900000, 0x0000001a},
+{'l', 0x3ff3cf3e, 0x40f61128},
+{'8', 0x0f2e0f12, 0xdd320021},
+{'9', 0xffdd0010, 0xff8e0010},
+{'l', 0x00000000, 0xc2877322},
+{'l', 0xc11f2748, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000ad},
+{'6', 0x02280000, 0xfd2b0005},
+{'8', 0x2aee1800, 0x12d612ee},
+{'8', 0xeed500e7, 0xd6eeeeee},
+{'8', 0xd512e700, 0xee2bee12},
+{'8', 0x122a0018, 0x2b121212},
+{'@', 0x0000006b, 0x0000483d},/*        k        x-advance: 72.238281 */
+{'M', 0x41c22506, 0xc1ffa950},
+{'l', 0x41d948b2, 0xc1ea3716},
+{'l', 0xc0dd3c10, 0xbff3cf40},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41bb5f44, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc1041040, 0x3fcfb080},
+{'l', 0xc1974090, 0x419aa372},
+{'l', 0x41c22504, 0x42158f20},
+{'l', 0x40e643c0, 0x3fcfb09a},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1d948b2, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x40c22508, 0xbfe1bfe2},
+{'l', 0xc1919bc4, 0xc1e4924a},
+{'l', 0xc10ad604, 0x41186186},
+{'l', 0x00000000, 0x41986186},
+{'l', 0x40e1bfe4, 0x3fe1bfea},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1d948b1, 0x00000000},
+{'l', 0xb5000000, 0xc04b2cb3},
+{'l', 0x4106522c, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc2b4e1c0},
+{'l', 0xc11ce55d, 0xbfd8b840},
+{'l', 0x00000000, 0xc04b2cc0},
+{'l', 0x41ac2250, 0x00000000},
+{'l', 0x00000000, 0x42889418},
+{'@', 0x0000006c, 0x00002824},/*        l        x-advance: 40.140625 */
+{'M', 0x41cf200f, 0xc09e0652},
+{'l', 0x4135ba76, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096ccf, 0x00000000},
+{'l', 0xb5e00000, 0xc04b2cb3},
+{'l', 0x41349983, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc2b4e1c0},
+{'l', 0xc1349983, 0xbfd8b840},
+{'l', 0x34800000, 0xc04b2cc0},
+{'l', 0x41b7fc64, 0x00000000},
+{'l', 0x00000000, 0x42be9e07},
+{'@', 0x0000006d, 0x00007061},/*        m        x-advance: 112.378906 */
+{'M', 0x41b7fc64, 0xc273cf3d},
+{'8', 0xd859e82a, 0xf053f02f},
+{'8', 0x0e470026, 0x2e310e21},
+{'8', 0xd665e82b, 0xee61ee3a},
+{'9', 0x00000087, 0x009c0087},
+{'l', 0x00000000, 0x422e643c},
+{'l', 0x41089418, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1f0fcd8, 0x00000000},
+{'4', 0xffe70000, 0xfff2004f},
+{'l', 0x00000000, 0xc2294feb},
+{'8', 0x9fa69f00, 0x02de00f2},
+{'8', 0x05da02ed, 0x06db02ed},
+{'8', 0x05e303ef, 0x43091e09},
+{'l', 0x00000000, 0x422e643c},
+{'l', 0x411f2748, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'4', 0xffe70000, 0xfff2004e},
+{'l', 0x00000000, 0xc2294feb},
+{'8', 0xb9e8d200, 0xe7b9e7e9},
+{'9', 0x0000ffcf, 0x0010ff85},
+{'l', 0x00000000, 0x4251aa38},
+{'l', 0x411f274a, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1f06c5d, 0x00000000},
+{'l', 0xb5000000, 0xc04b2cb3},
+{'l', 0x4106522c, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc106522c, 0xbfe1bfe0},
+{'l', 0xb5000000, 0xc04b2cb0},
+{'l', 0x419b33ec, 0x00000000},
+{'l', 0x3f107ae0, 0x40ab91d8},
+{'@', 0x0000006e, 0x0000483d},/*        n        x-advance: 72.238281 */
+{'M', 0x41b6db6e, 0xc273cf3d},
+{'8', 0xd85ce82b, 0xf051f031},
+{'q', 0x4109b50c, 0x00000000},
+{0, 0x414fb088, 0x40a04848},
+{'9', 0x00280022, 0x00740022},
+{'l', 0x00000000, 0x422e643c},
+{'l', 0x4100ad60, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e49248, 0x00000000},
+{'4', 0xffe70000, 0xfff20046},
+{'l', 0x00000000, 0xc2294feb},
+{'8', 0xb7e9d200, 0xe5bae5ea},
+{'9', 0x0000ffce, 0x0010ff84},
+{'l', 0x00000000, 0x42535ba8},
+{'l', 0x410f59d8, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e522c4, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x40ff18d6, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc0ff18d6, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41974091, 0x00000000},
+{'l', 0x3f228a20, 0x40ab91d8},
+{'@', 0x0000006f, 0x0000483d},/*        o        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'q', 0x40907ad0, 0xc0dd3c0c},
+{0, 0x40907ad0, 0xc1b3788d},
+{'@', 0x00000070, 0x0000483d},/*        p        x-advance: 72.238281 */
+{'M', 0x412b91d6, 0xc27580ae},
+{'l', 0xc0f18d52, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x00000094},
+{'l', 0x3e107a80, 0x40785310},
+{'8', 0xe03fec17, 0xf451f428},
+{'q', 0x414b2cb4, 0x00000000},
+{0, 0x419ce55e, 0x410d17f0},
+{'q', 0x40df7df8, 0x410d17f0},
+{0, 0x40df7df8, 0x41ca9c3a},
+{'q', 0x00000000, 0x4186e2a6},
+{0, 0xc0f3cf40, 0x41d0d17e},
+{'q', 0xc0f18d50, 0x4113ddb0},
+{0, 0xc1aef4b6, 0x4113ddb0},
+{'q', 0xc0ff18d8, 0x34c00000},
+{0, 0xc172ae4a, 0xbfc6a8da},
+{'9', 0x00280003, 0x003f0003},
+{'l', 0x00000000, 0x418f59d9},
+{'l', 0x41391d58, 0x3fd8b840},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc1fcd6e9, 0x00000000},
+{'4', 0xffe60000, 0xfff30043},
+{'6', 0xfd470000, 0x00db0159},
+{'q', 0xb6800000, 0xc158b838},
+{0, 0xc08e38f0, 0xc1a0d8ba},
+{'8', 0xcb96cbde, 0x129200be},
+{'l', 0x00000000, 0x4253ec22},
+{'q', 0x40c8eac8, 0x3f998284},
+{0, 0x415c1b18, 0x3f998284},
+{'q', 0x418e38e4, 0x00000000},
+{0, 0x418e38e4, 0xc1ee2a70},
+{'@', 0x00000071, 0x0000483d},/*        q        x-advance: 72.238281 */
+{'M', 0x42656b02, 0xc28afa22},
+{'l', 0x409e0650, 0x00000000},
+{'l', 0x00000000, 0x42be79e8},
+{'l', 0x40eac790, 0x3fd8b850},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc1e12f68, 0x00000000},
+{'4', 0xffe60000, 0xfff30048},
+{'l', 0x00000000, 0xc1934d35},
+{'q', 0x00000000, 0xc0dafa21},
+{0, 0x3f349980, 0xc13c803a},
+{'q', 0xc0f18d50, 0x40bb5f45},
+{0, 0xc1974090, 0x40bb5f45},
+{'q', 0xc1d948b2, 0xb4000000},
+{0, 0xc1d948b2, 0xc2096cd0},
+{'q', 0xb5000000, 0xc188039c},
+{0, 0x40f3cf3c, 0xc1d04104},
+{'q', 0x40f61128, 0xc1119bc8},
+{0, 0x41b3788d, 0xc1119bc8},
+{'9', 0x0000003f, 0x000c007d},
+{'6', 0xffe80032, 0x0124fec5},
+{'q', 0x36000000, 0x41579742},
+{0, 0x408e38e8, 0x41a1f9ae},
+{'8', 0x366f3624, 0xfb410021},
+{'9', 0xfffb0020, 0xfff40031},
+{'l', 0x00000000, 0xc2535ba8},
+{'q', 0xc0c8eac8, 0xbf998280},
+{0, 0xc16522c4, 0xbf998280},
+{'q', 0xc192bcbb, 0x00000000},
+{0, 0xc192bcbb, 0x41eac790},
+{'@', 0x00000072, 0x0000301c},/*        r        x-advance: 48.109375 */
+{'M', 0x423b5f44, 0xc28827bc},
+{'4', 0x008f0000, 0x0000ffe8},
+{'l', 0xc082ef48, 0xc0f85318},
+{'8', 0x07bd00e4, 0x13be07da},
+{'l', 0x00000000, 0x42461862},
+{'l', 0x4135ba78, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f5, 0x00000000},
+{'l', 0x34800000, 0xc04b2cb3},
+{'l', 0x4106522d, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc106522d, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x0000009a},
+{'l', 0x3f228a20, 0x41041040},
+{'8', 0xca5be421, 0xe75be73a},
+{'l', 0x3f877320, 0x00000000},
+{'@', 0x00000073, 0x00003839},/*        s        x-advance: 56.222656 */
+{'M', 0x424c056b, 0xc194fea5},
+{'q', 0x00000000, 0x411e0651},
+{0, 0xc0c8eac8, 0x416f4b66},
+{'q', 0xc0c6a8d8, 0x40a28a29},
+{0, 0xc1934d34, 0x40a28a29},
+{'8', 0xf9a900d9, 0xeeb6f8d1},
+{'4', 0xff7e0000, 0x00000019},
+{'l', 0x405d3c0c, 0x4113ddb1},
+{'8', 0x266e262a, 0xa36d006d},
+{'9', 0xffbc0000, 0xff9effaa},
+{'l', 0xc0c8eac8, 0xc002ef48},
+{'8', 0xdbaeeec7, 0xd2d8ede7},
+{'8', 0xbdf2e4f2, 0x922fbb00},
+{'q', 0x40bfe31c, 0xc0a28a30},
+{0, 0x41813ddb, 0xc0a28a30},
+{'9', 0x0000003a, 0x00110091},
+{'4', 0x00730000, 0x0000ffe6},
+{'l', 0xc03da130, 0xc0f61128},
+{'8', 0xe6a2e6e3, 0x16bb00d3},
+{'8', 0x3ce916e9, 0x36152000},
+{'8', 0x24421616, 0x296c1c52},
+{'8', 0x202a0c19, 0x2a1b1212},
+{'q', 0x3fa28a20, 0x40422508},
+{0, 0x3fa28a20, 0x40ef4b68},
+{'@', 0x00000074, 0x00002824},/*        t        x-advance: 40.140625 */
+{'M', 0x41bc803a, 0x3fb49983},
+{'8', 0xe0af00ca, 0xa6e6e0e6},
+{'l', 0x00000000, 0xc239f611},
+{'l', 0xc10ad603, 0x00000000},
+{'l', 0x34c00000, 0xc04b2cb0},
+{'l', 0x410d17ee, 0xc03015b0},
+{'l', 0x40e401d0, 0xc1706c60},
+{'l', 0x408e38e4, 0x00000000},
+{'l', 0x00000000, 0x41706c60},
+{'l', 0x4172ae48, 0x00000000},
+{'4', 0x002f0000, 0x0000ff87},
+{'l', 0x00000000, 0x4234e1c0},
+{'8', 0x37102400, 0x122c1210},
+{'9', 0x00000020, 0xfff7004f},
+{'l', 0x00000000, 0x4092bcba},
+{'8', 0x16c70ded, 0x08bc08db},
+{'@', 0x00000075, 0x0000483d},/*        u        x-advance: 72.238281 */
+{'M', 0x41b0a627, 0xc1974091},
+{'q', 0x00000000, 0x41422507},
+{0, 0x41349982, 0x41422507},
+{'9', 0x00000045, 0xffef0082},
+{'l', 0x00000000, 0xc251aa38},
+{'l', 0xc120483c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x41065228, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff66},
+{'l', 0xbf107ac0, 0xc0ab91d6},
+{'8', 0x26a416d8, 0x0fa80fcc},
+{'9', 0x0000ff79, 0xff65ff79},
+{'l', 0x00000000, 0xc22d4346},
+{'l', 0xc1077322, 0xbfe1bfe0},
+{'l', 0xb4c00000, 0xc04b2cb0},
+{'l', 0x41a16933, 0x00000000},
+{'l', 0x00000000, 0x423da130},
+{'@', 0x00000076, 0x0000483d},/*        v        x-advance: 72.238281 */
+{'M', 0x421d2d9a, 0x3fb49983},
+{'l', 0xc0a70e00, 0x00000000},
+{'l', 0xc1da69a6, 0xc27b257a},
+{'l', 0xc0d8b838, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41f7321e, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc1282ef4, 0x3ff3cf40},
+{'l', 0x419aa372, 0x423723ac},
+{'l', 0x4193ddb0, 0xc237b427},
+{'l', 0xc1282ef8, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41c466f2, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc0cb2cb0, 0x3fbda140},
+{'l', 0xc1d4c4dc, 0x427c466f},
+{'@', 0x00000077, 0x00006856},/*        w        x-advance: 104.335938 */
+{'M', 0x42944a0c, 0x3fb49983},
+{'l', 0xc0b015b0, 0x00000000},
+{'l', 0xc182ef4a, 0xc22ef4b7},
+{'l', 0xc1813ddc, 0x422ef4b7},
+{'l', 0xc0a70e00, 0x34c00000},
+{'l', 0xc1b76be9, 0xc27b257a},
+{'l', 0xc0fa94fe, 0xbfe1bfe0},
+{'l', 0x34700000, 0xc04b2cb0},
+{'l', 0x41fc466f, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc13015ac, 0x3ff3cf40},
+{'l', 0x417bb5f6, 0x42333050},
+{'l', 0x41801ce4, 0xc22cfb09},
+{'l', 0x40bda130, 0x00000000},
+{'l', 0x417f18d4, 0x422e1bfe},
+{'l', 0x41706c60, 0xc234e1c0},
+{'l', 0xc12dd3c0, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ca0bbc, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc0eac790, 0x3fbda140},
+{'l', 0xc1b1c71c, 0x427c466f},
+{'@', 0x00000078, 0x0000483d},/*        x        x-advance: 72.238281 */
+{'M', 0x428cf3cf, 0xc04b2cb3},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1f06c5a, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x410d17ec, 0xbfcfb08a},
+{'l', 0xc174f034, 0xc1bbefbf},
+{'l', 0xc18f59d8, 0x41bd10b5},
+{'l', 0x41119bc4, 0x3fbda12a},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1bec225, 0x00000000},
+{'l', 0xb5600000, 0xc04b2cb3},
+{'l', 0x40f61128, 0xbf907ace},
+{'l', 0x41ae643c, 0xc1e643bb},
+{'l', 0xc199827c, 0xc1e2505e},
+{'l', 0xc0fa94fc, 0xbfe1bfe0},
+{'l', 0xb4800000, 0xc04b2cb0},
+{'l', 0x41f06c5d, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc10d17f0, 0x3ff3cf40},
+{'l', 0x414c4da8, 0x41986186},
+{'l', 0x416ac790, 0xc199827c},
+{'l', 0xc1119bc4, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41bec224, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc0f3cf38, 0x3fbda140},
+{'l', 0xc194fea6, 0x41c10410},
+{'l', 0x41ae643c, 0x42037fc6},
+{'l', 0x40f85310, 0x3fbda13a},
+{'@', 0x00000079, 0x0000483d},/*        y        x-advance: 72.238281 */
+{'M', 0x41609eee, 0x41f97409},
+{'9', 0x0000ffd4, 0xfff6ffaa},
+{'4', 0xff8e0000, 0x0000001a},
+{'l', 0x4014fea4, 0x40d8b836},
+{'8', 0x0c300c11, 0xf036001d},
+{'q', 0x4046a8e0, 0xc0077328},
+{0, 0x40b49984, 0xc0c8eaca},
+{'9', 0xffdf0014, 0xff890033},
+{'l', 0xc1ca0bbe, 0xc2785314},
+{'l', 0xc0d8b837, 0xbfe1bfe0},
+{'l', 0xb4000000, 0xc04b2cb0},
+{'l', 0x41f61128, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc1270dfe, 0x3ff3cf40},
+{'l', 0x418f59d9, 0x42396597},
+{'l', 0x418ad604, 0xc239f612},
+{'l', 0xc125ed0c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41c587e6, 0x00000000},
+{'4', 0x00190000, 0x000bffc9},
+{'l', 0xc1cf2010, 0x4283a3e5},
+{'q', 0xc092bcc0, 0x413a3e4e},
+{0, 0xc0ff18d8, 0x4185c1b1},
+{'8', 0x3dc528e5, 0x14b514e0},
+{'@', 0x0000007a, 0x00004020},/*        z        x-advance: 64.125000 */
+{'M', 0x40785314, 0x00000000},
+{'4', 0xffe70000, 0xfe350123},
+{'l', 0xc179740a, 0x00000000},
+{'8', 0x05c400e1, 0x0ed805e3},
+{'l', 0xc00bf6f8, 0x41186188},
+{'l', 0xc0543460, 0x00000000},
+{'l', 0x00000000, 0xc18d17ee},
+{'l', 0x4243d677, 0x00000000},
+{'4', 0x001b0000, 0x01c9fedd},
+{'l', 0x419b33ec, 0xb5c00000},
+{'8', 0xf9430020, 0xed32f923},
+{'l', 0x406643b0, 0xc15e5d03},
+{'l', 0x40543460, 0x00000000},
+{'l', 0xbfe1bfe0, 0x41b6db6e},
+{'l', 0xc259d92c, 0x00000000},
+{'@', 0x0000007b, 0x00004558},/*        {        x-advance: 69.343750 */
+{'M', 0x423aceca, 0x419aa372},
+{'q', 0xc10e38e4, 0x00000000},
+{0, 0xc15afa24, 0xc0add3c2},
+{'9', 0xffd5ffdb, 0xff86ffdb},
+{'l', 0x00000000, 0xc1a67d85},
+{'8', 0x9ee3be00, 0xdda5dfe3},
+{'l', 0x00000000, 0xc04b2cb0},
+{'9', 0xfffe0079, 0xff7b0079},
+{'l', 0x00000000, 0xc1a5ed0a},
+{'q', 0x00000000, 0xc11f2748},
+{0, 0x4092bcb8, 0xc174f030},
+{'9', 0xffd60024, 0xffd6006e},
+{'4', 0x0000004c, 0x001a0000},
+{'l', 0xc08bf6f8, 0x00000000},
+{'8', 0x1fb700cd, 0x5aeb1eeb},
+{'l', 0x00000000, 0x41ba3e50},
+{'8', 0x5ce33500, 0x31b126e3},
+{'l', 0x00000000, 0x3e58b900},
+{'8', 0x324f0b32, 0x5c1d251d},
+{'l', 0x00000000, 0x41bc803a},
+{'8', 0x5a153b00, 0x1e491e16},
+{'l', 0x408bf6f8, 0x00000000},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc1186184, 0x00000000},
+{'@', 0x0000007c, 0x00001cec},/*        |        x-advance: 28.921875 */
+{'M', 0x412dd3c1, 0x41f97409},
+{'l', 0x00000000, 0xc3036db7},
+{'l', 0x40e643ba, 0x00000000},
+{'l', 0x00000000, 0x43036db7},
+{'l', 0xc0e643ba, 0x36000000},
+{'@', 0x0000007d, 0x00004558},/*        }        x-advance: 69.343750 */
+{'M', 0x4151f275, 0x419aa372},
+{'4', 0xffe60000, 0x00000022},
+{'8', 0xe2480033, 0xa616e116},
+{'l', 0x00000000, 0xc1bc803a},
+{'8', 0xa41cca00, 0xce4fda1c},
+{'l', 0x00000000, 0xbe58b900},
+{'8', 0xcfb1f6cf, 0xa5e3dae3},
+{'l', 0x00000000, 0xc1ba3e50},
+{'8', 0xa6eac500, 0xe1b8e1eb},
+{'4', 0x0000ffde, 0xffe60000},
+{'l', 0x4119827b, 0x00000000},
+{'q', 0x4112bcba, 0x00000000},
+{0, 0x415c1b18, 0x40ab91e0},
+{'9', 0x002a0024, 0x007a0024},
+{'l', 0x00000000, 0x41a5ed0a},
+{'9', 0x00820000, 0x00850079},
+{'l', 0x00000000, 0x404b2cb0},
+{'8', 0x22a502c4, 0x63e320e3},
+{'l', 0x00000000, 0x41a67d85},
+{'q', 0x00000000, 0x411ce55c},
+{0, 0xc0998278, 0x4174f033},
+{'q', 0xc0974094, 0x40add3c2},
+{0, 0xc158b838, 0x40add3c2},
+{'l', 0xc119827b, 0x00000000},
+{'@', 0x0000007e, 0x00004e2a},/*        ~        x-advance: 78.164062 */
+{'M', 0x425c1b17, 0xc20da869},
+{'q', 0xc0ef4b68, 0x00000000},
+{0, 0xc18a4588, 0xc1089418},
+{'8', 0xcdbbddd7, 0xf0d0f0e5},
+{'8', 0x1fbf00d5, 0x68e31eea},
+{'l', 0xc0e401d0, 0x00000000},
+{'q', 0x3fa28a2c, 0xc153136c},
+{0, 0x40bda130, 0xc1958f20},
+{'8', 0xd468d425, 0x1040001f},
+{'8', 0x334c1021, 0x36472830},
+{'8', 0x0d2b0d17, 0xe33c0026},
+{'9', 0xffe30016, 0xff950020},
+{'l', 0x40e885b0, 0x00000000},
+{'q', 0xbf998280, 0x4112bcbc},
+{0, 0xc05d3c20, 0x41609eec},
+{'8', 0x3cd126ee, 0x15b415e3},
+{'@', 0x000000a0, 0x0000241e},/*                 x-advance: 36.117188 */
+{'@', 0x000000a1, 0x0000301c},/*        ¡        x-advance: 48.109375 */
+{'M', 0x41fd6765, 0x41e764b0},
+{'l', 0xc1761128, 0x00000000},
+{'4', 0xfde70022, 0x00000035},
+{'6', 0x02190022, 0xfd3fff7f},
+{'8', 0xd113e500, 0xec31ec13},
+{'8', 0x1430001d, 0x2f131413},
+{'8', 0x30ed1c00, 0x13d013ed},
+{'8', 0xedd000e4, 0xd0ededed},
+{'@', 0x000000a2, 0x0000483d},/*        ¢        x-advance: 72.238281 */
+{'M', 0x42174091, 0xc151f275},
+{'q', 0xc169a69c, 0xbf6ac790},
+{0, 0xc1add3c2, 0xc11aa371},
+{'q', 0xc0e401ce, 0xc10bf6f8},
+{0, 0xc0e401ce, 0xc1cbbd2f},
+{'q', 0x00000000, 0xc1797408},
+{0, 0x40ed097e, 0xc1c3d676},
+{'9', 0xffb9003b, 0xffb300ab},
+{'4', 0xff9f0000, 0x0000002e},
+{'l', 0x00000000, 0x413fe320},
+{'9', 0x0003004c, 0x0010008f},
+{'4', 0x00930000, 0x0000ffe1},
+{'l', 0xc0422500, 0xc13a3e50},
+{'9', 0xffecffdb, 0xffe7ffa8},
+{'4', 0x01c20000, 0x0000000c},
+{'9', 0x00000052, 0xffee008f},
+{'l', 0x00000000, 0x40877324},
+{'8', 0x1cc50fed, 0x0fa00bd8},
+{'4', 0x00680000, 0x0000ffd2},
+{'6', 0xff980000, 0xfee7ff7f},
+{'q', 0x00000000, 0x4148eac8},
+{0, 0x40785318, 0x4197d10c},
+{'9', 0x0032001f, 0x00400062},
+{'l', 0x00000000, 0xc25ea540},
+{'q', 0xc1813ddc, 0x4002ef40},
+{0, 0xc1813ddc, 0x41e522c2},
+{'@', 0x000000a3, 0x0000483d},/*        £        x-advance: 72.238281 */
+{'M', 0x42879741, 0xc12dd3c1},
+{'l', 0x00000000, 0x412dd3c1},
+{'4', 0x0000fe28, 0xffbe0000},
+{'l', 0x40a28a28, 0xc0907ad0},
+{'q', 0x41216933, 0xc10bf6f9},
+{0, 0x41216933, 0xc18c8774},
+{'8', 0xcaf7e600, 0xc6ebe5f7},
+{'4', 0x0000ffa5, 0xffd20000},
+{'l', 0x410f59da, 0x00000000},
+{'q', 0xc0974092, 0xc13015b0},
+{0, 0xc0974092, 0xc1a67d84},
+{'q', 0x00000000, 0xc13da130},
+{0, 0x40eac78e, 0xc1922c40},
+{'q', 0x40ed097c, 0xc0cd6ea0},
+{0, 0x41b0a628, 0xc0cd6ea0},
+{'8', 0x0440001f, 0x13640321},
+{'4', 0x00910000, 0x0000ffdc},
+{'l', 0xc01e0650, 0xc1391d58},
+{'q', 0xc0d1f278, 0xc06f4b60},
+{0, 0xc159d92c, 0xc06f4b60},
+{'q', 0xc1813ddc, 0x00000000},
+{0, 0xc1813ddc, 0x41961f9c},
+{'9', 0x004d0000, 0x00a60010},
+{'4', 0x0000009c, 0x002e0000},
+{'l', 0xc193ddaf, 0x00000000},
+{'8', 0x5f093d09, 0x5aec3200},
+{'q', 0xc0228a30, 0x40a04840},
+{0, 0xc10ad604, 0x4123ab1f},
+{'l', 0x4242b582, 0x00000000},
+{'@', 0x000000a4, 0x0000483d},/*        ¤        x-advance: 72.238281 */
+{'M', 0x410ad603, 0xc23ec225},
+{'9', 0xffb50000, 0xff7b002d},
+{'4', 0xffc4ffc4, 0xffd70029},
+{'l', 0x40eac792, 0x40f61120},
+{'q', 0x40f3cf3c, 0xc0b91d50},
+{0, 0x4186522c, 0xc0b91d50},
+{'9', 0x00000049, 0x002e0086},
+{'4', 0xffc3003c, 0x00280028},
+{'l', 0xc0f61128, 0x40f61130},
+{'q', 0x40b91d58, 0x40f85310},
+{0, 0x40b91d58, 0x4185c1b2},
+{'9', 0x00490000, 0x0086ffd2},
+{'4', 0x003b003d, 0x0028ffd8},
+{'l', 0xc0f3cf40, 0xc0f18d54},
+{'q', 0xc0e885a0, 0x40b49984},
+{0, 0xc186522c, 0x40b49984},
+{'9', 0x0000ffb5, 0xffd3ff7a},
+{'4', 0x003cffc5, 0xffd8ffd8},
+{'l', 0x40f18d52, 0xc0ef4b68},
+{'9', 0xffc5ffd3, 0xff7affd3},
+{'m', 0x40d8b836, 0x00000000},
+{'8', 0x51162b00, 0x3c3c2616},
+{'q', 0x4099827c, 0x40349980},
+{0, 0x4124cc14, 0x40349980},
+{'q', 0x41077324, 0x00000000},
+{0, 0x4169a69c, 0xc0c22508},
+{'q', 0x40c6a8d8, 0xc0c22500},
+{0, 0x40c6a8d8, 0xc169a698},
+{'q', 0x00000000, 0xc1089418},
+{0, 0xc0c466f0, 0xc16ac790},
+{'q', 0xc0c466f0, 0xc0c466f8},
+{0, 0xc16ac790, 0xc0c466f8},
+{'8', 0x16af00d5, 0x3cc416db},
+{'q', 0xc0349980, 0x409bc468},
+{0, 0xc0349980, 0x41270e00},
+{'@', 0x000000a5, 0x0000483d},/*        ¥        x-advance: 72.238281 */
+{'M', 0x4279bc47, 0xc1ddcc88},
+{'l', 0x00000000, 0x40b91d5c},
+{'l', 0xc19d75d8, 0x00000000},
+{'l', 0x00000000, 0x41825ed0},
+{'l', 0x41422508, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc1825ed0},
+{'l', 0xc19d75d8, 0x00000000},
+{'l', 0x00000000, 0xc0b91d5c},
+{'l', 0x419d75d8, 0x00000000},
+{'l', 0x00000000, 0xc1119bc4},
+{'l', 0xbf877320, 0xc01e0650},
+{'l', 0xc194fea6, 0x00000000},
+{'l', 0x00000000, 0xc0b91d58},
+{'l', 0x4181ce56, 0x00000000},
+{'l', 0xc1946e2a, 0xc22fcd6f},
+{'l', 0xc0e1bfe6, 0xbfeac780},
+{'l', 0x34700000, 0xc06f4b80},
+{'l', 0x41ffa950, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc113ddb0, 0x3feac780},
+{'l', 0x4186e2a8, 0x422eac79},
+{'l', 0x418ad602, 0xc22eac79},
+{'l', 0xc10ad604, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41bda132, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc0eac790, 0x3feac780},
+{'l', 0xc1958f22, 0x422fcd6f},
+{'l', 0x4182ef4c, 0x00000000},
+{'l', 0x00000000, 0x40b91d58},
+{'l', 0xc196b016, 0x00000000},
+{'l', 0xbf58b840, 0x4002ef50},
+{'l', 0x00000000, 0x41186184},
+{'l', 0x419d75d8, 0x00000000},
+{'@', 0x000000a6, 0x00001cec},/*        ¦        x-advance: 28.921875 */
+{'M', 0x412dd3c1, 0x41f97409},
+{'l', 0x00000000, 0xc22f8531},
+{'4', 0x00000039, 0x015f0000},
+{'6', 0x0000ffc7, 0xfd430000},
+{'l', 0x00000000, 0xc22ef4b6},
+{'l', 0x40e643ba, 0x00000000},
+{'l', 0x00000000, 0x422ef4b7},
+{'l', 0xc0e643ba, 0x00000000},
+{'@', 0x000000a7, 0x0000483d},/*        §        x-advance: 72.238281 */
+{'M', 0x426d99f6, 0xc002ef4c},
+{'q', 0x00000000, 0x411bc468},
+{0, 0xc0d1f270, 0x416f4b67},
+{'q', 0xc0d1f278, 0x40a4cc14},
+{0, 0xc1974092, 0x40a4cc14},
+{'8', 0xf7a100d4, 0xefb9f7ce},
+{'4', 0xff7e0000, 0x00000019},
+{'l', 0x403015b0, 0x4114fea6},
+{'8', 0x1b330f10, 0x0a450a23},
+{'8', 0xe9550037, 0xbb1ee81e},
+{'8', 0xcff4e400, 0xdadfebf4},
+{'8', 0xe1d1f0ec, 0xe3caf2e6},
+{'8', 0xe1caf1e5, 0xdad1f0e6},
+{'8', 0xcfdfeaec, 0xbff4e4f4},
+{'8', 0xa325ca00, 0xcd60d925},
+{'8', 0xbba8e1c4, 0xa6e5d9e5},
+{'q', 0x00000000, 0xc10bf6f8},
+{0, 0x40bda130, 0xc15c1b18},
+{'q', 0x40bfe31c, 0xc0a28a20},
+{0, 0x41813ddc, 0xc0a28a20},
+{'9', 0x00000040, 0x000e0091},
+{'4', 0x00770000, 0x0000ffe6},
+{'l', 0xc014fea0, 0xc0f61120},
+{'8', 0xedd8f5f3, 0xf9c5f9e7},
+{'8', 0x16bb00d2, 0x3ce916e9},
+{'8', 0x2e0d1b00, 0x2324130d},
+{'8', 0x32630f17, 0x33591c3d},
+{'8', 0x342c171c, 0x420f1d0f},
+{'8', 0x66da3b00, 0x389529da},
+{'8', 0x364c1d33, 0x36261818},
+{'9', 0x001d000d, 0x0043000d},
+{'m', 0xc10ad600, 0xc21b7c29},
+{'8', 0xd6f5e800, 0xdedeeef5},
+{'8', 0xd9b7f0ea, 0x1db102d1},
+{'8', 0x42e11be1, 0x2c0a1900},
+{'8', 0x211c120a, 0x31500f12},
+{'8', 0xde51fa33, 0xb91de41d},
+{'@', 0x000000a8, 0x0000301c},/*        ¨        x-advance: 48.109375 */
+{'M', 0x4193ddb0, 0xc2a87732},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000a9, 0x00006dc5},/*        ©        x-advance: 109.769531 */
+{'M', 0x40c6a8dd, 0xc23d10b5},
+{'q', 0x00000000, 0xc1555554},
+{0, 0x40d1f275, 0xc1c4f76a},
+{'q', 0x40d4345e, 0xc135ba80},
+{0, 0x418e38e4, 0xc18e38e4},
+{'q', 0x4133788c, 0xc0cd6ea0},
+{0, 0x41c2b582, 0xc0cd6ea0},
+{'q', 0x4153136c, 0x00000000},
+{0, 0x41c3d676, 0x40cfb080},
+{'q', 0x41349980, 0x40cfb090},
+{0, 0x418e38e4, 0x418e38e4},
+{'q', 0x40d1f270, 0x41337890},
+{0, 0x40d1f270, 0x41c466f2},
+{'q', 0x00000000, 0x4150d180},
+{0, 0xc0cd6ea0, 0x41c22506},
+{'q', 0xc0cb2cb0, 0x41325798},
+{0, 0xc18da868, 0x418e38e4},
+{'q', 0xc1349980, 0x40d43461},
+{0, 0xc1c587e6, 0x40d43461},
+{'q', 0xc151f278, 0xb4000000},
+{0, 0xc1c345fd, 0xc0cfb08a},
+{'q', 0xc1349982, 0xc0cfb089},
+{0, 0xc18e38e4, 0xc18e38e4},
+{'9', 0xffa6ffcd, 0xff3dffcd},
+{'m', 0x409e0653, 0x00000000},
+{'q', 0x00000000, 0x413c803c},
+{0, 0x40bb5f44, 0x41b015ad},
+{'q', 0x40bda130, 0x41228a28},
+{0, 0x41801ce5, 0x41801ce5},
+{'q', 0x41228a28, 0x40b91d5a},
+{0, 0x41aef4b8, 0x40b91d5a},
+{'q', 0x413c803c, 0xb4800000},
+{0, 0x41af8532, 0xc0b91d5a},
+{'q', 0x41228a28, 0xc0bb5f44},
+{0, 0x4180ad60, 0xc1801ce5},
+{'q', 0x40bda130, 0xc1228a2a},
+{0, 0x40bda130, 0xc1b015ad},
+{'q', 0x00000000, 0xc13da130},
+{0, 0xc0bfe320, 0xc1b0a626},
+{'q', 0xc0bfe320, 0xc123ab20},
+{0, 0xc180ad60, 0xc1801ce8},
+{'q', 0xc1216930, 0xc0b91d50},
+{0, 0xc1aef4b6, 0xc0b91d50},
+{'q', 0xc13c803c, 0x00000000},
+{0, 0xc1af8532, 0x40bda130},
+{'q', 0xc1228a2a, 0x40bb5f40},
+{0, 0xc1801ce6, 0x4180ad60},
+{'9', 0x0051ffd2, 0x00aeffd2},
+{'m', 0x4233c0ca, 0x41e885a5},
+{'q', 0xc15c1b14, 0x00000000},
+{0, 0xc1acb2ca, 0xc0ef4b64},
+{'q', 0xc0f85318, 0xc0f18d50},
+{0, 0xc0f85318, 0xc1a94fea},
+{'q', 0x00000000, 0xc16be888},
+{0, 0x40ed0980, 0xc1b1c71c},
+{'q', 0x40ef4b68, 0xc0ef4b70},
+{0, 0x41b0a626, 0xc0ef4b70},
+{'9', 0x00000040, 0x00100097},
+{'4', 0x00690002, 0x0000ffe5},
+{'l', 0xbfab91c0, 0xc0ed0978},
+{'q', 0xc0b91d60, 0xc06643c0},
+{0, 0xc161bfe4, 0xc06643c0},
+{'q', 0xc125ed0c, 0x00000000},
+{0, 0xc16e2a70, 0x40bfe320},
+{'q', 0xc0907ad0, 0x40bfe318},
+{0, 0xc0907ad0, 0x419a12f6},
+{'q', 0x00000000, 0x41c4f76c},
+{0, 0x4197d10a, 0x41c4f76c},
+{'9', 0x0000004f, 0xffdf0079},
+{'4', 0xffbd000c, 0x0000001b},
+{'l', 0xbe907b00, 0x41609ef0},
+{'q', 0xc10bf6f8, 0x403015a8},
+{0, 0xc19f2748, 0x403015a8},
+{'@', 0x000000aa, 0x000027db},/*        ª        x-advance: 39.855469 */
+{'M', 0x419e96cd, 0xc2c02b58},
+{'8', 0x195a003e, 0x471c181c},
+{'l', 0x00000000, 0x41c6a8de},
+{'0', 0x14000826, 0xdefa009e},
+{'8', 0x1dd112ee, 0x0bc50be3},
+{'8', 0xe9c200d7, 0xb9ebe8eb},
+{'8', 0xba20d200, 0xe66ee820},
+{'4', 0xffff002f, 0xffd30000},
+{'8', 0xc2cac200, 0x10c200de},
+{'4', 0x0021fff5, 0x0000ffe8},
+{'l', 0x00000000, 0xc109b510},
+{'9', 0xfff5002e, 0xfff50066},
+{'m', 0x40cb2cb4, 0x41a8bf70},
+{'8', 0x04af01bc, 0x09ea02f4},
+{'8', 0x13f406f8, 0x20fc0bfc},
+{'8', 0x2a0b1e00, 0x0b240b0b},
+{'q', 0x4082ef4c, 0x00000000},
+{0, 0x41119bc4, 0xc03015a0},
+{'l', 0x00000000, 0xc14466f0},
+{'@', 0x000000ab, 0x0000483d},/*        «        x-advance: 72.238281 */
+{'M', 0x42146e2b, 0xc20bf6f9},
+{'l', 0x41bd10b4, 0xc1c8eac6},
+{'l', 0x40b6db68, 0x00000000},
+{'l', 0xc180ad5e, 0x41db8a9c},
+{'l', 0x4180ad5e, 0x41db8a9c},
+{'4', 0x0000ffd3, 0xff38ff43},
+{'6', 0xffdb0000, 0x0000ff1a},
+{'l', 0x41bc803b, 0xc1c8eac6},
+{'l', 0x40b6db6c, 0x00000000},
+{'l', 0xc1801ce5, 0x41db8a9c},
+{'l', 0x41801ce5, 0x41db8a9c},
+{'l', 0xc0b6db6c, 0x35000000},
+{'l', 0xc1bc803a, 0xc1c8eac8},
+{'l', 0xb5800000, 0xc094fea8},
+{'@', 0x000000ac, 0x0000517b},/*        ¬        x-advance: 81.480469 */
+{'M', 0x4294da87, 0xc24e4757},
+{'l', 0x00000000, 0x4214fea6},
+{'l', 0xc0e885b0, 0x00000000},
+{'l', 0x00000000, 0xc1f06c5c},
+{'l', 0xc26fdbe1, 0x00000000},
+{'l', 0x35800000, 0xc0e643c0},
+{'l', 0x4286764b, 0x00000000},
+{'@', 0x000000ad, 0x0000301c},/*        ­        x-advance: 48.109375 */
+{'M', 0x40ab91d6, 0xc1e522c4},
+{'l', 0x00000000, 0xc12cb2cc},
+{'l', 0x42161f9b, 0x00000000},
+{'l', 0x00000000, 0x412cb2cc},
+{'l', 0xc2161f9b, 0x00000000},
+{'@', 0x000000ae, 0x00006dc5},/*        ®        x-advance: 109.769531 */
+{'M', 0x40c6a8dd, 0xc23d10b5},
+{'q', 0x00000000, 0xc1555554},
+{0, 0x40d1f275, 0xc1c4f76a},
+{'q', 0x40d4345e, 0xc135ba80},
+{0, 0x418e38e4, 0xc18e38e4},
+{'q', 0x4133788c, 0xc0cd6ea0},
+{0, 0x41c2b582, 0xc0cd6ea0},
+{'q', 0x4153136c, 0x00000000},
+{0, 0x41c3d676, 0x40cfb080},
+{'q', 0x41349980, 0x40cfb090},
+{0, 0x418e38e4, 0x418e38e4},
+{'q', 0x40d1f270, 0x41337890},
+{0, 0x40d1f270, 0x41c466f2},
+{'q', 0x00000000, 0x4150d180},
+{0, 0xc0cd6ea0, 0x41c22506},
+{'q', 0xc0cb2cb0, 0x41325798},
+{0, 0xc18da868, 0x418e38e4},
+{'q', 0xc1349980, 0x40d43461},
+{0, 0xc1c587e6, 0x40d43461},
+{'q', 0xc151f278, 0xb4000000},
+{0, 0xc1c345fd, 0xc0cfb08a},
+{'q', 0xc1349982, 0xc0cfb089},
+{0, 0xc18e38e4, 0xc18e38e4},
+{'9', 0xffa6ffcd, 0xff3dffcd},
+{'m', 0x409e0653, 0x00000000},
+{'q', 0x00000000, 0x413c803c},
+{0, 0x40bb5f44, 0x41b015ad},
+{'q', 0x40bda130, 0x41228a28},
+{0, 0x41801ce5, 0x41801ce5},
+{'q', 0x41228a28, 0x40b91d5a},
+{0, 0x41aef4b8, 0x40b91d5a},
+{'q', 0x413c803c, 0xb4800000},
+{0, 0x41af8532, 0xc0b91d5a},
+{'q', 0x41228a28, 0xc0bb5f44},
+{0, 0x4180ad60, 0xc1801ce5},
+{'q', 0x40bda130, 0xc1228a2a},
+{0, 0x40bda130, 0xc1b015ad},
+{'q', 0x00000000, 0xc13da130},
+{0, 0xc0bfe320, 0xc1b0a626},
+{'q', 0xc0bfe320, 0xc123ab20},
+{0, 0xc180ad60, 0xc1801ce8},
+{'q', 0xc1216930, 0xc0b91d50},
+{0, 0xc1aef4b6, 0xc0b91d50},
+{'q', 0xc13c803c, 0x00000000},
+{0, 0xc1af8532, 0x40bda130},
+{'q', 0xc1228a2a, 0x40bb5f40},
+{0, 0xc1801ce6, 0x4180ad60},
+{'9', 0x0051ffd2, 0x00aeffd2},
+{'m', 0x420fea54, 0x404b2cb0},
+{'l', 0x00000000, 0x41a31aa4},
+{'l', 0x4100ad60, 0x3f998280},
+{'l', 0x00000000, 0x40422508},
+{'l', 0xc1c345fb, 0x00000000},
+{'l', 0x00000000, 0xc0422508},
+{'l', 0x40d8b834, 0xbf998280},
+{'l', 0x00000000, 0xc2422506},
+{'4', 0xfff7ffc6, 0xffe90000},
+{'l', 0x41ba3e4e, 0x00000000},
+{'q', 0x413015b0, 0x00000000},
+{0, 0x4184a0bc, 0x4082ef50},
+{'8', 0x5b2d202d, 0x4be72b00},
+{'9', 0x001fffe7, 0x002fffb5},
+{'l', 0x41706c5c, 0x41ad4346},
+{'l', 0x40bda130, 0x3f998280},
+{'l', 0x00000000, 0x40422508},
+{'4', 0x0000ff8d, 0xff3cff7f},
+{'6', 0x0000ffce, 0xff7d0094},
+{'8', 0xbae8ce00, 0xeca7ece8},
+{'4', 0x0000ffdd, 0x00bb0000},
+{'l', 0x40974090, 0x00000000},
+{'8', 0xec55003b, 0xb519ec19},
+{'@', 0x000000af, 0x0000483d},/*        ¯        x-advance: 72.238281 */
+{'M', 0x429304f8, 0xc2ccde24},
+{'l', 0xc2956b02, 0x00000000},
+{'l', 0x35000000, 0xc0d43460},
+{'l', 0x42956b02, 0x00000000},
+{'l', 0x00000000, 0x40d43460},
+{'@', 0x000000b0, 0x000039c7},/*        °        x-advance: 57.777344 */
+{'M', 0x40dd3c0d, 0xc2944a0c},
+{'8', 0xa917d200, 0xc03fd817},
+{'8', 0xe958e929, 0x1757002e},
+{'8', 0x3f401728, 0x58172817},
+{'8', 0x58e82f00, 0x3fc028e9},
+{'q', 0xc0a28a28, 0x40349980},
+{0, 0xc12dd3c0, 0x40349980},
+{'q', 0xc112bcba, 0x00000000},
+{0, 0xc1785314, 0xc0cb2cb0},
+{'9', 0xffceffce, 0xff84ffce},
+{'m', 0x40e643b9, 0x00000000},
+{'8', 0x54223200, 0x21522122},
+{'8', 0xde530031, 0xac22de22},
+{'8', 0xacdece00, 0xdeaddedf},
+{'8', 0x22ae00d1, 0x54de21de},
+{'@', 0x000000b1, 0x00004f4b},/*        ±        x-advance: 79.292969 */
+{'M', 0x422cb2cb, 0xc2317edf},
+{'l', 0x00000000, 0x41f06c5c},
+{'l', 0xc0e885a0, 0x00000000},
+{'l', 0x00000000, 0xc1f06c5c},
+{'l', 0xc1ef4b67, 0x00000000},
+{'l', 0xb5000000, 0xc0e643c0},
+{'l', 0x41ef4b67, 0x00000000},
+{'l', 0x00000000, 0xc1f06c5a},
+{'l', 0x40e885a0, 0x00000000},
+{'l', 0x00000000, 0x41f06c5a},
+{'4', 0x000000f0, 0x00390000},
+{'6', 0x0000ff10, 0x012900f0},
+{'l', 0x00000000, 0x40e643b8},
+{'l', 0xc286764b, 0x00000000},
+{'l', 0xb6200000, 0xc0e643ba},
+{'l', 0x4286764b, 0x00000000},
+{'@', 0x000000b2, 0x00002b50},/*        ²        x-advance: 43.312500 */
+{'M', 0x42200000, 0xc216f853},
+{'4', 0x0000fee7, 0xffca0000},
+{'l', 0x40f85314, 0xc0e1bfe8},
+{'8', 0xae51cd38, 0xbe24e019},
+{'8', 0xb00bde0b, 0xb0b6b000},
+{'9', 0x0000ffde, 0x0012ffc0},
+{'4', 0x0037fff5, 0x0000ffe1},
+{'l', 0x00000000, 0xc1422508},
+{'q', 0x40f85314, 0xbff3cf40},
+{0, 0x4156764b, 0xbff3cf40},
+{'q', 0x41174092, 0x00000000},
+{0, 0x416643ba, 0x407cd6e0},
+{'8', 0x57281f28, 0x61e73600},
+{'9', 0x002affe7, 0x0066ffa3},
+{'l', 0xc133788d, 0x4120483c},
+{'l', 0x41da69a6, 0x00000000},
+{'l', 0x00000000, 0x40f3cf40},
+{'@', 0x000000b3, 0x00002b50},/*        ³        x-advance: 43.312500 */
+{'M', 0x422241eb, 0xc254c4db},
+{'q', 0x00000000, 0x40ef4b68},
+{0, 0xc0bfe318, 0x413ec224},
+{'q', 0xc0bfe31c, 0x408e38e8},
+{0, 0xc17f18d6, 0x408e38e8},
+{'9', 0x0000ffc5, 0xfff1ff87},
+{'4', 0xff98fffd, 0x0000001f},
+{'l', 0x3ff3cf3c, 0x40fcd6e8},
+{'8', 0x0c20070c, 0x05290514},
+{'8', 0xec4c0036, 0xb516ec16},
+{'8', 0xc0ecd400, 0xe8b9ebec},
+{'4', 0xfffdffd0, 0xffdc0000},
+{'l', 0x40c22504, 0xbe907b00},
+{'8', 0xec36ff26, 0xc110ed10},
+{'8', 0xc4f0d500, 0xefc3eff0},
+{'9', 0x0000ffdc, 0x0010ffc1},
+{'4', 0x0039fff5, 0x0000ffe1},
+{'l', 0x00000000, 0xc1422508},
+{'q', 0x40fa94fe, 0xbff3cf40},
+{0, 0x41543460, 0xbff3cf40},
+{'q', 0x4114fea6, 0x00000000},
+{0, 0x4169a69a, 0x406ac7a0},
+{'8', 0x522a1c2a, 0x48e52a00},
+{'q', 0xc05d3c08, 0x406f4b60},
+{0, 0xc11e0652, 0x40974090},
+{'q', 0x417df7de, 0x3fe1bfc0},
+{0, 0x417df7de, 0x416401cc},
+{'@', 0x000000b4, 0x0000301c},/*        ´        x-advance: 48.109375 */
+{'M', 0x413015ac, 0xc29de234},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0e, 0xc199827c},
+{'l', 0x41706c5a, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000b5, 0x0000533e},/*        µ        x-advance: 83.242188 */
+{'M', 0x426643ba, 0xc1089418},
+{'8', 0x3fab2ecd, 0x10be10de},
+{'q', 0xc106522e, 0xb4000000},
+{0, 0xc14b2cb4, 0xc0b015ad},
+{'9', 0x00a20000, 0x0116ffed},
+{'4', 0x0000ff9c, 0xffe70000},
+{'q', 0x3fbda130, 0xc0974090},
+{0, 0x40228a28, 0xc16643ba},
+{'9', 0xffb30009, 0xff700009},
+{'l', 0x00000000, 0xc2620821},
+{'l', 0xc11e0652, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000ac},
+{'l', 0x00000000, 0x4237fc64},
+{'8', 0x4f1f3100, 0x1d551d1f},
+{'8', 0xf340001c, 0xdd42f324},
+{'l', 0x00000000, 0xc241dcc9},
+{'l', 0xc1204840, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x411aa370, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc19ce55a, 0x00000000},
+{'l', 0xbfab91e0, 0xc1089418},
+{'@', 0x000000b6, 0x00004177},/*        ¶        x-advance: 65.464844 */
+{'M', 0x4264da87, 0xc2b29fd5},
+{'l', 0x00000000, 0x42d706c6},
+{'l', 0xc0d43460, 0x36000000},
+{'l', 0x00000000, 0xc2d706c6},
+{'l', 0xc13fe31c, 0x00000000},
+{'4', 0x035c0000, 0x0000ffcb},
+{'l', 0x3e107b00, 0xc2683d68},
+{'q', 0xc16be886, 0x36800000},
+{0, 0xc1b91d5a, 0xc0ed0978},
+{'q', 0xc106522b, 0xc0ef4b68},
+{0, 0xc106522b, 0xc1a55c8e},
+{'q', 0xb3800000, 0xc14e8f98},
+{0, 0x40fcd6ea, 0xc19e0654},
+{'9', 0xffc9003f, 0xffc900b5},
+{'l', 0x4202a70e, 0x00000000},
+{'l', 0x36800000, 0x406f4b80},
+{'l', 0xc0d43460, 0x3fc6a8c0},
+{'@', 0x000000b7, 0x0000301c},/*        ·        x-advance: 48.109375 */
+{'M', 0x42025ed1, 0xc23f52a0},
+{'8', 0x30ed1c00, 0x13d013ed},
+{'8', 0xedd000e4, 0xd0ededed},
+{'8', 0xd113e500, 0xec31ec13},
+{'8', 0x1430001d, 0x2f131413},
+{'@', 0x000000b8, 0x0000301c},/*        ¸        x-advance: 48.109375 */
+{'M', 0x4214fea5, 0x41841041},
+{'8', 0x52d93300, 0x1f9d1fda},
+{'9', 0x0000ffd6, 0xfff4ffb3},
+{'l', 0x00000000, 0xc0a70e00},
+{'8', 0x0621030c, 0x02210215},
+{'8', 0xf0310021, 0xd60ff00f},
+{'8', 0xd3eae500, 0xecc1efea},
+{'4', 0xffaa0017, 0x00000030},
+{'l', 0xbfa28a30, 0x40b91d59},
+{'8', 0x1d500533, 0x421d181d},
+{'@', 0x000000b9, 0x00002b50},/*        ¹        x-advance: 43.312500 */
+{'M', 0x41d3a3e5, 0xc228bf70},
+{'l', 0x413b5f46, 0x3f7cd700},
+{'l', 0x00000000, 0x405d3c10},
+{'l', 0xc20609ef, 0x00000000},
+{'l', 0xb5c00000, 0xc05d3c10},
+{'l', 0x413a3e50, 0xbf7cd700},
+{'l', 0x00000000, 0xc2305dea},
+{'l', 0xc135ba79, 0x4082ef50},
+{'l', 0x00000000, 0xc0543460},
+{'l', 0x41837fc6, 0xc1174090},
+{'l', 0x40a28a2c, 0x00000000},
+{'l', 0x00000000, 0x4253136a},
+{'@', 0x000000ba, 0x00002ccc},/*        º        x-advance: 44.796875 */
+{'M', 0x4228bf70, 0xc296d435},
+{'q', 0x00000000, 0x4123ab20},
+{0, 0xc0a70e00, 0x417a9504},
+{'q', 0xc0a70e00, 0x40add3c0},
+{0, 0xc16e2a72, 0x40add3c0},
+{'q', 0xc1119bc4, 0x00000000},
+{0, 0xc16522c4, 0xc0add3c0},
+{'q', 0xc0a4cc14, 0xc0b015a8},
+{0, 0xc0a4cc14, 0xc17a9504},
+{'q', 0xb4800000, 0xc1228a28},
+{0, 0x40a70dff, 0xc1761128},
+{'q', 0x40a94feb, 0xc0a94fe0},
+{0, 0x416ac790, 0xc0a94fe0},
+{'q', 0x41161f9a, 0x00000000},
+{0, 0x416885a4, 0x40b015a0},
+{'9', 0x002c0029, 0x00790029},
+{'m', 0xc1119bc4, 0x00000000},
+{'8', 0x9aecb800, 0xe2bde2ec},
+{'8', 0x1cc100d5, 0x68ed1ced},
+{'8', 0x6a134c00, 0x1d3f1d14},
+{'8', 0xe243002e, 0x9814e114},
+{'@', 0x000000bb, 0x0000483d},/*        »        x-advance: 72.238281 */
+{'M', 0x420c8773, 0xc1f2ae48},
+{'l', 0xc1bd10b4, 0x41c8eac8},
+{'l', 0xc0b6db6f, 0x35000000},
+{'l', 0x4180ad61, 0xc1db8a9c},
+{'l', 0xc180ad61, 0xc1db8a9c},
+{'4', 0x0000002d, 0x00c800bd},
+{'6', 0x00250000, 0x000000e6},
+{'l', 0xc1bc803a, 0x41c8eac8},
+{'l', 0xc0b6db70, 0x35000000},
+{'l', 0x41801ce6, 0xc1db8a9c},
+{'l', 0xc1801ce6, 0xc1db8a9c},
+{'l', 0x40b6db70, 0x00000000},
+{'l', 0x41bc803a, 0x41c8eac6},
+{'l', 0x00000000, 0x4094fea8},
+{'@', 0x000000bc, 0x00006c5c},/*        ¼        x-advance: 108.359375 */
+{'M', 0x41bda130, 0x00000000},
+{'l', 0xc0e643bc, 0x00000000},
+{'4', 0xfd0c0220, 0x00000038},
+{'6', 0x02f4fde2, 0xfeaf0016},
+{'l', 0x413b5f46, 0x3f7cd700},
+{'l', 0x00000000, 0x405d3c10},
+{'l', 0xc20609ef, 0x00000000},
+{'l', 0xb5c00000, 0xc05d3c10},
+{'l', 0x413a3e50, 0xbf7cd700},
+{'l', 0x00000000, 0xc2305dea},
+{'l', 0xc135ba79, 0x4082ef50},
+{'l', 0x00000000, 0xc0543460},
+{'4', 0xffb50083, 0x00000028},
+{'6', 0x01a60000, 0x00f70206},
+{'l', 0x00000000, 0x4133788e},
+{'l', 0xc11aa370, 0x34c40000},
+{'l', 0x00000000, 0xc133788d},
+{'l', 0xc1cbbd30, 0x00000000},
+{'l', 0x00000000, 0xc0dafa22},
+{'l', 0x41dcab94, 0xc21b33ec},
+{'l', 0x40f18d50, 0x00000000},
+{'l', 0x00000000, 0x4219827c},
+{'4', 0x00000039, 0x003a0000},
+{'6', 0x0000ffc7, 0xfeebffb3},
+{'l', 0xbe107c00, 0x00000000},
+{'l', 0xc19c54e0, 0x41db8a9d},
+{'l', 0x419d75d8, 0x00000000},
+{'l', 0x00000000, 0xc1db8a9d},
+{'@', 0x000000bd, 0x00006c5c},/*        ½        x-advance: 108.359375 */
+{'M', 0x41bda130, 0x00000000},
+{'l', 0xc0e643bc, 0x00000000},
+{'4', 0xfd0c0220, 0x00000038},
+{'6', 0x02f4fde2, 0xfeaf0016},
+{'l', 0x413b5f46, 0x3f7cd700},
+{'l', 0x00000000, 0x405d3c10},
+{'l', 0xc20609ef, 0x00000000},
+{'l', 0xb5c00000, 0xc05d3c10},
+{'l', 0x413a3e50, 0xbf7cd700},
+{'l', 0x00000000, 0xc2305dea},
+{'l', 0xc135ba79, 0x4082ef50},
+{'l', 0x00000000, 0xc0543460},
+{'4', 0xffb50083, 0x00000028},
+{'6', 0x01a60000, 0x01500263},
+{'4', 0x0000fee7, 0xffca0000},
+{'l', 0x40f85320, 0xc0e1bfe4},
+{'8', 0xae51cd38, 0xbe24e019},
+{'8', 0xb00bde0b, 0xb0b6b000},
+{'9', 0x0000ffde, 0x0012ffc0},
+{'4', 0x0037fff5, 0x0000ffe1},
+{'l', 0x00000000, 0xc1422508},
+{'q', 0x40f85310, 0xbff3cf40},
+{0, 0x41567648, 0xbff3cf40},
+{'q', 0x41174090, 0x00000000},
+{0, 0x416643c0, 0x407cd6f0},
+{'8', 0x57281f28, 0x61e73600},
+{'9', 0x002affe7, 0x0066ffa3},
+{'l', 0xc1337890, 0x4120483e},
+{'l', 0x41da69a8, 0xb5000000},
+{'l', 0x00000000, 0x40f3cf3e},
+{'@', 0x000000be, 0x00006c5c},/*        ¾        x-advance: 108.359375 */
+{'M', 0x41bda130, 0x00000000},
+{'l', 0xc0e643bc, 0x00000000},
+{'4', 0xfd0c0220, 0x00000038},
+{'6', 0x02f4fde2, 0xfe570098},
+{'q', 0x00000000, 0x40ef4b68},
+{0, 0xc0bfe318, 0x413ec224},
+{'q', 0xc0bfe31c, 0x408e38e8},
+{0, 0xc17f18d6, 0x408e38e8},
+{'9', 0x0000ffc5, 0xfff1ff87},
+{'4', 0xff98fffd, 0x0000001f},
+{'l', 0x3ff3cf38, 0x40fcd6e8},
+{'8', 0x0c20070c, 0x05290514},
+{'8', 0xec4c0036, 0xb516ec16},
+{'8', 0xc0ecd400, 0xe8b9ebec},
+{'4', 0xfffdffd0, 0xffdc0000},
+{'l', 0x40c22504, 0xbe907b00},
+{'8', 0xec36ff26, 0xc110ed10},
+{'8', 0xc4f0d500, 0xefc3eff0},
+{'9', 0x0000ffdc, 0x0010ffc1},
+{'4', 0x0039fff5, 0x0000ffe1},
+{'l', 0x00000000, 0xc1422508},
+{'q', 0x40fa9500, 0xbff3cf40},
+{0, 0x41543460, 0xbff3cf40},
+{'q', 0x4114fea6, 0x00000000},
+{0, 0x4169a69c, 0x406ac7a0},
+{'8', 0x522a1c2a, 0x48e52a00},
+{'q', 0xc05d3c10, 0x406f4b60},
+{0, 0xc11e0654, 0x40974090},
+{'9', 0x000e007e, 0x0072007e},
+{'m', 0x4239add5, 0x42279e7a},
+{'l', 0x00000000, 0x4133788e},
+{'l', 0xc11aa378, 0x34c40000},
+{'l', 0x00000000, 0xc133788d},
+{'l', 0xc1cbbd2c, 0x00000000},
+{'l', 0x00000000, 0xc0dafa22},
+{'l', 0x41dcab90, 0xc21b33ec},
+{'l', 0x40f18d60, 0x00000000},
+{'l', 0x00000000, 0x4219827c},
+{'4', 0x00000039, 0x003a0000},
+{'6', 0x0000ffc7, 0xfeebffb3},
+{'l', 0xbe107a00, 0x00000000},
+{'l', 0xc19c54e2, 0x41db8a9d},
+{'l', 0x419d75d6, 0x00000000},
+{'l', 0x00000000, 0xc1db8a9d},
+{'@', 0x000000bf, 0x00004020},/*        ¿        x-advance: 64.125000 */
+{'M', 0x4204587f, 0xc2243b99},
+{'4', 0x0000002d, 0x00bc000e},
+{'l', 0xc1216932, 0x4002ef50},
+{'q', 0xc0c22504, 0x3f998278},
+{0, 0xc10d17ee, 0x40c466f2},
+{'q', 0xc03015a8, 0x409e0651},
+{0, 0xc03015a8, 0x416643ba},
+{'q', 0x00000000, 0x41270dff},
+{0, 0x4073cf38, 0x416ac78f},
+{'8', 0x2168211e, 0xe56d003f},
+{'4', 0xffa40013, 0x00000025},
+{'l', 0x00000000, 0x418f59da},
+{'q', 0xc1270e00, 0x40422508},
+{0, 0xc1a67d86, 0x40422508},
+{'q', 0xc1ef4b66, 0x00000000},
+{0, 0xc1ef4b66, 0xc1bfe31b},
+{'q', 0x00000000, 0xc135ba78},
+{0, 0x40b49982, 0xc1934d35},
+{'9', 0xffc8002d, 0xffb60084},
+{'4', 0xfff90020, 0xff6e0006},
+{'m', 0xc0cb2cb8, 0xc1919bc6},
+{'8', 0xd113e500, 0xec31ec13},
+{'8', 0x142f001c, 0x2f141314},
+{'8', 0x31ec1d00, 0x13d113ec},
+{'8', 0xedd000e4, 0xd0ededed},
+{'@', 0x000000c0, 0x00006856},/*        À        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff760044},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000c1, 0x00006856},/*        Á        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff76ffdc},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000c2, 0x00006856},/*        Â        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff76ff62},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f030, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6e0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f98},
+{'l', 0xc1974091, 0x414e8f98},
+{'l', 0xc07cd6f0, 0x00000000},
+{'@', 0x000000c3, 0x00006856},/*        Ã        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff77005f},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac790, 0x00000000},
+{'q', 0x3f877320, 0xc1889414},
+{0, 0x415c1b18, 0xc1889414},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac7a0, 0x00000000},
+{'q', 0xbf877340, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000c4, 0x00006856},/*        Ä        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff3afff0},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac6, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000c5, 0x00006856},/*        Ã…        x-advance: 104.335938 */
+{'M', 0x42021693, 0xc06f4b67},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1f8e38e, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x412b91d6, 0xbff3cf3e},
+{'l', 0x4200f59e, 0xc2b3788d},
+{'l', 0x41567648, 0x00000000},
+{'l', 0x420609f0, 0x42b3788d},
+{'l', 0x413fe318, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2200000, 0x00000000},
+{'l', 0x00000000, 0xc06f4b67},
+{'l', 0x414b2cb0, 0xbff3cf3e},
+{'l', 0xc1161f98, 0xc1da69a7},
+{'4', 0x0000fed7, 0x00daffb4},
+{'6', 0x000f0065, 0xfd750079},
+{'4', 0x016fff7f, 0x00000107},
+{'6', 0xfe91ff7b, 0xff69008c},
+{'8', 0x51df2f00, 0x21b021df},
+{'8', 0xdfaf00d1, 0xafdfdfdf},
+{'8', 0xb021d100, 0xdf51df21},
+{'8', 0x2150002f, 0x50212121},
+{'m', 0xc0b49978, 0x00000000},
+{'8', 0xcfece400, 0xeccfecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x31141d00, 0x13301314},
+{'8', 0xed2f001b, 0xcf15ed15},
+{'@', 0x000000c6, 0x00008077},/*        Æ        x-advance: 128.464844 */
+{'M', 0x424e4757, 0xc06f4b67},
+{'l', 0x412b91d4, 0xbff3cf3e},
+{'l', 0x00000000, 0xc1da69a7},
+{'l', 0xc1e885a6, 0x00000000},
+{'l', 0xc169a69a, 0x41da69a7},
+{'l', 0x41325798, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc1e2e0d9, 0x00000000},
+{'l', 0x34c00000, 0xc06f4b67},
+{'l', 0x4119827c, 0xbff3cf3e},
+{'l', 0x42369331, 0xc2a7e6b8},
+{'l', 0xc1391d5c, 0xbfa28a00},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x428c6354, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdc},
+{'l', 0xc014fec0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc11aa370, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x419e96cc, 0x00000000},
+{'l', 0x40077320, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc0077320, 0xc136db70},
+{'4', 0x0000ff62, 0x01340000},
+{'l', 0x414d6ea0, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4082ef50, 0xc18bf6f8},
+{'l', 0x4092bcb0, 0x00000000},
+{'4', 0x00c7fff6, 0x0000fdde},
+{'6', 0xffe30000, 0xfee40055},
+{'l', 0x00000000, 0xc23e31aa},
+{'l', 0xc1ccde24, 0x423e31aa},
+{'l', 0x41ccde24, 0x00000000},
+{'@', 0x000000c7, 0x0000605d},/*        Ç        x-advance: 96.363281 */
+{'M', 0x425a69a7, 0x3fb49983},
+{'q', 0xc1b7fc64, 0x00000000},
+{0, 0xc20f59da, 0xc147c9d2},
+{'q', 0xc14d6e9c, 0xc148eac8},
+{0, 0xc14d6e9c, 0xc20c8774},
+{'q', 0x00000000, 0xc1c345fc},
+{0, 0x414587e6, 0xc2139572},
+{'q', 0x414587e8, 0xc148eac8},
+{0, 0x4212747e, 0xc148eac8},
+{'9', 0x00000075, 0x001c00fd},
+{'4', 0x00a50003, 0x0000ffdb},
+{'l', 0xc0077320, 0xc14466f0},
+{'8', 0xdba5e8d9, 0xf396f3cd},
+{'q', 0xc1910b4a, 0x00000000},
+{0, 0xc1d3a3e6, 0x412a70e0},
+{'q', 0xc1053136, 0x412a70e0},
+{0, 0xc1053136, 0x42041041},
+{'q', 0x00000000, 0x41a4cc15},
+{0, 0x410ad602, 0x41fbb5f6},
+{'q', 0x410bf6f8, 0x412dd3c0},
+{0, 0x41cb2cb4, 0x412dd3c0},
+{'q', 0x4100ad60, 0x00000000},
+{0, 0x4172ae48, 0xbff3cf40},
+{'9', 0xfff10039, 0xffd7005a},
+{'4', 0xff900014, 0x00000024},
+{'l', 0xbed8b800, 0x41b1c71c},
+{'9', 0x0023ff84, 0x0023fef6},
+{'m', 0x414e8f94, 0x41718d52},
+{'8', 0x52d93300, 0x1f9d1fda},
+{'9', 0x0000ffd6, 0xfff4ffb3},
+{'l', 0x00000000, 0xc0a70e00},
+{'8', 0x0621030c, 0x02210215},
+{'8', 0xf0310021, 0xd60ff00f},
+{'8', 0xd3eae500, 0xecc1efea},
+{'4', 0xffaa0017, 0x00000030},
+{'l', 0xbfa28a40, 0x40b91d59},
+{'8', 0x1d500533, 0x421d181d},
+{'@', 0x000000c8, 0x00005841},/*        È        x-advance: 88.253906 */
+{'M', 0x40853137, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x41cc4da9, 0x00000000},
+{'l', 0x400bf6f0, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc00bf6f0, 0xc136db70},
+{'4', 0x0000ff34, 0x01340000},
+{'l', 0x4194fea5, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x4094feb0, 0x00000000},
+{'4', 0x00c7fff6, 0x0000fda4},
+{'6', 0xffe30000, 0xfcea018a},
+{'l', 0xc1c7c9d1, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5a, 0x00000000},
+{'l', 0x415d3c10, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785320, 0x00000000},
+{'@', 0x000000c9, 0x00005841},/*        É        x-advance: 88.253906 */
+{'M', 0x40853137, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x41cc4da9, 0x00000000},
+{'l', 0x400bf6f0, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc00bf6f0, 0xc136db70},
+{'4', 0x0000ff34, 0x01340000},
+{'l', 0x4194fea5, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x4094feb0, 0x00000000},
+{'4', 0x00c7fff6, 0x0000fda4},
+{'6', 0xffe30000, 0xfcea00e7},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000ca, 0x00005841},/*        Ê        x-advance: 88.253906 */
+{'M', 0x40853137, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x41cc4da9, 0x00000000},
+{'l', 0x400bf6f0, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc00bf6f0, 0xc136db70},
+{'4', 0x0000ff34, 0x01340000},
+{'l', 0x4194fea5, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x4094feb0, 0x00000000},
+{'4', 0x00c7fff6, 0x0000fda4},
+{'6', 0xffe30000, 0xfcea0089},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974092, 0xc14e8f98},
+{'l', 0xc1974090, 0x414e8f98},
+{'l', 0xc07cd6e8, 0x00000000},
+{'@', 0x000000cb, 0x00005841},/*        Ë        x-advance: 88.253906 */
+{'M', 0x40853137, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x428df0a7, 0x00000000},
+{'4', 0x00b50000, 0x0000ffdb},
+{'l', 0xc0107ac0, 0xc174f038},
+{'9', 0xfff9ffc1, 0xfff9ff4a},
+{'l', 0xc177321e, 0x00000000},
+{'l', 0x00000000, 0x4213ddaf},
+{'l', 0x41cc4da9, 0x00000000},
+{'l', 0x400bf6f0, 0xc1349984},
+{'l', 0x40907ad0, 0x00000000},
+{'l', 0x00000000, 0x41e885a6},
+{'l', 0xc0907ad0, 0x00000000},
+{'l', 0xc00bf6f0, 0xc136db70},
+{'4', 0x0000ff34, 0x01340000},
+{'l', 0x4194fea5, 0xb5c00000},
+{'9', 0x00000091, 0xfff700be},
+{'l', 0x4080ad60, 0xc18bf6f8},
+{'l', 0x4094feb0, 0x00000000},
+{'4', 0x00c7fff6, 0x0000fda4},
+{'6', 0xffe30000, 0xfcaf0119},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000cc, 0x0000301c},/*        Ì        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0xc0b49983},
+{'l', 0x41422508, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'6', 0x029b0000, 0xfcfafff0},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0xb5400000, 0xc0270e00},
+{'l', 0x41706c5d, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000cd, 0x0000301c},/*        Í        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0xc0b49983},
+{'l', 0x41422508, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'6', 0x029b0000, 0xfcfaff7f},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5e, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d3, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000ce, 0x0000301c},/*        ÃŽ        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0xc0b49983},
+{'l', 0x41422508, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'6', 0x029b0000, 0xfcfaff13},
+{'l', 0xb5600000, 0xc014fea0},
+{'l', 0x41761129, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f032, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6e0, 0x00000000},
+{'l', 0xc1974091, 0xc14e8f98},
+{'l', 0xc1974091, 0x414e8f98},
+{'l', 0xc07cd6ec, 0x00000000},
+{'@', 0x000000cf, 0x0000301c},/*        Ï        x-advance: 48.109375 */
+{'M', 0x41f7321e, 0xc0b49983},
+{'l', 0x41422508, 0x3ff3cf3e},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc2174091, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'6', 0x029b0000, 0xfcbeff9d},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000d0, 0x00006856},/*        Ð        x-advance: 104.335938 */
+{'M', 0x42320f5a, 0xc2bd34d4},
+{'q', 0x41d5e5d0, 0x00000000},
+{0, 0x42216934, 0x413fe320},
+{'q', 0x415afa20, 0x413ec220},
+{0, 0x415afa20, 0x420b1e40},
+{'q', 0x00000000, 0x41c2b581},
+{0, 0xc13a3e50, 0x42110b4a},
+{'9', 0x005effa3, 0x005efee7},
+{'l', 0xc23e31aa, 0xbe907ac0},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc21aebaf},
+{'l', 0xc148eac8, 0x00000000},
+{'l', 0xb4800000, 0xc0b91d58},
+{'l', 0x4148eac8, 0x00000000},
+{'l', 0x00000000, 0xc21b7c2a},
+{'4', 0xfff2ff9f, 0xffe30000},
+{'6', 0x00000142, 0x0163005f},
+{'4', 0x002e0000, 0x0000ff2c},
+{'l', 0x00000000, 0x4216f853},
+{'q', 0x41077322, 0x3f107ad0},
+{0, 0x41a0d8b9, 0x3f107ad0},
+{'q', 0x418b667c, 0x00000000},
+{0, 0x41ccde24, 0xc11e0652},
+{'q', 0x4102ef48, 0xc11f2749},
+{0, 0x4102ef48, 0xc1fa9500},
+{'q', 0x00000000, 0xc1a31aa2},
+{0, 0xc1282ef0, 0xc1f580ae},
+{'9', 0xffaeffad, 0xffaeff01},
+{'l', 0xc136db6e, 0x00000000},
+{'l', 0x00000000, 0x42186186},
+{'l', 0x41d4c4db, 0x00000000},
+{'@', 0x000000d1, 0x00006856},/*        Ñ        x-advance: 104.335938 */
+{'M', 0x42a2f685, 0xc2b20f5a},
+{'l', 0xc14b2cb0, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59c, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc1422500, 0x3feac780},
+{'l', 0x00000000, 0x42b20f5a},
+{'l', 0xc0dafa20, 0x00000000},
+{'l', 0xc2695e5e, 0xc2aa28a3},
+{'l', 0x00000000, 0x429edf0b},
+{'l', 0x414b2cb4, 0x3ff3cf32},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc200f59e, 0x00000000},
+{'l', 0xb5000000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'4', 0x000000e5, 0x02300185},
+{'6', 0xfdfd0000, 0xff95ff65},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac790, 0x00000000},
+{'q', 0x3f877330, 0xc1889414},
+{0, 0x415c1b18, 0xc1889414},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac780, 0x00000000},
+{'q', 0xbf877300, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000d2, 0x00006856},/*        Ã’        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x421a5b34, 0xc25c6354},
+{'l', 0xc1c7c9d4, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c60, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000d3, 0x00006856},/*        Ó        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x41bc8039, 0xc25c6354},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c10, 0xc199827c},
+{'l', 0x41706c58, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d0, 0x41974090},
+{'l', 0xc0785320, 0x00000000},
+{'@', 0x000000d4, 0x00006856},/*        Ô        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x410bf6f8, 0xc25c6354},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd700, 0x00000000},
+{'l', 0xc197408e, 0xc14e8f98},
+{'l', 0xc1974092, 0x414e8f98},
+{'l', 0xc07cd6e8, 0x00000000},
+{'@', 0x000000d5, 0x00006856},/*        Õ        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x4221f9ae, 0xc25c1b18},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac788, 0x00000000},
+{'q', 0x3f877320, 0xc1889414},
+{0, 0x415c1b16, 0xc1889414},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac7a0, 0x00000000},
+{'q', 0xbf877340, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000d6, 0x00006856},/*        Ö        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'q', 0x41b6db6c, 0x00000000},
+{0, 0x420a4588, 0x414466f0},
+{'q', 0x413b5f40, 0x41434600},
+{0, 0x413b5f40, 0x420fea54},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'q', 0xc1b40908, 0x34c00000},
+{0, 0xc2096cd0, 0xc14466f1},
+{'9', 0xff9effa2, 0xfedcffa2},
+{'m', 0x416be886, 0x00000000},
+{'q', 0x00000000, 0x41b64af4},
+{0, 0x40f3cf3c, 0x42041042},
+{'q', 0x40f3cf40, 0x4123ab1c},
+{0, 0x41bec226, 0x4123ab1c},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'q', 0x00000000, 0xc1b529fc},
+{0, 0xc0f61130, 0xc2025ed0},
+{'q', 0xc0f3cf40, 0xc1204840},
+{0, 0xc1bec224, 0xc1204840},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x41cd6e9f, 0xc27a4cc2},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac6, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000d7, 0x0000517b},/*        ×        x-advance: 81.480469 */
+{'M', 0x42231aa4, 0xc22b91d6},
+{'l', 0xc1c2b582, 0x41c22507},
+{'l', 0xc0a0483c, 0xc0a28a2c},
+{'l', 0x41c22507, 0xc1c345fc},
+{'l', 0xc1c22507, 0xc1c10410},
+{'l', 0x40a70e00, 0xc0a70e00},
+{'l', 0x41c10411, 0x41c22506},
+{'l', 0x41c345fc, 0xc1c22506},
+{'l', 0x40a04840, 0x40a28a30},
+{'l', 0xc1c22508, 0x41c22504},
+{'l', 0x41c22508, 0x41c345fc},
+{'l', 0xc0a04840, 0x40a28a2c},
+{'l', 0xc1c345fc, 0xc1c22507},
+{'@', 0x000000d8, 0x00006856},/*        Ø        x-advance: 104.335938 */
+{'M', 0x40bda130, 0xc23da130},
+{'q', 0x00000000, 0xc2410410},
+{0, 0x4238d51c, 0xc2410410},
+{'9', 0x00000092, 0x003f00eb},
+{'4', 0xffad0045, 0x00000040},
+{'l', 0xc13fe318, 0x416764b0},
+{'q', 0x413fe318, 0x4148eac8},
+{0, 0x413fe318, 0x42110b4a},
+{'q', 0x00000000, 0x41c10411},
+{0, 0xc13da128, 0x4211e402},
+{'q', 0xc13da130, 0x414587e8},
+{0, 0xc209b50e, 0x414587e8},
+{'9', 0x0000ff6e, 0xffc2ff17},
+{'4', 0x0051ffbc, 0x0000ffbd},
+{'l', 0x413fe31b, 0xc16764b0},
+{'9', 0xff9dff9f, 0xfedaff9f},
+{'m', 0x416be886, 0x00000000},
+{'9', 0x008e0000, 0x00e00024},
+{'l', 0x4249c380, 0xc274177b},
+{'q', 0xc0f3cf30, 0xc11aa370},
+{0, 0xc1bc8038, 0xc11aa370},
+{'q', 0xc1825ed2, 0x00000000},
+{0, 0xc1bf52a1, 0x41204840},
+{'9', 0x004fffc4, 0x0104ffc4},
+{'m', 0x427bfe32, 0x00000000},
+{'9', 0xff770000, 0xff26ffdc},
+{'l', 0xc248eac8, 0x42745fb9},
+{'q', 0x40ef4b68, 0x41174090},
+{0, 0x41b9add4, 0x41174090},
+{'q', 0x41813ddc, 0x35000000},
+{0, 0x41bec224, 0xc123ab1e},
+{'q', 0x40f61130, 0xc123ab1e},
+{0, 0x40f61130, 0xc2041042},
+{'@', 0x000000d9, 0x00006856},/*        Ù        x-advance: 104.335938 */
+{'M', 0x42a38700, 0xc2b20f5a},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59e, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42620821},
+{'q', 0x00000000, 0x4188039c},
+{0, 0xc1161fa0, 0x41cbbd2d},
+{'q', 0xc114fea8, 0x41077322},
+{0, 0xc1d8b836, 0x41077322},
+{'q', 0xc196b016, 0x34c00000},
+{0, 0xc1e1bfe3, 0xc1077322},
+{'9', 0xffbcffb6, 0xff3fffb6},
+{'l', 0x00000000, 0xc26764b0},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42632916},
+{'q', 0x00000000, 0x41cdff1a},
+{0, 0x41c85a4d, 0x41cdff1a},
+{'q', 0x4158b838, 0xb5800000},
+{0, 0x41a5ed08, 0xc0cd6ea0},
+{'9', 0xffcd003a, 0xff68003a},
+{'6', 0xfe380000, 0xff95ff4f},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000da, 0x00006856},/*        Ú        x-advance: 104.335938 */
+{'M', 0x42a38700, 0xc2b20f5a},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59e, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42620821},
+{'q', 0x00000000, 0x4188039c},
+{0, 0xc1161fa0, 0x41cbbd2d},
+{'q', 0xc114fea8, 0x41077322},
+{0, 0xc1d8b836, 0x41077322},
+{'q', 0xc196b016, 0x34c00000},
+{0, 0xc1e1bfe3, 0xc1077322},
+{'9', 0xffbcffb6, 0xff3fffb6},
+{'l', 0x00000000, 0xc26764b0},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42632916},
+{'q', 0x00000000, 0x41cdff1a},
+{0, 0x41c85a4d, 0x41cdff1a},
+{'q', 0x4158b838, 0xb5800000},
+{0, 0x41a5ed08, 0xc0cd6ea0},
+{'9', 0xffcd003a, 0xff68003a},
+{'6', 0xfe380000, 0xff95fee2},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000db, 0x00006856},/*        Û        x-advance: 104.335938 */
+{'M', 0x42a38700, 0xc2b20f5a},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59e, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42620821},
+{'q', 0x00000000, 0x4188039c},
+{0, 0xc1161fa0, 0x41cbbd2d},
+{'q', 0xc114fea8, 0x41077322},
+{0, 0xc1d8b836, 0x41077322},
+{'q', 0xc196b016, 0x34c00000},
+{0, 0xc1e1bfe3, 0xc1077322},
+{'9', 0xffbcffb6, 0xff3fffb6},
+{'l', 0x00000000, 0xc26764b0},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42632916},
+{'q', 0x00000000, 0x41cdff1a},
+{0, 0x41c85a4d, 0x41cdff1a},
+{'q', 0x4158b838, 0xb5800000},
+{0, 0x41a5ed08, 0xc0cd6ea0},
+{'9', 0xffcd003a, 0xff68003a},
+{'6', 0xfe380000, 0xff95fe6d},
+{'l', 0xb6000000, 0xc014fea0},
+{'l', 0x4176112a, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd700, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f98},
+{'l', 0xc1974090, 0x414e8f98},
+{'l', 0xc07cd6e8, 0x00000000},
+{'@', 0x000000dc, 0x00006856},/*        Ü        x-advance: 104.335938 */
+{'M', 0x42a38700, 0xc2b20f5a},
+{'l', 0xc14b2cb8, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x4200f59e, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42620821},
+{'q', 0x00000000, 0x4188039c},
+{0, 0xc1161fa0, 0x41cbbd2d},
+{'q', 0xc114fea8, 0x41077322},
+{0, 0xc1d8b836, 0x41077322},
+{'q', 0xc196b016, 0x34c00000},
+{0, 0xc1e1bfe3, 0xc1077322},
+{'9', 0xffbcffb6, 0xff3fffb6},
+{'l', 0x00000000, 0xc26764b0},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42174091, 0x00000000},
+{'4', 0x001d0000, 0x000eff9f},
+{'l', 0x00000000, 0x42632916},
+{'q', 0x00000000, 0x41cdff1a},
+{0, 0x41c85a4d, 0x41cdff1a},
+{'q', 0x4158b838, 0xb5800000},
+{0, 0x41a5ed08, 0xc0cd6ea0},
+{'9', 0xffcd003a, 0xff68003a},
+{'6', 0xfe380000, 0xff59fee7},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000dd, 0x00006856},/*        Ý        x-advance: 104.335938 */
+{'M', 0x426c7901, 0xc214fea5},
+{'l', 0x00000000, 0x41fcd6e9},
+{'l', 0x41706c5c, 0x3ff3cf42},
+{'l', 0x00000000, 0x406f4b67},
+{'l', 0xc22eac7a, 0x00000000},
+{'l', 0x36000000, 0xc06f4b67},
+{'l', 0x41706c5e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc1f97409},
+{'l', 0xc204e8fa, 0xc250d17f},
+{'l', 0xc12a70df, 0xbfeac780},
+{'l', 0x34800000, 0xc06f4b80},
+{'l', 0x42200001, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc14b2cb4, 0x3feac780},
+{'l', 0x41d948b0, 0x422eac79},
+{'l', 0x41ce8f94, 0xc22eac79},
+{'l', 0xc13fe318, 0xbfeac780},
+{'l', 0x00000000, 0xc06f4b80},
+{'l', 0x41f61128, 0x00000000},
+{'4', 0x001d0000, 0x000effae},
+{'6', 0x019eff07, 0xfdf6ff91},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000de, 0x0000505a},/*        Þ        x-advance: 80.351562 */
+{'M', 0x421f6f85, 0xc298cde2},
+{'q', 0x420ad603, 0x00000000},
+{0, 0x420ad603, 0x41deed7c},
+{'q', 0x00000000, 0x416885a4},
+{0, 0xc10d17f0, 0x41b0a627},
+{'9', 0x003cffbb, 0x003cff37},
+{'0', 0x6a0000ab, 0x1d000f61},
+{'l', 0xc213ddb0, 0x00000000},
+{'l', 0x35000000, 0xc06f4b67},
+{'l', 0x4133788e, 0xbff3cf3e},
+{'l', 0x00000000, 0xc2a6c5c2},
+{'l', 0xc133788e, 0xbfeac780},
+{'l', 0x35000000, 0xc06f4b80},
+{'l', 0x4213ddb0, 0x00000000},
+{'0', 0x0e9f1d00, 0x004f6500},
+{'m', 0x41a55c90, 0x41e00e72},
+{'q', 0x00000000, 0xc13fe31c},
+{0, 0xc0b49980, 0xc18a458a},
+{'9', 0xffd6ffd4, 0xffd6ff70},
+{'4', 0x0000ffc9, 0x01740000},
+{'l', 0x40eac78c, 0x00000000},
+{'q', 0x413b5f48, 0x00000000},
+{0, 0x418bf6fa, 0xc0b6db6c},
+{'q', 0x40b91d58, 0xc0b91d5c},
+{0, 0x40b91d58, 0xc1922c3f},
+{'@', 0x000000df, 0x0000483d},/*        ß        x-advance: 72.238281 */
+{'M', 0x42777a5c, 0xc28cab92},
+{'8', 0x06cc02e7, 0x0dd103e6},
+{'8', 0x1cdd0aeb, 0x33f312f3},
+{'8', 0x48162900, 0x43491f16},
+{'8', 0x4c482230, 0x65172a17},
+{'q', 0x00000000, 0x411aa372},
+{0, 0xc0add3b8, 0x4169a69b},
+{'q', 0xc0ab91d8, 0x409bc467},
+{0, 0xc17cd6ec, 0x409bc467},
+{'8', 0xf9b700de, 0xedc7f9da},
+{'4', 0xff940000, 0x00000019},
+{'l', 0x4014feb0, 0x40d43460},
+{'8', 0x1a220f0c, 0x0a330a16},
+{'8', 0xa3540054, 0xb1e9d300},
+{'8', 0xbdb9dfea, 0xb8b9e0d2},
+{'8', 0xa0e9d8e9, 0x9e23c400},
+{'q', 0x408e38e0, 0xc0974090},
+{0, 0x41531368, 0xc0c6a8e0},
+{'q', 0x00000000, 0xc13c8038},
+{0, 0xc0422500, 0xc188039c},
+{'q', 0xc0422510, 0xc0a70e00},
+{0, 0xc1294fec, 0xc0a70e00},
+{'9', 0x0000ff93, 0x008eff93},
+{'l', 0x00000000, 0x429c9d1f},
+{'l', 0xc1acb2cc, 0x00000000},
+{'4', 0xffe70000, 0xfff2004f},
+{'l', 0x00000000, 0xc28bd2da},
+{'q', 0x00000000, 0xc1543460},
+{0, 0x40cb2cb2, 0xc1a0483c},
+{'q', 0x40cd6ea0, 0xc0dafa20},
+{0, 0x41986186, 0xc0dafa20},
+{'q', 0x4153136c, 0x00000000},
+{0, 0x4199827c, 0x40ef4b60},
+{'q', 0x40bfe320, 0x40ef4b60},
+{0, 0x40bfe320, 0x41bf52a0},
+{'@', 0x000000e0, 0x00004020},/*        à        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe97ffe2},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0xb5800000, 0xc0270e00},
+{'l', 0x41706c5d, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000e1, 0x00004020},/*        á        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe97ff70},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0e, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d3, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000e2, 0x00004020},/*        â        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe97ff00},
+{'l', 0xb5800000, 0xc014fea0},
+{'l', 0x41761129, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f90},
+{'l', 0xc1974091, 0x414e8f90},
+{'l', 0xc07cd6ec, 0x00000000},
+{'@', 0x000000e3, 0x00004020},/*        ã        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe98fffa},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac790, 0x00000000},
+{'q', 0x3f877320, 0xc1889418},
+{0, 0x415c1b17, 0xc1889418},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac790, 0x00000000},
+{'q', 0xbf877320, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000e4, 0x00004020},/*        ä        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe6dff84},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac7, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000e5, 0x00004020},/*        å        x-advance: 64.125000 */
+{'M', 0x42033789, 0xc2879741},
+{'q', 0x412dd3c0, 0x00000000},
+{0, 0x417f18d4, 0x408e38e8},
+{'9', 0x00230029, 0x006c0029},
+{'l', 0x00000000, 0x42333050},
+{'l', 0x41041040, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff6f},
+{'l', 0xbfab91e0, 0xc0d43460},
+{'q', 0xc100ad60, 0x4100ad60},
+{0, 0xc1a43b99, 0x4100ad60},
+{'q', 0xc188039d, 0x34c00000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'9', 0xffed005b, 0xffed00a0},
+{'m', 0x41161f9c, 0x4208039d},
+{'l', 0xc113ddb0, 0x3e907b00},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'8', 0x63506300, 0xf8420026},
+{'9', 0xfff7001c, 0xffea0038},
+{'6', 0xff440000, 0xfe3c002a},
+{'8', 0x51df2f00, 0x21b021df},
+{'8', 0xdfaf00d1, 0xafdfdfdf},
+{'8', 0xb021d100, 0xdf51df21},
+{'8', 0x2150002f, 0x50212121},
+{'m', 0xc0b49980, 0x00000000},
+{'8', 0xcfece400, 0xeccfecec},
+{'8', 0x14cf00e4, 0x31ec14ec},
+{'8', 0x31141d00, 0x13301314},
+{'8', 0xed2f001b, 0xcf15ed15},
+{'@', 0x000000e6, 0x0000605d},/*        æ        x-advance: 96.363281 */
+{'M', 0x42579741, 0xc2057974},
+{'l', 0x00000000, 0x40cb2cb0},
+{'8', 0x660f4501, 0x312c200e},
+{'8', 0x1050101e, 0xfb48001e},
+{'9', 0xfffb0029, 0xfff50044},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1fb812e4, 0x0ca60cd4},
+{'q', 0xc181ce56, 0x00000000},
+{0, 0xc1b5ba78, 0xc1119bc5},
+{'q', 0xc123ab1c, 0x41119bc5},
+{0, 0xc1bec225, 0x41119bc5},
+{'q', 0xc188039d, 0xb4000000},
+{0, 0xc188039d, 0xc19e0652},
+{'8', 0xa914cb00, 0xcb42de14},
+{'9', 0xffee002d, 0xffec0082},
+{'4', 0xfffe004f, 0xffae0000},
+{'8', 0xb0ecca00, 0xe7c3e7ed},
+{'9', 0x0000ffc8, 0x001aff99},
+{'4', 0x0042ffed, 0x0000ffe1},
+{'l', 0x00000000, 0xc16764b0},
+{'q', 0x4136db6f, 0xc01e0660},
+{0, 0x41a0d8b8, 0xc01e0660},
+{'q', 0x413c803c, 0x00000000},
+{0, 0x4185c1b2, 0x40a70e00},
+{'q', 0x40c6a8d8, 0xc0b015b0},
+{0, 0x4189b50c, 0xc0b015b0},
+{'q', 0x414587e8, 0x00000000},
+{0, 0x41946e2c, 0x40eac798},
+{'9', 0x003a0032, 0x00ac0032},
+{'4', 0x002e0000, 0x0000fed3},
+{'m', 0xc1d827bc, 0x41d827bb},
+{'q', 0x4101ce58, 0x35000000},
+{0, 0x4189b50e, 0xc099827c},
+{'8', 0xdcf6f7fb, 0xcafbe5fb},
+{'4', 0xffa60000, 0x0002ffb7},
+{'8', 0x1d9a02b5, 0x58e61ae6},
+{'9', 0x00630000, 0x00630050},
+{'m', 0x421f6f85, 0xc26056b0},
+{'q', 0xc0d67648, 0xb6800000},
+{0, 0xc11ce55c, 0x40a70df8},
+{'9', 0x0029ffe8, 0x0091ffe8},
+{'l', 0x41cb2cb2, 0x00000000},
+{'q', 0x00000000, 0xc1410410},
+{0, 0xc046a8e0, 0xc18da868},
+{'q', 0xc0422500, 0xc0b6db70},
+{0, 0xc1174090, 0xc0b6db70},
+{'@', 0x000000e7, 0x00004020},/*        ç        x-advance: 64.125000 */
+{'M', 0x426ebaec, 0xc080ad60},
+{'8', 0x20b414e5, 0x0b9d0bd0},
+{'q', 0xc200f59e, 0x00000000},
+{0, 0xc200f59e, 0xc20c3f36},
+{'q', 0x36000000, 0xc184a0bc},
+{0, 0x4102ef4e, 0xc1cbbd2e},
+{'q', 0x41041040, 0xc10f59dc},
+{0, 0x41bc8039, 0xc10f59dc},
+{'9', 0x0000004c, 0x001100a6},
+{'4', 0x00930000, 0x0000ffe1},
+{'l', 0xc0422500, 0xc13b5f44},
+{'q', 0xc0bb5f40, 0xc0543460},
+{0, 0xc1609eec, 0xc0543460},
+{'q', 0xc1974091, 0x00000000},
+{0, 0xc1974091, 0x41e643ba},
+{'q', 0x00000000, 0x416f4b68},
+{0, 0x40b6db6c, 0x41ab015c},
+{'q', 0x40b91d58, 0x40cb2cb0},
+{0, 0x418ec95e, 0x40cb2cb0},
+{'9', 0x00000052, 0xffee008f},
+{'6', 0x00210000, 0x00a4ffb1},
+{'8', 0x52d93300, 0x1f9d1fda},
+{'9', 0x0000ffd6, 0xfff4ffb3},
+{'l', 0x00000000, 0xc0a70e00},
+{'8', 0x0621030c, 0x02210215},
+{'8', 0xf0310021, 0xd60ff00f},
+{'8', 0xd3eae500, 0xecc1efea},
+{'4', 0xffaa0017, 0x00000030},
+{'l', 0xbfa28a20, 0x40b91d59},
+{'8', 0x1d500533, 0x421d181d},
+{'@', 0x000000e8, 0x00004020},/*        è        x-advance: 64.125000 */
+{'M', 0x4192bcba, 0xc2057974},
+{'l', 0x00000000, 0x3fa28a20},
+{'q', 0x00000000, 0x411bc468},
+{0, 0x40077320, 0x4172ae48},
+{'8', 0x41352a11, 0x165e1624},
+{'8', 0xfb48001e, 0xf544fb29},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1eb711e5, 0x0ca20cd2},
+{'q', 0xc177321e, 0x00000000},
+{0, 0xc1b529fe, 0xc1053137},
+{'q', 0xc0e401cd, 0xc1053136},
+{0, 0xc0e401cd, 0xc1d5e5d1},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40e885a5, 0xc1cf200e},
+{'q', 0x40e885a4, 0xc108941c},
+{0, 0x41a5ed0a, 0xc108941c},
+{'9', 0x000000cb, 0x00e700cb},
+{'4', 0x002e0000, 0x0000feba},
+{'m', 0x4174f034, 0xc1e885a6},
+{'q', 0xc0eac790, 0x00000000},
+{0, 0xc1349984, 0x40bda130},
+{'9', 0x002fffe1, 0x008bffe1},
+{'l', 0x41e2e0d8, 0x00000000},
+{'q', 0x00000000, 0xc14a0bbc},
+{0, 0xc04fb080, 0xc18fea54},
+{'9', 0xffd5ffe7, 0xffd5ffb1},
+{'m', 0x41041040, 0xc1841042},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000e9, 0x00004020},/*        é        x-advance: 64.125000 */
+{'M', 0x4192bcba, 0xc2057974},
+{'l', 0x00000000, 0x3fa28a20},
+{'q', 0x00000000, 0x411bc468},
+{0, 0x40077320, 0x4172ae48},
+{'8', 0x41352a11, 0x165e1624},
+{'8', 0xfb48001e, 0xf544fb29},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1eb711e5, 0x0ca20cd2},
+{'q', 0xc177321e, 0x00000000},
+{0, 0xc1b529fe, 0xc1053137},
+{'q', 0xc0e401cd, 0xc1053136},
+{0, 0xc0e401cd, 0xc1d5e5d1},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40e885a5, 0xc1cf200e},
+{'q', 0x40e885a4, 0xc108941c},
+{0, 0x41a5ed0a, 0xc108941c},
+{'9', 0x000000cb, 0x00e700cb},
+{'4', 0x002e0000, 0x0000feba},
+{'m', 0x4174f034, 0xc1e885a6},
+{'q', 0xc0eac790, 0x00000000},
+{0, 0xc1349984, 0x40bda130},
+{'9', 0x002fffe1, 0x008bffe1},
+{'l', 0x41e2e0d8, 0x00000000},
+{'q', 0x00000000, 0xc14a0bbc},
+{0, 0xc04fb080, 0xc18fea54},
+{'9', 0xffd5ffe7, 0xffd5ffb1},
+{'m', 0xc0d6764c, 0xc1841042},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0e, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d3, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000ea, 0x00004020},/*        ê        x-advance: 64.125000 */
+{'M', 0x4192bcba, 0xc2057974},
+{'l', 0x00000000, 0x3fa28a20},
+{'q', 0x00000000, 0x411bc468},
+{0, 0x40077320, 0x4172ae48},
+{'8', 0x41352a11, 0x165e1624},
+{'8', 0xfb48001e, 0xf544fb29},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1eb711e5, 0x0ca20cd2},
+{'q', 0xc177321e, 0x00000000},
+{0, 0xc1b529fe, 0xc1053137},
+{'q', 0xc0e401cd, 0xc1053136},
+{0, 0xc0e401cd, 0xc1d5e5d1},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40e885a5, 0xc1cf200e},
+{'q', 0x40e885a4, 0xc108941c},
+{0, 0x41a5ed0a, 0xc108941c},
+{'9', 0x000000cb, 0x00e700cb},
+{'4', 0x002e0000, 0x0000feba},
+{'m', 0x4174f034, 0xc1e885a6},
+{'q', 0xc0eac790, 0x00000000},
+{0, 0xc1349984, 0x40bda130},
+{'9', 0x002fffe1, 0x008bffe1},
+{'l', 0x41e2e0d8, 0x00000000},
+{'q', 0x00000000, 0xc14a0bbc},
+{0, 0xc04fb080, 0xc18fea54},
+{'9', 0xffd5ffe7, 0xffd5ffb1},
+{'m', 0xc1b7fc64, 0xc1841042},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x41761128, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f90},
+{'l', 0xc1974090, 0x414e8f90},
+{'l', 0xc07cd6f0, 0x00000000},
+{'@', 0x000000eb, 0x00004020},/*        ë        x-advance: 64.125000 */
+{'M', 0x4192bcba, 0xc2057974},
+{'l', 0x00000000, 0x3fa28a20},
+{'q', 0x00000000, 0x411bc468},
+{0, 0x40077320, 0x4172ae48},
+{'8', 0x41352a11, 0x165e1624},
+{'8', 0xfb48001e, 0xf544fb29},
+{'l', 0x00000000, 0x407cd6ea},
+{'8', 0x1eb711e5, 0x0ca20cd2},
+{'q', 0xc177321e, 0x00000000},
+{0, 0xc1b529fe, 0xc1053137},
+{'q', 0xc0e401cd, 0xc1053136},
+{0, 0xc0e401cd, 0xc1d5e5d1},
+{'q', 0x00000000, 0xc18ad602},
+{0, 0x40e885a5, 0xc1cf200e},
+{'q', 0x40e885a4, 0xc108941c},
+{0, 0x41a5ed0a, 0xc108941c},
+{'9', 0x000000cb, 0x00e700cb},
+{'4', 0x002e0000, 0x0000feba},
+{'m', 0x4174f034, 0xc1e885a6},
+{'q', 0xc0eac790, 0x00000000},
+{0, 0xc1349984, 0x40bda130},
+{'9', 0x002fffe1, 0x008bffe1},
+{'l', 0x41e2e0d8, 0x00000000},
+{'q', 0x00000000, 0xc14a0bbc},
+{0, 0xc04fb080, 0xc18fea54},
+{'9', 0xffd5ffe7, 0xffd5ffb1},
+{'m', 0xc0cb2cb4, 0xc1ae643a},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac7, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000ec, 0x00002824},/*        ì        x-advance: 40.140625 */
+{'M', 0x41d04104, 0xc09e0652},
+{'l', 0x4135ba78, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096cd0, 0x00000000},
+{'l', 0x35c00000, 0xc04b2cb3},
+{'l', 0x41349982, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc1161f9b, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a8},
+{'6', 0x01eb0000, 0xfdb00003},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0xb4c00000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0e, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785318, 0x00000000},
+{'@', 0x000000ed, 0x00002824},/*        í        x-advance: 40.140625 */
+{'M', 0x41d04104, 0xc09e0652},
+{'l', 0x4135ba78, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096cd0, 0x00000000},
+{'l', 0x35c00000, 0xc04b2cb3},
+{'l', 0x41349982, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc1161f9b, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a8},
+{'6', 0x01eb0000, 0xfdb0ff7e},
+{'l', 0xb5800000, 0xc014fea0},
+{'l', 0x415d3c0d, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785314, 0x00000000},
+{'@', 0x000000ee, 0x00002824},/*        î        x-advance: 40.140625 */
+{'M', 0x41d04104, 0xc09e0652},
+{'l', 0x4135ba78, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096cd0, 0x00000000},
+{'l', 0x35c00000, 0xc04b2cb3},
+{'l', 0x41349982, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc1161f9b, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a8},
+{'6', 0x01eb0000, 0xfdb0ff1a},
+{'l', 0xb5400000, 0xc014fea0},
+{'l', 0x41761129, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f90},
+{'l', 0xc1974091, 0x414e8f90},
+{'l', 0xc07cd6eb, 0x00000000},
+{'@', 0x000000ef, 0x00002824},/*        ï        x-advance: 40.140625 */
+{'M', 0x41d04104, 0xc09e0652},
+{'l', 0x4135ba78, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc2096cd0, 0x00000000},
+{'l', 0x35c00000, 0xc04b2cb3},
+{'l', 0x41349982, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc1161f9b, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a8},
+{'6', 0x01eb0000, 0xfd86ff9d},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000f0, 0x0000483d},/*        ð        x-advance: 72.238281 */
+{'M', 0x41813ddb, 0xc29b7c2a},
+{'l', 0x4180ad61, 0xc113ddb0},
+{'9', 0xffd7ffc6, 0xffc2ff85},
+{'l', 0x00000000, 0xc0b015b0},
+{'9', 0x00180066, 0x004b00b1},
+{'4', 0xffa80096, 0x00350000},
+{'l', 0xc15afa20, 0x4101ce58},
+{'q', 0x412a70e0, 0x4109b510},
+{0, 0x41837fc6, 0x41b015ac},
+{'9', 0x006a002e, 0x00fa0030},
+{'l', 0x3e107a00, 0x401e0658},
+{'q', 0x00000000, 0x4202ef4c},
+{0, 0xc1f85312, 0x4202ef4c},
+{'q', 0xc16f4b68, 0xb5d00000},
+{0, 0xc1b49984, 0xc106522e},
+{'q', 0xc0f3cf3c, 0xc106522d},
+{0, 0xc0f3cf3c, 0xc1c2b581},
+{'q', 0x00000000, 0xc17bb5f6},
+{0, 0x40f3cf3e, 0xc1c07395},
+{'q', 0x40f3cf3e, 0xc1053138},
+{0, 0x41b91d5a, 0xc1053138},
+{'q', 0x40f61128, 0x00000000},
+{0, 0x415e5d00, 0x401e0650},
+{'9', 0xff9cffe5, 0xff52ff97},
+{'4', 0x0061ff5a, 0xffca0000},
+{'m', 0x421788ce, 0x4239add4},
+{'q', 0x00000000, 0xc161bfe0},
+{0, 0xc08e38e8, 0xc1a31aa2},
+{'8', 0xce91cedd, 0x2f9600b7},
+{'q', 0xc0853134, 0x40bfe318},
+{0, 0xc0853134, 0x41a5ed09},
+{'q', 0x00000000, 0x416e2a72},
+{0, 0x40853134, 0x41a82ef5},
+{'8', 0x316a3121, 0xcd6e004a},
+{'q', 0x40907ad0, 0xc0cd6e9e},
+{0, 0x40907ad0, 0xc1a5ed0a},
+{'@', 0x000000f1, 0x0000483d},/*        ñ        x-advance: 72.238281 */
+{'M', 0x41b6db6e, 0xc273cf3d},
+{'8', 0xd85ce82b, 0xf051f031},
+{'q', 0x4109b50c, 0x00000000},
+{0, 0x414fb088, 0x40a04848},
+{'9', 0x00280022, 0x00740022},
+{'l', 0x00000000, 0x422e643c},
+{'l', 0x4100ad60, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e49248, 0x00000000},
+{'4', 0xffe70000, 0xfff20046},
+{'l', 0x00000000, 0xc2294feb},
+{'8', 0xb7e9d200, 0xe5bae5ea},
+{'9', 0x0000ffce, 0x0010ff84},
+{'l', 0x00000000, 0x42535ba8},
+{'l', 0x410f59d8, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1e522c4, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x40ff18d6, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc261bfe4},
+{'l', 0xc0ff18d6, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x00000097},
+{'6', 0x002a0005, 0xff7100b5},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac790, 0x00000000},
+{'q', 0x3f877328, 0xc1889418},
+{0, 0x415c1b18, 0xc1889418},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac790, 0x00000000},
+{'q', 0xbf877320, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000f2, 0x0000483d},/*        ò        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'9', 0xffc90024, 0xff4d0024},
+{'m', 0xc137fc64, 0xc235ba79},
+{'l', 0xc1c7c9d3, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5e, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000f3, 0x0000483d},/*        ó        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'9', 0xffc90024, 0xff4d0024},
+{'m', 0xc1cc4da9, 0xc235ba79},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0e, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785318, 0x00000000},
+{'@', 0x000000f4, 0x0000483d},/*        ô        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'9', 0xffc90024, 0xff4d0024},
+{'m', 0xc22362e2, 0xc235ba79},
+{'l', 0x36000000, 0xc014fea0},
+{'l', 0x41761128, 0xc19a12f8},
+{'l', 0x41706c5e, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f90},
+{'l', 0xc1974092, 0x414e8f90},
+{'l', 0xc07cd6e8, 0x00000000},
+{'@', 0x000000f5, 0x0000483d},/*        õ        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'9', 0xffc90024, 0xff4d0024},
+{'m', 0xc1161f9c, 0xc235723b},
+{'8', 0xf5ce00e5, 0xe5d6f4ea},
+{'8', 0xe5d9f1ec, 0xf4dbf4ee},
+{'8', 0x06e300ee, 0x13f006f6},
+{'9', 0x000cfffa, 0x0028fff6},
+{'l', 0xc06ac794, 0x00000000},
+{'q', 0x3f877320, 0xc1889418},
+{0, 0x415c1b17, 0xc1889418},
+{'8', 0x0c31001b, 0x1b2b0b17},
+{'8', 0x1b270e14, 0x0b250b13},
+{'8', 0xf2250018, 0xcc12f20d},
+{'l', 0x406ac790, 0x00000000},
+{'q', 0xbf877320, 0x4188039c},
+{0, 0xc15c1b18, 0x4188039c},
+{'@', 0x000000f6, 0x0000483d},/*        ö        x-advance: 72.238281 */
+{'M', 0x42857974, 0xc20609ef},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'q', 0xc16f4b68, 0x34c00000},
+{0, 0xc1b49984, 0xc10f59d9},
+{'q', 0xc0f3cf3c, 0xc10f59d9},
+{0, 0xc0f3cf3c, 0xc1cfb08a},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'q', 0x41718d50, 0x00000000},
+{0, 0x41b64af2, 0x410bf6fc},
+{'9', 0x0045003d, 0x00ce003d},
+{'m', 0xc14b2cb0, 0x00000000},
+{'q', 0x00000000, 0xc173cf3c},
+{0, 0xc08e38e8, 0xc1b0a628},
+{'8', 0xca91cadd, 0x349500b7},
+{'q', 0xc082ef4c, 0x40d1f270},
+{0, 0xc082ef4c, 0x41b2e812},
+{'q', 0x00000000, 0x41801ce5},
+{0, 0x40853134, 0x41b5ba78},
+{'8', 0x356a3521, 0xc96e004a},
+{'9', 0xffc90024, 0xff4d0024},
+{'m', 0xc1bda130, 0xc24ae475},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000f7, 0x00004f4b},/*        ÷        x-advance: 79.292969 */
+{'M', 0x4292747d, 0xc24e4757},
+{'l', 0x00000000, 0x40e643c0},
+{'4', 0x0000fde7, 0xffc70000},
+{'6', 0x00000219, 0xff45ff29},
+{'8', 0x26f11600, 0x0fda0ff1},
+{'8', 0xf1da00e9, 0xdaf1f1f1},
+{'8', 0xda0fea00, 0xf126f10f},
+{'8', 0x0f260016, 0x260f0f0f},
+{'m', 0x00000000, 0x425827bb},
+{'8', 0x26f11600, 0x0fda0ff1},
+{'8', 0xf1da00e9, 0xdaf1f1f1},
+{'8', 0xda0fea00, 0xf126f10f},
+{'8', 0x0f260016, 0x260f0f0f},
+{'@', 0x000000f8, 0x0000483d},/*        ø        x-advance: 72.238281 */
+{'M', 0x4286522c, 0xc2903292},
+{'l', 0xc10ad600, 0x414466f4},
+{'q', 0x41041040, 0x410f59dc},
+{0, 0x41041040, 0x41d282f0},
+{'q', 0x00000000, 0x420baebb},
+{0, 0xc1f85312, 0x420baebb},
+{'9', 0x0000ffaf, 0xffdfff78},
+{'4', 0x0045ffd0, 0x0000ffc4},
+{'l', 0x410f59da, 0xc148eac8},
+{'q', 0xc106522d, 0xc10d17ee},
+{0, 0xc106522d, 0xc1d706c6},
+{'q', 0x00000000, 0xc186522c},
+{0, 0x40f3cf3e, 0xc1cd6e9e},
+{'q', 0x40f3cf3e, 0xc10e38e8},
+{0, 0x41b91d5a, 0xc10e38e8},
+{'9', 0x00000054, 0x0024008d},
+{'4', 0xffbc002f, 0x0000003a},
+{'m', 0xc243d676, 0x421a5b35},
+{'9', 0x005a0000, 0x008e0010},
+{'l', 0x41e4924a, 0xc2231aa4},
+{'8', 0xd198d1de, 0x349500b7},
+{'9', 0x0034ffe0, 0x00b2ffe0},
+{'m', 0x420f59da, 0x00000000},
+{'9', 0xffae0000, 0xff79ffef},
+{'l', 0xc1e49249, 0x4223ab1e},
+{'8', 0x2a632a21, 0xc96e004a},
+{'q', 0x40907ad0, 0xc0dd3c0c},
+{0, 0x40907ad0, 0xc1b3788d},
+{'@', 0x000000f9, 0x0000483d},/*        ù        x-advance: 72.238281 */
+{'M', 0x41b0a627, 0xc1974091},
+{'q', 0x00000000, 0x41422507},
+{0, 0x41349982, 0x41422507},
+{'9', 0x00000045, 0xffef0082},
+{'l', 0x00000000, 0xc251aa38},
+{'l', 0xc120483c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x41065228, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff66},
+{'l', 0xbf107ac0, 0xc0ab91d6},
+{'8', 0x26a416d8, 0x0fa80fcc},
+{'9', 0x0000ff79, 0xff65ff79},
+{'l', 0x00000000, 0xc22d4346},
+{'l', 0xc1077322, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a1},
+{'6', 0x017b0000, 0xfe20008a},
+{'l', 0xc1c7c9d2, 0xc1974090},
+{'l', 0x00000000, 0xc0270e00},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x415d3c0c, 0x4199827c},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000fa, 0x0000483d},/*        ú        x-advance: 72.238281 */
+{'M', 0x41b0a627, 0xc1974091},
+{'q', 0x00000000, 0x41422507},
+{0, 0x41349982, 0x41422507},
+{'9', 0x00000045, 0xffef0082},
+{'l', 0x00000000, 0xc251aa38},
+{'l', 0xc120483c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x41065228, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff66},
+{'l', 0xbf107ac0, 0xc0ab91d6},
+{'8', 0x26a416d8, 0x0fa80fcc},
+{'9', 0x0000ff79, 0xff65ff79},
+{'l', 0x00000000, 0xc22d4346},
+{'l', 0xc1077322, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a1},
+{'6', 0x017b0000, 0xfe20003c},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0c, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785310, 0x00000000},
+{'@', 0x000000fb, 0x0000483d},/*        û        x-advance: 72.238281 */
+{'M', 0x41b0a627, 0xc1974091},
+{'q', 0x00000000, 0x41422507},
+{0, 0x41349982, 0x41422507},
+{'9', 0x00000045, 0xffef0082},
+{'l', 0x00000000, 0xc251aa38},
+{'l', 0xc120483c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x41065228, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff66},
+{'l', 0xbf107ac0, 0xc0ab91d6},
+{'8', 0x26a416d8, 0x0fa80fcc},
+{'9', 0x0000ff79, 0xff65ff79},
+{'l', 0x00000000, 0xc22d4346},
+{'l', 0xc1077322, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a1},
+{'6', 0x017b0000, 0xfe20ffb8},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x41761129, 0xc19a12f8},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x4174f034, 0x419a12f8},
+{'l', 0x00000000, 0x4014fea0},
+{'l', 0xc07cd6f0, 0x00000000},
+{'l', 0xc1974090, 0xc14e8f90},
+{'l', 0xc1974091, 0x414e8f90},
+{'l', 0xc07cd6ec, 0x00000000},
+{'@', 0x000000fc, 0x0000483d},/*        ü        x-advance: 72.238281 */
+{'M', 0x41b0a627, 0xc1974091},
+{'q', 0x00000000, 0x41422507},
+{0, 0x41349982, 0x41422507},
+{'9', 0x00000045, 0xffef0082},
+{'l', 0x00000000, 0xc251aa38},
+{'l', 0xc120483c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41ad4346, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x41065228, 0x3fe1bfda},
+{'4', 0x00190000, 0x0000ff66},
+{'l', 0xbf107ac0, 0xc0ab91d6},
+{'8', 0x26a416d8, 0x0fa80fcc},
+{'9', 0x0000ff79, 0xff65ff79},
+{'l', 0x00000000, 0xc22d4346},
+{'l', 0xc1077322, 0xbfe1bfe0},
+{'4', 0xffe70000, 0x000000a1},
+{'6', 0x017b0000, 0xfdf60044},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac7, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x000000fd, 0x0000483d},/*        ý        x-advance: 72.238281 */
+{'M', 0x41609eee, 0x41f97409},
+{'9', 0x0000ffd4, 0xfff6ffaa},
+{'4', 0xff8e0000, 0x0000001a},
+{'l', 0x4014fea4, 0x40d8b836},
+{'8', 0x0c300c11, 0xf036001d},
+{'q', 0x4046a8e0, 0xc0077328},
+{0, 0x40b49984, 0xc0c8eaca},
+{'9', 0xffdf0014, 0xff890033},
+{'l', 0xc1ca0bbe, 0xc2785314},
+{'l', 0xc0d8b837, 0xbfe1bfe0},
+{'l', 0xb4000000, 0xc04b2cb0},
+{'l', 0x41f61128, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc1270dfe, 0x3ff3cf40},
+{'l', 0x418f59d9, 0x42396597},
+{'l', 0x418ad604, 0xc239f612},
+{'l', 0xc125ed0c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41c587e6, 0x00000000},
+{'4', 0x00190000, 0x000bffc9},
+{'l', 0xc1cf2010, 0x4283a3e5},
+{'q', 0xc092bcc0, 0x413a3e4e},
+{0, 0xc0ff18d8, 0x4185c1b1},
+{'8', 0x3dc528e5, 0x14b514e0},
+{'m', 0x416764b0, 0xc2dc3f36},
+{'l', 0x00000000, 0xc014fea0},
+{'l', 0x415d3c0e, 0xc199827c},
+{'l', 0x41706c5c, 0x00000000},
+{'l', 0x00000000, 0x40270e00},
+{'l', 0xc1c7c9d2, 0x41974090},
+{'l', 0xc0785318, 0x00000000},
+{'@', 0x000000fe, 0x0000483d},/*        þ        x-advance: 72.238281 */
+{'M', 0x412b91d6, 0xc2bec225},
+{'l', 0xc11bc467, 0xbfd8b840},
+{'4', 0xffe70000, 0x000000ab},
+{'l', 0x00000000, 0x41bda130},
+{'q', 0x00000000, 0x407cd6e0},
+{0, 0xbed8b840, 0x4161bfe4},
+{'8', 0xe03fec17, 0xf451f428},
+{'q', 0x414b2cb4, 0x00000000},
+{0, 0x419ce55e, 0x410d17f0},
+{'q', 0x40df7df8, 0x410d17f0},
+{0, 0x40df7df8, 0x41ca9c3a},
+{'q', 0x00000000, 0x4186e2a6},
+{0, 0xc0f3cf40, 0x41d0d17e},
+{'q', 0xc0f18d50, 0x4113ddb0},
+{0, 0xc1aef4b6, 0x4113ddb0},
+{'q', 0xc0ff18d8, 0x34c00000},
+{0, 0xc172ae4a, 0xbfc6a8da},
+{'9', 0x00280003, 0x003f0003},
+{'l', 0x00000000, 0x418f59d9},
+{'l', 0x41391d58, 0x3fd8b840},
+{'l', 0x00000000, 0x40543460},
+{'l', 0xc1fcd6e9, 0x00000000},
+{'4', 0xffe60000, 0xfff30043},
+{'6', 0xfc370000, 0x01eb0156},
+{'q', 0x00000000, 0xc15c1b18},
+{0, 0xc089b508, 0xc1a1f9ae},
+{'8', 0xcd98cddf, 0x129200be},
+{'l', 0x00000000, 0x4253ec22},
+{'8', 0x096e0932, 0xc6680045},
+{'q', 0x4089b508, 0xc0eac790},
+{0, 0x4089b508, 0xc1b40907},
+{'@', 0x000000ff, 0x0000483d},/*        ÿ        x-advance: 72.238281 */
+{'M', 0x41609eee, 0x41f97409},
+{'9', 0x0000ffd4, 0xfff6ffaa},
+{'4', 0xff8e0000, 0x0000001a},
+{'l', 0x4014fea4, 0x40d8b836},
+{'8', 0x0c300c11, 0xf036001d},
+{'q', 0x4046a8e0, 0xc0077328},
+{0, 0x40b49984, 0xc0c8eaca},
+{'9', 0xffdf0014, 0xff890033},
+{'l', 0xc1ca0bbe, 0xc2785314},
+{'l', 0xc0d8b837, 0xbfe1bfe0},
+{'l', 0xb4000000, 0xc04b2cb0},
+{'l', 0x41f61128, 0x00000000},
+{'l', 0x00000000, 0x404b2cb0},
+{'l', 0xc1270dfe, 0x3ff3cf40},
+{'l', 0x418f59d9, 0x42396597},
+{'l', 0x418ad604, 0xc239f612},
+{'l', 0xc125ed0c, 0xbfe1bfe0},
+{'l', 0x00000000, 0xc04b2cb0},
+{'l', 0x41c587e6, 0x00000000},
+{'4', 0x00190000, 0x000bffc9},
+{'l', 0xc1cf2010, 0x4283a3e5},
+{'q', 0xc092bcc0, 0x413a3e4e},
+{0, 0xc0ff18d8, 0x4185c1b1},
+{'8', 0x3dc528e5, 0x14b514e0},
+{'m', 0x41919bc5, 0xc2e6d434},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xf0d800e9, 0xd8f0f0f0},
+{'8', 0xd811e900, 0xf027f011},
+{'8', 0x10270017, 0x280f100f},
+{'m', 0x41c8eac8, 0x00000000},
+{'8', 0x28f11700, 0x10d910f1},
+{'8', 0xefd800e9, 0xd9f0eff0},
+{'8', 0xd810e900, 0xf028f010},
+{'8', 0x10270017, 0x280f100f},
+{'@', 0x00000141, 0x00005841},/*        Ł        x-advance: 88.253906 */
+{'M', 0x40422506, 0xc2122c3f},
+{'l', 0x41543460, 0xc0f61128},
+{'l', 0x00000000, 0xc2333050},
+{'l', 0xc1422506, 0xbfeac780},
+{'l', 0xb5000000, 0xc06f4b80},
+{'l', 0x42216933, 0x00000000},
+{'l', 0x00000000, 0x406f4b80},
+{'l', 0xc169a69a, 0x3feac780},
+{'l', 0x00000000, 0x421425ed},
+{'l', 0x41ad4347, 0xc148eac4},
+{'l', 0x00000000, 0x40d43458},
+{'4', 0x0064ff53, 0x013a0000},
+{'l', 0x4194fea5, 0x35800000},
+{'9', 0x00000078, 0xfff500b0},
+{'l', 0x408bf6f0, 0xc19d75d7},
+{'l', 0x4092bcc0, 0x00000000},
+{'l', 0xbfa28a40, 0x41d948b1},
+{'l', 0xc2944a0c, 0x00000000},
+{'l', 0x36600000, 0xc06f4b67},
+{'l', 0x41422506, 0xbff3cf3e},
+{'l', 0x00000000, 0xc1ff18d5},
+{'l', 0xc1543460, 0x40f85314},
+{'l', 0xb5000000, 0xc0d8b834},
+{'@', 0x000003c0, 0x000048f2},/*        π        x-advance: 72.945312 */
+{'M', 0x41ccde24, 0xc2718d52},
+{'q', 0xc06643c0, 0x42329fd5},
+{0, 0xc08bf6fc, 0x424c4da9},
+{'9', 0x0032fffb, 0x004afff5},
+{'4', 0x0000ff99, 0xffe70000},
+{'8', 0xcb29e21d, 0xc913e90c},
+{'9', 0xffe00007, 0xffae000b},
+{'l', 0x403da130, 0xc2053137},
+{'l', 0xc1174091, 0x00000000},
+{'l', 0xc058b836, 0x41107ad0},
+{'l', 0xc080ad60, 0x00000000},
+{'l', 0x3fbda12e, 0xc16f4b68},
+{'l', 0x42869a6a, 0x00000000},
+{'4', 0x002f0000, 0x0000ff96},
+{'l', 0x00000000, 0x423529fe},
+{'8', 0x370d2400, 0x1222120d},
+{'9', 0x00000010, 0xfff7002e},
+{'l', 0x00000000, 0x4092bcba},
+{'8', 0x15db0bf3, 0x09ce09e9},
+{'9', 0x0000ff9c, 0xff86ff9c},
+{'l', 0x00000000, 0xc239f611},
+{'l', 0xc1a16932, 0x00000000},
+{'@', 0x0000201c, 0x00004020},/*        “        x-advance: 64.125000 */
+{'M', 0x40dd3c0d, 0xc28cf3cf},
+{'q', 0x00000000, 0xc1186188},
+{0, 0x40b015ad, 0xc1801ce8},
+{'9', 0xffcc002c, 0xffb30080},
+{'l', 0x00000000, 0x40b015b0},
+{'8', 0x5e9d1f9d, 0x14080b00},
+{'8', 0x131d0708, 0x38251325},
+{'8', 0x2eed1e00, 0x0fd00fed},
+{'8', 0xe7c600dc, 0xbfeae7ea},
+{'m', 0x41ed097b, 0x00000000},
+{'q', 0x00000000, 0xc1186188},
+{0, 0x40b015b0, 0xc1801ce8},
+{'9', 0xffcc002c, 0xffb30080},
+{'l', 0x00000000, 0x40b015b0},
+{'8', 0x5e9d1f9d, 0x14080b00},
+{'8', 0x131d0708, 0x38251325},
+{'8', 0x2eed1e00, 0x0fd00fed},
+{'8', 0xe7c600dc, 0xbfeae7ea},
+{'@', 0x0000201d, 0x00004020},/*        ”        x-advance: 64.125000 */
+{'M', 0x41dcab92, 0xc2a94feb},
+{'q', 0x00000000, 0x411aa378},
+{0, 0xc0b49984, 0x4181ce58},
+{'9', 0x0033ffd4, 0x004bff82},
+{'l', 0x00000000, 0xc0add3c0},
+{'8', 0xa263e163, 0xecf8f500},
+{'8', 0xede3f7f8, 0xc9daedda},
+{'8', 0xd213e200, 0xf031f013},
+{'8', 0x18390022, 0x42171817},
+{'m', 0x41ed097c, 0x00000000},
+{'q', 0x00000000, 0x411aa378},
+{0, 0xc0b49980, 0x4181ce58},
+{'9', 0x0033ffd4, 0x004bff82},
+{'l', 0x00000000, 0xc0add3c0},
+{'8', 0xa263e163, 0xecf8f500},
+{'8', 0xede3f7f8, 0xc9daedda},
+{'8', 0xd213e200, 0xf031f013},
+{'8', 0x193a0024, 0x41161916},
+{'@', 0x00002022, 0x00003294},/*        •        x-advance: 50.578125 */
+{'M', 0x4229e065, 0xc23f52a0},
+{'8', 0x61d83900, 0x289f28d8},
+{'8', 0xd89f00c7, 0x9fd8d8d8},
+{'8', 0x9f28c700, 0xd861d828},
+{'8', 0x28610039, 0x61282828},
+{'@', 0x00002026, 0x0000907a},/*        …        x-advance: 144.476562 */
+{'M', 0x42018619, 0xc0cfb08a},
+{'8', 0x2fed1b00, 0x14d014ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x1330001c, 0x30131313},
+{'m', 0x4241948b, 0x00000000},
+{'8', 0x2fed1b00, 0x14d014ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x1330001c, 0x30131313},
+{'m', 0x4241948c, 0x00000000},
+{'8', 0x2fed1b00, 0x14d014ed},
+{'8', 0xeccf00e3, 0xd1edeced},
+{'8', 0xd013e400, 0xed30ed13},
+{'8', 0x1330001c, 0x30131313},
+{'@', 0x000020ac, 0x0000483d},/*        €        x-advance: 72.238281 */
+{'M', 0x41216933, 0xc269eed8},
+{'q', 0x400bf6f8, 0xc197d10c},
+{0, 0x4133788d, 0xc1e09ef0},
+{'q', 0x41107ad0, 0xc1119bc0},
+{0, 0x41bf52a0, 0xc1119bc0},
+{'8', 0x06540029, 0x1665052a},
+{'4', 0x008e0002, 0x0000ffda},
+{'l', 0xbfb49980, 0xc1161fa0},
+{'8', 0xdbc6e8e7, 0xf3bdf3df},
+{'q', 0xc1228a2c, 0x00000000},
+{0, 0xc1773220, 0x40fcd6f0},
+{'9', 0x003effd6, 0x00bdffcc},
+{'4', 0x000000c5, 0x002d0000},
+{'l', 0xc1c7c9d2, 0x00000000},
+{'8', 0x33ff26ff, 0x29011f00},
+{'4', 0x000000c7, 0x002e0000},
+{'l', 0xc1c587e7, 0x00000000},
+{'q', 0x3fb49980, 0x417f18d6},
+{0, 0x40df7df8, 0x41bda130},
+{'q', 0x40b49984, 0x40f61128},
+{0, 0x416ac792, 0x40f61128},
+{'8', 0xf14f002b, 0xd73af124},
+{'4', 0xffa7000e, 0x00000025},
+{'l', 0xbe907b00, 0x419aa371},
+{'q', 0xc13da12c, 0x408e38e5},
+{0, 0xc1c466f0, 0x408e38e5},
+{'q', 0xc16ac790, 0xb4000000},
+{0, 0xc1bec225, 0xc1186186},
+{'9', 0xffb4ffb8, 0xff26ffa6},
+{'4', 0x0000ffc1, 0xffd20000},
+{'l', 0x40ef4b68, 0x00000000},
+{'8', 0xd8ffe3ff, 0xcc01d900},
+{'l', 0xc0ef4b68, 0x00000000},
+{'l', 0x34800000, 0xc0b6db70},
+{'l', 0x40fcd6ea, 0x00000000},
+{'@', 0x00002122, 0x00008d96},/*        â„¢        x-advance: 141.585938 */
+{'M', 0x42c2b581, 0xc21788ce},
+{'l', 0xbffcd700, 0x00000000},
+{'l', 0xc1a0d8b8, 0xc23cc878},
+{'l', 0x00000000, 0x422c2251},
+{'l', 0x40f61130, 0x3f907ae0},
+{'l', 0x00000000, 0x40422500},
+{'l', 0xc1a0d8ba, 0x00000000},
+{'l', 0x00000000, 0xc0422500},
+{'l', 0x40eac798, 0xbf907ae0},
+{'l', 0x00000000, 0xc2422507},
+{'l', 0xc0eac798, 0xbf907ac0},
+{'l', 0x00000000, 0xc0391d60},
+{'l', 0x41986186, 0x00000000},
+{'l', 0x4189b510, 0x422483d8},
+{'l', 0x4194fea4, 0xc22483d8},
+{'l', 0x418f59d8, 0x00000000},
+{'l', 0x00000000, 0x40391d60},
+{'l', 0xc0e643c0, 0x3f907ac0},
+{'l', 0x00000000, 0x42422507},
+{'l', 0x40e643c0, 0x3f907ae0},
+{'l', 0x00000000, 0x40422500},
+{'l', 0xc1c466f0, 0x00000000},
+{'l', 0x00000000, 0xc0422500},
+{'4', 0xfff7003c, 0xfea90000},
+{'6', 0x0178ff55, 0x0000fd85},
+{'l', 0x36000000, 0xc0422500},
+{'4', 0xfff70047, 0xfe7e0000},
+{'l', 0xc00bf6f8, 0x00000000},
+{'9', 0x0000ffae, 0x0006ff92},
+{'l', 0xbf998278, 0x410d17e8},
+{'l', 0xc0391d5c, 0x00000000},
+{'l', 0x00000000, 0xc15f7df8},
+{'l', 0x4248120f, 0x00000000},
+{'4', 0x006f0000, 0x0000ffe9},
+{'l', 0xbf907ae0, 0xc10d17e8},
+{'9', 0xfffbffe8, 0xfffbff8f},
+{'l', 0xc002ef50, 0x00000000},
+{'l', 0x00000000, 0x42407395},
+{'l', 0x410f59dc, 0x3f907ae0},
+{'l', 0x00000000, 0x40422500},
+{'l', 0xc1dcab93, 0x00000000},
+{'@', 0x00002190, 0x0000907a},/*        ←        x-advance: 144.476562 */
+{'M', 0x4234e1c0, 0xc1f0fcd7},
+{'9', 0x00250020, 0x006f0043},
+{'l', 0xc0a28a28, 0x00000000},
+{'9', 0xffacffb9, 0xff83ff68},
+{'l', 0x00000000, 0xc0228a28},
+{'9', 0xffd70050, 0xff830098},
+{'l', 0x40a28a28, 0x00000000},
+{'9', 0x0049ffde, 0x006fffbd},
+{'l', 0x428b8a9d, 0x00000000},
+{'l', 0x00000000, 0x40c22504},
+{'l', 0xc28b8a9d, 0x00000000},
+{'@', 0x00002191, 0x0000483d},/*        ↑        x-advance: 72.238281 */
+{'M', 0x4204587f, 0xc282ef4c},
+{'9', 0x0020ffdb, 0x0043ff91},
+{'l', 0x00000000, 0xc0a28a28},
+{'9', 0xffb90054, 0xff68007d},
+{'l', 0x40228a20, 0x00000000},
+{'9', 0x00500029, 0x0098007d},
+{'l', 0x00000000, 0x40a28a28},
+{'9', 0xffdeffb7, 0xffbdff91},
+{'l', 0x00000000, 0x428b8a9d},
+{'l', 0xc0c22500, 0xb5c00000},
+{'l', 0x00000000, 0xc28b8a9d},
+{'@', 0x00002192, 0x0000907a},/*        →        x-advance: 144.476562 */
+{'M', 0x42c684be, 0xc210c30c},
+{'9', 0xffdbffe0, 0xff91ffbd},
+{'l', 0x40a28a30, 0x00000000},
+{'9', 0x00540047, 0x007d0098},
+{'l', 0x00000000, 0x40228a28},
+{'9', 0x0029ffb0, 0x007dff68},
+{'l', 0xc0a28a30, 0x00000000},
+{'9', 0xffb70022, 0xff910043},
+{'l', 0xc28b8a9c, 0x00000000},
+{'l', 0xb6800000, 0xc0c22504},
+{'l', 0x428b8a9c, 0x00000000},
+{'@', 0x00002193, 0x0000483d},/*        ↓        x-advance: 72.238281 */
+{'M', 0x421c9d1f, 0xc136db6e},
+{'9', 0xffe00025, 0xffbd006f},
+{'l', 0x00000000, 0x40a28a28},
+{'9', 0x0047ffac, 0x0098ff83},
+{'l', 0xc0228a20, 0x35000000},
+{'9', 0xffb0ffd7, 0xff68ff83},
+{'l', 0x00000000, 0xc0a28a28},
+{'9', 0x00220049, 0x0043006f},
+{'l', 0x00000000, 0xc28b8a9c},
+{'l', 0x40c22500, 0x00000000},
+{'l', 0x00000000, 0x428b8a9c},
+{'@', 0x00002212, 0x0000517b},/*        −        x-advance: 81.480469 */
+{'M', 0x4294da87, 0xc24e4757},
+{'l', 0x00000000, 0x40e643c0},
+{'l', 0xc286764b, 0x00000000},
+{'l', 0xb6400000, 0xc0e643c0},
+{'l', 0x4286764b, 0x00000000},
+{'@', 0x00002248, 0x00004f4b},/*        ≈        x-advance: 79.292969 */
+{'M', 0x425c1b17, 0xc1a9e065},
+{'q', 0xc0ef4b68, 0x00000000},
+{0, 0xc18a4588, 0xc1089418},
+{'8', 0xcdbbddd7, 0xf0d0f0e5},
+{'8', 0x1fbf00d5, 0x68e31eea},
+{'l', 0xc0e401d0, 0x00000000},
+{'q', 0x3fa28a2c, 0xc153136a},
+{0, 0x40bda130, 0xc1958f21},
+{'8', 0xd468d425, 0x1040001f},
+{'8', 0x334c1021, 0x36472830},
+{'8', 0x0d2b0d17, 0xe33c0026},
+{'9', 0xffe30016, 0xff950020},
+{'l', 0x40e885b0, 0x00000000},
+{'q', 0xbf998280, 0x4112bcbc},
+{0, 0xc05d3c20, 0x41609eee},
+{'8', 0x3cd126ee, 0x15b415e3},
+{'m', 0x00000000, 0xc1e764af},
+{'q', 0xc0ef4b68, 0x00000000},
+{0, 0xc18a4588, 0xc1089418},
+{'8', 0xcdbbddd7, 0xf0d0f0e5},
+{'8', 0x1fbf00d5, 0x68e31eea},
+{'l', 0xc0e401d0, 0x00000000},
+{'q', 0x3fa28a2c, 0xc153136c},
+{0, 0x40bda130, 0xc1958f20},
+{'8', 0xd468d425, 0x1040001f},
+{'8', 0x334c1021, 0x36472830},
+{'8', 0x0d2b0d17, 0xe33c0026},
+{'9', 0xffe30016, 0xff950020},
+{'l', 0x40e885b0, 0x00000000},
+{'q', 0xbf998280, 0x4112bcc0},
+{0, 0xc05d3c20, 0x41609ef0},
+{'8', 0x3cd126ee, 0x15b415e3},
+{'@', 0x000025bc, 0x00008eff},/*        â–¼        x-advance: 142.996094 */
+{'M', 0x42e37154, 0xc2a53870},
+{'l', 0xc228bf70, 0x42a907ad},
+{'l', 0xc2294fea, 0xc2a907ad},
+{'l', 0x42a907ad, 0x00000000},
+{'@', 0x00002660, 0x00004cc1},/*        â™         x-advance: 76.753906 */
+{'M', 0x4219827c, 0xc2adafa2},
+{'q', 0x3fe1bfe0, 0x40d8b830},
+{0, 0x40a4cc10, 0x414c4da8},
+{'q', 0x4058b840, 0x40bda130},
+{0, 0x41609ef0, 0x417bb5f4},
+{'8', 0x6c63474f, 0x4d142513},
+{'8', 0x5adc3600, 0x24ab24dc},
+{'q', 0xc13136a0, 0x00000000},
+{0, 0xc1907ace, 0xc1579740},
+{'q', 0x3e58b800, 0x4133788e},
+{0, 0x403da130, 0x41889418},
+{'q', 0x40349980, 0x40bb5f44},
+{0, 0x41089418, 0x4112bcba},
+{'9', 0x001a002e, 0x001f0078},
+{'4', 0x00140004, 0x0000fe42},
+{'l', 0x3ed8b860, 0xc0270dff},
+{'q', 0x410bf6f9, 0x00000000},
+{0, 0x416d097b, 0xc058b837},
+{'q', 0x40c22508, 0xc05d3c0e},
+{0, 0x41119bc6, 0xc1186186},
+{'9', 0xffd00018, 0xff7e0018},
+{'l', 0x00000000, 0xbf7cd6e0},
+{'q', 0xc0cb2cb8, 0x41579740},
+{0, 0xc192bcbb, 0x41579740},
+{'8', 0xdcaa00ce, 0xa8dcdcdc},
+{'8', 0xa818ce00, 0xac51da19},
+{'q', 0x411ce55c, 0xc106522c},
+{0, 0x416764ae, 0xc16f4b64},
+{'q', 0x4094fea4, 0xc0d1f280},
+{0, 0x40cfb08c, 0xc1761128},
+{'@', 0x00002663, 0x00005ed0},/*        ♣        x-advance: 94.812500 */
+{'M', 0x429a5b34, 0x00000000},
+{'4', 0x0000fe25, 0xffed0004},
+{'8', 0xe26df14c, 0xcf3cf121},
+{'8', 0xb529df1b, 0xab0fd60f},
+{'l', 0xbe107b00, 0xc0543460},
+{'8', 0x65ae43e0, 0x219c21ce},
+{'8', 0xebb000d5, 0xc7c9ebdc},
+{'8', 0xb1eddded, 0x9329c000},
+{'8', 0xd35dd429, 0x1c5b0022},
+{'8', 0xc5e1dceb, 0xd6faecfa},
+{'8', 0x922dbc00, 0xd66dd62d},
+{'8', 0x2d6e0041, 0x692d2d2d},
+{'8', 0x67da3000, 0xe838ea2f},
+{'8', 0xfc22fc0c, 0x2c61003b},
+{'q', 0x40a4cc20, 0x40ab91d8},
+{0, 0x40a4cc20, 0x4158b834},
+{'q', 0x00000000, 0x4102ef4e},
+{0, 0xc0b015b0, 0x41609ef0},
+{'8', 0x2e932ed4, 0xf3c000e1},
+{'8', 0xdbc4f2df, 0xaec4e9e6},
+{'q', 0x3eb49980, 0x410e38e2},
+{0, 0x4002ef40, 0x416522c2},
+{'8', 0x4c2c2a0e, 0x3142211f},
+{'q', 0x40907ac0, 0x3feac790},
+{0, 0x4148eac8, 0x40543460},
+{'l', 0x3f107a80, 0x401e0652},
+{'@', 0x00002665, 0x000055c8},/*        ♥        x-advance: 85.781250 */
+{'M', 0x422c2251, 0x3fcfb08a},
+{'q', 0xbfc6a8e0, 0xc0c22506},
+{0, 0xc0998280, 0xc147c9d2},
+{'9', 0xffcdffe7, 0xff48ff84},
+{'l', 0xc0cb2cb4, 0xc10ad604},
+{'8', 0xa4c7c8d6, 0xb7f1dcf1},
+{'8', 0x9e26c400, 0xda60da27},
+{'8', 0x20590031, 0x633e2028},
+{'8', 0x9d3bbd13, 0xdf59df28},
+{'8', 0x265e0036, 0x5d282628},
+{'q', 0x00000000, 0x40c22508},
+{0, 0xc046a8e0, 0x414c4dac},
+{'q', 0xc046a8e0, 0x40d67648},
+{0, 0xc12ef4b8, 0x4182ef4c},
+{'q', 0xc11e0650, 0x414a0bbc},
+{0, 0xc16764ac, 0x41a16932},
+{'q', 0xc0907ad0, 0x40ef4b69},
+{0, 0xc0e1bfe0, 0x4184a0bd},
+{'@', 0x00002666, 0x000049b8},/*        ♦        x-advance: 73.718750 */
+{'M', 0x4212747d, 0xc2ac8ead},
+{'q', 0x40a28a28, 0x410d17f0},
+{0, 0x416643b8, 0x41acb2cc},
+{'q', 0x41161f9c, 0x414b2cb4},
+{0, 0x418fea56, 0x41b2e812},
+{'q', 0xc0998280, 0x409e0658},
+{0, 0xc179740c, 0x419aa372},
+{'q', 0xc12cb2cc, 0x416522c5},
+{0, 0xc1853136, 0x41c61862},
+{'q', 0xc0270e00, 0xc0a0483d},
+{0, 0xc112bcbc, 0xc162e0d9},
+{'q', 0xc0cfb088, 0xc113ddaf},
+{0, 0xc13b5f44, 0xc17f18d5},
+{'q', 0xc0a70e00, 0xc0d8b834},
+{0, 0xc133788e, 0xc15f7dfa},
+{'q', 0x4102ef4c, 0xc11aa370},
+{0, 0x418a4588, 0xc1ae643a},
+{'q', 0x4112bcbc, 0xc1434600},
+{0, 0x416ac792, 0xc1b136a4},
+{'@', 0x0000fb01, 0x0000505a},/*        fi        x-advance: 80.351562 */
+{'M', 0x4284587f, 0xc09e0652},
+{'l', 0x4136db68, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc203c803, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x411ce55c, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc25dcc88},
+{'l', 0xc1d706c6, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'l', 0xb5800000, 0xc04b2cb3},
+{'l', 0x411ce55d, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'0', 0xe50000a5, 0xdb00ea5b},
+{'q', 0x00000000, 0xc1f3cf3c},
+{0, 0x41e522c4, 0xc1f3cf3c},
+{'9', 0x00000040, 0x0014008f},
+{'4', 0x006f0000, 0x0000ffe4},
+{'l', 0xc082ef48, 0xc0fa9500},
+{'8', 0xe89de8d6, 0x2ca900c8},
+{'9', 0x002bffe2, 0x0082ffe2},
+{'l', 0x00000000, 0x40ff18d0},
+{'l', 0x421a5b35, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'@', 0x0000fb02, 0x0000505a},/*        fl        x-advance: 80.351562 */
+{'M', 0x42841041, 0xc09e0652},
+{'l', 0x4136db70, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffe70000, 0xfff2004e},
+{'l', 0x00000000, 0xc2acfb09},
+{'q', 0xc11aa370, 0xc08bf700},
+{0, 0xc18ad602, 0xc08bf700},
+{'q', 0xc09bc468, 0x00000000},
+{0, 0xc0e401d0, 0x408bf700},
+{'9', 0x0022ffee, 0x0070ffee},
+{'l', 0x00000000, 0x413015b0},
+{'l', 0x418d17ee, 0x00000000},
+{'l', 0x00000000, 0x40bda130},
+{'l', 0xc18d17ee, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'l', 0xb5800000, 0xc04b2cb3},
+{'l', 0x411ce55d, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'0', 0xe50000a5, 0xd600ea5b},
+{'q', 0x00000000, 0xc15e5d08},
+{0, 0x40cd6ea0, 0xc1ad4348},
+{'q', 0x40cfb088, 0xc0fa9500},
+{0, 0x418da868, 0xc0fa9500},
+{'q', 0x3f228a40, 0x00000000},
+{0, 0x3fab91e0, 0x3d907c00},
+{'9', 0x00000006, 0x00090081},
+{'l', 0x41089414, 0x00000000},
+{'l', 0x00000000, 0x42be9e07},
+{'@', 0x0000fb03, 0x0000775d},/*        ffi        x-advance: 119.363281 */
+{'M', 0x417df7e0, 0xc2718d52},
+{'0', 0xe50000a5, 0xdb00ea5b},
+{'q', 0x00000000, 0xc16ac790},
+{0, 0x40b91d58, 0xc1b49984},
+{'q', 0x40bb5f44, 0xc0fcd6e0},
+{0, 0x4182ef4c, 0xc0fcd6e0},
+{'9', 0x0000002b, 0x000a0050},
+{'4', 0x00730000, 0x0000ffe5},
+{'l', 0xc04b2cb0, 0xc10ad608},
+{'8', 0xf5d2f5ed, 0x1fce00dd},
+{'9', 0x001ffff2, 0x0076fff2},
+{'4', 0x00580000, 0x000000da},
+{'l', 0x00000000, 0xc09e0650},
+{'q', 0x00000000, 0xc1f3cf3c},
+{0, 0x41e522c2, 0xc1f3cf3c},
+{'9', 0x00000040, 0x0014008f},
+{'4', 0x006f0000, 0x0000ffe4},
+{'l', 0xc082ef50, 0xc0fa9500},
+{'8', 0xe89de8d6, 0x2ca900c8},
+{'9', 0x002bffe2, 0x0082ffe2},
+{'l', 0x00000000, 0x40ff18d0},
+{'l', 0x421a5b34, 0x00000000},
+{'l', 0x00000000, 0x427580ae},
+{'l', 0x4136db70, 0x3fe1bfda},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc203c804, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x411ce558, 0xbfe1bfe2},
+{'l', 0x00000000, 0xc25dcc88},
+{'l', 0xc1d706c4, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f6, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x411ce560, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'l', 0xc1da69a8, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'l', 0xb5800000, 0xc04b2cb3},
+{'l', 0x411ce55d, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'@', 0x0000fb04, 0x00007781},/*        ffl        x-advance: 119.503906 */
+{'M', 0x42d25ed1, 0xc09e0652},
+{'l', 0x4136db70, 0x3fe1bfe2},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc203c804, 0x00000000},
+{'4', 0xffe70000, 0xfff2004e},
+{'l', 0x00000000, 0xc2acfb09},
+{'q', 0xc11aa370, 0xc08bf700},
+{0, 0xc18ad600, 0xc08bf700},
+{'q', 0xc09bc470, 0x00000000},
+{0, 0xc0e401d0, 0x408bf700},
+{'9', 0x0022ffee, 0x0070ffee},
+{'l', 0x00000000, 0x413015b0},
+{'l', 0x418d17f0, 0x00000000},
+{'l', 0x00000000, 0x40bda130},
+{'l', 0xc18d17f0, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'l', 0x00000000, 0xc04b2cb3},
+{'l', 0x411ce55c, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'l', 0xc1db8a9c, 0x00000000},
+{'l', 0x00000000, 0x425b8a9c},
+{'l', 0x411f2748, 0x4014fead},
+{'l', 0x00000000, 0x404b2cb3},
+{'l', 0xc1fbb5f4, 0x00000000},
+{'l', 0xb5800000, 0xc04b2cb3},
+{'l', 0x411ce55d, 0xc014fea5},
+{'l', 0x00000000, 0xc25b8a9c},
+{'0', 0xe50000a5, 0xdb00ea5b},
+{'q', 0x00000000, 0xc16ac790},
+{0, 0x40b91d58, 0xc1b49984},
+{'q', 0x40bb5f44, 0xc0fcd6e0},
+{0, 0x4182ef4c, 0xc0fcd6e0},
+{'9', 0x0000002b, 0x000a0050},
+{'4', 0x00730000, 0x0000ffe5},
+{'l', 0xc04b2cb0, 0xc10ad608},
+{'8', 0xf5d2f5ed, 0x1fce00dd},
+{'9', 0x001ffff2, 0x0076fff2},
+{'4', 0x00580000, 0x000000db},
+{'l', 0x00000000, 0xc0b49980},
+{'q', 0x00000000, 0xc15e5d08},
+{0, 0x40cd6ea0, 0xc1ad4348},
+{'q', 0x40cfb088, 0xc0fa9500},
+{0, 0x418da86a, 0xc0fa9500},
+{'q', 0x3f228a00, 0x00000000},
+{0, 0x3fab91c0, 0x3d907c00},
+{'9', 0x00000006, 0x00090081},
+{'l', 0x41089418, 0x00000000},
+{'l', 0x00000000, 0x42be9e07},
+};
+#define ctx_font_Tinos_Regular_name "Tinos Regular"
+#endif
diff --git a/usermodule/uctx/uctx/ctx.h b/usermodule/uctx/uctx/ctx.h
new file mode 100644
index 0000000000000000000000000000000000000000..aeafa2f93fda6238725f341e56c817b4a9c430ab
--- /dev/null
+++ b/usermodule/uctx/uctx/ctx.h
@@ -0,0 +1,61147 @@
+/* ctx git commit: 77eceddd */
+/* 
+ * ctx.h is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * ctx.h is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with ctx; if not, see <https://www.gnu.org/licenses/>.
+ *
+ * 2012, 2015, 2019, 2020, 2021, 2022 Øyvind Kolås <pippin@gimp.org>
+ *
+ * ctx is a 2D vector graphics processing processing framework.
+ *
+ * To use ctx in a project, do the following:
+ *
+ * #define CTX_IMPLEMENTATION
+ * #include "ctx.h"
+ *
+ * Ctx contains a minimal default fallback font with only ascii, so
+ * you probably want to also include a font, and perhaps enable
+ * the cairo or SDL2 optional backends, a more complete example
+ * could be:
+ *
+ * #include <cairo.h>
+ * #include <SDL.h>
+ * #include "ctx-font-regular.h"
+ * #define CTX_IMPLEMENTATION
+ * #include "ctx.h"
+ *
+ * The behavior of ctx can be tweaked, and features can be configured, enabled
+ * or disabled with other #defines, see further down in the start of this file
+ * for details.
+ */
+
+#ifndef CTX_H
+#define CTX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <string.h>
+#include <stdio.h>
+
+typedef struct _Ctx            Ctx;
+
+/**
+ * ctx_new:
+ * @width: with in device units
+ * @height: height in device units
+ * @backend: backend to use
+ *
+ *   valid values are:
+ *     NULL/"auto", "drawlist", "sdl", "term", "ctx" the strings are
+ *     the same as are valid for the CTX_BACKEND environment variable.
+ *
+ * Create a new drawing context, this context has no pixels but
+ * accumulates commands and can be played back on other ctx
+ * render contexts, this is a ctx context using the drawlist backend.
+ */
+Ctx *ctx_new (int width, int height, const char *backend);
+
+
+/**
+ * ctx_new_drawlist:
+ *
+ * Create a new drawing context that can record drawing commands,
+ * this is also the basis for creating more complex contexts with
+ * the backend swapped out.
+ */
+Ctx * ctx_new_drawlist (int width, int height);
+
+typedef struct _CtxEntry CtxEntry;
+
+
+/**
+ * ctx_get_drawlist:
+ * @ctx: a ctx context.
+ * @count: return location for length of drawlist
+ *
+ * Returns a read only pointer to the first entry of the contexts drawlist.
+ */
+const CtxEntry *ctx_get_drawlist (Ctx *ctx, int *count);
+
+/**
+ * ctx_new_for_drawlist:
+ *
+ * Create a new drawing context for a pre-existing raw drawlist.
+ */
+Ctx *ctx_new_for_drawlist   (int    width,
+                             int    height,
+                             void  *data,
+                             size_t length);
+
+/**
+ * ctx_set_drawlist:
+ *
+ * Replaces the drawlist of a ctx context with a new one.  the length of the
+ * data is expected to be length * 9;
+ */
+int  ctx_set_drawlist       (Ctx *ctx, void *data, int length);
+
+/**
+ * ctx_append_drawlist:
+ *
+ * Appends the commands in a binary drawlist, the length of the data is expected to
+ * be length * 9;
+ */
+int  ctx_append_drawlist    (Ctx *ctx, void *data, int length);
+
+/**
+ * ctx_drawlist_clear:
+ *
+ * Clears the drawlist associated with the context.
+ */
+void  ctx_drawlist_clear (Ctx *ctx);
+
+
+const char *ctx_get_font_name (Ctx *ctx, int no);
+
+/* by default both are 0.0 which makes wrapping disabled
+ */
+void ctx_wrap_left (Ctx *ctx, float x);
+void ctx_wrap_right (Ctx *ctx, float x);
+void ctx_line_height (Ctx *ctx, float x);
+
+
+/**
+ * ctx_destroy:
+ * @ctx: a ctx context
+ */
+void ctx_destroy (Ctx *ctx);
+
+/**
+ * ctx_start_frame:
+ *
+ * Prepare for rendering a new frame, clears internal drawlist and initializes
+ * the state.
+ *
+ */
+void ctx_start_frame    (Ctx *ctx);
+
+/**
+ * ctx_end_frame:
+ *
+ * We're done rendering a frame, this does nothing on a context created for a framebuffer, where drawing commands are immediate.
+ */
+void ctx_end_frame      (Ctx *ctx);
+
+
+/**
+ * ctx_begin_path:
+ *
+ * Clears the current path if any.
+ */
+void ctx_begin_path     (Ctx *ctx);
+
+/**
+ * ctx_save:
+ *
+ * Stores the transform, clipping state, fill and stroke sources, font size,
+ * stroking and dashing options.
+ */
+void ctx_save           (Ctx *ctx);
+
+/**
+ * ctx_restore:
+ *
+ * Restores the state previously saved with ctx_save, calls to
+ * ctx_save/ctx_restore should be balanced.
+ */
+void ctx_restore        (Ctx *ctx);
+
+/**
+ * ctx_start_group:
+ *
+ * Start a compositing group.
+ *
+ */
+void ctx_start_group    (Ctx *ctx);
+
+/**
+ * ctx_end_group:
+ *
+ * End a compositing group, the global alpha, compositing mode and blend mode
+ * set before this call is used to apply the group.
+ */
+void ctx_end_group      (Ctx *ctx);
+
+/**
+ * ctx_clip:
+ *
+ * Use the current path as a clipping mask, subsequent draw calls are limited
+ * by the path. The only way to increase the visible area is to first call
+ * ctx_save and then later ctx_restore to undo the clip.
+ */
+void ctx_clip           (Ctx *ctx);
+
+
+/**
+ * ctx_image_smoothing:
+ *
+ * Set or unset bilinear / box filtering for textures, turning it off uses the
+ * faster nearest neighbor for all cases.
+ */
+void ctx_image_smoothing  (Ctx *ctx, int enabled);
+
+#define CTX_LINE_WIDTH_HAIRLINE -1000.0
+#define CTX_LINE_WIDTH_ALIASED  -1.0
+#define CTX_LINE_WIDTH_FAST     -1.0  /* aliased 1px wide line */
+
+
+
+/**
+ * ctx_line_to:
+ */
+void  ctx_line_to         (Ctx *ctx, float x, float y);
+/**
+ * ctx_move_to:
+ */
+void  ctx_move_to         (Ctx *ctx, float x, float y);
+/**
+ * ctx_curve_to:
+ */
+void  ctx_curve_to        (Ctx *ctx, float cx0, float cy0,
+                           float cx1, float cy1,
+                           float x, float y);
+/**
+ * ctx_quad_to:
+ */
+void  ctx_quad_to         (Ctx *ctx, float cx, float cy,
+                           float x, float y);
+/**
+ * ctx_arc:
+ */
+void  ctx_arc             (Ctx  *ctx,
+                           float x, float y,
+                           float radius,
+                           float angle1, float angle2,
+                           int   direction);
+/**
+ * ctx_arc_to:
+ */
+void  ctx_arc_to          (Ctx *ctx, float x1, float y1,
+                           float x2, float y2, float radius);
+/**
+ * ctx_rel_arc_to:
+ */
+void  ctx_rel_arc_to      (Ctx *ctx, float x1, float y1,
+                           float x2, float y2, float radius);
+
+enum {
+  CTX_TVG_FLAG_NONE       = 0,
+  CTX_TVG_FLAG_LOAD_PAL   = 1<<0,
+  CTX_TVG_FLAG_BBOX_CHECK = 1<<1,
+  CTX_TVG_FLAG_DEFAULTS   = CTX_TVG_FLAG_LOAD_PAL
+};
+
+
+int ctx_tinyvg_get_size (uint8_t *data, int length, int *width, int *height);
+int ctx_tinyvg_draw (Ctx *ctx, uint8_t *data, int length, int flags);
+
+int ctx_tinyvg_fd_get_size (int fd, int *width, int *height);
+int ctx_tinyvg_fd_draw (Ctx *ctx, int fd, int flags);
+
+/**
+ * ctx_rectangle:
+ */
+void  ctx_rectangle       (Ctx *ctx,
+                           float x0, float y0,
+                           float w, float h);
+/**
+ * ctx_round_rectangle:
+ */
+void  ctx_round_rectangle (Ctx *ctx,
+                           float x0, float y0,
+                           float w, float h,
+                           float radius);
+/**
+ * ctx_rel_line_to:
+ */
+void  ctx_rel_line_to     (Ctx *ctx,
+                           float x, float y);
+/**
+ * ctx_rel_move_to:
+ */
+void  ctx_rel_move_to     (Ctx *ctx,
+                           float x, float y);
+/**
+ * ctx_rel_curve_to:
+ */
+void  ctx_rel_curve_to    (Ctx *ctx,
+                           float x0, float y0,
+                           float x1, float y1,
+                           float x2, float y2);
+/**
+ * ctx_rel_quad_to:
+ */
+void  ctx_rel_quad_to     (Ctx *ctx,
+                           float cx, float cy,
+                           float x, float y);
+/**
+ * ctx_close_path:
+ */
+void  ctx_close_path      (Ctx *ctx);
+
+
+/**
+ * ctx_fill:
+ */
+void ctx_fill             (Ctx *ctx);
+
+/**
+ * ctx_stroke:
+ */
+void ctx_stroke           (Ctx *ctx);
+
+/**
+ * ctx_paint:
+ */
+void ctx_paint            (Ctx *ctx);
+
+/**
+ * ctx_preserve:
+ */
+void ctx_preserve         (Ctx *ctx);
+
+/**
+ * ctx_identity:
+ *
+ * Restore context to identity transform, NOTE: a bug makes this call currently
+ * breaks mult-threaded rendering when used; since the rendering threads are
+ * expecting an initial transform on top of the base identity.
+ */
+void ctx_identity       (Ctx *ctx);
+
+
+/**
+ * ctx_scale:
+ *
+ * Scales the user to device transform.
+ */
+void  ctx_scale           (Ctx *ctx, float x, float y);
+
+/**
+ * ctx_translate:
+ *
+ * Adds translation to the user to device transform.
+ */
+void  ctx_translate       (Ctx *ctx, float x, float y);
+
+/**
+ * ctx_rotate:
+ *
+ * Add rotatation to the user to device space transform.
+ */
+void ctx_rotate         (Ctx *ctx, float x);
+
+/**
+ * ctx_apply_transform:
+ *
+ * Adds a 3x3 matrix on top of the existing user to device space transform.
+ */
+void ctx_apply_transform (Ctx *ctx,
+                     float a, float b, float c,
+                     float d, float e, float f,
+                     float g, float h, float i);
+
+/**
+ * ctx_set_transform:
+ *
+ * Redundant with identity+apply?
+ */
+void ctx_set_transform    (Ctx *ctx, float a, float b, float c,
+                                     float d, float e, float f,
+                                     float g, float h, float i);
+
+/**
+ * ctx_miter_limit:
+ *
+ * Specify the miter limit used when stroking.
+ */
+void ctx_miter_limit      (Ctx *ctx, float limit);
+
+/**
+ * ctx_line_width:
+ *
+ * Set the line width used when stroking.
+ */
+void ctx_line_width       (Ctx *ctx, float x);
+
+/**
+ * ctx_line_dash_offset:
+ *
+ * Specify phase offset for line dash pattern.
+ */
+void ctx_line_dash_offset (Ctx *ctx, float line_dash);
+
+/**
+ * ctx_line_dash:
+ *
+ * Specify the line dash pattern.
+ */
+void  ctx_line_dash       (Ctx *ctx, float *dashes, int count);
+
+/**
+ * ctx_font_size:
+ */
+void  ctx_font_size       (Ctx *ctx, float x);
+
+/**
+ * ctx_font:
+ */
+void  ctx_font            (Ctx *ctx, const char *font);
+
+/**
+ * ctx_font_family:
+ */
+void  ctx_font_family     (Ctx *ctx, const char *font_family);
+
+/**
+ * ctx_parse:
+ *
+ * Parses a string containg text ctx protocol data.
+ */
+void ctx_parse            (Ctx *ctx, const char *string);
+
+/**
+ * low level glyph drawing calls, unless you are integrating harfbuzz
+ * you probably want to use ctx_text instead.
+ */
+typedef struct _CtxGlyph CtxGlyph;
+
+/**
+ */
+CtxGlyph *ctx_glyph_allocate     (int n_glyphs);
+/**
+ */
+void      ctx_glyph_free         (CtxGlyph   *glyphs);
+/**
+ */
+int       ctx_glyph              (Ctx        *ctx, uint32_t unichar, int stroke);
+/**
+ */
+void      ctx_glyphs             (Ctx        *ctx,
+                                  CtxGlyph   *glyphs,
+                                  int         n_glyphs);
+/**
+ */
+void  ctx_glyphs_stroke          (Ctx        *ctx,
+                                  CtxGlyph   *glyphs,
+                                  int         n_glyphs);
+
+void ctx_shadow_rgba      (Ctx *ctx, float r, float g, float b, float a);
+void ctx_shadow_blur      (Ctx *ctx, float x);
+void ctx_shadow_offset_x  (Ctx *ctx, float x);
+void ctx_shadow_offset_y  (Ctx *ctx, float y);
+
+/**
+ * ctx_view_box:
+ *
+ * Specify the view box for the current page.
+ */
+void ctx_view_box         (Ctx *ctx,
+                           float x0, float y0,
+                           float w, float h);
+
+void ctx_new_page         (Ctx *ctx);
+
+/**
+ * ctx_set_pixel_u8:
+ *
+ * Set a single pixel to the nearest possible the specified r,g,b,a value. Fast
+ * for individual few pixels, slow for doing textures.
+ */
+void
+ctx_set_pixel_u8          (Ctx *ctx, uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+
+/**
+ * ctx_global_alpha:
+ *
+ * Set a global alpha value that the colors, textures and gradients are modulated by.
+ */
+void  ctx_global_alpha     (Ctx *ctx, float global_alpha);
+
+
+/**
+ * ctx_stroke_source:
+ *
+ * The next source definition applies to stroking rather than filling, when a stroke source is
+ * not explicitly set the value of filling is inherited.
+ */
+void ctx_stroke_source  (Ctx *ctx); // next source definition is for stroking
+
+void ctx_rgba_stroke   (Ctx *ctx, float r, float g, float b, float a);
+void ctx_rgb_stroke    (Ctx *ctx, float r, float g, float b);
+void ctx_rgba8_stroke  (Ctx *ctx, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+
+void ctx_gray_stroke   (Ctx *ctx, float gray);
+void ctx_drgba_stroke  (Ctx *ctx, float r, float g, float b, float a);
+void ctx_cmyka_stroke  (Ctx *ctx, float c, float m, float y, float k, float a);
+void ctx_cmyk_stroke   (Ctx *ctx, float c, float m, float y, float k);
+void ctx_dcmyka_stroke (Ctx *ctx, float c, float m, float y, float k, float a);
+void ctx_dcmyk_stroke  (Ctx *ctx, float c, float m, float y, float k);
+
+void ctx_rgba   (Ctx *ctx, float r, float g, float b, float a);
+void ctx_rgb    (Ctx *ctx, float r, float g, float b);
+void ctx_rgba8  (Ctx *ctx, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+
+void ctx_gray   (Ctx *ctx, float gray);
+void ctx_drgba  (Ctx *ctx, float r, float g, float b, float a);
+void ctx_cmyka  (Ctx *ctx, float c, float m, float y, float k, float a);
+void ctx_cmyk   (Ctx *ctx, float c, float m, float y, float k);
+void ctx_dcmyka (Ctx *ctx, float c, float m, float y, float k, float a);
+void ctx_dcmyk  (Ctx *ctx, float c, float m, float y, float k);
+
+/* there is also getters for colors, by first setting a color in one format and getting
+ * it with another color conversions can be done
+ */
+
+void ctx_get_rgba   (Ctx *ctx, float *rgba);
+void ctx_get_graya  (Ctx *ctx, float *ya);
+void ctx_get_drgba  (Ctx *ctx, float *drgba);
+void ctx_get_cmyka  (Ctx *ctx, float *cmyka);
+void ctx_get_dcmyka (Ctx *ctx, float *dcmyka);
+int  ctx_in_fill    (Ctx *ctx, float x, float y);
+int  ctx_in_stroke  (Ctx *ctx, float x, float y);
+
+/**
+ * ctx_linear_gradient:
+ * Change the source to a linear gradient from x0,y0 to x1 y1, by default an empty gradient
+ * from black to white exist, add stops with ctx_gradient_add_stop to specify a custom gradient.
+ */
+void ctx_linear_gradient (Ctx *ctx, float x0, float y0, float x1, float y1);
+
+/**
+ * ctx_radial_gradient:
+ * Change the source to a radial gradient from a circle x0,y0 with radius r0 to an outher circle x1, y1 with radius r1. (NOTE: currently ctx is only using the second circles origin, both radiuses are in use.)
+ */
+void ctx_radial_gradient (Ctx *ctx, float x0, float y0, float r0,
+                          float x1, float y1, float r1);
+
+/* ctx_graident_add_stop:
+ *
+ * Add an RGBA gradient stop to the current gradient at position pos.
+ *
+ * XXX should be ctx_gradient_add_stop_rgba */
+void ctx_gradient_add_stop (Ctx *ctx, float pos, float r, float g, float b, float a);
+
+/* ctx_graident_add_stop:
+ *
+ * Add an RGBA gradient stop to the current gradient at position pos.
+ *
+ * XXX should be ctx_gradient_add_stop_u8 */
+void ctx_gradient_add_stop_u8 (Ctx *ctx, float pos, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+
+/* ctx_define_texture:
+ */
+void ctx_define_texture (Ctx *ctx,
+                         const char *eid,
+                         int         width,
+                         int         height,
+                         int         stride,
+                         int         format,
+                         void       *data,
+                         char       *ret_eid);
+
+void ctx_drop_eid (Ctx *ctx, const char *eid);
+
+/* ctx_source_transform:
+ */
+void
+ctx_source_transform (Ctx *ctx, float a, float b,  float c,
+                      float d, float e, float f, 
+                      float g, float h, float i); 
+typedef struct _CtxMatrix     CtxMatrix;
+
+/* ctx_source_transform_matrix:
+ */
+void
+ctx_source_transform_matrix (Ctx *ctx, CtxMatrix *matrix);
+
+
+
+int   ctx_width                (Ctx *ctx);
+int   ctx_height               (Ctx *ctx);
+float ctx_x                    (Ctx *ctx);
+float ctx_y                    (Ctx *ctx);
+float ctx_get_global_alpha     (Ctx *ctx);
+float ctx_get_font_size        (Ctx *ctx);
+float ctx_get_miter_limit      (Ctx *ctx);
+int   ctx_get_image_smoothing   (Ctx *ctx);
+float ctx_get_line_dash_offset (Ctx *ctx);
+
+float ctx_get_wrap_left        (Ctx *ctx);
+float ctx_get_wrap_right       (Ctx *ctx);
+float ctx_get_line_height      (Ctx *ctx);
+
+const char *ctx_get_font       (Ctx *ctx);
+float ctx_get_line_width       (Ctx *ctx);
+void  ctx_current_point        (Ctx *ctx, float *x, float *y);
+void  ctx_get_transform        (Ctx *ctx, float *a, float *b,
+                                float *c, float *d,
+                                float *e, float *f,
+                                float *g, float *h,
+                                float *i);
+
+void
+ctx_clip_extents (Ctx *ctx, float *x0, float *y0,
+                            float *x1, float *y1);
+
+/* The pixel formats supported as render targets
+ */
+enum _CtxPixelFormat
+{
+  CTX_FORMAT_NONE=0,
+  CTX_FORMAT_GRAY8,  // 1  - these enum values are not coincidence
+  CTX_FORMAT_GRAYA8, // 2  -
+  CTX_FORMAT_RGB8,   // 3  -
+  CTX_FORMAT_RGBA8,  // 4  -
+  CTX_FORMAT_BGRA8,  // 5
+  CTX_FORMAT_RGB565, // 6
+  CTX_FORMAT_RGB565_BYTESWAPPED, // 7
+  CTX_FORMAT_RGB332, // 8 // matching flags
+  CTX_FORMAT_RGBAF,  // 9
+  CTX_FORMAT_GRAYF,  // 10
+  CTX_FORMAT_GRAYAF, // 11
+  CTX_FORMAT_GRAY1,  // 12
+  CTX_FORMAT_CMYK8,  // 13
+  CTX_FORMAT_CMYKAF, // 14
+  CTX_FORMAT_CMYKA8, // 15 
+  CTX_FORMAT_GRAY2,  // 16 // matching flags
+  CTX_FORMAT_YUV420, // 17
+  CTX_FORMAT_GRAY4=32, // to match flags
+  CTX_FORMAT_CBRLE_1,   // CBRLE constant bitrate runlength encoded 1 bpp
+  CTX_FORMAT_CBRLE_2,   // these formats are used internally with the CBRLE
+  CTX_FORMAT_CBRLE_3,   // flag passed to the cb backend. (should be exteneded
+  CTX_FORMAT_CBRLE_4,   // to also apply to the tiled backends).
+  CTX_FORMAT_CBRLE_5,   //
+  CTX_FORMAT_CBRLE_6,   // When used in other backends they determine automatically
+  CTX_FORMAT_CBRLE_7,   // which specific CBRLE format to use, based on available
+  CTX_FORMAT_CBRLE_8,   // memory budget.
+  CTX_FORMAT_CBRLE_9,   // 
+  CTX_FORMAT_CBRLE_10,  // The specific formats are also used for testing and
+  CTX_FORMAT_CBRLE_11,  // improving the visual quality vs performance loss
+  CTX_FORMAT_CBRLE_12,  // when lossy.
+  CTX_FORMAT_CBRLE_13,  //
+  CTX_FORMAT_CBRLE_14,  // 
+  CTX_FORMAT_CBRLE_15,  //
+  CTX_FORMAT_CBRLE_16,  // 
+  CTX_FORMAT_CBRLE_17,  //  
+  CTX_FORMAT_CBRLE_18,  //  
+  CTX_FORMAT_CBRLE_19,  //  
+  CTX_FORMAT_CBRLE_20,  //  
+  CTX_FORMAT_CBRLE_21,  //  
+  CTX_FORMAT_CBRLE_22,  //  
+  CTX_FORMAT_CBRLE_23,  //  
+  CTX_FORMAT_CBRLE_24,  //  
+  CTX_FORMAT_CBRLE_32,  //  
+  CTX_FORMAT_CBRLE,     // 
+  CTX_FORMAT_BGRA8Z,    // 
+  CTX_FORMAT_RGBA8_SEPARATE_ALPHA, //
+};
+typedef enum   _CtxPixelFormat CtxPixelFormat;
+
+/**
+ * ctx_new_for_framebuffer:
+ *
+ * Create a new drawing context for a framebuffer, rendering happens
+ * immediately.
+ */
+Ctx *ctx_new_for_framebuffer (void *data,
+                              int   width,
+                              int   height,
+                              int   stride,
+                              CtxPixelFormat pixel_format);
+
+void
+ctx_get_image_data (Ctx *ctx, int sx, int sy, int sw, int sh,
+                    CtxPixelFormat format, int dst_stride,
+                    uint8_t *dst_data);
+
+void
+ctx_put_image_data (Ctx *ctx, int w, int h, int stride, int format,
+                    uint8_t *data,
+                    int ox, int oy,
+                    int dirtyX, int dirtyY,
+                    int dirtyWidth, int dirtyHeight);
+
+
+/* loads an image file from disk into texture, returning pixel width, height
+ * and eid, the eid is based on the path; not the contents - avoiding doing
+ * sha1 checksum of contents. The width and height of the image is returned
+ * along with the used eid, width height or eid can be NULL if we
+ * do not care about their values.
+ */
+void ctx_texture_load (Ctx        *ctx,
+                       const char *path,
+                       int        *width,
+                       int        *height,
+                       char       *eid);
+
+/* sets the paint source to be a texture by eid
+ */
+void ctx_texture              (Ctx *ctx, const char *eid, float x, float y);
+
+void ctx_draw_texture         (Ctx *ctx, const char *eid, float x, float y, float w, float h);
+
+void ctx_draw_texture_clipped (Ctx *ctx, const char *eid, float x, float y, float w, float h, float sx, float sy, float swidth, float sheight);
+
+void ctx_draw_image           (Ctx *ctx, const char *path, float x, float y, float w, float h);
+
+void ctx_draw_image_clipped   (Ctx *ctx, const char *path, float x, float y, float w, float h, float sx, float sy, float swidth, float sheight);
+
+/* used by the render threads of fb and sdl backends.
+ */
+void ctx_set_texture_source (Ctx *ctx, Ctx *texture_source);
+/* used when sharing cache state of eids between clients
+ */
+void ctx_set_texture_cache (Ctx *ctx, Ctx *texture_cache);
+
+typedef struct _CtxDrawlist CtxDrawlist;
+typedef void (*CtxFullCb) (CtxDrawlist *drawlist, void *data);
+
+int ctx_pixel_format_bits_per_pixel (CtxPixelFormat format); // bits per pixel
+int ctx_pixel_format_get_stride     (CtxPixelFormat format, int width);
+int ctx_pixel_format_components     (CtxPixelFormat format);
+
+void _ctx_set_store_clear    (Ctx *ctx);
+void _ctx_set_transformation (Ctx *ctx, int transformation);
+
+Ctx *ctx_hasher_new          (int width, int height, int cols, int rows, CtxDrawlist *drawlist);
+uint32_t ctx_hasher_get_hash (Ctx *ctx, int col, int row);
+
+int ctx_utf8_strlen (const char *s);
+int ctx_utf8_len (const unsigned char first_byte);
+
+#ifndef CTX_BABL
+#ifdef _BABL_H
+#define CTX_BABL 1
+#else
+#define CTX_BABL 0
+#endif
+#endif
+
+/* If cairo.h is included before ctx.h add cairo integration code
+ */
+#ifdef CAIRO_H
+#ifndef CTX_CAIRO
+#define CTX_CAIRO 1
+#endif
+#endif
+
+#ifndef CTX_TFT_ESPI
+#ifdef _TFT_eSPIH_
+#define CTX_TFT_ESPI 1
+#else
+#define CTX_TFT_ESPI 0
+#endif
+#endif
+
+#ifndef CTX_SDL
+#ifdef SDL_h_
+#define CTX_SDL 1
+#else
+#define CTX_SDL 0
+#endif
+#endif
+
+#ifndef CTX_FB
+#define CTX_FB 0
+#endif
+
+#ifndef CTX_KMS
+#define CTX_KMS 0
+#endif
+
+#if CTX_SDL
+#define ctx_mutex_t           SDL_mutex
+#define ctx_create_mutex()    SDL_CreateMutex()
+#define ctx_lock_mutex(a)     SDL_LockMutex(a)
+#define ctx_unlock_mutex(a)   SDL_UnlockMutex(a)
+#else
+#define ctx_mutex_t           int
+#define ctx_create_mutex()    NULL
+#define ctx_lock_mutex(a)   
+#define ctx_unlock_mutex(a)  
+#endif
+
+
+/* these are configuration flags for a ctx renderer, not all
+ * flags are applicable for all rendereres, the cb backend
+ * has the widest support currently.
+ */
+typedef enum CtxFlags {
+  //CTX_FLAG_DEFAULTS   = 0,
+  CTX_FLAG_GRAY8        = 1 << 0, // use GRAY8, implies LOWFI
+  CTX_FLAG_HASH_CACHE   = 1 << 1, // use a hashcache to determine which parts to redraw, implied by LOWFI
+  CTX_FLAG_LOWFI        = 1 << 2, // use lower res and color fidelity preview renders
+  CTX_FLAG_RGB332       = 1 << 3, // 8bit indexed with fixed palette, implies lowfi
+  CTX_FLAG_GRAY2        = 1 << 4, // 4 level grayscale, implies lowfi
+  CTX_FLAG_GRAY4        = 1 << 5, // 16 level grayscale, implies lowfi
+  //CTX_FLAG_DAMAGE_CONTROL = 1 << 6,
+  CTX_FLAG_SHOW_FPS     = 1 << 7, // possibly show fps in titlebar or printed to a log
+  CTX_FLAG_KEEP_DATA    = 1 << 8, // keep existing fb-data instead of doing an initial clear
+  CTX_FLAG_INTRA_UPDATE = 1 << 9,
+  CTX_FLAG_STAY_LOW     = 1 << 10,  // stay with the color fidelity drop in lowfi
+  CTX_FLAG_CBRLE        = 1 << 11   // use possibly lossy RLE encoded scanlines with constant bitrate
+} CtxFlags;
+
+
+Ctx *ctx_new_cb (int width, int height, CtxPixelFormat format,
+                 void (*set_pixels) (Ctx *ctx, void *user_data, 
+                                     int x, int y, int w, int h, void *buf,
+                                     int buf_size),
+                 void *set_pixels_user_data,
+                 int (*update_fb) (Ctx *ctx, void *user_data),
+                 void *update_fb_user_data,
+                 int   memory_budget,
+                 void *scratch_fb,
+                 int flags);
+void ctx_cb_set_flags (Ctx *ctx, int flags);
+int ctx_cb_get_flags  (Ctx *ctx);
+void ctx_cb_set_memory_budget (Ctx *ctx, int memory_budget);
+void
+ctx_cb_extent (Ctx *ctx, float *x0, float *y0, float *x1, float *y1);
+
+#if CTX_TFT_ESPI
+Ctx *ctx_new_tft (TFT_eSPI *tft, int memory_budget, void *scratch_fb, int flags);
+
+#endif
+
+
+#if CTX_CAIRO
+#ifndef CAIRO_H
+typedef struct _cairo_t cairo_t;
+#endif
+
+/* render the deferred commands of a ctx context to a cairo
+ * context
+ */
+void  ctx_render_cairo  (Ctx *ctx, cairo_t *cr);
+
+/* create a ctx context that directly renders to the specified
+ * cairo context
+ */
+Ctx * ctx_new_for_cairo (cairo_t *cr);
+#endif
+
+char *ctx_render_string (Ctx *ctx, int longform, int *retlen);
+
+void ctx_render_stream  (Ctx *ctx, FILE *stream, int formatter);
+
+void ctx_render_ctx     (Ctx *ctx, Ctx *d_ctx);
+void ctx_render_ctx_textures (Ctx *ctx, Ctx *d_ctx); /* cycles through all
+                                                        used texture eids
+                                                      */
+
+void ctx_start_move     (Ctx *ctx);
+
+
+int ctx_add_single      (Ctx *ctx, void *entry);
+
+uint32_t ctx_utf8_to_unichar (const char *input);
+int      ctx_unichar_to_utf8 (uint32_t  ch, uint8_t  *dest);
+
+
+typedef enum
+{
+  CTX_FILL_RULE_WINDING = 0,
+  CTX_FILL_RULE_EVEN_ODD
+} CtxFillRule;
+
+typedef enum
+{
+#if 0
+  CTX_COMPOSITE_SOURCE_OVER      = 0,
+  CTX_COMPOSITE_COPY             = 32,
+  CTX_COMPOSITE_SOURCE_IN        = 64,
+  CTX_COMPOSITE_SOURCE_OUT       = 96,
+  CTX_COMPOSITE_SOURCE_ATOP      = 128,
+  CTX_COMPOSITE_CLEAR            = 160,
+
+  CTX_COMPOSITE_DESTINATION_OVER = 192,
+  CTX_COMPOSITE_DESTINATION      = 224,
+  CTX_COMPOSITE_DESTINATION_IN   = 256,
+  CTX_COMPOSITE_DESTINATION_OUT  = 288,
+  CTX_COMPOSITE_DESTINATION_ATOP = 320,
+  CTX_COMPOSITE_XOR              = 352,
+  CTX_COMPOSITE_ALL              = (32+64+128+256)
+#else
+  CTX_COMPOSITE_SOURCE_OVER      =0,
+  CTX_COMPOSITE_COPY             ,
+  CTX_COMPOSITE_SOURCE_IN        ,
+  CTX_COMPOSITE_SOURCE_OUT       ,
+  CTX_COMPOSITE_SOURCE_ATOP      ,
+  CTX_COMPOSITE_CLEAR            ,
+
+  CTX_COMPOSITE_DESTINATION_OVER ,
+  CTX_COMPOSITE_DESTINATION      ,
+  CTX_COMPOSITE_DESTINATION_IN   ,
+  CTX_COMPOSITE_DESTINATION_OUT  ,
+  CTX_COMPOSITE_DESTINATION_ATOP ,
+  CTX_COMPOSITE_XOR              ,
+#endif
+} CtxCompositingMode;
+
+typedef enum
+{
+  CTX_BLEND_NORMAL,
+  CTX_BLEND_MULTIPLY,
+  CTX_BLEND_SCREEN,
+  CTX_BLEND_OVERLAY,
+  CTX_BLEND_DARKEN,
+  CTX_BLEND_LIGHTEN,
+  CTX_BLEND_COLOR_DODGE,
+  CTX_BLEND_COLOR_BURN,
+  CTX_BLEND_HARD_LIGHT,
+  CTX_BLEND_SOFT_LIGHT,
+  CTX_BLEND_DIFFERENCE,
+  CTX_BLEND_EXCLUSION,
+  CTX_BLEND_HUE, 
+  CTX_BLEND_SATURATION, 
+  CTX_BLEND_COLOR, 
+  CTX_BLEND_LUMINOSITY,  // 15
+  CTX_BLEND_DIVIDE,
+  CTX_BLEND_ADDITION,
+  CTX_BLEND_SUBTRACT,    // 18
+} CtxBlend;
+
+void ctx_blend_mode (Ctx *ctx, CtxBlend mode);
+
+typedef enum
+{
+  CTX_JOIN_BEVEL = 0,
+  CTX_JOIN_ROUND = 1,
+  CTX_JOIN_MITER = 2
+} CtxLineJoin;
+
+typedef enum
+{
+  CTX_CAP_NONE   = 0,
+  CTX_CAP_ROUND  = 1,
+  CTX_CAP_SQUARE = 2
+} CtxLineCap;
+
+typedef enum
+{
+  CTX_EXTEND_NONE    = 0,
+  CTX_EXTEND_REPEAT  = 1,
+  CTX_EXTEND_REFLECT = 2,
+  CTX_EXTEND_PAD     = 3
+} CtxExtend;
+
+void ctx_extend (Ctx *ctx, CtxExtend extend);
+
+typedef enum
+{
+  CTX_TEXT_BASELINE_ALPHABETIC = 0,
+  CTX_TEXT_BASELINE_TOP,
+  CTX_TEXT_BASELINE_HANGING,
+  CTX_TEXT_BASELINE_MIDDLE,
+  CTX_TEXT_BASELINE_IDEOGRAPHIC,
+  CTX_TEXT_BASELINE_BOTTOM
+} CtxTextBaseline;
+
+typedef enum
+{
+  CTX_TEXT_ALIGN_START = 0,  // in mrg these didnt exist
+  CTX_TEXT_ALIGN_END,        // but left/right did
+  CTX_TEXT_ALIGN_JUSTIFY, // not handled in ctx
+  CTX_TEXT_ALIGN_CENTER,
+  CTX_TEXT_ALIGN_LEFT,
+  CTX_TEXT_ALIGN_RIGHT
+} CtxTextAlign;
+
+typedef enum
+{
+  CTX_TEXT_DIRECTION_INHERIT = 0,
+  CTX_TEXT_DIRECTION_LTR,
+  CTX_TEXT_DIRECTION_RTL
+} CtxTextDirection;
+
+struct
+_CtxGlyph
+{
+  uint32_t index;
+  float    x;
+  float    y;
+};
+
+CtxTextAlign       ctx_get_text_align (Ctx *ctx);
+CtxTextBaseline    ctx_get_text_baseline (Ctx *ctx);
+CtxTextDirection   ctx_get_text_direction (Ctx *ctx);
+CtxFillRule        ctx_get_fill_rule (Ctx *ctx);
+CtxLineCap         ctx_get_line_cap (Ctx *ctx);
+CtxLineJoin        ctx_get_line_join (Ctx *ctx);
+CtxCompositingMode ctx_get_compositing_mode (Ctx *ctx);
+CtxBlend           ctx_get_blend_mode (Ctx *ctx);
+CtxExtend          ctx_get_extend     (Ctx *ctx);
+
+void ctx_gradient_add_stop_string (Ctx *ctx, float pos, const char *color);
+
+void ctx_text_align           (Ctx *ctx, CtxTextAlign      align);
+void ctx_text_baseline        (Ctx *ctx, CtxTextBaseline   baseline);
+void ctx_text_direction       (Ctx *ctx, CtxTextDirection  direction);
+void ctx_fill_rule            (Ctx *ctx, CtxFillRule       fill_rule);
+void ctx_line_cap             (Ctx *ctx, CtxLineCap        cap);
+void ctx_line_join            (Ctx *ctx, CtxLineJoin       join);
+void ctx_compositing_mode     (Ctx *ctx, CtxCompositingMode mode);
+/* we only care about the tight packing for this specific
+ * struct as we do indexing across members in arrays of it,
+ * to make sure its size becomes 9bytes -
+ * the pack pragma is also sufficient on recent gcc versions
+ */
+#pragma pack(push,1)
+struct
+  _CtxEntry
+{
+  uint8_t code;
+  union
+  {
+    float    f[2];
+    uint8_t  u8[8];
+    int8_t   s8[8];
+    uint16_t u16[4];
+    int16_t  s16[4];
+    uint32_t u32[2];
+    int32_t  s32[2];
+    uint64_t u64[1]; // unused
+  } data; // 9bytes long, we're favoring compactness and correctness
+  // over performance. By sacrificing float precision, zeroing
+  // first 8bit of f[0] would permit 8bytes long and better
+  // aglinment and cacheline behavior.
+};
+#pragma pack(pop)
+
+
+void  ctx_text          (Ctx        *ctx,
+                         const char *string);
+void  ctx_text_stroke   (Ctx        *ctx,
+                         const char *string);
+
+// XXX do not use?
+void  ctx_fill_text     (Ctx        *ctx,
+                         const char *string,
+                         float       x,
+                         float       y);
+
+// XXX do not use?
+void  ctx_stroke_text   (Ctx        *ctx,
+                         const char *string,
+                         float       x,
+                         float       y);
+
+/* returns the total horizontal advance if string had been rendered */
+float ctx_text_width    (Ctx        *ctx,
+                         const char *string);
+
+float ctx_glyph_width   (Ctx *ctx, int unichar);
+
+int   ctx_load_font_ttf (const char *name, const void *ttf_contents, int length);
+
+
+/**
+ * ctx_dirty_rect:
+ *
+ * Query the dirtied bounding box of drawing commands thus far.
+ */
+void  ctx_dirty_rect      (Ctx *ctx, int *x, int *y, int *width, int *height);
+
+
+#ifdef CTX_X86_64
+int ctx_x86_64_level (void);
+#endif
+
+
+enum _CtxModifierState
+{
+  CTX_MODIFIER_STATE_SHIFT   = (1<<0),
+  CTX_MODIFIER_STATE_CONTROL = (1<<1),
+  CTX_MODIFIER_STATE_ALT     = (1<<2),
+  CTX_MODIFIER_STATE_BUTTON1 = (1<<3),
+  CTX_MODIFIER_STATE_BUTTON2 = (1<<4),
+  CTX_MODIFIER_STATE_BUTTON3 = (1<<5),
+  CTX_MODIFIER_STATE_DRAG    = (1<<6), // pointer button is down (0 or any)
+};
+typedef enum _CtxModifierState CtxModifierState;
+
+enum _CtxScrollDirection
+{
+  CTX_SCROLL_DIRECTION_UP,
+  CTX_SCROLL_DIRECTION_DOWN,
+  CTX_SCROLL_DIRECTION_LEFT,
+  CTX_SCROLL_DIRECTION_RIGHT
+};
+typedef enum _CtxScrollDirection CtxScrollDirection;
+
+typedef struct _CtxEvent CtxEvent;
+
+void ctx_set_backend (Ctx *ctx, void *backend);
+void *ctx_get_backend (Ctx *ctx);
+
+/* the following API is only available when CTX_EVENTS is defined to 1
+ *
+ * it provides the ability to register callbacks with the current path
+ * that get delivered with transformed coordinates.
+ */
+int ctx_need_redraw (Ctx *ctx);
+void ctx_queue_draw (Ctx *ctx);
+float ctx_get_float (Ctx *ctx, uint32_t hash);
+void ctx_set_float (Ctx *ctx, uint32_t hash, float value);
+
+unsigned long ctx_ticks (void);
+void ctx_end_frame (Ctx *ctx);
+
+void ctx_set_clipboard (Ctx *ctx, const char *text);
+char *ctx_get_clipboard (Ctx *ctx);
+
+void _ctx_events_init     (Ctx *ctx);
+typedef struct _CtxIntRectangle CtxIntRectangle;
+struct _CtxIntRectangle {
+  int x;
+  int y;
+  int width;
+  int height;
+};
+
+void ctx_quit (Ctx *ctx);
+int  ctx_has_quit (Ctx *ctx);
+
+typedef void (*CtxCb) (CtxEvent *event,
+                       void     *data,
+                       void     *data2);
+typedef void (*CtxDestroyNotify) (void *data);
+
+enum _CtxEventType {
+  CTX_PRESS        = 1 << 0,
+  CTX_MOTION       = 1 << 1,
+  CTX_RELEASE      = 1 << 2,
+  CTX_ENTER        = 1 << 3,
+  CTX_LEAVE        = 1 << 4,
+  CTX_TAP          = 1 << 5,
+  CTX_TAP_AND_HOLD = 1 << 6,
+
+  /* NYI: SWIPE, ZOOM ROT_ZOOM, */
+
+  CTX_DRAG_PRESS   = 1 << 7,
+  CTX_DRAG_MOTION  = 1 << 8,
+  CTX_DRAG_RELEASE = 1 << 9,
+  CTX_KEY_PRESS    = 1 << 10,
+  CTX_KEY_DOWN     = 1 << 11,
+  CTX_KEY_UP       = 1 << 12,
+  CTX_SCROLL       = 1 << 13,
+  CTX_MESSAGE      = 1 << 14,
+  CTX_DROP         = 1 << 15,
+
+  CTX_SET_CURSOR   = 1 << 16, // used internally
+
+  /* client should store state - preparing
+                                 * for restart
+                                 */
+  CTX_POINTER  = (CTX_PRESS | CTX_MOTION | CTX_RELEASE | CTX_DROP),
+  CTX_TAPS     = (CTX_TAP | CTX_TAP_AND_HOLD),
+  CTX_CROSSING = (CTX_ENTER | CTX_LEAVE),
+  CTX_DRAG     = (CTX_DRAG_PRESS | CTX_DRAG_MOTION | CTX_DRAG_RELEASE),
+  CTX_KEY      = (CTX_KEY_DOWN | CTX_KEY_UP | CTX_KEY_PRESS),
+  CTX_MISC     = (CTX_MESSAGE),
+  CTX_ANY      = (CTX_POINTER | CTX_DRAG | CTX_CROSSING | CTX_KEY | CTX_MISC | CTX_TAPS),
+};
+typedef enum _CtxEventType CtxEventType;
+
+#define CTX_CLICK   CTX_PRESS   // SHOULD HAVE MORE LOGIC
+typedef struct _CtxClient CtxClient;
+
+
+
+struct _CtxEvent {
+  CtxEventType  type;
+  uint32_t time;
+  Ctx     *ctx;
+  int stop_propagate; /* when set - propagation is stopped */
+
+  CtxModifierState state;
+
+  int     device_no; /* 0 = left mouse button / virtual focus */
+                     /* 1 = middle mouse button */
+                     /* 2 = right mouse button */
+                     /* 3 = first multi-touch .. (NYI) */
+
+  float   device_x; /* untransformed (device) coordinates  */
+  float   device_y;
+
+  /* coordinates; and deltas for motion/drag events in user-coordinates: */
+  float   x;
+  float   y;
+  float   start_x; /* start-coordinates (press) event for drag, */
+  float   start_y; /*    untransformed coordinates */
+  float   prev_x;  /* previous events coordinates */
+  float   prev_y;
+  float   delta_x; /* x - prev_x, redundant - but often useful */
+  float   delta_y; /* y - prev_y, redundant - ..  */
+
+
+  unsigned int unicode; /* only valid for key-events, re-use as keycode? */
+  const char *string;   /* as key can be "up" "down" "space" "backspace" "a" "b" "ø" etc .. */
+                        /* this is also where the message is delivered for
+                         * MESSAGE events
+                         *
+                         * and the data for drop events are delivered
+                         *
+                         */
+                         /* XXX lifetime of this string should be longer
+                         * than the events, preferably interned. XXX
+                         * maybe add a flag for this?
+                         */
+  int owns_string; /* if 1 call free.. */
+  CtxScrollDirection scroll_direction;
+
+
+  // would be nice to add the bounding box of the hit-area causing
+  // the event, making for instance scissored enter/leave repaint easier.
+};
+
+// layer-event "layer"  motion x y device_no 
+
+void ctx_add_key_binding_full (Ctx *ctx,
+                               const char *key,
+                               const char *action,
+                               const char *label,
+                               CtxCb       cb,
+                               void       *cb_data,
+                               CtxDestroyNotify destroy_notify,
+                               void       *destroy_data);
+void ctx_add_key_binding (Ctx *ctx,
+                          const char *key,
+                          const char *action,
+                          const char *label,
+                          CtxCb cb,
+                          void  *cb_data);
+typedef struct CtxBinding {
+  char *nick;
+  char *command;
+  char *label;
+  CtxCb cb;
+  void *cb_data;
+  CtxDestroyNotify destroy_notify;
+  void  *destroy_data;
+} CtxBinding;
+CtxBinding *ctx_get_bindings (Ctx *ctx);
+void  ctx_clear_bindings     (Ctx *ctx);
+void  ctx_remove_idle        (Ctx *ctx, int handle);
+int   ctx_add_timeout_full   (Ctx *ctx, int ms, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data,
+                              void (*destroy_notify)(void *destroy_data), void *destroy_data);
+int   ctx_add_timeout        (Ctx *ctx, int ms, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data);
+int   ctx_add_idle_full      (Ctx *ctx, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data,
+                              void (*destroy_notify)(void *destroy_data), void *destroy_data);
+int   ctx_add_idle           (Ctx *ctx, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data);
+
+
+void ctx_add_hit_region (Ctx *ctx, const char *id);
+
+void ctx_listen_full (Ctx     *ctx,
+                      float    x,
+                      float    y,
+                      float    width,
+                      float    height,
+                      CtxEventType  types,
+                      CtxCb    cb,
+                      void    *data1,
+                      void    *data2,
+                      void   (*finalize)(void *listen_data, void *listen_data2,
+                                         void *finalize_data),
+                      void    *finalize_data);
+void  ctx_event_stop_propagate (CtxEvent *event);
+void  ctx_listen               (Ctx          *ctx,
+                                CtxEventType  types,
+                                CtxCb         cb,
+                                void*         data1,
+                                void*         data2);
+void  ctx_listen_with_finalize (Ctx          *ctx,
+                                CtxEventType  types,
+                                CtxCb         cb,
+                                void*         data1,
+                                void*         data2,
+                      void   (*finalize)(void *listen_data, void *listen_data2,
+                                         void *finalize_data),
+                      void    *finalize_data);
+
+void ctx_init (int *argc, char ***argv); // is a no-op but could launch
+                                         // terminal
+CtxEvent *ctx_get_event (Ctx *ctx);
+void      ctx_get_event_fds (Ctx *ctx, int *fd, int *count);
+
+
+int   ctx_pointer_is_down (Ctx *ctx, int no);
+float ctx_pointer_x (Ctx *ctx);
+float ctx_pointer_y (Ctx *ctx);
+void  ctx_freeze (Ctx *ctx);
+void  ctx_thaw   (Ctx *ctx);
+int   ctx_events_frozen (Ctx *ctx);
+void  ctx_events_clear_items (Ctx *ctx);
+
+/* The following functions drive the event delivery, registered callbacks
+ * are called in response to these being called.
+ */
+
+int ctx_key_down  (Ctx *ctx, unsigned int keyval,
+                   const char *string, uint32_t time);
+int ctx_key_up    (Ctx *ctx, unsigned int keyval,
+                   const char *string, uint32_t time);
+int ctx_key_press (Ctx *ctx, unsigned int keyval,
+                   const char *string, uint32_t time);
+int ctx_scrolled  (Ctx *ctx, float x, float y, CtxScrollDirection scroll_direction, uint32_t time);
+void ctx_incoming_message (Ctx *ctx, const char *message, long time);
+int ctx_pointer_motion    (Ctx *ctx, float x, float y, int device_no, uint32_t time);
+int ctx_pointer_release   (Ctx *ctx, float x, float y, int device_no, uint32_t time);
+int ctx_pointer_press     (Ctx *ctx, float x, float y, int device_no, uint32_t time);
+int ctx_pointer_drop      (Ctx *ctx, float x, float y, int device_no, uint32_t time,
+                           char *string);
+
+
+
+int   ctx_client_resize        (Ctx *ctx, int id, int width, int height);
+void  ctx_client_set_font_size (Ctx *ctx, int id, float font_size);
+float ctx_client_get_font_size (Ctx *ctx, int id);
+void  ctx_client_maximize      (Ctx *ctx, int id);
+
+
+#if 1 // CTX_VT
+
+typedef struct _VT VT;
+void vt_feed_keystring    (VT *vt, CtxEvent *event, const char *str);
+void vt_paste             (VT *vt, const char *str);
+char *vt_get_selection    (VT *vt);
+long vt_rev               (VT *vt);
+int  vt_has_blink         (VT *vt);
+int ctx_vt_had_alt_screen (VT *vt);
+
+int ctx_clients_handle_events (Ctx *ctx);
+
+typedef struct _CtxList CtxList;
+CtxList *ctx_clients (Ctx *ctx);
+
+void ctx_set_fullscreen (Ctx *ctx, int val);
+int ctx_get_fullscreen (Ctx *ctx);
+
+typedef struct _CtxBuffer CtxBuffer;
+CtxBuffer *ctx_buffer_new_for_data (void *data, int width, int height,
+                                    int stride,
+                                    CtxPixelFormat pixel_format,
+                                    void (*freefunc) (void *pixels, void *user_data),
+                                    void *user_data);
+
+typedef enum CtxBackendType {
+  CTX_BACKEND_NONE,
+  CTX_BACKEND_CTX,
+  CTX_BACKEND_RASTERIZER,
+  CTX_BACKEND_HASHER,
+  CTX_BACKEND_HEADLESS,
+  CTX_BACKEND_TERM,
+  CTX_BACKEND_FB,
+  CTX_BACKEND_KMS,
+  CTX_BACKEND_TERMIMG,
+  CTX_BACKEND_CAIRO,
+  CTX_BACKEND_SDL,
+  CTX_BACKEND_DRAWLIST,
+} CtxBackendType;
+
+CtxBackendType ctx_backend_type (Ctx *ctx);
+
+static inline int ctx_backend_is_tiled (Ctx *ctx)
+{
+  switch (ctx_backend_type (ctx))
+  {
+    case CTX_BACKEND_FB:
+    case CTX_BACKEND_SDL:
+    case CTX_BACKEND_KMS:
+    case CTX_BACKEND_HEADLESS:
+      return 1;
+    default:
+      return 0;
+  }
+}
+
+#endif
+
+typedef enum CtxClientFlags {
+  ITK_CLIENT_UI_RESIZABLE = 1<<0,
+  ITK_CLIENT_CAN_LAUNCH   = 1<<1,
+  ITK_CLIENT_MAXIMIZED    = 1<<2,
+  ITK_CLIENT_ICONIFIED    = 1<<3,
+  ITK_CLIENT_SHADED       = 1<<4,
+  ITK_CLIENT_TITLEBAR     = 1<<5,
+  ITK_CLIENT_LAYER2       = 1<<6,  // used for having a second set
+                                   // to draw - useful for splitting
+                                   // scrolled and HUD items
+                                   // with HUD being LAYER2
+                                  
+  ITK_CLIENT_KEEP_ALIVE   = 1<<7,  // do not automatically
+  ITK_CLIENT_FINISHED     = 1<<8,  // do not automatically
+                                   // remove after process quits
+  ITK_CLIENT_PRELOAD      = 1<<9,
+  ITK_CLIENT_LIVE         = 1<<10
+} CtxClientFlags;
+typedef void (*CtxClientFinalize)(CtxClient *client, void *user_data);
+
+int ctx_client_id (CtxClient *client);
+int ctx_client_flags (CtxClient *client);
+VT *ctx_client_vt (CtxClient *client);
+void ctx_client_add_event (CtxClient *client, CtxEvent *event);
+const char *ctx_client_title (CtxClient *client);
+CtxClient *ctx_client_find (Ctx *ctx, const char *label); // XXX really unstable api?
+
+
+void *ctx_client_userdata (CtxClient *client);
+
+void ctx_client_quit (CtxClient *client);
+CtxClient *vt_get_client (VT *vt);
+CtxClient *ctx_client_new (Ctx *ctx,
+                           const char *commandline,
+                           int x, int y, int width, int height,
+                           float font_size,
+                           CtxClientFlags flags,
+                           void *user_data,
+                           CtxClientFinalize client_finalize);
+
+CtxClient *ctx_client_new_argv (Ctx *ctx, char **argv, int x, int y, int width, int height, float font_size, CtxClientFlags flags, void *user_data,
+                CtxClientFinalize client_finalize);
+int ctx_clients_need_redraw (Ctx *ctx);
+
+CtxClient *ctx_client_new_thread (Ctx *ctx, void (*start_routine)(Ctx *ctx, void *user_data),
+                                  int x, int y, int width, int height, float font_size, CtxClientFlags flags, void *user_data, CtxClientFinalize finalize);
+
+extern float ctx_shape_cache_rate;
+extern int _ctx_max_threads;
+
+CtxEvent *ctx_event_copy (CtxEvent *event);
+
+void  ctx_client_move         (Ctx *ctx, int id, int x, int y);
+void  ctx_client_shade_toggle (Ctx *ctx, int id);
+float ctx_client_min_y_pos    (Ctx *ctx);
+float ctx_client_max_y_pos    (Ctx *ctx);
+void ctx_client_paste (Ctx *ctx, int id, const char *str);
+char  *ctx_client_get_selection        (Ctx *ctx, int id);
+
+void  ctx_client_rev_inc      (CtxClient *client);
+long  ctx_client_rev          (CtxClient *client);
+
+int   ctx_clients_active      (Ctx *ctx);
+
+CtxClient *ctx_client_by_id (Ctx *ctx, int id);
+
+int ctx_clients_draw (Ctx *ctx, int layer2);
+
+void ctx_client_feed_keystring (CtxClient *client, CtxEvent *event, const char *str);
+// need not be public?
+void ctx_client_register_events (CtxClient *client, Ctx *ctx, double x0, double y0);
+
+void ctx_client_remove (Ctx *ctx, CtxClient *client);
+
+int  ctx_client_height           (Ctx *ctx, int id);
+int  ctx_client_x                (Ctx *ctx, int id);
+int  ctx_client_y                (Ctx *ctx, int id);
+void ctx_client_raise_top        (Ctx *ctx, int id);
+void ctx_client_lower_bottom     (Ctx *ctx, int id);
+void ctx_client_iconify          (Ctx *ctx, int id);
+int  ctx_client_is_iconified     (Ctx *ctx, int id);
+void ctx_client_uniconify        (Ctx *ctx, int id);
+void ctx_client_maximize         (Ctx *ctx, int id);
+int  ctx_client_is_maximized     (Ctx *ctx, int id);
+void ctx_client_unmaximize       (Ctx *ctx, int id);
+void ctx_client_maximized_toggle (Ctx *ctx, int id);
+void ctx_client_shade            (Ctx *ctx, int id);
+int  ctx_client_is_shaded        (Ctx *ctx, int id);
+void ctx_client_unshade          (Ctx *ctx, int id);
+void ctx_client_toggle_maximized (Ctx *ctx, int id);
+void ctx_client_shade_toggle     (Ctx *ctx, int id);
+void ctx_client_move             (Ctx *ctx, int id, int x, int y);
+int  ctx_client_resize           (Ctx *ctx, int id, int width, int height);
+void ctx_client_set_opacity      (Ctx *ctx, int id, float opacity);
+float ctx_client_get_opacity     (Ctx *ctx, int id);
+void ctx_client_set_title        (Ctx *ctx, int id, const char *title);
+const char *ctx_client_get_title (Ctx *ctx, int id);
+
+typedef enum
+{
+  CTX_CONT             = '\0', // - contains args from preceding entry
+  CTX_NOP              = ' ', //
+                   //     !    UNUSED
+                   //     "    start/end string
+                   //     #    comment in parser
+                   //     $    UNUSED
+                   //     %    percent of viewport width or height
+  CTX_EDGE             = '&', // not occuring in commandstream
+                   //     '    start/end string
+  CTX_DATA             = '(', // size size-in-entries - u32
+  CTX_DATA_REV         = ')', // reverse traversal data marker
+  CTX_SET_RGBA_U8      = '*', // r g b a - u8
+  CTX_NEW_EDGE         = '+', // x0 y0 x1 y1 - s16
+                   //     ,    UNUSED/RESERVED
+  CTX_SET_PIXEL        = '-', // 8bit "fast-path" r g b a x y - u8 for rgba, and u16 for x,y
+  // set pixel might want a shorter ascii form with hex-color? or keep it an embedded
+  // only option?
+                   //     .    decimal seperator
+                   //     /    UNUSED
+ 
+  /* optimizations that reduce the number of entries used,
+   * not visible outside the drawlist compression, thus
+   * using entries that cannot be used directly as commands
+   * since they would be interpreted as numbers - if values>127
+   * then the embedded font data is harder to escape.
+   */
+  CTX_REL_LINE_TO_X4            = '0', // x1 y1 x2 y2 x3 y3 x4 y4   -- s8
+  CTX_REL_LINE_TO_REL_CURVE_TO  = '1', // x1 y1 cx1 cy1 cx2 cy2 x y -- s8
+  CTX_REL_CURVE_TO_REL_LINE_TO  = '2', // cx1 cy1 cx2 cy2 x y x1 y1 -- s8
+  CTX_REL_CURVE_TO_REL_MOVE_TO  = '3', // cx1 cy1 cx2 cy2 x y x1 y1 -- s8
+  CTX_REL_LINE_TO_X2            = '4', // x1 y1 x2 y2 -- s16
+  CTX_MOVE_TO_REL_LINE_TO       = '5', // x1 y1 x2 y2 -- s16
+  CTX_REL_LINE_TO_REL_MOVE_TO   = '6', // x1 y1 x2 y2 -- s16
+  CTX_FILL_MOVE_TO              = '7', // x y
+  CTX_REL_QUAD_TO_REL_QUAD_TO   = '8', // cx1 x1 cy1 y1 cx1 x2 cy1 y1 -- s8
+  CTX_REL_QUAD_TO_S16           = '9', // cx1 cy1 x y                 - s16
+                   //     :    UNUSED
+  CTX_END_FRAME        = ';',
+                   //     <    UNUSED
+                   //     =    UNUSED/RESERVED
+                   //     >    UNUSED
+                   //     ?    UNUSED
+
+  CTX_DEFINE_FONT      = 15,
+
+  CTX_DEFINE_GLYPH     = '@', // unichar width - u32
+  CTX_ARC_TO           = 'A', // x1 y1 x2 y2 radius
+  CTX_ARC              = 'B', // x y radius angle1 angle2 direction
+  CTX_CURVE_TO         = 'C', // cx1 cy1 cx2 cy2 x y
+  CTX_PAINT            = 'D', // 
+  CTX_STROKE           = 'E', //
+  CTX_FILL             = 'F', //
+  CTX_RESTORE          = 'G', //
+  CTX_HOR_LINE_TO      = 'H', // x
+  CTX_DEFINE_TEXTURE   = 'I', // "eid" width height format "data"
+  CTX_ROTATE           = 'J', // radians
+  CTX_COLOR            = 'K', // model, c1 c2 c3 ca - variable arg count
+  CTX_LINE_TO          = 'L', // x y
+  CTX_MOVE_TO          = 'M', // x y
+  CTX_BEGIN_PATH       = 'N', //
+  CTX_SCALE            = 'O', // xscale yscale
+  CTX_NEW_PAGE         = 'P', // - NYI - optional page-size
+  CTX_QUAD_TO          = 'Q', // cx cy x y
+  CTX_VIEW_BOX         = 'R', // x y width height
+  CTX_SMOOTH_TO        = 'S', // cx cy x y
+  CTX_SMOOTHQ_TO       = 'T', // x y
+  CTX_START_FRAME      = 'U', // XXX does this belong here?
+  CTX_VER_LINE_TO      = 'V', // y
+  CTX_APPLY_TRANSFORM  = 'W', // a b c d e f g h i j - for set_transform combine with identity
+  CTX_EXIT             = 'X', //
+  CTX_ROUND_RECTANGLE  = 'Y', // x y width height radius
+
+  CTX_CLOSE_PATH2      = 'Z', //
+  CTX_KERNING_PAIR     = '[', // glA glB kerning, glA and glB in u16 kerning in s32
+                       // \   UNUSED
+                       // ^   PARSER - vh unit
+  CTX_COLOR_SPACE      = ']', // IccSlot  data  data_len,
+                         //    data can be a string with a name,
+                         //    icc data or perhaps our own serialization
+                         //    of profile data
+  CTX_EDGE_FLIPPED     = '^', // x0 y0 x1 y1 - s16  | also unit
+  CTX_STROKE_SOURCE    = '_', // next source definition applies to strokes
+  CTX_SOURCE_TRANSFORM = '`',
+  CTX_REL_ARC_TO       = 'a', // x1 y1 x2 y2 radius
+  CTX_CLIP             = 'b',
+  CTX_REL_CURVE_TO     = 'c', // cx1 cy1 cx2 cy2 x y
+  CTX_LINE_DASH        = 'd', // dashlen0 [dashlen1 ...]
+  CTX_TRANSLATE        = 'e', // x y
+  CTX_LINEAR_GRADIENT  = 'f', // x1 y1 x2 y2
+  CTX_SAVE             = 'g',
+  CTX_REL_HOR_LINE_TO  = 'h', // x
+  CTX_TEXTURE          = 'i',
+  CTX_PRESERVE         = 'j', // XXX - fix!
+  CTX_SET_KEY          = 'k', // - used together with another char to identify
+                              //   a key to set
+  CTX_REL_LINE_TO      = 'l', // x y
+  CTX_REL_MOVE_TO      = 'm', // x y
+  CTX_FONT             = 'n', // as used by text parser XXX: move to keyvals?
+  CTX_RADIAL_GRADIENT  = 'o', // x1 y1 radius1 x2 y2 radius2
+  CTX_GRADIENT_STOP    = 'p', // argument count depends on current color model
+  CTX_REL_QUAD_TO      = 'q', // cx cy x y
+  CTX_RECTANGLE        = 'r', // x y width height
+  CTX_REL_SMOOTH_TO    = 's', // cx cy x y
+  CTX_REL_SMOOTHQ_TO   = 't', // x y
+  CTX_STROKE_TEXT      = 'u', // string - utf8 string
+  CTX_REL_VER_LINE_TO  = 'v', // y
+  CTX_GLYPH            = 'w', // unichar fontsize
+  CTX_TEXT             = 'x', // string | kern - utf8 data to shape or horizontal kerning amount
+  CTX_IDENTITY         = 'y', // XXX remove?
+  CTX_CLOSE_PATH       = 'z', //
+  CTX_START_GROUP      = '{',
+                       // |    UNUSED
+  CTX_END_GROUP        = '}',
+                       // ~    UNUSED/textenc
+
+
+  /* though expressed as two chars in serialization we have
+   * dedicated byte commands for the setters to keep the dispatch
+   * simpler. There is no need for these to be human readable thus we go >128
+   * they also should not be emitted when outputting, even compact mode ctx.
+   *
+   * rasterizer:    &^+
+   * font:          @[
+   *
+   * unused:        !&<=>?: =/\`,
+   * reserved:      '"&   #. %^@
+   */
+
+  CTX_FILL_RULE        = 128, // kr rule - u8, default = CTX_FILLE_RULE_EVEN_ODD
+  CTX_BLEND_MODE       = 129, // kB mode - u32 , default=0
+
+  CTX_MITER_LIMIT      = 130, // km limit - float, default = 0.0
+
+  CTX_LINE_JOIN        = 131, // kj join - u8 , default=0
+  CTX_LINE_CAP         = 132, // kc cap - u8, default = 0
+  CTX_LINE_WIDTH       = 133, // kw width, default = 2.0
+  CTX_GLOBAL_ALPHA     = 134, // ka alpha - default=1.0
+  CTX_COMPOSITING_MODE = 135, // kc mode - u32 , default=0
+
+  CTX_FONT_SIZE        = 136, // kf size - float, default=?
+  CTX_TEXT_ALIGN       = 137, // kt align - u8, default = CTX_TEXT_ALIGN_START
+  CTX_TEXT_BASELINE    = 138, // kb baseline - u8, default = CTX_TEXT_ALIGN_ALPHABETIC
+  CTX_TEXT_DIRECTION   = 139, // kd
+
+  CTX_SHADOW_BLUR      = 140, // ks
+  CTX_SHADOW_COLOR     = 141, // kC
+  CTX_SHADOW_OFFSET_X  = 142, // kx
+  CTX_SHADOW_OFFSET_Y  = 143, // ky
+  CTX_IMAGE_SMOOTHING  = 144, // kS
+  CTX_LINE_DASH_OFFSET = 145, // kD lineDashOffset
+
+
+  CTX_EXTEND           = 146, // ke u32 extend mode, default=0
+  CTX_WRAP_LEFT        = 147, // kL
+  CTX_WRAP_RIGHT       = 148, // kR
+  CTX_LINE_HEIGHT      = 149, // kH
+                              //
+  CTX_STROKE_RECT      = 200, // strokeRect - only exist in long form
+  CTX_FILL_RECT        = 201, // fillRect   - only exist in long form
+} CtxCode;
+
+
+#pragma pack(push,1)
+
+
+typedef struct _CtxCommand CtxCommand;
+#define CTX_ASSERT               0
+
+#if CTX_ASSERT==1
+#define ctx_assert(a)  if(!(a)){fprintf(stderr,"%s:%i assertion failed\n", __FUNCTION__, __LINE__);  }
+#else
+#define ctx_assert(a)
+#endif
+
+
+struct
+  _CtxCommand
+{
+  union
+  {
+    uint8_t  code;
+    CtxEntry entry;
+    struct
+    {
+      uint8_t code;
+      float scalex;
+      float scaley;
+    } scale;
+    struct
+    {
+      uint8_t code;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t cont;
+      uint8_t data[8]; /* ... and continues */
+    } data;
+    struct
+    {
+      uint8_t code;
+      uint32_t stringlen;
+      uint32_t blocklen;
+    } data_rev;
+    struct
+    {
+      uint8_t code;
+      uint32_t next_active_mask; // the tilehasher active flags for next
+                                 // drawing command
+      float pad2;
+      uint8_t code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t code_cont;
+      uint8_t utf8[8]; /* .. and continues */
+    } text;
+    struct
+    {
+      uint8_t  code;
+      uint32_t key_hash;
+      float    pad;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      uint8_t  utf8[8]; /* .. and continues */
+    } set;
+    struct
+    {
+      uint8_t  code;
+      uint32_t pad0;
+      float    pad1;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      uint8_t  utf8[8]; /* .. and continues */
+    } get;
+    struct {
+      uint8_t  code;
+      uint32_t count; /* better than byte_len in code, but needs to then be set   */
+      float    pad1;
+      uint8_t  code_data;
+      uint32_t byte_len;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      float    data[2]; /* .. and - possibly continues */
+    } line_dash;
+    struct {
+      uint8_t  code;
+      uint32_t space_slot;
+      float    pad1;
+      uint8_t  code_data;
+      uint32_t data_len;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      uint8_t  data[8]; /* .. and continues */
+    } colorspace;
+    struct
+    {
+      uint8_t  code;
+      float    x;
+      float    y;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      char     eid[8]; /* .. and continues */
+    } texture;
+    struct
+    {
+      uint8_t  code;
+      uint32_t width;
+      uint32_t height;
+      uint8_t  code_cont0;
+      uint16_t format;
+      uint16_t pad0;
+      uint32_t pad1;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont1;
+      char     eid[8]; /* .. and continues */
+      // followed by - in variable offset code_Data, data_len, datablock_len, cont, pixeldata
+    } define_texture;
+    struct
+    {
+      uint8_t  code;
+      float    pad;
+      float    pad2;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      uint8_t  utf8[8]; /* .. and continues */
+    } text_stroke;
+    struct
+    {
+      uint8_t  code;
+      float    pad;
+      float    pad2;
+      uint8_t  code_data;
+      uint32_t stringlen;
+      uint32_t blocklen;
+      uint8_t  code_cont;
+      uint8_t  utf8[8]; /* .. and continues */
+    } set_font;
+    struct
+    {
+      uint8_t code;
+      float model;
+      float r;
+      uint8_t pad1;
+      float g;
+      float b;
+      uint8_t pad2;
+      float a;
+    } rgba;
+    struct
+    {
+      uint8_t code;
+      float model;
+      float c;
+      uint8_t pad1;
+      float m;
+      float y;
+      uint8_t pad2;
+      float k;
+      float a;
+    } cmyka;
+    struct
+    {
+      uint8_t code;
+      float model;
+      float g;
+      uint8_t pad1;
+      float a;
+    } graya;
+
+    struct
+    {
+      uint8_t code;
+      float model;
+      float c0;
+      uint8_t pad1;
+      float c1;
+      float c2;
+      uint8_t pad2;
+      float c3;
+      float c4;
+      uint8_t pad3;
+      float c5;
+      float c6;
+      uint8_t pad4;
+      float c7;
+      float c8;
+      uint8_t pad5;
+      float c9;
+      float c10;
+    } set_color;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+    } rel_move_to;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+    } rel_line_to;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+    } line_to;
+    struct
+    {
+      uint8_t code;
+      float cx1;
+      float cy1;
+      uint8_t pad0;
+      float cx2;
+      float cy2;
+      uint8_t pad1;
+      float x;
+      float y;
+    } rel_curve_to;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+    } move_to;
+    struct
+    {
+      uint8_t code;
+      float cx1;
+      float cy1;
+      uint8_t pad0;
+      float cx2;
+      float cy2;
+      uint8_t pad1;
+      float x;
+      float y;
+    } curve_to;
+    struct
+    {
+      uint8_t code;
+      float x1;
+      float y1;
+      uint8_t pad0;
+      float r1;
+      float x2;
+      uint8_t pad1;
+      float y2;
+      float r2;
+    } radial_gradient;
+    struct
+    {
+      uint8_t code;
+      float x1;
+      float y1;
+      uint8_t pad0;
+      float x2;
+      float y2;
+    } linear_gradient;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+      uint8_t pad0;
+      float width;
+      float height;
+      uint8_t pad1;
+      float radius;
+    } rectangle;
+    struct {
+      uint8_t code;
+      float x;
+      float y;
+      uint8_t pad0;
+      float width;
+      float height;
+    } view_box;
+
+    struct
+    {
+      uint8_t code;
+      uint16_t glyph_before;
+      uint16_t glyph_after;
+       int32_t amount;
+    } kern;
+
+    struct
+    {
+      uint8_t code;
+      uint32_t glyph;
+      uint32_t advance; // * 256
+    } define_glyph;
+
+    struct
+    {
+      uint8_t code;
+      uint8_t rgba[4];
+      uint16_t x;
+      uint16_t y;
+    } set_pixel;
+    struct
+    {
+      uint8_t code;
+      float cx;
+      float cy;
+      uint8_t pad0;
+      float x;
+      float y;
+    } quad_to;
+    struct
+    {
+      uint8_t code;
+      float cx;
+      float cy;
+      uint8_t pad0;
+      float x;
+      float y;
+    } rel_quad_to;
+    struct
+    {
+      uint8_t code;
+      float x;
+      float y;
+      uint8_t pad0;
+      float radius;
+      float angle1;
+      uint8_t pad1;
+      float angle2;
+      float direction;
+    }
+    arc;
+    struct
+    {
+      uint8_t code;
+      float x1;
+      float y1;
+      uint8_t pad0;
+      float x2;
+      float y2;
+      uint8_t pad1;
+      float radius;
+    }
+    arc_to;
+    /* some format specific generic accesors:  */
+    struct
+    {
+      uint8_t code;
+      float   x0;
+      float   y0;
+      uint8_t pad0;
+      float   x1;
+      float   y1;
+      uint8_t pad1;
+      float   x2;
+      float   y2;
+      uint8_t pad2;
+      float   x3;
+      float   y3;
+      uint8_t pad3;
+      float   x4;
+      float   y4;
+    } c;
+    struct
+    {
+      uint8_t code;
+      float   a0;
+      float   a1;
+      uint8_t pad0;
+      float   a2;
+      float   a3;
+      uint8_t pad1;
+      float   a4;
+      float   a5;
+      uint8_t pad2;
+      float   a6;
+      float   a7;
+      uint8_t pad3;
+      float   a8;
+      float   a9;
+    } f;
+    struct
+    {
+      uint8_t  code;
+      uint32_t a0;
+      uint32_t a1;
+      uint8_t  pad0;
+      uint32_t a2;
+      uint32_t a3;
+      uint8_t  pad1;
+      uint32_t a4;
+      uint32_t a5;
+      uint8_t  pad2;
+      uint32_t a6;
+      uint32_t a7;
+      uint8_t  pad3;
+      uint32_t a8;
+      uint32_t a9;
+    } u32;
+    struct
+    {
+      uint8_t  code;
+      uint64_t a0;
+      uint8_t  pad0;
+      uint64_t a1;
+      uint8_t  pad1;
+      uint64_t a2;
+      uint8_t  pad2;
+      uint64_t a3;
+      uint8_t  pad3;
+      uint64_t a4;
+    } u64;
+    struct
+    {
+      uint8_t code;
+      int32_t a0;
+      int32_t a1;
+      uint8_t pad0;
+      int32_t a2;
+      int32_t a3;
+      uint8_t pad1;
+      int32_t a4;
+      int32_t a5;
+      uint8_t pad2;
+      int32_t a6;
+      int32_t a7;
+      uint8_t pad3;
+      int32_t a8;
+      int32_t a9;
+    } s32;
+    struct
+    {
+      uint8_t code;
+      int16_t a0;
+      int16_t a1;
+      int16_t a2;
+      int16_t a3;
+      uint8_t pad0;
+      int16_t a4;
+      int16_t a5;
+      int16_t a6;
+      int16_t a7;
+      uint8_t pad1;
+      int16_t a8;
+      int16_t a9;
+      int16_t a10;
+      int16_t a11;
+      uint8_t pad2;
+      int16_t a12;
+      int16_t a13;
+      int16_t a14;
+      int16_t a15;
+      uint8_t pad3;
+      int16_t a16;
+      int16_t a17;
+      int16_t a18;
+      int16_t a19;
+    } s16;
+    struct
+    {
+      uint8_t code;
+      uint16_t a0;
+      uint16_t a1;
+      uint16_t a2;
+      uint16_t a3;
+      uint8_t pad0;
+      uint16_t a4;
+      uint16_t a5;
+      uint16_t a6;
+      uint16_t a7;
+      uint8_t pad1;
+      uint16_t a8;
+      uint16_t a9;
+      uint16_t a10;
+      uint16_t a11;
+      uint8_t pad2;
+      uint16_t a12;
+      uint16_t a13;
+      uint16_t a14;
+      uint16_t a15;
+      uint8_t pad3;
+      uint16_t a16;
+      uint16_t a17;
+      uint16_t a18;
+      uint16_t a19;
+    } u16;
+    struct
+    {
+      uint8_t code;
+      uint8_t a0;
+      uint8_t a1;
+      uint8_t a2;
+      uint8_t a3;
+      uint8_t a4;
+      uint8_t a5;
+      uint8_t a6;
+      uint8_t a7;
+      uint8_t pad0;
+      uint8_t a8;
+      uint8_t a9;
+      uint8_t a10;
+      uint8_t a11;
+      uint8_t a12;
+      uint8_t a13;
+      uint8_t a14;
+      uint8_t a15;
+      uint8_t pad1;
+      uint8_t a16;
+      uint8_t a17;
+      uint8_t a18;
+      uint8_t a19;
+      uint8_t a20;
+      uint8_t a21;
+      uint8_t a22;
+      uint8_t a23;
+    } u8;
+    struct
+    {
+      uint8_t code;
+      int8_t a0;
+      int8_t a1;
+      int8_t a2;
+      int8_t a3;
+      int8_t a4;
+      int8_t a5;
+      int8_t a6;
+      int8_t a7;
+      uint8_t pad0;
+      int8_t a8;
+      int8_t a9;
+      int8_t a10;
+      int8_t a11;
+      int8_t a12;
+      int8_t a13;
+      int8_t a14;
+      int8_t a15;
+      uint8_t pad1;
+      int8_t a16;
+      int8_t a17;
+      int8_t a18;
+      int8_t a19;
+      int8_t a20;
+      int8_t a21;
+      int8_t a22;
+      int8_t a23;
+    } s8;
+  };
+  CtxEntry next_entry; // also pads size of CtxCommand slightly.
+};
+
+typedef struct _CtxBackend CtxBackend;
+void ctx_windowtitle (Ctx *ctx, const char *text);
+struct _CtxBackend
+{
+  Ctx                      *ctx;
+  void  (*process)         (Ctx *ctx, CtxCommand *entry);
+  void  (*start_frame)     (Ctx *ctx);
+  void  (*end_frame)       (Ctx *ctx);
+
+  void  (*set_windowtitle) (Ctx *ctx, const char *text);
+
+  char *(*get_event)       (Ctx *ctx, int timout_ms);
+
+  void  (*consume_events)  (Ctx *ctx);
+  void  (*get_event_fds)   (Ctx *ctx, int *fd, int *count);
+  char *(*get_clipboard)   (Ctx *ctx);
+  void  (*set_clipboard)   (Ctx *ctx, const char *text);
+  void  (*destroy)         (void *backend); /* the free pointers are abused as the differentiatior
+                                               between different backends   */
+  CtxFlags                  flags;
+  void                     *user_data; // not used by ctx core
+};
+
+typedef struct _CtxIterator CtxIterator;
+
+void
+ctx_logo (Ctx *ctx, float x, float y, float dim);
+
+/* to be freed with ctx_free */
+CtxDrawlist *
+ctx_current_path (Ctx *ctx);
+
+void
+ctx_path_extents (Ctx *ctx, float *ex1, float *ey1, float *ex2, float *ey2);
+CtxCommand *ctx_iterator_next (CtxIterator *iterator);
+void
+ctx_iterator_init (CtxIterator  *iterator,
+                   CtxDrawlist  *drawlist,  // replace with Ctx*  ?
+                   int           start_pos,
+                   int           flags);    // need exposing for font bits
+int ctx_iterator_pos (CtxIterator *iterator);
+
+void ctx_handle_events (Ctx *ctx);
+#define ctx_arg_string()  ((char*)&entry[2].data.u8[0])
+
+
+/* The above should be public API
+ */
+
+#pragma pack(pop)
+
+/* access macros for nth argument of a given type when packed into
+ * an CtxEntry pointer in current code context
+ */
+#define ctx_arg_float(no) entry[(no)>>1].data.f[(no)&1]
+#define ctx_arg_u64(no)   entry[(no)].data.u64[0]
+#define ctx_arg_u32(no)   entry[(no)>>1].data.u32[(no)&1]
+#define ctx_arg_s32(no)   entry[(no)>>1].data.s32[(no)&1]
+#define ctx_arg_u16(no)   entry[(no)>>2].data.u16[(no)&3]
+#define ctx_arg_s16(no)   entry[(no)>>2].data.s16[(no)&3]
+#define ctx_arg_u8(no)    entry[(no)>>3].data.u8[(no)&7]
+#define ctx_arg_s8(no)    entry[(no)>>3].data.s8[(no)&7]
+#define ctx_arg_string()  ((char*)&entry[2].data.u8[0])
+
+typedef enum
+{
+  CTX_GRAY           = 1,
+  CTX_RGB            = 3,
+  CTX_DRGB           = 4,
+  CTX_CMYK           = 5,
+  CTX_DCMYK          = 6,
+  CTX_LAB            = 7,
+  CTX_LCH            = 8,
+  CTX_GRAYA          = 101,
+  CTX_RGBA           = 103,
+  CTX_DRGBA          = 104,
+  CTX_CMYKA          = 105,
+  CTX_DCMYKA         = 106,
+  CTX_LABA           = 107,
+  CTX_LCHA           = 108,
+  CTX_GRAYA_A        = 201,
+  CTX_RGBA_A         = 203,
+  CTX_RGBA_A_DEVICE  = 204,
+  CTX_CMYKA_A        = 205,
+  CTX_DCMYKA_A       = 206,
+  // RGB  device and  RGB  ?
+} CtxColorModel;
+
+
+enum _CtxCursor
+{
+  CTX_CURSOR_UNSET,
+  CTX_CURSOR_NONE,
+  CTX_CURSOR_ARROW,
+  CTX_CURSOR_IBEAM,
+  CTX_CURSOR_WAIT,
+  CTX_CURSOR_HAND,
+  CTX_CURSOR_CROSSHAIR,
+  CTX_CURSOR_RESIZE_ALL,
+  CTX_CURSOR_RESIZE_N,
+  CTX_CURSOR_RESIZE_S,
+  CTX_CURSOR_RESIZE_E,
+  CTX_CURSOR_RESIZE_NE,
+  CTX_CURSOR_RESIZE_SE,
+  CTX_CURSOR_RESIZE_W,
+  CTX_CURSOR_RESIZE_NW,
+  CTX_CURSOR_RESIZE_SW,
+  CTX_CURSOR_MOVE
+};
+typedef enum _CtxCursor CtxCursor;
+
+/* to be used immediately after a ctx_listen or ctx_listen_full causing the
+ * cursor to change when hovering the listen area.
+ */
+void ctx_listen_set_cursor (Ctx      *ctx,
+                            CtxCursor cursor);
+
+/* lower level cursor setting that is independent of ctx event handling
+ */
+void         ctx_set_cursor (Ctx *ctx, CtxCursor cursor);
+CtxCursor    ctx_get_cursor (Ctx *ctx);
+void         ctx_set_render_threads   (Ctx *ctx, int n_threads);
+int          ctx_get_render_threads   (Ctx *ctx);
+
+void         ctx_set_hash_cache (Ctx *ctx, int enable_hash_cache);
+int          ctx_get_hash_cache (Ctx *ctx);
+
+
+typedef struct _CtxParser CtxParser;
+  CtxParser *ctx_parser_new (
+  Ctx       *ctx,
+  int        width,
+  int        height,
+  float      cell_width,
+  float      cell_height,
+  int        cursor_x,
+  int        cursor_y,
+  int   (*set_prop)(void *prop_data, uint32_t key, const char *data,  int len),
+  int   (*get_prop)(void *prop_Data, const char *key, char **data, int *len),
+  void  *prop_data,
+  void (*exit) (void *exit_data),
+  void *exit_data);
+
+
+enum _CtxColorSpace
+{
+  CTX_COLOR_SPACE_DEVICE_RGB,
+  CTX_COLOR_SPACE_DEVICE_CMYK,
+  CTX_COLOR_SPACE_USER_RGB,
+  CTX_COLOR_SPACE_USER_CMYK,
+  CTX_COLOR_SPACE_TEXTURE
+};
+typedef enum _CtxColorSpace CtxColorSpace;
+
+
+/* sets the color space for a slot, the space is either a string of
+ * "sRGB" "rec2020" .. etc or an icc profile.
+ *
+ * The slots device_rgb and device_cmyk is mostly to be handled outside drawing 
+ * code, and user_rgb and user_cmyk is to be used. With no user_cmyk set
+ * user_cmyk == device_cmyk.
+ *
+ * The set profiles follows the graphics state.
+ */
+void ctx_colorspace (Ctx           *ctx,
+                     CtxColorSpace  space_slot,
+                     unsigned char *data,
+                     int            data_length);
+
+
+
+
+void
+ctx_parser_set_size (CtxParser *parser,
+                     int        width,
+                     int        height,
+                     float      cell_width,
+                     float      cell_height);
+
+void ctx_parser_feed_bytes (CtxParser *parser, const char *data, int count);
+
+int
+ctx_get_contents (const char     *path,
+                   unsigned char **contents,
+                   long           *length);
+int
+ctx_get_contents2 (const char     *path,
+                   unsigned char **contents,
+                   long           *length,
+                   long            max_len);
+
+void ctx_parser_destroy (CtxParser *parser);
+typedef struct _CtxSHA1 CtxSHA1;
+
+void
+ctx_bin2base64 (const void *bin,
+                size_t      bin_length,
+                char       *ascii);
+int
+ctx_base642bin (const char    *ascii,
+                int           *length,
+                unsigned char *bin);
+
+
+struct
+  _CtxMatrix
+{
+  float m[3][3];
+};
+
+void ctx_apply_matrix (Ctx *ctx, CtxMatrix *matrix);
+void ctx_matrix_apply_transform (const CtxMatrix *m, float *x, float *y);
+void ctx_matrix_apply_transform_distance (const CtxMatrix *m, float *x, float *y);
+void ctx_matrix_invert (CtxMatrix *m);
+void ctx_matrix_identity (CtxMatrix *matrix);
+void ctx_matrix_scale (CtxMatrix *matrix, float x, float y);
+void ctx_matrix_rotate (CtxMatrix *matrix, float angle);
+void ctx_matrix_translate (CtxMatrix *matrix, float x, float y);
+void ctx_matrix_multiply (CtxMatrix       *result,
+                          const CtxMatrix *t,
+                          const CtxMatrix *s);
+
+
+/* we already have the start of the file available which disambiguates some
+ * of our important supported formats, give preference to magic, then extension
+ * then text plain vs binary.
+ */
+const char *ctx_guess_media_type (const char *path, const char *content, int len);
+
+/* get media-type, with preference towards using extension of path and
+ * not reading the data at all.
+ */
+const char *ctx_path_get_media_type (const char *path);
+
+typedef enum {
+  CTX_MEDIA_TYPE_NONE=0,
+  CTX_MEDIA_TYPE_TEXT,
+  CTX_MEDIA_TYPE_IMAGE,
+  CTX_MEDIA_TYPE_VIDEO,
+  CTX_MEDIA_TYPE_AUDIO,
+  CTX_MEDIA_TYPE_INODE,
+  CTX_MEDIA_TYPE_APPLICATION,
+} CtxMediaTypeClass;
+
+int ctx_media_type_is_text (const char *media_type);
+CtxMediaTypeClass ctx_media_type_class (const char *media_type);
+
+
+float ctx_term_get_cell_width (Ctx *ctx);
+float ctx_term_get_cell_height (Ctx *ctx);
+
+Ctx * ctx_new_pdf (const char *path, float width, float height);
+void ctx_render_pdf (Ctx *ctx, const char *path);
+
+#ifndef CTX_CODEC_CHAR
+//#define CTX_CODEC_CHAR '\035'
+//#define CTX_CODEC_CHAR 'a'
+#define CTX_CODEC_CHAR '\020' // datalink escape
+//#define CTX_CODEC_CHAR '^'
+#endif
+
+#ifndef assert
+#define assert(a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#ifndef __CTX_H__
+#define __CTX_H__
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+#endif
+
+#ifndef CTX_STRING_H
+#define CTX_STRING_H
+
+typedef struct _CtxString CtxString;
+struct _CtxString
+{
+  char *str;
+  int   length;
+  int   utf8_length;
+  int   allocated_length;
+  int   is_line;
+};
+
+CtxString   *ctx_string_new_with_size  (const char *initial, int initial_size);
+CtxString   *ctx_string_new            (const char *initial);
+CtxString   *ctx_string_new_printf (const char *format, ...);
+char       *ctx_string_dissolve       (CtxString *string);
+void        ctx_string_free           (CtxString *string, int freealloc);
+const char *ctx_string_get            (CtxString *string);
+uint32_t    ctx_string_get_unichar    (CtxString *string, int pos);
+int         ctx_string_get_length     (CtxString *string);
+int         ctx_string_get_utf8length (CtxString *string);
+void        ctx_string_set            (CtxString *string, const char *new_string);
+void        ctx_string_clear          (CtxString *string);
+void        ctx_string_append_str     (CtxString *string, const char *str);
+void        ctx_string_append_byte    (CtxString *string, char  val);
+void        ctx_string_append_string  (CtxString *string, CtxString *string2);
+void        ctx_string_append_unichar (CtxString *string, unsigned int unichar);
+void        ctx_string_append_data    (CtxString *string, const char *data, int len);
+
+void        ctx_string_pre_alloc       (CtxString *string, int size);
+void        ctx_string_append_utf8char (CtxString *string, const char *str);
+void        ctx_string_append_printf  (CtxString *string, const char *format, ...);
+void        ctx_string_replace_utf8   (CtxString *string, int pos, const char *new_glyph);
+void        ctx_string_insert_utf8    (CtxString *string, int pos, const char *new_glyph);
+
+void        ctx_string_insert_unichar (CtxString *string, int pos, uint32_t unichar);
+void        ctx_string_replace_unichar (CtxString *string, int pos, uint32_t unichar);
+void        ctx_string_remove         (CtxString *string, int pos);
+char       *ctx_strdup_printf         (const char *format, ...);
+void        ctx_string_append_int     (CtxString *string, int val);
+void        ctx_string_append_float   (CtxString *string, float val);
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#endif
+#ifndef _CTX_INTERNAL_FONT_
+#define _CTX_INTERNAL_FONT_
+
+#ifndef CTX_FONT_ascii
+/* glyph index: 
+ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
+  jklmnopqrstuvwxyz{|}~  */
+static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
+ctx_font_ascii[]={
+{15, 0x0000a008, 0x000007a7},/* length:1959 CTX_SUBDIV:8 CTX_BAKE_FONT_SIZE:160 */
+{'(', 0x00000008, 0x00000001},/* Roboto*/
+{32, 0x6f626f52, 0x00006f74},
+{')', 0x00000008, 0x00000001},
+{'(', 0x0000004b, 0x00000009},/* Apache Licence, Version 2.0
+                                Copyright 2014 Christian Robertson - Apache 2*/
+{32, 0x63617041, 0x4c206568},
+{'i', 0x636e6563, 0x56202c65},
+{'e', 0x6f697372, 0x2e32206e},
+{'0', 0x706f430a, 0x67697279},
+{'h', 0x30322074, 0x43203431},
+{'h', 0x74736972, 0x206e6169},
+{'R', 0x7265626f, 0x6e6f7374},
+{32, 0x7041202d, 0x65686361},
+{32, 0x00000032, 0x00000000},
+{')', 0x0000004b, 0x00000009},
+{'@', 0x00000020, 0x000021dd},/*                 x-advance: 33.863281 */
+{'@', 0x00000021, 0x00002333},/*        !        x-advance: 35.199219 */
+{'M', 0x41c08889, 0xc2c22223},
+{'l', 0xbf5ddde0, 0x428b5556},
+{'4', 0x0000ffa7, 0xfdd3fff9},
+{'6', 0x00000067, 0x02d6ff96},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x00000022, 0x00002bbb},/*        "        x-advance: 43.730469 */
+{'M', 0x41944445, 0xc2baaaab},
+{'l', 0xc0000000, 0x41be6664},
+{'l', 0xc0ecccce, 0x00000000},
+{'4', 0xfefa0000, 0x0000004b},
+{'6', 0x00480000, 0x00000090},
+{'l', 0xc0000000, 0x41be6664},
+{'l', 0xc0ecccd0, 0x00000000},
+{'l', 0x00000000, 0xc2037778},
+{'l', 0x41166668, 0x00000000},
+{'l', 0x00000000, 0x41111118},
+{'[', 0x00770022, 0x000000bb},/*kerning*/
+{'@', 0x00000023, 0x00005411},/*        #        x-advance: 84.066406 */
+{'M', 0x4236eef0, 0x00000000},
+{'l', 0x40aaaaa8, 0xc1daaaab},
+{'l', 0xc18cccce, 0x00000000},
+{'l', 0xc0aaaaa8, 0x41daaaab},
+{'l', 0xc118888a, 0x00000000},
+{'l', 0x40aaaaac, 0xc1daaaab},
+{'l', 0xc1800000, 0x00000000},
+{'l', 0xb5000000, 0xc1133336},
+{'l', 0x418e6667, 0x00000000},
+{'l', 0x40911110, 0xc1bc4444},
+{'l', 0xc18a2222, 0x00000000},
+{'l', 0xb5800000, 0xc1144444},
+{'l', 0x4198888a, 0x00000000},
+{'l', 0x40acccc8, 0xc1dddde0},
+{'l', 0x4119999c, 0x00000000},
+{'l', 0xc0acccd0, 0x41dddde0},
+{'l', 0x418cccce, 0x00000000},
+{'l', 0x40acccd0, 0xc1dddde0},
+{'l', 0x41188888, 0x00000000},
+{'l', 0xc0acccd0, 0x41dddde0},
+{'l', 0x41588888, 0x00000000},
+{'l', 0x00000000, 0x41144444},
+{'l', 0xc1755558, 0x00000000},
+{'l', 0xc0933330, 0x41bc4444},
+{'l', 0x416eeef0, 0x00000000},
+{'l', 0x00000000, 0x41133336},
+{'4', 0x0000ff7b, 0x00daffd6},
+{'6', 0x0000ffb4, 0xfedcffad},
+{'l', 0x418ccccc, 0x00000000},
+{'l', 0x40933338, 0xc1bc4444},
+{'l', 0xc18cccce, 0x00000000},
+{'l', 0xc0933330, 0x41bc4444},
+{'@', 0x00000024, 0x00004cbb},/*        $        x-advance: 76.730469 */
+{'M', 0x428aeeef, 0xc1c91112},
+{'q', 0x00000000, 0x4139999b},
+{0, 0xc0dffff8, 0x4192aaac},
+{'9', 0x0035ffc9, 0x003fff6b},
+{'4', 0x00650000, 0x0000ffb1},
+{'l', 0x00000000, 0xc14aaaac},
+{'q', 0xc1244446, 0xbf888887},
+{0, 0xc1933334, 0xc0f9999a},
+{'9', 0xffcaffc0, 0xff50ffc0},
+{'l', 0x41466666, 0x00000000},
+{'q', 0x00000000, 0x41344446},
+{0, 0x40c00004, 0x41744446},
+{'8', 0x1f641f30, 0xdf6e0047},
+{'8', 0xa527de27, 0xadddd000},
+{'q', 0xc08aaaa8, 0xc08cccd0},
+{0, 0xc1700000, 0xc0f99998},
+{'q', 0xc149999a, 0xc0800000},
+{0, 0xc19ccccd, 0xc129999c},
+{'q', 0xc0e00000, 0xc0d33330},
+{0, 0xc0e00000, 0xc1919998},
+{'q', 0x00000000, 0xc1311118},
+{0, 0x40cccccc, 0xc18f7778},
+{'9', 0xffc90033, 0xffbe008b},
+{'4', 0xff8c0000, 0x00000050},
+{'l', 0x00000000, 0x416aaaa8},
+{'q', 0x41333334, 0x3fbbbbc0},
+{0, 0x418b3334, 0x41166668},
+{'9', 0x003e0032, 0x00ac0032},
+{'l', 0xc1444448, 0x00000000},
+{'q', 0x00000000, 0xc10eeef0},
+{0, 0xc0888888, 0xc16aaaa8},
+{'8', 0xd29ed2de, 0x229d00bd},
+{'8', 0x59e122e1, 0x531f3200},
+{'q', 0x407bbbc0, 0x40822220},
+{0, 0x41844444, 0x41055554},
+{'q', 0x414aaaac, 0x40888890},
+{0, 0x4198888a, 0x412aaaac},
+{'q', 0x40ceeee8, 0x40caaab0},
+{0, 0x40ceeee8, 0x418d5556},
+{'@', 0x00000025, 0x00006400},/*        %        x-advance: 100.000000 */
+{'M', 0x40e00001, 0xc29ccccd},
+{'q', 0x00000000, 0xc1044448},
+{0, 0x40aaaaab, 0xc1622228},
+{'q', 0x40aaaaac, 0xc0bddde0},
+{0, 0x4168888a, 0xc0bddde0},
+{'q', 0x41155554, 0x00000000},
+{0, 0x41699998, 0x40bddde0},
+{'9', 0x002e002a, 0x0071002a},
+{'l', 0x00000000, 0x40a44440},
+{'q', 0x00000000, 0x41022220},
+{0, 0xc0a88888, 0x41611110},
+{'q', 0xc0a88888, 0x40bbbbc0},
+{0, 0xc168888a, 0x40bbbbc0},
+{'q', 0xc1144446, 0x00000000},
+{0, 0xc16aaaac, 0xc0bbbbc0},
+{'9', 0xffd1ffd6, 0xff90ffd6},
+{'6', 0xffd70000, 0x0029004a},
+{'8', 0x42142400, 0x1d411d15},
+{'8', 0xe43f002a, 0xbe14e314},
+{'l', 0x00000000, 0xc0a44440},
+{'8', 0xbeebdb00, 0xe3c0e3ec},
+{'8', 0x1dc000d6, 0x42ec1dec},
+{'6', 0x00290000, 0xffb001e7},
+{'l', 0xc23d999a, 0x4297bbbc},
+{'4', 0xffddffc9, 0xfda2017b},
+{'6', 0x00230037, 0x01dbff49},
+{'q', 0x00000000, 0xc1033330},
+{0, 0x40aaaaa8, 0xc1611110},
+{'q', 0x40aaaaa8, 0xc0bddde0},
+{0, 0x4168888c, 0xc0bddde0},
+{'q', 0x41155558, 0x00000000},
+{0, 0x41699998, 0x40bddde0},
+{'9', 0x002e002a, 0x0070002a},
+{'l', 0x00000000, 0x40a66668},
+{'q', 0x00000000, 0x41033333},
+{0, 0xc0a88890, 0x41622222},
+{'q', 0xc0a88880, 0x40bbbbbd},
+{0, 0xc1688888, 0x40bbbbbd},
+{'q', 0xc1155558, 0x00000000},
+{0, 0xc16aaaac, 0xc0bbbbbc},
+{'9', 0xffd1ffd6, 0xff8fffd6},
+{'6', 0xffd70000, 0x0029004a},
+{'8', 0x42142500, 0x1d411d15},
+{'8', 0xe440002b, 0xbd14e314},
+{'l', 0x00000000, 0xc0a66668},
+{'8', 0xbeebdb00, 0xe3c0e3ec},
+{'8', 0x1dc000d6, 0x42ec1cec},
+{'l', 0x00000000, 0x40a66668},
+{'@', 0x00000026, 0x000054ee},/*        &        x-advance: 84.929688 */
+{'M', 0x428b5556, 0x00000000},
+{'l', 0xc0ccccd0, 0xc0f55556},
+{'8', 0x35a323d8, 0x129512cb},
+{'q', 0xc168888a, 0xb4000000},
+{0, 0xc1b77778, 0xc0f77779},
+{'q', 0xc1066667, 0xc0f77778},
+{0, 0xc1066667, 0xc19dddde},
+{'q', 0x00000000, 0xc10aaaac},
+{0, 0x40a66668, 0xc1699998},
+{'8', 0xa26cd02a, 0xa6c0d0d8},
+{'q', 0xc03bbbbc, 0xc0a88890},
+{0, 0xc03bbbbc, 0xc1300000},
+{'q', 0x00000000, 0xc1355558},
+{0, 0x40d55556, 0xc18b3334},
+{'q', 0x40d55558, 0xc0c44440},
+{0, 0x418d5557, 0xc0c44440},
+{'q', 0x412bbbbc, 0x00000000},
+{0, 0x4186eeee, 0x40c44440},
+{'q', 0x40c66668, 0x40c22220},
+{0, 0x40c66668, 0x41655558},
+{'8', 0x5ee43800, 0x4ab426e4},
+{'4', 0x002bffc6, 0x00ce00ac},
+{'9', 0xffbb0024, 0xff660024},
+{'l', 0x41311110, 0x00000000},
+{'9', 0x00880000, 0x00e1ffbf},
+{'4', 0x0084006e, 0x0000ff8a},
+{'m', 0xc22a6668, 0xc2968889},
+{'9', 0x00310000, 0x0080003e},
+{'l', 0x40e44448, 0xc0a22220},
+{'8', 0xd233e823, 0xc311ea11},
+{'8', 0xc7e8e100, 0xe6bbe6e8},
+{'8', 0x1fba00d2, 0x49e81ee8},
+{'m', 0xc0fddddc, 0x42448889},
+{'q', 0x00000000, 0x40e22224},
+{0, 0x40955554, 0x41433334},
+{'q', 0x40955558, 0x40a44446},
+{0, 0x41655556, 0x40a44446},
+{'9', 0x0000004e, 0xffc5008f},
+{'4', 0xff1eff43, 0x0010ffea},
+{'8', 0x4dba2ac7, 0x34f423f4},
+{'@', 0x00000027, 0x000017dd},/*        '        x-advance: 23.863281 */
+{'M', 0x41877778, 0xc2ccccce},
+{'l', 0x00000000, 0x40eaaab0},
+{'l', 0xbfb33338, 0x41c44444},
+{'l', 0xc109999a, 0x00000000},
+{'l', 0x3d8888c0, 0xc1feeef0},
+{'l', 0x411eeef0, 0x00000000},
+{'[', 0x00770027, 0x000000bb},/*kerning*/
+{'@', 0x00000028, 0x00002ebb},/*        (        x-advance: 46.730469 */
+{'M', 0x410eeeef, 0xc21dddde},
+{'q', 0x00000000, 0xc19aaaac},
+{0, 0x40b11112, 0xc2073334},
+{'q', 0x40b11114, 0xc1677778},
+{0, 0x41522224, 0xc1bccccc},
+{'9', 0xffb7003c, 0xff9b006f},
+{'l', 0x40266660, 0x41022228},
+{'q', 0xc0fbbbb8, 0x40bdddd0},
+{0, 0xc1766666, 0x41a99998},
+{'q', 0xc0eeeef0, 0x41733338},
+{0, 0xc0eeeef0, 0x42262223},
+{'q', 0x00000000, 0x41caaaab},
+{0, 0x40eeeef0, 0x4222eeef},
+{'9', 0x007b003c, 0x00ae007b},
+{'l', 0xc0266660, 0x40eeeef0},
+{'q', 0xc0caaab0, 0xc05ddde0},
+{0, 0xc15eeef0, 0xc149999c},
+{'q', 0xc0f33334, 0xc1122222},
+{0, 0xc1522224, 0xc1bc4444},
+{'q', 0xc0b11112, 0xc167777a},
+{0, 0xc0b11112, 0xc20aaaab},
+{'[', 0x00560028, 0x00000155},/*kerning*/
+{'[', 0x00570028, 0x00000133},/*kerning*/
+{'[', 0x00590028, 0x00000177},/*kerning*/
+{'@', 0x00000029, 0x00002f88},/*        )        x-advance: 47.531250 */
+{'M', 0x42173334, 0xc21b3334},
+{'q', 0x00000000, 0x419bbbbd},
+{0, 0xc0b11110, 0x4207bbbc},
+{'q', 0xc0b11114, 0x4167777a},
+{0, 0xc1533336, 0x41bcccce},
+{'9', 0x0049ffc4, 0x0064ff92},
+{'l', 0xc0266669, 0xc0eeeef0},
+{'q', 0x40f9999a, 0xc0bddde0},
+{0, 0x41755556, 0xc1ac4445},
+{'q', 0x40f11110, 0xc179999b},
+{0, 0x40f11110, 0xc227bbbc},
+{'q', 0x00000000, 0xc186eef2},
+{0, 0xc06eeef0, 0xc1eb3334},
+{'q', 0xc06eeef0, 0xc14999a0},
+{0, 0xc1111111, 0xc1a6eef0},
+{'9', 0xffbeffd6, 0xff9fffb0},
+{'l', 0x40266666, 0xc0f11110},
+{'q', 0x40c88889, 0x40622220},
+{0, 0x415dddde, 0x414aaab0},
+{'q', 0x40f55558, 0x41122220},
+{0, 0x41533336, 0x41bccccc},
+{'q', 0x40b11110, 0x41666668},
+{0, 0x40b11110, 0x4209ddde},
+{'@', 0x0000002a, 0x00003acc},/*        *        x-advance: 58.796875 */
+{'M', 0x4109999a, 0xc23ccccd},
+{'l', 0x41566668, 0xc1933336},
+{'l', 0xc1a11112, 0xc0c00000},
+{'l', 0x4048888a, 0xc1200000},
+{'l', 0x41a11112, 0x40ecccd0},
+{'l', 0xbf1999a0, 0xc1b77778},
+{'l', 0x41222222, 0x00000000},
+{'l', 0xbf2aaac0, 0x41baaaac},
+{'l', 0x419eeef0, 0xc0ecccd0},
+{'l', 0x40444450, 0x41233338},
+{'l', 0xc1a3bbbe, 0x40c22220},
+{'l', 0x41522224, 0x41908888},
+{'l', 0xc1044444, 0x40c66668},
+{'l', 0xc1455556, 0xc199999a},
+{'l', 0xc1411112, 0x4195ddde},
+{'l', 0xc1055556, 0xc0c22220},
+{'@', 0x0000002b, 0x00004d77},/*        +        x-advance: 77.464844 */
+{'M', 0x428f7778, 0xc221ddde},
+{'l', 0xc1d8888a, 0x00000000},
+{'l', 0x00000000, 0x41f5ddde},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc1f5ddde},
+{'l', 0xc1d91112, 0x00000000},
+{'l', 0xb5000000, 0xc139999c},
+{'l', 0x41d91112, 0x00000000},
+{'l', 0x00000000, 0xc1e2aaaa},
+{'l', 0x41455554, 0x00000000},
+{'l', 0x00000000, 0x41e2aaaa},
+{'l', 0x41d8888a, 0x00000000},
+{'l', 0x00000000, 0x4139999c},
+{'@', 0x0000002c, 0x00001add},/*        ,        x-advance: 26.863281 */
+{'M', 0x41a4cccd, 0xc16aaaab},
+{'l', 0x00000000, 0x411eeeef},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e00000, 0xc09bbbbe},
+{'9', 0xffb90033, 0xff6e0034},
+{'l', 0x00000000, 0xc12eeef0},
+{'l', 0x41411111, 0x00000000},
+{'@', 0x0000002d, 0x000025bb},/*        -        x-advance: 37.730469 */
+{'M', 0x420c4445, 0xc2395556},
+{'l', 0x00000000, 0x41222224},
+{'l', 0xc2022223, 0x00000000},
+{'l', 0x35400000, 0xc1222224},
+{'l', 0x42022223, 0x00000000},
+{'@', 0x0000002e, 0x00002400},/*        .        x-advance: 36.000000 */
+{'M', 0x4119999a, 0xc0d11112},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x0000002f, 0x00003855},/*        /        x-advance: 56.332031 */
+{'M', 0x42515556, 0xc2c22223},
+{'l', 0xc221ddde, 0x42d2ccce},
+{'l', 0xc129999c, 0xb6000000},
+{'l', 0x42222223, 0xc2d2ccce},
+{'l', 0x41288888, 0x00000000},
+{'@', 0x00000030, 0x00004cbb},/*        0        x-advance: 76.730469 */
+{'M', 0x428a0000, 0xc225ddde},
+{'q', 0x00000000, 0x41beeeef},
+{0, 0xc1044440, 0x42055555},
+{'q', 0xc1033334, 0x41177779},
+{0, 0xc1b2aaac, 0x41177779},
+{'q', 0xc15bbbbc, 0x34c00000},
+{0, 0xc1b11111, 0xc1133334},
+{'9', 0xffb7ffbe, 0xff00ffbc},
+{'l', 0x00000000, 0xc182aaac},
+{'q', 0x00000000, 0xc1be6668},
+{0, 0x41055555, 0xc203bbbc},
+{'q', 0x41055556, 0xc1133330},
+{0, 0x41b22224, 0xc1133330},
+{'q', 0x415eeef0, 0x00000000},
+{0, 0x41b1999a, 0x410eeee8},
+{'9', 0x00460042, 0x00fd0044},
+{'6', 0x00820000, 0xff7aff9d},
+{'q', 0x00000000, 0xc1833334},
+{0, 0xc0955558, 0xc1b9999c},
+{'8', 0xca93cadb, 0x349500bb},
+{'9', 0x0034ffdb, 0x00b3ffda},
+{'l', 0x00000000, 0x419e6668},
+{'q', 0x00000000, 0x41822222},
+{0, 0x40977778, 0x41bbbbbc},
+{'8', 0x396c3926, 0xc86c0048},
+{'q', 0x40933338, 0xc0e44446},
+{0, 0x40955558, 0xc1b88888},
+{'l', 0x00000000, 0xc19b3334},
+{'@', 0x00000031, 0x00004cbb},/*        1        x-advance: 76.730469 */
+{'M', 0x42426667, 0xc2c33334},
+{'l', 0x00000000, 0x42c33334},
+{'l', 0xc1455554, 0x00000000},
+{'l', 0x00000000, 0xc2a46667},
+{'l', 0xc1c6eef0, 0x41111110},
+{'l', 0xb5800000, 0xc1322220},
+{'l', 0x420d1111, 0xc1555558},
+{'l', 0x3ff77780, 0x00000000},
+{'@', 0x00000032, 0x00004cbb},/*        2        x-advance: 76.730469 */
+{'M', 0x428f5556, 0xc1222223},
+{'l', 0x00000000, 0x41222223},
+{'4', 0x0000fe04, 0xffba0000},
+{'l', 0x4203bbbc, 0xc212aaac},
+{'q', 0x41022220, 0xc1133330},
+{0, 0x412eeef0, 0xc1699994},
+{'8', 0xaa16d516, 0x9fddc700},
+{'q', 0xc08cccc8, 0xc0a22220},
+{0, 0xc1477778, 0xc0a22220},
+{'q', 0xc11bbbbc, 0x00000000},
+{0, 0xc1688888, 0x40b11110},
+{'9', 0x002cffda, 0x0071ffda},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x35000000, 0xc1444440},
+{0, 0x41011112, 0xc1a88888},
+{'q', 0x41011112, 0xc10cccc8},
+{0, 0x41bccccd, 0xc10cccc8},
+{'q', 0x415bbbbc, 0x00000000},
+{0, 0x41abbbbc, 0x40e44440},
+{'q', 0x40f999a0, 0x40e44440},
+{0, 0x40f999a0, 0x41966668},
+{'q', 0x00000000, 0x41088884},
+{0, 0xc0a88888, 0x41899998},
+{'9', 0x0044ffd6, 0x0087ff99},
+{'l', 0xc1d00001, 0x41e1999a},
+{'l', 0x4242aaac, 0x35800000},
+{'@', 0x00000033, 0x00004cbb},/*        3        x-advance: 76.730469 */
+{'M', 0x41d08889, 0xc231ddde},
+{'4', 0xffaf0000, 0x00000048},
+{'q', 0x41188888, 0xbd888800},
+{0, 0x41633334, 0xc0999998},
+{'q', 0x40955558, 0xc0977780},
+{0, 0x40955558, 0xc13cccd0},
+{'q', 0x00000000, 0xc1888888},
+{0, 0xc1877778, 0xc1888888},
+{'8', 0x249b00c2, 0x60da23da},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x35000000, 0xc1322220},
+{0, 0x41033334, 0xc1977778},
+{'q', 0x41044444, 0xc0f99990},
+{0, 0x41addddf, 0xc0f99990},
+{'q', 0x41522220, 0x00000000},
+{0, 0x41a9999a, 0x40e00000},
+{'q', 0x41022220, 0x40ddddd0},
+{0, 0x41022220, 0x41a3bbbc},
+{'8', 0x5ce32b00, 0x4ca431e4},
+{'8', 0x4d69194d, 0x691c341c},
+{'q', 0x00000000, 0x4159999a},
+{0, 0xc10ccccc, 0x41a80000},
+{'q', 0xc10ccccc, 0x40eccccf},
+{0, 0xc1af7778, 0x40eccccf},
+{'q', 0xc14aaaac, 0xb4000000},
+{0, 0xc1adddde, 0xc0e00001},
+{'9', 0xffc8ffb8, 0xff60ffb8},
+{'l', 0x41455556, 0x00000000},
+{'8', 0x62273d00, 0x246c2428},
+{'8', 0xdd6b0043, 0x9427dd27},
+{'q', 0x00000000, 0xc1111112},
+{0, 0xc0b33338, 0xc1555556},
+{'q', 0xc0b33330, 0xc08aaaa8},
+{0, 0xc1700000, 0xc08aaaa8},
+{'l', 0xc10cccce, 0x00000000},
+{'@', 0x00000034, 0x00004cbb},/*        4        x-advance: 76.730469 */
+{'M', 0x40622223, 0xc1ee6667},
+{'l', 0x422ddddf, 0xc2868889},
+{'l', 0x41522220, 0x00000000},
+{'l', 0x00000000, 0x4280ccce},
+{'l', 0x4158888c, 0xb6800000},
+{'l', 0x00000000, 0x41222222},
+{'l', 0xc158888c, 0x00000000},
+{'l', 0x00000000, 0x41b44445},
+{'l', 0xc1455554, 0x00000000},
+{'4', 0xff4c0000, 0x0000fe9e},
+{'6', 0xffc60000, 0xffea0070},
+{'l', 0x41f22223, 0x00000000},
+{'l', 0x00000000, 0xc23eaaab},
+{'l', 0xbfc44440, 0x402eeee0},
+{'l', 0xc1e5dddf, 0x4233bbbd},
+{'@', 0x00000035, 0x00004cbb},/*        5        x-advance: 76.730469 */
+{'M', 0x41bd5556, 0xc238cccd},
+{'l', 0xc11dddde, 0xc0222230},
+{'l', 0x409bbbbc, 0xc2415556},
+{'l', 0x42473333, 0x00000000},
+{'4', 0x005b0000, 0x0000fec6},
+{'l', 0xc03bbbc0, 0x41d33334},
+{'q', 0x40eaaab0, 0xc0866668},
+{0, 0x4181999a, 0xc0866668},
+{'q', 0x41566668, 0x00000000},
+{0, 0x41a91112, 0x410ddde0},
+{'q', 0x40f99998, 0x410ccccc},
+{0, 0x40f99998, 0x41bd5556},
+{'q', 0x00000000, 0x415eeef0},
+{0, 0xc0f33330, 0x41b91112},
+{'q', 0xc0f33338, 0x41122221},
+{0, 0xc1b91112, 0x41122221},
+{'q', 0xc13cccce, 0x34c00000},
+{0, 0xc1a33334, 0xc0d33333},
+{'9', 0xffcbffbc, 0xff5effb1},
+{'l', 0x413bbbbd, 0x00000000},
+{'q', 0x40155550, 0x4185ddde},
+{0, 0x4194cccd, 0x4185ddde},
+{'q', 0x410bbbbc, 0x35800000},
+{0, 0x41588888, 0xc0bdddde},
+{'q', 0x409999a0, 0xc0bdddde},
+{0, 0x409999a0, 0xc1808888},
+{'q', 0x00000000, 0xc1122224},
+{0, 0xc0a22228, 0xc1755558},
+{'q', 0xc0a00000, 0xc0c88888},
+{0, 0xc1655554, 0xc0c88888},
+{'8', 0x0db500cf, 0x24cd0de7},
+{'@', 0x00000036, 0x00004cbb},/*        6        x-advance: 76.730469 */
+{'M', 0x428c6667, 0xc1fd5556},
+{'q', 0x00000000, 0x415cccce},
+{0, 0xc0f77778, 0x41bb3334},
+{'q', 0xc0f55558, 0x41199999},
+{0, 0xc1b33334, 0x41199999},
+{'q', 0xc1277778, 0x34c00000},
+{0, 0xc18b3334, 0xc0b11111},
+{'q', 0xc0ddddde, 0xc0b33333},
+{0, 0xc1266667, 0xc1622222},
+{'9', 0xffbcffe5, 0xff74ffe5},
+{'l', 0x00000000, 0xc0b999a0},
+{'q', 0x00000000, 0xc15aaaa8},
+{0, 0x40733334, 0xc1d33334},
+{'q', 0x4077777c, 0xc14bbbb8},
+{0, 0x415eeef1, 0xc1a6eef0},
+{'9', 0xffbf0050, 0xffbf00e6},
+{'4', 0x00000008, 0x00530000},
+{'q', 0xc14eeef0, 0x00000000},
+{0, 0xc1a11112, 0x40911110},
+{'q', 0xc0e44448, 0x40911110},
+{0, 0xc12aaaac, 0x413cccd0},
+{'q', 0xc05ddde0, 0x40e66660},
+{0, 0xc0866668, 0x41777778},
+{'q', 0x40f77778, 0xc10bbbc0},
+{0, 0x41a6eef0, 0xc10bbbc0},
+{'q', 0x411aaaac, 0x00000000},
+{0, 0x417ccccc, 0x40955558},
+{'q', 0x40c66668, 0x40955558},
+{0, 0x41122224, 0x41411114},
+{'9', 0x003a0017, 0x007a0017},
+{'m', 0xc243bbbc, 0xc0777780},
+{'q', 0xb6000000, 0x414eeef2},
+{0, 0x40b77774, 0x419e6668},
+{'8', 0x3668362e, 0xcf690044},
+{'q', 0x40977778, 0xc0c88888},
+{0, 0x40977778, 0xc1800000},
+{'q', 0x00000000, 0xc10aaaaa},
+{0, 0xc08aaab0, 0xc178888a},
+{'8', 0xca96cade, 0x1ea300cd},
+{'q', 0xc0a8888c, 0x40777770},
+{0, 0xc0eaaaac, 0x41166668},
+{'l', 0x00000000, 0x40955550},
+{'@', 0x00000037, 0x00004cbb},/*        7        x-advance: 76.730469 */
+{'M', 0x428d999a, 0xc2c22223},
+{'l', 0x00000000, 0x40dddde0},
+{'l', 0xc220cccd, 0x42b44445},
+{'l', 0xc1500002, 0x00000000},
+{'l', 0x4220888a, 0xc2adddde},
+{'l', 0xc2522223, 0x00000000},
+{'l', 0xb5000000, 0xc1222228},
+{'l', 0x42833334, 0x00000000},
+{'@', 0x00000038, 0x00004cbb},/*        8        x-advance: 76.730469 */
+{'M', 0x428a8889, 0xc1d22223},
+{'q', 0x00000000, 0x41555556},
+{0, 0xc10eeef0, 0x41a3bbbc},
+{'q', 0xc10ddddc, 0x40e44447},
+{0, 0xc1af7778, 0x40e44447},
+{'q', 0xc1511112, 0xb4000000},
+{0, 0xc1b00000, 0xc0e44445},
+{'q', 0xc10ddddf, 0xc0e44446},
+{0, 0xc10ddddf, 0xc1a3bbbc},
+{'q', 0x00000000, 0xc1022224},
+{0, 0x408aaaac, 0xc1655558},
+{'8', 0xb55ece23, 0xbaaee7cd},
+{'q', 0xc06eeef0, 0xc0b77778},
+{0, 0xc06eeef0, 0xc14ddddc},
+{'q', 0x00000000, 0xc14bbbc0},
+{0, 0x41011112, 0xc19d5558},
+{'q', 0x41022222, 0xc0ddddd0},
+{0, 0x41a44445, 0xc0ddddd0},
+{'q', 0x41477778, 0x00000000},
+{0, 0x41a44444, 0x40ddddd0},
+{'q', 0x41022220, 0x40dddde0},
+{0, 0x41022220, 0x419d5558},
+{'8', 0x67e23900, 0x46ae2de2},
+{'q', 0x40f11110, 0x404cccd0},
+{0, 0x41400000, 0x41177778},
+{'9', 0x00320023, 0x00720023},
+{'m', 0xc169999c, 0xc2355556},
+{'8', 0xa1dcc600, 0xdba2dbdc},
+{'8', 0x24a300c6, 0x61dd23dd},
+{'8', 0x60233c00, 0x245e2423},
+{'8', 0xdc5d003a, 0xa024dc24},
+{'m', 0x400cccd0, 0x42344446},
+{'8', 0x96d7bf00, 0xd795d7d7},
+{'8', 0x299500bd, 0x6ad929d9},
+{'8', 0x68274300, 0x256c2528},
+{'8', 0xdb6c0044, 0x9827db27},
+{'@', 0x00000039, 0x00004cbb},/*        9        x-advance: 76.730469 */
+{'M', 0x42877778, 0xc25aaaab},
+{'q', 0x00000000, 0x41177778},
+{0, 0xbfd55540, 0x41991110},
+{'q', 0xbfcccd00, 0x4119999c},
+{0, 0xc0caaab0, 0x418ddddf},
+{'q', 0xc0955558, 0x41011112},
+{0, 0xc15ddde0, 0x41500001},
+{'9', 0x0027ffb7, 0x0027ff34},
+{'l', 0x00000000, 0xc1277778},
+{'q', 0x416bbbbe, 0x00000000},
+{0, 0x41aeeeef, 0xc0933334},
+{'q', 0x40e66668, 0xc0933334},
+{0, 0x41200004, 0xc1400000},
+{'q', 0x40377770, 0xc0eeeef0},
+{0, 0x404cccc0, 0xc17ddde0},
+{'8', 0x3bb624e2, 0x16a316d5},
+{'q', 0xc119999a, 0x00000000},
+{0, 0xc17bbbbc, 0xc09999a0},
+{'q', 0xc0c44446, 0xc0999998},
+{0, 0xc1111112, 0xc1433334},
+{'q', 0xc03bbbbc, 0xc0eeeef0},
+{0, 0xc03bbbbc, 0xc1766664},
+{'q', 0x00000000, 0xc15ddde0},
+{0, 0x40f33334, 0xc1bd5558},
+{'q', 0x40f55556, 0xc11dddd8},
+{0, 0x41b44446, 0xc11dddd8},
+{'q', 0x41311110, 0x00000000},
+{0, 0x418eeeee, 0x40b77770},
+{'q', 0x40dbbbc0, 0x40b77780},
+{0, 0x411eeef4, 0x416bbbc0},
+{'9', 0x00480019, 0x00960019},
+{'6', 0x00230000, 0xffaafe79},
+{'q', 0xb6000000, 0x410aaab0},
+{0, 0x408aaaa8, 0x417bbbc0},
+{'8', 0x386a3823, 0xe25b0032},
+{'9', 0xffe20029, 0xffb5003c},
+{'l', 0x00000000, 0xc09bbbc0},
+{'q', 0x00000000, 0xc1544448},
+{0, 0xc0b55558, 0xc1a2aaac},
+{'8', 0xc898c8d4, 0x349600bc},
+{'q', 0xc0955554, 0x40ceeef0},
+{0, 0xc0955554, 0x41811110},
+{'@', 0x0000003a, 0x00002111},/*        :        x-advance: 33.066406 */
+{'M', 0x410dddde, 0xc0d11112},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x3d888880, 0xc26b7778},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'@', 0x0000003b, 0x00001cdd},/*        ;        x-advance: 28.863281 */
+{'M', 0x40eaaaab, 0xc282cccd},
+{'8', 0xd60fe700, 0xef2def10},
+{'8', 0x112d001d, 0x2a101110},
+{'8', 0x29f01800, 0x11d311f1},
+{'8', 0xefd300e3, 0xd7f1eff1},
+{'m', 0x41611112, 0x424aeeef},
+{'l', 0x00000000, 0x411eeef0},
+{'8', 0x66e83000, 0x5abc35e8},
+{'l', 0xc0e00000, 0xc09bbbbe},
+{'9', 0xffb90033, 0xff6e0034},
+{'l', 0x00000000, 0xc12eeef0},
+{'l', 0x41411112, 0x00000000},
+{'@', 0x0000003c, 0x00004566},/*        <        x-advance: 69.398438 */
+{'M', 0x426d5556, 0xc1511112},
+{'l', 0xc25a2223, 0xc1ca2223},
+{'l', 0x35800000, 0xc11aaaac},
+{'l', 0x425a2223, 0xc1c9999a},
+{'l', 0x00000000, 0x41511114},
+{'l', 0xc2266667, 0x41891110},
+{'l', 0x42266667, 0x4186eef0},
+{'l', 0x00000000, 0x41511112},
+{'@', 0x0000003d, 0x00004aee},/*        =        x-advance: 74.929688 */
+{'M', 0x42837778, 0xc2820000},
+{'l', 0x00000000, 0x412bbbb8},
+{'4', 0x0000fe44, 0xffab0000},
+{'6', 0x000001bc, 0x00dd0000},
+{'l', 0x00000000, 0x412bbbbc},
+{'l', 0xc25e6667, 0x00000000},
+{'l', 0xb5800000, 0xc12bbbbc},
+{'l', 0x425e6667, 0x00000000},
+{'@', 0x0000003e, 0x00004766},/*        >        x-advance: 71.398438 */
+{'M', 0x41100000, 0xc292aaab},
+{'l', 0x4263bbbc, 0x41c9999a},
+{'l', 0x00000000, 0x411bbbbc},
+{'l', 0xc263bbbc, 0x41ca2222},
+{'l', 0x00000000, 0xc14bbbbc},
+{'l', 0x42308889, 0xc18c4444},
+{'l', 0xc2308889, 0xc189999a},
+{'l', 0x00000000, 0xc14bbbbc},
+{'@', 0x0000003f, 0x00004088},/*        ?        x-advance: 64.531250 */
+{'M', 0x4210cccd, 0xc1daaaab},
+{'l', 0xc1466666, 0x00000000},
+{'q', 0x3d888900, 0xc11aaaae},
+{0, 0x402aaaa8, 0xc167777a},
+{'8', 0xa646da14, 0xbb3fdc23},
+{'8', 0xa91bdf1b, 0xaae3ca00},
+{'8', 0xe0ace0e3, 0x19ad00d2},
+{'9', 0x0019ffdc, 0x0050ffdb},
+{'l', 0xc1455556, 0x00000000},
+{'q', 0x3e0888a0, 0xc1344448},
+{0, 0x41000001, 0xc18d5558},
+{'q', 0x40fdddde, 0xc0ccccc0},
+{0, 0x419bbbbc, 0xc0ccccc0},
+{'q', 0x414bbbbc, 0x00000000},
+{0, 0x419d5556, 0x40d99990},
+{'q', 0x40e00000, 0x40d999a0},
+{0, 0x40e00000, 0x41944444},
+{'q', 0x00000000, 0x410eeef0},
+{0, 0xc0a88888, 0x4180888a},
+{'q', 0xc0a88888, 0x40e22228},
+{0, 0xc1377778, 0x414cccd0},
+{'9', 0x002dffcf, 0x0086ffcf},
+{'m', 0xc14eeeee, 0x41a91111},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'@', 0x00000040, 0x00007a99},/*        @        x-advance: 122.597656 */
+{'M', 0x42a8aaab, 0x41c22223},
+{'8', 0x23a318db, 0x0b970bc9},
+{'q', 0xc1caaaac, 0x00000000},
+{0, 0xc21cccce, 0xc1855556},
+{'q', 0xc15ccccb, 0xc185ddde},
+{0, 0xc1499998, 0xc235999a},
+{'q', 0x3f4cccd0, 0xc1922222},
+{0, 0x40fddde0, 0xc2026666},
+{'q', 0x40e66668, 0xc1666668},
+{0, 0x419d5556, 0xc1b55558},
+{'q', 0x41488888, 0xc1044440},
+{0, 0x41ea2224, 0xc1044440},
+{'q', 0x41cd5554, 0x00000000},
+{0, 0x421bbbbc, 0x4185dddc},
+{'q', 0x41555558, 0x4185ddde},
+{0, 0x41433330, 0x42348889},
+{'q', 0xbeaaaa00, 0x41033336},
+{0, 0xc0488880, 0x41822223},
+{'q', 0xc02eef00, 0x41011112},
+{0, 0xc10aaaa8, 0x41566668},
+{'q', 0xc0bbbbc0, 0x40a88889},
+{0, 0xc1777778, 0x40a88889},
+{'q', 0xc1488890, 0x00000000},
+{0, 0xc1800004, 0xc1355556},
+{'q', 0xc0e66660, 0x41355556},
+{0, 0xc18eeeee, 0x41355556},
+{'q', 0xc11ccccc, 0x35000000},
+{0, 0xc1677778, 0xc1011111},
+{'q', 0xc0955558, 0xc1011112},
+{0, 0xc05ddde0, 0xc1a9999a},
+{'q', 0x3fc44440, 0xc18c4444},
+{0, 0x41200000, 0xc1de6666},
+{'q', 0x4108888c, 0xc1255554},
+{0, 0x4196eef2, 0xc1255554},
+{'8', 0x115a0039, 0x273e1021},
+{'l', 0xc05999a0, 0x4213bbbc},
+{'8', 0x64114dfa, 0x16321618},
+{'q', 0x41011118, 0x00000000},
+{0, 0x41466668, 0xc0fbbbbc},
+{'q', 0x408cccd0, 0xc0fbbbbe},
+{0, 0x409bbbc0, 0xc1991112},
+{'q', 0x3f911100, 0xc1c6eeee},
+{0, 0xc1144448, 0xc21c0001},
+{'q', 0xc1255550, 0xc1622220},
+{0, 0xc2062222, 0xc1622220},
+{'q', 0xc1a80000, 0x00000000},
+{0, 0xc205ddde, 0x41733338},
+{'q', 0xc1477778, 0x41733330},
+{0, 0xc1577778, 0x421e6666},
+{'q', 0xbf9999a0, 0x41c77778},
+{0, 0x411eeeee, 0x421d5556},
+{'q', 0x41333336, 0x41666668},
+{0, 0x4201ddde, 0x41666668},
+{'8', 0xf55e002e, 0xe251f530},
+{'6', 0x003c0014, 0xfe5ffed8},
+{'q', 0xbf5dde00, 0x4116666a},
+{0, 0x3fe66660, 0x4168888c},
+{'8', 0x29442915, 0xe83a001b},
+{'9', 0xffe8001e, 0xffaf0034},
+{'4', 0xfffc0000, 0xfef50018},
+{'8', 0xf1c0f1e3, 0x3b9b00c6},
+{'q', 0xc0aaaaa8, 0x40eeeef0},
+{0, 0xc0d55550, 0x41b08888},
+{'@', 0x00000041, 0x00005911},/*        A        x-advance: 89.066406 */
+{'M', 0x3ff77778, 0x00000000},
+{'l', 0x42140000, 0xc2c22223},
+{'l', 0x41344444, 0x00000000},
+{'l', 0x42148889, 0x42c22223},
+{'l', 0xc1533330, 0x00000000},
+{'l', 0xc1144448, 0xc1cb3334},
+{'4', 0x0000febc, 0x00cbffb7},
+{'6', 0x0000ff97, 0xfee100d1},
+{'l', 0x4203bbbc, 0x00000000},
+{'l', 0xc183bbbc, 0xc2351112},
+{'l', 0xc183bbbc, 0x42351112},
+{'[', 0x007a0041, 0x000000cc},/*kerning*/
+{'@', 0x00000042, 0x00005511},/*        B        x-advance: 85.066406 */
+{'M', 0x429aaaab, 0xc1e00001},
+{'q', 0x00000000, 0x4159999b},
+{0, 0xc10cccc8, 0x41a66667},
+{'9', 0x0039ffbb, 0x0039ff46},
+{'4', 0x0000fef0, 0xfcf80000},
+{'l', 0x41fe6668, 0x00000000},
+{'q', 0x416eeef0, 0x00000000},
+{0, 0x41ba2222, 0x40c66670},
+{'q', 0x41066668, 0x40c44440},
+{0, 0x41066668, 0x419d5554},
+{'8', 0x60e23500, 0x40ad29e2},
+{'q', 0x41033338, 0x40111110},
+{0, 0x41488888, 0x41099998},
+{'9', 0x00320023, 0x00740023},
+{'m', 0xc254cccd, 0xc26a2224},
+{'4', 0x00f60000, 0x0000009a},
+{'8', 0xdf6a0042, 0xa528df28},
+{'9', 0xff8a0000, 0xff87ff70},
+{'6', 0x0000ff63, 0x01d50143},
+{'q', 0x00000000, 0xc1022220},
+{0, 0xc08eeef8, 0xc14ccccc},
+{'9', 0xffdbffdd, 0xffdbff8f},
+{'4', 0x0000ff53, 0x01170000},
+{'l', 0x41a91112, 0x00000000},
+{'q', 0x41122220, 0x00000000},
+{0, 0x41633334, 0xc0955556},
+{'q', 0x40a22228, 0xc0977776},
+{0, 0x40a22228, 0xc14bbbbd},
+{'@', 0x00000043, 0x000058dd},/*        C        x-advance: 88.863281 */
+{'M', 0x428bbbbc, 0xc1f6eef0},
+{'l', 0x414cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0x415cccce},
+{0, 0xc1266668, 0x41b80001},
+{'q', 0xc10eeef0, 0x41133333},
+{0, 0xc1d33334, 0x41133333},
+{'q', 0xc1877778, 0x34c00000},
+{0, 0xc1daaaab, 0xc1411111},
+{'9', 0xff9fffae, 0xfeffffac},
+{'l', 0x00000000, 0xc1266668},
+{'q', 0x00000000, 0xc1a33334},
+{0, 0x41277778, 0xc202eef0},
+{'q', 0x4128888a, 0xc1455550},
+{0, 0x41e44446, 0xc1455550},
+{'q', 0x4183bbbc, 0x00000000},
+{0, 0x41caaaaa, 0x41111110},
+{'9', 0x00480046, 0x00bb0052},
+{'l', 0xc14cccd0, 0x00000000},
+{'q', 0xbfbbbbc0, 0xc1222228},
+{0, 0xc0d11110, 0xc1800000},
+{'q', 0xc0a22220, 0xc0bddde0},
+{0, 0xc182aaaa, 0xc0bddde0},
+{'q', 0xc14ddde0, 0x00000000},
+{0, 0xc19c4446, 0x41177778},
+{'9', 0x004bffcb, 0x00c7ffcb},
+{'l', 0x00000000, 0x411cccd0},
+{'q', 0x00000000, 0x41655556},
+{0, 0x40c22224, 0x41c3bbbc},
+{'q', 0x40c22220, 0x41211111},
+{0, 0x41980000, 0x41211111},
+{'q', 0x41444444, 0x00000000},
+{0, 0x418a2222, 0xc0b77778},
+{'q', 0x40a22228, 0xc0b77776},
+{0, 0x40d77778, 0xc1800000},
+{'@', 0x00000044, 0x00005999},/*        D        x-advance: 89.597656 */
+{'M', 0x41344445, 0x00000000},
+{'4', 0xfcf80000, 0x000000db},
+{'q', 0x41991112, 0x00000000},
+{0, 0x41f7777a, 0x41455558},
+{'9', 0x0062005e, 0x010a005e},
+{'l', 0x00000000, 0x40b99998},
+{'q', 0x00000000, 0x41a88889},
+{0, 0xc13eeef0, 0x42055556},
+{'9', 0x0062ffa2, 0x0062ff00},
+{'6', 0x0000ff2e, 0xfd4c0066},
+{'4', 0x02600000, 0x0000006b},
+{'q', 0x41788888, 0x00000000},
+{0, 0x41bb3334, 0xc119999a},
+{'9', 0xffb4003e, 0xff34003e},
+{'l', 0x00000000, 0xc0bddde0},
+{'q', 0x00000000, 0xc185ddde},
+{0, 0xc0fbbbb8, 0xc1ceeeee},
+{'q', 0xc0fbbbc0, 0xc1122228},
+{0, 0xc1b1999c, 0xc1122228},
+{'l', 0xc1699998, 0x00000000},
+{'@', 0x00000045, 0x00004d99},/*        E        x-advance: 77.597656 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42740001, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc2408889, 0x00000000},
+{'l', 0x00000000, 0x41f9999c},
+{'l', 0x42280001, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc2280001, 0x00000000},
+{'l', 0x00000000, 0x4209999a},
+{'l', 0x42433333, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc276aaab, 0x00000000},
+{'[', 0x00540045, 0x00000155},/*kerning*/
+{'@', 0x00000046, 0x00004b77},/*        F        x-advance: 75.464844 */
+{'M', 0x41344445, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x42708889, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc23d1111, 0x00000000},
+{'l', 0x00000000, 0x4204888a},
+{'l', 0x4222aaab, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc222aaab, 0x00000000},
+{'l', 0x00000000, 0x422b7778},
+{'l', 0xc14ddddf, 0x00000000},
+{'[', 0x00540046, 0x00000155},/*kerning*/
+{'@', 0x00000047, 0x00005d00},/*        G        x-advance: 93.000000 */
+{'M', 0x42a60001, 0xc2415556},
+{'l', 0x00000000, 0x420e2222},
+{'q', 0xc02eef00, 0x40800006},
+{0, 0xc1266668, 0x41111114},
+{'q', 0xc0f55560, 0x40a22223},
+{0, 0xc1bf777a, 0x40a22223},
+{'q', 0xc18dddde, 0xb4000000},
+{0, 0xc1e91111, 0xc1422222},
+{'9', 0xff9fffa5, 0xfef0ffa5},
+{'l', 0x00000000, 0xc0f11110},
+{'q', 0x00000000, 0xc1ad5558},
+{0, 0x41222223, 0xc2077778},
+{'q', 0x41222222, 0xc1433330},
+{0, 0x41e77777, 0xc1433330},
+{'q', 0x41855556, 0x00000000},
+{0, 0x41ca2222, 0x41066660},
+{'9', 0x00430045, 0x00aa0054},
+{'l', 0xc14ddde0, 0x00000000},
+{'q', 0xbfaaaac0, 0xc0fbbbc0},
+{0, 0xc0d33338, 0xc1588888},
+{'q', 0xc0a66668, 0xc0b55550},
+{0, 0xc182aaac, 0xc0b55550},
+{'q', 0xc1566664, 0x00000000},
+{0, 0xc19dddde, 0x41177778},
+{'9', 0x004bffce, 0x00ccffcd},
+{'l', 0x00000000, 0x41000000},
+{'q', 0x00000000, 0x41866667},
+{0, 0x40f33334, 0x41d22223},
+{'q', 0x40f33338, 0x41166667},
+{0, 0x41a0888a, 0x41166667},
+{'q', 0x41255554, 0x00000000},
+{0, 0x416eeef0, 0xc0199998},
+{'9', 0xffed0024, 0xffdb0034},
+{'l', 0x00000000, 0xc1adddde},
+{'l', 0xc1b3bbbc, 0x00000000},
+{'l', 0x00000000, 0xc1266668},
+{'l', 0x420d1112, 0x00000000},
+{'@', 0x00000048, 0x00006166},/*        H        x-advance: 97.398438 */
+{'M', 0x42922223, 0x00000000},
+{'l', 0x00000000, 0xc2337778},
+{'l', 0xc243bbbd, 0x00000000},
+{'l', 0x00000000, 0x42337778},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x4226eef0},
+{'l', 0x4243bbbd, 0x00000000},
+{'l', 0x00000000, 0xc226eef0},
+{'l', 0x414cccc8, 0x00000000},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14cccc8, 0x00000000},
+{'@', 0x00000049, 0x00002522},/*        I        x-advance: 37.132812 */
+{'M', 0x41c88889, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14dddde, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414dddde, 0x00000000},
+{'@', 0x0000004a, 0x00004b55},/*        J        x-advance: 75.332031 */
+{'M', 0x42500001, 0xc2c22223},
+{'4', 0x00000066, 0x02250000},
+{'q', 0x00000000, 0x41666668},
+{0, 0xc10aaaac, 0x41b0888a},
+{'q', 0xc1099998, 0x40f33333},
+{0, 0xc1af7778, 0x40f33333},
+{'q', 0xc1566666, 0xb4000000},
+{0, 0xc1b08888, 0xc0dddddf},
+{'9', 0xffc9ffbc, 0xff56ffbc},
+{'l', 0x414ddddf, 0x00000000},
+{'8', 0x6b274900, 0x22662228},
+{'q', 0x40f33338, 0x00000000},
+{0, 0x414aaaac, 0xc09bbbbc},
+{'q', 0x40a44448, 0xc09bbbba},
+{0, 0x40a44448, 0xc1655555},
+{'l', 0x00000000, 0xc2897778},
+{'@', 0x0000004b, 0x000055aa},/*        K        x-advance: 85.664062 */
+{'M', 0x428caaab, 0x00000000},
+{'l', 0xc2095556, 0xc234cccd},
+{'l', 0xc13ddddc, 0x41455554},
+{'l', 0x00000000, 0x42037778},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x423f7779},
+{'l', 0x422c8889, 0xc23f7779},
+{'l', 0x41777778, 0x00000000},
+{'l', 0xc2188889, 0x422b7778},
+{'l', 0x42244445, 0x4258ccce},
+{'l', 0xc1755558, 0x00000000},
+{'@', 0x0000004c, 0x00004988},/*        L        x-advance: 73.531250 */
+{'M', 0x428c4445, 0xc1277778},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc26b7779, 0x00000000},
+{'l', 0x35800000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x00000000, 0x42ad3334},
+{'l', 0x42380001, 0x00000000},
+{'[', 0x0041004c, 0x00000144},/*kerning*/
+{'@', 0x0000004d, 0x00007733},/*        M        x-advance: 119.199219 */
+{'M', 0x426e6667, 0xc18f7778},
+{'l', 0x41fdddde, 0xc29e4445},
+{'l', 0x41844444, 0x00000000},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14cccc8, 0x00000000},
+{'l', 0x00000000, 0xc2177778},
+{'l', 0x3fa22200, 0xc2226666},
+{'l', 0xc1ff7778, 0x429ceeef},
+{'l', 0xc11bbbbc, 0x00000000},
+{'l', 0xc1feeeef, 0xc29d3334},
+{'l', 0x3fa22220, 0x4222eef0},
+{'l', 0x00000000, 0x42177778},
+{'l', 0xc14ccccd, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x41844444, 0x00000000},
+{'l', 0x41fe6668, 0x429e4445},
+{'@', 0x0000004e, 0x00006166},/*        N        x-advance: 97.398438 */
+{'M', 0x42abddde, 0xc2c22223},
+{'l', 0x00000000, 0x42c22223},
+{'l', 0xc14eeef0, 0x00000000},
+{'l', 0xc2437777, 0xc295bbbc},
+{'l', 0x00000000, 0x4295bbbc},
+{'l', 0xc14ddddf, 0x00000000},
+{'l', 0x00000000, 0xc2c22223},
+{'l', 0x414ddddf, 0x00000000},
+{'l', 0x42444445, 0x42962223},
+{'l', 0x00000000, 0xc2962223},
+{'l', 0x414bbbb8, 0x00000000},
+{'@', 0x0000004f, 0x00005dee},/*        O        x-advance: 93.929688 */
+{'M', 0x42ac0001, 0xc235ddde},
+{'q', 0x00000000, 0x41aeeeef},
+{0, 0xc12999a0, 0x42095555},
+{'q', 0xc1299998, 0x41477779},
+{0, 0xc1e2aaaa, 0x41477779},
+{'q', 0xc18a2223, 0x34c00000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11111, 0xc1488888},
+{'q', 0x418cccd0, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'6', 0x00370000, 0xffceff9b},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991111, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e88888, 0x41133333},
+{0, 0x4199999a, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'q', 0x40dbbbc0, 0xc1144446},
+{0, 0x40dbbbc0, 0xc1d5ddde},
+{'l', 0x00000000, 0xc0c88890},
+{'@', 0x00000050, 0x00005622},/*        P        x-advance: 86.132812 */
+{'M', 0x41c11112, 0xc2184445},
+{'l', 0x00000000, 0x42184445},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'l', 0x420f3334, 0x00000000},
+{'q', 0x41844444, 0x00000000},
+{0, 0x41ca2222, 0x41055558},
+{'q', 0x410cccd0, 0x41055558},
+{0, 0x410cccd0, 0x41aa2224},
+{'q', 0x00000000, 0x41611110},
+{0, 0xc10cccd0, 0x41addddc},
+{'9', 0x003dffbb, 0x003dff36},
+{'6', 0x0000ff49, 0xfe7d0000},
+{'4', 0x01300000, 0x000000b7},
+{'q', 0x41355554, 0x00000000},
+{0, 0x41822222, 0xc0a88888},
+{'8', 0x9427d627, 0x96d9c500},
+{'q', 0xc09ddde0, 0xc0bbbbc0},
+{0, 0xc1822222, 0xc0bbbbc0},
+{'l', 0xc1b77778, 0x00000000},
+{'[', 0x00740050, 0x000000ee},/*kerning*/
+{'[', 0x00760050, 0x00000100},/*kerning*/
+{'[', 0x00790050, 0x00000100},/*kerning*/
+{'@', 0x00000051, 0x00005dee},/*        Q        x-advance: 93.929688 */
+{'M', 0x42ab7778, 0x41066667},
+{'4', 0x0040ffbb, 0xff7eff5d},
+{'q', 0xc0999998, 0x3f99999b},
+{0, 0xc1222220, 0x3f99999b},
+{'q', 0xc18a2224, 0x00000000},
+{0, 0xc1e1999b, 0xc1477778},
+{'9', 0xff9dffa9, 0xfeeeffa9},
+{'l', 0xb5000000, 0xc0c44448},
+{'q', 0x00000000, 0xc1ae6666},
+{0, 0x412dddde, 0xc2091111},
+{'q', 0x412dddde, 0xc1488888},
+{0, 0x41e11112, 0xc1488888},
+{'q', 0x418cccce, 0x00000000},
+{0, 0x41e1999c, 0x41455550},
+{'9', 0x00620055, 0x010d0056},
+{'l', 0x00000000, 0x40dddde0},
+{'q', 0x00000000, 0x415ffffe},
+{0, 0xc08eeef0, 0x41c22222},
+{'9', 0x0051ffdd, 0x007fff9d},
+{'6', 0x006d008a, 0xfe1fff98},
+{'q', 0x00000000, 0xc18aaaac},
+{0, 0xc0dddde0, 0xc1d44444},
+{'q', 0xc0dddde0, 0xc1133338},
+{0, 0xc19b3334, 0xc1133338},
+{'q', 0xc13eeef0, 0x00000000},
+{0, 0xc1991112, 0x41133338},
+{'9', 0x0049ffc7, 0x00d4ffc7},
+{'l', 0x00000000, 0x40c88890},
+{'q', 0x00000000, 0x418bbbbb},
+{0, 0x40e66668, 0x41d5ddde},
+{'q', 0x40e8888c, 0x41133333},
+{0, 0x4199999b, 0x41133333},
+{'q', 0x41488888, 0x00000000},
+{0, 0x419aaaaa, 0xc1133333},
+{'q', 0x40dbbbc0, 0xc1144446},
+{0, 0x40dbbbc0, 0xc1d5ddde},
+{'l', 0x00000000, 0xc0c88890},
+{'@', 0x00000052, 0x00005422},/*        R        x-advance: 84.132812 */
+{'M', 0x42880000, 0x00000000},
+{'l', 0xc1a88888, 0xc21d5556},
+{'l', 0xc1b66666, 0x00000000},
+{'l', 0x00000000, 0x421d5556},
+{'4', 0x0000ff9a, 0xfcf80000},
+{'l', 0x42008889, 0x00000000},
+{'q', 0x4182aaac, 0x00000000},
+{0, 0x41c91114, 0x40eeeef0},
+{'q', 0x410dddd8, 0x40eeeef0},
+{0, 0x410dddd8, 0x41ad5558},
+{'q', 0x00000000, 0x41111110},
+{0, 0xc09ddde0, 0x417ddddc},
+{'9', 0x0035ffda, 0x0050ff94},
+{'4', 0x014900b6, 0x00060000},
+{'6', 0x0000ff93, 0xfd4cfea2},
+{'4', 0x01250000, 0x0000009d},
+{'q', 0x41255554, 0x00000000},
+{0, 0x41788888, 0xc0a88888},
+{'8', 0x9a2ad62a, 0x95d8bd00},
+{'q', 0xc0a00000, 0xc0a44450},
+{0, 0xc1811112, 0xc0a44450},
+{'l', 0xc19a2222, 0x00000000},
+{'@', 0x00000053, 0x00005111},/*        S        x-advance: 81.066406 */
+{'M', 0x427c0001, 0xc1c44445},
+{'q', 0x00000000, 0xc0d55554},
+{0, 0xc0911110, 0xc12aaaaa},
+{'q', 0xc08eeef0, 0xc0800000},
+{0, 0xc196eef0, 0xc1033334},
+{'q', 0xc1666668, 0xc0888888},
+{0, 0xc1b66667, 0xc12cccd0},
+{'q', 0xc1055556, 0xc0d33330},
+{0, 0xc1055556, 0xc18e6664},
+{'q', 0x00000000, 0xc1355558},
+{0, 0x41100000, 0xc196eef0},
+{'q', 0x41111112, 0xc0f11110},
+{0, 0x41c00000, 0xc0f11110},
+{'q', 0x41833334, 0x00000000},
+{0, 0x41ca2224, 0x41100000},
+{'9', 0x00480047, 0x00a20047},
+{'l', 0xc14cccd0, 0x00000000},
+{'q', 0x00000000, 0xc1022220},
+{0, 0xc0a88888, 0xc1577778},
+{'q', 0xc0a88888, 0xc0aaaaa0},
+{0, 0xc1811112, 0xc0aaaaa0},
+{'q', 0xc1244444, 0x00000000},
+{0, 0xc1733332, 0x40911110},
+{'8', 0x59d923d9, 0x51293000},
+{'q', 0x40a88888, 0x40800000},
+{0, 0x41888889, 0x40eaaab0},
+{'q', 0x4186eef0, 0x40977778},
+{0, 0x41c4ccce, 0x413bbbbc},
+{'q', 0x40f77770, 0x40dddde0},
+{0, 0x40f77770, 0x41922222},
+{'q', 0x00000000, 0x413dddde},
+{0, 0xc1144440, 0x41977778},
+{'q', 0xc1144448, 0x40e22223},
+{0, 0xc1c4ccce, 0x40e22223},
+{'q', 0xc10eeef0, 0xb4000000},
+{0, 0xc18b3334, 0xc0555556},
+{'q', 0xc1066666, 0xc0555556},
+{0, 0xc15ddddf, 0xc11ddddf},
+{'9', 0xffccffd5, 0xff7effd5},
+{'l', 0x414cccce, 0x00000000},
+{'q', 0x00000000, 0x411eeef0},
+{0, 0x40e88888, 0x41677779},
+{'q', 0x40e88888, 0x40911110},
+{0, 0x4184ccce, 0x40911110},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41777778, 0xc0844444},
+{'q', 0x40aeeef0, 0xc0866666},
+{0, 0x40aeeef0, 0xc1344445},
+{'@', 0x00000054, 0x00005177},/*        T        x-advance: 81.464844 */
+{'M', 0x40555556, 0xc2ad1112},
+{'l', 0x00000000, 0xc1288888},
+{'l', 0x42960000, 0x00000000},
+{'l', 0x00000000, 0x41288888},
+{'l', 0xc1f9999a, 0x00000000},
+{'l', 0x00000000, 0x42ad1112},
+{'l', 0xc14aaaac, 0x00000000},
+{'l', 0x00000000, 0xc2ad1112},
+{'l', 0xc1f91111, 0x00000000},
+{'[', 0x00540054, 0x00000111},/*kerning*/
+{'[', 0x00560054, 0x00000111},/*kerning*/
+{'[', 0x00570054, 0x00000100},/*kerning*/
+{'[', 0x00590054, 0x00000111},/*kerning*/
+{'@', 0x00000055, 0x00005888},/*        U        x-advance: 88.531250 */
+{'M', 0x4285999a, 0xc2c22223},
+{'4', 0x00000066, 0x020d0000},
+{'q', 0x00000000, 0x41833334},
+{0, 0xc1288888, 0x41c4ccce},
+{'q', 0xc128888c, 0x41022221},
+{0, 0xc1c55558, 0x41022221},
+{'q', 0xc16dddde, 0x34c00000},
+{0, 0xc1c80000, 0xc1022222},
+{'9', 0xffbfffb0, 0xff3cffb0},
+{'4', 0xfdf30000, 0x00000065},
+{'l', 0x00000000, 0x42835556},
+{'q', 0x00000000, 0x41366666},
+{0, 0x40c44444, 0x4186eef0},
+{'q', 0x40c66668, 0x40acccca},
+{0, 0x4181999a, 0x40acccca},
+{'q', 0x41222224, 0x00000000},
+{0, 0x41822222, 0xc0accccc},
+{'q', 0x40c44448, 0xc0aeeef2},
+{0, 0x40c44448, 0xc186eef0},
+{'l', 0x00000000, 0xc2835556},
+{'@', 0x00000056, 0x000056ee},/*        V        x-advance: 86.929688 */
+{'M', 0x42aa4445, 0xc2c22223},
+{'l', 0xc20fbbbd, 0x42c22223},
+{'l', 0xc1366664, 0x00000000},
+{'l', 0xc20f7778, 0xc2c22223},
+{'l', 0x415eeeef, 0x00000000},
+{'l', 0x41dc4444, 0x42a00001},
+{'l', 0x41de6668, 0xc2a00001},
+{'l', 0x415eeef0, 0x00000000},
+{'[', 0x00290056, 0x00000155},/*kerning*/
+{'[', 0x005d0056, 0x00000122},/*kerning*/
+{'[', 0x007d0056, 0x00000144},/*kerning*/
+{'@', 0x00000057, 0x00007922},/*        W        x-advance: 121.132812 */
+{'M', 0x42ec6667, 0xc2c22223},
+{'l', 0xc1bbbbbc, 0x42c22223},
+{'l', 0xc13aaaa8, 0x00000000},
+{'l', 0xc1a00002, 0xc28d7778},
+{'l', 0xbfc44440, 0xc0ecccd0},
+{'l', 0xbfc44440, 0x40ecccd0},
+{'l', 0xc1a5ddde, 0x428d7778},
+{'l', 0xc13aaaac, 0x00000000},
+{'l', 0xc1bc4445, 0xc2c22223},
+{'l', 0x414ccccc, 0x00000000},
+{'l', 0x41755556, 0x4284ccce},
+{'l', 0x3ff77780, 0x414dddda},
+{'l', 0x402aaab0, 0xc1388888},
+{'l', 0x419a2222, 0xc2877778},
+{'l', 0x412bbbbc, 0x00000000},
+{'l', 0x4195dde0, 0x42877778},
+{'l', 0x402eeee0, 0x413cccce},
+{'l', 0x40044440, 0xc1533334},
+{'l', 0x41700000, 0xc284aaab},
+{'l', 0x414ddde0, 0x00000000},
+{'[', 0x00290057, 0x00000100},/*kerning*/
+{'[', 0x00540057, 0x000000ee},/*kerning*/
+{'[', 0x005d0057, 0x000000cc},/*kerning*/
+{'[', 0x007d0057, 0x000000ee},/*kerning*/
+{'@', 0x00000058, 0x00005599},/*        X        x-advance: 85.597656 */
+{'M', 0x419ccccd, 0xc2c22223},
+{'l', 0x41baaaab, 0x4214ccce},
+{'l', 0x41baaaac, 0xc214ccce},
+{'l', 0x41700000, 0x00000000},
+{'l', 0xc1f55556, 0x42404445},
+{'l', 0x41fb3336, 0x42440001},
+{'l', 0xc1722228, 0x00000000},
+{'l', 0xc1bf7778, 0xc217bbbc},
+{'l', 0xc1bf7777, 0x4217bbbc},
+{'l', 0xc1722224, 0x00000000},
+{'l', 0x41fb3335, 0xc2440001},
+{'l', 0xc1f55557, 0xc2404445},
+{'l', 0x41700000, 0x00000000},
+{'[', 0x00560058, 0x000000ee},/*kerning*/
+{'@', 0x00000059, 0x00005200},/*        Y        x-advance: 82.000000 */
+{'M', 0x417bbbbd, 0xc2c22223},
+{'l', 0x41c9999a, 0x4242eef0},
+{'l', 0x41ca2224, 0xc242eef0},
+{'l', 0x41699998, 0x00000000},
+{'l', 0xc205ddde, 0x42733334},
+{'l', 0x00000000, 0x42111112},
+{'l', 0xc14ddde0, 0x00000000},
+{'l', 0x00000000, 0xc2111112},
+{'l', 0xc205ddde, 0xc2733334},
+{'l', 0x416bbbbd, 0x00000000},
+{'[', 0x00290059, 0x00000155},/*kerning*/
+{'[', 0x00540059, 0x00000122},/*kerning*/
+{'[', 0x00560059, 0x00000133},/*kerning*/
+{'[', 0x00570059, 0x00000122},/*kerning*/
+{'[', 0x00580059, 0x000000dd},/*kerning*/
+{'[', 0x00590059, 0x00000133},/*kerning*/
+{'[', 0x005d0059, 0x00000133},/*kerning*/
+{'[', 0x007d0059, 0x00000144},/*kerning*/
+{'@', 0x0000005a, 0x000051cc},/*        Z        x-advance: 81.796875 */
+{'M', 0x40d55556, 0xc2ad1112},
+{'l', 0x00000000, 0xc1288888},
+{'l', 0x42873334, 0x00000000},
+{'l', 0x00000000, 0x41155558},
+{'l', 0xc2555556, 0x429a8889},
+{'l', 0x425dddde, 0x00000000},
+{'l', 0x00000000, 0x41277778},
+{'l', 0xc28d3333, 0x00000000},
+{'l', 0xb6400000, 0xc119999a},
+{'l', 0x4254ccce, 0xc299dddf},
+{'l', 0xc2515556, 0x00000000},
+{'[', 0x0041005a, 0x000000dd},/*kerning*/
+{'@', 0x0000005b, 0x00002433},/*        [        x-advance: 36.199219 */
+{'M', 0x420b7778, 0xc2dddddf},
+{'l', 0x00000000, 0x41222228},
+{'l', 0xc14bbbbc, 0x00000000},
+{'l', 0x00000000, 0x42deeeef},
+{'l', 0x414bbbbc, 0x36400000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc1c8888a, 0x00000000},
+{'l', 0x35800000, 0xc303bbbc},
+{'l', 0x41c8888a, 0xb7000000},
+{'@', 0x0000005c, 0x00003811},/*       \         x-advance: 56.066406 */
+{'M', 0x422d1112, 0x41055556},
+{'l', 0xc2222223, 0xc2d2ccce},
+{'l', 0x413bbbbc, 0x00000000},
+{'l', 0x42222223, 0x42d2ccce},
+{'l', 0xc13bbbbc, 0xb6000000},
+{'@', 0x0000005d, 0x00002433},/*        ]        x-advance: 36.199219 */
+{'M', 0x3f2aaaab, 0xc2c9999a},
+{'l', 0x00000000, 0xc1222228},
+{'l', 0x41c9999b, 0x00000000},
+{'l', 0x00000000, 0x4303bbbc},
+{'l', 0xc1c9999b, 0x36c00000},
+{'l', 0x35300000, 0xc1222223},
+{'l', 0x414ccccd, 0x00000000},
+{'l', 0x00000000, 0xc2deeeef},
+{'l', 0xc14ccccd, 0x00000000},
+{'@', 0x0000005e, 0x00003911},/*        ^        x-advance: 57.066406 */
+{'M', 0x40888889, 0xc2426667},
+{'l', 0x419f7778, 0xc241dddf},
+{'l', 0x41088888, 0x00000000},
+{'l', 0x419eeef0, 0x4241dddf},
+{'l', 0xc1377778, 0x00000000},
+{'l', 0xc14aaaaa, 0xc200cccd},
+{'l', 0xc14bbbbd, 0x4200cccd},
+{'l', 0xc1377778, 0x00000000},
+{'@', 0x0000005f, 0x00003d99},/*        _        x-advance: 61.597656 */
+{'M', 0x4275999a, 0x00000000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc2748889, 0x00000000},
+{'l', 0x34900000, 0xc1222223},
+{'l', 0x42748889, 0x00000000},
+{'@', 0x00000060, 0x00002a33},/*        `        x-advance: 42.199219 */
+{'M', 0x4195ddde, 0xc2ccccce},
+{'l', 0x414ddde0, 0x419cccd0},
+{'l', 0xc129999a, 0x00000000},
+{'l', 0xc189999a, 0xc19cccd0},
+{'l', 0x416eeeee, 0x00000000},
+{'@', 0x00000061, 0x00004a44},/*        a        x-advance: 74.265625 */
+{'M', 0x4257bbbc, 0x00000000},
+{'8', 0xc4f3ecf7, 0x32bb1de5},
+{'q', 0xc0a66668, 0x40266668},
+{0, 0xc13ddde0, 0x40266668},
+{'q', 0xc1311112, 0xb4000000},
+{0, 0xc18dddde, 0xc0c66667},
+{'q', 0xc0d55557, 0xc0c66668},
+{0, 0xc0d55557, 0xc1733334},
+{'q', 0x00000000, 0xc139999a},
+{0, 0x410cccce, 0xc18ccccd},
+{'9', 0xffd00046, 0xffd000bd},
+{'4', 0x00000061, 0xffd30000},
+{'8', 0xafe2cd00, 0xe2a6e2e2},
+{'8', 0x1ba600c9, 0x3fde1bde},
+{'l', 0xc1455557, 0x00000000},
+{'q', 0x00000000, 0xc0f77778},
+{0, 0x40f9999a, 0xc168888c},
+{'q', 0x40f9999c, 0xc0d99990},
+{0, 0x41a6eeef, 0xc0d99990},
+{'q', 0x413bbbbc, 0x00000000},
+{0, 0x419a2224, 0x40c00000},
+{'9', 0x002f003c, 0x0091003c},
+{'l', 0x00000000, 0x4201999a},
+{'9', 0x00500000, 0x007e0014},
+{'4', 0x00080000, 0x0000ff9a},
+{'m', 0xc1a3bbbc, 0xc1177778},
+{'8', 0xe65c0035, 0xc537e627},
+{'4', 0xff8a0000, 0x0000ffa5},
+{'q', 0xc1a66666, 0x3ecccd00},
+{0, 0xc1a66666, 0x41555558},
+{'8', 0x451b2900, 0x1c521c1b},
+{'@', 0x00000062, 0x00004caa},/*        b        x-advance: 76.664062 */
+{'M', 0x428ceeef, 0xc20d1112},
+{'q', 0x00000000, 0x417cccd0},
+{0, 0xc0eaaaa8, 0x41d1999b},
+{'q', 0xc0eaaaa8, 0x41266667},
+{0, 0xc1a5ddde, 0x41266667},
+{'9', 0x0000ff93, 0xffb3ff58},
+{'l', 0xbf2aaaa0, 0x41055556},
+{'l', 0xc1355556, 0x00000000},
+{'4', 0xfccd0000, 0x00000063},
+{'l', 0x00000000, 0x42184446},
+{'q', 0x40eaaaac, 0xc1122220},
+{0, 0x41a44446, 0xc1122220},
+{'q', 0x41599998, 0x00000000},
+{0, 0x41a6eeee, 0x41222220},
+{'9', 0x0051003a, 0x00d5003a},
+{'6', 0x000b0000, 0xff22ff06},
+{'8', 0x1aa900cb, 0x3fcc19df},
+{'l', 0x00000000, 0x41fb3334},
+{'8', 0x40352613, 0x1a571a22},
+{'q', 0x41200000, 0x00000000},
+{0, 0x41655554, 0xc0f55556},
+{'9', 0xffc30023, 0xff6d0023},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc12bbbbc},
+{0, 0xc0866668, 0xc1944446},
+{'q', 0xc0844440, 0xc0fbbbb8},
+{0, 0xc16aaaac, 0xc0fbbbb8},
+{'@', 0x00000063, 0x00004777},/*        c        x-advance: 71.464844 */
+{'M', 0x42191112, 0xc10ccccd},
+{'8', 0xe15c0034, 0xb02be128},
+{'l', 0x413bbbb8, 0x00000000},
+{'q', 0xbeeeee00, 0x411aaaab},
+{0, 0xc10ddddc, 0x41877778},
+{'q', 0xc1066664, 0x40e66667},
+{0, 0xc19eeeee, 0x40e66667},
+{'q', 0xc1822223, 0xb4000000},
+{0, 0xc1c1999b, 0xc12bbbbc},
+{'9', 0xffabffc2, 0xff36ffc2},
+{'l', 0x00000000, 0xc0333330},
+{'q', 0x00000000, 0xc168888c},
+{0, 0x40fbbbbd, 0xc1ca2224},
+{'q', 0x40fddde0, 0xc12bbbb8},
+{0, 0x41c1999b, 0xc12bbbb8},
+{'q', 0x414aaaa8, 0x00000000},
+{0, 0x41a3bbbc, 0x40f11110},
+{'9', 0x003b003e, 0x00940042},
+{'l', 0xc13bbbb8, 0x00000000},
+{'8', 0xa6d8cbfd, 0xdba1dbdc},
+{'8', 0x1ea100c4, 0x4ed01ede},
+{'9', 0x002ffff3, 0x0061fff3},
+{'l', 0x00000000, 0x40333330},
+{'8', 0x620d3200, 0x4e302f0d},
+{'q', 0x408aaaac, 0x40733334},
+{0, 0x41400002, 0x40733334},
+{'@', 0x00000064, 0x00004d00},/*        d        x-advance: 77.000000 */
+{'M', 0x425fbbbc, 0x00000000},
+{'l', 0xbf199980, 0xc0f77778},
+{'q', 0xc0ecccd0, 0x41111111},
+{0, 0xc1a4ccce, 0x41111111},
+{'q', 0xc14aaaaa, 0x34c00000},
+{0, 0xc1a3bbbc, 0xc1244444},
+{'9', 0xffaeffc2, 0xff32ffc1},
+{'l', 0x00000000, 0xbff77780},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f9999b, 0xc1d55556},
+{'q', 0x40fbbbbe, 0xc1222220},
+{0, 0x41a5ddde, 0xc1222220},
+{'9', 0x00000065, 0x004400a0},
+{'l', 0x00000000, 0xc215dde0},
+{'4', 0x00000063, 0x03330000},
+{'6', 0x0000ffa6, 0xfee6fed7},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40911114, 0x4193bbbd},
+{'q', 0x40911110, 0x40f55556},
+{0, 0x4168888a, 0x40f55556},
+{'9', 0x0000005b, 0xffad0088},
+{'l', 0x00000000, 0xc204ccce},
+{'q', 0xc0b11110, 0xc1244444},
+{0, 0xc1877778, 0xc1244444},
+{'q', 0xc1211110, 0x00000000},
+{0, 0xc16aaaaa, 0x40fbbbb8},
+{'q', 0xc0911114, 0x40f999a0},
+{0, 0xc0911114, 0x41944446},
+{'l', 0x00000000, 0x3fb33320},
+{'@', 0x00000065, 0x00004866},/*        e        x-advance: 72.398438 */
+{'M', 0x4284eeef, 0xc149999a},
+{'q', 0xc0622210, 0x40aaaaab},
+{0, 0xc11ffffc, 0x411aaaab},
+{'q', 0xc0ceeef0, 0x40888889},
+{0, 0xc1891112, 0x40888889},
+{'q', 0xc1711112, 0xb4000000},
+{0, 0xc1c11112, 0xc11cccce},
+{'9', 0xffb2ffb8, 0xff38ffb8},
+{'l', 0xb5000000, 0xc0333330},
+{'q', 0x00000000, 0xc13ccccc},
+{0, 0x408eeeef, 0xc1a08888},
+{'q', 0x40911112, 0xc1055558},
+{0, 0x413bbbbd, 0xc14aaab0},
+{'q', 0x40e66668, 0xc08cccc0},
+{0, 0x41755554, 0xc08cccc0},
+{'q', 0x4177777c, 0x00000000},
+{0, 0x41b44446, 0x41222220},
+{'9', 0x00500039, 0x00c90039},
+{'4', 0x002c0000, 0x0000fe7a},
+{'q', 0x3e8888c0, 0x411eeef0},
+{0, 0x40bbbbc0, 0x41877778},
+{'q', 0x40b55558, 0x40dddde0},
+{0, 0x4178888c, 0x40dddde0},
+{'8', 0xeb580034, 0xc73feb24},
+{'6', 0x002f003b, 0xfe6bff1b},
+{'q', 0xc0eaaaa8, 0x00000000},
+{0, 0xc1466666, 0x40aaaaa8},
+{'9', 0x002affd8, 0x007affce},
+{'4', 0x00000120, 0xfff90000},
+{'8', 0x95dfc7fd, 0xce97cee3},
+{'@', 0x00000066, 0x00002f77},/*        f        x-advance: 47.464844 */
+{'M', 0x422c8889, 0xc27aaaac},
+{'l', 0xc1755556, 0x00000000},
+{'l', 0x00000000, 0x427aaaac},
+{'l', 0xc1455556, 0x00000000},
+{'l', 0x00000000, 0xc27aaaac},
+{'0', 0xb50000a5, 0xc000005b},
+{'q', 0x3e088880, 0xc1377778},
+{0, 0x40ccccd0, 0xc18c4444},
+{'q', 0x40caaaa8, 0xc0c22220},
+{0, 0x418a2222, 0xc0c22220},
+{'9', 0x00000020, 0x00080044},
+{'l', 0xbf2aaa80, 0x41211110},
+{'8', 0xfccbfcea, 0x699c009e},
+{'l', 0x00000000, 0x41000000},
+{'l', 0x41755556, 0x00000000},
+{'l', 0x00000000, 0x41177778},
+{'[', 0x00220066, 0x00000111},/*kerning*/
+{'[', 0x00270066, 0x00000111},/*kerning*/
+{'[', 0x00290066, 0x00000155},/*kerning*/
+{'[', 0x005d0066, 0x00000133},/*kerning*/
+{'[', 0x007d0066, 0x00000144},/*kerning*/
+{'@', 0x00000067, 0x00004caa},/*        g        x-advance: 76.664062 */
+{'M', 0x42133334, 0x41e3bbbd},
+{'8', 0xeb9300d4, 0xb298ebbf},
+{'l', 0x40ceeef0, 0xc0eaaaac},
+{'q', 0x41000000, 0x411bbbbc},
+{0, 0x419aaaab, 0x411bbbbc},
+{'q', 0x410bbbbc, 0x00000000},
+{0, 0x415eeef0, 0xc09bbbbc},
+{'9', 0xffd90029, 0xff8d0029},
+{'l', 0x00000000, 0xc0caaaab},
+{'q', 0xc0eaaab0, 0x4109999a},
+{0, 0xc1a1999a, 0x4109999a},
+{'q', 0xc1500002, 0xb4000000},
+{0, 0xc1a55556, 0xc1266668},
+{'9', 0xffadffc3, 0xff2fffc3},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f33334, 0xc1d55556},
+{'q', 0x40f55554, 0xc1222220},
+{0, 0x41a6eeef, 0xc1222220},
+{'9', 0x0000006a, 0x004a00a4},
+{'4', 0xffc00004, 0x00000059},
+{'l', 0x00000000, 0x428d3334},
+{'q', 0x00000000, 0x41655556},
+{0, 0xc1088888, 0x41b1999a},
+{'9', 0x003effbc, 0x003eff50},
+{'m', 0xc1900001, 0xc27eeef0},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x408eeef0, 0x4193bbbd},
+{'q', 0x40911110, 0x40f55556},
+{0, 0x4168888a, 0x40f55556},
+{'9', 0x0000005d, 0xffab0089},
+{'l', 0x00000000, 0xc2037778},
+{'8', 0xc5cdddee, 0xe8ace8df},
+{'q', 0xc1211110, 0x00000000},
+{0, 0xc169999a, 0x40fbbbb8},
+{'q', 0xc0911110, 0x40f999a0},
+{0, 0xc0911110, 0x41944446},
+{'l', 0x00000000, 0x3fb33320},
+{'@', 0x00000068, 0x00004b33},/*        h        x-advance: 75.199219 */
+{'M', 0x421d5556, 0xc27c4445},
+{'8', 0x19ad00d1, 0x42c719dc},
+{'l', 0x00000000, 0x424e2223},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfccd0000, 0x00000062},
+{'l', 0x00000000, 0x421b7779},
+{'q', 0x41033334, 0xc11eeeec},
+{0, 0x41aa2224, 0xc11eeeec},
+{'q', 0x41299998, 0x00000000},
+{0, 0x41866666, 0x40bdddd0},
+{'9', 0x002f0032, 0x009f0032},
+{'4', 0x017c0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23d999a},
+{'8', 0xa0e3bd00, 0xe4abe4e3},
+{'@', 0x00000069, 0x00002133},/*        i        x-advance: 33.199219 */
+{'M', 0x41177778, 0xc2b68889},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280f100f},
+{'8', 0x27f11600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x41555556, 0x41991110},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2904445},
+{'l', 0x41466667, 0x00000000},
+{'@', 0x0000006a, 0x000020aa},/*        j        x-advance: 32.664062 */
+{'M', 0x41077778, 0xc2b68889},
+{'8', 0xd80ee800, 0xf02bf00e},
+{'8', 0x102b001c, 0x280e100e},
+{'8', 0x27f21600, 0x10d510f2},
+{'8', 0xf0d500e4, 0xd9f2f0f2},
+{'m', 0x3fa22220, 0x41991110},
+{'4', 0x00000063, 0x02850000},
+{'q', 0x00000000, 0x41a44446},
+{0, 0xc196eef0, 0x41a44446},
+{'9', 0x0000ffdf, 0xfff7ffc3},
+{'l', 0x3d888880, 0xc11eeef0},
+{'8', 0x042d0413, 0xb6430041},
+{'l', 0x00000000, 0xc2a31112},
+{'@', 0x0000006b, 0x00004533},/*        k        x-advance: 69.199219 */
+{'M', 0x425a6667, 0x00000000},
+{'l', 0xc1c80000, 0xc205ddde},
+{'l', 0xc0f9999c, 0x41011110},
+{'l', 0x00000000, 0x41cb3334},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2ccccce},
+{'l', 0x41466667, 0x00000000},
+{'l', 0x00000000, 0x42777779},
+{'l', 0x40d33334, 0xc0fbbbb8},
+{'l', 0x41b33334, 0xc1bddde0},
+{'l', 0x41711110, 0x00000000},
+{'l', 0xc1e11112, 0x41f0888a},
+{'l', 0x41fb3336, 0x42284445},
+{'l', 0xc168888c, 0x00000000},
+{'@', 0x0000006c, 0x00002133},/*        l        x-advance: 33.199219 */
+{'M', 0x41b66667, 0xc2ccccce},
+{'l', 0x00000000, 0x42ccccce},
+{'l', 0xc1466667, 0x00000000},
+{'l', 0x00000000, 0xc2ccccce},
+{'l', 0x41466667, 0x00000000},
+{'@', 0x0000006d, 0x000077bb},/*        m        x-advance: 119.730469 */
+{'M', 0x42191112, 0xc27c4445},
+{'9', 0x0000ff9f, 0x0051ff7c},
+{'l', 0x00000000, 0x42537778},
+{'l', 0xc1466667, 0x00000000},
+{'4', 0xfdbf0000, 0x0000005d},
+{'l', 0x3eaaaa80, 0x40fbbbc0},
+{'q', 0x40f9999c, 0xc1133330},
+{0, 0x41aaaaab, 0xc1133330},
+{'8', 0x16620037, 0x4642152b},
+{'8', 0xbd4ad71c, 0xe76ce72e},
+{'q', 0x41399998, 0x00000000},
+{0, 0x418eeef0, 0x40c66660},
+{'9', 0x00310032, 0x009e0032},
+{'4', 0x017b0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23e2223},
+{'8', 0x9edfb800, 0xe6a7e6df},
+{'8', 0x23a300c5, 0x55d923de},
+{'4', 0x017e0000, 0x0000ff9e},
+{'l', 0x00000000, 0xc23ddddf},
+{'8', 0xa0dfbd00, 0xe4a7e4df},
+{'@', 0x0000006e, 0x00004b66},/*        n        x-advance: 75.398438 */
+{'M', 0x421d5556, 0xc27c4445},
+{'8', 0x19ad00d1, 0x42c719dc},
+{'l', 0x00000000, 0x424e2223},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfdbf0000, 0x0000005d},
+{'l', 0x3eccccc0, 0x41100004},
+{'q', 0x41033334, 0xc1255554},
+{0, 0x41ac4446, 0xc1255554},
+{'q', 0x41299998, 0x00000000},
+{0, 0x41866666, 0x40bdddd0},
+{'9', 0x002f0032, 0x009f0032},
+{'4', 0x017c0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc23d999a},
+{'8', 0xa0e3bd00, 0xe4abe4e3},
+{'@', 0x0000006f, 0x00004ddd},/*        o        x-advance: 77.863281 */
+{'M', 0x40c44445, 0xc2133334},
+{'q', 0x00000000, 0xc17aaaac},
+{0, 0x410cccce, 0xc1d11112},
+{'q', 0x410cccce, 0xc1288884},
+{0, 0x41bf7778, 0xc1288884},
+{'q', 0x41722224, 0x00000000},
+{0, 0x41bf7778, 0x41255554},
+{'9', 0x00520046, 0x00cd0048},
+{'l', 0x00000000, 0x400cccc0},
+{'q', 0x00000000, 0x417aaaae},
+{0, 0xc10ddddc, 0x41d11112},
+{'q', 0xc10cccd0, 0x41277779},
+{0, 0xc1bf7778, 0x41277779},
+{'q', 0xc1733336, 0x34c00000},
+{0, 0xc1c0888a, 0xc1277778},
+{'9', 0xffadffba, 0xff2fffba},
+{'6', 0xfff40000, 0x000c0062},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40a22224, 0x4194ccce},
+{'q', 0x40a44444, 0x40fbbbbe},
+{0, 0x4177777a, 0x40fbbbbe},
+{'q', 0x41211110, 0x00000000},
+{0, 0x41733334, 0xc0f7777a},
+{'9', 0xffc20029, 0xff6c0029},
+{'l', 0x00000000, 0xbfdddde0},
+{'q', 0x00000000, 0xc1299998},
+{0, 0xc0a44440, 0xc1944444},
+{'q', 0xc0a44448, 0xc1000000},
+{0, 0xc1766668, 0xc1000000},
+{'q', 0xc1233334, 0x00000000},
+{0, 0xc1755556, 0x41000000},
+{'q', 0xc0a22224, 0x40fddde0},
+{0, 0xc0a22224, 0x41944444},
+{'l', 0x00000000, 0x3fc44440},
+{'@', 0x00000070, 0x00004caa},/*        p        x-advance: 76.664062 */
+{'M', 0x42295556, 0x3faaaaab},
+{'9', 0x0000ff98, 0xffbeff5c},
+{'l', 0x00000000, 0x420aeef0},
+{'l', 0xc1466666, 0xb6000000},
+{'4', 0xfce20000, 0x0000005a},
+{'l', 0x3f1999a0, 0x40fddde0},
+{'q', 0x40f33334, 0xc1144440},
+{0, 0x41a6eeef, 0xc1144440},
+{'q', 0x415aaaac, 0x00000000},
+{0, 0x41a77778, 0x41222220},
+{'9', 0x0051003a, 0x00d5003a},
+{'l', 0x00000000, 0x3fb33320},
+{'q', 0x00000000, 0x417cccd0},
+{0, 0xc0eaaaa8, 0x41d1999b},
+{'9', 0x0053ffc6, 0x0053ff5b},
+{'m', 0xc0733330, 0xc280cccd},
+{'9', 0x0000ffa7, 0x004fff7a},
+{'l', 0x00000000, 0x420a2222},
+{'q', 0x40b55558, 0x411ccccf},
+{0, 0x41877778, 0x411ccccf},
+{'q', 0x41200000, 0x00000000},
+{0, 0x4169999c, 0xc0fbbbbe},
+{'9', 0xffc20025, 0xff6c0025},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc12bbbbc},
+{0, 0xc0955558, 0xc1944446},
+{'q', 0xc0933338, 0xc0fbbbb8},
+{0, 0xc16bbbbc, 0xc0fbbbb8},
+{'@', 0x00000071, 0x00004d99},/*        q        x-advance: 77.597656 */
+{'M', 0x42866667, 0xc2904445},
+{'4', 0x031e0000, 0x0000ff9d},
+{'l', 0x00000000, 0xc209999a},
+{'q', 0xc0ecccd0, 0x40ffffff},
+{0, 0xc19eeef0, 0x40ffffff},
+{'q', 0xc1555556, 0xb4000000},
+{0, 0xc1a80000, 0xc1266668},
+{'9', 0xffadffc4, 0xff2fffc4},
+{'l', 0x00000000, 0xbfb33320},
+{'q', 0x00000000, 0xc1844446},
+{0, 0x40f33335, 0xc1d55556},
+{'q', 0x40f33334, 0xc1222220},
+{0, 0x41a91112, 0xc1222220},
+{'9', 0x00000066, 0x004400a2},
+{'4', 0xffc60004, 0x0000005a},
+{'m', 0xc241dddf, 0x42137778},
+{'q', 0x00000000, 0x412bbbbe},
+{0, 0x40933334, 0x4194ccce},
+{'q', 0x40955558, 0x40fbbbbe},
+{0, 0x416aaaae, 0x40fbbbbe},
+{'9', 0x00000058, 0xffb30086},
+{'l', 0x00000000, 0xc20d999a},
+{'q', 0xc0b99998, 0xc1177778},
+{0, 0xc1855556, 0xc1177778},
+{'q', 0xc1222222, 0x00000000},
+{0, 0xc16cccce, 0x41000000},
+{'q', 0xc0933334, 0x40fddde0},
+{0, 0xc0933334, 0x4195ddde},
+{'l', 0x00000000, 0x3faaaaa0},
+{'@', 0x00000072, 0x00002e44},/*        r        x-advance: 46.265625 */
+{'M', 0x4218cccd, 0xc2766667},
+{'9', 0x0000ffa0, 0x0053ff7d},
+{'l', 0x00000000, 0x424cccce},
+{'l', 0xc1455555, 0x00000000},
+{'4', 0xfdbf0000, 0x00000060},
+{'l', 0x3e888880, 0x41044448},
+{'q', 0x40bddde0, 0xc1199998},
+{0, 0x41891112, 0xc1199998},
+{'9', 0x0000001b, 0x0007002b},
+{'l', 0xbd888a00, 0x4137777c},
+{'q', 0xc02eeef0, 0xbf088880},
+{0, 0xc0c00000, 0xbf088880},
+{'[', 0x00220072, 0x00000111},/*kerning*/
+{'[', 0x00270072, 0x00000111},/*kerning*/
+{'[', 0x00660072, 0x00000100},/*kerning*/
+{'[', 0x00740072, 0x00000355},/*kerning*/
+{'[', 0x00760072, 0x00000133},/*kerning*/
+{'[', 0x00770072, 0x00000122},/*kerning*/
+{'[', 0x00790072, 0x00000133},/*kerning*/
+{'@', 0x00000073, 0x00004677},/*        s        x-advance: 70.464844 */
+{'M', 0x424d999a, 0xc1991112},
+{'8', 0xc8e9e100, 0xd696e7ea},
+{'q', 0xc1411112, 0xc01dddd8},
+{0, 0xc199999a, 0xc0e44444},
+{'q', 0xc0e44446, 0xc0977778},
+{0, 0xc0e44446, 0xc15bbbbc},
+{'q', 0x00000000, 0xc108888c},
+{0, 0x40e8888a, 0xc16cccd0},
+{'q', 0x40eaaaac, 0xc0c88880},
+{0, 0x419bbbbd, 0xc0c88880},
+{'q', 0x414eeef0, 0x00000000},
+{0, 0x41a1999a, 0x40d33330},
+{'9', 0x0034003a, 0x007f003a},
+{'l', 0xc1455558, 0x00000000},
+{'8', 0xbde1dd00, 0xe0a7e0e1},
+{'8', 0x1aa800c3, 0x3ae61ae6},
+{'8', 0x33181f00, 0x25691319},
+{'q', 0x41544448, 0x40400000},
+{0, 0x419ddde0, 0x40fbbbb8},
+{'q', 0x40d11110, 0x409bbbc0},
+{0, 0x40d11110, 0x415bbbbe},
+{'q', 0x00000000, 0x41188889},
+{0, 0xc0f55558, 0x41777778},
+{'q', 0xc0f33330, 0x40bddddf},
+{0, 0xc1a1999a, 0x40bddddf},
+{'q', 0xc1655556, 0xb4000000},
+{0, 0xc1af7778, 0xc0eaaaac},
+{'9', 0xffc6ffc4, 0xff7effc4},
+{'l', 0x41466666, 0x00000000},
+{'8', 0x542e3d03, 0x165a162c},
+{'8', 0xe95c003c, 0xc520e920},
+{'@', 0x00000074, 0x00002caa},/*        t        x-advance: 44.664062 */
+{'M', 0x421fbbbc, 0x00000000},
+{'8', 0x0ab40adf, 0xdfa300ca},
+{'9', 0xffdfffda, 0xff88ffda},
+{'l', 0x00000000, 0xc232eef0},
+{'l', 0xc1533334, 0x00000000},
+{'l', 0xb4c00000, 0xc1177778},
+{'l', 0x41533334, 0x00000000},
+{'l', 0x00000000, 0xc18c4444},
+{'l', 0x41455556, 0x00000000},
+{'l', 0x00000000, 0x418c4444},
+{'l', 0x41577778, 0x00000000},
+{'4', 0x004b0000, 0x0000ff95},
+{'l', 0x00000000, 0x42333334},
+{'8', 0x38132c00, 0x0c2c0c13},
+{'q', 0x40155550, 0x00000000},
+{0, 0x40b99998, 0xbf4cccd0},
+{'l', 0x3d888800, 0x41211112},
+{'@', 0x00000075, 0x00004b44},/*        u        x-advance: 75.265625 */
+{'M', 0x42588889, 0x00000000},
+{'l', 0xbe888880, 0xc0e44445},
+{'q', 0xc0e22220, 0x41077778},
+{0, 0xc1a88888, 0x41077778},
+{'q', 0xc129999c, 0xb4000000},
+{0, 0xc1891112, 0xc0c88889},
+{'9', 0xffceffcc, 0xff5bffcc},
+{'4', 0xfe8c0000, 0x00000062},
+{'l', 0x00000000, 0x423aaaac},
+{'8', 0x68204d00, 0x1a491a21},
+{'9', 0x0000006f, 0xffad0096},
+{'l', 0x00000000, 0xc2522224},
+{'l', 0x41466664, 0x00000000},
+{'l', 0x00000000, 0x42904445},
+{'l', 0xc13ccccc, 0x00000000},
+{'@', 0x00000076, 0x00004222},/*        v        x-advance: 66.132812 */
+{'M', 0x427eaaac, 0xc2904445},
+{'l', 0xc1cf777a, 0x42904445},
+{'l', 0xc1166666, 0x00000000},
+{'l', 0xc1d11111, 0xc2904445},
+{'l', 0x414aaaab, 0x00000000},
+{'l', 0x4192aaaa, 0x425d1112},
+{'l', 0x418eeef0, 0xc25d1112},
+{'l', 0x4149999c, 0x00000000},
+{'[', 0x00220076, 0x00000100},/*kerning*/
+{'[', 0x00270076, 0x00000100},/*kerning*/
+{'[', 0x00660076, 0x000000dd},/*kerning*/
+{'@', 0x00000077, 0x00006699},/*        w        x-advance: 102.597656 */
+{'M', 0x42c6cccd, 0xc2904445},
+{'l', 0xc1a77778, 0x42904445},
+{'l', 0xc1200000, 0x00000000},
+{'l', 0xc18c4444, 0xc25a6667},
+{'l', 0xc1888888, 0x425a6667},
+{'l', 0xc1211112, 0x00000000},
+{'l', 0xc1a77778, 0xc2904445},
+{'l', 0x41455556, 0x00000000},
+{'l', 0x41633334, 0x42577778},
+{'l', 0x41866666, 0xc2577778},
+{'l', 0x411eeef0, 0x00000000},
+{'l', 0x4188888a, 0x425c0001},
+{'l', 0x415eeef0, 0xc25c0001},
+{'l', 0x41444440, 0x00000000},
+{'@', 0x00000078, 0x000043bb},/*        x        x-advance: 67.730469 */
+{'M', 0x418dddde, 0xc2904445},
+{'l', 0x417cccd0, 0x41d22224},
+{'l', 0x41800000, 0xc1d22224},
+{'l', 0x41677774, 0x00000000},
+{'l', 0xc1bccccc, 0x420e6667},
+{'l', 0x41c2aaac, 0x42122223},
+{'l', 0xc1644444, 0x00000000},
+{'l', 0xc1855556, 0xc1d88889},
+{'l', 0xc1855556, 0x41d88889},
+{'l', 0xc1655557, 0x00000000},
+{'l', 0x41c22222, 0xc2122223},
+{'l', 0xc1bc4444, 0xc20e6667},
+{'l', 0x41633334, 0x00000000},
+{'@', 0x00000079, 0x00004099},/*        y        x-advance: 64.597656 */
+{'M', 0x42080000, 0x41322223},
+{'9', 0x0087ffcd, 0x008fff66},
+{'l', 0xc0044448, 0x3d888800},
+{'9', 0x0000ffe1, 0xfff8ffc9},
+{'4', 0xffb00000, 0x0002001a},
+{'8', 0xec4e0032, 0xb62eec1c},
+{'l', 0x402aaaa8, 0xc0eaaaac},
+{'l', 0xc1cdddde, 0xc28eaaab},
+{'l', 0x41577778, 0x00000000},
+{'l', 0x41908888, 0x42580001},
+{'l', 0x4185dde0, 0xc2580001},
+{'l', 0x41533334, 0x00000000},
+{'l', 0xc1e7777a, 0x42a68889},
+{'[', 0x00220079, 0x00000100},/*kerning*/
+{'[', 0x00270079, 0x00000100},/*kerning*/
+{'[', 0x00660079, 0x000000dd},/*kerning*/
+{'@', 0x0000007a, 0x000043bb},/*        z        x-advance: 67.730469 */
+{'M', 0x40ceeef0, 0xc277bbbd},
+{'l', 0x00000000, 0xc1233334},
+{'l', 0x425aeef0, 0x00000000},
+{'l', 0x00000000, 0x410bbbc0},
+{'l', 0xc220888a, 0x42551111},
+{'l', 0x42284445, 0x35800000},
+{'l', 0x00000000, 0x41222223},
+{'l', 0xc264cccd, 0x00000000},
+{'l', 0xb5000000, 0xc1111112},
+{'l', 0x421eeeef, 0xc2537778},
+{'l', 0xc21ccccd, 0xb6800000},
+{'@', 0x0000007b, 0x00002e33},/*        {        x-advance: 46.199219 */
+{'M', 0x40888889, 0xc210cccd},
+{'l', 0x00000000, 0xc11aaaac},
+{'9', 0x00000071, 0xff7f0071},
+{'l', 0x00000000, 0xc1577774},
+{'q', 0x00000000, 0xc1288890},
+{0, 0x40a22220, 0xc1966668},
+{'9', 0xffbe0028, 0xff9f0095},
+{'l', 0x40266670, 0x40f33340},
+{'q', 0xc0fddde0, 0x401ddde0},
+{0, 0xc12eeef0, 0x410dddd8},
+{'9', 0x0032ffe8, 0x0074ffe8},
+{'l', 0x00000000, 0x41533330},
+{'q', 0x00000000, 0x41744444},
+{0, 0xc1322222, 0x41aa2222},
+{'9', 0x002e0059, 0x00aa0059},
+{'l', 0x00000000, 0x41511112},
+{'q', 0x00000000, 0x41033334},
+{0, 0x40400008, 0x4168888a},
+{'9', 0x00320018, 0x00460057},
+{'l', 0xc0266670, 0x40f55558},
+{'q', 0xc159999a, 0xc0777778},
+{0, 0xc1955556, 0xc1433334},
+{'9', 0xffbeffd8, 0xff6affd8},
+{'l', 0x00000000, 0xc1555556},
+{'q', 0x00000000, 0xc1822222},
+{0, 0xc1622224, 0xc1822222},
+{'@', 0x0000007c, 0x00002155},/*        |        x-advance: 33.332031 */
+{'M', 0x41ad5556, 0xc2c22223},
+{'l', 0x00000000, 0x42e62223},
+{'l', 0xc11eeef0, 0x00000000},
+{'l', 0x00000000, 0xc2e62223},
+{'l', 0x411eeef0, 0x00000000},
+{'@', 0x0000007d, 0x00002e33},/*        }        x-advance: 46.199219 */
+{'M', 0x42273334, 0xc2377778},
+{'l', 0x00000000, 0x411aaaac},
+{'9', 0x0000ff8f, 0x0081ff8f},
+{'l', 0x00000000, 0x41577778},
+{'q', 0x00000000, 0x41277778},
+{0, 0xc0a22224, 0x41966667},
+{'9', 0x0042ffd8, 0x0061ff6b},
+{'l', 0xc026666a, 0xc0f55558},
+{'q', 0x40fbbbbd, 0xc01ddddc},
+{0, 0x412dddde, 0xc10ccccc},
+{'9', 0xffce0018, 0xff8c0018},
+{'l', 0x00000000, 0xc1544444},
+{'q', 0x00000000, 0xc17aaaae},
+{0, 0x41422223, 0xc1a91113},
+{'9', 0xffd5ff9f, 0xff57ff9f},
+{'l', 0x00000000, 0xc1544440},
+{'q', 0x00000000, 0xc1033338},
+{0, 0xc0400000, 0xc1688890},
+{'9', 0xffcdffe8, 0xffbaffa9},
+{'l', 0x40266669, 0xc0f33340},
+{'q', 0x415aaaab, 0x40777780},
+{0, 0x41955555, 0x41433338},
+{'9', 0x00420028, 0x00960028},
+{'l', 0x00000000, 0x41599998},
+{'q', 0x00000000, 0x41800000},
+{0, 0x41622224, 0x41800000},
+{'@', 0x0000007e, 0x00005cdd},/*        ~        x-advance: 92.863281 */
+{'M', 0x42942223, 0xc24f3334},
+{'l', 0x41222220, 0xbd888800},
+{'q', 0x00000000, 0x41244444},
+{0, 0xc0c22220, 0x418d5556},
+{'q', 0xc0c00000, 0x40eaaaa8},
+{0, 0xc178888c, 0x40eaaaa8},
+{'8', 0xeeae00d2, 0xcab4eedd},
+{'8', 0xdacee7e5, 0xf3cff3ea},
+{'8', 0x1cc100d8, 0x4eea1cea},
+{'l', 0xc12bbbbc, 0x3e088880},
+{'q', 0x00000000, 0xc127777a},
+{0, 0x40c00002, 0xc18bbbbd},
+{'q', 0x40c22222, 0xc0e00000},
+{0, 0x41788889, 0xc0e00000},
+{'8', 0x1351002d, 0x354b1223},
+{'8', 0x2c3b2328, 0x09290913},
+{'8', 0xe1420029, 0xaf19e119},
+};
+#define ctx_font_ascii_name "Roboto"
+#endif
+#endif //_CTX_INTERNAL_FONT_
+#ifndef __CTX_LIST__
+#define __CTX_LIST__
+
+#include <stdlib.h>
+
+#ifndef CTX_EXTERNAL_MALLOC
+static inline void *ctx_realloc (void *mem, size_t old_size, size_t new_size)
+{
+  return (void*)realloc (mem, new_size);
+}
+
+static inline void *ctx_malloc (size_t size)
+{
+  return (void*)malloc (size);
+}
+
+static inline void ctx_free (void *mem)
+{
+  free (mem);
+}
+
+static inline void *ctx_calloc (size_t size, size_t count)
+{
+  return calloc (size, count);
+}
+
+#endif
+
+/* The whole ctx_list implementation is in the header and will be inlined
+ * wherever it is used.
+ */
+struct _CtxList {
+  void *data;
+  CtxList *next;
+  void (*freefunc)(void *data, void *freefunc_data);
+  void *freefunc_data;
+};
+
+static inline void ctx_list_prepend_full (CtxList **list, void *data,
+    void (*freefunc)(void *data, void *freefunc_data),
+    void *freefunc_data)
+{
+  CtxList *new_= (CtxList*)ctx_calloc (sizeof (CtxList), 1);
+  new_->next = *list;
+  new_->data=data;
+  new_->freefunc=freefunc;
+  new_->freefunc_data = freefunc_data;
+  *list = new_;
+}
+
+static inline int ctx_list_length (CtxList *list)
+{
+  int length = 0;
+  CtxList *l;
+  for (l = list; l; l = l->next, length++);
+  return length;
+}
+
+static inline void ctx_list_prepend (CtxList **list, void *data)
+{
+  CtxList *new_ = (CtxList*) ctx_calloc (sizeof (CtxList), 1);
+  new_->next= *list;
+  new_->data=data;
+  *list = new_;
+}
+
+static inline CtxList *ctx_list_nth (CtxList *list, int no)
+{
+  while (no-- && list)
+    { list = list->next; }
+  return list;
+}
+
+static inline void *ctx_list_nth_data (CtxList *list, int no)
+{
+  CtxList *l = ctx_list_nth (list, no);
+  if (l)
+    return l->data;
+  return NULL;
+}
+
+
+static inline void
+ctx_list_insert_before (CtxList **list, CtxList *sibling,
+                       void *data)
+{
+  if (*list == NULL || *list == sibling)
+    {
+      ctx_list_prepend (list, data);
+    }
+  else
+    {
+      CtxList *prev = NULL;
+      for (CtxList *l = *list; l; l=l->next)
+        {
+          if (l == sibling)
+            { break; }
+          prev = l;
+        }
+      if (prev)
+        {
+          CtxList *new_ = (CtxList*)ctx_calloc (sizeof (CtxList), 1);
+          new_->next = sibling;
+          new_->data = data;
+          prev->next=new_;
+        }
+    }
+}
+
+static inline void ctx_list_remove_link (CtxList **list, CtxList *link)
+{
+  CtxList *iter, *prev = NULL;
+  if ((*list) == link)
+    {
+      prev = (*list)->next;
+      *list = prev;
+      link->next = NULL;
+      return;
+    }
+  for (iter = *list; iter; iter = iter->next)
+    if (iter == link)
+      {
+        if (prev)
+          prev->next = iter->next;
+        link->next = NULL;
+        return;
+      }
+    else
+      prev = iter;
+}
+
+static inline void ctx_list_remove (CtxList **list, void *data)
+{
+  CtxList *iter, *prev = NULL;
+  if ((*list)->data == data)
+    {
+      if ((*list)->freefunc)
+        (*list)->freefunc ((*list)->data, (*list)->freefunc_data);
+      prev = (*list)->next;
+      ctx_free (*list);
+      *list = prev;
+      return;
+    }
+  for (iter = *list; iter; iter = iter->next)
+    if (iter->data == data)
+      {
+        if (iter->freefunc)
+          iter->freefunc (iter->data, iter->freefunc_data);
+        prev->next = iter->next;
+        ctx_free (iter);
+        break;
+      }
+    else
+      prev = iter;
+}
+
+static inline void ctx_list_free (CtxList **list)
+{
+  while (*list)
+    ctx_list_remove (list, (*list)->data);
+}
+
+static inline void
+ctx_list_reverse (CtxList **list)
+{
+  CtxList *new_ = NULL;
+  CtxList *l;
+  for (l = *list; l; l=l->next)
+    ctx_list_prepend (&new_, l->data);
+  ctx_list_free (list);
+  *list = new_;
+}
+
+static inline void *ctx_list_last (CtxList *list)
+{
+  if (list)
+    {
+      CtxList *last;
+      for (last = list; last->next; last=last->next);
+      return last->data;
+    }
+  return NULL;
+}
+
+static inline void ctx_list_concat (CtxList **list, CtxList *list_b)
+{
+  if (*list)
+    {
+      CtxList *last;
+      for (last = *list; last->next; last=last->next);
+      last->next = list_b;
+      return;
+    }
+  *list = list_b;
+}
+
+static inline void ctx_list_append_full (CtxList **list, void *data,
+    void (*freefunc)(void *data, void *freefunc_data),
+    void *freefunc_data)
+{
+  CtxList *new_ = (CtxList*) ctx_calloc (sizeof (CtxList), 1);
+  new_->data=data;
+  new_->freefunc = freefunc;
+  new_->freefunc_data = freefunc_data;
+  ctx_list_concat (list, new_);
+}
+
+static inline void ctx_list_append (CtxList **list, void *data)
+{
+  ctx_list_append_full (list, data, NULL, NULL);
+}
+
+static inline void
+ctx_list_insert_at (CtxList **list,
+                    int       no,
+                    void     *data)
+{
+  if (*list == NULL || no == 0)
+    {
+      ctx_list_prepend (list, data);
+    }
+  else
+    {
+      int pos = 0;
+      CtxList *prev = NULL;
+      CtxList *sibling = NULL;
+      for (CtxList *l = *list; l && pos < no; l=l->next)
+        {
+          prev = sibling;
+          sibling = l;
+          pos ++;
+        }
+      if (prev)
+        {
+          CtxList *new_ = (CtxList*)ctx_calloc (sizeof (CtxList), 1);
+          new_->next = sibling;
+          new_->data = data;
+          prev->next=new_;
+          return;
+        }
+      ctx_list_append (list, data);
+    }
+}
+
+static CtxList*
+ctx_list_merge_sorted (CtxList* list1,
+                       CtxList* list2,
+    int(*compare)(const void *a, const void *b, void *userdata), void *userdata
+)
+{
+  if (list1 == NULL)
+     return(list2);
+  else if (list2==NULL)
+     return(list1);
+
+  if (compare (list1->data, list2->data, userdata) >= 0)
+  {
+    list1->next = ctx_list_merge_sorted (list1->next,list2, compare, userdata);
+    /*list1->next->prev = list1;
+      list1->prev = NULL;*/
+    return list1;
+  }
+  else
+  {
+    list2->next = ctx_list_merge_sorted (list1,list2->next, compare, userdata);
+    /*list2->next->prev = list2;
+      list2->prev = NULL;*/
+    return list2;
+  }
+}
+
+static void
+ctx_list_split_half (CtxList*  head,
+                     CtxList** list1,
+                     CtxList** list2)
+{
+  CtxList* fast;
+  CtxList* slow;
+  if (head==NULL || head->next==NULL)
+  {
+    *list1 = head;
+    *list2 = NULL;
+  }
+  else
+  {
+    slow = head;
+    fast = head->next;
+
+    while (fast != NULL)
+    {
+      fast = fast->next;
+      if (fast != NULL)
+      {
+        slow = slow->next;
+        fast = fast->next;
+      }
+    }
+
+    *list1 = head;
+    *list2 = slow->next;
+    slow->next = NULL;
+  }
+}
+
+static inline void ctx_list_sort (CtxList **head,
+    int(*compare)(const void *a, const void *b, void *userdata),
+    void *userdata)
+{
+  CtxList* list1;
+  CtxList* list2;
+
+  /* Base case -- length 0 or 1 */
+  if ((*head == NULL) || ((*head)->next == NULL))
+  {
+    return;
+  }
+
+  ctx_list_split_half (*head, &list1, &list2);
+  ctx_list_sort (&list1, compare, userdata);
+  ctx_list_sort (&list2, compare, userdata);
+  *head = ctx_list_merge_sorted (list1, list2, compare, userdata);
+}
+
+static inline void ctx_list_insert_sorted (CtxList **list,
+                                           void     *item,
+    int(*compare)(const void *a, const void *b, void *userdata),
+                                           void     *userdata)
+{
+  ctx_list_prepend (list, item);
+  ctx_list_sort (list, compare, userdata);
+}
+
+
+static inline CtxList *ctx_list_find_custom (CtxList *list,
+                                         void    *needle,
+                                         int(*compare)(const void *a, const void *b),
+                                         void *userdata)
+{
+  CtxList *l;
+  for (l = list; l; l = l->next)
+  {
+    if (compare (l->data, needle) == 0)
+      return l;
+  }
+  return NULL;
+}
+
+#endif
+/* definitions that determine which features are included and their settings,
+ * for particular platforms - in particular microcontrollers ctx might need
+ * tuning for different quality/performance/resource constraints.
+ *
+ * the way to configure ctx is to set these defines, before both including it
+ * as a header and in the file where CTX_IMPLEMENTATION is set to include the
+ * implementation for different featureset and runtime settings.
+ *
+ */
+
+/* whether the font rendering happens in backend or front-end of API, the
+ * option is used set to 0 by the tool that converts ttf fonts to ctx internal
+ * representation - both should be possible so that this tool can be made
+ * into a TTF/OTF font import at runtime (perhaps even with live subsetting).
+ *
+ * improving this feature and making it runtime selectable could also
+ * be part of encoding all text as beziers upon pdf export
+ */
+#ifndef CTX_BACKEND_TEXT
+#define CTX_BACKEND_TEXT 1
+#endif
+
+
+#define CTX_RASTERIZER_AA_SLOPE_LIMIT3           (65536/CTX_SUBDIV/15)
+#define CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA   (65536/CTX_SUBDIV/15)
+//#define CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA (120536/CTX_SUBDIV/15)
+//#define CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA (105000/CTX_SUBDIV/15)
+#define CTX_RASTERIZER_AA_SLOPE_LIMIT5           (140425/CTX_SUBDIV/15)
+#define CTX_RASTERIZER_AA_SLOPE_LIMIT15          (260425/CTX_SUBDIV/15)
+
+/* subpixel-aa coordinates used in BITPACKing of drawlist
+ *
+ * powers of 2 is faster
+ */
+#ifndef CTX_SUBDIV
+#define CTX_SUBDIV   8  //  max framebufer width 4095
+//#define CTX_SUBDIV  10  //  max framebufer width 3250
+//#define CTX_SUBDIV  16  //  max framebufer width 2047
+//#define CTX_SUBDIV  24  //  max framebufer width 1350
+//#define CTX_SUBDIV  32  //  max framebufer width 1023
+#endif
+
+
+// 8    12 68 40 24
+// 16   12 68 40 24
+/* scale-factor for font outlines prior to bit quantization by CTX_SUBDIV
+ *
+ * changing this also changes font file format - the value should be baked
+ * into the ctxf files making them less dependent on the ctx used to
+ * generate them
+ */
+#define CTX_BAKE_FONT_SIZE    160
+
+/* pack some linetos/curvetos/movetos into denser drawlist instructions,
+ * permitting more vectors to be stored in the same space, experimental
+ * feature with added overhead.
+ */
+#ifndef CTX_BITPACK
+#define CTX_BITPACK           1
+#endif
+
+/* whether we have a shape-cache where we keep pre-rasterized bitmaps of
+ * commonly occuring small shapes, disabled by default since it has some
+ * glitches (and potential hangs with multi threading).
+ */
+#ifndef CTX_SHAPE_CACHE
+#define CTX_SHAPE_CACHE        0
+#endif
+
+
+#ifndef CTX_SHAPE_CACHE_DEFAULT // the default set runtime value
+                                // when enabled
+#define CTX_SHAPE_CACHE_DEFAULT   0
+#endif
+
+/* size (in pixels, w*h) that we cache rasterization for
+ */
+#ifndef CTX_SHAPE_CACHE_DIM
+#define CTX_SHAPE_CACHE_DIM      (64*64)
+#endif
+
+#ifndef CTX_SHAPE_CACHE_MAX_DIM
+#define CTX_SHAPE_CACHE_MAX_DIM  256
+#endif
+
+/* maximum number of entries in shape cache
+ */
+#ifndef CTX_SHAPE_CACHE_ENTRIES
+#define CTX_SHAPE_CACHE_ENTRIES  1024
+#endif
+
+
+#ifndef CTX_PARSER_FIXED_TEMP
+#define CTX_PARSER_FIXED_TEMP 0
+         // when 1  CTX_PARSER_MAXLEN is the fixed max stringlen
+#endif   // and no allocations happens beyond creating the parser,
+         // when 0 the scratchbuf for parsing is a separate dynamically
+         // growing buffer, that maxes out at CTX_PARSER_MAXLEN
+         //
+#ifndef CTX_PARSER_MAXLEN
+#if CTX_PARSER_FIXED_TEMP
+#define CTX_PARSER_MAXLEN  1024*128        // This is the maximum texture/string size supported
+#else
+#define CTX_PARSER_MAXLEN  1024*1024*16    // 16mb
+#endif
+#endif
+
+
+#ifndef CTX_FAST_FILL_RECT
+#define CTX_FAST_FILL_RECT 1    /*  matters most for tiny rectangles where it shaves overhead, for larger rectangles
+                                    a ~15-20% performance win can be seen. */
+#endif
+
+
+#ifndef CTX_COMPOSITING_GROUPS
+#define CTX_COMPOSITING_GROUPS   1
+#endif
+
+/* maximum nesting level of compositing groups
+ */
+#ifndef CTX_GROUP_MAX
+#define CTX_GROUP_MAX             8
+#endif
+
+#ifndef CTX_ENABLE_CLIP
+#define CTX_ENABLE_CLIP           1
+#endif
+
+/* use a 1bit clip buffer, saving RAM on microcontrollers, other rendering
+ * will still be antialiased.
+ */
+#ifndef CTX_1BIT_CLIP
+#define CTX_1BIT_CLIP             0
+#endif
+
+
+#ifndef CTX_ENABLE_SHADOW_BLUR
+#define CTX_ENABLE_SHADOW_BLUR    0
+#endif
+
+#ifndef CTX_GRADIENTS
+#define CTX_GRADIENTS             1
+#endif
+
+#ifndef CTX_ALIGNED_STRUCTS
+#define CTX_ALIGNED_STRUCTS       1
+#endif
+
+#ifndef CTX_GRADIENT_CACHE
+#define CTX_GRADIENT_CACHE        1
+#endif
+
+#ifndef CTX_FONTS_FROM_FILE
+#define CTX_FONTS_FROM_FILE  0
+#endif
+
+#ifndef CTX_GET_CONTENTS
+#if CTX_FONTS_FROM_FILE
+#define CTX_GET_CONTENTS    1
+#else
+#define CTX_GET_CONTENTS    0
+#endif
+#endif
+
+#ifndef CTX_FORMATTER
+#define CTX_FORMATTER       1
+#endif
+
+#ifndef CTX_PARSER
+#define CTX_PARSER          1
+#endif
+
+#ifndef CTX_CURRENT_PATH
+#define CTX_CURRENT_PATH    1
+#endif
+
+#ifndef CTX_XML
+#define CTX_XML             1
+#endif
+
+#ifndef CTX_CLIENTS
+#define CTX_CLIENTS              0
+#endif
+
+/* when ctx_math is defined, which it is by default, we use ctx' own
+ * implementations of math functions, instead of relying on math.h
+ * the possible inlining gives us a slight speed-gain, and on
+ * embedded platforms guarantees that we do not do double precision
+ * math.
+ */
+#ifndef CTX_MATH
+#define CTX_MATH           1  // use internal fast math for sqrt,sin,cos,atan2f etc.
+#endif
+
+#define ctx_log(fmt, ...)
+//#define ctx_log(str, a...) fprintf(stderr, str, ##a)
+
+/* the initial journal size - for both rasterizer
+ * edgelist and drawlist.
+ */
+#ifndef CTX_MIN_JOURNAL_SIZE
+#define CTX_MIN_JOURNAL_SIZE      512
+#endif
+
+/* The maximum size we permit the drawlist to grow to,
+ * the memory used is this number * 9, where 9 is sizeof(CtxEntry)
+ */
+#ifndef CTX_MAX_JOURNAL_SIZE
+//#define CTX_MAX_JOURNAL_SIZE   CTX_MIN_JOURNAL_SIZE
+#define CTX_MAX_JOURNAL_SIZE 1024*1024*8
+#endif
+
+#ifndef CTX_DRAWLIST_STATIC
+#define CTX_DRAWLIST_STATIC  0
+#endif
+
+#ifndef CTX_MIN_EDGE_LIST_SIZE
+#define CTX_MIN_EDGE_LIST_SIZE   2048*2
+#endif
+
+#ifndef CTX_RASTERIZER_AA
+#define CTX_RASTERIZER_AA 15   // vertical-AA of CTX_ANTIALIAS_DEFAULT
+#endif
+
+/* The maximum complexity of a single path
+ */
+#ifndef CTX_MAX_EDGE_LIST_SIZE
+#define CTX_MAX_EDGE_LIST_SIZE  CTX_MIN_EDGE_LIST_SIZE
+#endif
+
+#ifndef CTX_MAX_KEYDB
+#define CTX_MAX_KEYDB 64 // number of entries in keydb
+                         // entries are "copy-on-change" between states
+#endif
+
+#ifndef CTX_STRINGPOOL_SIZE
+  // XXX should be possible to make zero and disappear when codepaths not in use
+  //     to save size, for card10 this is defined as a low number (some text
+  //     properties still make use of it)
+  //     
+  //     for desktop-use this should be fully dynamic, possibly
+  //     with chained pools, gradients are stored here.
+#define CTX_STRINGPOOL_SIZE     1000 //
+#endif
+
+#ifndef CTX_32BIT_SEGMENTS
+#define CTX_32BIT_SEGMENTS 1  // without this clipping problems might
+                              // occur when drawing far outside the viewport
+                              // or with large translate amounts
+                              // on micro controllers you most often will
+                              // want this set to 0
+#endif
+
+/* whether we dither or not for gradients
+ */
+#ifndef CTX_DITHER
+#define CTX_DITHER 0
+#endif
+
+/*  only source-over clear and copy will work, the API still
+ *  through - but the backend is limited, for use to measure
+ *  size and possibly in severely constrained ROMs.
+ */
+#ifndef CTX_BLENDING_AND_COMPOSITING
+#define CTX_BLENDING_AND_COMPOSITING 1
+#endif
+
+/*  this forces the inlining of some performance
+ *  critical paths.
+ */
+#ifndef CTX_FORCE_INLINES
+#define CTX_FORCE_INLINES               1
+#endif
+
+/* create one-off inlined inner loop for normal blend mode (for floating point,
+ * and grayscale for RGBA8 manual loops overrrides. Disabling this should speed
+ * up compiles at penalty for the given formats.
+ */
+#ifndef CTX_INLINED_NORMAL     
+#define CTX_INLINED_NORMAL      0
+#endif
+
+/*
+ *  do not use manual RGBA8 code but rely on ctx inline templating
+ */
+#ifndef CTX_INLINED_NORMAL     
+#define CTX_INLINED_NORMAL_RGBA8  0
+#endif
+
+#ifndef CTX_RASTERIZER_SWITCH_DISPATCH
+#define CTX_RASTERIZER_SWITCH_DISPATCH  1 // marginal improvement for some
+                                          // modes, maybe get rid of this?
+#endif
+
+#ifndef CTX_U8_TO_FLOAT_LUT
+#define CTX_U8_TO_FLOAT_LUT  0
+#endif
+
+#ifndef CTX_INLINED_GRADIENTS
+#define CTX_INLINED_GRADIENTS   1
+#endif
+
+#ifndef CTX_BRAILLE_TEXT
+#define CTX_BRAILLE_TEXT        0
+#endif
+
+/* Build code paths for grayscale rasterization, this makes clipping
+ * faster.
+ */
+#ifndef CTX_NATIVE_GRAYA8
+#define CTX_NATIVE_GRAYA8       1
+#endif
+
+/* enable CMYK rasterization targets
+ */
+#ifndef CTX_ENABLE_CMYK
+#define CTX_ENABLE_CMYK         1
+#endif
+
+/* enable color management, slightly increases CtxColor struct size, can
+ * be disabled for microcontrollers.
+ */
+#ifndef CTX_ENABLE_CM
+#define CTX_ENABLE_CM           1
+#endif
+
+#ifndef CTX_EVENTS
+#define CTX_EVENTS              1
+#endif
+
+#ifndef CTX_AVOID_CLIPPED_SUBDIVISION
+#define CTX_AVOID_CLIPPED_SUBDIVISION 0
+#endif
+
+#ifndef CTX_MAX_DEVICES
+#define CTX_MAX_DEVICES 16
+#endif
+
+#ifndef CTX_MAX_KEYBINDINGS
+#define CTX_MAX_KEYBINDINGS 256
+#endif
+
+
+#ifndef CTX_PROTOCOL_U8_COLOR
+#define CTX_PROTOCOL_U8_COLOR 0
+#endif
+
+#ifndef CTX_TERMINAL_EVENTS
+#if CTX_EVENTS
+#define CTX_TERMINAL_EVENTS 1
+#else
+#define CTX_TERMINAL_EVENTS 0
+#endif
+#endif
+
+#ifndef CTX_LIMIT_FORMATS
+#define CTX_LIMIT_FORMATS       0
+#endif
+
+#ifndef CTX_ENABLE_FLOAT
+#define CTX_ENABLE_FLOAT        0
+#endif
+
+/* by default ctx includes all pixel formats, on microcontrollers
+ * it can be useful to slim down code and runtime size by only
+ * defining the used formats, set CTX_LIMIT_FORMATS to 1, and
+ * manually add CTX_ENABLE_ flags for each of them.
+ */
+#if CTX_LIMIT_FORMATS
+#if CTX_NATIVE_GRAYA8
+#define CTX_ENABLE_GRAYA8               1
+#define CTX_ENABLE_GRAY8                1
+#endif
+#else
+
+#define CTX_ENABLE_GRAY1                1
+#define CTX_ENABLE_GRAY2                1
+#define CTX_ENABLE_GRAY4                1
+#define CTX_ENABLE_GRAY8                1
+#define CTX_ENABLE_GRAYA8               1
+#define CTX_ENABLE_GRAYF                1
+#define CTX_ENABLE_GRAYAF               1
+
+#define CTX_ENABLE_RGB8                 1
+#define CTX_ENABLE_RGBA8                1
+#define CTX_ENABLE_BGRA8                1
+#define CTX_ENABLE_RGB332               1
+#define CTX_ENABLE_RGB565               1
+#define CTX_ENABLE_RGB565_BYTESWAPPED   1
+#define CTX_ENABLE_RGBAF                1
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT                1
+#define CTX_ENABLE_YUV420               1
+
+#if CTX_ENABLE_CMYK
+#define CTX_ENABLE_CMYK8                1
+#define CTX_ENABLE_CMYKA8               1
+#define CTX_ENABLE_CMYKAF               1
+#endif
+#endif
+
+#ifndef CTX_RGB565_ALPHA
+#define CTX_RGB565_ALPHA                0   // when enabled pure purple is transparent,
+                                            // for a ~15% overall performance hit
+#endif
+
+#ifndef CTX_RGB332_ALPHA
+#define CTX_RGB332_ALPHA                0   // when enabled pure purple is transparent,
+                                            // for a ~15% overall performance hit
+#endif
+
+
+/* by including ctx-font-regular.h, or ctx-font-mono.h the
+ * built-in fonts using ctx drawlist encoding is enabled
+ */
+#ifndef CTX_NO_FONTS
+#ifndef CTX_FONT_ENGINE_CTX
+#define CTX_FONT_ENGINE_CTX        1
+#endif
+#endif
+
+#ifndef CTX_ONE_FONT_ENGINE
+#define CTX_ONE_FONT_ENGINE 0
+#endif
+
+
+#ifndef CTX_FONT_ENGINE_CTX_FS
+#define CTX_FONT_ENGINE_CTX_FS 0
+#endif
+
+/* If stb_strutype.h is included before ctx.h add integration code for runtime loading
+ * of opentype fonts.
+ */
+#ifdef __STB_INCLUDE_STB_TRUETYPE_H__
+#ifndef CTX_FONT_ENGINE_STB
+#define CTX_FONT_ENGINE_STB        1
+#endif
+#else
+#define CTX_FONT_ENGINE_STB        0
+#endif
+
+#ifndef CTX_BABL
+#ifdef _BABL_H
+#define CTX_BABL 1
+#else
+#define CTX_BABL 0
+#endif
+#endif
+
+#ifndef _BABL_H
+#undef CTX_BABL
+#define CTX_BABL 0
+#endif
+
+#ifndef CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+#define CTX_ALWAYS_USE_NEAREST_FOR_SCALE1 0
+#endif
+
+/* force add format if we have shape cache */
+#if CTX_SHAPE_CACHE
+#ifdef CTX_ENABLE_GRAY8
+#undef CTX_ENABLE_GRAY8
+#endif
+#define CTX_ENABLE_GRAY8  1
+#endif
+
+/* include the bitpack packer, can be opted out of to decrease code size
+ */
+#ifndef CTX_BITPACK_PACKER
+#define CTX_BITPACK_PACKER 0
+#endif
+
+/* enable RGBA8 intermediate format for
+ *the indirectly implemented pixel-formats.
+ */
+#if CTX_ENABLE_GRAY1 | CTX_ENABLE_GRAY2 | CTX_ENABLE_GRAY4 | CTX_ENABLE_RGB565 | CTX_ENABLE_RGB565_BYTESWAPPED | CTX_ENABLE_RGB8 | CTX_ENABLE_RGB332
+
+  #ifdef CTX_ENABLE_RGBA8
+    #undef CTX_ENABLE_RGBA8
+  #endif
+  #define CTX_ENABLE_RGBA8  1
+#endif
+
+#ifdef CTX_ENABLE_CMYKF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+#ifdef CTX_ENABLE_GRAYF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+#ifdef CTX_ENABLE_GRAYAF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+#ifdef CTX_ENABLE_RGBAF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+#ifdef CTX_ENABLE_CMYKAF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+#ifdef CTX_ENABLE_CMYKF
+#ifdef CTX_ENABLE_FLOAT
+#undef CTX_ENABLE_FLOAT
+#endif
+#define CTX_ENABLE_FLOAT 1
+#endif
+
+
+/* enable cmykf which is cmyk intermediate format
+ */
+#ifdef CTX_ENABLE_CMYK8
+#ifdef CTX_ENABLE_CMYKF
+#undef CTX_ENABLE_CMYKF
+#endif
+#define CTX_ENABLE_CMYKF  1
+#endif
+#ifdef CTX_ENABLE_CMYKA8
+#ifdef CTX_ENABLE_CMYKF
+#undef CTX_ENABLE_CMYKF
+#endif
+#define CTX_ENABLE_CMYKF  1
+#endif
+
+#ifdef CTX_ENABLE_CMYKF8
+#ifdef CTX_ENABLE_CMYK
+#undef CTX_ENABLE_CMYK
+#endif
+#define CTX_ENABLE_CMYK   1
+#endif
+
+#define CTX_PI                              3.141592653589793f
+#ifndef CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS
+#define CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS  (128)
+#endif
+
+#ifndef CTX_MAX_FRAMEBUFFER_WIDTH
+#define CTX_MAX_FRAMEBUFFER_WIDTH 2560
+#endif
+
+#ifndef CTX_MAX_FONTS
+#define CTX_MAX_FONTS            32
+#endif
+
+#ifndef CTX_GLYPH_CACHE
+#define CTX_GLYPH_CACHE 1
+#endif
+
+#ifndef CTX_GLYPH_CACHE_SIZE
+#define CTX_GLYPH_CACHE_SIZE  128
+#endif
+
+#ifndef CTX_MAX_STATES
+#define CTX_MAX_STATES           10
+#endif
+
+#ifndef CTX_MAX_EDGES
+#define CTX_MAX_EDGES            257
+#endif
+
+#ifndef CTX_MAX_LINGERING_EDGES
+#define CTX_MAX_LINGERING_EDGES  64
+#endif
+
+
+#ifndef CTX_MAX_PENDING
+#define CTX_MAX_PENDING          128
+#endif
+
+#ifndef CTX_MAX_TEXTURES
+#define CTX_MAX_TEXTURES         32
+#endif
+
+#ifndef CTX_HASH_ROWS
+#define CTX_HASH_ROWS            6
+#endif
+#ifndef CTX_HASH_COLS
+#define CTX_HASH_COLS            5
+#endif
+
+#ifndef CTX_INLINE_FILL_RULE
+#define CTX_INLINE_FILL_RULE 1
+#endif
+
+#ifndef CTX_MAX_THREADS
+#define CTX_MAX_THREADS          8 // runtime is max of cores/2 and this
+#endif
+
+#ifndef CTX_FRAGMENT_SPECIALIZE
+#define CTX_FRAGMENT_SPECIALIZE 1
+#endif
+
+#define CTX_RASTERIZER_EDGE_MULTIPLIER  1024
+                                        // increasing this to 2048
+                                        // removes artifacts in top half of res-diagram -
+                                        // but reduces maximum available buffer width
+#ifndef CTX_IMPLEMENTATION
+#define CTX_IMPLEMENTATION 0
+#else
+#undef CTX_IMPLEMENTATION
+#define CTX_IMPLEMENTATION 1
+#endif
+
+#ifndef CTX_MAX_SCANLINE_LENGTH
+#define CTX_MAX_SCANLINE_LENGTH 4096
+#endif
+
+
+#ifndef CTX_MAX_CBS
+#define CTX_MAX_CBS              1 //128
+#endif
+
+#ifndef static_OPAQUE // causes a CTX_MAX_SCANLINE_LENGTH
+                          // buffer of 255 bytes to be part of
+                          // rasterizer
+#define static_OPAQUE 1
+#endif
+
+#ifndef CTX_SYNC_FRAMES
+#define CTX_SYNC_FRAMES  1
+#endif
+
+#ifdef CTX_RASTERIZER
+#if CTX_RASTERIZER==0
+#if CTX_SDL || CTX_FB || CTX_HEADLESS
+#undef CTX_RASTERIZER
+#define CTX_RASTERIZER 1
+#endif
+#else
+#undef CTX_RASTERIZER
+#define CTX_RASTERIZER 1
+#endif
+#endif
+
+#if CTX_SDL || CTX_FB || CTX_HEADLESS
+#if CTX_EVENTS
+#undef CTX_EVENTS
+#endif
+#define CTX_EVENTS 1
+#endif
+
+
+
+
+#ifndef CTX_HEADLESS
+
+#if CTX_FB || CTX_SDL || CTX_KMS
+#define CTX_HEADLESS 1
+#endif
+#endif
+
+
+#ifndef CTX_GRADIENT_CACHE_ELEMENTS
+#define CTX_GRADIENT_CACHE_ELEMENTS 256
+#endif
+
+#ifndef CTX_PARSER_MAX_ARGS
+#define CTX_PARSER_MAX_ARGS 20
+#endif
+
+#ifndef CTX_MAX_DASHES
+#define CTX_MAX_DASHES CTX_PARSER_MAX_ARGS
+#endif
+
+#ifndef CTX_SCREENSHOT
+#define CTX_SCREENSHOT 0
+#endif
+
+#ifndef CTX_ALSA
+#define CTX_ALSA 0
+#endif
+
+#ifndef CTX_AUDIO
+#define CTX_AUDIO 0
+#endif
+
+#if CTX_AUDIO==0
+#if CTX_ALSA
+#undef CTX_ALSA
+#define CTX_ALSA 0
+#endif
+#endif
+
+#ifndef CTX_CURL
+#define CTX_CURL 0
+#endif
+
+#ifndef CTX_TILED
+#if CTX_SDL || CTX_FB || CTX_KMS || CTX_HEADLESS
+#define CTX_TILED 1
+#else
+#define CTX_TILED 0
+#endif
+#if !CTX_RASTERIZER
+#undef CTX_RASTERIZER
+#define CTX_RASTERIZER 1
+#endif
+#endif
+
+
+#ifndef CTX_TILED_MERGE_HORIZONTAL_NEIGHBORS
+#define CTX_TILED_MERGE_HORIZONTAL_NEIGHBORS 1
+#endif
+
+
+#ifndef CTX_THREADS
+#if CTX_TILED
+#define CTX_THREADS 1
+#else
+#define CTX_THREADS 0
+#endif
+#endif
+
+#if CTX_THREADS
+#include <pthread.h>
+#define mtx_lock pthread_mutex_lock
+#define mtx_unlock pthread_mutex_unlock
+#define mtx_t pthread_mutex_t
+#define cnd_t pthread_cond_t
+#define mtx_plain NULL
+#define mtx_init pthread_mutex_init
+#define cnd_init(a) pthread_cond_init(a,NULL)
+#define cnd_wait pthread_cond_wait
+#define cnd_broadcast pthread_cond_broadcast
+#define thrd_create(tid, tiled_render_fun, args) pthread_create(tid, NULL, tiled_render_fun, args)
+#define thrd_t pthread_t
+#endif
+
+#ifndef CTX_SIMD_SUFFIX
+#define CTX_SIMD_SUFFIX(symbol) symbol##_generic
+#define CTX_SIMD_BUILD 0
+#else
+
+
+#define CTX_SIMD_BUILD 1
+#ifdef CTX_COMPOSITE
+#undef CTX_COMPOSITE
+#define CTX_COMPOSITE 1
+#endif
+
+#endif
+
+
+#if CTX_RASTERIZER
+#ifndef CTX_COMPOSITE
+#define CTX_COMPOSITE 1
+#endif
+#else
+#ifndef CTX_COMPOSITE
+#define CTX_COMPOSITE 0
+#endif
+#endif
+
+#ifndef CTX_COMPOSITE
+#define CTX_COMPOSITE 0
+#endif
+
+#ifndef CTX_MAX_GRADIENT_STOPS
+#define CTX_MAX_GRADIENT_STOPS 16
+#endif
+
+#ifndef CTX_BRANCH_HINTS
+#define CTX_BRANCH_HINTS  1
+#endif
+
+#ifdef EMSCRIPTEN
+#define CTX_WASM 1
+#else
+#define CTX_WASM 0
+#endif
+
+#ifndef CTX_MAX_LISTEN_FDS
+#define CTX_MAX_LISTEN_FDS 128 // becomes max clients..
+#endif
+
+#if CTX_WASM
+#undef CTX_THREADS
+#define CTX_THREADS 0
+#undef CTX_HEADLESS
+#define CTX_HEADLESS 0
+#undef CTX_TILED
+#define CTX_TILED 0
+#undef CTX_EVENTS
+#define CTX_EVENTS 1
+#undef CTX_PARSER
+#define CTX_PARSER 1
+#undef CTX_RASTERIZER
+#define CTX_RASTERIZER 1
+#undef CTX_SHAPE_CACHE
+#define CTX_SHAPE_CACHE 0
+#endif
+
+#ifndef CTX_TINYVG
+#define CTX_TINYVG 0
+#endif
+
+#ifndef CTX_PDF
+#define CTX_PDF 0
+#endif
+
+#define uncompress tinf_uncompress
+#define Z_OK TINF_OK
+#define Z_BUF_ERROR TINF_BUF_ERROR
+#define Z_DATA_ERROR TINF_DATA_ERROR
+
+#ifndef CTX_ENABLE_CBRLE
+#define CTX_ENABLE_CBRLE 0
+#endif
+
+
+#ifndef CTX_RAW_KB_EVENTS
+#define CTX_RAW_KB_EVENTS 1
+#endif
+
+#ifndef CTX_BAREMETAL
+#define CTX_BAREMETAL 0
+#endif
+
+ /* Copyright (C) 2020 Øyvind Kolås <pippin@gimp.org>
+ */
+
+#if CTX_FORMATTER
+
+/* returns the maximum string length including terminating \0 */
+int ctx_a85enc_len (int input_length);
+int ctx_a85enc (const void *srcp, char *dst, int count);
+
+#if CTX_PARSER
+
+int ctx_a85dec (const char *src, char *dst, int count);
+int ctx_a85len (const char *src, int count);
+#endif
+
+#endif
+#ifndef __CTX_EXTRA_H
+#define __CTX_EXTRA_H
+
+#if CTX_FORCE_INLINES
+#define CTX_INLINE inline __attribute__((always_inline))
+#else
+#define CTX_INLINE inline
+#endif
+
+
+#define CTX_CLAMP(val,min,max) ((val)<(min)?(min):(val)>(max)?(max):(val))
+static CTX_INLINE int   ctx_mini (int a, int b)     { return (a < b) * a + (a >= b) * b; }
+static CTX_INLINE float ctx_minf (float a, float b) { return (a < b) * a + (a >= b) * b; }
+static CTX_INLINE int   ctx_maxi (int a, int b)     { return (a > b) * a + (a <= b) * b; }
+static CTX_INLINE float ctx_maxf (float a, float b) { return (a > b) * a + (a <= b) * b; }
+static CTX_INLINE float ctx_clampf (float v, float min, float max) {
+       return CTX_CLAMP(v,min,max);
+}
+
+
+typedef enum CtxOutputmode
+{
+  CTX_OUTPUT_MODE_QUARTER,
+  CTX_OUTPUT_MODE_BRAILLE,
+  CTX_OUTPUT_MODE_SIXELS,
+  CTX_OUTPUT_MODE_GRAYS,
+  CTX_OUTPUT_MODE_CTX,
+  CTX_OUTPUT_MODE_CTX_COMPACT,
+  CTX_OUTPUT_MODE_CTX_FILE,
+  CTX_OUTPUT_MODE_CTX_COMPACT_FILE,
+  CTX_OUTPUT_MODE_UI
+} CtxOutputmode;
+
+
+
+
+
+
+static inline float ctx_pow2 (float a) { return a * a; }
+#if CTX_MATH
+
+static CTX_INLINE float
+ctx_fabsf (float x)
+{
+  union
+  {
+    float f;
+    uint32_t i;
+  } u = { x };
+  u.i &= 0x7fffffff;
+  return u.f;
+}
+
+static CTX_INLINE float
+ctx_invsqrtf (float x)
+{
+  union
+  {
+    float f;
+    uint32_t i;
+  } u = { x };
+  u.i = 0x5f3759df - (u.i >> 1);
+  u.f *= (1.5f - 0.5f * x * u.f * u.f);
+  u.f *= (1.5f - 0.5f * x * u.f * u.f); //repeating Newton-Raphson step for higher precision
+  return u.f;
+}
+
+static CTX_INLINE float
+ctx_invsqrtf_fast (float x)
+{
+  union
+  {
+    float f;
+    uint32_t i;
+  } u = { x };
+  u.i = 0x5f3759df - (u.i >> 1);
+  return u.f;
+}
+
+CTX_INLINE static float ctx_sqrtf (float a)
+{
+  return 1.0f/ctx_invsqrtf (a);
+}
+
+CTX_INLINE static float ctx_sqrtf_fast (float a)
+{
+  return 1.0f/ctx_invsqrtf_fast (a);
+}
+
+CTX_INLINE static float ctx_hypotf (float a, float b)
+{
+  return ctx_sqrtf (ctx_pow2 (a)+ctx_pow2 (b) );
+}
+
+CTX_INLINE static float ctx_hypotf_fast (float a, float b)
+{
+  return ctx_sqrtf_fast (ctx_pow2 (a)+ctx_pow2 (b) );
+}
+
+CTX_INLINE static float
+ctx_sinf (float x)
+{
+  if (x < -CTX_PI * 2)
+    {
+      x = -x;
+      long ix = (long)(x / (CTX_PI * 2));
+      x = x - ix * CTX_PI * 2;
+      x = -x;
+    }
+  if (x < -CTX_PI * 1000)
+  {
+    x = -0.5;
+  }
+  if (x > CTX_PI * 1000)
+  {
+          // really large numbers tend to cause practically inifinite
+          // loops since the > CTX_PI * 2 seemingly fails
+    x = 0.5;
+  }
+  if (x > CTX_PI * 2)
+    { 
+      long ix = (long)(x / (CTX_PI * 2));
+      x = x - (ix * CTX_PI * 2);
+    }
+  while (x < -CTX_PI)
+    { x += CTX_PI * 2; }
+  while (x > CTX_PI)
+    { x -= CTX_PI * 2; }
+
+  /* source : http://mooooo.ooo/chebyshev-sine-approximation/ */
+  float coeffs[]=
+  {
+    -0.10132118f,           // x
+      0.0066208798f,         // x^3
+      -0.00017350505f,        // x^5
+      0.0000025222919f,      // x^7
+      -0.000000023317787f,    // x^9
+      0.00000000013291342f
+    }; // x^11
+  float x2 = x*x;
+  float p11 = coeffs[5];
+  float p9  = p11*x2 + coeffs[4];
+  float p7  = p9*x2  + coeffs[3];
+  float p5  = p7*x2  + coeffs[2];
+  float p3  = p5*x2  + coeffs[1];
+  float p1  = p3*x2  + coeffs[0];
+  return (x - CTX_PI + 0.00000008742278f) *
+         (x + CTX_PI - 0.00000008742278f) * p1 * x;
+}
+
+static CTX_INLINE float ctx_atan2f (float y, float x)
+{
+  float atan, z;
+  if ( x == 0.0f )
+    {
+      if ( y > 0.0f )
+        { return CTX_PI/2; }
+      if ( y == 0.0f )
+        { return 0.0f; }
+      return -CTX_PI/2;
+    }
+  z = y/x;
+  if ( ctx_fabsf ( z ) < 1.0f )
+    {
+      atan = z/ (1.0f + 0.28f*z*z);
+      if (x < 0.0f)
+        {
+          if ( y < 0.0f )
+            { return atan - CTX_PI; }
+          return atan + CTX_PI;
+        }
+    }
+  else
+    {
+      atan = CTX_PI/2 - z/ (z*z + 0.28f);
+      if ( y < 0.0f ) { return atan - CTX_PI; }
+    }
+  return atan;
+}
+
+
+static CTX_INLINE float ctx_atanf (float a)
+{
+  return ctx_atan2f ( (a), 1.0f);
+}
+
+static CTX_INLINE float ctx_asinf (float x)
+{
+  return ctx_atanf ( (x) * (ctx_invsqrtf (1.0f-ctx_pow2 (x) ) ) );
+}
+
+static CTX_INLINE float ctx_acosf (float x)
+{
+  return ctx_atanf ( (ctx_sqrtf (1.0f-ctx_pow2 (x) ) / (x) ) );
+}
+
+CTX_INLINE static float ctx_cosf (float a)
+{
+  return ctx_sinf ( (a) + CTX_PI/2.0f);
+}
+
+static CTX_INLINE float ctx_tanf (float a)
+{
+  return (ctx_cosf (a) /ctx_sinf (a) );
+}
+static CTX_INLINE float
+ctx_floorf (float x)
+{
+  return (int)x; // XXX
+}
+static CTX_INLINE float
+ctx_expf (float x)
+{
+  union { uint32_t i; float f; } v =
+    {  (uint32_t)( (1 << 23) * (x + 183.1395965f)) };
+  return v.f;
+}
+
+/* define more trig based on having sqrt, sin and atan2 */
+
+#else
+#if !__COSMOPOLITAN__
+#include <math.h>
+#endif
+static inline float ctx_fabsf (float x)           { return fabsf (x); }
+static inline float ctx_floorf (float x)          { return floorf (x); }
+static inline float ctx_asinf (float x)            { return asinf (x); }
+static inline float ctx_sinf (float x)            { return sinf (x); }
+static inline float ctx_atan2f (float y, float x) { return atan2f (y, x); }
+static inline float ctx_hypotf (float a, float b) { return hypotf (a, b); }
+static inline float ctx_acosf (float a)           { return acosf (a); }
+static inline float ctx_cosf (float a)            { return cosf (a); }
+static inline float ctx_tanf (float a)            { return tanf (a); }
+static inline float ctx_expf (float p)            { return expf (p); }
+static inline float ctx_sqrtf (float a)           { return sqrtf (a); }
+
+static inline float ctx_hypotf_fast (float a, float b)
+{
+  return ctx_sqrtf (ctx_pow2 (a)+ctx_pow2 (b) );
+}
+#endif
+
+static inline float _ctx_parse_float (const char *str, char **endptr)
+{
+  return strtof (str, endptr); /* XXX: , vs . problem in some locales */
+}
+
+const char *ctx_get_string (Ctx *ctx, uint32_t hash);
+void ctx_set_string (Ctx *ctx, uint32_t hash, const char *value);
+typedef struct _CtxColor CtxColor;
+
+void
+ctx_matrix_translate (CtxMatrix *matrix, float x, float y);
+
+
+void ctx_get_matrix (Ctx *ctx, CtxMatrix *matrix);
+void ctx_set_matrix (Ctx *ctx, CtxMatrix *matrix);
+int _ctx_is_rasterizer (Ctx *ctx);
+
+int ctx_color (Ctx *ctx, const char *string);
+typedef struct _CtxState CtxState;
+CtxColor *ctx_color_new ();
+CtxState *ctx_get_state (Ctx *ctx);
+void ctx_color_get_rgba (CtxState *state, CtxColor *color, float *out);
+void ctx_color_set_rgba (CtxState *state, CtxColor *color, float r, float g, float b, float a);
+void ctx_color_free (CtxColor *color);
+void ctx_set_color (Ctx *ctx, uint32_t hash, CtxColor *color);
+int  ctx_get_color (Ctx *ctx, uint32_t hash, CtxColor *color);
+int  ctx_color_set_from_string (Ctx *ctx, CtxColor *color, const char *string);
+
+int ctx_color_is_transparent (CtxColor *color);
+int ctx_utf8_len (const unsigned char first_byte);
+
+void ctx_user_to_device          (Ctx *ctx, float *x, float *y);
+void ctx_user_to_device_distance (Ctx *ctx, float *x, float *y);
+
+
+void ctx_device_to_user          (Ctx *ctx, float *x, float *y);
+void ctx_device_to_user_distance (Ctx *ctx, float *x, float *y);
+
+const char *ctx_utf8_skip (const char *s, int utf8_length);
+int ctx_is_set_now (Ctx *ctx, uint32_t hash);
+void ctx_set_size (Ctx *ctx, int width, int height);
+
+static inline float ctx_matrix_get_scale (CtxMatrix *matrix)
+{
+   return ctx_maxf (ctx_maxf (ctx_fabsf (matrix->m[0][0]),
+                         ctx_fabsf (matrix->m[0][1]) ),
+               ctx_maxf (ctx_fabsf (matrix->m[1][0]),
+                         ctx_fabsf (matrix->m[1][1]) ) );
+}
+
+#if CTX_GET_CONTENTS
+int
+_ctx_file_get_contents (const char     *path,
+                        unsigned char **contents,
+                        long           *length);
+#endif
+
+#if CTX_FONTS_FROM_FILE
+int   ctx_load_font_ttf_file (const char *name, const char *path);
+#endif
+
+#if CTX_BABL
+void ctx_rasterizer_colorspace_babl (CtxState      *state,
+                                     CtxColorSpace  space_slot,
+                                     const Babl    *space);
+#endif
+void ctx_rasterizer_colorspace_icc (CtxState      *state,
+                                    CtxColorSpace  space_slot,
+                                    char          *icc_data,
+                                    int            icc_length);
+
+
+CtxBuffer *ctx_buffer_new_bare (void);
+
+void ctx_buffer_set_data (CtxBuffer *buffer,
+                          void *data, int width, int height,
+                          int stride,
+                          CtxPixelFormat pixel_format,
+                          void (*freefunc) (void *pixels, void *user_data),
+                          void *user_data);
+
+int _ctx_set_frame (Ctx *ctx, int frame);
+int _ctx_frame (Ctx *ctx);
+
+
+void ctx_exit (Ctx *ctx);
+void ctx_list_backends(void);
+int ctx_pixel_format_ebpp (CtxPixelFormat format);
+
+
+#endif
+#ifndef __CTX_CONSTANTS
+#define __CTX_CONSTANTS
+#define CTX_action 971612354u
+#define CTX_addStop 3805374936u
+#define CTX_alphabetic 2558771929u
+#define CTX_aqua 109634u
+#define CTX_arc 7298u
+#define CTX_arcTo 4138935887u
+#define CTX_beginPath 2384638508u
+#define CTX_bevel 25538884u
+#define CTX_black 23268100u
+#define CTX_blend 9317124u
+#define CTX_blending 3402343403u
+#define CTX_blendMode 3450578624u
+#define CTX_blue 371460u
+#define CTX_bottom 905225156u
+#define CTX_cap 32838u
+#define CTX_center 1219785030u
+#define CTX_clear 37825286u
+#define CTX_clip 1067782u
+#define CTX_closePath 3625577848u
+#define CTX_cmyk 772934u
+#define CTX_cmyka 2870086u
+#define CTX_cmykaS 3116500921u
+#define CTX_cmykS 934005574u
+#define CTX_cmykSpace 2661208064u
+#define CTX_color 38757318u
+#define CTX_colorSpace 2624117287u
+#define CTX_compositingMode 3625102151u
+#define CTX_copy 1672134u
+#define CTX_currentColor 2944012414u
+#define CTX_curveTo 3536162037u
+#define CTX_cyan 921158u
+#define CTX_darken 950767688u
+#define CTX_defineFont 2930064664u
+#define CTX_defineGlyph 3698027829u
+#define CTX_defineTexture 4201008335u
+#define CTX_destinationAtop 3609906960u
+#define CTX_destinationIn 2718725020u
+#define CTX_destinationOut 3944490553u
+#define CTX_destinationOver 2378926016u
+#define CTX_deviceCMYK 4096729420u
+#define CTX_deviceRGB 3975717407u
+#define CTX_difference 2530251746u
+#define CTX_done 357320u
+#define CTX_drgb 146568u
+#define CTX_drgba 2243720u
+#define CTX_drgbaS 2541895879u
+#define CTX_drgbS 933379208u
+#define CTX_drgbSpace 3152489160u
+#define CTX_end 9098u
+#define CTX_endFrame 3482141353u
+#define CTX_endGroup 3639210663u
+#define CTX_evenOdd 4065502508u
+#define CTX_exit 1330698u
+#define CTX_extend 298165770u
+#define CTX_fill 811596u
+#define CTX_fillRect 2617922007u
+#define CTX_fillRule 2727819936u
+#define CTX_font 1340364u
+#define CTX_fontSize 2516141542u
+#define CTX_fuchsia 3356500405u
+#define CTX_globalAlpha 3503999095u
+#define CTX_glyph 17877774u
+#define CTX_gradientAddStop 2707733066u
+#define CTX_gray 1641614u
+#define CTX_graya 3738766u
+#define CTX_grayaS 3152913809u
+#define CTX_grayS 934874254u
+#define CTX_green 29699214u
+#define CTX_hanging 3379012612u
+#define CTX_height 1359432016u
+#define CTX_horLineTo 2768557894u
+#define CTX_hue 11600u
+#define CTX_identity 4244560551u
+#define CTX_ideographic 4062138887u
+#define CTX_imageSmoothing 3391439578u
+#define CTX_join 936916u
+#define CTX_kerningPair 3655936472u
+#define CTX_lab 4184u
+#define CTX_laba 69720u
+#define CTX_labaS 933302360u
+#define CTX_labS 29167704u
+#define CTX_lch 16600u
+#define CTX_lcha 82136u
+#define CTX_lchaS 933314776u
+#define CTX_lchS 29180120u
+#define CTX_left 1323352u
+#define CTX_lighten 2243427702u
+#define CTX_lime 354904u
+#define CTX_linearGradient 2530643087u
+#define CTX_lineCap 4099906770u
+#define CTX_lineDash 2275747153u
+#define CTX_lineDashOffset 2164798257u
+#define CTX_lineHeight 2180215986u
+#define CTX_lineJoin 3149521206u
+#define CTX_lineTo 3995194545u
+#define CTX_lineWidth 4067116285u
+#define CTX_lower 38124504u
+#define CTX_lower 38124504u
+#define CTX_lowerBottom 4236857599u
+#define CTX_magenta 2383173845u
+#define CTX_maroon 972001370u
+#define CTX_maximize 4029307923u
+#define CTX_middle 360981082u
+#define CTX_miter 38117978u
+#define CTX_miterLimit 3784823268u
+#define CTX_moveTo 3135948887u
+#define CTX_multiply 2379318058u
+#define CTX_navy 1683548u
+#define CTX_newPage 3875814849u
+#define CTX_newPath 2442450175u
+#define CTX_newState 3540663677u
+#define CTX_none 357340u
+#define CTX_nonzero 2230085415u
+#define CTX_normal 808293340u
+#define CTX_olive 11946782u
+#define CTX_paint 42879072u
+#define CTX_purple 361796960u
+#define CTX_quadTo 3916306495u
+#define CTX_radialGradient 3218566169u
+#define CTX_raise 11749476u
+#define CTX_raise 11749476u
+#define CTX_raiseTop 3277017940u
+#define CTX_rect 1317220u
+#define CTX_rectangle 4111149391u
+#define CTX_red 8548u
+#define CTX_relArcTo 2940381656u
+#define CTX_relCurveTo 3745640049u
+#define CTX_relHorLineTo 2661057467u
+#define CTX_relLineTo 2437091951u
+#define CTX_relMoveTo 2527491593u
+#define CTX_relQuadTo 3961311908u
+#define CTX_relSmoothqTo 2913202089u
+#define CTX_relSmoothTo 3458671695u
+#define CTX_relVerLineTo 3868849192u
+#define CTX_restore 2936409475u
+#define CTX_rgb 4580u
+#define CTX_rgba 70116u
+#define CTX_rgbaS 933302756u
+#define CTX_rgbS 29168100u
+#define CTX_rgbSpace 3275074815u
+#define CTX_right 42482276u
+#define CTX_rotate 377594852u
+#define CTX_round 9350116u
+#define CTX_roundRectangle 3688082153u
+#define CTX_save 372838u
+#define CTX_scale 11274470u
+#define CTX_screen 950374630u
+#define CTX_setFontSize 2794810212u
+#define CTX_setLineCap 3062640202u
+#define CTX_setLineJoin 3876390174u
+#define CTX_setLineWidth 3835759450u
+#define CTX_shadowBlur 3119062524u
+#define CTX_shadowColor 3795289804u
+#define CTX_shadowOffsetX 4134163333u
+#define CTX_shadowOffsetY 3519010566u
+#define CTX_silver 1219912294u
+#define CTX_smoothQuadTo 4024936051u
+#define CTX_smoothTo 3997790061u
+#define CTX_sourceAtop 3201391080u
+#define CTX_sourceIn 3513756343u
+#define CTX_sourceOut 4217691207u
+#define CTX_sourceOver 4071274055u
+#define CTX_sourceTransform 3608891648u
+#define CTX_square 373402726u
+#define CTX_start 43126054u
+#define CTX_startFrame 4232434924u
+#define CTX_startGroup 4199711715u
+#define CTX_stroke 359634214u
+#define CTX_strokeRect 3918462693u
+#define CTX_strokeSource 3387288669u
+#define CTX_strokeText 4077103477u
+#define CTX_teal 788840u
+#define CTX_terminate 2614989576u
+#define CTX_text 1360232u
+#define CTX_textAlign 4087119491u
+#define CTX_textBaseline 3671121506u
+#define CTX_textDirection 2303324726u
+#define CTX_texture 2603404275u
+#define CTX_title 11313768u
+#define CTX_top 33768u
+#define CTX_transform 3717307466u
+#define CTX_translate 2746303805u
+#define CTX_transparent 3143361910u
+#define CTX_unmaximize 3478656422u
+#define CTX_userCMYK 4240023559u
+#define CTX_userRGB 2839509677u
+#define CTX_verLineTo 2881865279u
+#define CTX_viewBox 3661895848u
+#define CTX_white 11815470u
+#define CTX_width 18096750u
+#define CTX_winding 3743938776u
+#define CTX_wrapLeft 2742686349u
+#define CTX_wrapRight 2519274407u
+#define CTX_x 48u
+#define CTX_xor 37872u
+#define CTX_y 50u
+#define CTX_yellow 1575772530u
+#endif
+#ifndef __CTX_LIBC_H
+#define __CTX_LIBC_H
+
+#if !__COSMOPOLITAN__
+#include <stddef.h>
+#endif
+
+#if 0
+static inline void
+ctx_memset (void *ptr, uint8_t val, int length)
+{
+  uint8_t *p = (uint8_t *) ptr;
+  for (int i = 0; i < length; i ++)
+    { p[i] = val; }
+}
+#else
+#define ctx_memset memset
+#endif
+
+
+static inline void ctx_strcpy (char *dst, const char *src)
+{
+  int i = 0;
+  for (i = 0; src[i]; i++)
+    { dst[i] = src[i]; }
+  dst[i] = 0;
+}
+
+static inline char *_ctx_strchr (const char *haystack, char needle)
+{
+  const char *p = haystack;
+  while (*p && *p != needle)
+    {
+      p++;
+    }
+  if (*p == needle)
+    { return (char *) p; }
+  return NULL;
+}
+static inline char *ctx_strchr (const char *haystack, char needle)
+{
+  return _ctx_strchr (haystack, needle);
+}
+
+static inline int ctx_strcmp (const char *a, const char *b)
+{
+  int i;
+  for (i = 0; a[i] && b[i]; a++, b++)
+    if (a[0] != b[0])
+      { return 1; }
+  if (a[0] == 0 && b[0] == 0) { return 0; }
+  return 1;
+}
+
+static inline int ctx_strncmp (const char *a, const char *b, size_t n)
+{
+  size_t i;
+  for (i = 0; a[i] && b[i] && i < n; a++, b++)
+    if (a[0] != b[0])
+      { return 1; }
+  if (i >=n) return 1;
+  return 0;
+}
+
+static inline int ctx_strlen (const char *s)
+{
+  int len = 0;
+  for (; *s; s++) { len++; }
+  return len;
+}
+
+static inline char *ctx_strstr (const char *h, const char *n)
+{
+  int needle_len = ctx_strlen (n);
+  if (n[0]==0)
+    { return (char *) h; }
+  while (*h)
+    {
+      if (!ctx_strncmp (h, n, needle_len) )
+        { return (char *) h; }
+      h++;
+    }
+  return NULL;
+}
+
+static inline char *ctx_strdup (const char *str)
+{
+  int len = ctx_strlen (str);
+  char *ret = (char*)ctx_malloc (len + 1);
+  memcpy (ret, str, len);
+  ret[len]=0;
+  return ret;
+}
+
+#endif
+
+uint32_t    ctx_strhash        (const char *str);
+CtxColor   *ctx_color_new      (void);
+int         ctx_get_int        (Ctx *ctx, uint32_t hash);
+int         ctx_get_is_set     (Ctx *ctx, uint32_t hash);
+Ctx        *ctx_new_for_buffer (CtxBuffer *buffer);
+#ifndef CTX_AUDIO_H
+#define CTX_AUDIO_H
+
+#if !__COSMOPOLITAN__
+#include <stdint.h>
+#endif
+
+/* This enum should be kept in sync with the corresponding mmm enum.
+ */
+typedef enum {
+  CTX_F32,
+  CTX_F32S,
+  CTX_S16,
+  CTX_S16S
+} CtxPCM;
+
+void   ctx_pcm_set_format        (Ctx *ctx, CtxPCM format);
+CtxPCM ctx_pcm_get_format        (Ctx *ctx);
+int    ctx_pcm_get_sample_rate   (Ctx *ctx);
+void   ctx_pcm_set_sample_rate   (Ctx *ctx, int sample_rate);
+int    ctx_pcm_get_frame_chunk   (Ctx *ctx);
+int    ctx_pcm_get_queued        (Ctx *ctx);
+float  ctx_pcm_get_queued_length (Ctx *ctx);
+int    ctx_pcm_queue             (Ctx *ctx, const int8_t *data, int frames);
+
+#endif
+
+#if CTX_IMPLEMENTATION || CTX_SIMD_BUILD
+#ifndef __CTX_CLIENTS_H
+#define __CTX_CLIENTS_H
+
+
+
+struct _CtxClient {
+  VT    *vt;        // or NULL when thread
+
+  long       rev;
+
+  CtxList *events;  // we could use this queue also for vt
+
+  Ctx     *ctx;
+  char    *title;
+  int      x;
+  int      y;
+  int      width;
+  int      height;
+  float    opacity;
+  CtxClientFlags flags;
+#if 0
+  int      shaded;
+  int      iconified;
+  int      maximized;
+  int      resizable;
+#endif
+  int      unmaximized_x;
+  int      unmaximized_y;
+  int      unmaximized_width;
+  int      unmaximized_height;
+  int      do_quit;
+  long     drawn_rev;
+  int      id;
+  int      internal; // render a settings window rather than a vt
+
+#if CTX_THREADS
+  thrd_t tid;     // and only split code path in processing?
+                    // -- why?
+#endif
+  void (*start_routine)(Ctx *ctx, void *user_data);
+  void    *user_data;
+  CtxClientFinalize finalize;
+  Ctx     *sub_ctx;
+  CtxList *ctx_events;
+
+
+  /* we want to keep variation at the end */
+#if CTX_THREADS
+  mtx_t    mtx;
+#endif
+#if VT_RECORD
+  Ctx     *recording;
+#endif
+};
+
+
+
+#endif
+
+#if CTX_IMPLEMENTATION|CTX_COMPOSITE
+
+#ifndef __CTX_INTERNAL_H
+#define __CTX_INTERNAL_H
+
+#if !__COSMOPOLITAN__
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+#endif
+
+
+#if CTX_BRANCH_HINTS
+#define CTX_LIKELY(x)      __builtin_expect(!!(x), 1)
+#define CTX_UNLIKELY(x)    __builtin_expect(!!(x), 0)
+#else
+#define CTX_LIKELY(x)      (x)
+#define CTX_UNLIKELY(x)    (x)
+#endif
+
+typedef struct _CtxRasterizer CtxRasterizer;
+typedef struct _CtxGState     CtxGState;
+//typedef struct _CtxState      CtxState;
+
+typedef struct _CtxSource CtxSource;
+
+
+enum _CtxAntialias
+{
+  CTX_ANTIALIAS_DEFAULT, //
+  CTX_ANTIALIAS_NONE, // non-antialiased
+  CTX_ANTIALIAS_FAST, // aa 3    // deprected or is default equal to this now?
+  CTX_ANTIALIAS_GOOD, // aa 5    // this should perhaps still be 5?
+};
+typedef enum _CtxAntialias CtxAntialias;
+void         ctx_set_antialias (Ctx *ctx, CtxAntialias antialias);
+CtxAntialias ctx_get_antialias (Ctx *ctx);
+
+#define CTX_VALID_RGBA_U8     (1<<0)
+#define CTX_VALID_RGBA_DEVICE (1<<1)
+#if CTX_ENABLE_CM
+#define CTX_VALID_RGBA        (1<<2)
+#endif
+#if CTX_ENABLE_CMYK
+#define CTX_VALID_CMYKA       (1<<3)
+#define CTX_VALID_DCMYKA      (1<<4)
+#endif
+#define CTX_VALID_GRAYA       (1<<5)
+#define CTX_VALID_GRAYA_U8    (1<<6)
+#define CTX_VALID_LABA        ((1<<7) | CTX_VALID_GRAYA)
+
+struct _CtxColor
+{
+  uint8_t magic; // for colors used in keydb, set to a non valid start of
+                 // string value.
+  uint8_t rgba[4];
+  uint8_t l_u8;
+  uint8_t original; // the bitmask of the originally set color
+  uint8_t valid;    // bitmask of which members contain valid
+  // values, gets denser populated as more
+  // formats are requested from a set color.
+  float   device_red;
+  float   device_green;
+  float   device_blue;
+  float   alpha;
+  float   l;        // luminance and gray
+#if CTX_ENABLE_LAB  // NYI
+  float   a;
+  float   b;
+#endif
+#if CTX_ENABLE_CMYK
+  float   device_cyan;
+  float   device_magenta;
+  float   device_yellow;
+  float   device_key;
+  float   cyan;
+  float   magenta;
+  float   yellow;
+  float   key;
+#endif
+
+#if CTX_ENABLE_CM
+  float   red;
+  float   green;
+  float   blue;
+#if CTX_BABL
+  const Babl *space; // gets copied from state when color is declared
+#else
+  void   *space; // gets copied from state when color is declared, 
+#endif
+#endif
+};
+
+typedef struct _CtxGradientStop CtxGradientStop;
+
+struct _CtxGradientStop
+{
+  CtxColor color;
+  float   pos;
+};
+
+
+enum _CtxSourceType
+{
+  CTX_SOURCE_COLOR = 0,
+  CTX_SOURCE_TEXTURE,
+  CTX_SOURCE_LINEAR_GRADIENT,
+  CTX_SOURCE_RADIAL_GRADIENT,
+  CTX_SOURCE_INHERIT_FILL
+};
+
+typedef enum _CtxSourceType CtxSourceType;
+
+typedef struct _CtxPixelFormatInfo CtxPixelFormatInfo;
+
+struct _CtxBuffer
+{
+  void               *data;
+  int                 width;
+  int                 height;
+  int                 stride;
+  int                 frame;      // last frame used in, everything > 3 can be removed,
+                                  // as clients wont rely on it.
+  char               *eid;        // might be NULL, when not - should be unique for pixel contents
+  CtxPixelFormatInfo *format;
+  void (*free_func) (void *pixels, void *user_data);
+  void               *user_data;
+
+#if CTX_ENABLE_CM
+#if CTX_BABL
+  const Babl *space;
+#else
+  void       *space; 
+#endif
+#endif
+#if 1
+  CtxBuffer          *color_managed; /* only valid for one render target, cache
+                                        for a specific space
+                                        */
+#endif
+};
+
+
+//void _ctx_user_to_device          (CtxState *state, float *x, float *y);
+//void _ctx_user_to_device_distance (CtxState *state, float *x, float *y);
+
+
+typedef struct _CtxGradient CtxGradient;
+struct _CtxGradient
+{
+  CtxGradientStop stops[CTX_MAX_GRADIENT_STOPS];
+  int n_stops;
+};
+
+struct _CtxSource
+{
+  int type;
+  CtxMatrix  set_transform;
+  CtxMatrix  transform;
+  uint32_t   pad;
+  union
+  {
+    CtxColor color;
+    struct
+    {
+      uint8_t rgba[4]; // shares data with set color
+      uint8_t pad;
+      CtxBuffer *buffer;
+    } texture;
+    struct
+    {
+      float x0;
+      float y0;
+      float x1;
+      float y1;
+      float dx;
+      float dy;
+      float start;
+      float end;
+      float length;
+      float rdelta;
+    } linear_gradient;
+    struct
+    {
+      float x0;
+      float y0;
+      float r0;
+      float x1;
+      float y1;
+      float r1;
+      float rdelta;
+    } radial_gradient;
+  };
+};
+
+
+typedef struct _Ctx16f16Matrix     Ctx16f16Matrix;
+struct
+  _Ctx16f16Matrix
+{
+#if CTX_32BIT_SEGMENTS
+  int64_t m[3][3];  // forcing higher precision easily, the extra
+                    // memory cost is minuscle
+#else
+  int32_t m[3][3];
+#endif
+};
+
+
+struct _CtxGState
+{
+#if CTX_32BIT_SEGMENTS
+  uint32_t      keydb_pos;
+  uint32_t      stringpool_pos;
+#else
+  uint16_t      keydb_pos;      // this limits these
+  uint16_t      stringpool_pos; // 
+#endif
+
+  CtxMatrix     transform;
+  Ctx16f16Matrix  prepped_transform;
+  CtxSource     source_stroke;
+  CtxSource     source_fill;
+  float         global_alpha_f;
+
+  float         line_width;
+  float         line_dash_offset;
+  float         miter_limit;
+  float         font_size;
+#if CTX_ENABLE_SHADOW_BLUR
+  float         shadow_blur;
+  float         shadow_offset_x;
+  float         shadow_offset_y;
+#endif
+  unsigned int  transform_type:3;
+  unsigned int        clipped:1;
+  CtxColorModel    color_model:8;
+  /* bitfield-pack small state-parts */
+  CtxLineCap          line_cap:2;
+  CtxLineJoin        line_join:2;
+  CtxFillRule        fill_rule:1;
+  unsigned int image_smoothing:1;
+  unsigned int            font:6;
+  unsigned int            bold:1;
+  unsigned int          italic:1;
+
+  uint8_t       global_alpha_u8;
+  int16_t       clip_min_x;
+  int16_t       clip_min_y;
+  int16_t       clip_max_x;
+  int16_t       clip_max_y;
+  int           n_dashes;
+
+#if CTX_ENABLE_CM
+#if CTX_BABL
+  const Babl   *device_space;
+  const Babl   *texture_space;
+  const Babl   *rgb_space;       
+  const Babl   *cmyk_space;
+
+  const Babl   *fish_rgbaf_user_to_device;
+  const Babl   *fish_rgbaf_texture_to_device;
+  const Babl   *fish_rgbaf_device_to_user;
+
+#else
+  void         *device_space;
+  void         *texture_space;
+  void         *rgb_space;       
+  void         *cmyk_space;
+  void         *fish_rgbaf_user_to_device; // dummy padding
+  void         *fish_rgbaf_texture_to_device; // dummy padding
+  void         *fish_rgbaf_device_to_user; // dummy padding
+#endif
+#endif
+  CtxCompositingMode  compositing_mode; // bitfield refs lead to
+  CtxBlend                  blend_mode; // non-vectorization
+  CtxExtend                 extend;
+
+  float dashes[CTX_MAX_DASHES]; // XXX moving dashes 
+                                //  to state storage,. will
+                                //  allow it to be larger,
+                                //  free up memory, and
+                                //  make save/restore faster
+};
+
+typedef enum
+{
+  CTX_TRANSFORMATION_NONE         = 0,
+  CTX_TRANSFORMATION_SCREEN_SPACE = 1,
+  CTX_TRANSFORMATION_RELATIVE     = 2,
+#if CTX_BITPACK
+  CTX_TRANSFORMATION_BITPACK      = 4,
+#endif
+  CTX_TRANSFORMATION_STORE_CLEAR  = 16,
+} CtxTransformation;
+
+#define CTX_DRAWLIST_DOESNT_OWN_ENTRIES   64
+#define CTX_DRAWLIST_EDGE_LIST            128
+#define CTX_DRAWLIST_CURRENT_PATH         512
+// BITPACK
+
+struct _CtxDrawlist
+{
+  CtxEntry *entries;
+  unsigned int count;
+  int size;
+  uint32_t  flags;
+  int       bitpack_pos;  // stream is bitpacked up to this offset
+};
+
+// the keydb consists of keys set to floating point values,
+// that might also be interpreted as integers for enums.
+//
+// the hash
+typedef struct _CtxKeyDbEntry CtxKeyDbEntry;
+struct _CtxKeyDbEntry
+{
+  uint32_t key;
+  float value;
+  //union { float f[1]; uint8_t u8[4]; }value;
+};
+
+struct _CtxState
+{
+  int           has_moved:1;
+  int           has_clipped:1;
+  int8_t        source; // used for the single-shifting to stroking
+                // 0  = fill
+                // 1  = start_stroke
+                // 2  = in_stroke
+                //
+                //   if we're at in_stroke at start of a source definition
+                //   we do filling
+  int16_t       gstate_no;
+
+  float         x;
+  float         y;
+  int           ink_min_x;
+  int           ink_min_y;
+  int           ink_max_x;
+  int           ink_max_y;
+  CtxGState     gstate;
+  CtxGState     gstate_stack[CTX_MAX_STATES];//at end, so can be made dynamic
+#if CTX_GRADIENTS
+  CtxGradient   gradient; /* we keep only one gradient,
+                             this goes icky with multiple
+                             restores - it should really be part of
+                             graphics state..
+                             XXX, with the stringpool gradients
+                             can be stored there.
+                           */
+#endif
+  CtxKeyDbEntry keydb[CTX_MAX_KEYDB];
+  char          stringpool[CTX_STRINGPOOL_SIZE];
+};
+
+
+typedef struct _CtxFont       CtxFont;
+typedef struct _CtxFontEngine CtxFontEngine;
+
+struct _CtxFontEngine
+{
+#if CTX_FONTS_FROM_FILE
+  int   (*load_file)   (const char *name, const char *path);
+#endif
+  int   (*load_memory) (const char *name, const void *data, int length);
+  int   (*glyph)       (CtxFont *font, Ctx *ctx, uint32_t unichar, int stroke);
+  float (*glyph_width) (CtxFont *font, Ctx *ctx, uint32_t unichar);
+  float (*glyph_kern)  (CtxFont *font, Ctx *ctx, uint32_t unicharA, uint32_t unicharB);
+};
+
+
+#pragma pack(push,1)
+struct _CtxFont
+{
+#if CTX_ONE_FONT_ENGINE==0
+  CtxFontEngine *engine;
+#endif
+  union
+  {
+    struct
+    {
+      CtxEntry *data;
+    //uint16_t length;
+      /* we've got ~110 bytes to fill to cover as
+         much data as stbtt_fontinfo */
+      //int16_t glyph_pos[26]; // for a..z
+    } ctx;
+#if CTX_FONT_ENGINE_CTX_FS
+    struct
+    {
+      const char *name;
+      char *path;
+    } ctx_fs;
+#endif
+#if CTX_FONT_ENGINE_STB
+    struct
+    {
+      const char *name;
+      stbtt_fontinfo ttf_info;
+    } stb;
+#endif
+#if 0
+    struct { int start; int end; int gw; int gh; const uint8_t *data;} monobitmap;
+#endif
+  };
+#if CTX_ONE_FONT_ENGINE==0
+  uint8_t type:3; // 0 ctx    1 stb    2 monobitmap
+  uint8_t monospaced:1;
+#endif
+};
+#pragma pack(pop)
+
+enum _CtxIteratorFlag
+{
+  CTX_ITERATOR_FLAT           = 0,
+  CTX_ITERATOR_EXPAND_BITPACK = 2,
+  CTX_ITERATOR_DEFAULTS       = CTX_ITERATOR_EXPAND_BITPACK
+};
+typedef enum _CtxIteratorFlag CtxIteratorFlag;
+
+
+struct _CtxIterator
+{
+  int              pos;
+  int              first_run;
+  CtxDrawlist *drawlist;
+  int              end_pos;
+  int              flags;
+
+  int              bitpack_pos;
+  int              bitpack_length;     // if non 0 bitpack is active
+  CtxEntry         bitpack_command[6]; // the command returned to the
+  // user if unpacking is needed.
+};
+
+#if CTX_EVENTS 
+
+// include list implementation - since it already is a header+inline online
+// implementation?
+
+typedef struct CtxItemCb {
+  CtxEventType types;
+  CtxCb        cb;
+  void*        data1;
+  void*        data2;
+
+  void (*finalize) (void *data1, void *data2, void *finalize_data);
+  void  *finalize_data;
+
+} CtxItemCb;
+
+
+
+typedef struct CtxItem {
+  CtxMatrix inv_matrix;  /* for event coordinate transforms */
+
+  /* bounding box */
+  float          x0;
+  float          y0;
+  float          x1;
+  float          y1;
+
+  void *path;
+  double          path_hash;
+
+  CtxCursor       cursor; /* if 0 then UNSET and no cursor change is requested
+                           */
+
+  CtxEventType   types;   /* all cb's ored together */
+  CtxItemCb cb[CTX_MAX_CBS];
+  int       cb_count;
+  int       ref_count;
+} CtxItem;
+
+
+typedef struct _CtxEvents CtxEvents;
+struct _CtxEvents
+{
+  int             frozen;
+  int             fullscreen;
+  CtxList        *grabs; /* could split the grabs per device in the same way,
+                            to make dispatch overhead smaller,. probably
+                            not much to win though. */
+  CtxEvent         drag_event[CTX_MAX_DEVICES];
+  CtxList         *idles;
+  CtxList         *idles_to_remove;
+  CtxList         *idles_to_add;
+  CtxList         *events; // for ctx_get_event
+  CtxBinding       bindings[CTX_MAX_KEYBINDINGS]; /*< better as list, uses no mem if unused */
+  int              n_bindings;
+  CtxItem         *prev[CTX_MAX_DEVICES];
+  float            pointer_x[CTX_MAX_DEVICES];
+  float            pointer_y[CTX_MAX_DEVICES];
+  unsigned char    pointer_down[CTX_MAX_DEVICES];
+  unsigned int     in_idle_dispatch:1;
+  unsigned int     ctx_get_event_enabled:1;
+  CtxModifierState modifier_state;
+  int              idle_id;
+  CtxList         *items;
+  CtxItem         *last_item;
+  float            tap_hysteresis;
+#if CTX_CLIENTS
+  CtxList         *clients;
+  CtxClient *active;
+  CtxClient *active_tab;
+#endif
+  int              tap_delay_min;
+  int              tap_delay_max;
+  int              tap_delay_hold;
+};
+#endif
+
+typedef struct _CtxEidInfo
+{
+  char *eid;
+  int   frame;
+  int   width;
+  int   height;
+} CtxEidInfo;
+
+
+struct _CtxGlyphEntry
+{
+  uint32_t  unichar;
+  uint16_t  offset;
+  CtxFont  *font;
+};
+typedef struct _CtxGlyphEntry CtxGlyphEntry;
+
+struct _Ctx
+{
+  CtxBackend       *backend;
+  CtxDrawlist       drawlist;
+  int               transformation;
+  int               width;
+  int               height;
+  int               dirty;
+  Ctx              *texture_cache;
+  CtxList          *eid_db;
+  CtxState          state;        /**/
+  int               frame; /* used for texture lifetime */
+  uint32_t          bail;
+  CtxBackend       *backend_pushed;
+  CtxBuffer         texture[CTX_MAX_TEXTURES];
+#if CTX_EVENTS 
+  CtxCursor         cursor;
+  int               quit;
+  CtxEvents         events;
+  int               mouse_fd;
+  int               mouse_x;
+  int               mouse_y;
+#endif
+#if CTX_CURRENT_PATH
+  CtxDrawlist       current_path; // possibly transformed coordinates !
+  CtxIterator       current_path_iterator;
+#endif
+#if CTX_GLYPH_CACHE
+  CtxGlyphEntry     glyph_index_cache[CTX_GLYPH_CACHE_SIZE];
+#endif
+  CtxFont *fonts; // a copy to keep it alive with mp's
+                  // garbage collector, the fonts themselves
+                  // are static and shared beyond ctx contexts
+ 
+
+};
+
+static inline void
+ctx_process (Ctx *ctx, CtxEntry *entry)
+{
+  ctx->backend->process (ctx, (CtxCommand *) entry);
+}
+
+CtxBuffer *ctx_buffer_new (int width, int height,
+                           CtxPixelFormat pixel_format);
+void ctx_buffer_destroy (CtxBuffer *buffer);
+
+void
+ctx_state_gradient_clear_stops (CtxState *state);
+
+static inline void ctx_interpret_style         (CtxState *state, CtxEntry *entry, void *data);
+static inline void ctx_interpret_transforms    (CtxState *state, CtxEntry *entry, void *data);
+static inline void ctx_interpret_pos           (CtxState *state, CtxEntry *entry, void *data);
+static inline void ctx_interpret_pos_transform (CtxState *state, CtxEntry *entry, void *data);
+
+struct _CtxInternalFsEntry
+{
+  char *path;
+  int   length;
+  char *data;
+};
+
+struct _CtxPixelFormatInfo
+{
+  CtxPixelFormat pixel_format:8;
+  uint8_t        components; /* number of components */
+  uint8_t        bpp; /* bits  per pixel - for doing offset computations
+                         along with rowstride found elsewhere, if 0 it indicates
+                         1/8  */
+  uint8_t        ebpp; /*effective bytes per pixel - for doing offset
+                         computations, for formats that get converted, the
+                         ebpp of the working space applied */
+  uint8_t        dither_red_blue;
+  uint8_t        dither_green;
+  CtxPixelFormat composite_format:8;
+
+  void         (*to_comp) (CtxRasterizer *r,
+                           int x, const void * __restrict__ src, uint8_t * __restrict__ comp, int count);
+  void         (*from_comp) (CtxRasterizer *r,
+                             int x, const uint8_t * __restrict__ comp, void *__restrict__ dst, int count);
+  void         (*apply_coverage) (CtxRasterizer *r, uint8_t * __restrict__ dst, uint8_t * __restrict__ src, int x, uint8_t *coverage,
+                          unsigned int count);
+  void         (*setup) (CtxRasterizer *r);
+};
+
+
+static inline void
+_ctx_user_to_device (CtxState *state, float *x, float *y);
+static void
+_ctx_user_to_device_distance (CtxState *state, float *x, float *y);
+static void ctx_state_init (CtxState *state);
+static inline void
+ctx_interpret_pos_bare (CtxState *state, CtxEntry *entry, void *data);
+static inline void
+ctx_drawlist_deinit (CtxDrawlist *drawlist);
+
+//extern CtxPixelFormatInfo *(*ctx_pixel_format_info) (CtxPixelFormat format);
+CtxPixelFormatInfo *ctx_pixel_format_info (CtxPixelFormat format);
+
+
+
+extern void (*ctx_composite_stroke_rect) (CtxRasterizer *rasterizer,
+                           float          x0,
+                           float          y0,
+                           float          x1,
+                           float          y1,
+                           float          line_width);
+
+extern void (*ctx_composite_setup) (CtxRasterizer *rasterizer);
+
+
+struct _CtxShapeEntry
+{
+  uint32_t hash;
+  uint16_t width;
+  uint16_t height;
+  int      last_frame; // xxx
+  uint32_t uses;  // instrumented for longer keep-alive
+  uint8_t  data[];
+};
+
+typedef struct _CtxShapeEntry CtxShapeEntry;
+
+extern void (*ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule
+#if CTX_SHAPE_CACHE
+                ,CtxShapeEntry *shape
+#endif
+                );
+
+
+
+extern void (*ctx_composite_fill_rect) (CtxRasterizer *rasterizer,
+                           float        x0,
+                           float        y0,
+                           float        x1,
+                           float        y1,
+                           uint8_t      cov);
+
+
+const char *ctx_utf8_skip (const char *s, int utf8_length);
+int ctx_utf8_strlen (const char *s);
+int
+ctx_unichar_to_utf8 (uint32_t  ch,
+                     uint8_t  *dest);
+
+uint32_t
+ctx_utf8_to_unichar (const char *input);
+
+
+typedef struct _CtxHasher CtxHasher;
+
+typedef void (*CtxFragment) (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz);
+
+#define CTX_MAX_GAUSSIAN_KERNEL_DIM    512
+
+
+
+struct _CtxShapeCache
+{
+  CtxShapeEntry *entries[CTX_SHAPE_CACHE_ENTRIES];
+  long size;
+};
+
+typedef struct _CtxShapeCache CtxShapeCache;
+
+typedef enum {
+   CTX_COV_PATH_FALLBACK =0,
+   CTX_COV_PATH_RGBA8_OVER,
+   CTX_COV_PATH_RGBA8_COPY,
+   CTX_COV_PATH_RGBA8_COPY_FRAGMENT,
+   CTX_COV_PATH_RGBA8_OVER_FRAGMENT,
+   CTX_COV_PATH_GRAYA8_COPY,
+   CTX_COV_PATH_GRAY1_COPY,
+   CTX_COV_PATH_GRAY2_COPY,
+   CTX_COV_PATH_GRAY4_COPY,
+   CTX_COV_PATH_RGB565_COPY,
+   CTX_COV_PATH_RGB332_COPY,
+   CTX_COV_PATH_GRAY8_COPY,
+   CTX_COV_PATH_RGBAF_COPY,
+   CTX_COV_PATH_RGB8_COPY,
+   CTX_COV_PATH_CMYK8_COPY,
+   CTX_COV_PATH_CMYKA8_COPY,
+   CTX_COV_PATH_CMYKAF_COPY,
+   CTX_COV_PATH_GRAYAF_COPY,
+   CTX_COV_PATH_CBRLE_COPY 
+} CtxCovPath;
+
+struct _CtxRasterizer
+{
+  CtxBackend backend;
+  /* these should be initialized and used as the bounds for rendering into the
+     buffer as well XXX: not yet in use, and when in use will only be
+     correct for axis aligned clips - proper rasterization of a clipping path
+     would be yet another refinement on top.
+   */
+
+
+#define CTX_COMPOSITE_ARGUMENTS CtxRasterizer *rasterizer, uint8_t * __restrict__ dst, uint8_t * __restrict__ src, int x0, uint8_t * __restrict__ coverage, unsigned int count
+  void (*comp_op)(CTX_COMPOSITE_ARGUMENTS);
+  CtxFragment fragment;
+  //Ctx       *ctx;
+  CtxState  *state;
+  void      *buf;
+  int fast_aa;
+  CtxCovPath  comp;
+  void       (*apply_coverage) (CtxRasterizer *r, uint8_t * __restrict__ dst, uint8_t * __restrict__ src, int x, uint8_t *coverage, unsigned int count);
+
+  unsigned int aa;          // level of vertical aa
+  unsigned int prev_active_edges;
+  unsigned int active_edges;
+  unsigned int pending_edges;
+  unsigned int ending_edges;
+  unsigned int edge_pos;         // where we're at in iterating all edges
+  unsigned int needs_aa3; // count of how many edges implies antialiasing
+  unsigned int needs_aa5; // count of how many edges implies antialiasing
+  unsigned int needs_aa15; // count of how many edges implies antialiasing
+  unsigned int horizontal_edges;
+
+  int        scanline;
+  int        scan_min;
+  int        scan_max;
+  int        col_min;
+  int        col_max;
+
+  int        inner_x;
+  int        inner_y;
+
+  float      x;
+  float      y;
+
+  float      first_x;
+  float      first_y;
+
+  uint16_t    blit_x;
+  uint16_t    blit_y;
+  uint16_t    blit_width;
+  uint16_t    blit_height;
+  uint16_t    blit_stride;
+
+  unsigned int  clip_rectangle:1;
+  unsigned int  has_shape:2;
+  int  has_prev:2;
+  unsigned int  preserve:1;
+#if CTX_ENABLE_SHADOW_BLUR
+  unsigned int  in_shadow:1;
+#endif
+  unsigned int  in_text:1;
+  unsigned int  swap_red_green:1;
+
+#if CTX_BRAILLE_TEXT
+  unsigned int  term_glyphs:1; // store appropriate glyphs for redisplay
+#endif
+  int        shadow_x;
+#if CTX_BRAILLE_TEXT
+  CtxList   *glyphs;
+#endif
+  CtxPixelFormatInfo *format;
+  Ctx       *texture_source; /* normally same as ctx */
+  int        shadow_y;
+
+  uint8_t    color[4*5];   // in compositing format
+  uint16_t   color_native;  //
+  uint16_t   color_nativeB[5];
+
+  int edges[CTX_MAX_EDGES]; // integer position in edge array
+  CtxDrawlist edge_list;
+
+#if CTX_GRADIENTS
+#if CTX_GRADIENT_CACHE
+  int gradient_cache_valid;
+  uint8_t gradient_cache_u8[CTX_GRADIENT_CACHE_ELEMENTS][4];
+  int gradient_cache_elements;
+#endif
+#endif
+
+#if CTX_ENABLE_CLIP
+  CtxBuffer *clip_buffer;
+#endif
+
+#if CTX_COMPOSITING_GROUPS
+  void      *saved_buf; // when group redirected
+  CtxBuffer *group[CTX_GROUP_MAX];
+#endif
+#if CTX_ENABLE_SHADOW_BLUR
+  float      kernel[CTX_MAX_GAUSSIAN_KERNEL_DIM];
+#endif
+
+#if static_OPAQUE
+  uint8_t opaque[CTX_MAX_SCANLINE_LENGTH];
+#endif
+
+#if CTX_SHAPE_CACHE
+  CtxShapeCache shape_cache; /* needs to be at end of struct, it
+                                is excluded from clearing */
+#endif
+};
+
+struct _CtxSHA1 {
+    uint64_t length;
+    uint32_t state[5], curlen;
+    unsigned char buf[64];
+};
+typedef struct _CtxMurmur CtxMurmur;
+struct _CtxMurmur {
+    uint32_t state[2];
+};
+
+
+#pragma pack(push,1)
+typedef struct CtxCommandState
+{
+  uint16_t pos;
+  uint32_t active;
+} CtxCommandState;
+#pragma pack(pop)
+
+struct _CtxHasher
+{
+  CtxRasterizer rasterizer;
+  int           cols;
+  int           rows;
+  uint32_t      hashes[CTX_HASH_COLS*CTX_HASH_ROWS];
+  CtxMurmur     murmur_fill[CTX_MAX_STATES]; 
+  CtxMurmur     murmur_stroke[CTX_MAX_STATES];
+  int           source_level;
+  int           pos; 
+
+  int           prev_command;
+
+  CtxDrawlist  *drawlist;
+
+};
+
+#if CTX_RASTERIZER
+void ctx_rasterizer_deinit (CtxRasterizer *rasterizer);
+void ctx_rasterizer_destroy (CtxRasterizer *rasterizer);
+#endif
+
+enum {
+  NC_MOUSE_NONE  = 0,
+  NC_MOUSE_PRESS = 1,  /* "mouse-pressed", "mouse-released" */
+  NC_MOUSE_DRAG  = 2,  /* + "mouse-drag"   (motion with pressed button) */
+  NC_MOUSE_ALL   = 3   /* + "mouse-motion" (also delivered for release) */
+};
+void _ctx_mouse (Ctx *term, int mode);
+void nc_at_exit (void);
+
+int ctx_terminal_width  (void);
+int ctx_terminal_height (void);
+int ctx_terminal_cols   (void);
+int ctx_terminal_rows   (void);
+extern int ctx_frame_ack;
+
+typedef struct _CtxCtx CtxCtx;
+struct _CtxCtx
+{
+   CtxBackend backend;
+   int  width;
+   int  height;
+   int  cols;
+   int  rows;
+   int  was_down;
+};
+
+
+extern int _ctx_max_threads;
+extern int _ctx_enable_hash_cache;
+void
+ctx_set (Ctx *ctx, uint32_t key_hash, const char *string, int len);
+const char *
+ctx_get (Ctx *ctx, const char *key);
+
+Ctx *ctx_new_ctx (int width, int height);
+Ctx *ctx_new_fb (int width, int height);
+Ctx *ctx_new_headless (int width, int height);
+Ctx *ctx_new_kms (int width, int height);
+Ctx *ctx_new_sdl (int width, int height);
+Ctx *ctx_new_term (int width, int height);
+Ctx *ctx_new_termimg (int width, int height);
+
+int ctx_resolve_font (const char *name);
+
+#if CTX_U8_TO_FLOAT_LUT
+extern float ctx_u8_float[256];
+#define ctx_u8_to_float(val_u8) ctx_u8_float[((uint8_t)(val_u8))]
+#else
+#define ctx_u8_to_float(val_u8) (val_u8/255.0f)
+#endif
+
+static inline uint8_t ctx_float_to_u8 (float val_f)
+{
+#if 1 
+  union { float f; uint32_t i; } u;
+  u.f = 32768.0f + val_f * (255.0f / 256.0f);
+  return (uint8_t)u.i;
+#else
+  return val_f < 0.0f ? 0 : val_f > 1.0f ? 0xff : 0xff * val_f +  0.5f;
+#endif
+}
+
+
+#define CTX_CSS_LUMINANCE_RED   0.3f
+#define CTX_CSS_LUMINANCE_GREEN 0.59f
+#define CTX_CSS_LUMINANCE_BLUE  0.11f
+
+/* works on both float and uint8_t */
+#define CTX_CSS_RGB_TO_LUMINANCE(rgb)  (\
+  (rgb[0]) * CTX_CSS_LUMINANCE_RED + \
+  (rgb[1]) * CTX_CSS_LUMINANCE_GREEN +\
+  (rgb[2]) * CTX_CSS_LUMINANCE_BLUE)
+
+const char *ctx_nct_get_event (Ctx *n, int timeoutms, int *x, int *y);
+const char *ctx_native_get_event (Ctx *n, int timeoutms);
+void
+ctx_color_get_rgba8 (CtxState *state, CtxColor *color, uint8_t *out);
+void ctx_color_get_graya_u8 (CtxState *state, CtxColor *color, uint8_t *out);
+float ctx_float_color_rgb_to_gray (CtxState *state, const float *rgb);
+void ctx_color_get_graya (CtxState *state, CtxColor *color, float *out);
+void ctx_rgb_to_cmyk (float r, float g, float b,
+              float *c_out, float *m_out, float *y_out, float *k_out);
+uint8_t ctx_u8_color_rgb_to_gray (CtxState *state, const uint8_t *rgb);
+#if CTX_ENABLE_CMYK
+void ctx_color_get_cmyka (CtxState *state, CtxColor *color, float *out);
+#endif
+static void ctx_color_set_RGBA8 (CtxState *state, CtxColor *color, uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+void ctx_color_set_rgba (CtxState *state, CtxColor *color, float r, float g, float b, float a);
+static void ctx_color_set_drgba (CtxState *state, CtxColor *color, float r, float g, float b, float a);
+void ctx_color_get_cmyka (CtxState *state, CtxColor *color, float *out);
+static void ctx_color_set_cmyka (CtxState *state, CtxColor *color, float c, float m, float y, float k, float a);
+static void ctx_color_set_dcmyka (CtxState *state, CtxColor *color, float c, float m, float y, float k, float a);
+static void ctx_color_set_graya (CtxState *state, CtxColor *color, float gray, float alpha);
+
+int ctx_color_model_get_components (CtxColorModel model);
+
+static void ctx_state_set (CtxState *state, uint32_t key, float value);
+
+static void
+ctx_matrix_set (CtxMatrix *matrix, float a, float b, float c, float d, float e, float f, float g, float h, float i);
+
+
+static void ctx_font_setup ();
+static float ctx_state_get (CtxState *state, uint32_t hash);
+
+#if CTX_RASTERIZER
+
+static void
+ctx_rasterizer_rel_move_to (CtxRasterizer *rasterizer, float x, float y);
+static void
+ctx_rasterizer_rel_line_to (CtxRasterizer *rasterizer, float x, float y);
+
+static void
+ctx_rasterizer_move_to (CtxRasterizer *rasterizer, float x, float y);
+static void
+ctx_rasterizer_line_to (CtxRasterizer *rasterizer, float x, float y);
+static void
+ctx_rasterizer_curve_to (CtxRasterizer *rasterizer,
+                         float x0, float y0,
+                         float x1, float y1,
+                         float x2, float y2);
+static void
+ctx_rasterizer_rel_curve_to (CtxRasterizer *rasterizer,
+                         float x0, float y0,
+                         float x1, float y1,
+                         float x2, float y2);
+
+static void
+ctx_rasterizer_reset (CtxRasterizer *rasterizer);
+static void
+ctx_rasterizer_arc (CtxRasterizer *rasterizer,
+                    float        x,
+                    float        y,
+                    float        radius,
+                    float        start_angle,
+                    float        end_angle,
+                    int          anticlockwise);
+
+static void
+ctx_rasterizer_quad_to (CtxRasterizer *rasterizer,
+                        float        cx,
+                        float        cy,
+                        float        x,
+                        float        y);
+
+static void
+ctx_rasterizer_rel_quad_to (CtxRasterizer *rasterizer,
+                        float        cx,
+                        float        cy,
+                        float        x,
+                        float        y);
+
+static void
+ctx_rasterizer_rectangle (CtxRasterizer *rasterizer,
+                          float x,
+                          float y,
+                          float width,
+                          float height);
+
+static void ctx_rasterizer_finish_shape (CtxRasterizer *rasterizer);
+static void ctx_rasterizer_clip (CtxRasterizer *rasterizer);
+static void
+ctx_rasterizer_set_font (CtxRasterizer *rasterizer, const char *font_name);
+
+static void
+ctx_rasterizer_gradient_add_stop (CtxRasterizer *rasterizer, float pos, float *rgba);
+static void
+ctx_rasterizer_set_pixel (CtxRasterizer *rasterizer,
+                          uint16_t x,
+                          uint16_t y,
+                          uint8_t r,
+                          uint8_t g,
+                          uint8_t b,
+                          uint8_t a);
+static void
+ctx_rasterizer_round_rectangle (CtxRasterizer *rasterizer, float x, float y, float width, float height, float corner_radius);
+
+#endif
+
+#if CTX_ENABLE_CM // XXX to be moved to ctx.h
+void
+ctx_set_drgb_space (Ctx *ctx, int device_space);
+void
+ctx_set_dcmyk_space (Ctx *ctx, int device_space);
+void
+ctx_rgb_space (Ctx *ctx, int device_space);
+void
+ctx_set_cmyk_space (Ctx *ctx, int device_space);
+#endif
+
+#endif
+
+CtxRasterizer *
+ctx_rasterizer_init (CtxRasterizer *rasterizer, Ctx *ctx, Ctx *texture_source, CtxState *state, void *data, int x, int y, int width, int height, int stride, CtxPixelFormat pixel_format, CtxAntialias antialias);
+
+CTX_INLINE static uint8_t ctx_lerp_u8 (uint8_t v0, uint8_t v1, uint8_t dx)
+{
+#if 0
+  return v0 + ((v1-v0) * dx)/255;
+#else
+  return ( ( ( ( (v0) <<8) + (dx) * ( (v1) - (v0) ) ) ) >>8);
+#endif
+}
+
+CTX_INLINE static uint32_t ctx_lerp_RGBA8 (const uint32_t v0, const uint32_t v1, const uint8_t dx)
+{
+#if 0
+  char bv0[4];
+  char bv1[4];
+  char res[4];
+  memcpy (&bv0[0], &v0, 4);
+  memcpy (&bv1[0], &v1, 4);
+  for (int c = 0; c < 4; c++)
+    res [c] = ctx_lerp_u8 (bv0[c], bv1[c], dx);
+  return ((uint32_t*)(&res[0]))[0];
+#else
+  const uint32_t cov = dx;
+  const uint32_t si_ga = (v1 & 0xff00ff00);
+  const uint32_t si_rb = v1 & 0x00ff00ff;
+  const uint32_t di_rb = v0 & 0x00ff00ff;
+  const uint32_t d_rb = si_rb - di_rb;
+  const uint32_t di_ga = v0 & 0xff00ff00;
+  const uint32_t d_ga = (si_ga >>8) - (di_ga>>8);
+  return
+     (((di_rb + ((0xff00ff + d_rb * cov)>>8)) & 0x00ff00ff)) |
+     (((di_ga + (0xff00ff + d_ga * cov))      & 0xff00ff00));
+
+#endif
+}
+
+CTX_INLINE static void ctx_lerp_RGBA8_split (const uint32_t v0, const uint32_t v1, const uint8_t dx,
+                                             uint32_t *dest_ga, uint32_t *dest_rb)
+{
+  const uint32_t cov = dx;
+  const uint32_t si_ga = v1 & 0xff00ff00;
+  const uint32_t si_rb = v1 & 0x00ff00ff;
+  const uint32_t di_ga = v0 & 0xff00ff00;
+  const uint32_t di_rb = v0 & 0x00ff00ff;
+  const uint32_t d_rb = si_rb - di_rb;
+  const uint32_t d_ga = (si_ga >>8) - (di_ga >> 8);
+  *dest_rb = (((di_rb + ((0xff00ff + d_rb * cov)>>8)) & 0x00ff00ff));
+  *dest_ga = (((di_ga + (0xff00ff + d_ga * cov))      & 0xff00ff00));
+}
+
+CTX_INLINE static uint32_t ctx_lerp_RGBA8_merge (uint32_t di_ga, uint32_t di_rb, uint32_t si_ga, uint32_t si_rb, const uint8_t dx)
+{
+  const uint32_t cov = dx;
+  const uint32_t d_rb = si_rb - di_rb;
+  const uint32_t d_ga = (si_ga >> 8) - (di_ga >> 8);
+  return
+     (((di_rb + ((0xff00ff + d_rb * cov)>>8)) & 0x00ff00ff))  |
+      ((di_ga + ((0xff00ff + d_ga * cov)      & 0xff00ff00)));
+}
+
+CTX_INLINE static uint32_t ctx_lerp_RGBA8_2 (const uint32_t v0, uint32_t si_ga, uint32_t si_rb, const uint8_t dx)
+{
+  const uint32_t cov = dx;
+  const uint32_t di_ga = ( v0 & 0xff00ff00);
+  const uint32_t di_rb = v0 & 0x00ff00ff;
+  const uint32_t d_rb = si_rb - di_rb;
+  const uint32_t d_ga = si_ga - (di_ga>>8);
+  return
+     (((di_rb + ((0xff00ff + d_rb * cov)>>8)) & 0x00ff00ff)) |
+     (((di_ga + (0xff00ff + d_ga * cov))      & 0xff00ff00));
+}
+
+CTX_INLINE static float
+ctx_lerpf (float v0, float v1, float dx)
+{
+  return v0 + (v1-v0) * dx;
+}
+
+CTX_INLINE static float
+ctx_catmull_rom (float v0, float v1, float v2, float v3, float t)
+{
+   float ya = v0, yb = v1, yc = v2, yd = v3;
+   float a3 = 0.5f * (-ya + 3 * yb - 3 * yc + yd);
+   float a2 = 0.5f * (2 * ya - 5 * yb + 4 * yc - yd);
+   float a1 = 0.5f * (-ya + yc);
+   float a0 = yb;
+   return a3 * t * t * t +
+          a2 * t * t +
+          a1 * t +
+          a0;
+}
+
+CTX_INLINE static float
+ctx_catmull_rom_left (float v0, float v1, float v2, float t)
+{
+   float ya = v0, yb = v1, yc = v2;
+   float a2 = 0.5f * (ya - 2 * yb + yc);
+   float a1 = 0.5f * (-3 * ya + 4 * yb - yc);
+   float a0 = ya;
+   return a2 * t * t +
+          a1 * t +
+          a0;
+}
+
+CTX_INLINE static float
+ctx_catmull_rom_right (float v0, float v1, float v2, float t)
+{
+   float ya = v0, yb = v1, yc = v2;
+   float a2 = 0.5f * (ya - 2 * yb + yc);
+   float a1 = 0.5f * (-ya + yc);
+   float a0 = yb;
+   return a2 * t * t +
+          a1 * t +
+          a0;
+}
+
+
+#ifndef CTX_MIN
+#define CTX_MIN(a,b)  (((a)<(b))?(a):(b))
+#endif
+#ifndef CTX_MAX
+#define CTX_MAX(a,b)  (((a)>(b))?(a):(b))
+#endif
+
+static inline void *ctx_calloc (size_t size, size_t count);
+
+void ctx_screenshot (Ctx *ctx, const char *output_path);
+
+
+CtxSHA1 *ctx_sha1_new (void);
+void ctx_sha1_free (CtxSHA1 *sha1);
+int ctx_sha1_process(CtxSHA1 *sha1, const unsigned char * msg, unsigned long len);
+int ctx_sha1_done(CtxSHA1 * sha1, unsigned char *out);
+
+void _ctx_texture_lock (void);
+void _ctx_texture_unlock (void);
+uint8_t *ctx_define_texture_pixel_data (CtxEntry *entry);
+void ctx_buffer_pixels_free (void *pixels, void *userdata);
+
+/*ctx_texture_init:
+ * return value: eid, as passed in or if NULL generated by hashing pixels and width/height
+ * XXX  this is low-level and not to be used directly use define_texture instead.  XXX
+ */
+const char *ctx_texture_init (
+                      Ctx        *ctx,
+                      const char *eid,
+                      int         width,
+                      int         height,
+                      int         stride,
+                      CtxPixelFormat format,
+                      void       *space,
+                      uint8_t    *pixels,
+                      void (*freefunc) (void *pixels, void *user_data),
+                      void *user_data);
+
+#if CTX_TILED
+#if !__COSMOPOLITAN__
+//#include <threads.h>
+#endif
+#endif
+typedef struct _CtxTiled CtxTiled;
+
+
+typedef struct _EvSource EvSource;
+struct _EvSource
+{
+  void   *priv; /* private storage  */
+
+  /* returns non 0 if there is events waiting */
+  int   (*has_event) (EvSource *ev_source);
+
+  /* get an event, the returned event should be freed by the caller  */
+  char *(*get_event) (EvSource *ev_source);
+
+  /* destroy/unref this instance */
+  void  (*destroy)   (EvSource *ev_source);
+
+  /* get the underlying fd, useful for using select on  */
+  int   (*get_fd)    (EvSource *ev_source);
+
+
+  void  (*set_coord) (EvSource *ev_source, double x, double y);
+  /* set_coord is needed to warp relative cursors into normalized range,
+   * like normal mice/trackpads/nipples - to obey edges and more.
+   */
+
+  /* if this returns non-0 select can be used for non-blocking.. */
+};
+
+struct _CtxTiled
+{
+   CtxBackend backend;
+   void (*show_frame) (void *backend, int block);
+   int           width;
+   int           height;
+   int           cols;
+   int           rows;
+   int           was_down;
+   uint8_t      *pixels;
+   Ctx          *ctx_copy;
+   Ctx          *host[CTX_MAX_THREADS];
+   CtxAntialias  antialias;
+   int           quit;
+#if CTX_TILED
+   //_Atomic 
+           int   thread_quit;
+#endif
+   int           shown_frame;
+   int           render_frame;
+   int           rendered_frame[CTX_MAX_THREADS];
+   int           frame;
+   int       min_col; // hasher cols and rows
+   int       min_row;
+   int       max_col;
+   int       max_row;
+   uint32_t  hashes[CTX_HASH_ROWS * CTX_HASH_COLS];
+   int8_t    tile_affinity[CTX_HASH_ROWS * CTX_HASH_COLS]; // which render thread no is
+                                                           // responsible for a tile
+                                                           //
+
+   int           pointer_down[3];
+
+   CtxCursor     shown_cursor;
+   int          vt_active;
+   EvSource    *evsource[4];
+   int          evsource_count;
+   uint8_t      *fb;
+#if CTX_THREADS
+#if CTX_TILED
+   cnd_t  cond;
+   mtx_t  mtx;
+#endif
+#endif
+};
+
+static inline Ctx *ctx_backend_get_ctx (void *backend)
+{
+  CtxBackend *r = (CtxBackend*)backend;
+  if (r) return r->ctx;
+  return NULL;
+}
+
+void
+_ctx_texture_prepare_color_management (CtxState  *state,
+                                       CtxBuffer *buffer);
+
+int ctx_is_set (Ctx *ctx, uint32_t hash);
+
+static Ctx *_ctx_new_drawlist (int width, int height);
+
+
+static inline void
+_ctx_matrix_apply_transform (const CtxMatrix *m, float *x, float *y)
+{
+  float x_in = *x;
+  float y_in = *y;
+  float w =   (x_in * m->m[2][0]) + (y_in * m->m[2][1]) + m->m[2][2];
+  float w_recip = 1.0f/w;
+       *x = ( (x_in * m->m[0][0]) + (y_in * m->m[0][1]) + m->m[0][2]) * w_recip;
+       *y = ( (x_in * m->m[1][0]) + (y_in * m->m[1][1]) + m->m[1][2]) * w_recip;
+}
+
+
+
+static inline void
+_ctx_matrix_multiply (CtxMatrix       *result,
+                      const CtxMatrix *t,
+                      const CtxMatrix *s)
+{
+  CtxMatrix r;
+
+  for (unsigned int i = 0; i < 3; i++)
+  {
+    r.m[i][0] = t->m[i][0] * s->m[0][0]
+              + t->m[i][1] * s->m[1][0]
+              + t->m[i][2] * s->m[2][0];
+    r.m[i][1] = t->m[i][0] * s->m[0][1]
+              + t->m[i][1] * s->m[1][1]
+              + t->m[i][2] * s->m[2][1];
+    r.m[i][2] = t->m[i][0] * s->m[0][2]
+              + t->m[i][1] * s->m[1][2]
+              + t->m[i][2] * s->m[2][2];
+  }
+  *result = r;
+}
+
+static inline void
+_ctx_matrix_identity (CtxMatrix *matrix)
+{
+  matrix->m[0][0] = 1.0f;
+  matrix->m[0][1] = 0.0f;
+  matrix->m[0][2] = 0.0f;
+  matrix->m[1][0] = 0.0f;
+  matrix->m[1][1] = 1.0f;
+  matrix->m[1][2] = 0.0f;
+  matrix->m[2][0] = 0.0f;
+  matrix->m[2][1] = 0.0f;
+  matrix->m[2][2] = 1.0f;
+}
+
+static inline void
+_ctx_user_to_device_prepped (CtxState *state, float x, float y, int *out_x, int *out_y);
+static inline void
+_ctx_user_to_device_prepped_fixed (CtxState *state, int x, int y, int *x_out, int *y_out);
+
+static int ctx_float_to_string_index (float val);
+
+void
+ctx_render_ctx_masked (Ctx *ctx, Ctx *d_ctx, uint32_t mask);
+
+static void ctx_state_set_blob (CtxState *state, uint32_t key, uint8_t *data, int len);
+
+
+static inline void
+_ctx_transform_prime (CtxState *state);
+
+void ctx_push_backend (Ctx *ctx,
+                       void *backend);
+void ctx_pop_backend (Ctx *ctx);
+
+
+static inline float ctx_fmod1f (float val)
+{
+  return ctx_fabsf (val - (int)(val));
+}
+
+static inline float ctx_fmodf (float val, float modulus)
+{
+  return ctx_fmod1f(val/modulus) * modulus;
+}
+
+#if EMSCRIPTEN
+#define CTX_EXPORT EMSCRIPTEN_KEEPALIVE
+#else
+#define CTX_EXPORT
+#endif
+
+
+
+#endif
+
+#if CTX_EVENTS
+#include <sys/select.h>
+#endif
+/*
+ * each scanline is encoded as a header + rle data + free space + reversed palette
+ * 
+ * header:  u16_length, u8_colors, u8_0
+ *
+ * The u8_0 padding byte needs to be 0 in the future it might hold higher values, but
+ * always smaller than colors, this to make it use a value that never naturally occurs
+ * for u8 associated alpha, making it possible to store either CBRLE or raw pixel
+ * values in 32bpp scanlines.
+ * 
+ * The indexed palette is per-scanline, the first eight palette entries are
+ * fixed as a grayscale. The palette is allocated on the fly and is stored from
+ * the end of the scanline. As the palette fills up it gets harder and harder
+ * for new colors to warrant a allocating new entries, gradients only allocate
+ * colors for their start and end colors.
+ *
+ * When we run out of free space the scanline gets recompressed, reducing color
+ * depth and simplifying pixel data, for 32bpp scanlines this can in the future
+ * mean fall over to uncompressed raw data. Doing composiing on RLE encoded
+ * data can on high resolution framebuffers lead to significantly lower memory
+ * bandwidth and computation required on frames with significant overdraw; to
+ * fully realise this potential further integration is needed.
+ *
+ */
+
+
+
+#if CTX_IMPLEMENTATION || CTX_SIMD_BUILD
+#if CTX_ENABLE_CBRLE
+
+
+#define CBRLE_GRADIENT  1
+#define ALLOW_MERGE     1
+
+#define PAL_GRAY_PREDEF 0
+
+#define GRADIENT_THRESHOLD     1
+#define COLOR_THRESHOLD_START  6
+#define COLOR_THRESHOLD_END    (color_budget<=128?32:21)
+
+#define MAX_GRADIENT_LENGTH    (color_budget<=128?63:63)
+
+// with high numbers, repeated recompressions steal a *lot* of time
+// when data is overflowing
+//
+#define MAX_RECOMPRESS         2
+
+// increase to have larger safety margin between pixeldata
+// and palette
+#define BORDER                 1
+
+
+//  -- currently unused
+#define MERGE_THRESHOLD        64   //(no<2?50:98)
+#define MERGE_CHANCE           42   //(no<2?25:80)
+
+#define PAL_GRAY_OFFSET      (PAL_GRAY_PREDEF * 8)
+
+enum {
+        CBRLE_MODE_SET=0,
+        CBRLE_MODE_OVER=1,
+        CBRLE_MODE_COPY=2,
+        CBRLE_MODE_SET_COLOR=3
+};
+
+
+///  max 32 or 64 colors per scanline
+//      
+//     1  5 2
+//     1  7    8
+//     1         4  4  4 1 1 1  - the last 3bits are lengths 0 means 1 and 1 means 2 for 2 first
+static inline int encode_pix (uint8_t *cbrle, int pos, 
+                              uint8_t idx, int range, int gradient,
+                              int allow_merge)
+{
+#if ALLOW_MERGE
+   if (allow_merge && pos > 3)
+   {
+      if (cbrle[pos-1]        < 128 &&  //
+          cbrle[pos-2]        < 128 &&  // previous must be single
+          (cbrle[pos-1] >> 4) == 0 && idx <4 && range == 1 &&
+          (cbrle[pos-1]&15) <4)
+      {
+         int previdx = cbrle[pos-1]&15;
+         cbrle[pos-1] = (8-1) * 16 + (idx << 2) + previdx;
+         return 0;
+      }
+   }
+#endif
+
+   if (range > 64)
+     fprintf (stderr, "ERROR trying to encode too big range %i!\n", range);
+   if (idx <= 15 && range < 8 && !gradient)
+   {
+     cbrle[pos] = (range-1) * 16 + idx;
+     return 1;
+   }
+   else
+   {
+     cbrle[pos] = (range) + 128 + gradient * 64;
+     cbrle[pos+1] = idx;
+     return 2;
+   }
+}
+
+
+// pix: pointer to data to decode
+// ret_col: where to store 8bit color index
+// length_px: number of pixels wide
+// gradient: set to 1 if it is a gradient
+//
+// returns number of bytes in encoded form.
+static inline int decode_pix (const uint8_t *pix,
+                              uint8_t       *ret_col1,
+                              uint8_t       *ret_col2,
+                              int           *length_px,
+                              int           *gradient)
+{
+  int encoded_length = 1;
+  int len = 1;
+  int col = 0;
+  int col2 = 0;
+  if (gradient)
+    *gradient = 0;
+  if ((*pix & 0x80) == 0)
+  {
+    len = pix[0] >> 4;
+    len++;
+    if (len == 8)
+    {
+      len = 2;
+      col = pix[0] & 15;
+      col2 = col >> 2;
+      col = col & 3;
+      if (ret_col2)
+        *ret_col2 = col2;
+    }
+    else
+    {
+      col = ( pix[0] & 15);
+      if (ret_col2)
+        *ret_col2 = col;
+    }
+  }
+  else
+  {
+    len = pix[0]-128;
+    if (len > 64)
+    {
+      len -= 64;
+      if(gradient)
+        *gradient = 1;
+    }
+    col = pix[1];
+    encoded_length = 2;
+    if (ret_col2)
+      *ret_col2 = col;
+  }
+  if (length_px)
+    *length_px = len;
+  if (ret_col1)
+    *ret_col1 = col;
+  return encoded_length;
+}
+
+
+static inline int decode_pix_len (const uint8_t *pix, int *length_px)
+{
+  return decode_pix (pix, NULL, NULL, length_px, NULL);
+}
+
+
+static inline uint32_t color_diff (uint32_t a, uint32_t b)
+{
+  uint32_t sum_dist = 0;
+  for (int c = 0; c < 4; c++)
+  {
+    sum_dist += ((a&0xff)-(b&0xff))*((a&0xff)-(b&0xff));
+    a>>=8;
+    b>>=8;
+  }
+  return sum_dist;
+}
+
+static inline int is_b_good_middle (uint32_t a, uint32_t b, uint32_t c, int color_budget)
+{
+  uint32_t lerped = ctx_lerp_RGBA8 (a, c, 127);
+
+  if (a == c) return 0; // gradients are more expensive than not
+  uint32_t sum_dist = color_diff (lerped, b);
+  return (sum_dist < (GRADIENT_THRESHOLD*GRADIENT_THRESHOLD*3));
+}
+
+static inline int
+ctx_CBRLE_recompress (uint8_t *cbrle, int size, int width, int pos, int level);
+
+#define GRAYCOL(v) ((v) + (v) * 256 + (v) * 256 * 256 + (unsigned)255*256*256*256)
+static const uint32_t hard_pal[8]={
+        GRAYCOL(0*255/7),
+        GRAYCOL(1*255/7),
+        GRAYCOL(2*255/7),
+        GRAYCOL(3*255/7),
+        GRAYCOL(4*255/7),
+        GRAYCOL(5*255/7),
+        GRAYCOL(6*255/7),
+        GRAYCOL(7*255/7)
+};
+#include <math.h>
+#define pow2(a) ((a)*(a))
+#define ctx_sqrtf sqrtf
+
+
+
+static inline int
+ctx_CBRLE_get_color_mask (int gen)
+{
+  switch (gen)
+  {
+    case 0:
+    case 1:
+    default:
+      return 0xffffffff;
+    case 2:
+      return 0xfffefefe;
+    case 3:
+      return 0xfffcfcfc;
+    case 4:
+      return 0xfff8f8f8;
+    case 5:
+      return 0xfff0f0f0;
+    case 6:
+      return 0xffe0e0e0;
+  }
+  return 0xffe0e0e0;
+}
+
+
+static inline int
+ctx_CBRLE_get_color_idx (uint8_t *cbrle, int size, int color_budget, uint32_t color, int gen)
+{
+  int found = 0;
+  int colors = cbrle[2];
+  int idx = 0;
+    uint32_t threshold =
+       (uint32_t)
+       ctx_lerpf (COLOR_THRESHOLD_START*COLOR_THRESHOLD_START*3,
+                  COLOR_THRESHOLD_END*COLOR_THRESHOLD_END*3, 
+                  //((colors  / ( color_budget-1.0f))) );
+                  ctx_sqrtf((colors  / ( color_budget-1.0f))) );
+
+#if 0 // reduce color-depth of grays
+  if (//gen > 0 &&
+      (color&0xf0) == ((color >> 8) & 0xf0) &&
+      (color&0xf0) == ((color >> 16) & 0xf0))
+  {
+    color  &= 0xfff0f0f0u;
+  }
+#endif
+
+  color = color & ctx_CBRLE_get_color_mask (gen+2);
+
+  uint32_t best_diff = 255*255*3;
+
+
+#if PAL_GRAY_PREDEF // predefined 8 grays
+  if (!found)
+  {
+    uint32_t diff;
+    int best = -1;
+    for (;idx < 8; idx++)
+    if ((diff = color_diff (hard_pal[idx], color)) < best_diff)
+    {
+      best_diff = diff;
+      best = idx;
+    }
+    idx = best;
+    if (best_diff < threshold)
+    {
+      found = 1;
+    }
+  }
+#endif
+
+  if (!found)
+  {
+    uint32_t diff;
+    int best = -1;
+    for (;idx < colors; idx++)
+    if ((diff = color_diff (((uint32_t*)(&cbrle[size-4-(idx)*4]))[0], color)) < best_diff)
+    {
+      best_diff = diff;
+      best = idx;
+    }
+    if (best !=-1) idx = best + PAL_GRAY_OFFSET;
+
+    /* the color diff threshold is dynamic, as
+     * palette space gets tighter we are less eager to add*/
+    if (best_diff > threshold && colors < color_budget-1) // didn't find - store new color
+    {
+      idx = colors++;
+      ((uint32_t*)(&cbrle[size-4-idx*4]))[0] = color;
+      cbrle[2] = colors;
+      idx += PAL_GRAY_OFFSET;
+    }
+  }
+
+  return idx;
+}
+
+static inline uint32_t
+ctx_over_RGBA8 (uint32_t dst, uint32_t src, uint32_t cov);
+
+static inline uint32_t
+ctx_over_RGBA8_2 (uint32_t dst, uint32_t si_ga, uint32_t si_rb, uint32_t si_a, uint32_t cov);
+
+
+static inline uint32_t
+ctx_CBRLE_idx_to_color (const uint8_t *cbrle, int size, int idx)
+{
+#if PAL_GRAY_PREDEF
+  if (idx < 8)
+#if 0
+    return  (idx * 17 +
+             idx * 17 * 256 +
+             idx * 17 * 256 * 256 +
+             (unsigned)255*256*256*256);
+#else
+     return hard_pal[idx];
+#endif
+  else
+#endif
+     return ((uint32_t*)(&cbrle[size-4-(idx-PAL_GRAY_OFFSET)*4]))[0];
+}
+
+static inline int
+ctx_CBRLE_compute_color_budget (int width, int size)
+{
+  int color_budget = 256;
+  //return color_budget;
+  switch ((size*8/width)){
+      case 1:
+      case 2: color_budget  = 8;break;
+      case 3: color_budget  = 8;break;
+      case 4: color_budget  = 16;break;
+      case 5: color_budget  = 32;break;
+      case 6: color_budget  = 64;break;
+      case 7: color_budget  = 128;break;
+      case 8: color_budget  = 136;break;
+      case 9: 
+      case 10: color_budget = 196;break;
+      case 11:
+      case 12:
+      case 13:
+      case 14:
+      case 15:
+      case 16: color_budget = 256;break;
+              break;
+      case 17:case 18:case 19:case 20:case 21:case 22:case 23:
+      case 24:
+      case 32: color_budget = 256;break;
+              break;
+      default:
+              color_budget = ctx_mini(256,size/2/4);
+              break;
+  }
+  color_budget = ctx_maxi(color_budget,ctx_mini(256,size/5/4));
+  return color_budget;
+}
+
+static inline void
+ctx_CBRLE_compress (const uint8_t *rgba_in,
+                     uint8_t       *cbrle,
+                     int            width,
+                     int            size,
+                     int            skip,
+                     int            count,
+                     int            mode,
+                     uint8_t       *coverage,
+                     int            allow_recompress)
+{
+  const uint8_t *rgba = rgba_in;
+  int pos;
+
+  uint32_t prev_val;
+  int recompress = 0;
+
+  int repeats;
+  int colors = 0;
+
+  uint32_t src_rgba= ((uint32_t*)rgba_in)[0];
+  int color_budget = ctx_CBRLE_compute_color_budget (width, size);
+
+#if CBRLE_GRADIENT
+  int in_gradient = 0;
+#endif
+
+  if (mode == 0)
+  {
+#if 0
+  for (int round = 0; round < 1; round++)
+  for (int i = 1; i < width-1; i++)
+  {
+    int g0 = rgba[(i-1)*4+1];
+    int g1 = rgba[(i)*4+1];
+    int g2 = rgba[(i+1)*4+1];
+
+    if (abs(g0-g1) < abs(g1-g2))
+    {
+      for (int c = 0; c < 4; c++)
+      {
+        rgba[i*4+c]=(rgba[(i-1)*4+c]+rgba[i*4+c])/2;
+      }
+    }
+    else if (abs(g0-g1) == abs(g1-g2))
+    {
+    }
+    else
+    {
+      for (int c = 0; c < 4; c++)
+      {
+        rgba[i*4+c]=(rgba[(i+1)*4+c]+rgba[(i)*4+c])/2;
+      }
+    }
+  }
+#endif
+  }
+
+  uint8_t trailer[size+2];
+  int trailer_size = 0;
+
+  uint8_t copy[(mode>=1&&mode<=2)?count*2+2:1];
+  int copy_size = 0;
+
+#if 1
+  if (cbrle[0] == 0 &&
+      cbrle[1] == 0)
+  {
+    pos = 4;
+    for (int i =0; i < width/63;i++)
+    {
+      pos = encode_pix (cbrle, pos, 0, 63, 0, 0);
+    }
+    ((uint16_t*)cbrle)[0]=pos;
+    cbrle[2] = 0;
+    cbrle[3] = 16;
+  }
+#endif
+
+  rgba = rgba_in;
+
+  pos = 4;
+  prev_val = 0xc0ffee;
+  repeats = 0;
+  
+  int trailer_start = 0;
+
+  int x = 0;
+
+  if (skip || width != count)
+  {
+    int original_length = ((uint16_t*)cbrle)[0];
+    colors = cbrle[2];
+    pos = 4;
+
+    for (x = 0; x < skip + count;)
+    {
+       int repeat = 0;
+       int codelen = decode_pix_len (&cbrle[pos], &repeat);
+       if (x + repeat < skip + count && pos < original_length)
+       {
+         pos += codelen;
+         x   += repeat;
+       }
+       else
+       {
+         uint8_t idx;
+         uint8_t idx2;
+         int gradient;
+         decode_pix (&cbrle[pos], &idx, &idx2, &repeat, &gradient);
+         
+         trailer_start = pos + codelen;
+         if (x + repeat == skip + count)
+         {
+           trailer_size = original_length - trailer_start;
+           if (trailer_size > 0)
+           {
+             memcpy (&trailer[0], &cbrle[trailer_start], trailer_size);
+           }
+           else
+           {
+             trailer_size = 0;
+           }
+         }
+         else
+         {
+           repeat -= (skip + count - x);
+
+           if (repeat > 0)
+           {
+             trailer[0] = repeat + 128 + gradient * 64;
+             trailer[1] = idx;
+           }
+           trailer_size = original_length - trailer_start;
+           if (trailer_size > 0)
+           {
+             memcpy (&trailer[2], &cbrle[pos + codelen], trailer_size);
+             if (repeat>0)trailer_size += 2;
+           }
+           else
+           {
+             trailer_size = 0;
+           }
+         }
+         break;
+       }
+    }
+
+    pos  = 4;
+    rgba = rgba_in;
+
+    for (x = 0; x < skip && pos < original_length;)
+    {
+       int     repeat = 0;
+       uint8_t idx;
+       uint8_t idx2;
+       int     dec_repeat;
+       int     gradient;
+       //int len = decode_pix_len (&cbrle[pos], &repeat);
+       int len = decode_pix (&cbrle[pos], &idx, &idx2, &dec_repeat, &gradient);
+       if (x + dec_repeat < skip)
+       {
+         pos  += len;
+         x    += dec_repeat;
+         rgba += 4 * dec_repeat;
+       }
+       else
+       {
+         repeat = skip - x;
+
+         if (repeat>0)
+         {
+           x += repeat;
+
+           if (mode==CBRLE_MODE_COPY ||
+               mode==CBRLE_MODE_OVER)
+           {
+             int mpos = 0;
+             if (dec_repeat != repeat)
+               mpos = encode_pix (copy, 0, idx, dec_repeat-repeat, gradient, 0);
+             if (original_length)
+             {
+               if (trailer_start == 0) trailer_start = original_length;
+               copy_size = trailer_start - (pos + len);
+               if (copy_size <0)
+                  fprintf (stderr, "%i: uh? cs:%i %i | %i %i %i\n", __LINE__,
+                                  copy_size, (int)sizeof(copy),
+                                  trailer_start, pos, len);
+               if (copy_size<0)copy_size=0;
+               copy_size = ctx_mini(copy_size, sizeof(copy));
+               if (copy_size)
+               {
+                 memcpy (&copy[mpos], &cbrle[pos + len], copy_size);
+               }
+               copy_size += mpos;
+             }
+             else
+             {
+               copy_size = 0;
+             }
+           }
+           else
+           {
+             rgba += 4 * repeat;
+           }
+           gradient = 0;
+           pos += encode_pix (cbrle, pos, idx, repeat, gradient, 0);
+         }
+         else
+         {
+           if (mode != CBRLE_MODE_SET)
+           {
+             int mpos = 0;
+             copy_size = trailer_start - (pos + len);
+             fprintf (stderr, "csb:%i %i\n", copy_size, (int)sizeof(copy));
+             memcpy (&copy[mpos], &cbrle[pos + len], copy_size);
+           }
+         }
+  
+         break;
+       }
+    }
+  }
+  else
+  {
+    colors = 0;
+    cbrle[0]=0; // length
+    cbrle[1]=0; // length
+    cbrle[2]=0; // pal size
+    cbrle[3]=0; // alpha
+  }
+
+#if CBRLE_GRADIENT
+  int prev_in_gradient = 0;
+#endif
+
+  if (mode == CBRLE_MODE_OVER)
+  {
+     uint32_t si_ga      = (src_rgba & 0xff00ff00) >> 8;
+     uint32_t si_rb      = src_rgba & 0x00ff00ff;
+     uint32_t si_a       = si_ga >> 16;
+
+     for (int mpos = 0; mpos < copy_size && x < width && count > 0; )
+     {
+       uint8_t offsetA = 0;
+       uint8_t offset2 = 0;
+       int repeat = 0;
+       int gradient = 0;
+       mpos += decode_pix (&copy[mpos], &offsetA, &offset2, &repeat, &gradient);
+
+       uint32_t color = ctx_CBRLE_idx_to_color (cbrle, size, offsetA);
+
+       repeat = ctx_mini (repeat, count);
+       if (repeat)
+       {
+         do {
+            int part = 0;
+            int cov = coverage[0];
+            while (coverage[0]==cov && count >0 && repeat > 0 && x < width)
+            {
+              x        ++;
+              coverage ++;
+              part     ++;
+              count    --;
+              repeat   --;
+            }
+
+            {
+         uint32_t composited = ctx_over_RGBA8_2 (color, si_ga, si_rb, si_a, cov);
+         int idx = ctx_CBRLE_get_color_idx (cbrle, size,
+                              ctx_mini(color_budget,  size-pos-colors*4 - 2), // XXX expensive?
+                              composited, recompress);
+         colors = cbrle[2];
+
+            pos += encode_pix  (cbrle, pos, idx, part, gradient, 1);
+            }
+         } while (repeat > 0);
+       }
+     }
+  }
+  else if (mode == CBRLE_MODE_COPY)
+  {
+     uint32_t si_ga      = (src_rgba & 0xff00ff00) >> 8;
+     uint32_t si_rb      = src_rgba & 0x00ff00ff;
+     for (int mpos = 0; mpos < copy_size && x < width && count > 0; )
+     {
+       uint8_t offsetA = 0;
+       uint8_t offset2 = 0;
+       int repeat = 0;
+       int gradient = 0;
+       mpos += decode_pix (&copy[mpos], &offsetA, &offset2, &repeat, &gradient);
+
+       uint32_t color = ctx_CBRLE_idx_to_color (cbrle, size, offsetA);
+
+       repeat = ctx_mini (repeat, count);
+       if (repeat)
+       {
+         colors = cbrle[2];
+         do {
+            int part = 0;
+            int cov = coverage[0];
+            while (coverage[0]==cov && count >0 && repeat > 0 && x < width)
+            {
+              x++;
+              coverage++;
+              part++;
+              count --;
+              repeat--;
+            }
+
+            {
+         uint32_t composited;
+         composited = ctx_lerp_RGBA8_2 (color, si_ga, si_rb, cov);
+         int idx = ctx_CBRLE_get_color_idx (cbrle, size, ctx_mini(color_budget,  size-pos-colors*4 - 8), composited, recompress);
+            pos += encode_pix  (cbrle, pos, idx, part, gradient, 1);
+            }
+         } while (repeat > 0);
+       }
+     }
+  }
+  else
+  if (mode == CBRLE_MODE_SET_COLOR)
+  {
+     int idx = ctx_CBRLE_get_color_idx (cbrle, size, ctx_mini(color_budget,  size-pos-colors*4 ), src_rgba, recompress);
+     while (count > 0)
+     {
+        int repeat = ctx_mini (count, 63);
+        pos += encode_pix  (cbrle, pos, idx, repeat, 0, 1);
+        count -= repeat;
+        x += repeat;
+     }
+  }
+  else
+  {
+
+  for (; x < width && count--; x++)
+    {
+      uint32_t val = ((uint32_t*)rgba)[0] & 0xffffffff;
+      // NOTE: we could probably drop precision to known lower precision reached here,
+      //       but it requires more global state
+#if CBRLE_GRADIENT
+      uint32_t next_val = 0x23ff00ff;
+
+      if (x + 1 < width && count>1)
+        next_val = ((uint32_t*)rgba)[1] & 0xffffffffu;
+#endif
+
+      if (pos > size - BORDER - trailer_size - colors * 4)
+      {
+        ((uint16_t*)cbrle)[0]=pos;
+
+        if (allow_recompress)
+        do {
+          pos = ctx_CBRLE_recompress (cbrle, size, width, pos, recompress);
+          colors = cbrle[2];
+          recompress ++;
+        }
+        while (pos > size - BORDER - trailer_size - colors * 4
+
+                       
+                        && recompress < MAX_RECOMPRESS);
+        if (recompress >3) color_budget = 0;
+        if (pos > size - BORDER - trailer_size - colors * 4)
+           goto done;
+      }
+
+      if (val != prev_val || repeats>=63)
+      {
+        if (repeats)
+        {
+
+#if CBRLE_GRADIENT
+          if ((( repeats == 1 && in_gradient == 0) ||
+                ( repeats < MAX_GRADIENT_LENGTH && in_gradient == 1)) 
+
+              && is_b_good_middle (prev_val, val, next_val, color_budget)
+          )
+          {
+            in_gradient = 1;
+          }
+          else
+#endif
+          if (repeats) // got incoming pixels
+                            // of color to store
+          {
+            int idx = ctx_CBRLE_get_color_idx (cbrle, size, ctx_mini(color_budget,  size-pos-colors*4-BORDER ), prev_val, recompress);
+            colors = cbrle[2];
+
+            pos += encode_pix (cbrle, pos, idx, repeats,
+                            
+#if CBRLE_GRADIENT
+                      ((prev_in_gradient==1) && (in_gradient == 1))
+#else
+                      0
+#endif
+                      
+                      
+                      , 1);
+
+#if CBRLE_GRADIENT
+            prev_in_gradient = in_gradient;
+            in_gradient = 0;
+#endif
+            repeats = 0;
+          }
+        }
+      }
+      repeats++;
+      prev_val = val;
+      if (!mode)
+        rgba +=4;
+    }
+
+    if (repeats && pos  < size - colors * 4 - BORDER)
+    {
+          int idx = ctx_CBRLE_get_color_idx (cbrle, size, ctx_mini(color_budget,  size-pos-colors*4-BORDER ), prev_val, recompress);
+          colors = cbrle[2];
+  
+          if (repeats && pos + 4 < size - colors * 4 - BORDER)
+          {
+            pos += encode_pix (cbrle, pos, idx, repeats, 0, 1);
+            repeats = 0;
+          }
+    }
+    }
+
+    if (trailer_size)
+    {
+       for (int i = 0; i < trailer_size;i++)
+       {
+
+      if (pos > size - trailer_size - BORDER - colors * 4)
+      {
+        ((uint16_t*)cbrle)[0]=pos;
+        cbrle[2] = colors;
+
+        if (allow_recompress)
+        do {
+          pos = ctx_CBRLE_recompress (cbrle, size, width, pos, recompress);
+          colors = cbrle[2];
+          recompress ++;
+        }
+        while (pos > size - trailer_size - BORDER - colors * 4 && recompress < MAX_RECOMPRESS);
+        if (pos > size - trailer_size - BORDER - colors * 4)
+           goto done;
+      }
+
+         cbrle[pos++] = trailer[i];
+       }
+    }
+done:
+    ((uint16_t*)cbrle)[0]=pos;
+    cbrle[2] = colors;
+    //cbrle[3] = 16;
+}
+
+static inline void
+_ctx_CBRLE_decompress (const uint8_t *cbrle, uint8_t *rgba8, int width, int size, int skip, int count)
+{
+  int x = 0;
+  int pos = 4;
+  uint32_t pixA = 0;
+#if CBRLE_GRADIENT
+  uint32_t prev_pix = 0;
+#endif
+  const uint8_t *codepix=cbrle+4;
+
+  int length = ((uint16_t*)cbrle)[0];
+  //int colors = cbrle[2]; 
+
+  for (x = 0; x < skip;)
+  {
+     int repeat = 0;
+     if (pos < length)
+     {
+     int len = decode_pix_len (&cbrle[pos], &repeat);
+     if (x + repeat < skip)
+     {
+       pos += len;
+       codepix += len;
+       x+=repeat;
+     }
+     else
+       break;
+     }
+     else 
+       x++;
+  }
+  //x=skip;
+
+  for (; pos < length && x < width; )
+  {
+    uint8_t offsetA = 0;
+    uint8_t offset2 = 0;
+    int repeat = 0;
+    int gradient = 0;
+    int codelen = decode_pix (codepix, &offsetA, &offset2, &repeat, &gradient);
+    //fprintf (stderr, "{%i r%i%s}", offsetA, repeat, gradient?"g":"");
+
+    pixA = ctx_CBRLE_idx_to_color (cbrle, size, offsetA);
+
+#if CBRLE_GRADIENT
+    if (gradient)
+    {
+      for (int i = 0; i < repeat && x < width && count--; i++)
+      {
+        int has_head = 1;
+        int has_tail = 0;
+        float dt = (i+has_head+0.0f) / (repeat+ has_head + has_tail-1.0f);
+        ((uint32_t*)(&rgba8[(x++)*4]))[0] = ctx_lerp_RGBA8 (prev_pix, pixA, (uint8_t)(dt*255.0f));
+        //((uint32_t*)(&rgba8[(x++)*4]))[0] = (int)(dt * 255) | 0xff000000;
+      }
+    }
+    else
+#endif
+    {
+       if (offsetA != offset2 && repeat == 2)
+       {
+         uint32_t pixB = ctx_CBRLE_idx_to_color (cbrle, size, offset2);
+         ((uint32_t*)(&rgba8[(x++)*4]))[0] = pixA;
+         ((uint32_t*)(&rgba8[(x++)*4]))[0] = pixB;
+       }
+       else
+       {
+         for (int i = 0; i < repeat && x < width && count--; i++)
+           ((uint32_t*)(&rgba8[(x++)*4]))[0] = pixA;
+       }
+    }
+#if CBRLE_GRADIENT
+    prev_pix = pixA;
+#endif
+
+    codepix += codelen;
+    pos += codelen;
+  }
+  //fprintf (stderr, "\n");
+
+  // replicate last value
+  while (x < width && count--)
+    ((uint32_t*)(&rgba8[(x++)*4]))[0] = prev_pix;
+}
+
+
+static inline int
+ctx_CBRLE_recompress_sort_pal (uint8_t *cbrle, int size, int width, int length, int no)
+{
+  uint8_t temp[width*4 + 32];
+  int colors = cbrle[2];
+  //fprintf (stderr, "{%i %i %i}", size, colors, no);
+  uint32_t mask = ctx_CBRLE_get_color_mask (no);
+    for (int i = size - colors * 4; i < size-4; i+=4)
+    {
+      uint32_t *pix = (uint32_t*)(&cbrle[i]);
+      pix[i] &= mask;
+    }
+
+  _ctx_CBRLE_decompress (cbrle, temp, width, size, 0, width);
+  memset(cbrle, 0, size);
+  ctx_CBRLE_compress (temp, cbrle, width, size, 0, width, CBRLE_MODE_SET, NULL, 0);
+  return ((uint16_t*)cbrle)[0];
+}
+
+
+static inline int
+ctx_CBRLE_recompress_drop_bits (uint8_t *cbrle, int size, int width, int length, int no)
+{
+  uint8_t temp[width*4 + 32];
+  int colors = cbrle[2];
+  //fprintf (stderr, "{%i %i %i}", size, colors, no);
+  uint32_t mask = ctx_CBRLE_get_color_mask (no);
+    for (int i = size - colors * 4; i < size-4; i+=4)
+    {
+      uint32_t *pix = (uint32_t*)(&cbrle[i]);
+      pix[i] &= mask;
+    }
+  _ctx_CBRLE_decompress (cbrle, temp, width, size, 0, width);
+  memset(cbrle, 0, size);
+  ctx_CBRLE_compress (temp, cbrle, width, size, 0, width, CBRLE_MODE_SET, NULL, 0);
+  return ((uint16_t*)cbrle)[0];
+}
+
+static inline int
+ctx_CBRLE_recompress_merge_pairs (uint8_t *cbrle, int size, int width, int length)
+{
+  uint8_t temp[width*4];
+   // drop horizontal resolution
+      _ctx_CBRLE_decompress (cbrle, temp, width, size, 0, width);
+      for (int i = 0; i < width-1; i++)
+      if ((rand()%100<MERGE_CHANCE)
+       &&  color_diff ( ((uint32_t*)(&temp[i*4]))[0],
+                        ((uint32_t*)(&temp[(i+1)*4]))[0]) < MERGE_THRESHOLD*MERGE_THRESHOLD*3
+         )
+      for (int c = 0; c < 4; c++)
+        temp[i*4+c]=temp[(i+1)*4+c];
+
+      memset(cbrle, 0, size);
+      ctx_CBRLE_compress (temp, cbrle, width, size, 0, width, CBRLE_MODE_SET, NULL, 0);
+
+  return ((uint16_t*)cbrle)[0];
+}
+
+static inline int
+ctx_CBRLE_recompress_smoothen (uint8_t *cbrle, int size, int width, int length)
+{
+  uint8_t temp[width*4];
+  _ctx_CBRLE_decompress (cbrle, temp, width, size, 0, width);
+
+#if 0
+  for (int round = 0; round < 2; round++)
+  for (int i = 1; i < width-1; i++)
+  {
+    for (int c = 0; c < 4; c++)
+    {
+      temp[i*4+c]=(uint8_t)(temp[(i+1)*4+c]*0.10f+temp[i*4+c]*0.8f+temp[(i-1)*4+c]*0.10f);
+    }
+  }
+#endif
+
+#if 1
+  for (int round = 0; round < 2; round++)
+  for (int i = 1; i < width-1; i++)
+  {
+    int g0 = temp[(i-1)*4+1];
+    int g1 = temp[(i)*4+1];
+    int g2 = temp[(i+1)*4+1];
+
+    if (abs(g0-g1) < abs(g1-g2))
+    {
+      for (int c = 0; c < 4; c++)
+      {
+        temp[i*4+c]=(temp[(i-1)*4+c]+temp[i*4+c])/2;
+      }
+    }
+    else if (abs(g0-g1) == abs(g1-g2))
+    {
+#if 0
+      for (int c = 0; c < 4; c++)
+      {
+        temp[i*4+c]=(temp[(i+1)*4+c]+temp[i*4+c]+temp[(i-1)*4+c])/3;
+      }
+#endif
+    }
+    else
+    {
+      for (int c = 0; c < 4; c++)
+      {
+        temp[i*4+c]=(temp[(i+1)*4+c]+temp[(i)*4+c])/2;
+      }
+    }
+  }
+#else
+#endif
+
+  memset(cbrle, 0, size);
+  ctx_CBRLE_compress (temp, cbrle, width, size, 0, width, CBRLE_MODE_SET, NULL, 0);
+
+  return ((uint16_t*)cbrle)[0];
+}
+
+static inline int
+ctx_CBRLE_recompress (uint8_t *cbrle, int size, int width, int length, int no)
+{
+  //uint8_t temp[width*4];
+      length = ((uint16_t*)cbrle)[0];
+
+      //if (no>0)
+      //fprintf (stderr, "len: %i cols:%i i:%i\n", length, cbrle[2], no);
+
+#if 0
+//ctx_CBRLE_recompress_smoothen (cbrle, size, width, length);
+  ctx_CBRLE_recompress_smoothen (cbrle, size, width, length);
+  if (((uint16_t*)cbrle)[0] < length - 8 || no == 0)
+  {
+//  fprintf (stderr, "rlen: %i cols:%i i:%i\n", ((uint16_t*)cbrle)[0],
+//                      cbrle[2], no);
+    return ((uint16_t*)cbrle)[0];
+  }
+#endif
+#if 1
+  if (no == 0)
+  {
+    ctx_CBRLE_recompress_smoothen (cbrle, size, width, length);
+    if (((uint16_t*)cbrle)[0] < length -8)
+      return ((uint16_t*)cbrle)[0];
+  }
+#endif
+
+#if 0
+  ctx_CBRLE_recompress_drop_bits (cbrle, size, width, length, no);
+  if (((uint16_t*)cbrle)[0] < length -8)
+    return ((uint16_t*)cbrle)[0];
+#endif
+
+
+#if 0
+  ctx_CBRLE_recompress_merge_pairs (cbrle, size, width, length);
+  if (((uint16_t*)cbrle)[0] < length - 8 || no < 2)
+  {
+    return ((uint16_t*)cbrle)[0];
+  }
+#endif
+
+  return ((uint16_t*)cbrle)[0];
+}
+
+
+#endif
+#endif
+#ifndef CTX_DRAWLIST_H
+#define CTX_DRAWLIST_H
+
+static int
+ctx_conts_for_entry (CtxEntry *entry);
+void
+ctx_iterator_init (CtxIterator      *iterator,
+                   CtxDrawlist  *drawlist,
+                   int               start_pos,
+                   int               flags);
+
+int ctx_iterator_pos (CtxIterator *iterator);
+
+static void
+ctx_drawlist_resize (CtxDrawlist *drawlist, int desired_size);
+static int
+ctx_drawlist_add_single (CtxDrawlist *drawlist, CtxEntry *entry);
+static int ctx_drawlist_add_entry (CtxDrawlist *drawlist, CtxEntry *entry);
+int
+ctx_drawlist_insert_entry (CtxDrawlist *drawlist, int pos, CtxEntry *entry);
+int
+ctx_add_data (Ctx *ctx, void *data, int length);
+
+int ctx_drawlist_add_u32 (CtxDrawlist *drawlist, CtxCode code, uint32_t u32[2]);
+int ctx_drawlist_add_data (CtxDrawlist *drawlist, const void *data, int length);
+
+static CtxEntry
+ctx_void (CtxCode code);
+static inline CtxEntry
+ctx_f (CtxCode code, float x, float y);
+static CtxEntry
+ctx_u32 (CtxCode code, uint32_t x, uint32_t y);
+#if 0
+static CtxEntry
+ctx_s32 (CtxCode code, int32_t x, int32_t y);
+#endif
+
+static inline CtxEntry
+ctx_s16 (CtxCode code, int x0, int y0, int x1, int y1);
+static CtxEntry
+ctx_u8 (CtxCode code,
+        uint8_t a, uint8_t b, uint8_t c, uint8_t d,
+        uint8_t e, uint8_t f, uint8_t g, uint8_t h);
+
+#define CTX_PROCESS_VOID(cmd) do {\
+  CtxEntry commands[4] = {{cmd,{{0}}}};\
+  ctx_process (ctx, &commands[0]);}while(0) \
+
+#define CTX_PROCESS_F(cmd,x,y) do {\
+  CtxEntry commands[4] = {ctx_f(cmd,x,y),};\
+  ctx_process (ctx, &commands[0]);}while(0) \
+
+#define CTX_PROCESS_F1(cmd,x) do {\
+  CtxEntry commands[4] = {ctx_f(cmd,x,0),};\
+  ctx_process (ctx, &commands[0]);}while(0) \
+
+#define CTX_PROCESS_U32(cmd, x, y) do {\
+  CtxEntry commands[4] = {ctx_u32(cmd, x, y)};\
+  ctx_process (ctx, &commands[0]);}while(0)
+
+#define CTX_PROCESS_U8(cmd, x) do {\
+  CtxEntry commands[4] = {ctx_u8(cmd, x,0,0,0,0,0,0,0)};\
+  ctx_process (ctx, &commands[0]);}while(0)
+
+
+#if CTX_BITPACK_PACKER
+static unsigned int
+ctx_last_history (CtxDrawlist *drawlist);
+#endif
+
+#if CTX_BITPACK_PACKER
+static void
+ctx_drawlist_remove_tiny_curves (CtxDrawlist *drawlist, int start_pos);
+
+static void
+ctx_drawlist_bitpack (CtxDrawlist *drawlist, unsigned int start_pos);
+#endif
+
+static void
+ctx_process_cmd_str (Ctx *ctx, CtxCode code, const char *string, uint32_t arg0, uint32_t arg1);
+static void
+ctx_process_cmd_str_float (Ctx *ctx, CtxCode code, const char *string, float arg0, float arg1);
+static void
+ctx_process_cmd_str_with_len (Ctx *ctx, CtxCode code, const char *string, uint32_t arg0, uint32_t arg1, int len);
+
+#pragma pack(push,1)
+typedef struct 
+CtxSegment {
+#if CTX_32BIT_SEGMENTS
+  uint32_t code;
+#else
+  uint16_t code;
+#endif
+  union {
+#if CTX_32BIT_SEGMENTS
+   int32_t s16[4];
+#else
+   int16_t s16[4]; 
+#endif
+   uint32_t u32[2];
+  } data;
+  int32_t val;
+  int32_t delta;
+} CtxSegment;
+#pragma pack(pop)
+
+
+
+static inline CtxSegment
+ctx_segment_s16 (CtxCode code, int x0, int y0, int x1, int y1)
+{
+  CtxSegment command;
+  command.code = code;
+  command.data.s16[0] = x0;
+  command.data.s16[1] = y0;
+  command.data.s16[2] = x1;
+  command.data.s16[3] = y1;
+  return command;
+}
+
+static inline void
+ctx_edgelist_resize (CtxDrawlist *drawlist, int desired_size)
+{
+#if CTX_DRAWLIST_STATIC
+    {
+      static CtxSegment sbuf[CTX_MAX_EDGE_LIST_SIZE];
+      drawlist->entries = (CtxEntry*)&sbuf[0];
+      drawlist->size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+#else
+  int new_size = desired_size;
+  int min_size = CTX_MIN_JOURNAL_SIZE;
+  int max_size = CTX_MAX_JOURNAL_SIZE;
+    {
+      min_size = CTX_MIN_EDGE_LIST_SIZE;
+      max_size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+
+  if (CTX_UNLIKELY(drawlist->size == max_size))
+    { return; }
+  new_size = ctx_maxi (new_size, min_size);
+  //if (new_size < drawlist->count)
+  //  { new_size = drawlist->count + 4; }
+  new_size = ctx_mini (new_size, max_size);
+  if (new_size != drawlist->size)
+    {
+      int item_size = item_size = sizeof (CtxSegment);
+      //fprintf (stderr, "growing drawlist %p %i to %d from %d\n", drawlist, flags, new_size, drawlist->size);
+  if (drawlist->entries)
+    {
+      //printf ("grow %p to %d from %d\n", drawlist, new_size, drawlist->size);
+      CtxEntry *ne =  (CtxEntry *) ctx_malloc (item_size * new_size);
+      memcpy (ne, drawlist->entries, drawlist->size * item_size );
+      ctx_free (drawlist->entries);
+      drawlist->entries = ne;
+      //drawlist->entries = (CtxEntry*)ctx_malloc (drawlist->entries, item_size * new_size);
+    }
+  else
+    {
+      //fprintf (stderr, "allocating for %p %d\n", drawlist, new_size);
+      drawlist->entries = (CtxEntry *) ctx_malloc (item_size * new_size);
+    }
+  drawlist->size = new_size;
+    }
+  //fprintf (stderr, "drawlist %p is %d\n", drawlist, drawlist->size);
+#endif
+}
+
+
+static inline int
+ctx_edgelist_add_single (CtxDrawlist *drawlist, CtxEntry *entry)
+{
+  int ret = drawlist->count;
+
+  if (CTX_UNLIKELY(ret >= CTX_MAX_EDGE_LIST_SIZE- 20))
+    {
+      return 0;
+    }
+  if (CTX_UNLIKELY(ret + 2 >= drawlist->size))
+    {
+      int new_ = ctx_maxi (drawlist->size * 2, ret + 1024);
+      new_ = ctx_mini (CTX_MAX_EDGE_LIST_SIZE, new_);
+      ctx_edgelist_resize (drawlist, new_);
+    }
+
+  ((CtxSegment*)(drawlist->entries))[ret] = *(CtxSegment*)entry;
+  drawlist->count++;
+  return ret;
+}
+
+
+#endif
+
+
+#if CTX_COMPOSITE
+
+#define CTX_FULL_AA 15
+#define CTX_REFERENCE 0
+
+
+#define CTX_RGBA8_R_SHIFT  0
+#define CTX_RGBA8_G_SHIFT  8
+#define CTX_RGBA8_B_SHIFT  16
+#define CTX_RGBA8_A_SHIFT  24
+
+#define CTX_RGBA8_R_MASK   (0xff << CTX_RGBA8_R_SHIFT)
+#define CTX_RGBA8_G_MASK   (0xff << CTX_RGBA8_G_SHIFT)
+#define CTX_RGBA8_B_MASK   (0xff << CTX_RGBA8_B_SHIFT)
+#define CTX_RGBA8_A_MASK   (0xff << CTX_RGBA8_A_SHIFT)
+
+#define CTX_RGBA8_RB_MASK  (CTX_RGBA8_R_MASK | CTX_RGBA8_B_MASK)
+#define CTX_RGBA8_GA_MASK  (CTX_RGBA8_G_MASK | CTX_RGBA8_A_MASK)
+
+
+
+CTX_INLINE static void
+ctx_RGBA8_associate_alpha (uint8_t *u8)
+{
+#if 1
+  uint32_t val = *((uint32_t*)(u8));
+  uint32_t a = u8[3];
+  uint32_t g = (((val & CTX_RGBA8_G_MASK) * a) >> 8) & CTX_RGBA8_G_MASK;
+  uint32_t rb =(((val & CTX_RGBA8_RB_MASK) * a) >> 8) & CTX_RGBA8_RB_MASK;
+  *((uint32_t*)(u8)) = g|rb|(a << CTX_RGBA8_A_SHIFT);
+#else
+  uint32_t a = u8[3];
+  u8[0] = (u8[0] * a + 255) >> 8;
+  u8[1] = (u8[1] * a + 255) >> 8;
+  u8[2] = (u8[2] * a + 255) >> 8;
+#endif
+}
+
+inline static void
+ctx_RGBA8_associate_global_alpha (uint8_t *u8, uint8_t global_alpha)
+{
+  uint32_t val = *((uint32_t*)(u8));
+  uint32_t a = (u8[3] * global_alpha + 255) >> 8;
+  uint32_t g = (((val & CTX_RGBA8_G_MASK) * a) >> 8) & CTX_RGBA8_G_MASK;
+  uint32_t rb =(((val & CTX_RGBA8_RB_MASK) * a) >> 8) & CTX_RGBA8_RB_MASK;
+  *((uint32_t*)(u8)) = g|rb|(a << CTX_RGBA8_A_SHIFT);
+}
+
+inline static uint32_t
+ctx_RGBA8_associate_global_alpha_u32 (uint32_t val, uint8_t global_alpha)
+{
+  uint32_t a = ((val>>24) * global_alpha + 255) >> 8;
+  uint32_t g = (((val & CTX_RGBA8_G_MASK) * a) >> 8) & CTX_RGBA8_G_MASK;
+  uint32_t rb =(((val & CTX_RGBA8_RB_MASK) * a) >> 8) & CTX_RGBA8_RB_MASK;
+  return  g|rb|(a << CTX_RGBA8_A_SHIFT);
+}
+
+CTX_INLINE static void
+ctx_RGBA8_associate_alpha_probably_opaque (uint8_t *u8)
+{
+  uint32_t a = u8[3];//val>>24;//u8[3];
+  if (CTX_UNLIKELY(a!=255))
+  {
+    u8[0] = (u8[0] * a + 255) >> 8;
+    u8[1] = (u8[1] * a + 255) >> 8;
+    u8[2] = (u8[2] * a + 255) >> 8;
+  }
+}
+
+CTX_INLINE static uint32_t ctx_bi_RGBA8 (uint32_t isrc00, uint32_t isrc01, uint32_t isrc10, uint32_t isrc11, uint8_t dx, uint8_t dy)
+{
+#if 0
+#if 0
+  uint8_t ret[4];
+  uint8_t *src00 = (uint8_t*)&isrc00;
+  uint8_t *src10 = (uint8_t*)&isrc10;
+  uint8_t *src01 = (uint8_t*)&isrc01;
+  uint8_t *src11 = (uint8_t*)&isrc11;
+  for (int c = 0; c < 4; c++)
+  {
+    ret[c] = ctx_lerp_u8 (ctx_lerp_u8 (src00[c], src01[c], dx),
+                         ctx_lerp_u8 (src10[c], src11[c], dx), dy);
+  }
+  return  ((uint32_t*)&ret[0])[0];
+#else
+  return ctx_lerp_RGBA8 (ctx_lerp_RGBA8 (isrc00, isrc01, dx),
+                         ctx_lerp_RGBA8 (isrc10, isrc11, dx), dy);
+#endif
+#else
+  uint32_t s0_ga, s0_rb, s1_ga, s1_rb;
+  ctx_lerp_RGBA8_split (isrc00, isrc01, dx, &s0_ga, &s0_rb);
+  ctx_lerp_RGBA8_split (isrc10, isrc11, dx, &s1_ga, &s1_rb);
+  return ctx_lerp_RGBA8_merge (s0_ga, s0_rb, s1_ga, s1_rb, dy);
+#endif
+}
+
+#if CTX_GRADIENTS
+#if CTX_GRADIENT_CACHE
+
+inline static int ctx_grad_index (CtxRasterizer *rasterizer, float v)
+{
+  int ret = (int)(v * (rasterizer->gradient_cache_elements - 1) + 0.5f);
+  ret = ctx_maxi (0, ret);
+  ret = ctx_mini (rasterizer->gradient_cache_elements-1, ret);
+  return ret;
+}
+
+inline static int ctx_grad_index_i (CtxRasterizer *rasterizer, int v)
+{
+  v = v >> 8;
+  return ctx_maxi (0, ctx_mini (rasterizer->gradient_cache_elements-1, v));
+}
+
+//static void
+//ctx_gradient_cache_reset (void)
+//{
+//  ctx_gradient_cache_valid = 0;
+//}
+#endif
+
+
+CTX_INLINE static void
+_ctx_fragment_gradient_1d_RGBA8 (CtxRasterizer *rasterizer, float x, float y, uint8_t *rgba)
+{
+  float v = x;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  CtxGradient *g = &rasterizer->state->gradient;
+  if (v < 0) { v = 0; }
+  if (v > 1) { v = 1; }
+
+  if (g->n_stops == 0)
+    {
+      rgba[0] = rgba[1] = rgba[2] = (int)(v * 255);
+      rgba[3] = 255;
+      return;
+    }
+  CtxGradientStop *stop      = NULL;
+  CtxGradientStop *next_stop = &g->stops[0];
+  CtxColor *color;
+  for (int s = 0; s < g->n_stops; s++)
+    {
+      stop      = &g->stops[s];
+      next_stop = &g->stops[s+1];
+      if (s + 1 >= g->n_stops) { next_stop = NULL; }
+      if (v >= stop->pos && next_stop && v < next_stop->pos)
+        { break; }
+      stop = NULL;
+      next_stop = NULL;
+    }
+  if (stop == NULL && next_stop)
+    {
+      color = & (next_stop->color);
+    }
+  else if (stop && next_stop == NULL)
+    {
+      color = & (stop->color);
+    }
+  else if (stop && next_stop)
+    {
+      uint8_t stop_rgba[4];
+      uint8_t next_rgba[4];
+      ctx_color_get_rgba8 (rasterizer->state, & (stop->color), stop_rgba);
+      ctx_color_get_rgba8 (rasterizer->state, & (next_stop->color), next_rgba);
+      int dx = (int)((v - stop->pos) * 255 / (next_stop->pos - stop->pos));
+#if 1
+      ((uint32_t*)rgba)[0] = ctx_lerp_RGBA8 (((uint32_t*)stop_rgba)[0],
+                                             ((uint32_t*)next_rgba)[0], dx);
+#else
+      for (int c = 0; c < 4; c++)
+        { rgba[c] = ctx_lerp_u8 (stop_rgba[c], next_rgba[c], dx); }
+#endif
+      rgba[3]=(rgba[3]*global_alpha_u8+255)>>8;
+      ctx_RGBA8_associate_alpha (rgba);
+      return;
+    }
+  else
+    {
+      color = & (g->stops[g->n_stops-1].color);
+    }
+  ctx_color_get_rgba8 (rasterizer->state, color, rgba);
+  if (rasterizer->swap_red_green)
+  {
+    uint8_t tmp = rgba[0];
+    rgba[0] = rgba[2];
+    rgba[2] = tmp;
+  }
+  rgba[3]=(rgba[3]*global_alpha_u8+255)>>8;
+  ctx_RGBA8_associate_alpha (rgba);
+}
+
+#if CTX_GRADIENT_CACHE
+static void
+ctx_gradient_cache_prime (CtxRasterizer *rasterizer);
+#endif
+
+CTX_INLINE static void
+ctx_fragment_gradient_1d_RGBA8 (CtxRasterizer *rasterizer, float x, float y, uint8_t *rgba)
+{
+#if CTX_GRADIENT_CACHE
+  *((uint32_t*)rgba) = *((uint32_t*)(&rasterizer->gradient_cache_u8[ctx_grad_index(rasterizer, x)][0]));
+#else
+ _ctx_fragment_gradient_1d_RGBA8 (rasterizer, x, y, rgba);
+#endif
+}
+#endif
+
+CTX_INLINE static void
+ctx_u8_associate_alpha (int components, uint8_t *u8)
+{
+  for (int c = 0; c < components-1; c++)
+    u8[c] = (u8[c] * u8[components-1] + 255)>>8;
+}
+
+#if CTX_GRADIENTS
+#if CTX_GRADIENT_CACHE
+static void
+ctx_gradient_cache_prime (CtxRasterizer *rasterizer)
+{
+  // XXX : todo  make the number of element dynamic depending on length of gradient
+  // in device coordinates.
+
+  if (rasterizer->gradient_cache_valid)
+    return;
+  
+
+  {
+    CtxSource *source = &rasterizer->state->gstate.source_fill;
+    float length = 100;
+    if (source->type == CTX_SOURCE_LINEAR_GRADIENT)
+    {
+       length = source->linear_gradient.length;
+    }
+    else
+    if (source->type == CTX_SOURCE_RADIAL_GRADIENT)
+    {
+       length = ctx_maxf (source->radial_gradient.r1, source->radial_gradient.r0);
+    }
+  //  length = CTX_GRADIENT_CACHE_ELEMENTS;
+  {
+     float u = length; float v = length;
+     const CtxMatrix *m = &rasterizer->state->gstate.transform;
+     //CtxMatrix *transform = &source->transform;
+     //
+     //  combine with above source transform?
+     _ctx_matrix_apply_transform (m, &u, &v);
+     length = ctx_maxf (u, v);
+  }
+  
+    rasterizer->gradient_cache_elements = ctx_mini ((int)length, CTX_GRADIENT_CACHE_ELEMENTS);
+  }
+
+  for (int u = 0; u < rasterizer->gradient_cache_elements; u++)
+  {
+    float v = u / (rasterizer->gradient_cache_elements - 1.0f);
+    _ctx_fragment_gradient_1d_RGBA8 (rasterizer, v, 0.0f, &rasterizer->gradient_cache_u8[u][0]);
+    //*((uint32_t*)(&rasterizer->gradient_cache_u8_a[u][0]))= *((uint32_t*)(&rasterizer->gradient_cache_u8[u][0]));
+    //memcpy(&rasterizer->gradient_cache_u8_a[u][0], &rasterizer->gradient_cache_u8[u][0], 4);
+    //ctx_RGBA8_associate_alpha (&rasterizer->gradient_cache_u8_a[u][0]);
+  }
+  rasterizer->gradient_cache_valid = 1;
+}
+#endif
+
+CTX_INLINE static void
+ctx_fragment_gradient_1d_GRAYA8 (CtxRasterizer *rasterizer, float x, float y, uint8_t *rgba)
+{
+  float v = x;
+  CtxGradient *g = &rasterizer->state->gradient;
+  if (v < 0) { v = 0; }
+  if (v > 1) { v = 1; }
+  if (g->n_stops == 0)
+    {
+      rgba[0] = rgba[1] = rgba[2] = (int)(v * 255);
+      rgba[1] = 255;
+      return;
+    }
+  CtxGradientStop *stop      = NULL;
+  CtxGradientStop *next_stop = &g->stops[0];
+  CtxColor *color;
+  for (int s = 0; s < g->n_stops; s++)
+    {
+      stop      = &g->stops[s];
+      next_stop = &g->stops[s+1];
+      if (s + 1 >= g->n_stops) { next_stop = NULL; }
+      if (v >= stop->pos && next_stop && v < next_stop->pos)
+        { break; }
+      stop = NULL;
+      next_stop = NULL;
+    }
+  if (stop == NULL && next_stop)
+    {
+      color = & (next_stop->color);
+    }
+  else if (stop && next_stop == NULL)
+    {
+      color = & (stop->color);
+    }
+  else if (stop && next_stop)
+    {
+      uint8_t stop_rgba[4];
+      uint8_t next_rgba[4];
+      ctx_color_get_graya_u8 (rasterizer->state, & (stop->color), stop_rgba);
+      ctx_color_get_graya_u8 (rasterizer->state, & (next_stop->color), next_rgba);
+      int dx = (int)((v - stop->pos) * 255 / (next_stop->pos - stop->pos));
+      for (int c = 0; c < 2; c++)
+        { rgba[c] = ctx_lerp_u8 (stop_rgba[c], next_rgba[c], dx); }
+      return;
+    }
+  else
+    {
+      color = & (g->stops[g->n_stops-1].color);
+    }
+  ctx_color_get_graya_u8 (rasterizer->state, color, rgba);
+}
+
+CTX_INLINE static void
+ctx_fragment_gradient_1d_RGBAF (CtxRasterizer *rasterizer, float v, float y, float *rgba)
+{
+  float global_alpha = rasterizer->state->gstate.global_alpha_f;
+  CtxGradient *g = &rasterizer->state->gradient;
+  if (v < 0) { v = 0; }
+  if (v > 1) { v = 1; }
+  if (g->n_stops == 0)
+    {
+      rgba[0] = rgba[1] = rgba[2] = v;
+      rgba[3] = 1.0;
+      return;
+    }
+  CtxGradientStop *stop      = NULL;
+  CtxGradientStop *next_stop = &g->stops[0];
+  CtxColor *color;
+  for (int s = 0; s < g->n_stops; s++)
+    {
+      stop      = &g->stops[s];
+      next_stop = &g->stops[s+1];
+      if (s + 1 >= g->n_stops) { next_stop = NULL; }
+      if (v >= stop->pos && next_stop && v < next_stop->pos)
+        { break; }
+      stop = NULL;
+      next_stop = NULL;
+    }
+  if (stop == NULL && next_stop)
+    {
+      color = & (next_stop->color);
+    }
+  else if (stop && next_stop == NULL)
+    {
+      color = & (stop->color);
+    }
+  else if (stop && next_stop)
+    {
+      float stop_rgba[4];
+      float next_rgba[4];
+      ctx_color_get_rgba (rasterizer->state, & (stop->color), stop_rgba);
+      ctx_color_get_rgba (rasterizer->state, & (next_stop->color), next_rgba);
+      int dx = (int)((v - stop->pos) / (next_stop->pos - stop->pos));
+      for (int c = 0; c < 4; c++)
+        { rgba[c] = ctx_lerpf (stop_rgba[c], next_rgba[c], dx); }
+      rgba[3] *= global_alpha;
+      return;
+    }
+  else
+    {
+      color = & (g->stops[g->n_stops-1].color);
+    }
+  ctx_color_get_rgba (rasterizer->state, color, rgba);
+  rgba[3] *= global_alpha;
+}
+#endif
+
+static void
+ctx_fragment_image_RGBA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dw)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+
+  for (int i = 0; i < count; i ++)
+  {
+
+  int u = (int)x;
+  int v = (int)y;
+  int width = buffer->width;
+  int height = buffer->height;
+  if ( u < 0 || v < 0 ||
+       u >= width ||
+       v >= height)
+    {
+      *((uint32_t*)(rgba)) = 0;
+    }
+  else
+    {
+      int bpp = buffer->format->bpp/8;
+      if (rasterizer->state->gstate.image_smoothing)
+      {
+      uint8_t *src00 = (uint8_t *) buffer->data;
+      src00 += v * buffer->stride + u * bpp;
+      uint8_t *src01 = src00;
+      if ( u + 1 < width)
+      {
+        src01 = src00 + bpp;
+      }
+      uint8_t *src11 = src01;
+      uint8_t *src10 = src00;
+      if ( v + 1 < height)
+      {
+        src10 = src00 + buffer->stride;
+        src11 = src01 + buffer->stride;
+      }
+      float dx = (x-(int)(x)) * 255.9f;
+      float dy = (y-(int)(y)) * 255.9f;
+      uint8_t dxb = (uint8_t)dx;
+      uint8_t dyb = (uint8_t)dy;
+
+      switch (bpp)
+      {
+      case 1:
+        rgba[0] = rgba[1] = rgba[2] = ctx_lerp_u8 (ctx_lerp_u8 (src00[0], src01[0], dxb),
+                               ctx_lerp_u8 (src10[0], src11[0], dxb), dyb);
+        rgba[3] = global_alpha_u8;
+        break;
+      case 2:
+        rgba[0] = rgba[1] = rgba[2] = ctx_lerp_u8 (ctx_lerp_u8 (src00[0], src01[0], dxb),
+                               ctx_lerp_u8 (src10[0], src11[0], dxb), dyb);
+        rgba[3] = ctx_lerp_u8 (ctx_lerp_u8 (src00[1], src01[1], dxb),
+                               ctx_lerp_u8 (src10[1], src11[1], dxb), dyb);
+        rgba[3] = (rgba[3] * global_alpha_u8) / 255;
+        break;
+      case 3:
+      for (int c = 0; c < bpp; c++)
+        { rgba[c] = ctx_lerp_u8 (ctx_lerp_u8 (src00[c], src01[c], dxb),
+                                 ctx_lerp_u8 (src10[c], src11[c], dxb), dyb);
+                
+        }
+        rgba[3]=global_alpha_u8;
+        break;
+      break;
+      case 4:
+      for (int c = 0; c < bpp; c++)
+        { rgba[c] = ctx_lerp_u8 (ctx_lerp_u8 (src00[c], src01[c], dxb),
+                                 ctx_lerp_u8 (src10[c], src11[c], dxb), dyb);
+                
+        }
+        rgba[3] = (rgba[3] * global_alpha_u8) / 255;
+      }
+
+      }
+      else
+      {
+      uint8_t *src = (uint8_t *) buffer->data;
+      src += v * buffer->stride + u * bpp;
+      switch (bpp)
+        {
+          case 1:
+            for (int c = 0; c < 3; c++)
+              { rgba[c] = src[0]; }
+            rgba[3] = global_alpha_u8;
+            break;
+          case 2:
+            for (int c = 0; c < 3; c++)
+              { rgba[c] = src[0]; }
+            rgba[3] = src[1];
+            rgba[3] = (rgba[3] * global_alpha_u8) / 255;
+            break;
+          case 3:
+            for (int c = 0; c < 3; c++)
+              { rgba[c] = src[c]; }
+            rgba[3] = global_alpha_u8;
+            break;
+          case 4:
+            for (int c = 0; c < 4; c++)
+              { rgba[c] = src[c]; }
+            rgba[3] = (rgba[3] * global_alpha_u8) / 255;
+            break;
+        }
+
+      }
+      if (rasterizer->swap_red_green)
+      {
+        uint8_t tmp = rgba[0];
+        rgba[0] = rgba[2];
+        rgba[2] = tmp;
+      }
+    }
+    ctx_RGBA8_associate_alpha_probably_opaque (rgba);
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+}
+
+#if CTX_DITHER
+static inline int ctx_dither_mask_a (int x, int y, int c, int divisor)
+{
+  /* https://pippin.gimp.org/a_dither/ */
+  return ( ( ( ( (x + c * 67) + y * 236) * 119) & 255 )-127) / divisor;
+}
+
+inline static void
+ctx_dither_rgba_u8 (uint8_t *rgba, int x, int y, int dither_red_blue, int dither_green)
+{
+  if (dither_red_blue == 0)
+    { return; }
+  for (int c = 0; c < 3; c ++)
+    {
+      int val = rgba[c] + ctx_dither_mask_a (x, y, 0, c==1?dither_green:dither_red_blue);
+      rgba[c] = CTX_CLAMP (val, 0, 255);
+    }
+}
+
+inline static void
+ctx_dither_graya_u8 (uint8_t *rgba, int x, int y, int dither_red_blue, int dither_green)
+{
+  if (dither_red_blue == 0)
+    { return; }
+  for (int c = 0; c < 1; c ++)
+    {
+      int val = rgba[c] + ctx_dither_mask_a (x, y, 0, dither_red_blue);
+      rgba[c] = CTX_CLAMP (val, 0, 255);
+    }
+}
+#endif
+
+#if 0
+CTX_INLINE static void
+ctx_RGBA8_deassociate_alpha (const uint8_t *in, uint8_t *out)
+{
+    uint32_t val = *((uint32_t*)(in));
+    int a = val >> CTX_RGBA8_A_SHIFT;
+    if (a)
+    {
+    if (a ==255)
+    {
+      *((uint32_t*)(out)) = val;
+    } else
+    {
+      uint32_t g = (((val & CTX_RGBA8_G_MASK) * 255 / a) >> 8) & CTX_RGBA8_G_MASK;
+      uint32_t rb =(((val & CTX_RGBA8_RB_MASK) * 255 / a) >> 8) & CTX_RGBA8_RB_MASK;
+      *((uint32_t*)(out)) = g|rb|(a << CTX_RGBA8_A_SHIFT);
+    }
+    }
+    else
+    {
+      *((uint32_t*)(out)) = 0;
+    }
+}
+#endif
+
+CTX_INLINE static void
+ctx_u8_deassociate_alpha (int components, const uint8_t *in, uint8_t *out)
+{
+  if (in[components-1])
+  {
+    if (in[components-1] != 255)
+    for (int c = 0; c < components-1; c++)
+      out[c] = (in[c] * 255) / in[components-1];
+    else
+    for (int c = 0; c < components-1; c++)
+      out[c] = in[c];
+    out[components-1] = in[components-1];
+  }
+  else
+  {
+  for (int c = 0; c < components; c++)
+    out[c] = 0;
+  }
+}
+
+CTX_INLINE static void
+ctx_float_associate_alpha (int components, float *rgba)
+{
+  float alpha = rgba[components-1];
+  for (int c = 0; c < components-1; c++)
+    rgba[c] *= alpha;
+}
+
+CTX_INLINE static void
+ctx_float_deassociate_alpha (int components, float *rgba, float *dst)
+{
+  float ralpha = rgba[components-1];
+  if (ralpha != 0.0f) ralpha = 1.0f/ralpha;
+
+  for (int c = 0; c < components-1; c++)
+    dst[c] = (rgba[c] * ralpha);
+  dst[components-1] = rgba[components-1];
+}
+
+CTX_INLINE static void
+ctx_RGBAF_associate_alpha (float *rgba)
+{
+  ctx_float_associate_alpha (4, rgba);
+}
+
+CTX_INLINE static void
+ctx_RGBAF_deassociate_alpha (float *rgba, float *dst)
+{
+  ctx_float_deassociate_alpha (4, rgba, dst);
+}
+
+
+static inline void ctx_swap_red_green_u8 (void *data)
+{
+  uint8_t *rgba = (uint8_t*)data;
+  uint8_t tmp = rgba[0];
+  rgba[0] = rgba[2];
+  rgba[2] = tmp;
+}
+
+static void
+ctx_fragment_swap_red_green_u8 (void *out, int count)
+{
+  uint8_t *rgba = (uint8_t*)out;
+  for (int x = 0; x < count; x++)
+  {
+    ctx_swap_red_green_u8 (rgba);
+    rgba += 4;
+  }
+}
+
+/**** rgb8 ***/
+
+static void
+ctx_fragment_image_rgb8_RGBA8_box (CtxRasterizer *rasterizer,
+                                   float x, float y, float z,
+                                   void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  int width = buffer->width;
+  int height = buffer->height;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+  int dim = (int)((1.0f / factor) / 3);
+
+  int i = 0;
+
+  for (; i < count && (x - dim< 0 || y - dim < 0 || x + dim >= height || y + dim >= height); i++)
+  {
+    *((uint32_t*)(rgba))=0;
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+
+  for (; i < count && !(
+       x - dim < 0 || y - dim < 0 ||
+       x + dim >= width ||
+       y + dim >= height); i++)
+  {
+
+  int u = (int)x;
+  int v = (int)y;
+    {
+      int bpp = 3;
+      rgba[3]=global_alpha_u8; // gets lost
+          uint64_t sum[4]={0,0,0,0};
+          int count = 0;
+
+          {
+            for (int ov = - dim; ov <= dim; ov++)
+            {
+              uint8_t *src = (uint8_t *) buffer->data + bpp * ((v+ov) * width + (u - dim));
+              for (int ou = - dim; ou <= dim; ou++)
+              {
+                for (int c = 0; c < bpp; c++)
+                  sum[c] += src[c];
+                count ++;
+                src += bpp;
+              }
+
+            }
+          }
+
+          int recip = 65536/count;
+          for (int c = 0; c < bpp; c++)
+            rgba[c] = sum[c] * recip >> 16;
+          ctx_RGBA8_associate_alpha_probably_opaque (rgba);
+    }
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+
+  for (; i < count; i++)
+  {
+    *((uint32_t*)(rgba))= 0;
+    rgba += 4;
+  }
+}
+
+#define CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(frag) \
+static void \
+frag##_swap_red_green (CtxRasterizer *rasterizer,\
+                       float x, float y, float z,\
+                       void *out, int count, float dx, float dy, float dz)\
+{\
+  frag (rasterizer, x, y, z, out, count, dx, dy, dz);\
+  ctx_fragment_swap_red_green_u8 (out, count);\
+}
+
+
+
+static inline void
+ctx_RGBA8_apply_global_alpha_and_associate (CtxRasterizer *rasterizer,
+                                         uint8_t *buf, int count)
+{
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) buf;
+  if (global_alpha_u8 != 255)
+  {
+    for (int i = 0; i < count; i++)
+    {
+      ctx_RGBA8_associate_global_alpha (rgba, global_alpha_u8);
+      rgba += 4;
+    }
+  }
+  else
+  {
+    for (int i = 0; i < count; i++)
+    {
+      ctx_RGBA8_associate_alpha_probably_opaque (rgba);
+      rgba += 4;
+    }
+  }
+}
+
+#if CTX_FRAGMENT_SPECIALIZE
+
+static void
+ctx_fragment_image_rgb8_RGBA8_nearest (CtxRasterizer *rasterizer,
+                                       float x, float y, float z,
+                                       void *out, int scount,
+                                       float dx, float dy, float dz);
+static inline void
+ctx_fragment_image_rgb8_RGBA8_bi (CtxRasterizer *rasterizer,
+                                  float x, float y, float z,
+                                  void *out, int scount,
+                                  float dx, float dy, float dz)
+{
+  ctx_fragment_image_rgb8_RGBA8_nearest (rasterizer,
+                                         x, y, z,
+                                         out, scount,
+                                         dx, dy, dz);
+  return;
+}
+
+static void
+ctx_fragment_image_rgb8_RGBA8_nearest (CtxRasterizer *rasterizer,
+                                       float x, float y, float z,
+                                       void *out, int scount,
+                                       float dx, float dy, float dz)
+{
+  unsigned int count = scount;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  const int bwidth = buffer->width;
+  const int bheight = buffer->height;
+  unsigned int i = 0;
+  uint8_t *data = ((uint8_t*)buffer->data);
+
+  int yi_delta = (int)(dy * 65536);
+  int xi_delta = (int)(dx * 65536);
+  int zi_delta = (int)(dz * 65536);
+  int32_t yi = (int)(y * 65536);
+  int32_t xi = (int)(x * 65536);
+  int32_t zi = (int)(z * 65536);
+  {
+    int32_t u1 = xi + xi_delta* (count-1);
+    int32_t v1 = yi + yi_delta* (count-1);
+    int32_t z1 = zi + zi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      float z_recip = (z1!=0) * (1.0f/z1);
+      if ((u1*z_recip) <0 ||
+          (v1*z_recip) <0 ||
+          (u1*z_recip) >= (bwidth) - 1 ||
+          (v1*z_recip) >= (bheight) - 1)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= xi_delta;
+        v1 -= yi_delta;
+        z1 -= zi_delta;
+      }
+      else break;
+    }
+  }
+
+  for (i= 0; i < count; i ++)
+  {
+    float z_recip = (zi!=0) * (1.0f/zi);
+    int u = (int)(xi * z_recip);
+    int v = (int)(yi * z_recip);
+    if ( u  <= 0 || v  <= 0 || u+1 >= bwidth-1 || v+1 >= bheight-1)
+    {
+      *((uint32_t*)(rgba))= 0;
+    }
+    else
+      break;
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+  }
+
+  while (i < count)
+  {
+    float z_recip = (zi!=0) * (1.0f/zi);
+    int u = (int)(xi * z_recip);
+    int v = (int)(yi * z_recip);
+    for (unsigned int c = 0; c < 3; c++)
+      rgba[c] = data[(bwidth *v +u)*3+c];
+    rgba[3] = global_alpha_u8;
+    ctx_RGBA8_associate_alpha_probably_opaque (rgba);
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+    i++;
+  }
+}
+
+
+
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgb8_RGBA8_box)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgb8_RGBA8_bi)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgb8_RGBA8_nearest)
+
+
+static inline void
+ctx_fragment_image_rgb8_RGBA8 (CtxRasterizer *rasterizer,
+                               float x,
+                               float y,
+                               float z,
+                               void *out, int count, float dx, float dy, float dz)
+{
+  if (rasterizer->swap_red_green)
+  {
+    if (rasterizer->state->gstate.image_smoothing)
+    {
+      float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+      if (factor <= 0.50f)
+        ctx_fragment_image_rgb8_RGBA8_box_swap_red_green (rasterizer,x,y,z,out,count,dx,dy,dz);
+  #if CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+      else if (factor > 0.99f && factor < 1.01f)
+        ctx_fragment_image_rgb8_RGBA8_nearest_swap_red_green (rasterizer,x,y,z,
+                                                            out,count,dx,dy,dz);
+  #endif
+      else
+        ctx_fragment_image_rgb8_RGBA8_bi_swap_red_green (rasterizer,x,y,z,
+                                                         out,count, dx, dy, dz);
+    }
+    else
+    {
+      ctx_fragment_image_rgb8_RGBA8_nearest_swap_red_green (rasterizer,x,y,z,
+                                                            out,count,dx,dy,dz);
+    }
+  }
+  else
+  {
+    if (rasterizer->state->gstate.image_smoothing)
+    {
+      float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+      if (factor <= 0.50f)
+        ctx_fragment_image_rgb8_RGBA8_box (rasterizer,x,y,z,out,
+                                           count,dx,dy,dz);
+  #if CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+      else if (factor > 0.99f && factor < 1.01f)
+        ctx_fragment_image_rgb8_RGBA8_nearest (rasterizer, x, y, z, out, count, dx, dy, dz);
+  #endif
+      else
+        ctx_fragment_image_rgb8_RGBA8_bi (rasterizer,x,y,z,out,count,dx,dy,dz);
+    }
+    else
+    {
+        ctx_fragment_image_rgb8_RGBA8_nearest (rasterizer,x,y,z,out,
+                                               count,dx,dy, dz);
+    }
+  }
+}
+
+
+/************** rgba8 */
+
+static void
+ctx_fragment_image_rgba8_RGBA8_box (CtxRasterizer *rasterizer,
+                                    float x, float y, float z,
+                                    void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  int width = buffer->width;
+  int height = buffer->height;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+  int dim = (int)((1.0f / factor) / 3);
+
+  int i = 0;
+
+  for (; i < count && (x - dim< 0 || y - dim < 0 || x + dim >= height || y + dim >= height); i++)
+  {
+    *((uint32_t*)(rgba))=0;
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+
+  for (; i < count && !(
+       x - dim < 0 || y - dim < 0 ||
+       x + dim >= width ||
+       y + dim >= height); i++)
+  {
+
+  int u = (int)x;
+  int v = (int)y;
+    {
+      int bpp = 4;
+          uint64_t sum[4]={0,0,0,0};
+          int count = 0;
+
+          {
+            for (int ov = - dim; ov <= dim; ov++)
+            {
+              uint8_t *src = (uint8_t *) buffer->data + bpp * ((v+ov) * width + (u - dim));
+              for (int ou = - dim; ou <= dim; ou++)
+              {
+                for (int c = 0; c < bpp; c++)
+                  sum[c] += src[c];
+                count ++;
+                src += bpp;
+              }
+
+            }
+          }
+
+          int recip = 65536/count;
+          for (int c = 0; c < bpp; c++)
+            rgba[c] = sum[c] * recip >> 16;
+          rgba[3]=rgba[3]*global_alpha_u8/255; // gets lost
+          ctx_RGBA8_associate_alpha_probably_opaque (rgba);
+    }
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+
+
+  for (; i < count; i++)
+  {
+    *((uint32_t*)(rgba))= 0;
+    rgba += 4;
+  }
+#if CTX_DITHER
+//ctx_dither_rgba_u8 (rgba, x, y, rasterizer->format->dither_red_blue,
+//                    rasterizer->format->dither_green);
+#endif
+}
+
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest_copy (CtxRasterizer *rasterizer,
+                                             float x, float y, float z,
+                                             void *out, int scount, float dx, float dy, float dz)
+{
+  unsigned int count = scount;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = 
+     g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  uint32_t *dst = (uint32_t*)out;
+#if 0
+  for (int i = 0; i < scount; i++)
+          dst[i] = (255<<24)+128;
+  return;
+#endif
+  int bwidth  = buffer->width;
+  int bheight = buffer->height;
+  int u = (int)x;
+  int v = (int)y;
+
+  uint32_t *src = ((uint32_t*)buffer->data) + bwidth * v + u;
+  if (CTX_UNLIKELY(!(v >= 0 && v < bheight)))
+  {
+    for (unsigned i = 0 ; i < count; i++)
+      *dst++ = 0;
+    return;
+  }
+
+#if 1
+  int pre = ctx_mini(ctx_maxi(-u,0), count);
+  memset (dst, 0, pre);
+  dst +=pre;
+  count-=pre;
+  src+=pre;
+  u+=pre;
+#else
+  while (count && !(u >= 0))
+  {
+    *dst++ = 0;
+    src ++;
+    u++;
+    count--;
+  }
+#endif
+
+  int limit = ctx_mini (count, bwidth - u);
+  if (limit>0)
+  {
+    memcpy (dst, src, limit * 4);
+    dst += limit;
+  }
+  memset (dst, 0, count - limit);
+
+//ctx_RGBA8_apply_global_alpha_and_associate (rasterizer, (uint8_t*)out, count);
+}
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat (CtxRasterizer *rasterizer,
+                                                    float x, float y, float z,
+                                                    void *out, int count, float dx, float dy, float dz)
+{
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = 
+     g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  uint32_t *dst = (uint32_t*)out;
+  int bwidth  = buffer->width;
+  int bheight = buffer->height;
+  int u = (int)x;
+  int v = (int)y;
+  if (v < 0) v += bheight * 8192;
+  if (u < 0) u += bwidth * 8192;
+  v %= bheight;
+  u %= bwidth;
+
+  uint32_t *src = ((uint32_t*)buffer->data) + bwidth * v;
+
+  while (count)
+  {
+     int chunk = ctx_mini (bwidth - u, count);
+     memcpy (dst, src + u, chunk * 4);
+     dst += chunk;
+     count -= chunk;
+     u = (u + chunk) % bwidth;
+  }
+}
+
+static inline int
+_ctx_coords_restrict (CtxExtend extend,
+                      int *u, int *v,
+                      int bwidth, int bheight)
+{
+  switch (extend)
+  {
+    case CTX_EXTEND_REPEAT:
+      if(u)
+      {
+         while (*u < 0) *u += bwidth * 4096;   // XXX need better way to do this
+         *u  %= bwidth;
+      }
+      if(v)
+      {
+        while (*v < 0) *v += bheight * 4096;
+        *v  %= bheight;
+      }
+      return 1;
+    case CTX_EXTEND_REFLECT:
+      if (u)
+      {
+      while (*u < 0) *u += bwidth * 4096;   // XXX need better way to do this
+      *u  %= (bwidth*2);
+
+      *u = (*u>=bwidth) * (bwidth*2 - *u) +
+           (*u<bwidth) * *u;
+      }
+
+      if (v)
+      {
+      while (*v < 0) *v += bheight * 4096;
+      *v  %= (bheight*2);
+      *v = (*v>=bheight) * (bheight*2 - *v) +
+           (*v<bheight) * *v;
+      }
+
+      return 1;
+    case CTX_EXTEND_PAD:
+      if (u)*u = ctx_mini (ctx_maxi (*u, 0), bwidth-1);
+      if (v)*v = ctx_mini (ctx_maxi (*v, 0), bheight-1);
+      return 1;
+    case CTX_EXTEND_NONE:
+      if (u)
+      {
+      //*u  %= bwidth;
+      if (*u < 0 || *u >= bwidth) return 0;
+      }
+      if (v)
+      {
+      //*v  %= bheight;
+      if (*v < 0 || *v >= bheight) return 0;
+      }
+      return 1;
+  }
+  return 0;
+}
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest_affine (CtxRasterizer *rasterizer,
+                                               float x, float y, float z,
+                                               void *out, int scount, float dx, float dy, float dz)
+{
+  unsigned int count = scount;
+  //uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  const int bwidth = buffer->width;
+  const int bheight = buffer->height;
+  unsigned int i = 0;
+  uint32_t *data = ((uint32_t*)buffer->data);
+
+  int yi_delta = (int)(dy * 65536);
+  int xi_delta = (int)(dx * 65536);
+  int32_t yi = (int)(y * 65536);
+  int32_t xi = (int)(x * 65536);
+  switch (extend){
+          case CTX_EXTEND_NONE:
+                  {
+
+    int32_t u1 = xi + xi_delta* (count-1);
+    int32_t v1 = yi + yi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      if ((u1>>16) <0 ||
+          (v1>>16) <0 ||
+          (u1>>16) >= (bwidth) - 1 ||
+          (v1>>16) >= (bheight) - 1)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= xi_delta;
+        v1 -= yi_delta;
+      }
+      else break;
+    }
+
+  for (i= 0; i < count; i ++)
+  {
+    int u = xi >> 16;
+    int v = yi >> 16;
+    if ( u  <= 0 || v  <= 0 || u+1 >= bwidth-1 || v+1 >= bheight-1)
+    {
+      *((uint32_t*)(rgba))= 0;
+    }
+    else
+      break;
+    xi += xi_delta;
+    yi += yi_delta;
+    rgba += 4;
+  }
+
+  while (i < count)
+  {
+    int u = xi >> 16;
+    int v = yi >> 16;
+    //((uint32_t*)(&rgba[0]))[0] =
+    //  ctx_RGBA8_associate_global_alpha_u32 (data[bwidth *v +u], global_alpha_u8);
+    ((uint32_t*)(&rgba[0]))[0] = data[bwidth *v +u];
+    xi += xi_delta;
+    yi += yi_delta;
+    rgba += 4;
+    i++;
+  }
+                  }
+  break;
+          default:
+    while (i < count)
+    {
+      int u = xi >> 16;
+      int v = yi >> 16;
+      _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+      //((uint32_t*)(&rgba[0]))[0] =
+      //  ctx_RGBA8_associate_global_alpha_u32 (data[bwidth *v +u], global_alpha_u8);
+      ((uint32_t*)(&rgba[0]))[0] = data[bwidth *v +u];
+      xi += xi_delta;
+      yi += yi_delta;
+      rgba += 4;
+      i++;
+    }
+    break;
+  }
+}
+
+
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest_scale (CtxRasterizer *rasterizer,
+                                              float x, float y, float z,
+                                              void *out, int scount, float dx, float dy, float dz)
+{
+  unsigned int count = scount;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = NULL;
+  CtxExtend  extend = rasterizer->state->gstate.extend;
+  uint32_t *src = NULL;
+  buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  int ideltax = (int)(dx * 65536);
+  uint32_t *dst = (uint32_t*)out;
+  int bwidth  = buffer->width;
+  int bheight = buffer->height;
+  int bbheight = bheight << 16;
+  int bbwidth  = bwidth << 16;
+//  x += 0.5f;
+//  y += 0.5f;
+
+  src = (uint32_t*)buffer->data;
+  //if (!src){ fprintf (stderr, "eeek bailing in nearest fragment\n"); return;};
+
+  {
+    unsigned int i = 0;
+    int32_t ix = (int)(x * 65536);
+    int32_t iy = (int)(y * 65536);
+
+    if (extend == CTX_EXTEND_NONE)
+    {
+    int32_t u1 = ix + ideltax * (count-1);
+    int32_t v1 = iy;
+    uint32_t *edst = ((uint32_t*)out)+count - 1;
+    for (; i < count; )
+    {
+      if (u1 <0 || v1 < 0 || u1 >= bbwidth || v1 >= bbheight)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= ideltax;
+      }
+      else break;
+    }
+
+    for (i = 0; i < count; i ++)
+    {
+      if (ix < 0 || iy < 0 || ix >= bbwidth  || iy >= bbheight)
+      {
+        *dst++ = 0;
+        x += dx;
+        ix += ideltax;
+      }
+      else break;
+    }
+
+      int v = iy >> 16;
+      int u = ix >> 16;
+      int o = (v)*bwidth;
+      for (; i < count; i ++)
+      {
+        u = ix >> 16;
+        *dst++ = src[o + (u)];
+        ix += ideltax;
+      }
+    }
+    else
+    {
+
+      int v = iy >> 16;
+      int u = ix >> 16;
+      _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+      int o = (v)*bwidth;
+      for (; i < count; i ++)
+      {
+        u = ix >> 16;
+        _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+        *dst++ = src[o + (u)];
+        ix += ideltax;
+      }
+    }
+  }
+//  ctx_RGBA8_apply_global_alpha_and_associate (rasterizer, (uint8_t*)out, count);
+}
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest_generic (CtxRasterizer *rasterizer,
+                                                float x, float y, float z,
+                                                void *out, int scount, float dx, float dy, float dz)
+{
+  unsigned int count = scount;
+  //uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  const int bwidth = buffer->width;
+  const int bheight = buffer->height;
+  unsigned int i = 0;
+  uint32_t *data = ((uint32_t*)buffer->data);
+
+  int yi_delta = (int)(dy * 65536);
+  int xi_delta = (int)(dx * 65536);
+  int zi_delta = (int)(dz * 65536);
+  int32_t yi = (int)(y * 65536);
+  int32_t xi = (int)(x * 65536);
+  int32_t zi = (int)(z * 65536);
+  switch (extend){
+          case CTX_EXTEND_NONE:
+                  {
+
+    int32_t u1 = xi + xi_delta* (count-1);
+    int32_t v1 = yi + yi_delta* (count-1);
+    int32_t z1 = zi + zi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      float z_recip = (z1!=0) * (1.0f/z1);
+      if ((u1*z_recip) <0 ||
+          (v1*z_recip) <0 ||
+          (u1*z_recip) >= (bwidth) - 1 ||
+          (v1*z_recip) >= (bheight) - 1)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= xi_delta;
+        v1 -= yi_delta;
+        z1 -= zi_delta;
+      }
+      else break;
+    }
+
+  for (i= 0; i < count; i ++)
+  {
+    float z_recip = (zi!=0) * (1.0f/zi);
+    int u = (int)(xi * z_recip);
+    int v = (int)(yi * z_recip);
+    if ( u  <= 0 || v  <= 0 || u+1 >= bwidth-1 || v+1 >= bheight-1)
+    {
+      *((uint32_t*)(rgba))= 0;
+    }
+    else
+      break;
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+  }
+
+  while (i < count)
+  {
+    float z_recip = (zi!=0) * (1.0f/zi);
+    int u = (int)(xi * z_recip);
+    int v = (int)(yi * z_recip);
+    //((uint32_t*)(&rgba[0]))[0] =
+    //  ctx_RGBA8_associate_global_alpha_u32 (data[bwidth *v +u], global_alpha_u8);
+    ((uint32_t*)(&rgba[0]))[0] = data[bwidth *v +u];
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+    i++;
+  }
+                  }
+  break;
+  default:
+    while (i < count)
+    {
+      float z_recip = (zi!=0) * (1.0f/zi);
+      int u = (int)(xi * z_recip);
+      int v = (int)(yi * z_recip);
+      _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+      //((uint32_t*)(&rgba[0]))[0] =
+      //  ctx_RGBA8_associate_global_alpha_u32 (data[bwidth *v +u], global_alpha_u8);
+      ((uint32_t*)(&rgba[0]))[0] = data[bwidth *v +u];
+      xi += xi_delta;
+      yi += yi_delta;
+      zi += zi_delta;
+      rgba += 4;
+      i++;
+    }
+    break;
+  }
+}
+
+static void
+ctx_fragment_image_rgba8_RGBA8_nearest (CtxRasterizer *rasterizer,
+                                   float x, float y, float z,
+                                   void *out, int icount, float dx, float dy, float dz)
+{
+  unsigned int count = icount;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  if (z == 1.0f && dz == 0.0f) // this also catches other constant z!
+  {
+    if (dy == 0.0f && dx == 1.0f && extend == CTX_EXTEND_NONE)
+      ctx_fragment_image_rgba8_RGBA8_nearest_copy (rasterizer, x, y, z, out, count, dx, dy, dz);
+    else
+      ctx_fragment_image_rgba8_RGBA8_nearest_affine (rasterizer, x, y, z, out, count, dx, dy, dz);
+  }
+  else
+  {
+    ctx_fragment_image_rgba8_RGBA8_nearest_generic (rasterizer, x, y, z, out, count, dx, dy, dz);
+  }
+}
+
+
+static inline void
+ctx_fragment_image_rgba8_RGBA8_bi_scale (CtxRasterizer *rasterizer,
+                                         float x, float y, float z,
+                                         void *out, int scount, float dx, float dy, float dz)
+{
+    uint32_t count = scount;
+    x -= 0.5f;
+    y -= 0.5f;
+    uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+    uint8_t *rgba = (uint8_t *) out;
+    CtxSource *g = &rasterizer->state->gstate.source_fill;
+    CtxExtend  extend = rasterizer->state->gstate.extend;
+    CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+    const int bwidth = buffer->width;
+    const int bheight = buffer->height;
+    unsigned int i = 0;
+
+    if (!extend)
+    {
+    if (!(y >= 0 && y < bheight))
+    {
+      uint32_t *dst = (uint32_t*)rgba;
+      for (i = 0 ; i < count; i++)
+        *dst++ = 0;
+      return;
+    }
+    }
+
+    //x+=1; // XXX off by one somewhere? ,, needed for alignment with nearest
+
+    int32_t yi = (int)(y * 65536);
+    int32_t xi = (int)(x * 65536);
+
+    int xi_delta = (int)(dx * 65536);
+
+    if (!extend)
+    {
+    int32_t u1 = xi + xi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      if (u1 <0 || u1 +65536 >= (bwidth<<16))
+    {
+      *edst-- = 0;
+      count --;
+      u1 -= xi_delta;
+    }
+    else break;
+  }
+    for (i= 0; i < count; i ++)
+    {
+      int u = xi >> 16;
+      if ( u  < 0 || u >= bwidth-1)
+      {
+        *((uint32_t*)(rgba))= 0;
+        xi += xi_delta;
+        rgba += 4;
+      }
+      else
+        break;
+    }
+    }
+
+ 
+  int v = yi >> 16;
+
+
+  int dv = (yi >> 8) & 0xff;
+
+  int u = xi >> 16;
+
+  int v1 = v+1;
+
+  _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+  _ctx_coords_restrict (extend, NULL, &v1, bwidth, bheight);
+
+  uint32_t *data = ((uint32_t*)buffer->data) + bwidth * v;
+  uint32_t *ndata = ((uint32_t*)buffer->data) + bwidth * v1;
+
+  if (!extend && v1 > bheight-1) ndata = data;
+
+  if (extend)
+  {
+    if (xi_delta == 65536)
+    {
+      uint32_t *src0 = data, *src1 = ndata;
+      uint32_t s1_ga = 0, s1_rb = 0;
+      int du = (xi >> 8) & 0xff;
+
+      src0 = data + u;
+      src1 = ndata + u;
+      ctx_lerp_RGBA8_split (src0[0],src1[0], dv, &s1_ga, &s1_rb);
+  
+      for (; i < count; i ++)
+      {
+        uint32_t s0_ga = s1_ga;
+        uint32_t s0_rb = s1_rb;
+        _ctx_coords_restrict (extend, &u, NULL, bwidth, bheight);
+        ctx_lerp_RGBA8_split (src0[1],src1[1], dv, &s1_ga, &s1_rb);
+        ((uint32_t*)(&rgba[0]))[0] = 
+          ctx_RGBA8_associate_global_alpha_u32 (
+                  ctx_lerp_RGBA8_merge (s0_ga, s0_rb, s1_ga, s1_rb, du), global_alpha_u8);
+        rgba += 4;
+        u++;
+        src0 ++;
+        src1 ++;
+      }
+    }
+    else
+    {
+      uint32_t s0_ga = 0, s1_ga = 0, s0_rb = 0, s1_rb = 0;
+      int prev_u = -1000;
+      for (; (i < count); i++)
+      {
+        if (CTX_LIKELY(prev_u == u))
+        {
+        }
+        else if (prev_u == u-1)
+        {
+          s0_ga = s1_ga;
+          s0_rb = s1_rb;
+          ctx_lerp_RGBA8_split (data[u+1],ndata[u+1], dv, &s1_ga, &s1_rb);
+          prev_u++;
+        }
+        else
+        {
+          ctx_lerp_RGBA8_split (data[u],ndata[u], dv, &s0_ga, &s0_rb);
+          ctx_lerp_RGBA8_split (data[u+1],ndata[u+1], dv, &s1_ga, &s1_rb);
+          prev_u = u;
+        }
+        ((uint32_t*)(&rgba[0]))[0] = 
+          ctx_RGBA8_associate_global_alpha_u32 (
+                  ctx_lerp_RGBA8_merge (s0_ga, s0_rb, s1_ga, s1_rb, (xi>>8)), global_alpha_u8);
+        xi += xi_delta;
+        rgba += 4;
+        u = xi >> 16;
+        _ctx_coords_restrict (extend, &u, NULL, bwidth, bheight);
+      }
+    }
+  
+  }
+  else
+  {
+    if (xi_delta == 65536)
+    {
+      uint32_t *src0 = data, *src1 = ndata;
+      uint32_t s1_ga = 0, s1_rb = 0;
+      int du = (xi >> 8) & 0xff;
+  
+      src0 = data + u;
+      src1 = ndata + u;
+      ctx_lerp_RGBA8_split (src0[0],src1[0], dv, &s1_ga, &s1_rb);
+  
+      for (; i < count; i ++)
+      {
+        uint32_t s0_ga = s1_ga;
+        uint32_t s0_rb = s1_rb;
+        ctx_lerp_RGBA8_split (src0[1],src1[1], dv, &s1_ga, &s1_rb);
+        ((uint32_t*)(&rgba[0]))[0] = 
+          ctx_RGBA8_associate_global_alpha_u32 (
+                  ctx_lerp_RGBA8_merge (s0_ga, s0_rb, s1_ga, s1_rb, du), global_alpha_u8);
+        rgba += 4;
+        u++;
+        src0 ++;
+        src1 ++;
+      }
+    }
+    else
+    {
+      uint32_t s0_ga = 0, s1_ga = 0, s0_rb = 0, s1_rb = 0;
+      int prev_u = -1000;
+      for (; (i < count); i++)
+      {
+        if (CTX_LIKELY(prev_u == u))
+        {
+        }
+        else if (prev_u == u-1)
+        {
+          s0_ga = s1_ga;
+          s0_rb = s1_rb;
+          ctx_lerp_RGBA8_split (data[u+1],ndata[u+1], dv, &s1_ga, &s1_rb);
+          prev_u++;
+        }
+        else
+        {
+          ctx_lerp_RGBA8_split (data[u],ndata[u], dv, &s0_ga, &s0_rb);
+          ctx_lerp_RGBA8_split (data[u+1],ndata[u+1], dv, &s1_ga, &s1_rb);
+          prev_u = u;
+        }
+        ((uint32_t*)(&rgba[0]))[0] = 
+          ctx_RGBA8_associate_global_alpha_u32 (
+                  ctx_lerp_RGBA8_merge (s0_ga, s0_rb, s1_ga, s1_rb, (xi>>8)), global_alpha_u8);
+        xi += xi_delta;
+        rgba += 4;
+        u = xi >> 16;
+      }
+    }
+  }
+}
+
+
+static inline void
+ctx_fragment_image_rgba8_RGBA8_bi_affine (CtxRasterizer *rasterizer,
+                                          float x, float y, float z,
+                                          void *out, int scount,
+                                          float dx, float dy, float dz)
+{
+        x-=0.5f;
+        y-=0.5f;
+  uint32_t count = scount;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  const int bwidth = buffer->width;
+  const int bheight = buffer->height;
+  unsigned int i = 0;
+  uint32_t *data = ((uint32_t*)buffer->data);
+
+  int yi_delta = (int)(dy * 65536);
+  int xi_delta = (int)(dx * 65536);
+  int32_t yi = (int)(y * 65536);
+  int32_t xi = (int)(x * 65536);
+
+  if (extend == CTX_EXTEND_NONE)
+  {
+    int32_t u1 = xi + xi_delta* (count-1);
+    int32_t v1 = yi + yi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      if ((u1>>16) <0 ||
+          (v1>>16) <0 ||
+          (u1>>16) >= (bwidth) - 1 ||
+          (v1>>16) >= (bheight) - 1)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= xi_delta;
+        v1 -= yi_delta;
+      }
+      else break;
+    }
+
+  for (i= 0; i < count; i ++)
+  {
+    int u = xi >> 16;
+    int v = yi >> 16;
+    if ( u  <= 0 || v  <= 0 || u+1 >= bwidth-1 || v+1 >= bheight-1)
+    {
+      *((uint32_t*)(rgba))= 0;
+    }
+    else
+      break;
+    xi += xi_delta;
+    yi += yi_delta;
+    rgba += 4;
+  }
+  }
+
+  uint32_t *src00=data;
+  uint32_t *src01=data;
+  uint32_t *src10=data;
+  uint32_t *src11=data;
+
+  while (i < count)
+  {
+    int du = xi >> 8;
+    int u = du >> 8;
+    int dv = yi >> 8;
+    int v = dv >> 8;
+    if (CTX_UNLIKELY(u < 0 || v < 0 || u+1 >= bwidth || v+1 >=bheight)) // default to next sample down and to right
+    {
+      int u1 = u + 1;
+      int v1 = v + 1;
+
+      _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+      _ctx_coords_restrict (extend, &u1, &v1, bwidth, bheight);
+
+      src00 = data  + bwidth * v + u;
+      src01 = data  + bwidth * v + u1;
+      src10 = data  + bwidth * v1 + u;
+      src11 = data  + bwidth * v1 + u1;
+    }
+    else 
+    {
+      src00 = data  + bwidth * v + u;
+      src01 = src00 + 1;
+      src10 = src00 + bwidth;
+      src11 = src01 + bwidth;
+    }
+    ((uint32_t*)(&rgba[0]))[0] =
+        ctx_RGBA8_associate_global_alpha_u32 (
+            ctx_bi_RGBA8 (*src00,*src01,*src10,*src11, du,dv), global_alpha_u8);
+    xi += xi_delta;
+    yi += yi_delta;
+    rgba += 4;
+
+    i++;
+  }
+}
+
+
+static inline void
+ctx_fragment_image_rgba8_RGBA8_bi_generic (CtxRasterizer *rasterizer,
+                                           float x, float y, float z,
+                                           void *out, int scount,
+                                           float dx, float dy, float dz)
+{
+        x-=0.5f;
+        y-=0.5f;
+  uint32_t count = scount;
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  const int bwidth = buffer->width;
+  const int bheight = buffer->height;
+  unsigned int i = 0;
+  uint32_t *data = ((uint32_t*)buffer->data);
+
+  int yi_delta = (int)(dy * 65536);
+  int xi_delta = (int)(dx * 65536);
+  int zi_delta = (int)(dz * 65536);
+  int32_t yi = (int)(y * 65536);
+  int32_t xi = (int)(x * 65536);
+  int32_t zi = (int)(z * 65536);
+  if (extend == CTX_EXTEND_NONE) {
+    int32_t u1 = xi + xi_delta* (count-1);
+    int32_t v1 = yi + yi_delta* (count-1);
+    int32_t z1 = zi + zi_delta* (count-1);
+    uint32_t *edst = ((uint32_t*)out)+(count-1);
+    for (; i < count; )
+    {
+      float z_recip = (z1!=0) * (1.0f/z1);
+      if ((u1*z_recip) <0 ||
+          (v1*z_recip) <0 ||
+          (u1*z_recip) >= (bwidth) - 1 ||
+          (v1*z_recip) >= (bheight) - 1)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= xi_delta;
+        v1 -= yi_delta;
+        z1 -= zi_delta;
+      }
+      else break;
+    }
+
+  for (i= 0; i < count; i ++)
+  {
+    float z_recip = (zi!=0) * (1.0f/zi);
+    int u = (int)(xi * z_recip);
+    int v = (int)(yi * z_recip);
+    if ( u  <= 0 || v  <= 0 || u+1 >= bwidth-1 || v+1 >= bheight-1)
+    {
+      *((uint32_t*)(rgba))= 0;
+    }
+    else
+      break;
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+  }
+  }
+
+  uint32_t *src00=data;
+  uint32_t *src01=data;
+  uint32_t *src10=data;
+  uint32_t *src11=data;
+
+  while (i < count)
+  {
+    float zr = (zi!=0)*(1.0f/zi) * 256;
+    int du = (int)(xi * zr);
+    int u = du >> 8;
+    int dv = (int)(yi * zr);
+    int v = dv >> 8;
+    if (CTX_UNLIKELY(u < 0 || v < 0 || u+1 >= bwidth || v+1 >=bheight)) // default to next sample down and to right
+    {
+      int u1 = u + 1;
+      int v1 = v + 1;
+
+      _ctx_coords_restrict (extend, &u, &v, bwidth, bheight);
+      _ctx_coords_restrict (extend, &u1, &v1, bwidth, bheight);
+
+      src00 = data  + bwidth * v + u;
+      src01 = data  + bwidth * v + u1;
+      src10 = data  + bwidth * v1 + u;
+      src11 = data  + bwidth * v1 + u1;
+    }
+    else 
+    {
+      src00 = data  + bwidth * v + u;
+      src01 = src00 + 1;
+      src10 = src00 + bwidth;
+      src11 = src01 + bwidth;
+    }
+    ((uint32_t*)(&rgba[0]))[0] =
+        ctx_RGBA8_associate_global_alpha_u32 (
+            ctx_bi_RGBA8 (*src00,*src01,*src10,*src11, du,dv), global_alpha_u8);
+    xi += xi_delta;
+    yi += yi_delta;
+    zi += zi_delta;
+    rgba += 4;
+
+    i++;
+  }
+}
+
+
+static void
+ctx_fragment_image_rgba8_RGBA8_bi (CtxRasterizer *rasterizer,
+                                   float x, float y, float z,
+                                   void *out, int icount, float dx, float dy, float dz)
+{
+  unsigned int count = icount;
+  if (dy == 0.0f && dx > 0.0f && z==1.0f && dz==0.0f) 
+  {
+    ctx_fragment_image_rgba8_RGBA8_bi_scale (rasterizer, x, y, z, out, count, dx, dy, dz);
+  }
+  else if (z == 1.0f && dz == 0.0f)
+    ctx_fragment_image_rgba8_RGBA8_bi_affine (rasterizer, x, y, z, out, count, dx, dy, dz);
+  else
+  {
+    ctx_fragment_image_rgba8_RGBA8_bi_generic (rasterizer, x, y, z, out, count, dx, dy, dz);
+  }
+}
+#endif
+
+#define ctx_clampi(val,min,max) \
+     ctx_mini (ctx_maxi ((val), (min)), (max))
+
+static inline uint32_t ctx_yuv_to_rgba32 (uint8_t y, uint8_t u, uint8_t v)
+{
+  int cy  = ((y - 16) * 76309) >> 16;
+  int cr  = (v - 128);
+  int cb  = (u - 128);
+  int red = cy + ((cr * 104597) >> 16);
+  int green = cy - ((cb * 25674 + cr * 53278) >> 16);
+  int blue = cy + ((cb * 132201) >> 16);
+  return  ctx_clampi (red, 0, 255) |
+          (ctx_clampi (green, 0, 255) << 8) |
+          (ctx_clampi (blue, 0, 255) << 16) |
+          (0xff << 24);
+}
+
+static void
+ctx_fragment_image_yuv420_RGBA8_nearest (CtxRasterizer *rasterizer,
+                                         float x, float y, float z,
+                                         void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer;
+  if (buffer->color_managed)
+    buffer = buffer->color_managed;
+  uint8_t *src = (uint8_t *) buffer->data;
+  int bwidth  = buffer->width;
+  int bheight = buffer->height;
+  int bwidth_div_2  = bwidth/2;
+  int bheight_div_2  = bheight/2;
+  x += 0.5f;
+  y += 0.5f;
+
+  if (!src)
+          return;
+
+  {
+    int i = 0;
+
+    float  u1 = x + dx * (count-1);
+    float  v1 = y + dy * (count-1);
+    uint32_t *edst = ((uint32_t*)out)+count - 1;
+    for (; i < count; )
+    {
+      if (u1 <0 || v1 < 0 || u1 >= bwidth || v1 >= bheight)
+      {
+        *edst-- = 0;
+        count --;
+        u1 -= dx;
+        v1 -= dy;
+      }
+      else break;
+    }
+
+    for (; i < count; i ++)
+    {
+      int u = (int)x;
+      int v = (int)y;
+      if ((u < 0 || v < 0 || u >= bwidth || v >= bheight))
+      {
+        *((uint32_t*)(rgba))= 0;
+      }
+      else
+      {
+        break;
+      }
+      x += dx;
+      y += dy;
+      rgba += 4;
+    }
+
+    uint32_t u_offset = bheight * bwidth;
+    uint32_t v_offset = u_offset + bheight_div_2 * bwidth_div_2;
+
+    if (rasterizer->swap_red_green)
+    {
+      v_offset = bheight * bwidth;
+      u_offset = v_offset + bheight_div_2 * bwidth_div_2;
+    }
+
+    // XXX this is incorrect- but fixes some bug!
+    int ix = 65536;//x * 65536;
+    int iy = (int)(y * 65536);
+
+    int ideltax = (int)(dx * 65536);
+    int ideltay = (int)(dy * 65536);
+
+    if (ideltay == 0)
+    {
+      int u = ix >> 16;
+      int v = iy >> 16;
+
+      uint32_t y  = v * bwidth;
+      uint32_t uv = (v / 2) * bwidth_div_2;
+
+      if (v >= 0 && v < bheight)
+      while (i < count)// && u >= 0 && u+1 < bwidth)
+      {
+        *((uint32_t*)(rgba))= ctx_yuv_to_rgba32 (src[y+u],
+                        src[u_offset+uv+u/2], src[v_offset+uv+u/2]);
+#if 0
+#if CTX_DITHER
+       ctx_dither_rgba_u8 (rgba, x, y, rasterizer->format->dither_red_blue,
+                           rasterizer->format->dither_green);
+#endif
+#endif
+
+        ix += ideltax;
+        rgba += 4;
+        u = ix >> 16;
+        i++;
+      }
+    }
+    else
+    {
+      int u = ix >> 16;
+      int v = iy >> 16;
+
+      while (i < count)// && u >= 0 && v >= 0 && u < bwidth && v < bheight)
+      {
+        uint32_t y  = v * bwidth + u;
+        uint32_t uv = (v / 2) * bwidth_div_2 + (u / 2);
+
+        *((uint32_t*)(rgba))= ctx_yuv_to_rgba32 (src[y],
+                        src[u_offset+uv], src[v_offset+uv]);
+#if 0
+#if CTX_DITHER
+       ctx_dither_rgba_u8 (rgba, x+i, y, rasterizer->format->dither_red_blue,
+                           rasterizer->format->dither_green);
+#endif
+#endif
+
+        ix += ideltax;
+        iy += ideltay;
+        rgba += 4;
+        u = ix >> 16;
+        v = iy >> 16;
+        i++;
+      }
+    }
+
+    for (; i < count; i++)
+    {
+      *((uint32_t*)(rgba))= 0;
+      rgba += 4;
+    }
+  }
+
+  if (rasterizer->state->gstate.global_alpha_u8 != 255)
+    ctx_RGBA8_apply_global_alpha_and_associate (rasterizer, (uint8_t*)out, count);
+}
+
+#if CTX_FRAGMENT_SPECIALIZE
+
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_box)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_bi)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest)
+
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest_copy)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest_scale)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest_affine)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_nearest_generic)
+
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_bi_scale)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_bi_affine)
+CTX_DECLARE_SWAP_RED_GREEN_FRAGMENT(ctx_fragment_image_rgba8_RGBA8_bi_generic)
+
+static inline void
+ctx_fragment_image_rgba8_RGBA8 (CtxRasterizer *rasterizer,
+                                float x, float y, float z,
+                                void *out, int count, float dx, float dy, float dz)
+{
+  if (rasterizer->state->gstate.image_smoothing)
+  {
+    float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+    if (factor <= 0.50f)
+    {
+      if (rasterizer->swap_red_green)
+        ctx_fragment_image_rgba8_RGBA8_box_swap_red_green (rasterizer, x, y, z, out, count, dx, dy, dz);
+      else
+        ctx_fragment_image_rgba8_RGBA8_box (rasterizer, x, y, z, out, count, dx, dy, dz);
+    }
+#if CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+    else if (factor > 0.99f && factor < 1.01f)
+    {
+      // XXX: also verify translate == 0 for this fast path to be valid
+      if (rasterizer->swap_red_green)
+        ctx_fragment_image_rgba8_RGBA8_nearest_swap_red_green (rasterizer, x, y, z, out, count, dx, dy, dz);
+      else
+        ctx_fragment_image_rgba8_RGBA8_nearest (rasterizer, x, y, z, out, count, dx, dy, dz);
+    }
+#endif
+    else
+    {
+      if (rasterizer->swap_red_green)
+        ctx_fragment_image_rgba8_RGBA8_bi_swap_red_green (rasterizer, x, y, z, out, count, dx, dy, dz);
+      else
+        ctx_fragment_image_rgba8_RGBA8_bi (rasterizer, x, y, z, out, count, dx, dy, dz);
+    }
+  }
+  else
+  {
+    if (rasterizer->swap_red_green)
+      ctx_fragment_image_rgba8_RGBA8_nearest_swap_red_green (rasterizer, x, y, z, out, count, dx, dy, dz);
+    else
+      ctx_fragment_image_rgba8_RGBA8_nearest (rasterizer, x, y, z, out, count, dx, dy, dz);
+  }
+  //ctx_fragment_swap_red_green_u8 (out, count);
+#if 0
+#if CTX_DITHER
+  uint8_t *rgba = (uint8_t*)out;
+  ctx_dither_rgba_u8 (rgba, x, y, rasterizer->format->dither_red_blue,
+                      rasterizer->format->dither_green);
+#endif
+#endif
+}
+#endif
+
+static void
+ctx_fragment_image_gray1_RGBA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer;
+  for (int i = 0; i < count; i ++)
+  {
+  int u = (int)x;
+  int v = (int)y;
+  if ( u < 0 || v < 0 ||
+       u >= buffer->width ||
+       v >= buffer->height)
+    {
+      rgba[0] = rgba[1] = rgba[2] = rgba[3] = 0;
+    }
+  else
+    {
+      uint8_t *src = (uint8_t *) buffer->data;
+      src += v * buffer->stride + u / 8;
+      if (*src & (1<< (u & 7) ) )
+        {
+          rgba[0] = rgba[1] = rgba[2] = rgba[3] = 0;
+        }
+      else
+        {
+          for (int c = 0; c < 4; c++)
+            { rgba[c] = 255;
+            }//g->texture.rgba[c];
+            //}
+        }
+    }
+
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+}
+
+#if CTX_GRADIENTS
+static void
+ctx_fragment_radial_gradient_RGBA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+#if CTX_DITHER
+  int scan = rasterizer->scanline / CTX_FULL_AA;
+  int ox = (int)x;
+#endif
+  for (int i = 0; i <  count; i ++)
+  {
+    float v = (ctx_hypotf_fast (g->radial_gradient.x0 - x, g->radial_gradient.y0 - y) -
+              g->radial_gradient.r0) * (g->radial_gradient.rdelta);
+#if CTX_GRADIENT_CACHE
+    uint32_t *rgbap = (uint32_t*)&rasterizer->gradient_cache_u8[ctx_grad_index(rasterizer, v)][0];
+    *((uint32_t*)rgba) = *rgbap;
+#else
+    ctx_fragment_gradient_1d_RGBA8 (rasterizer, v, 0.0, rgba);
+#endif
+#
+#if CTX_DITHER
+    ctx_dither_rgba_u8 (rgba, ox+i, scan, rasterizer->format->dither_red_blue,
+                        rasterizer->format->dither_green);
+#endif
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+}
+
+static void
+ctx_fragment_linear_gradient_RGBA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+#if 0
+  uint8_t *rgba = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0; i <  count; i ++)
+  {
+  float v = ( ( (g->linear_gradient.dx * x + g->linear_gradient.dy * y) /
+                g->linear_gradient.length) -
+              g->linear_gradient.start) * (g->linear_gradient.rdelta);
+#if CTX_GRADIENT_CACHE
+  uint32_t*rgbap = ((uint32_t*)(&ctx_gradient_cache_u8[ctx_grad_index(v)][0]));
+  *((uint32_t*)rgba) = *rgbap;
+#else
+  _ctx_fragment_gradient_1d_RGBA8 (rasterizer, v, 1.0, rgba);
+#endif
+#if CTX_DITHER
+  ctx_dither_rgba_u8 (rgba, x+i, y, rasterizer->format->dither_red_blue,
+                      rasterizer->format->dither_green);
+#endif
+    rgba += 4;
+    x += dx;
+    y += dy;
+  }
+#else
+  uint8_t *rgba = (uint8_t *) out;
+
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  float u0 = x; float v0 = y;
+  float ud = dx; float vd = dy;
+  float linear_gradient_rdelta = g->linear_gradient.rdelta;
+  float linear_gradient_length = g->linear_gradient.length;
+  float linear_gradient_length_recip = 1.0f/linear_gradient_length;
+  float linear_gradient_dx = g->linear_gradient.dx *linear_gradient_length_recip * linear_gradient_rdelta;
+  float linear_gradient_dy = g->linear_gradient.dy *linear_gradient_length_recip * linear_gradient_rdelta;
+  float linear_gradient_start = g->linear_gradient.start * linear_gradient_rdelta;
+
+#if CTX_DITHER
+  int dither_red_blue = rasterizer->format->dither_red_blue;
+  int dither_green = rasterizer->format->dither_green;
+  int scan = rasterizer->scanline / CTX_FULL_AA;
+  int ox = (int)x;
+#endif
+
+  u0 *= linear_gradient_dx;
+  v0 *= linear_gradient_dy;
+  ud *= linear_gradient_dx;
+  vd *= linear_gradient_dy;
+
+#if CTX_GRADIENT_CACHE
+  int vv = (int)(((u0 + v0) - linear_gradient_start) * (rasterizer->gradient_cache_elements-1) * 256);
+  int ud_plus_vd = (int)((ud + vd) * (rasterizer->gradient_cache_elements-1) * 256);
+#else
+  float vv = ((u0 + v0) - linear_gradient_start);
+  float ud_plus_vd = (ud + vd);
+#endif
+
+  for (int i = 0; i < count ; i++)
+  {
+#if CTX_GRADIENT_CACHE
+  uint32_t*rgbap = ((uint32_t*)(&rasterizer->gradient_cache_u8[ctx_grad_index_i (rasterizer, vv)][0]));
+  *((uint32_t*)rgba) = *rgbap;
+#else
+  _ctx_fragment_gradient_1d_RGBA8 (rasterizer, vv, 1.0, rgba);
+#endif
+#if CTX_DITHER
+      ctx_dither_rgba_u8 (rgba, ox+i, scan, dither_red_blue, dither_green);
+#endif
+    rgba+= 4;
+    vv += ud_plus_vd;
+  }
+#endif
+}
+
+#endif
+
+static void
+ctx_fragment_color_RGBA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *rgba_out = (uint8_t *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  ctx_color_get_rgba8 (rasterizer->state, &g->color, rgba_out);
+  ctx_RGBA8_associate_alpha (rgba_out);
+  if (rasterizer->swap_red_green)
+  {
+    int tmp = rgba_out[0];
+    rgba_out[0] = rgba_out[2];
+    rgba_out[2] = tmp;
+  }
+  for (int i = 1; i < count; i++, rgba_out+=4)
+    memcpy (rgba_out + count * 4, rgba_out, 4);
+}
+#if CTX_ENABLE_FLOAT
+
+#if CTX_GRADIENTS
+static void
+ctx_fragment_linear_gradient_RGBAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float *rgba = (float *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0; i < count; i++)
+  {
+    float v = ( ( (g->linear_gradient.dx * x + g->linear_gradient.dy * y) /
+                  g->linear_gradient.length) -
+                g->linear_gradient.start) * (g->linear_gradient.rdelta);
+    ctx_fragment_gradient_1d_RGBAF (rasterizer, v, 1.0f, rgba);
+    x += dx;
+    y += dy;
+    rgba += 4;
+  }
+}
+
+static void
+ctx_fragment_radial_gradient_RGBAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float *rgba = (float *) out;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0; i < count; i++)
+  {
+  float v = ctx_hypotf (g->radial_gradient.x0 - x, g->radial_gradient.y0 - y);
+        v = (v - g->radial_gradient.r0) * (g->radial_gradient.rdelta);
+  ctx_fragment_gradient_1d_RGBAF (rasterizer, v, 0.0f, rgba);
+    x+=dx;
+    y+=dy;
+    rgba +=4;
+  }
+}
+#endif
+
+
+static void
+ctx_fragment_color_RGBAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float *rgba = (float *) out;
+  float  in[4];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  ctx_color_get_rgba (rasterizer->state, &g->color, in);
+  for (int c = 0; c < 3; c++)
+    in[c] *= in[3];
+  while (count--)
+  {
+    for (int c = 0; c < 4; c++)
+      rgba[c] = in[c];
+    rgba += 4;
+  }
+}
+
+
+static void ctx_fragment_image_RGBAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float *outf = (float *) out;
+  uint8_t rgba[4 * count];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  switch (buffer->format->bpp)
+    {
+#if CTX_FRAGMENT_SPECIALIZE
+      case 1:  ctx_fragment_image_gray1_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+      case 24: ctx_fragment_image_rgb8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);  break;
+      case 32: ctx_fragment_image_rgba8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+#endif
+      default: ctx_fragment_image_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);       break;
+    }
+  for (int c = 0; c < 4 * count; c ++) { outf[c] = ctx_u8_to_float (rgba[c]); }
+}
+
+static CtxFragment ctx_rasterizer_get_fragment_RGBAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_TEXTURE:         return ctx_fragment_image_RGBAF;
+      case CTX_SOURCE_COLOR:           return ctx_fragment_color_RGBAF;
+#if CTX_GRADIENTS
+      case CTX_SOURCE_LINEAR_GRADIENT: return ctx_fragment_linear_gradient_RGBAF;
+      case CTX_SOURCE_RADIAL_GRADIENT: return ctx_fragment_radial_gradient_RGBAF;
+#endif
+    }
+  return ctx_fragment_color_RGBAF;
+}
+#endif
+
+
+static inline int
+ctx_matrix_no_perspective (CtxMatrix *matrix)
+{
+  if (fabsf(matrix->m[2][0]) >0.001f) return 0;
+  if (fabsf(matrix->m[2][1]) >0.001f) return 0;
+  if (fabsf(matrix->m[2][2] - 1.0f)>0.001f) return 0;
+  return 1;
+}
+
+/* for multiples of 90 degree rotations, we return no rotation */
+static inline int
+ctx_matrix_no_skew_or_rotate (CtxMatrix *matrix)
+{
+  if (fabsf(matrix->m[0][1]) >0.001f) return 0;
+  if (fabsf(matrix->m[1][0]) >0.001f) return 0;
+  return ctx_matrix_no_perspective (matrix);
+}
+
+
+static CtxFragment ctx_rasterizer_get_fragment_RGBA8 (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_TEXTURE:
+      {
+        CtxBuffer *buffer = g->texture.buffer;
+        if (buffer)
+          buffer = buffer->color_managed?buffer->color_managed:buffer;
+        if (!buffer || !buffer->format)
+          return ctx_fragment_color_RGBA8;
+
+        if (buffer->format->pixel_format == CTX_FORMAT_YUV420)
+        {
+          return ctx_fragment_image_yuv420_RGBA8_nearest;
+        }
+        else
+#if CTX_FRAGMENT_SPECIALIZE
+        switch (buffer->format->bpp)
+          {
+            case 1: return ctx_fragment_image_gray1_RGBA8;
+#if 1
+            case 24: 
+              {
+                if (gstate->image_smoothing)
+                {
+                  float factor = ctx_matrix_get_scale (&gstate->transform);
+                          //fprintf (stderr, "{%.3f}", factor);
+                  if (factor < 0.5f)
+                  {
+                    if (rasterizer->swap_red_green)
+                      return ctx_fragment_image_rgb8_RGBA8_box_swap_red_green;
+                    return ctx_fragment_image_rgb8_RGBA8_box;
+                  }
+#if CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+                  else if (factor > 0.99f && factor < 1.01f)
+                  {
+                    if (rasterizer->swap_red_green)
+                      return ctx_fragment_image_rgb8_RGBA8_nearest_swap_red_green;
+                    return ctx_fragment_image_rgb8_RGBA8_nearest;
+                  }
+#endif
+                  else
+                  {
+                    if (rasterizer->swap_red_green)
+                      return ctx_fragment_image_rgb8_RGBA8_bi_swap_red_green;
+                    return ctx_fragment_image_rgb8_RGBA8_bi;
+                  }
+                }
+                else
+                {
+                  if (rasterizer->swap_red_green)
+                    return ctx_fragment_image_rgb8_RGBA8_nearest_swap_red_green;
+                  return ctx_fragment_image_rgb8_RGBA8_nearest;
+                }
+              }
+              break;
+#endif
+            case 32:
+              {
+                CtxMatrix *transform = &gstate->source_fill.transform;
+                CtxExtend extend = rasterizer->state->gstate.extend;
+                if (gstate->image_smoothing)
+                {
+                  float factor = ctx_matrix_get_scale (&gstate->transform);
+                          //fprintf (stderr, "[%.3f]", factor);
+                  if (factor < 0.5f)
+                  {
+                    if (rasterizer->swap_red_green)
+                      return ctx_fragment_image_rgba8_RGBA8_box_swap_red_green;
+                    return ctx_fragment_image_rgba8_RGBA8_box;
+                  }
+#if CTX_ALWAYS_USE_NEAREST_FOR_SCALE1
+                  else if (factor > 0.99f && factor < 1.01f && extend == CTX_EXTEND_NONE)
+                  {
+                    if (rasterizer->swap_red_green)
+                      return ctx_fragment_image_rgba8_RGBA8_nearest_copy_swap_red_green;
+                    return ctx_fragment_image_rgba8_RGBA8_nearest_copy;
+                  }
+#endif
+                  else
+                  {
+                    if (rasterizer->swap_red_green)
+                    {
+                      if (ctx_matrix_no_perspective (transform))
+                      {
+                        if (ctx_matrix_no_skew_or_rotate (transform))
+                        {
+                          if (ctx_fabsf (transform->m[0][0] - 1.0f) < 0.001f &&
+                              ctx_fabsf (transform->m[1][1] - 1.0f) < 0.001f &&
+                              ctx_fmod1f (transform->m[0][2]) < 0.001f &&
+                              ctx_fmod1f (transform->m[1][2]) < 0.001f)
+                          {
+                            if (extend == CTX_EXTEND_NONE)
+                              return ctx_fragment_image_rgba8_RGBA8_nearest_copy_swap_red_green;
+                            else if (extend == CTX_EXTEND_REPEAT)
+                              return ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat_swap_red_green;
+                          }
+                          return ctx_fragment_image_rgba8_RGBA8_bi_scale_swap_red_green;
+                        }
+                        return ctx_fragment_image_rgba8_RGBA8_bi_affine_swap_red_green;
+                      }
+                      return ctx_fragment_image_rgba8_RGBA8_bi_generic_swap_red_green;
+                    }
+
+                    if (ctx_matrix_no_perspective (transform))
+                    {
+                      if (ctx_matrix_no_skew_or_rotate (transform))
+                      {
+                        if (ctx_fabsf (transform->m[0][0] - 1.0f) < 0.001f &&
+                            ctx_fabsf (transform->m[1][1] - 1.0f) < 0.001f &&
+                            ctx_fmod1f (transform->m[0][2]) < 0.001f &&
+                            ctx_fmod1f (transform->m[1][2]) < 0.001f)
+                        {
+                          if (extend == CTX_EXTEND_NONE)
+                            return ctx_fragment_image_rgba8_RGBA8_nearest_copy;
+                          else if (extend == CTX_EXTEND_REPEAT)
+                            return ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat;
+                        }
+                        return ctx_fragment_image_rgba8_RGBA8_bi_scale;
+                      }
+                      return ctx_fragment_image_rgba8_RGBA8_bi_affine;
+                    }
+                    return ctx_fragment_image_rgba8_RGBA8_bi_generic;
+                  }
+                }
+                else
+                {
+                  if (rasterizer->swap_red_green)
+                  {
+                    if (ctx_matrix_no_perspective (transform))
+                    {
+                      if (ctx_matrix_no_skew_or_rotate (transform))
+                      {
+                        if (ctx_fabsf (transform->m[0][0] - 1.0f) < 0.001f &&
+                            ctx_fabsf (transform->m[1][1] - 1.0f) < 0.001f)
+                        {
+                           return ctx_fragment_image_rgba8_RGBA8_nearest_copy_swap_red_green;
+                         if (extend == CTX_EXTEND_NONE)
+                           return ctx_fragment_image_rgba8_RGBA8_nearest_copy_swap_red_green;
+                         else if (extend == CTX_EXTEND_REPEAT)
+                           return ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat_swap_red_green;
+                        }
+                        return ctx_fragment_image_rgba8_RGBA8_nearest_scale_swap_red_green;
+                      }
+                      return ctx_fragment_image_rgba8_RGBA8_nearest_affine_swap_red_green;
+                    }
+                    return ctx_fragment_image_rgba8_RGBA8_nearest_generic_swap_red_green;
+                  }
+                  if (ctx_matrix_no_perspective (transform))
+                  {
+                    if (ctx_matrix_no_skew_or_rotate (transform))
+                    {
+                      if (ctx_fabsf (transform->m[0][0] - 1.0f) < 0.001f &&
+                          ctx_fabsf (transform->m[1][1] - 1.0f) < 0.001f)
+                      {
+                         if (extend == CTX_EXTEND_NONE)
+                           return ctx_fragment_image_rgba8_RGBA8_nearest_copy;
+                         else if (extend == CTX_EXTEND_REPEAT)
+                           return ctx_fragment_image_rgba8_RGBA8_nearest_copy_repeat;
+                      }
+                      return ctx_fragment_image_rgba8_RGBA8_nearest_scale;
+                    }
+                    return ctx_fragment_image_rgba8_RGBA8_nearest_affine;
+                  }
+                  return ctx_fragment_image_rgba8_RGBA8_nearest_generic;
+                }
+              }
+            default: return ctx_fragment_image_RGBA8;
+          }
+#else
+          return ctx_fragment_image_RGBA8;
+#endif
+      }
+
+      case CTX_SOURCE_COLOR:           return ctx_fragment_color_RGBA8;
+#if CTX_GRADIENTS
+      case CTX_SOURCE_LINEAR_GRADIENT: return ctx_fragment_linear_gradient_RGBA8;
+      case CTX_SOURCE_RADIAL_GRADIENT: return ctx_fragment_radial_gradient_RGBA8;
+#endif
+    }
+  return ctx_fragment_color_RGBA8;
+}
+
+static inline void
+ctx_init_uv (CtxRasterizer *rasterizer,
+             int x0,
+             int y0,
+             float *u0, float *v0, float *w0, float *ud, float *vd, float *wd)
+             //float *u0, float *v0, float *w0, float *ud, float *vd, float *wd)
+{
+  CtxMatrix *transform = &rasterizer->state->gstate.source_fill.transform;
+  *u0 = transform->m[0][0] * (x0 + 0.0f) +
+        transform->m[0][1] * (y0 + 0.0f) +
+        transform->m[0][2];
+  *v0 = transform->m[1][0] * (x0 + 0.0f) +
+        transform->m[1][1] * (y0 + 0.0f) +
+        transform->m[1][2];
+  *w0 = transform->m[2][0] * (x0 + 0.0f) +
+        transform->m[2][1] * (y0 + 0.0f) +
+        transform->m[2][2];
+  *ud = transform->m[0][0];
+  *vd = transform->m[1][0];
+  *wd = transform->m[2][0];
+}
+
+static inline void
+ctx_u8_copy_normal (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  if (CTX_UNLIKELY(rasterizer->fragment))
+    {
+      float u0 = 0; float v0 = 0;
+      float ud = 0; float vd = 0;
+      float w0 = 1; float wd = 0;
+      ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+      while (count--)
+      {
+        uint8_t cov = *coverage;
+        if (CTX_UNLIKELY(cov == 0))
+        {
+          u0+=ud;
+          v0+=vd;
+        }
+        else
+        {
+          rasterizer->fragment (rasterizer, u0, v0, w0, src, 1, ud, vd, wd);
+          u0+=ud;
+          v0+=vd;
+          if (cov == 255)
+          {
+            for (int c = 0; c < components; c++)
+              dst[c] = src[c];
+          }
+          else
+          {
+            uint8_t rcov = 255 - cov;
+            for (int c = 0; c < components; c++)
+              { dst[c] = (src[c]*cov + dst[c]*rcov)/255; }
+          }
+        }
+        dst += components;
+        coverage ++;
+      }
+      return;
+    }
+
+  while (count--)
+  {
+    uint8_t cov = *coverage;
+    uint8_t rcov = 255-cov;
+    for (int c = 0; c < components; c++)
+      { dst[c] = (src[c]*cov+dst[c]*rcov)/255; }
+    dst += components;
+    coverage ++;
+  }
+}
+
+static void
+ctx_u8_clear_normal (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  while (count--)
+  {
+    uint8_t cov = *coverage;
+    for (int c = 0; c < components; c++)
+      { dst[c] = (dst[c] * (256-cov)) >> 8; }
+    coverage ++;
+    dst += components;
+  }
+}
+
+typedef enum {
+  CTX_PORTER_DUFF_0,
+  CTX_PORTER_DUFF_1,
+  CTX_PORTER_DUFF_ALPHA,
+  CTX_PORTER_DUFF_1_MINUS_ALPHA,
+} CtxPorterDuffFactor;
+
+#define  \
+ctx_porter_duff_factors(mode, foo, bar)\
+{\
+  switch (mode)\
+  {\
+     case CTX_COMPOSITE_SOURCE_ATOP:\
+        f_s = CTX_PORTER_DUFF_ALPHA;\
+        f_d = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_ATOP:\
+        f_s = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+        f_d = CTX_PORTER_DUFF_ALPHA;\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_IN:\
+        f_s = CTX_PORTER_DUFF_0;\
+        f_d = CTX_PORTER_DUFF_ALPHA;\
+      break;\
+     case CTX_COMPOSITE_DESTINATION:\
+        f_s = CTX_PORTER_DUFF_0;\
+        f_d = CTX_PORTER_DUFF_1;\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OVER:\
+        f_s = CTX_PORTER_DUFF_1;\
+        f_d = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OVER:\
+        f_s = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+        f_d = CTX_PORTER_DUFF_1;\
+       break;\
+     case CTX_COMPOSITE_XOR:\
+        f_s = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+        f_d = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OUT:\
+        f_s = CTX_PORTER_DUFF_0;\
+        f_d = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OUT:\
+        f_s = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+        f_d = CTX_PORTER_DUFF_0;\
+       break;\
+     case CTX_COMPOSITE_SOURCE_IN:\
+        f_s = CTX_PORTER_DUFF_ALPHA;\
+        f_d = CTX_PORTER_DUFF_0;\
+       break;\
+     case CTX_COMPOSITE_COPY:\
+        f_s = CTX_PORTER_DUFF_1;\
+        f_d = CTX_PORTER_DUFF_1_MINUS_ALPHA;\
+       break;\
+     default:\
+     case CTX_COMPOSITE_CLEAR:\
+        f_s = CTX_PORTER_DUFF_0;\
+        f_d = CTX_PORTER_DUFF_0;\
+       break;\
+  }\
+}
+
+static inline void
+ctx_u8_source_over_normal_color (int components,
+                                 CtxRasterizer         *rasterizer,
+                                 uint8_t * __restrict__ dst,
+                                 uint8_t * __restrict__ src,
+                                 int                    x0,
+                                 uint8_t * __restrict__ coverage,
+                                 int                    count)
+{
+  uint8_t tsrc[5];
+  *((uint32_t*)tsrc) = *((uint32_t*)src);
+
+  while (count--)
+  {
+    uint8_t cov = *coverage++;
+    for (int c = 0; c < components; c++)
+      dst[c] =  ((((tsrc[c] * cov)) + (dst[c] * (((((255+(tsrc[components-1] * cov))>>8))^255 ))))>>8);
+    dst+=components;
+  }
+}
+
+static inline void
+ctx_u8_source_copy_normal_color (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  while (count--)
+  {
+    for (int c = 0; c < components; c++)
+      dst[c] =  ctx_lerp_u8(dst[c],src[c],coverage[0]);
+    coverage ++;
+    dst+=components;
+  }
+}
+
+static inline void
+ctx_RGBA8_source_over_normal_buf (CTX_COMPOSITE_ARGUMENTS, uint8_t *tsrc)
+{
+  while (count--)
+  {
+     uint32_t si_ga = ((*((uint32_t*)tsrc)) & 0xff00ff00) >> 8;
+     uint32_t si_rb = (*((uint32_t*)tsrc)) & 0x00ff00ff;
+//   uint32_t di_ga = ((*((uint32_t*)dst)) & 0xff00ff00) >> 8;
+//   uint32_t di_rb = (*((uint32_t*)dst)) & 0x00ff00ff;
+     uint32_t si_a  = si_ga >> 16;
+     uint32_t cov = *coverage;
+     uint32_t racov = (255-((255+si_a*cov)>>8));
+     *((uint32_t*)(dst)) =
+
+     (((si_rb*cov+0xff00ff+(((*((uint32_t*)(dst)))&0x00ff00ff)*racov))>>8)&0x00ff00ff)|
+     ((si_ga*cov+0xff00ff+((((*((uint32_t*)(dst)))&0xff00ff00)>>8)*racov))&0xff00ff00);
+
+     coverage ++;
+     tsrc += 4;
+     dst  += 4;
+  }
+}
+
+static inline void
+ctx_RGBA8_source_over_normal_full_cov_buf (CTX_COMPOSITE_ARGUMENTS, uint8_t *tsrc)
+{
+  uint32_t *ttsrc = (uint32_t*)tsrc;
+  uint32_t *ddst  = (uint32_t*)dst;
+  while (count--)
+  {
+     uint32_t si_ga = ((*ttsrc) & 0xff00ff00) >> 8;
+     uint32_t si_rb = (*ttsrc++) & 0x00ff00ff;
+     uint32_t si_a  = si_ga >> 16;
+     uint32_t racov = si_a^255;
+     *(ddst) =
+     (((si_rb*255+0xff00ff+(((*ddst)&0x00ff00ff)*racov))>>8)&0x00ff00ff)|
+     ((si_ga*255+0xff00ff+((((*ddst)&0xff00ff00)>>8)*racov))&0xff00ff00);
+     ddst++;
+  }
+}
+
+static inline void
+ctx_RGBA8_source_copy_normal_buf (CTX_COMPOSITE_ARGUMENTS, uint8_t *__restrict__ tsrc)
+{
+  uint32_t *ttsrc = (uint32_t*)tsrc;
+  uint32_t *ddst  = (uint32_t*)dst;
+  while (count--)
+  {
+    *ddst=ctx_lerp_RGBA8 (*ddst, *(ttsrc++), *(coverage++));
+    ddst++;
+  }
+}
+
+static inline void
+ctx_RGBA8_source_over_normal_fragment (CTX_COMPOSITE_ARGUMENTS)
+{
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+  uint8_t _tsrc[4 * (count)];
+  rasterizer->fragment (rasterizer, u0, v0, w0, &_tsrc[0], count, ud, vd, wd);
+  ctx_RGBA8_source_over_normal_buf (rasterizer,
+                       dst, src, x0, coverage, count, &_tsrc[0]);
+}
+
+static inline void
+ctx_RGBA8_source_over_normal_full_cov_fragment (CTX_COMPOSITE_ARGUMENTS, int scanlines)
+{
+  CtxMatrix *transform = &rasterizer->state->gstate.source_fill.transform;
+  int scan = rasterizer->scanline /CTX_FULL_AA;
+
+  if (CTX_LIKELY(ctx_matrix_no_perspective (transform)))
+  {
+    float u0, v0, ud, vd, w0, wd;
+    ctx_init_uv (rasterizer, x0, scan, &u0, &v0, &w0, &ud, &vd, &wd);
+    for (int y = 0; y < scanlines; y++)
+    {
+      uint8_t _tsrc[4 * count];
+      rasterizer->fragment (rasterizer, u0, v0, w0, &_tsrc[0], count, ud, vd, wd);
+      ctx_RGBA8_source_over_normal_full_cov_buf (rasterizer,
+                          dst, src, x0, coverage, count, &_tsrc[0]);
+      u0 -= vd;
+      v0 += ud;
+      dst += rasterizer->blit_stride;
+    }
+  }
+  else
+  {
+    for (int y = 0; y < scanlines; y++)
+    {
+      uint8_t _tsrc[4 * count];
+      float u0, v0, ud, vd, w0, wd;
+      ctx_init_uv (rasterizer, x0, scan+y, &u0, &v0, &w0, &ud, &vd, &wd);
+      rasterizer->fragment (rasterizer, u0, v0, w0, &_tsrc[0], count, ud, vd, wd);
+      ctx_RGBA8_source_over_normal_full_cov_buf (rasterizer,
+                          dst, src, x0, coverage, count, &_tsrc[0]);
+      dst += rasterizer->blit_stride;
+    }
+  }
+}
+
+static inline void
+ctx_RGBA8_source_copy_normal_fragment (CTX_COMPOSITE_ARGUMENTS)
+{
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+  uint8_t _tsrc[4 * (count)];
+  rasterizer->fragment (rasterizer, u0, v0, w0, &_tsrc[0], count, ud, vd, wd);
+  ctx_RGBA8_source_copy_normal_buf (rasterizer,
+                       dst, src, x0, coverage, count, &_tsrc[0]);
+}
+
+
+static void
+ctx_RGBA8_source_over_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+#if CTX_REFERENCE
+  ctx_u8_source_over_normal_color (4, rasterizer, dst, src, x0, coverage, count);
+#else
+  uint32_t si_ga = ((uint32_t*)rasterizer->color)[1];
+  uint32_t si_rb = ((uint32_t*)rasterizer->color)[2];
+  uint32_t si_a  = si_ga >> 16;
+
+  while (count--)
+  {
+     uint32_t cov   = *coverage++;
+     uint32_t rcov  = (((255+si_a * cov)>>8))^255;
+     uint32_t di    = *((uint32_t*)dst);
+     uint32_t di_ga = ((di & 0xff00ff00) >> 8);
+     uint32_t di_rb = (di & 0x00ff00ff);
+     *((uint32_t*)(dst)) =
+     (((si_rb * cov + 0xff00ff + di_rb * rcov) & 0xff00ff00) >> 8)  |
+      ((si_ga * cov + 0xff00ff + di_ga * rcov) & 0xff00ff00);
+     dst+=4;
+  }
+#endif
+}
+
+static void
+ctx_RGBA8_source_copy_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+#if CTX_REFERENCE
+  ctx_u8_source_copy_normal_color (4, rasterizer, dst, src, x0, coverage, count);
+#else
+  uint32_t si_ga = ((uint32_t*)rasterizer->color)[1];
+  uint32_t si_rb = ((uint32_t*)rasterizer->color)[2];
+
+  while (count--)
+  {
+     uint32_t cov   = *coverage++;
+     uint32_t di    = *((uint32_t*)dst);
+     uint32_t di_ga = (di & 0xff00ff00);
+     uint32_t di_rb = (di & 0x00ff00ff);
+
+     uint32_t d_rb  = si_rb - di_rb;
+     uint32_t d_ga  = si_ga - (di_ga>>8);
+
+     *((uint32_t*)(dst)) =
+
+     (((di_rb + ((d_rb * cov)>>8)) & 0x00ff00ff))  |
+      ((di_ga + ((d_ga * cov)      & 0xff00ff00)));
+     dst +=4;
+  }
+#endif
+}
+
+static void
+ctx_RGBA8_clear_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_u8_clear_normal (4, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_u8_blend_normal (int components, uint8_t * __restrict__ dst, uint8_t *src, uint8_t *blended, int count)
+{
+  for (int j = 0; j < count; j++)
+  {
+  switch (components)
+  {
+     case 3:
+       ((uint8_t*)(blended))[2] = ((uint8_t*)(src))[2];
+       *((uint16_t*)(blended)) = *((uint16_t*)(src));
+       break;
+     case 2:
+       *((uint16_t*)(blended)) = *((uint16_t*)(src));
+       break;
+     case 5:
+       *((uint32_t*)(blended)) = *((uint32_t*)(src));
+       ((uint8_t*)(blended))[4] = ((uint8_t*)(src))[4];
+       break;
+     case 4:
+       *((uint32_t*)(blended)) = *((uint32_t*)(src));
+       break;
+     default:
+       {
+        for (int i = 0; i<components;i++)
+           blended[i] = src[i];
+       }
+       break;
+  }
+    blended+=components;
+    src+=components;
+  }
+}
+
+/* branchless 8bit add that maxes out at 255 */
+static inline uint8_t ctx_sadd8(uint8_t a, uint8_t b)
+{
+  uint16_t s = (uint16_t)a+b;
+  return -(s>>8) | (uint8_t)s;
+}
+
+#if CTX_BLENDING_AND_COMPOSITING
+
+#define ctx_u8_blend_define(name, CODE) \
+static inline void \
+ctx_u8_blend_##name (int components, uint8_t * __restrict__ dst, uint8_t *src, uint8_t *blended, int count)\
+{\
+  for (int j = 0; j < count; j++) { \
+  uint8_t *s=src; uint8_t b[components];\
+  ctx_u8_deassociate_alpha (components, dst, b);\
+    CODE;\
+  blended[components-1] = src[components-1];\
+  ctx_u8_associate_alpha (components, blended);\
+  src += components;\
+  dst += components;\
+  blended += components;\
+  }\
+}
+
+#define ctx_u8_blend_define_seperable(name, CODE) \
+        ctx_u8_blend_define(name, for (int c = 0; c < components-1; c++) { CODE ;}) \
+
+ctx_u8_blend_define_seperable(multiply,     blended[c] = (b[c] * s[c])/255;)
+ctx_u8_blend_define_seperable(screen,       blended[c] = s[c] + b[c] - (s[c] * b[c])/255;)
+ctx_u8_blend_define_seperable(overlay,      blended[c] = b[c] < 127 ? (s[c] * b[c])/255 :
+                                                         s[c] + b[c] - (s[c] * b[c])/255;)
+ctx_u8_blend_define_seperable(darken,       blended[c] = ctx_mini (b[c], s[c]))
+ctx_u8_blend_define_seperable(lighten,      blended[c] = ctx_maxi (b[c], s[c]))
+ctx_u8_blend_define_seperable(color_dodge,  blended[c] = b[c] == 0 ? 0 :
+                                     s[c] == 255 ? 255 : ctx_mini(255, (255 * b[c]) / (255-s[c])))
+ctx_u8_blend_define_seperable(color_burn,   blended[c] = b[c] == 1 ? 1 :
+                                     s[c] == 0 ? 0 : 255 - ctx_mini(255, (255*(255 - b[c])) / s[c]))
+ctx_u8_blend_define_seperable(hard_light,   blended[c] = s[c] < 127 ? (b[c] * s[c])/255 :
+                                                          b[c] + s[c] - (b[c] * s[c])/255;)
+ctx_u8_blend_define_seperable(difference,   blended[c] = (b[c] - s[c]))
+ctx_u8_blend_define_seperable(divide,       blended[c] = s[c]?(255 * b[c]) / s[c]:0)
+ctx_u8_blend_define_seperable(addition,     blended[c] = ctx_sadd8 (s[c], b[c]))
+ctx_u8_blend_define_seperable(subtract,     blended[c] = ctx_maxi(0, s[c]-b[c]))
+ctx_u8_blend_define_seperable(exclusion,    blended[c] = b[c] + s[c] - 2 * (b[c] * s[c]/255))
+ctx_u8_blend_define_seperable(soft_light,
+  if (s[c] <= 255/2)
+  {
+    blended[c] = b[c] - (255 - 2 * s[c]) * b[c] * (255 - b[c]) / (255 * 255);
+  }
+  else
+  {
+    int d;
+    if (b[c] <= 255/4)
+      d = (((16 * b[c] - 12 * 255)/255 * b[c] + 4 * 255) * b[c])/255;
+    else
+      d = (int)(ctx_sqrtf(b[c]/255.0f) * 255.4f);
+    blended[c] = (b[c] + (2 * s[c] - 255) * (d - b[c]))/255;
+  }
+)
+
+static int ctx_int_get_max (int components, int *c)
+{
+  int max = 0;
+  for (int i = 0; i < components - 1; i ++)
+  {
+    if (c[i] > max) max = c[i];
+  }
+  return max;
+}
+
+static int ctx_int_get_min (int components, int *c)
+{
+  int min = 400;
+  for (int i = 0; i < components - 1; i ++)
+  {
+    if (c[i] < min) min = c[i];
+  }
+  return min;
+}
+
+static int ctx_int_get_lum (int components, int *c)
+{
+  switch (components)
+  {
+    case 3:
+    case 4:
+            return (int)(CTX_CSS_RGB_TO_LUMINANCE(c));
+    case 1:
+    case 2:
+            return c[0];
+            break;
+    default:
+       {
+         int sum = 0;
+         for (int i = 0; i < components - 1; i ++)
+         {
+           sum += c[i];
+         }
+         return sum / (components - 1);
+       }
+            break;
+  }
+}
+
+static int ctx_u8_get_lum (int components, uint8_t *c)
+{
+  switch (components)
+  {
+    case 3:
+    case 4:
+            return (int)(CTX_CSS_RGB_TO_LUMINANCE(c));
+    case 1:
+    case 2:
+            return c[0];
+            break;
+    default:
+       {
+         int sum = 0;
+         for (int i = 0; i < components - 1; i ++)
+         {
+           sum += c[i];
+         }
+         return sum / (components - 1);
+       }
+            break;
+  }
+}
+static int ctx_u8_get_sat (int components, uint8_t *c)
+{
+  switch (components)
+  {
+    case 3:
+    case 4:
+            { int r = c[0];
+              int g = c[1];
+              int b = c[2];
+              return ctx_maxi(r, ctx_maxi(g,b)) - ctx_mini(r,ctx_mini(g,b));
+            }
+            break;
+    case 1:
+    case 2:
+            return 0.0;
+            break;
+    default:
+       {
+         int min = 1000;
+         int max = -1000;
+         for (int i = 0; i < components - 1; i ++)
+         {
+           if (c[i] < min) min = c[i];
+           if (c[i] > max) max = c[i];
+         }
+         return max-min;
+       }
+       break;
+  }
+}
+
+static void ctx_u8_set_lum (int components, uint8_t *c, uint8_t lum)
+{
+  int d = lum - ctx_u8_get_lum (components, c);
+  int tc[components];
+  for (int i = 0; i < components - 1; i++)
+  {
+    tc[i] = c[i] + d;
+  }
+
+  int l = ctx_int_get_lum (components, tc);
+  int n = ctx_int_get_min (components, tc);
+  int x = ctx_int_get_max (components, tc);
+
+  if (n < 0 && l!=n)
+  {
+    for (int i = 0; i < components - 1; i++)
+      tc[i] = l + (((tc[i] - l) * l) / (l-n));
+  }
+
+  if (x > 255 && x!=l)
+  {
+    for (int i = 0; i < components - 1; i++)
+      tc[i] = l + (((tc[i] - l) * (255 - l)) / (x-l));
+  }
+  for (int i = 0; i < components - 1; i++)
+    c[i] = tc[i];
+}
+
+static void ctx_u8_set_sat (int components, uint8_t *c, uint8_t sat)
+{
+  int max = 0, mid = 1, min = 2;
+  
+  if (c[min] > c[mid]){int t = min; min = mid; mid = t;}
+  if (c[mid] > c[max]){int t = mid; mid = max; max = t;}
+  if (c[min] > c[mid]){int t = min; min = mid; mid = t;}
+
+  if (c[max] > c[min])
+  {
+    c[mid] = ((c[mid]-c[min]) * sat) / (c[max] - c[min]);
+    c[max] = sat;
+  }
+  else
+  {
+    c[mid] = c[max] = 0;
+  }
+  c[min] = 0;
+}
+
+ctx_u8_blend_define(color,
+  for (int i = 0; i < components; i++)
+    blended[i] = s[i];
+  ctx_u8_set_lum(components, blended, ctx_u8_get_lum (components, s));
+)
+
+ctx_u8_blend_define(hue,
+  int in_sat = ctx_u8_get_sat(components, b);
+  int in_lum = ctx_u8_get_lum(components, b);
+  for (int i = 0; i < components; i++)
+    blended[i] = s[i];
+  ctx_u8_set_sat(components, blended, in_sat);
+  ctx_u8_set_lum(components, blended, in_lum);
+)
+
+ctx_u8_blend_define(saturation,
+  int in_sat = ctx_u8_get_sat(components, s);
+  int in_lum = ctx_u8_get_lum(components, b);
+  for (int i = 0; i < components; i++)
+    blended[i] = b[i];
+  ctx_u8_set_sat(components, blended, in_sat);
+  ctx_u8_set_lum(components, blended, in_lum);
+)
+
+ctx_u8_blend_define(luminosity,
+  int in_lum = ctx_u8_get_lum(components, s);
+  for (int i = 0; i < components; i++)
+    blended[i] = b[i];
+  ctx_u8_set_lum(components, blended, in_lum);
+)
+#endif
+
+CTX_INLINE static void
+ctx_u8_blend (int components, CtxBlend blend, uint8_t * __restrict__ dst, uint8_t *src, uint8_t *blended, int count)
+{
+#if CTX_BLENDING_AND_COMPOSITING
+  switch (blend)
+  {
+    case CTX_BLEND_NORMAL:      ctx_u8_blend_normal      (components, dst, src, blended, count); break;
+    case CTX_BLEND_MULTIPLY:    ctx_u8_blend_multiply    (components, dst, src, blended, count); break;
+    case CTX_BLEND_SCREEN:      ctx_u8_blend_screen      (components, dst, src, blended, count); break;
+    case CTX_BLEND_OVERLAY:     ctx_u8_blend_overlay     (components, dst, src, blended, count); break;
+    case CTX_BLEND_DARKEN:      ctx_u8_blend_darken      (components, dst, src, blended, count); break;
+    case CTX_BLEND_LIGHTEN:     ctx_u8_blend_lighten     (components, dst, src, blended, count); break;
+    case CTX_BLEND_COLOR_DODGE: ctx_u8_blend_color_dodge (components, dst, src, blended, count); break;
+    case CTX_BLEND_COLOR_BURN:  ctx_u8_blend_color_burn  (components, dst, src, blended, count); break;
+    case CTX_BLEND_HARD_LIGHT:  ctx_u8_blend_hard_light  (components, dst, src, blended, count); break;
+    case CTX_BLEND_SOFT_LIGHT:  ctx_u8_blend_soft_light  (components, dst, src, blended, count); break;
+    case CTX_BLEND_DIFFERENCE:  ctx_u8_blend_difference  (components, dst, src, blended, count); break;
+    case CTX_BLEND_EXCLUSION:   ctx_u8_blend_exclusion   (components, dst, src, blended, count); break;
+    case CTX_BLEND_COLOR:       ctx_u8_blend_color       (components, dst, src, blended, count); break;
+    case CTX_BLEND_HUE:         ctx_u8_blend_hue         (components, dst, src, blended, count); break;
+    case CTX_BLEND_SATURATION:  ctx_u8_blend_saturation  (components, dst, src, blended, count); break;
+    case CTX_BLEND_LUMINOSITY:  ctx_u8_blend_luminosity  (components, dst, src, blended, count); break;
+    case CTX_BLEND_ADDITION:    ctx_u8_blend_addition    (components, dst, src, blended, count); break;
+    case CTX_BLEND_DIVIDE:      ctx_u8_blend_divide      (components, dst, src, blended, count); break;
+    case CTX_BLEND_SUBTRACT:    ctx_u8_blend_subtract    (components, dst, src, blended, count); break;
+  }
+#else
+  switch (blend)
+  {
+    default:                    ctx_u8_blend_normal      (components, dst, src, blended, count); break;
+  }
+
+#endif
+}
+
+CTX_INLINE static void
+__ctx_u8_porter_duff (CtxRasterizer         *rasterizer,
+                     int                    components,
+                     uint8_t *              dst,
+                     uint8_t *              src,
+                     int                    x0,
+                     uint8_t * __restrict__ coverage,
+                     int                    count,
+                     CtxCompositingMode     compositing_mode,
+                     CtxFragment            fragment,
+                     CtxBlend               blend)
+{
+  CtxPorterDuffFactor f_s, f_d;
+  ctx_porter_duff_factors (compositing_mode, &f_s, &f_d);
+  CtxGState *gstate = &rasterizer->state->gstate;
+  uint8_t global_alpha_u8 = gstate->global_alpha_u8;
+  uint8_t tsrc[components * count];
+  int src_step = 0;
+
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+  {
+    src = &tsrc[0];
+    memcpy (src, rasterizer->color, 4);
+    if (blend != CTX_BLEND_NORMAL)
+      ctx_u8_blend (components, blend, dst, src, src, 1);
+  }
+  else
+  {
+    float u0 = 0; float v0 = 0;
+    float ud = 0; float vd = 0;
+    float w0 = 1; float wd = 0;
+    src = &tsrc[0];
+
+    ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+    fragment (rasterizer, u0, v0, w0, src, count, ud, vd, wd);
+    if (blend != CTX_BLEND_NORMAL)
+      ctx_u8_blend (components, blend, dst, src, src, count);
+    src_step = components;
+  }
+
+  while (count--)
+  {
+    uint32_t cov = *coverage;
+
+    if (CTX_UNLIKELY(global_alpha_u8 != 255))
+      cov = (cov * global_alpha_u8 + 255) >> 8;
+
+    uint8_t csrc[components];
+    for (int c = 0; c < components; c++)
+      csrc[c] = (src[c] * cov + 255) >> 8;
+
+    for (int c = 0; c < components; c++)
+    {
+      uint32_t res = 0;
+#if 1
+      switch (f_s)
+      {
+        case CTX_PORTER_DUFF_0:             break;
+        case CTX_PORTER_DUFF_1:             res += (csrc[c] ); break;
+        case CTX_PORTER_DUFF_ALPHA:         res += (csrc[c] * dst[components-1] + 255) >> 8; break;
+        case CTX_PORTER_DUFF_1_MINUS_ALPHA: res += (csrc[c] * (256-dst[components-1])) >> 8; break;
+      }
+      switch (f_d)
+      {
+        case CTX_PORTER_DUFF_0: break;
+        case CTX_PORTER_DUFF_1:             res += dst[c]; break;
+        case CTX_PORTER_DUFF_ALPHA:         res += (dst[c] * csrc[components-1] + 255) >> 8; break;
+        case CTX_PORTER_DUFF_1_MINUS_ALPHA: res += (dst[c] * (256-csrc[components-1])) >> 8; break;
+      }
+#else
+      switch (f_s)
+      {
+        case CTX_PORTER_DUFF_0:             break;
+        case CTX_PORTER_DUFF_1:             res += (csrc[c] ); break;
+        case CTX_PORTER_DUFF_ALPHA:         res += (csrc[c] * dst[components-1])/255; break;
+        case CTX_PORTER_DUFF_1_MINUS_ALPHA: res += (csrc[c] * (255-dst[components-1]))/255; break;
+      }
+      switch (f_d)
+      {
+        case CTX_PORTER_DUFF_0: break;
+        case CTX_PORTER_DUFF_1:             res += dst[c]; break;
+        case CTX_PORTER_DUFF_ALPHA:         res += (dst[c] * csrc[components-1])/255; break;
+        case CTX_PORTER_DUFF_1_MINUS_ALPHA: res += (dst[c] * (255-csrc[components-1]))/255; break;
+      }
+#endif
+      dst[c] = res;
+    }
+    coverage ++;
+    src+=src_step;
+    dst+=components;
+  }
+}
+
+CTX_INLINE static void
+_ctx_u8_porter_duff (CtxRasterizer         *rasterizer,
+                     int                    components,
+                     uint8_t *              dst,
+                     uint8_t * __restrict__ src,
+                     int                    x0,
+                     uint8_t *              coverage,
+                     int                    count,
+                     CtxCompositingMode     compositing_mode,
+                     CtxFragment            fragment,
+                     CtxBlend               blend)
+{
+  __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count, compositing_mode, fragment, blend);
+}
+
+#define _ctx_u8_porter_duffs(comp_format, components, source, fragment, blend) \
+   switch (rasterizer->state->gstate.compositing_mode) \
+   { \
+     case CTX_COMPOSITE_SOURCE_ATOP: \
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count, \
+        CTX_COMPOSITE_SOURCE_ATOP, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_ATOP:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_ATOP, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_IN:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_IN, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OVER:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_OVER, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OVER:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_OVER, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_XOR:\
+      __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_XOR, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OUT:\
+       __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_OUT, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OUT:\
+       __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_OUT, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_IN:\
+       __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_IN, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_COPY:\
+       __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_COPY, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_CLEAR:\
+       __ctx_u8_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_CLEAR, fragment, blend);\
+       break;\
+   }
+
+/* generating one function per compositing_mode would be slightly more efficient,
+ * but on embedded targets leads to slightly more code bloat,
+ * here we trade off a slight amount of performance
+ */
+#define ctx_u8_porter_duff(comp_format, components, source, fragment, blend) \
+static void \
+ctx_##comp_format##_porter_duff_##source (CTX_COMPOSITE_ARGUMENTS) \
+{ \
+  _ctx_u8_porter_duffs(comp_format, components, source, fragment, blend);\
+}
+
+ctx_u8_porter_duff(RGBA8, 4,generic, rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+//ctx_u8_porter_duff(comp_name, components,color_##blend_name,  NULL, blend_mode)
+
+
+#if CTX_INLINED_NORMAL_RGBA8
+
+ctx_u8_porter_duff(RGBA8, 4,color,   rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+
+#if CTX_GRADIENTS
+ctx_u8_porter_duff(RGBA8, 4,linear_gradient, ctx_fragment_linear_gradient_RGBA8, rasterizer->state->gstate.blend_mode)
+ctx_u8_porter_duff(RGBA8, 4,radial_gradient, ctx_fragment_radial_gradient_RGBA8, rasterizer->state->gstate.blend_mode)
+#endif
+ctx_u8_porter_duff(RGBA8, 4,image,           ctx_fragment_image_RGBA8,           rasterizer->state->gstate.blend_mode)
+#endif
+
+
+static inline void
+ctx_RGBA8_nop (CTX_COMPOSITE_ARGUMENTS)
+{
+}
+
+
+static inline void
+ctx_setup_native_color (CtxRasterizer *rasterizer)
+{
+  if (rasterizer->state->gstate.source_fill.type == CTX_SOURCE_COLOR)
+  {
+    rasterizer->format->from_comp (rasterizer, 0,
+      &rasterizer->color[0],
+      &rasterizer->color_native,
+      1);
+  }
+}
+
+static void
+ctx_setup_apply_coverage (CtxRasterizer *rasterizer)
+{
+  rasterizer->apply_coverage = rasterizer->format->apply_coverage ?
+                               rasterizer->format->apply_coverage :
+                               rasterizer->comp_op;
+}
+
+static void
+ctx_setup_RGBA8 (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  int components       = 4;
+  rasterizer->fragment = ctx_rasterizer_get_fragment_RGBA8 (rasterizer);
+  rasterizer->comp_op  = ctx_RGBA8_porter_duff_generic;
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+
+  int blend_mode       = gstate->blend_mode;
+  int compositing_mode = gstate->compositing_mode;
+
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+      ctx_fragment_color_RGBA8 (rasterizer, 0,0, 1,rasterizer->color, 1, 0,0,0);
+      if (gstate->global_alpha_u8 != 255)
+      {
+        for (int c = 0; c < 4; c ++)
+          rasterizer->color[c] = (rasterizer->color[c] * gstate->global_alpha_u8 + 255)>>8;
+      }
+      uint32_t src_pix    = ((uint32_t*)rasterizer->color)[0];
+      uint32_t si_ga      = (src_pix & 0xff00ff00) >> 8;
+      uint32_t si_rb      = src_pix & 0x00ff00ff;
+      uint32_t si_ga_full = si_ga * 255;
+      uint32_t si_rb_full = si_rb * 255;
+//      uint32_t si_a       = si_ga >> 16;
+
+      ((uint32_t*)rasterizer->color)[1] = si_ga;
+      ((uint32_t*)rasterizer->color)[2] = si_rb;
+      ((uint32_t*)rasterizer->color)[3] = si_ga_full;
+      ((uint32_t*)rasterizer->color)[4] = si_rb_full;
+    }
+
+#if CTX_INLINED_NORMAL_RGBA8
+  if (gstate->compositing_mode == CTX_COMPOSITE_CLEAR)
+    rasterizer->comp_op = ctx_RGBA8_clear_normal;
+  else
+    switch (gstate->blend_mode)
+    {
+      case CTX_BLEND_NORMAL:
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_RGBA8_copy_normal;
+          if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+            rasterizer->comp = CTX_COV_PATH_RGBA8_COPY;
+
+        }
+        else if (gstate->global_alpha_u8 == 0)
+        {
+          rasterizer->comp_op = ctx_RGBA8_nop;
+        }
+        else
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+            {
+              rasterizer->comp_op = ctx_RGBA8_source_over_normal_color;
+              if ( ((float*)rasterizer->color)[3] >= 0.999f)
+                rasterizer->comp = CTX_COV_PATH_RGBA8_COPY;
+            }
+            else
+            {
+              rasterizer->comp_op = ctx_RGBAF_porter_duff_color_normal;
+            }
+            break;
+#if CTX_GRADIENTS
+          case CTX_SOURCE_LINEAR_GRADIENT:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_linear_gradient_normal;
+            break;
+          case CTX_SOURCE_RADIAL_GRADIENT:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_radial_gradient_normal;
+            break;
+#endif
+          case CTX_SOURCE_TEXTURE:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_image_normal;
+            break;
+          default:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_generic_normal;
+            break;
+        }
+        break;
+      default:
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_color;
+            break;
+#if CTX_GRADIENTS
+          case CTX_SOURCE_LINEAR_GRADIENT:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_linear_gradient;
+            break;
+          case CTX_SOURCE_RADIAL_GRADIENT:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_radial_gradient;
+            break;
+#endif
+          case CTX_SOURCE_TEXTURE:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_image;
+            break;
+          default:
+            rasterizer->comp_op = ctx_RGBA8_porter_duff_generic;
+            break;
+        }
+        break;
+    }
+
+#else
+
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+
+      if (blend_mode == CTX_BLEND_NORMAL)
+      {
+        if(compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_RGBA8_source_copy_normal_color;
+          rasterizer->comp = CTX_COV_PATH_RGBA8_COPY;
+        }
+        else if (compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+        {
+          if (rasterizer->color[components-1] == 255)
+          {
+            rasterizer->comp_op = ctx_RGBA8_source_copy_normal_color;
+            rasterizer->comp = CTX_COV_PATH_RGBA8_COPY;
+          }
+          else
+          {
+            rasterizer->comp_op = ctx_RGBA8_source_over_normal_color;
+            rasterizer->comp = CTX_COV_PATH_RGBA8_OVER;
+          }
+        }
+      }
+      else if (compositing_mode == CTX_COMPOSITE_CLEAR)
+      {
+        rasterizer->comp_op = ctx_RGBA8_clear_normal;
+      }
+  }
+  else if (blend_mode == CTX_BLEND_NORMAL)
+  {
+    if(compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+    {
+       rasterizer->comp_op = ctx_RGBA8_source_over_normal_fragment;
+       rasterizer->comp = CTX_COV_PATH_RGBA8_OVER_FRAGMENT;
+    }
+    else if (compositing_mode == CTX_COMPOSITE_COPY)
+    {
+       rasterizer->comp_op = ctx_RGBA8_source_copy_normal_fragment;
+       rasterizer->comp = CTX_COV_PATH_RGBA8_COPY_FRAGMENT;
+    }
+  }
+#endif
+  ctx_setup_apply_coverage (rasterizer);
+}
+
+
+static inline void
+ctx_setup_RGB (CtxRasterizer *rasterizer)
+{
+  ctx_setup_RGBA8 (rasterizer);
+  ctx_setup_native_color (rasterizer);
+
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+
+
+#if CTX_ENABLE_CBRLE
+static void
+ctx_setup_CBRLE (CtxRasterizer *rasterizer)
+{
+  ctx_setup_RGBA8 (rasterizer);
+  //ctx_setup_native_color (rasterizer);
+
+#if 0
+  if (rasterizer->comp == CTX_COV_PATH_RGBA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_CBRLE_COPY;
+  else
+#endif
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+#if CTX_ENABLE_RGB332
+static void
+ctx_setup_RGB332 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_RGBA8 (rasterizer);
+  ctx_setup_native_color (rasterizer);
+
+  if (rasterizer->comp == CTX_COV_PATH_RGBA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_RGB332_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+#if CTX_ENABLE_RGB565
+static void
+ctx_setup_RGB565 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_RGBA8 (rasterizer);
+  ctx_setup_native_color (rasterizer);
+
+  if (rasterizer->comp == CTX_COV_PATH_RGBA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_RGB565_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+#if CTX_ENABLE_RGB8
+static void
+ctx_setup_RGB8 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_RGBA8 (rasterizer);
+  ctx_setup_native_color (rasterizer);
+
+  if (rasterizer->comp == CTX_COV_PATH_RGBA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_RGB8_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+static void
+ctx_composite_convert (CTX_COMPOSITE_ARGUMENTS)
+{
+  uint8_t pixels[count * rasterizer->format->ebpp];
+  rasterizer->format->to_comp (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  rasterizer->format->from_comp (rasterizer, x0, &pixels[0], dst, count);
+}
+
+#if CTX_ENABLE_FLOAT
+static inline void
+ctx_float_copy_normal (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  float *dstf = (float*)dst;
+  float *srcf = (float*)src;
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+
+  while (count--)
+  {
+    uint8_t cov = *coverage;
+    float covf = ctx_u8_to_float (cov);
+    for (int c = 0; c < components; c++)
+      dstf[c] = dstf[c]*(1.0f-covf) + srcf[c]*covf;
+    dstf += components;
+    coverage ++;
+  }
+}
+
+static inline void
+ctx_float_clear_normal (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  float *dstf = (float*)dst;
+  while (count--)
+  {
+#if 0
+    uint8_t cov = *coverage;
+    if (cov == 0)
+    {
+    }
+    else if (cov == 255)
+    {
+#endif
+      switch (components)
+      {
+        case 2:
+          ((uint64_t*)(dst))[0] = 0;
+          break;
+        case 4:
+          ((uint64_t*)(dst))[0] = 0;
+          ((uint64_t*)(dst))[1] = 0;
+          break;
+        default:
+          for (int c = 0; c < components; c++)
+            dstf[c] = 0.0f;
+      }
+#if 0
+    }
+    else
+    {
+      float ralpha = 1.0f - ctx_u8_to_float (cov);
+      for (int c = 0; c < components; c++)
+        { dstf[c] = (dstf[c] * ralpha); }
+    }
+    coverage ++;
+#endif
+    dstf += components;
+  }
+}
+
+
+static inline void
+ctx_float_source_over_normal_color (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  float *dstf = (float*)dst;
+  float *srcf = (float*)src;
+  while (count--)
+  {
+    uint8_t cov = *coverage;
+    float fcov = ctx_u8_to_float (cov);
+    float ralpha = 1.0f - fcov * srcf[components-1];
+    for (int c = 0; c < components; c++)
+      dstf[c] = srcf[c]*fcov + dstf[c] * ralpha;
+    coverage ++;
+    dstf+= components;
+  }
+}
+
+static inline void
+ctx_float_source_copy_normal_color (int components, CTX_COMPOSITE_ARGUMENTS)
+{
+  float *dstf = (float*)dst;
+  float *srcf = (float*)src;
+
+  while (count--)
+  {
+    uint8_t cov = *coverage;
+    float fcov = ctx_u8_to_float (cov);
+    float ralpha = 1.0f - fcov;
+    for (int c = 0; c < components; c++)
+      dstf[c] = (srcf[c]*fcov + dstf[c] * ralpha);
+    coverage ++;
+    dstf+= components;
+  }
+}
+
+inline static void
+ctx_float_blend_normal (int components, float *dst, float *src, float *blended)
+{
+  float a = src[components-1];
+  for (int c = 0; c <  components - 1; c++)
+    blended[c] = src[c] * a;
+  blended[components-1]=a;
+}
+
+static float ctx_float_get_max (int components, float *c)
+{
+  float max = -1000.0f;
+  for (int i = 0; i < components - 1; i ++)
+  {
+    if (c[i] > max) max = c[i];
+  }
+  return max;
+}
+
+static float ctx_float_get_min (int components, float *c)
+{
+  float min = 400.0;
+  for (int i = 0; i < components - 1; i ++)
+  {
+    if (c[i] < min) min = c[i];
+  }
+  return min;
+}
+
+static float ctx_float_get_lum (int components, float *c)
+{
+  switch (components)
+  {
+    case 3:
+    case 4:
+            return CTX_CSS_RGB_TO_LUMINANCE(c);
+    case 1:
+    case 2:
+            return c[0];
+            break;
+    default:
+       {
+         float sum = 0;
+         for (int i = 0; i < components - 1; i ++)
+         {
+           sum += c[i];
+         }
+         return sum / (components - 1);
+       }
+  }
+}
+
+static float ctx_float_get_sat (int components, float *c)
+{
+  switch (components)
+  {
+    case 3:
+    case 4:
+            { float r = c[0];
+              float g = c[1];
+              float b = c[2];
+              return ctx_maxf(r, ctx_maxf(g,b)) - ctx_minf(r,ctx_minf(g,b));
+            }
+            break;
+    case 1:
+    case 2: return 0.0;
+            break;
+    default:
+       {
+         float min = 1000;
+         float max = -1000;
+         for (int i = 0; i < components - 1; i ++)
+         {
+           if (c[i] < min) min = c[i];
+           if (c[i] > max) max = c[i];
+         }
+         return max-min;
+       }
+  }
+}
+
+static void ctx_float_set_lum (int components, float *c, float lum)
+{
+  float d = lum - ctx_float_get_lum (components, c);
+  float tc[components];
+  for (int i = 0; i < components - 1; i++)
+  {
+    tc[i] = c[i] + d;
+  }
+
+  float l = ctx_float_get_lum (components, tc);
+  float n = ctx_float_get_min (components, tc);
+  float x = ctx_float_get_max (components, tc);
+
+  if (n < 0.0f && l != n)
+  {
+    for (int i = 0; i < components - 1; i++)
+      tc[i] = l + (((tc[i] - l) * l) / (l-n));
+  }
+
+  if (x > 1.0f && x != l)
+  {
+    for (int i = 0; i < components - 1; i++)
+      tc[i] = l + (((tc[i] - l) * (1.0f - l)) / (x-l));
+  }
+  for (int i = 0; i < components - 1; i++)
+    c[i] = tc[i];
+}
+
+static void ctx_float_set_sat (int components, float *c, float sat)
+{
+  int max = 0, mid = 1, min = 2;
+  
+  if (c[min] > c[mid]){int t = min; min = mid; mid = t;}
+  if (c[mid] > c[max]){int t = mid; mid = max; max = t;}
+  if (c[min] > c[mid]){int t = min; min = mid; mid = t;}
+
+  if (c[max] > c[min])
+  {
+    c[mid] = ((c[mid]-c[min]) * sat) / (c[max] - c[min]);
+    c[max] = sat;
+  }
+  else
+  {
+    c[mid] = c[max] = 0.0f;
+  }
+  c[min] = 0.0f;
+
+}
+
+#define ctx_float_blend_define(name, CODE) \
+static inline void \
+ctx_float_blend_##name (int components, float * __restrict__ dst, float *src, float *blended)\
+{\
+  float *s = src; float b[components];\
+  ctx_float_deassociate_alpha (components, dst, b);\
+    CODE;\
+  blended[components-1] = s[components-1];\
+  ctx_float_associate_alpha (components, blended);\
+}
+
+#define ctx_float_blend_define_seperable(name, CODE) \
+        ctx_float_blend_define(name, for (int c = 0; c < components-1; c++) { CODE ;}) \
+
+ctx_float_blend_define_seperable(multiply,    blended[c] = (b[c] * s[c]);)
+ctx_float_blend_define_seperable(screen,      blended[c] = b[c] + s[c] - (b[c] * s[c]);)
+ctx_float_blend_define_seperable(overlay,     blended[c] = b[c] < 0.5f ? (s[c] * b[c]) :
+                                                          s[c] + b[c] - (s[c] * b[c]);)
+ctx_float_blend_define_seperable(darken,      blended[c] = ctx_minf (b[c], s[c]))
+ctx_float_blend_define_seperable(lighten,     blended[c] = ctx_maxf (b[c], s[c]))
+ctx_float_blend_define_seperable(color_dodge, blended[c] = (b[c] == 0.0f) ? 0.0f :
+                                     s[c] == 1.0f ? 1.0f : ctx_minf(1.0f, (b[c]) / (1.0f-s[c])))
+ctx_float_blend_define_seperable(color_burn,  blended[c] = (b[c] == 1.0f) ? 1.0f :
+                                     s[c] == 0.0f ? 0.0f : 1.0f - ctx_minf(1.0f, ((1.0f - b[c])) / s[c]))
+ctx_float_blend_define_seperable(hard_light,  blended[c] = s[c] < 0.f ? (b[c] * s[c]) :
+                                                          b[c] + s[c] - (b[c] * s[c]);)
+ctx_float_blend_define_seperable(difference,  blended[c] = (b[c] - s[c]))
+
+ctx_float_blend_define_seperable(divide,      blended[c] = s[c]?(b[c]) / s[c]:0.0f)
+ctx_float_blend_define_seperable(addition,    blended[c] = s[c]+b[c])
+ctx_float_blend_define_seperable(subtract,    blended[c] = s[c]-b[c])
+
+ctx_float_blend_define_seperable(exclusion,   blended[c] = b[c] + s[c] - 2.0f * b[c] * s[c])
+ctx_float_blend_define_seperable(soft_light,
+  if (s[c] <= 0.5f)
+  {
+    blended[c] = b[c] - (1.0f - 2.0f * s[c]) * b[c] * (1.0f - b[c]);
+  }
+  else
+  {
+    int d;
+    if (b[c] <= 255/4)
+      d = (((16 * b[c] - 12.0f) * b[c] + 4.0f) * b[c]);
+    else
+      d = ctx_sqrtf(b[c]);
+    blended[c] = (b[c] + (2.0f * s[c] - 1.0f) * (d - b[c]));
+  }
+)
+
+
+ctx_float_blend_define(color,
+  for (int i = 0; i < components; i++)
+    blended[i] = s[i];
+  ctx_float_set_lum(components, blended, ctx_float_get_lum (components, s));
+)
+
+ctx_float_blend_define(hue,
+  float in_sat = ctx_float_get_sat(components, b);
+  float in_lum = ctx_float_get_lum(components, b);
+  for (int i = 0; i < components; i++)
+    blended[i] = s[i];
+  ctx_float_set_sat(components, blended, in_sat);
+  ctx_float_set_lum(components, blended, in_lum);
+)
+
+ctx_float_blend_define(saturation,
+  float in_sat = ctx_float_get_sat(components, s);
+  float in_lum = ctx_float_get_lum(components, b);
+  for (int i = 0; i < components; i++)
+    blended[i] = b[i];
+  ctx_float_set_sat(components, blended, in_sat);
+  ctx_float_set_lum(components, blended, in_lum);
+)
+
+ctx_float_blend_define(luminosity,
+  float in_lum = ctx_float_get_lum(components, s);
+  for (int i = 0; i < components; i++)
+    blended[i] = b[i];
+  ctx_float_set_lum(components, blended, in_lum);
+)
+
+inline static void
+ctx_float_blend (int components, CtxBlend blend, float * __restrict__ dst, float *src, float *blended)
+{
+  switch (blend)
+  {
+    case CTX_BLEND_NORMAL:      ctx_float_blend_normal      (components, dst, src, blended); break;
+    case CTX_BLEND_MULTIPLY:    ctx_float_blend_multiply    (components, dst, src, blended); break;
+    case CTX_BLEND_SCREEN:      ctx_float_blend_screen      (components, dst, src, blended); break;
+    case CTX_BLEND_OVERLAY:     ctx_float_blend_overlay     (components, dst, src, blended); break;
+    case CTX_BLEND_DARKEN:      ctx_float_blend_darken      (components, dst, src, blended); break;
+    case CTX_BLEND_LIGHTEN:     ctx_float_blend_lighten     (components, dst, src, blended); break;
+    case CTX_BLEND_COLOR_DODGE: ctx_float_blend_color_dodge (components, dst, src, blended); break;
+    case CTX_BLEND_COLOR_BURN:  ctx_float_blend_color_burn  (components, dst, src, blended); break;
+    case CTX_BLEND_HARD_LIGHT:  ctx_float_blend_hard_light  (components, dst, src, blended); break;
+    case CTX_BLEND_SOFT_LIGHT:  ctx_float_blend_soft_light  (components, dst, src, blended); break;
+    case CTX_BLEND_DIFFERENCE:  ctx_float_blend_difference  (components, dst, src, blended); break;
+    case CTX_BLEND_EXCLUSION:   ctx_float_blend_exclusion   (components, dst, src, blended); break;
+    case CTX_BLEND_COLOR:       ctx_float_blend_color       (components, dst, src, blended); break;
+    case CTX_BLEND_HUE:         ctx_float_blend_hue         (components, dst, src, blended); break;
+    case CTX_BLEND_SATURATION:  ctx_float_blend_saturation  (components, dst, src, blended); break;
+    case CTX_BLEND_LUMINOSITY:  ctx_float_blend_luminosity  (components, dst, src, blended); break;
+    case CTX_BLEND_ADDITION:    ctx_float_blend_addition    (components, dst, src, blended); break;
+    case CTX_BLEND_SUBTRACT:    ctx_float_blend_subtract    (components, dst, src, blended); break;
+    case CTX_BLEND_DIVIDE:      ctx_float_blend_divide      (components, dst, src, blended); break;
+  }
+}
+
+/* this is the grunt working function, when inlined code-path elimination makes
+ * it produce efficient code.
+ */
+CTX_INLINE static void
+ctx_float_porter_duff (CtxRasterizer         *rasterizer,
+                       int                    components,
+                       uint8_t * __restrict__ dst,
+                       uint8_t * __restrict__ src,
+                       int                    x0,
+                       uint8_t * __restrict__ coverage,
+                       int                    count,
+                       CtxCompositingMode     compositing_mode,
+                       CtxFragment            fragment,
+                       CtxBlend               blend)
+{
+  float *dstf = (float*)dst;
+
+  CtxPorterDuffFactor f_s, f_d;
+  ctx_porter_duff_factors (compositing_mode, &f_s, &f_d);
+  uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  float   global_alpha_f = rasterizer->state->gstate.global_alpha_f;
+  
+  if (rasterizer->state->gstate.source_fill.type == CTX_SOURCE_COLOR)
+  {
+    float tsrc[components];
+
+    while (count--)
+    {
+      uint8_t cov = *coverage;
+#if 1
+      if (
+        CTX_UNLIKELY((compositing_mode == CTX_COMPOSITE_DESTINATION_OVER && dst[components-1] == 1.0f)||
+        (cov == 0 && (compositing_mode == CTX_COMPOSITE_SOURCE_OVER ||
+        compositing_mode == CTX_COMPOSITE_XOR               ||
+        compositing_mode == CTX_COMPOSITE_DESTINATION_OUT   ||
+        compositing_mode == CTX_COMPOSITE_SOURCE_ATOP      
+        ))))
+      {
+        coverage ++;
+        dstf+=components;
+        continue;
+      }
+#endif
+      memcpy (tsrc, rasterizer->color, sizeof(tsrc));
+
+      if (blend != CTX_BLEND_NORMAL)
+        ctx_float_blend (components, blend, dstf, tsrc, tsrc);
+      float covf = ctx_u8_to_float (cov);
+
+      if (global_alpha_u8 != 255)
+        covf = covf * global_alpha_f;
+
+      if (covf != 1.0f)
+      {
+        for (int c = 0; c < components; c++)
+          tsrc[c] *= covf;
+      }
+
+      for (int c = 0; c < components; c++)
+      {
+        float res;
+        /* these switches and this whole function is written to be
+         * inlined when compiled when the enum values passed in are
+         * constants.
+         */
+        switch (f_s)
+        {
+          case CTX_PORTER_DUFF_0: res = 0.0f; break;
+          case CTX_PORTER_DUFF_1:             res = (tsrc[c]); break;
+          case CTX_PORTER_DUFF_ALPHA:         res = (tsrc[c] *       dstf[components-1]); break;
+          case CTX_PORTER_DUFF_1_MINUS_ALPHA: res = (tsrc[c] * (1.0f-dstf[components-1])); break;
+        }
+        switch (f_d)
+        {
+          case CTX_PORTER_DUFF_0: dstf[c] = res; break;
+          case CTX_PORTER_DUFF_1:             dstf[c] = res + (dstf[c]); break;
+          case CTX_PORTER_DUFF_ALPHA:         dstf[c] = res + (dstf[c] *       tsrc[components-1]); break;
+          case CTX_PORTER_DUFF_1_MINUS_ALPHA: dstf[c] = res + (dstf[c] * (1.0f-tsrc[components-1])); break;
+        }
+      }
+      coverage ++;
+      dstf     +=components;
+    }
+  }
+  else
+  {
+    float tsrc[components];
+    float u0 = 0; float v0 = 0;
+    float ud = 0; float vd = 0;
+    float w0 = 1; float wd = 0;
+    for (int c = 0; c < components; c++) tsrc[c] = 0.0f;
+    ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA, &u0, &v0, &w0, &ud, &vd, &wd);
+
+    while (count--)
+    {
+      uint8_t cov = *coverage;
+#if 1
+      if (
+        CTX_UNLIKELY((compositing_mode == CTX_COMPOSITE_DESTINATION_OVER && dst[components-1] == 1.0f)||
+        (cov == 0 && (compositing_mode == CTX_COMPOSITE_SOURCE_OVER ||
+        compositing_mode == CTX_COMPOSITE_XOR               ||
+        compositing_mode == CTX_COMPOSITE_DESTINATION_OUT   ||
+        compositing_mode == CTX_COMPOSITE_SOURCE_ATOP      
+        ))))
+      {
+        u0 += ud;
+        v0 += vd;
+        coverage ++;
+        dstf+=components;
+        continue;
+      }
+#endif
+
+      fragment (rasterizer, u0, v0, w0, tsrc, 1, ud, vd, wd);
+      if (blend != CTX_BLEND_NORMAL)
+        ctx_float_blend (components, blend, dstf, tsrc, tsrc);
+      u0 += ud;
+      v0 += vd;
+      float covf = ctx_u8_to_float (cov);
+
+      if (global_alpha_u8 != 255)
+        covf = covf * global_alpha_f;
+
+      if (covf != 1.0f)
+      {
+        for (int c = 0; c < components; c++)
+          tsrc[c] *= covf;
+      }
+
+      for (int c = 0; c < components; c++)
+      {
+        float res;
+        /* these switches and this whole function is written to be
+         * inlined when compiled when the enum values passed in are
+         * constants.
+         */
+        switch (f_s)
+        {
+          case CTX_PORTER_DUFF_0: res = 0.0f; break;
+          case CTX_PORTER_DUFF_1:             res = (tsrc[c]); break;
+          case CTX_PORTER_DUFF_ALPHA:         res = (tsrc[c] *       dstf[components-1]); break;
+          case CTX_PORTER_DUFF_1_MINUS_ALPHA: res = (tsrc[c] * (1.0f-dstf[components-1])); break;
+        }
+        switch (f_d)
+        {
+          case CTX_PORTER_DUFF_0: dstf[c] = res; break;
+          case CTX_PORTER_DUFF_1:             dstf[c] = res + (dstf[c]); break;
+          case CTX_PORTER_DUFF_ALPHA:         dstf[c] = res + (dstf[c] *       tsrc[components-1]); break;
+          case CTX_PORTER_DUFF_1_MINUS_ALPHA: dstf[c] = res + (dstf[c] * (1.0f-tsrc[components-1])); break;
+        }
+      }
+      coverage ++;
+      dstf     +=components;
+    }
+  }
+}
+
+/* generating one function per compositing_mode would be slightly more efficient,
+ * but on embedded targets leads to slightly more code bloat,
+ * here we trade off a slight amount of performance
+ */
+#define ctx_float_porter_duff(compformat, components, source, fragment, blend) \
+static void \
+ctx_##compformat##_porter_duff_##source (CTX_COMPOSITE_ARGUMENTS) \
+{ \
+   switch (rasterizer->state->gstate.compositing_mode) \
+   { \
+     case CTX_COMPOSITE_SOURCE_ATOP: \
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count, \
+        CTX_COMPOSITE_SOURCE_ATOP, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_ATOP:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_ATOP, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION_IN:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_IN, fragment, blend);\
+      break;\
+     case CTX_COMPOSITE_DESTINATION:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OVER:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_OVER, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OVER:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_OVER, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_XOR:\
+      ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_XOR, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_DESTINATION_OUT:\
+       ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_DESTINATION_OUT, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_OUT:\
+       ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_OUT, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_SOURCE_IN:\
+       ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_SOURCE_IN, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_COPY:\
+       ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_COPY, fragment, blend);\
+       break;\
+     case CTX_COMPOSITE_CLEAR:\
+       ctx_float_porter_duff (rasterizer, components, dst, src, x0, coverage, count,\
+        CTX_COMPOSITE_CLEAR, fragment, blend);\
+       break;\
+   }\
+}
+#endif
+
+#if CTX_ENABLE_RGBAF
+
+ctx_float_porter_duff(RGBAF, 4,color,   rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+ctx_float_porter_duff(RGBAF, 4,generic, rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+
+#if CTX_INLINED_NORMAL
+#if CTX_GRADIENTS
+ctx_float_porter_duff(RGBAF, 4,linear_gradient, ctx_fragment_linear_gradient_RGBAF, rasterizer->state->gstate.blend_mode)
+ctx_float_porter_duff(RGBAF, 4,radial_gradient, ctx_fragment_radial_gradient_RGBAF, rasterizer->state->gstate.blend_mode)
+#endif
+ctx_float_porter_duff(RGBAF, 4,image,           ctx_fragment_image_RGBAF,           rasterizer->state->gstate.blend_mode)
+
+
+#if CTX_GRADIENTS
+#define ctx_float_porter_duff_blend(comp_name, components, blend_mode, blend_name)\
+ctx_float_porter_duff(comp_name, components,color_##blend_name,            rasterizer->fragment,                               blend_mode)\
+ctx_float_porter_duff(comp_name, components,generic_##blend_name,          rasterizer->fragment,               blend_mode)\
+ctx_float_porter_duff(comp_name, components,linear_gradient_##blend_name,  ctx_fragment_linear_gradient_RGBA8, blend_mode)\
+ctx_float_porter_duff(comp_name, components,radial_gradient_##blend_name,  ctx_fragment_radial_gradient_RGBA8, blend_mode)\
+ctx_float_porter_duff(comp_name, components,image_##blend_name,            ctx_fragment_image_RGBAF,           blend_mode)
+#else
+#define ctx_float_porter_duff_blend(comp_name, components, blend_mode, blend_name)\
+ctx_float_porter_duff(comp_name, components,color_##blend_name,            rasterizer->fragment,                               blend_mode)\
+ctx_float_porter_duff(comp_name, components,generic_##blend_name,          rasterizer->fragment,               blend_mode)\
+ctx_float_porter_duff(comp_name, components,image_##blend_name,            ctx_fragment_image_RGBAF,           blend_mode)
+#endif
+
+ctx_float_porter_duff_blend(RGBAF, 4, CTX_BLEND_NORMAL, normal)
+
+
+static void
+ctx_RGBAF_copy_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_copy_normal (4, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_RGBAF_clear_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_clear_normal (4, rasterizer, dst, src, x0, coverage, count);
+}
+
+#if 1
+static void
+ctx_RGBAF_source_over_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_source_over_normal_color (4, rasterizer, dst, rasterizer->color, x0, coverage, count);
+}
+#endif
+#endif
+
+static void
+ctx_setup_RGBAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  int components = 4;
+  rasterizer->fragment = ctx_rasterizer_get_fragment_RGBAF (rasterizer);
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+#if 1
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+      rasterizer->comp_op = ctx_RGBAF_porter_duff_color;
+      ctx_fragment_color_RGBAF (rasterizer, 0,0,1, rasterizer->color, 1, 0,0,0);
+      if (gstate->global_alpha_u8 != 255)
+        for (int c = 0; c < components; c ++)
+          ((float*)rasterizer->color)[c] *= gstate->global_alpha_f;
+
+      if (rasterizer->format->from_comp)
+        rasterizer->format->from_comp (rasterizer, 0,
+          &rasterizer->color[0],
+          &rasterizer->color_native,
+          1);
+    }
+  else
+#endif
+  {
+    rasterizer->comp_op = ctx_RGBAF_porter_duff_generic;
+  }
+
+#if CTX_INLINED_NORMAL
+  if (gstate->compositing_mode == CTX_COMPOSITE_CLEAR)
+    rasterizer->comp_op = ctx_RGBAF_clear_normal;
+  else
+    switch (gstate->blend_mode)
+    {
+      case CTX_BLEND_NORMAL:
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_RGBAF_copy_normal;
+          if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+            rasterizer->comp = CTX_COV_PATH_RGBAF_COPY;
+
+        }
+        else if (gstate->global_alpha_u8 == 0)
+        {
+          rasterizer->comp_op = ctx_RGBA8_nop;
+        }
+        else
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+            {
+              rasterizer->comp_op = ctx_RGBAF_source_over_normal_color;
+              if ( ((float*)rasterizer->color)[3] >= 0.999f)
+                rasterizer->comp = CTX_COV_PATH_RGBAF_COPY;
+            }
+            else
+            {
+              rasterizer->comp_op = ctx_RGBAF_porter_duff_color_normal;
+            }
+            break;
+#if CTX_GRADIENTS
+          case CTX_SOURCE_LINEAR_GRADIENT:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_linear_gradient_normal;
+            break;
+          case CTX_SOURCE_RADIAL_GRADIENT:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_radial_gradient_normal;
+            break;
+#endif
+          case CTX_SOURCE_TEXTURE:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_image_normal;
+            break;
+          default:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_generic_normal;
+            break;
+        }
+        break;
+      default:
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_color;
+            break;
+#if CTX_GRADIENTS
+          case CTX_SOURCE_LINEAR_GRADIENT:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_linear_gradient;
+            break;
+          case CTX_SOURCE_RADIAL_GRADIENT:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_radial_gradient;
+            break;
+#endif
+          case CTX_SOURCE_TEXTURE:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_image;
+            break;
+          default:
+            rasterizer->comp_op = ctx_RGBAF_porter_duff_generic;
+            break;
+        }
+        break;
+    }
+#endif
+  ctx_setup_apply_coverage (rasterizer);
+}
+
+#endif
+#if CTX_ENABLE_GRAYAF
+
+#if CTX_GRADIENTS
+static void
+ctx_fragment_linear_gradient_GRAYAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float rgba[4];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0 ; i < count; i++)
+  {
+  float v = ( ( (g->linear_gradient.dx * x + g->linear_gradient.dy * y) /
+                g->linear_gradient.length) -
+              g->linear_gradient.start) * (g->linear_gradient.rdelta);
+  ctx_fragment_gradient_1d_RGBAF (rasterizer, v, 1.0f, rgba);
+  ((float*)out)[0] = ctx_float_color_rgb_to_gray (rasterizer->state, rgba);
+  ((float*)out)[1] = rgba[3];
+     out = ((float*)(out)) + 2;
+     x += dx;
+     y += dy;
+  }
+}
+
+static void
+ctx_fragment_radial_gradient_GRAYAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float rgba[4];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0; i < count; i ++)
+  {
+  float v = 0.0f;
+  if ((g->radial_gradient.r1-g->radial_gradient.r0) > 0.0f)
+    {
+      v = ctx_hypotf (g->radial_gradient.x0 - x, g->radial_gradient.y0 - y);
+      v = (v - g->radial_gradient.r0) / (g->radial_gradient.rdelta);
+    }
+  ctx_fragment_gradient_1d_RGBAF (rasterizer, v, 0.0, rgba);
+  ((float*)out)[0] = ctx_float_color_rgb_to_gray (rasterizer->state, rgba);
+  ((float*)out)[1] = rgba[3];
+     out = ((float*)(out)) + 2;
+     x += dx;
+     y += dy;
+  }
+}
+#endif
+
+static void
+ctx_fragment_color_GRAYAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  for (int i = 0; i < count; i++)
+  {
+     ctx_color_get_graya (rasterizer->state, &g->color, (float*)out);
+     out = ((float*)(out)) + 2;
+     x += dx;
+     y += dy;
+  }
+}
+
+static void ctx_fragment_image_GRAYAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t rgba[4*count];
+  float rgbaf[4*count];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  switch (buffer->format->bpp)
+    {
+#if CTX_FRAGMENT_SPECIALIZE
+      case 1:  ctx_fragment_image_gray1_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+      case 24: ctx_fragment_image_rgb8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);  break;
+      case 32: ctx_fragment_image_rgba8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+#endif
+      default: ctx_fragment_image_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);       break;
+    }
+  for (int c = 0; c < 2 * count; c ++) { 
+    rgbaf[c] = ctx_u8_to_float (rgba[c]);
+    ((float*)out)[0] = ctx_float_color_rgb_to_gray (rasterizer->state, rgbaf);
+    ((float*)out)[1] = rgbaf[3];
+    out = ((float*)out) + 2;
+  }
+}
+
+static CtxFragment ctx_rasterizer_get_fragment_GRAYAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_TEXTURE:           return ctx_fragment_image_GRAYAF;
+      case CTX_SOURCE_COLOR:           return ctx_fragment_color_GRAYAF;
+#if CTX_GRADIENTS
+      case CTX_SOURCE_LINEAR_GRADIENT: return ctx_fragment_linear_gradient_GRAYAF;
+      case CTX_SOURCE_RADIAL_GRADIENT: return ctx_fragment_radial_gradient_GRAYAF;
+#endif
+    }
+  return ctx_fragment_color_GRAYAF;
+}
+
+ctx_float_porter_duff(GRAYAF, 2,color,   rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+ctx_float_porter_duff(GRAYAF, 2,generic, rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+
+#if CTX_INLINED_NORMAL
+ctx_float_porter_duff(GRAYAF, 2,color_normal,   rasterizer->fragment, CTX_BLEND_NORMAL)
+ctx_float_porter_duff(GRAYAF, 2,generic_normal, rasterizer->fragment, CTX_BLEND_NORMAL)
+
+static void
+ctx_GRAYAF_copy_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_copy_normal (2, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_GRAYAF_clear_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_clear_normal (2, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_GRAYAF_source_copy_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_source_copy_normal_color (2, rasterizer, dst, rasterizer->color, x0, coverage, count);
+}
+#endif
+
+static void
+ctx_setup_GRAYAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  int components = 2;
+  rasterizer->fragment = ctx_rasterizer_get_fragment_GRAYAF (rasterizer);
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+      rasterizer->comp_op = ctx_GRAYAF_porter_duff_color;
+      ctx_color_get_rgba (rasterizer->state, &gstate->source_fill.color, (float*)rasterizer->color);
+      if (gstate->global_alpha_u8 != 255)
+        for (int c = 0; c < components; c ++)
+          ((float*)rasterizer->color)[c] *= gstate->global_alpha_f;
+
+      if (rasterizer->format->from_comp)
+        rasterizer->format->from_comp (rasterizer, 0,
+          &rasterizer->color[0],
+          &rasterizer->color_native,
+          1);
+    }
+  else
+  {
+    rasterizer->comp_op = ctx_GRAYAF_porter_duff_generic;
+  }
+
+#if CTX_INLINED_NORMAL
+  if (gstate->compositing_mode == CTX_COMPOSITE_CLEAR)
+    rasterizer->comp_op = ctx_GRAYAF_clear_normal;
+  else
+    switch (gstate->blend_mode)
+    {
+      case CTX_BLEND_NORMAL:
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_GRAYAF_copy_normal;
+        }
+        else if (gstate->global_alpha_u8 == 0)
+          rasterizer->comp_op = ctx_RGBA8_nop;
+        else
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+            {
+              if (((float*)rasterizer->color)[components-1] == 0.0f)
+                rasterizer->comp_op = ctx_RGBA8_nop;
+#if 1
+              else //if (((float*)rasterizer->color)[components-1] == 0.0f)
+                rasterizer->comp_op = ctx_GRAYAF_source_copy_normal_color;
+#endif
+              //else
+          //      rasterizer->comp_op = ctx_GRAYAF_porter_duff_color_normal;
+            }
+            else
+            {
+              rasterizer->comp_op = ctx_GRAYAF_porter_duff_color_normal;
+            }
+            break;
+          default:
+            rasterizer->comp_op = ctx_GRAYAF_porter_duff_generic_normal;
+            break;
+        }
+        break;
+      default:
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            rasterizer->comp_op = ctx_GRAYAF_porter_duff_color;
+            break;
+          default:
+            rasterizer->comp_op = ctx_GRAYAF_porter_duff_generic;
+            break;
+        }
+        break;
+    }
+#endif
+  ctx_setup_apply_coverage (rasterizer);
+}
+
+#endif
+#if CTX_ENABLE_GRAYF
+
+static void
+ctx_composite_GRAYF (CTX_COMPOSITE_ARGUMENTS)
+{
+  float *dstf = (float*)dst;
+
+  float temp[count*2];
+  for (unsigned int i = 0; i < count; i++)
+  {
+    temp[i*2] = dstf[i];
+    temp[i*2+1] = 1.0f;
+  }
+  rasterizer->comp_op (rasterizer, (uint8_t*)temp, rasterizer->color, x0, coverage, count);
+  for (unsigned int i = 0; i < count; i++)
+  {
+    dstf[i] = temp[i*2];
+  }
+}
+
+#endif
+#if CTX_ENABLE_BGRA8
+
+inline static void
+ctx_swap_red_green (uint8_t *rgba)
+{
+  uint32_t *buf  = (uint32_t *) rgba;
+  uint32_t  orig = *buf;
+  uint32_t  green_alpha = (orig & 0xff00ff00);
+  uint32_t  red_blue    = (orig & 0x00ff00ff);
+  uint32_t  red         = red_blue << 16;
+  uint32_t  blue        = red_blue >> 16;
+  *buf = green_alpha | red | blue;
+}
+
+static void
+ctx_BGRA8_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  uint32_t *srci = (uint32_t *) buf;
+  uint32_t *dsti = (uint32_t *) rgba;
+  while (count--)
+    {
+      uint32_t val = *srci++;
+      ctx_swap_red_green ( (uint8_t *) &val);
+      *dsti++      = val;
+    }
+}
+
+static void
+ctx_RGBA8_to_BGRA8 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  ctx_BGRA8_to_RGBA8 (rasterizer, x, rgba, (uint8_t *) buf, count);
+}
+
+static void
+ctx_composite_BGRA8 (CTX_COMPOSITE_ARGUMENTS)
+{
+  // for better performance, this could be done without a pre/post conversion,
+  // by swapping R and B of source instead... as long as it is a color instead
+  // of gradient or image
+  //
+  //
+  uint8_t pixels[count * 4];
+  ctx_BGRA8_to_RGBA8 (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_BGRA8_to_RGBA8  (rasterizer, x0, &pixels[0], dst, count);
+}
+
+
+#endif
+static inline void
+ctx_composite_direct (CTX_COMPOSITE_ARGUMENTS)
+{
+  // for better performance, this could be done without a pre/post conversion,
+  // by swapping R and B of source instead... as long as it is a color instead
+  // of gradient or image
+  //
+  //
+  rasterizer->comp_op (rasterizer, dst, rasterizer->color, x0, coverage, count);
+}
+
+#if CTX_ENABLE_CMYKAF
+
+static void
+ctx_fragment_other_CMYKAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  float *cmyka = (float*)out;
+  float _rgba[4 * count];
+  float *rgba = &_rgba[0];
+  CtxGState *gstate = &rasterizer->state->gstate;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_TEXTURE:
+        ctx_fragment_image_RGBAF (rasterizer, x, y, z, rgba, count, dx, dy, dz);
+        break;
+      case CTX_SOURCE_COLOR:
+        ctx_fragment_color_RGBAF (rasterizer, x, y, z, rgba, count, dx, dy, dz);
+        break;
+#if CTX_GRADIENTS
+      case CTX_SOURCE_LINEAR_GRADIENT:
+        ctx_fragment_linear_gradient_RGBAF (rasterizer, x, y, z, rgba, count, dx, dy, dz);
+        break;
+      case CTX_SOURCE_RADIAL_GRADIENT:
+        ctx_fragment_radial_gradient_RGBAF (rasterizer, x, y, z, rgba, count, dx, dy, dz);
+        break;
+#endif
+      default:
+        rgba[0]=rgba[1]=rgba[2]=rgba[3]=0.0f;
+        break;
+    }
+  for (int i = 0; i < count; i++)
+  {
+    cmyka[4]=rgba[3];
+    ctx_rgb_to_cmyk (rgba[0], rgba[1], rgba[2], &cmyka[0], &cmyka[1], &cmyka[2], &cmyka[3]);
+    cmyka += 5;
+    rgba += 4;
+  }
+}
+
+static void
+ctx_fragment_color_CMYKAF (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  float *cmyka = (float*)out;
+  float cmyka_in[5];
+  ctx_color_get_cmyka (rasterizer->state, &gstate->source_fill.color, cmyka_in);
+  for (int i = 0; i < count; i++)
+  {
+    for (int c = 0; c < 4; c ++)
+    {
+      cmyka[c] = (1.0f - cmyka_in[c]);
+    }
+    cmyka[4] = cmyka_in[4];
+    cmyka += 5;
+  }
+}
+
+static CtxFragment ctx_rasterizer_get_fragment_CMYKAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_COLOR:
+        return ctx_fragment_color_CMYKAF;
+    }
+  return ctx_fragment_other_CMYKAF;
+}
+
+ctx_float_porter_duff (CMYKAF, 5,color,           rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+ctx_float_porter_duff (CMYKAF, 5,generic,         rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+
+#if CTX_INLINED_NORMAL
+ctx_float_porter_duff (CMYKAF, 5,color_normal,            rasterizer->fragment, CTX_BLEND_NORMAL)
+ctx_float_porter_duff (CMYKAF, 5,generic_normal,          rasterizer->fragment, CTX_BLEND_NORMAL)
+
+static void
+ctx_CMYKAF_copy_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_copy_normal (5, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_CMYKAF_clear_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_clear_normal (5, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_CMYKAF_source_copy_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_float_source_copy_normal_color (5, rasterizer, dst, rasterizer->color, x0, coverage, count);
+}
+#endif
+
+static void
+ctx_setup_CMYKAF (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  int components = 5;
+  rasterizer->fragment = ctx_rasterizer_get_fragment_CMYKAF (rasterizer);
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+      rasterizer->comp_op = ctx_CMYKAF_porter_duff_color;
+      rasterizer->comp_op = ctx_CMYKAF_porter_duff_generic;
+      ctx_color_get_cmyka (rasterizer->state, &gstate->source_fill.color, (float*)rasterizer->color);
+      if (gstate->global_alpha_u8 != 255)
+        ((float*)rasterizer->color)[components-1] *= gstate->global_alpha_f;
+
+      if (rasterizer->format->from_comp)
+        rasterizer->format->from_comp (rasterizer, 0,
+          &rasterizer->color[0],
+          &rasterizer->color_native,
+          1);
+    }
+  else
+  {
+    rasterizer->comp_op = ctx_CMYKAF_porter_duff_generic;
+  }
+
+#if CTX_INLINED_NORMAL
+  if (gstate->compositing_mode == CTX_COMPOSITE_CLEAR)
+    rasterizer->comp_op = ctx_CMYKAF_clear_normal;
+  else
+    switch (gstate->blend_mode)
+    {
+      case CTX_BLEND_NORMAL:
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_CMYKAF_copy_normal;
+        }
+        else if (gstate->global_alpha_u8 == 0)
+          rasterizer->comp_op = ctx_RGBA8_nop;
+        else
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+            {
+              if (((float*)rasterizer->color)[components-1] == 0.0f)
+                rasterizer->comp_op = ctx_RGBA8_nop;
+              else if (((float*)rasterizer->color)[components-1] == 1.0f)
+              {
+                rasterizer->comp_op = ctx_CMYKAF_source_copy_normal_color;
+                rasterizer->comp = CTX_COV_PATH_CMYKAF_COPY;
+              }
+              else
+                rasterizer->comp_op = ctx_CMYKAF_porter_duff_color_normal;
+            }
+            else
+            {
+              rasterizer->comp_op = ctx_CMYKAF_porter_duff_color_normal;
+            }
+            break;
+          default:
+            rasterizer->comp_op = ctx_CMYKAF_porter_duff_generic_normal;
+            break;
+        }
+        break;
+      default:
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            rasterizer->comp_op = ctx_CMYKAF_porter_duff_color;
+            break;
+          default:
+            rasterizer->comp_op = ctx_CMYKAF_porter_duff_generic;
+            break;
+        }
+        break;
+    }
+#else
+
+    if (gstate->blend_mode == CTX_BLEND_NORMAL &&
+        gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp = CTX_COV_PATH_CMYKAF_COPY;
+        }
+        else if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER &&
+                 rasterizer->color[components-1] == 255)
+        {
+          rasterizer->comp = CTX_COV_PATH_CMYKAF_COPY;
+        }
+    }
+#endif
+  ctx_setup_apply_coverage (rasterizer);
+}
+
+static void
+ctx_setup_CMYKA8 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_CMYKAF (rasterizer);
+
+  if (rasterizer->comp == CTX_COV_PATH_CMYKAF_COPY)
+    rasterizer->comp = CTX_COV_PATH_CMYKA8_COPY;
+}
+
+static void
+ctx_setup_CMYK8 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_CMYKAF (rasterizer);
+  if (rasterizer->comp == CTX_COV_PATH_CMYKAF_COPY)
+    rasterizer->comp = CTX_COV_PATH_CMYK8_COPY;
+}
+
+#endif
+#if CTX_ENABLE_CMYKA8
+
+static void
+ctx_CMYKA8_to_CMYKAF (CtxRasterizer *rasterizer, uint8_t *src, float *dst, int count)
+{
+  for (int i = 0; i < count; i ++)
+    {
+      for (int c = 0; c < 4; c ++)
+        { dst[c] = ctx_u8_to_float ( (255-src[c]) ); }
+      dst[4] = ctx_u8_to_float (src[4]);
+      for (int c = 0; c < 4; c++)
+        { dst[c] *= dst[4]; }
+      src += 5;
+      dst += 5;
+    }
+}
+static void
+ctx_CMYKAF_to_CMYKA8 (CtxRasterizer *rasterizer, float *src, uint8_t *dst, int count)
+{
+  for (int i = 0; i < count; i ++)
+    {
+      int a = ctx_float_to_u8 (src[4]);
+      if (a != 0 && a != 255)
+      {
+        float recip = 1.0f/src[4];
+        for (int c = 0; c < 4; c++)
+        {
+          dst[c] = ctx_float_to_u8 (1.0f - src[c] * recip);
+        }
+      }
+      else
+      {
+        for (int c = 0; c < 4; c++)
+          dst[c] = 255 - ctx_float_to_u8 (src[c]);
+      }
+      dst[4]=a;
+
+      src += 5;
+      dst += 5;
+    }
+}
+
+static void
+ctx_composite_CMYKA8 (CTX_COMPOSITE_ARGUMENTS)
+{
+  float pixels[count * 5];
+  ctx_CMYKA8_to_CMYKAF (rasterizer, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, (uint8_t *) &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_CMYKAF_to_CMYKA8 (rasterizer, &pixels[0], dst, count);
+}
+
+#endif
+#if CTX_ENABLE_CMYK8
+
+static void
+ctx_CMYK8_to_CMYKAF (CtxRasterizer *rasterizer, uint8_t *src, float *dst, int count)
+{
+  for (int i = 0; i < count; i ++)
+    {
+      dst[0] = ctx_u8_to_float (255-src[0]);
+      dst[1] = ctx_u8_to_float (255-src[1]);
+      dst[2] = ctx_u8_to_float (255-src[2]);
+      dst[3] = ctx_u8_to_float (255-src[3]);
+      dst[4] = 1.0f;
+      src += 4;
+      dst += 5;
+    }
+}
+static void
+ctx_CMYKAF_to_CMYK8 (CtxRasterizer *rasterizer, float *src, uint8_t *dst, int count)
+{
+  for (int i = 0; i < count; i ++)
+    {
+      float c = src[0];
+      float m = src[1];
+      float y = src[2];
+      float k = src[3];
+      float a = src[4];
+      if (a != 0.0f && a != 1.0f)
+        {
+          float recip = 1.0f/a;
+          c *= recip;
+          m *= recip;
+          y *= recip;
+          k *= recip;
+        }
+      c = 1.0f - c;
+      m = 1.0f - m;
+      y = 1.0f - y;
+      k = 1.0f - k;
+      dst[0] = ctx_float_to_u8 (c);
+      dst[1] = ctx_float_to_u8 (m);
+      dst[2] = ctx_float_to_u8 (y);
+      dst[3] = ctx_float_to_u8 (k);
+      src += 5;
+      dst += 4;
+    }
+}
+
+static void
+ctx_composite_CMYK8 (CTX_COMPOSITE_ARGUMENTS)
+{
+  float pixels[count * 5];
+  ctx_CMYK8_to_CMYKAF (rasterizer, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, (uint8_t *) &pixels[0], src, x0, coverage, count);
+  ctx_CMYKAF_to_CMYK8 (rasterizer, &pixels[0], dst, count);
+}
+#endif
+
+#if CTX_ENABLE_RGB8
+
+inline static void
+ctx_RGB8_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (const uint8_t *) buf;
+  while (count--)
+    {
+      rgba[0] = pixel[0];
+      rgba[1] = pixel[1];
+      rgba[2] = pixel[2];
+      rgba[3] = 255;
+      pixel+=3;
+      rgba +=4;
+    }
+}
+
+inline static void
+ctx_RGBA8_to_RGB8 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      pixel[0] = rgba[0];
+      pixel[1] = rgba[1];
+      pixel[2] = rgba[2];
+      pixel+=3;
+      rgba +=4;
+    }
+}
+
+#endif
+#if CTX_ENABLE_GRAY1
+
+#if CTX_NATIVE_GRAYA8
+inline static void
+ctx_GRAY1_to_GRAYA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *graya, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int bitno = x&7;
+      if (bitno == 0 && count >= 7)
+      {
+        if (*pixel == 0)
+        {
+          for (int i = 0; i < 8; i++)
+          {
+            *graya++ = 0; *graya++ = 255;
+          }
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xff)
+        {
+          for (int i = 0; i < 8 * 2; i++)
+          {
+            *graya++ = 255;
+          }
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+      }
+      *graya++ = 255 * ((*pixel) & (1<<bitno));
+      *graya++ = 255;
+      pixel+= (bitno ==7);
+      x++;
+    }
+}
+
+inline static void
+ctx_GRAYA8_to_GRAY1 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int gray = rgba[0];
+      int bitno = x&7;
+      if (gray >= 128)
+        *pixel |= (1<<bitno);
+      else
+        *pixel &= (~ (1<<bitno));
+      pixel+= (bitno==7);
+      x++;
+      rgba +=2;
+    }
+}
+
+#else
+
+inline static void
+ctx_GRAY1_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  uint32_t *dst = (uint32_t*)rgba;
+  while (count--)
+    {
+      int bitno = x&7;
+
+      if ((bitno) == 0 && count >=7)
+      {
+        /* special case some bit patterns when decoding */
+        if (*pixel == 0)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xff)
+        {
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+        else if (*pixel == 0x0f)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xfc)
+        {
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+        else if (*pixel == 0x3f)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=8; count-=7; pixel++;
+          continue;
+        }
+      }
+      *dst++=0xff000000 + 0x00ffffff * ((*pixel & (1<< bitno ) )!=0);
+      pixel += (bitno ==7);
+      x++;
+    }
+}
+
+inline static void
+ctx_RGBA8_to_GRAY1 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int gray = ctx_u8_color_rgb_to_gray (rasterizer->state, rgba);
+      int bitno = x&7;
+      //gray += ctx_dither_mask_a (x, rasterizer->scanline/aa, 0, 127);
+      if (gray >= 128)
+        *pixel |= (1<< bitno);
+      else
+        *pixel &= (~ (1<< bitno));
+      pixel+= (bitno ==7);
+      x++;
+      rgba +=4;
+    }
+}
+#endif
+
+#endif
+#if CTX_ENABLE_GRAY2
+
+#if CTX_NATIVE_GRAYA8
+inline static void
+ctx_GRAY2_to_GRAYA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      uint8_t val = (((*pixel) >> ( (x&3) <<1)) & 3) * 85;
+      rgba[0] = val;
+      rgba[1] = 255;
+      if ( (x&3) ==3)
+        { pixel+=1; }
+      x++;
+      rgba +=2;
+    }
+}
+
+inline static void
+ctx_GRAYA8_to_GRAY2 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = rgba[0];
+      val = ctx_sadd8 (val, 40) >> 6;
+      *pixel = (*pixel & (~ (3 << ( (x&3) <<1) ) ))
+                      | ( (val << ( (x&3) <<1) ) );
+      if ( (x&3) ==3)
+        { pixel+=1; }
+      x++;
+      rgba +=2;
+    }
+}
+#else
+
+inline static void
+ctx_GRAY2_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  uint32_t *dst = (uint32_t*)rgba;
+  while (count--)
+    {
+      int bitno = x & 3;
+      if ((bitno) == 0 && count >=3)
+      {
+        /* special case some bit patterns when decoding */
+        if (*pixel == 0)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xff)
+        {
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0x55)
+        {
+          *dst++ = 0xff555555;
+          *dst++ = 0xff555555;
+          *dst++ = 0xff555555;
+          *dst++ = 0xff555555;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xaa)
+        {
+          *dst++ = 0xffaaaaaa;
+          *dst++ = 0xffaaaaaa;
+          *dst++ = 0xffaaaaaa;
+          *dst++ = 0xffaaaaaa;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0x0f)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xff000000;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0xfc)
+        {
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xff000000;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+        else if (*pixel == 0x3f)
+        {
+          *dst++ = 0xff000000;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          *dst++ = 0xffffffff;
+          x+=4; count-=3; pixel++;
+          continue;
+        }
+      }
+      {
+        uint8_t val = (((*pixel) >> ( (bitno) <<1)) & 3) * 85;
+        *dst = val + val * 256u + val * 256u * 256u + 255u * 256u * 256u * 256u;
+        if (bitno==3)
+          { pixel+=1; }
+        x++;
+        dst++;
+      }
+    }
+}
+
+inline static void
+ctx_RGBA8_to_GRAY2 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = ctx_u8_color_rgb_to_gray (rasterizer->state, rgba);
+      val >>= 6;
+      *pixel = (*pixel & (~ (3 << ((x&3) <<1) ) ))
+                      | ( (val << ((x&3) <<1) ) );
+      if ( (x&3) ==3)
+        { pixel+=1; }
+      x++;
+      rgba +=4;
+    }
+}
+#endif
+
+#endif
+#if CTX_ENABLE_GRAY4
+
+#if CTX_NATIVE_GRAYA8
+inline static void
+ctx_GRAY4_to_GRAYA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = (*pixel & (15 << ( (x & 1) <<2) ) ) >> ( (x&1) <<2);
+      val <<= 4;
+      rgba[0] = val;
+      rgba[1] = 255;
+      if ( (x&1) ==1)
+        { pixel+=1; }
+      x++;
+      rgba +=2;
+    }
+}
+
+inline static void
+ctx_GRAYA8_to_GRAY4 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = rgba[0];
+      val >>= 4;
+      *pixel = *pixel & (~ (15 << ( (x&1) <<2) ) );
+      *pixel = *pixel | ( (val << ( (x&1) <<2) ) );
+      if ( (x&1) ==1)
+        { pixel+=1; }
+      x++;
+      rgba +=2;
+    }
+}
+#else
+inline static void
+ctx_GRAY4_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = (*pixel & (15 << ( (x & 1) <<2) ) ) >> ( (x&1) <<2);
+      val <<= 4;
+      rgba[0] = val;
+      rgba[1] = val;
+      rgba[2] = val;
+      rgba[3] = 255;
+      if ( (x&1) ==1)
+        { pixel+=1; }
+      x++;
+      rgba +=4;
+    }
+}
+
+inline static void
+ctx_RGBA8_to_GRAY4 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      int val = ctx_u8_color_rgb_to_gray (rasterizer->state, rgba);
+      val >>= 4;
+      *pixel = *pixel & (~ (15 << ( (x&1) <<2) ) );
+      *pixel = *pixel | ( (val << ( (x&1) <<2) ) );
+      if ( (x&1) ==1)
+        { pixel+=1; }
+      x++;
+      rgba +=4;
+    }
+}
+#endif
+
+#endif
+#if CTX_ENABLE_GRAY8
+
+#if CTX_NATIVE_GRAYA8
+inline static void
+ctx_GRAY8_to_GRAYA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      rgba[0] = pixel[0];
+      rgba[1] = 255;
+      pixel+=1;
+      rgba +=2;
+    }
+}
+
+inline static void
+ctx_GRAYA8_to_GRAY8 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      pixel[0] = rgba[0];
+      pixel+=1;
+      rgba +=2;
+    }
+}
+#else
+inline static void
+ctx_GRAY8_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      rgba[0] = pixel[0];
+      rgba[1] = pixel[0];
+      rgba[2] = pixel[0];
+      rgba[3] = 255;
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+inline static void
+ctx_RGBA8_to_GRAY8 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  for (int i = 0; i < count; i ++)
+    {
+      pixel[i] = ctx_u8_color_rgb_to_gray (rasterizer->state, rgba + i * 4);
+    }
+}
+#endif
+
+#endif
+#if CTX_ENABLE_GRAYA8
+
+inline static void
+ctx_GRAYA8_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (const uint8_t *) buf;
+  while (count--)
+    {
+      rgba[0] = pixel[0];
+      rgba[1] = pixel[0];
+      rgba[2] = pixel[0];
+      rgba[3] = pixel[1];
+      pixel+=2;
+      rgba +=4;
+    }
+}
+
+inline static void
+ctx_RGBA8_to_GRAYA8 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      pixel[0] = ctx_u8_color_rgb_to_gray (rasterizer->state, rgba);
+      pixel[1] = rgba[3];
+      pixel+=2;
+      rgba +=4;
+    }
+}
+
+#if CTX_NATIVE_GRAYA8
+CTX_INLINE static void ctx_rgba_to_graya_u8 (CtxState *state, uint8_t *in, uint8_t *out)
+{
+  out[0] = ctx_u8_color_rgb_to_gray (state, in);
+  out[1] = in[3];
+}
+
+#if CTX_GRADIENTS
+static void
+ctx_fragment_linear_gradient_GRAYA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+        uint8_t *dst = (uint8_t*)out;
+#if CTX_DITHER
+  int scan = rasterizer->scanline / CTX_FULL_AA;
+  int ox = (int)x;
+#endif
+  for (int i = 0; i < count;i ++)
+  {
+  float v = ( ( (g->linear_gradient.dx * x + g->linear_gradient.dy * y) /
+                g->linear_gradient.length) -
+              g->linear_gradient.start) * (g->linear_gradient.rdelta);
+  {
+    uint8_t rgba[4];
+    ctx_fragment_gradient_1d_RGBA8 (rasterizer, v, 1.0f, rgba);
+    ctx_rgba_to_graya_u8 (rasterizer->state, rgba, dst);
+   
+  }
+
+#if CTX_DITHER
+  ctx_dither_graya_u8 ((uint8_t*)dst, ox + i, scan, rasterizer->format->dither_red_blue,
+                      rasterizer->format->dither_green);
+#endif
+  dst += 2;
+  x += dx;
+  y += dy;
+  }
+}
+
+static void
+ctx_fragment_radial_gradient_GRAYA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t *dst = (uint8_t*)out;
+#if CTX_DITHER
+  int scan = rasterizer->scanline / CTX_FULL_AA;
+  int ox = (int)x;
+#endif
+
+  for (int i = 0; i < count;i ++)
+  {
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  float v = (ctx_hypotf (g->radial_gradient.x0 - x, g->radial_gradient.y0 - y) -
+              g->radial_gradient.r0) * (g->radial_gradient.rdelta);
+  {
+    uint8_t rgba[4];
+    ctx_fragment_gradient_1d_RGBA8 (rasterizer, v, 1.0, rgba);
+    ctx_rgba_to_graya_u8 (rasterizer->state, rgba, dst);
+  }
+#if CTX_DITHER
+  ctx_dither_graya_u8 ((uint8_t*)dst, ox+i, scan, rasterizer->format->dither_red_blue,
+                      rasterizer->format->dither_green);
+#endif
+  dst += 2;
+  x += dx;
+  y += dy;
+  }
+}
+#endif
+
+static void
+ctx_fragment_color_GRAYA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  uint16_t *dst = (uint16_t*)out;
+  uint16_t pix;
+  ctx_color_get_graya_u8 (rasterizer->state, &g->color, (uint8_t*)&pix);
+  for (int i = 0; i <count; i++)
+  {
+    dst[i]=pix;
+  }
+}
+
+static void ctx_fragment_image_GRAYA8 (CtxRasterizer *rasterizer, float x, float y, float z, void *out, int count, float dx, float dy, float dz)
+{
+  uint8_t rgba[4*count];
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  switch (buffer->format->bpp)
+    {
+#if CTX_FRAGMENT_SPECIALIZE
+      case 1:  ctx_fragment_image_gray1_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+      case 24: ctx_fragment_image_rgb8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);  break;
+      case 32: ctx_fragment_image_rgba8_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz); break;
+#endif
+      default: ctx_fragment_image_RGBA8 (rasterizer, x, y, z, rgba, count, dx, dy, dz);       break;
+    }
+  for (int i = 0; i < count; i++)
+    ctx_rgba_to_graya_u8 (rasterizer->state, &rgba[i*4], &((uint8_t*)out)[i*2]);
+}
+
+static CtxFragment ctx_rasterizer_get_fragment_GRAYA8 (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  switch (gstate->source_fill.type)
+    {
+      case CTX_SOURCE_TEXTURE:           return ctx_fragment_image_GRAYA8;
+      case CTX_SOURCE_COLOR:           return ctx_fragment_color_GRAYA8;
+#if CTX_GRADIENTS
+      case CTX_SOURCE_LINEAR_GRADIENT: return ctx_fragment_linear_gradient_GRAYA8;
+      case CTX_SOURCE_RADIAL_GRADIENT: return ctx_fragment_radial_gradient_GRAYA8;
+#endif
+    }
+  return ctx_fragment_color_GRAYA8;
+}
+
+ctx_u8_porter_duff(GRAYA8, 2,generic, rasterizer->fragment, rasterizer->state->gstate.blend_mode)
+
+#if CTX_INLINED_NORMAL
+ctx_u8_porter_duff(GRAYA8, 2,generic_normal, rasterizer->fragment, CTX_BLEND_NORMAL)
+
+static void
+ctx_GRAYA8_copy_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_u8_copy_normal (2, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_GRAYA8_clear_normal (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_u8_clear_normal (2, rasterizer, dst, src, x0, coverage, count);
+}
+
+static void
+ctx_GRAYA8_source_over_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+#if 1
+  ctx_u8_source_over_normal_color (2, rasterizer, dst, rasterizer->color, x0, coverage, count);
+#else
+  uint8_t tsrc[5];
+  *((uint32_t*)tsrc) = *((uint32_t*)src);
+
+  while (count--)
+  {
+    uint32_t cov = *coverage++;
+    uint32_t common =(((((255+(tsrc[1] * cov))>>8))^255 ));
+    dst[0] =  ((((tsrc[0] * cov)) + (dst[0] * common ))>>8);
+    dst[1] =  ((((tsrc[1] * cov)) + (dst[1] * common ))>>8);
+    dst+=2;
+  }
+#endif
+}
+
+static void
+ctx_GRAYA8_source_copy_normal_color (CTX_COMPOSITE_ARGUMENTS)
+{
+  ctx_u8_source_copy_normal_color (2, rasterizer, dst, rasterizer->color, x0, coverage, count);
+}
+#endif
+
+inline static int
+ctx_is_opaque_color (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  if (gstate->global_alpha_u8 != 255)
+    return 0;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+  {
+    uint8_t ga[2];
+    ctx_color_get_graya_u8 (rasterizer->state, &gstate->source_fill.color, ga);
+    return ga[1] == 255;
+  }
+  return 0;
+}
+
+static void
+ctx_setup_GRAYA8 (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  int components = 2;
+  rasterizer->fragment = ctx_rasterizer_get_fragment_GRAYA8 (rasterizer);
+  rasterizer->comp_op  = ctx_GRAYA8_porter_duff_generic;
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+      ctx_fragment_color_GRAYA8 (rasterizer, 0,0, 1,rasterizer->color, 1, 0,0,0);
+      if (gstate->global_alpha_u8 != 255)
+        for (int c = 0; c < components; c ++)
+          rasterizer->color[c] = (rasterizer->color[c] * gstate->global_alpha_u8)/255;
+
+      if (rasterizer->format->from_comp)
+        rasterizer->format->from_comp (rasterizer, 0,
+          &rasterizer->color[0],
+          &rasterizer->color_native,
+          1);
+    }
+
+#if CTX_INLINED_NORMAL
+  if (gstate->compositing_mode == CTX_COMPOSITE_CLEAR)
+    rasterizer->comp_op = ctx_GRAYA8_clear_normal;
+  else
+    switch (gstate->blend_mode)
+    {
+      case CTX_BLEND_NORMAL:
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp_op = ctx_GRAYA8_copy_normal;
+          rasterizer->comp = CTX_COV_PATH_GRAYA8_COPY;
+        }
+        else if (gstate->global_alpha_u8 == 0)
+          rasterizer->comp_op = ctx_RGBA8_nop;
+        else
+        switch (gstate->source_fill.type)
+        {
+          case CTX_SOURCE_COLOR:
+            if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER)
+            {
+              if (rasterizer->color[components-1] == 0)
+                rasterizer->comp_op = ctx_RGBA8_nop;
+              else if (rasterizer->color[components-1] == 255)
+              {
+                rasterizer->comp_op = ctx_GRAYA8_source_copy_normal_color;
+                rasterizer->comp = CTX_COV_PATH_GRAYA8_COPY;
+              }
+              else
+                rasterizer->comp_op = ctx_GRAYA8_source_over_normal_color;
+            }
+            else
+            {
+              rasterizer->comp_op = ctx_GRAYA8_porter_duff_generic_normal;
+            }
+            break;
+          default:
+            rasterizer->comp_op = ctx_GRAYA8_porter_duff_generic_normal;
+            break;
+        }
+        break;
+      default:
+        rasterizer->comp_op = ctx_GRAYA8_porter_duff_generic;
+        break;
+    }
+#else
+    if (gstate->blend_mode == CTX_BLEND_NORMAL &&
+        gstate->source_fill.type == CTX_SOURCE_COLOR)
+    {
+        if (gstate->compositing_mode == CTX_COMPOSITE_COPY)
+        {
+          rasterizer->comp = CTX_COV_PATH_GRAYA8_COPY;
+        }
+        else if (gstate->compositing_mode == CTX_COMPOSITE_SOURCE_OVER &&
+                 rasterizer->color[components-1] == 255)
+        {
+          rasterizer->comp = CTX_COV_PATH_GRAYA8_COPY;
+        }
+    }
+#endif
+  ctx_setup_apply_coverage (rasterizer);
+}
+
+#if CTX_ENABLE_GRAY4
+static void
+ctx_setup_GRAY4 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_GRAYA8 (rasterizer);
+  if (rasterizer->comp == CTX_COV_PATH_GRAYA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_GRAY4_COPY;
+  else
+  rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+#if CTX_ENABLE_GRAY2
+static void
+ctx_setup_GRAY2 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_GRAYA8 (rasterizer);
+  if (rasterizer->comp == CTX_COV_PATH_GRAYA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_GRAY2_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+#if CTX_ENABLE_GRAY1
+static void
+ctx_setup_GRAY1 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_GRAYA8 (rasterizer);
+  if (rasterizer->comp == CTX_COV_PATH_GRAYA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_GRAY1_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+#endif
+
+static void
+ctx_setup_GRAY8 (CtxRasterizer *rasterizer)
+{
+  ctx_setup_GRAYA8 (rasterizer);
+  if (rasterizer->comp == CTX_COV_PATH_GRAYA8_COPY)
+    rasterizer->comp = CTX_COV_PATH_GRAY8_COPY;
+  else
+    rasterizer->comp = CTX_COV_PATH_FALLBACK;
+}
+
+#endif
+
+#endif
+
+inline static void
+ctx_332_unpack (uint8_t pixel,
+                uint8_t *red,
+                uint8_t *green,
+                uint8_t *blue)
+{
+  *green = (((pixel >> 2) & 7)*255)/7;
+  *red   = (((pixel >> 5) & 7)*255)/7;
+  *blue  = ((((pixel & 3) << 1) | ((pixel >> 2) & 1))*255)/7;
+}
+
+static inline uint8_t
+ctx_332_pack (uint8_t red,
+              uint8_t green,
+              uint8_t blue)
+{
+  return ((ctx_sadd8(red,15) >> 5) << 5)
+        |((ctx_sadd8(green,15) >> 5) << 2)
+        |(ctx_sadd8(blue,15) >> 6);
+}
+#if CTX_ENABLE_RGB332
+
+static inline uint8_t
+ctx_888_to_332 (uint32_t in)
+{
+  uint8_t *rgb=(uint8_t*)(&in);
+  return ctx_332_pack (rgb[0],rgb[1],rgb[2]);
+}
+
+static inline uint32_t
+ctx_332_to_888 (uint8_t in)
+{
+  uint32_t ret = 0;
+  uint8_t *rgba=(uint8_t*)&ret;
+  ctx_332_unpack (in,
+                  &rgba[0],
+                  &rgba[1],
+                  &rgba[2]);
+  rgba[3] = 255;
+  return ret;
+}
+
+static inline void
+ctx_RGB332_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+      ctx_332_unpack (*pixel, &rgba[0], &rgba[1], &rgba[2]);
+#if CTX_RGB332_ALPHA
+      if (rgba[0]==255 && rgba[2] == 255 && rgba[1]==0)
+        { rgba[3] = 0; }
+      else
+#endif
+        { rgba[3] = 255; }
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static inline void
+ctx_RGBA8_to_RGB332 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  while (count--)
+    {
+#if CTX_RGB332_ALPHA
+      if (rgba[3]==0)
+        { pixel[0] = ctx_332_pack (255, 0, 255); }
+      else
+#endif
+        { pixel[0] = ctx_332_pack (rgba[0], rgba[1], rgba[2]); }
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static void
+ctx_composite_RGB332 (CTX_COMPOSITE_ARGUMENTS)
+{
+#if 1
+  if (CTX_LIKELY(rasterizer->comp_op == ctx_RGBA8_source_over_normal_color))
+  {
+    uint32_t si_ga = ((uint32_t*)rasterizer->color)[1];
+    uint32_t si_rb = ((uint32_t*)rasterizer->color)[2];
+    uint32_t si_a  = si_ga >> 16;
+
+    while (count--)
+    {
+      uint32_t cov   = *coverage++;
+      uint32_t rcov  = (((255+si_a * cov)>>8))^255;
+      uint32_t di    = ctx_332_to_888 (*((uint8_t*)dst));
+      uint32_t di_ga = ((di & 0xff00ff00) >> 8);
+      uint32_t di_rb = (di & 0x00ff00ff);
+      *((uint8_t*)(dst)) =
+      ctx_888_to_332((((si_rb * cov + 0xff00ff + di_rb * rcov) & 0xff00ff00) >> 8)  |
+       ((si_ga * cov + 0xff00ff + di_ga * rcov) & 0xff00ff00));
+       dst+=1;
+    }
+    return;
+  }
+#endif
+  uint8_t pixels[count * 4];
+  ctx_RGB332_to_RGBA8 (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_RGBA8_to_RGB332 (rasterizer, x0, &pixels[0], dst, count);
+}
+
+#endif
+static inline uint16_t
+ctx_565_pack (uint8_t  red,
+              uint8_t  green,
+              uint8_t  blue,
+              const int      byteswap)
+{
+#if 0
+  // is this extra precision warranted?
+  // for 332 it gives more pure white..
+  // it might be the case also for generic 565
+  red = ctx_sadd8 (red, 4);
+  green = ctx_sadd8 (green, 3);
+  blue = ctx_sadd8 (blue, 4);
+#endif
+
+  uint32_t c = (red >> 3) << 11;
+  c |= (green >> 2) << 5;
+  c |= blue >> 3;
+  if (byteswap)
+    { return (c>>8) | (c<<8); } /* swap bytes */
+  return c;
+}
+
+ // ARGB - 
+#if CTX_ENABLE_CBRLE
+
+
+static inline void
+ctx_RGBA8_to_CBRLE (CtxRasterizer *rasterizer, int u, const uint8_t *rgba, void *buf, int count)
+{
+  uint8_t *pixel = (uint8_t *) buf;
+  int width = rasterizer->blit_width;
+  int format_bits = rasterizer->format->bpp;
+  pixel-= (u *format_bits)/8;
+  int size = (width * format_bits)/8;
+
+  ctx_CBRLE_compress (&rgba[-u*4], pixel, width, size, u, count, CBRLE_MODE_SET, NULL, 1);
+}
+
+static inline void
+ctx_CBRLE_to_RGBA8 (CtxRasterizer *rasterizer, int u, const void *buf, uint8_t *rgba, int count)
+{
+  const uint8_t *pixel = (uint8_t *) buf;
+  int width = rasterizer->blit_width;
+  uint8_t temp[width * 4];
+  int format_bits = rasterizer->format->bpp;
+  pixel-= (u *format_bits)/8;
+  int size = (width * format_bits)/8;
+
+  _ctx_CBRLE_decompress (pixel, &temp[0], width, size, u, ctx_mini(count, width-u));//count);
+
+  uint32_t *src = (uint32_t*)&temp[4*u];
+  while (count--)
+  {
+      ((uint32_t*)rgba)[0] = *src++;
+      rgba += 4;
+  }
+}
+
+
+static void
+ctx_composite_CBRLE (CTX_COMPOSITE_ARGUMENTS)
+{
+  uint8_t *pixel = (uint8_t*)dst;
+  int format_bits = rasterizer->format->bpp;
+  pixel-= (x0 *format_bits)/8;
+
+#if 0
+  if (pixel[0] || pixel[1])
+  {
+
+  if (CTX_LIKELY(rasterizer->comp_op == ctx_RGBA8_source_over_normal_color))
+  {
+    int width = rasterizer->blit_width;
+    int size = (width * format_bits)/8;
+    ctx_CBRLE_compress (rasterizer->color, pixel, width, size, x0, count,
+                         CBRLE_MODE_OVER, coverage, 1);
+    return;
+  }
+  else if (CTX_LIKELY(rasterizer->comp_op == ctx_RGBA8_source_copy_normal_color) &&
+           getenv("CTX_CBRLE_COPY"))
+  {
+    int width = rasterizer->blit_width;
+    int size = (width * format_bits)/8;
+    ctx_CBRLE_compress (rasterizer->color, pixel, width, size, x0, count, 
+                         CBRLE_MODE_COPY, coverage, 1);
+    return;
+  }
+  }
+
+#endif
+
+  uint8_t pixels[count * 4];
+  ctx_CBRLE_to_RGBA8 (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_RGBA8_to_CBRLE (rasterizer, x0, &pixels[0], dst, count);
+}
+
+#endif
+
+
+
+
+
+
+
+
+
+
+#if CTX_ENABLE_RGB565 | CTX_ENABLE_RGB565_BYTESWAPPED
+
+static inline void
+ctx_565_unpack (const uint16_t pixel,
+                uint8_t *red,
+                uint8_t *green,
+                uint8_t *blue,
+                const int byteswap)
+{
+  uint16_t byteswapped;
+  if (byteswap)
+    { byteswapped = (pixel>>8) | (pixel<<8); }
+  else
+    { byteswapped  = pixel; }
+  uint8_t b  =  (byteswapped & 31) <<3;
+  uint8_t g  = ( (byteswapped>>5) & 63) <<2;
+  uint8_t r  = ( (byteswapped>>11) & 31) <<3;
+
+#if 0
+  *blue  = (b > 248) * 255 + (b <= 248) * b;
+  *green = (g > 248) * 255 + (g <= 248) * g;
+  *red   = (r > 248) * 255 + (r <= 248) * r;
+#else
+  *blue = b;
+  *green = g;
+  *red = r;
+#endif
+}
+
+static inline uint32_t
+ctx_565_unpack_32 (const uint16_t pixel,
+                   const int byteswap)
+{
+  uint16_t byteswapped;
+  if (byteswap)
+    { byteswapped = (pixel>>8) | (pixel<<8); }
+  else
+    { byteswapped  = pixel; }
+  uint32_t b   = (byteswapped & 31) <<3;
+  uint32_t g = ( (byteswapped>>5) & 63) <<2;
+  uint32_t r   = ( (byteswapped>>11) & 31) <<3;
+#if 0
+  b = (b > 248) * 255 + (b <= 248) * b;
+  g = (g > 248) * 255 + (g <= 248) * g;
+  r = (r > 248) * 255 + (r <= 248) * r;
+#endif
+
+  return r +  (g << 8) + (b << 16) + (0xff << 24);
+}
+
+
+static inline uint16_t
+ctx_888_to_565 (uint32_t in, int byteswap)
+{
+  uint8_t *rgb=(uint8_t*)(&in);
+  return ctx_565_pack (rgb[0],rgb[1],rgb[2], byteswap);
+}
+
+static inline uint32_t
+ctx_565_to_888 (uint16_t in, int byteswap)
+{
+  uint32_t ret = 0;
+  uint8_t *rgba=(uint8_t*)&ret;
+  ctx_565_unpack (in,
+                  &rgba[0],
+                  &rgba[1],
+                  &rgba[2],
+                  byteswap);
+  //rgba[3]=255;
+  return ret;
+}
+
+#endif
+#if CTX_ENABLE_RGB565
+
+
+static inline void
+ctx_RGB565_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint16_t *pixel = (uint16_t *) buf;
+  while (count--)
+    {
+      // XXX : checking the raw value for alpha before unpack will be faster
+      ((uint32_t*)(rgba))[0] = ctx_565_unpack_32 (*pixel, 0);
+#if CTX_RGB565_ALPHA
+      if (rgba[0]==255 && rgba[2] == 255 && rgba[1]==0)
+        { rgba[3] = 0; }
+#endif
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static inline void
+ctx_RGBA8_to_RGB565 (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint16_t *pixel = (uint16_t *) buf;
+  while (count--)
+    {
+#if CTX_RGB565_ALPHA
+      if (rgba[3]==0)
+        { pixel[0] = ctx_565_pack (255, 0, 255, 0); }
+      else
+#endif
+        { pixel[0] = ctx_565_pack (rgba[0], rgba[1], rgba[2], 0); }
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static void
+ctx_RGBA8_source_over_normal_color (CTX_COMPOSITE_ARGUMENTS);
+static void
+ctx_RGBA8_source_copy_normal_color (CTX_COMPOSITE_ARGUMENTS);
+
+static void
+ctx_composite_RGB565 (CTX_COMPOSITE_ARGUMENTS)
+{
+#if 1
+  if (CTX_LIKELY(rasterizer->comp_op == ctx_RGBA8_source_over_normal_color))
+  {
+    uint32_t si_ga = ((uint32_t*)rasterizer->color)[1];
+    uint32_t si_rb = ((uint32_t*)rasterizer->color)[2];
+    uint32_t si_a  = si_ga >> 16;
+
+    while (count--)
+    {
+        uint32_t cov   = *coverage++;
+        uint32_t rcov  = (((255+si_a * cov)>>8))^255;
+        uint32_t di    = ctx_565_to_888 (*((uint16_t*)dst), 0);
+        uint32_t di_ga = ((di & 0xff00ff00) >> 8);
+        uint32_t di_rb = (di & 0x00ff00ff);
+        *((uint16_t*)(dst)) =
+        ctx_888_to_565((((si_rb * cov + 0xff00ff + di_rb * rcov) & 0xff00ff00) >> 8)  |
+         ((si_ga * cov + 0xff00ff + di_ga * rcov) & 0xff00ff00), 0);
+         dst+=2;
+    }
+    return;
+  }
+#endif
+
+  uint8_t pixels[count * 4];
+  ctx_RGB565_to_RGBA8 (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_RGBA8_to_RGB565 (rasterizer, x0, &pixels[0], dst, count);
+}
+#endif
+#if CTX_ENABLE_RGB565_BYTESWAPPED
+
+static inline void
+ctx_RGB565_BS_to_RGBA8 (CtxRasterizer *rasterizer, int x, const void *buf, uint8_t *rgba, int count)
+{
+  const uint16_t *pixel = (uint16_t *) buf;
+  while (count--)
+    {
+      //ctx_565_unpack (*pixel, &rgba[0], &rgba[1], &rgba[2], 1);
+      ((uint32_t*)(rgba))[0] = ctx_565_unpack_32 (*pixel, 1);
+#if CTX_RGB565_ALPHA
+      if (rgba[0]==255 && rgba[2] == 255 && rgba[1]==0)
+        { rgba[3] = 0; }
+      else
+        { rgba[3] = 255; }
+#endif
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static inline void
+ctx_RGBA8_to_RGB565_BS (CtxRasterizer *rasterizer, int x, const uint8_t *rgba, void *buf, int count)
+{
+  uint16_t *pixel = (uint16_t *) buf;
+  while (count--)
+    {
+#if CTX_RGB565_ALPHA
+      if (rgba[3]==0)
+        { pixel[0] = ctx_565_pack (255, 0, 255, 1); }
+      else
+#endif
+        { pixel[0] = ctx_565_pack (rgba[0], rgba[1], rgba[2], 1); }
+      pixel+=1;
+      rgba +=4;
+    }
+}
+
+static void
+ctx_composite_RGB565_BS (CTX_COMPOSITE_ARGUMENTS)
+{
+#if 1
+  if (CTX_LIKELY(rasterizer->comp_op == ctx_RGBA8_source_over_normal_color))
+  {
+    uint32_t si_ga = ((uint32_t*)rasterizer->color)[1];
+    uint32_t si_rb = ((uint32_t*)rasterizer->color)[2];
+    uint32_t si_a  = si_ga >> 16;
+
+    while (count--)
+    {
+      uint32_t cov   = *coverage++;
+      uint32_t rcov  = (((255+si_a * cov)>>8))^255;
+      uint32_t di    = ctx_565_to_888 (*((uint16_t*)dst), 1);
+      uint32_t di_ga = ((di & 0xff00ff00) >> 8);
+      uint32_t di_rb = (di & 0x00ff00ff);
+      *((uint16_t*)(dst)) =
+      ctx_888_to_565((((si_rb * cov + 0xff00ff + di_rb * rcov) & 0xff00ff00) >> 8)  |
+       ((si_ga * cov + 0xff00ff + di_ga * rcov) & 0xff00ff00), 1);
+       dst+=2;
+    }
+    return;
+  }
+#endif
+
+  uint8_t pixels[count * 4];
+  ctx_RGB565_BS_to_RGBA8 (rasterizer, x0, dst, &pixels[0], count);
+  rasterizer->comp_op (rasterizer, &pixels[0], rasterizer->color, x0, coverage, count);
+  ctx_RGBA8_to_RGB565_BS (rasterizer, x0, &pixels[0], dst, count);
+}
+#endif
+
+
+static inline uint32_t
+ctx_over_RGBA8 (uint32_t dst, uint32_t src, uint32_t cov)
+{
+  uint32_t si_ga = (src & 0xff00ff00) >> 8;
+  uint32_t si_rb = src & 0x00ff00ff;
+  uint32_t si_a  = si_ga >> 16;
+  uint32_t rcov  = ((255+si_a * cov)>>8)^255;
+  uint32_t di_ga = ( dst & 0xff00ff00) >> 8;
+  uint32_t di_rb = dst & 0x00ff00ff;
+  return
+     ((((si_rb * cov) + 0xff00ff + (di_rb * rcov)) & 0xff00ff00) >> 8)  |
+      (((si_ga * cov) + 0xff00ff + (di_ga * rcov)) & 0xff00ff00);
+}
+
+
+static inline uint32_t
+ctx_over_RGBA8_full (uint32_t dst, uint32_t src)
+{
+  uint32_t si_ga = (src & 0xff00ff00) >> 8;
+  uint32_t si_rb = src & 0x00ff00ff;
+  uint32_t si_a  = si_ga >> 16;
+  uint32_t rcov  = si_a^255;
+  uint32_t di_ga = (dst & 0xff00ff00) >> 8;
+  uint32_t di_rb = dst & 0x00ff00ff;
+  return
+     ((((si_rb * 255) + 0xff00ff + (di_rb * rcov)) & 0xff00ff00) >> 8)  |
+      (((si_ga * 255) + 0xff00ff + (di_ga * rcov)) & 0xff00ff00);
+}
+
+static inline uint32_t
+ctx_over_RGBA8_2 (uint32_t dst, uint32_t si_ga, uint32_t si_rb, uint32_t si_a, uint32_t cov)
+{
+  uint32_t rcov  = ((si_a * cov)/255)^255;
+  uint32_t di_ga = (dst & 0xff00ff00) >> 8;
+  uint32_t di_rb = dst & 0x00ff00ff;
+  return
+     ((((si_rb * cov) + 0xff00ff + (di_rb * rcov)) & 0xff00ff00) >> 8)  |
+      (((si_ga * cov) + 0xff00ff + (di_ga * rcov)) & 0xff00ff00);
+}
+
+static inline uint32_t
+ctx_over_RGBA8_full_2 (uint32_t dst, uint32_t si_ga_full, uint32_t si_rb_full, uint32_t si_a)
+{
+  uint32_t rcov = si_a^255;
+  uint32_t di_ga = ( dst & 0xff00ff00) >> 8;
+  uint32_t di_rb = dst & 0x00ff00ff;
+  return
+     ((((si_rb_full) + (di_rb * rcov)) & 0xff00ff00) >> 8)  |
+      (((si_ga_full) + (di_ga * rcov)) & 0xff00ff00);
+}
+
+static inline void ctx_span_set_color (uint32_t *dst_pix, uint32_t val, int count)
+{
+  if (count>0)
+  while(count--)
+    *dst_pix++=val;
+}
+
+static inline void ctx_span_set_colorb  (uint32_t *dst_pix, uint32_t val, int count)
+{
+  while(count--)
+    *dst_pix++=val;
+}
+
+static inline void ctx_span_set_colorbu (uint32_t *dst_pix, uint32_t val, unsigned int count)
+{
+  while(count--)
+    *dst_pix++=val;
+}
+
+static inline void ctx_span_set_color_x4 (uint32_t *dst_pix, uint32_t *val, int count)
+{
+  if (count>0)
+  while(count--)
+  {
+    *dst_pix++=val[0];
+    *dst_pix++=val[1];
+    *dst_pix++=val[2];
+    *dst_pix++=val[3];
+  }
+}
+
+#if CTX_FAST_FILL_RECT
+
+static inline void ctx_RGBA8_image_rgba8_RGBA8_bi_scaled_fill_rect (CtxRasterizer *rasterizer, int x0, int y0, int x1, int y1, int copy)
+{
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA,&u0, &v0, &w0, &ud, &vd, &wd);
+  u0-=0.5f;
+  v0-=0.5f;
+
+  uint8_t *dst = ( (uint8_t *) rasterizer->buf);
+  int blit_stride = rasterizer->blit_stride;
+  dst += (y0 - rasterizer->blit_y) * blit_stride;
+  dst += (x0) * rasterizer->format->bpp/8;
+
+  unsigned int width = x1-x0+1;
+  unsigned int height = y1-y0+1;
+
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+
+  int bwidth = buffer->width;
+  int bheight = buffer->height;
+  uint8_t tsrc[copy?1:width*4]; /* unused when not copy */
+
+  //uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint32_t *data = ((uint32_t*)buffer->data);
+  uint32_t rb_row[2][width*2];
+  //uint32_t ga_row[2][width];
+
+  int32_t row_u = (int)(u0 * 65536);
+  int32_t row_v = (int)(v0 * 65536);
+  int   ui_delta = (int)(ud * 65536);
+  int   vi_delta = (int)(vd * 65536);
+
+  int iter = 0;
+
+  int loaded_v = -1;
+  int top      = iter % 2;
+
+
+  { // preload previous row for first row
+    int32_t ui  = row_u;
+    int32_t vi  = row_v;
+    unsigned int xa=0;
+      for (unsigned int x = 0; x < width; x++, xa+=2)
+      {
+        int u = ui >> 16;
+        int v = vi >> 16;
+        int u1 = u + 1;
+        uint32_t  blank = 0;
+        uint32_t *src0 = &blank;
+        uint32_t *src1 = src0;
+    
+        if (CTX_LIKELY(_ctx_coords_restrict (extend, &u, &v, bwidth, bheight)))
+        {
+          src0 = data + u + bwidth * (v);
+        }
+        if (CTX_LIKELY(_ctx_coords_restrict (extend, &u1, &v, bwidth, bheight)))
+        {
+          src1 = data + u1 + bwidth * (v);
+        }
+    
+        ctx_lerp_RGBA8_split (*src0, *src1, ui>>8, &rb_row[!top][xa],
+                                                   &rb_row[!top][xa+1]);
+        ui += ui_delta;
+        vi += vi_delta;
+      }
+    }
+
+  { // scale/translate only
+    for (unsigned int y = 0; y < height; y++)
+    {
+       int top     = iter % 2;
+       int32_t ui = row_u;
+       int32_t vi = row_v;
+       int v =  (vi >> 16) + 1;
+       uint8_t dv = ((row_v)>> 8);
+  
+       if (v != loaded_v)
+       {
+         loaded_v = v;
+         unsigned int xa=0;
+
+           for (unsigned int x = 0; x < width; x++, xa+=2)
+           {
+             int u = ui >> 16;
+             int u1 = u+1;
+             uint32_t  blank = 0;
+             uint32_t *src0 = &blank;
+             uint32_t *src1 = src0;
+
+
+        if (CTX_LIKELY(_ctx_coords_restrict (extend, &u, &v, bwidth, bheight)))
+        {
+          src0 = data + u + bwidth * (v);
+        }
+        if (CTX_LIKELY(_ctx_coords_restrict (extend, &u1, &v, bwidth, bheight)))
+        {
+          src1 = data + u1 + bwidth * (v);
+        }
+
+             ctx_lerp_RGBA8_split (*src0, *src1, ui>>8, &rb_row[top][xa], &rb_row[top][xa+1]);
+             ui += ui_delta;
+           }
+         iter++;
+         top    = iter % 2;
+       }
+       
+       {
+         uint32_t*dst_i = copy?(uint32_t*)dst:(uint32_t*)tsrc;
+         int ntop = !top;
+         for (unsigned int xa = 0; xa < width * 2; xa+=2)
+         {
+            *dst_i ++ =
+            ctx_lerp_RGBA8_merge (rb_row[top][xa], rb_row[top][xa+1], 
+                                  rb_row[ntop][xa], rb_row[ntop][xa+1],
+                                  dv);
+         }
+         if (!copy)
+         ctx_RGBA8_source_over_normal_full_cov_buf (rasterizer,
+            dst, NULL, x0, NULL, width, &tsrc[0]);
+       }
+       row_u -= vi_delta;
+       row_v += ui_delta;
+       dst += blit_stride;
+    }
+  }
+}
+
+static inline void ctx_RGBA8_image_rgba8_RGBA8_bi_affine_fill_rect (CtxRasterizer *rasterizer, int x0, int y0, int x1, int y1, int copy)
+{
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA,&u0, &v0, &w0, &ud, &vd, &wd);
+  u0-=0.5f;
+  v0-=0.5f;
+
+  uint8_t *dst = ( (uint8_t *) rasterizer->buf);
+  int blit_stride = rasterizer->blit_stride;
+  dst += (y0 - rasterizer->blit_y) * blit_stride;
+  dst += (x0) * rasterizer->format->bpp/8;
+
+  unsigned int width = x1-x0+1;
+  unsigned int height = y1-y0+1;
+
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+
+  int bwidth = buffer->width;
+  int bheight = buffer->height;
+  uint8_t tsrc[copy?1:width*4]; /* unused when not copy */
+
+  //uint8_t global_alpha_u8 = rasterizer->state->gstate.global_alpha_u8;
+  uint32_t *data = ((uint32_t*)buffer->data);
+  uint32_t rb_row[2][width*2];
+  //uint32_t ga_row[2][width];
+
+  uint32_t row_u = (int)(u0 * 65536);
+  uint32_t row_v = (int)(v0 * 65536);
+  int   ui_delta = (int)(ud * 65536);
+  int   vi_delta = (int)(vd * 65536);
+
+  int iter = 0;
+
+  int loaded_v = -1;
+  int top      = iter % 2;
+
+
+  { // preload previous row for first row
+    uint32_t ui  = row_u;
+    uint32_t vi  = row_v;
+    unsigned int xa=0;
+      for (unsigned int x = 0; x < width; x++, xa+=2)
+      {
+        int u = ui >> 16;
+        int v = vi >> 16;
+        uint32_t  blank = 0;
+        uint32_t *src0 = &blank;
+        uint32_t *src1 = src0;
+    
+        if (CTX_LIKELY (v >= 0 && v < bheight))
+        {
+          if (CTX_LIKELY (u >= 0 && u + 1 < bwidth))
+          {
+            src0 = data + u + bwidth * (v);
+            src1 = src0 + 1;
+          }
+          else
+          {
+            if (u >= 0 && u < bwidth)
+              src0 = data + u + bwidth * (v);
+            if (u + 1>= 0 && u + 1 < bwidth)
+              src1 = data + (u+1) + bwidth * (v);
+          }
+        }
+    
+        ctx_lerp_RGBA8_split (*src0, *src1, ui>>8, &rb_row[!top][xa], &rb_row[!top][xa+1]);
+        ui += ui_delta;
+        vi += vi_delta;
+      }
+    }
+
+  for (unsigned int y = 0; y < height; y++)
+  {
+     int top     = iter % 2;
+     uint32_t ui = row_u;
+     uint32_t vi = row_v;
+
+     int v =  (vi >> 16) + 1;
+     uint8_t dv = ((row_v)>> 8);
+
+     if (v != loaded_v)
+     {
+       loaded_v = v;
+       unsigned int xa=0;
+       for (unsigned int x = 0; x < width; x++, xa+=2)
+       {
+         int u = ui >> 16;
+         v =  (vi >> 16) + 1;
+         uint32_t  blank = 0;
+         uint32_t *src0 = &blank;
+         uint32_t *src1 = src0;
+         if (CTX_LIKELY (v >= 0 && v < bheight))
+         {
+           if (CTX_LIKELY(u >= 0 && u + 1 < bwidth))
+           {
+             src0 = data + u + bwidth * (v);
+             src1 = src0 + 1;
+           }
+           else
+           {
+             if (u >= 0 && u < bwidth)
+               src0 = data + u + bwidth * (v);
+             if (u + 1>= 0 && u + 1 < bwidth)
+               src1 = src0 + 1;
+           }
+         }
+         ctx_lerp_RGBA8_split (*src0, *src1, ui>>8, &rb_row[top][xa],
+                                                    &rb_row[top][xa+1]);
+         ui += ui_delta;
+         vi += vi_delta;
+       }
+       iter++;
+       top    = iter % 2;
+     }
+     
+     {
+       uint32_t*dst_i = copy?(uint32_t*)dst:(uint32_t*)tsrc;
+       int ntop = !top;
+       for (unsigned int xa = 0; xa < width * 2; xa+=2)
+       {
+          *dst_i ++ =
+          ctx_lerp_RGBA8_merge (rb_row[top][xa], rb_row[top][xa+1], 
+                                rb_row[ntop][xa], rb_row[ntop][xa+1],
+                                dv);
+       }
+       if (!copy)
+       ctx_RGBA8_source_over_normal_full_cov_buf (rasterizer,
+          dst, NULL, x0, NULL, width, &tsrc[0]);
+     }
+     row_u -= vi_delta;
+     row_v += ui_delta;
+     dst += blit_stride;
+  }
+}
+
+#if 0
+static inline void ctx_RGBA8_image_rgba8_RGBA8_nearest_fill_rect_copy (CtxRasterizer *rasterizer, int x0, int y0, int x1, int y1, int copy)
+{
+  float u0 = 0; float v0 = 0;
+  float ud = 0; float vd = 0;
+  float w0 = 1; float wd = 0;
+  ctx_init_uv (rasterizer, x0, rasterizer->scanline/CTX_FULL_AA,&u0, &v0, &w0, &ud, &vd, &wd);
+
+  uint32_t *dst = ( (uint32_t *) rasterizer->buf);
+  int blit_stride = rasterizer->blit_stride/4;
+  dst += (y0 - rasterizer->blit_y) * blit_stride;
+  dst += (x0);
+
+  unsigned int width = x1-x0+1;
+  unsigned int height = y1-y0+1;
+
+  //CtxSource *g = &rasterizer->state->gstate.source_fill;
+  //CtxBuffer *buffer = g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+
+  CtxSource *g = &rasterizer->state->gstate.source_fill;
+  CtxBuffer *buffer = 
+     g->texture.buffer->color_managed?g->texture.buffer->color_managed:g->texture.buffer;
+  int bwidth  = buffer->width;
+  int bheight = buffer->height;
+  int u = x0;// + 0.5f;
+  int v = y0;// + 0.5f;
+
+  uint32_t *src = ((uint32_t*)buffer->data) + bwidth * v + u;
+
+  int pre = ctx_mini(ctx_maxi(-u,0), width);
+
+  width-=pre;
+  u+=pre;
+
+  int core = ctx_mini (width, bwidth - u);
+
+  if (copy)
+  {
+    if (core>0)
+    {
+      uint32_t *t_dst = dst;
+      for (unsigned int y = 0; y < height; y++)
+      {
+         if (CTX_LIKELY((v >= 0 && v < bheight)))
+         {
+           memcpy (t_dst, src + pre, core * 4);
+         }
+         v++;
+         src += bwidth;
+         t_dst += blit_stride;
+      }
+    }
+  }
+  else
+  {
+    if (core>0)
+    {
+      uint32_t *t_dst = dst;
+      for (unsigned int y = 0; y < height; y++)
+      {
+         if (CTX_LIKELY((v >= 0 && v < bheight)))
+         {
+           ctx_RGBA8_source_over_normal_full_cov_buf (rasterizer,
+               (uint8_t*)t_dst, NULL, x0+pre, NULL, core, (uint8_t*)src);
+         }
+         v++;
+         src += bwidth;
+         t_dst += blit_stride;
+      }
+    }
+  }
+}
+#endif
+
+
+static void
+ctx_composite_fill_rect_aligned (CtxRasterizer *rasterizer,
+                                 int            x0,
+                                 int            y0,
+                                 int            x1,
+                                 int            y1,
+                                 uint8_t        cov)
+{
+  int blit_x = rasterizer->blit_x;
+  int blit_y = rasterizer->blit_y;
+  int blit_width = rasterizer->blit_width;
+  int blit_height = rasterizer->blit_height;
+  int blit_stride = rasterizer->blit_stride;
+
+  x0 = ctx_maxi (x0, blit_x);
+  x1 = ctx_mini (x1, blit_x + blit_width - 1);
+  y0 = ctx_maxi (y0, blit_y);
+  y1 = ctx_mini (y1, blit_y + blit_height - 1);
+
+  int width = x1 - x0 + 1;
+  int height= y1 - y0 + 1;
+  //
+  if (CTX_UNLIKELY (width <=0 || height <= 0))
+    return;
+
+  CtxCovPath comp = rasterizer->comp;
+  uint8_t *dst;
+
+  // this could be done here, but is not used
+  // by a couple of the cases
+#define INIT_ENV do {\
+  rasterizer->scanline = y0 * CTX_FULL_AA; \
+  dst = ( (uint8_t *) rasterizer->buf); \
+  dst += (y0 - blit_y) * blit_stride; \
+  dst += (x0 * rasterizer->format->bpp)/8;}while(0);
+
+//if (CTX_UNLIKELY(width <=0 || height <= 0))
+//  return;
+  if (cov == 255)
+  {
+    switch (comp)
+    {
+    case CTX_COV_PATH_RGBA8_COPY:
+    {
+      uint32_t color;
+      memcpy (&color, (uint32_t*)rasterizer->color, sizeof (color));
+      INIT_ENV;
+      if (CTX_UNLIKELY(width == 1))
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          uint32_t *dst_i = (uint32_t*)&dst[0];
+          *dst_i = color;
+          dst += blit_stride;
+        }
+      }
+      else
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+#if 0
+          uint32_t *dst_pix = (uint32_t*)&dst[0];
+          int count = width;
+          while(count--)
+            *dst_pix++=color;
+#else
+          ctx_span_set_colorbu ((uint32_t*)&dst[0], color, width);
+#endif
+          dst += blit_stride;
+        }
+      }
+      return;
+    }
+    case CTX_COV_PATH_RGBAF_COPY:
+    case CTX_COV_PATH_GRAY8_COPY:
+    case CTX_COV_PATH_GRAYA8_COPY:
+    case CTX_COV_PATH_GRAYAF_COPY:
+    case CTX_COV_PATH_CMYKAF_COPY:
+    case CTX_COV_PATH_RGB565_COPY:
+    case CTX_COV_PATH_RGB332_COPY:
+    case CTX_COV_PATH_RGB8_COPY:
+    case CTX_COV_PATH_CMYK8_COPY:
+    case CTX_COV_PATH_CMYKA8_COPY:
+    {
+      uint8_t *color = (uint8_t*)&rasterizer->color_native;
+      unsigned int bytes = rasterizer->format->bpp/8;
+      INIT_ENV;
+
+      switch (bytes)
+      {
+        case 1:
+          {
+          uint8_t col = *color;
+          if (width == 1)
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+            *dst = col;
+            dst += blit_stride;
+          }
+          else
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+#if 0
+            uint8_t *dst_i = (uint8_t*)&dst[0];
+            for (int x = 0; x < width; x++) *dst_i++ = col;
+#else
+            memset (dst, col, width);
+#endif
+            dst += blit_stride;
+          }
+          }
+          break;
+        case 2:
+          {
+            uint16_t val = ((uint16_t*)color)[0];
+            for (unsigned int y = y0; y <= (unsigned)y1; y++)
+            {
+              uint16_t *dst_i = (uint16_t*)&dst[0];
+              for (int x = 0; x < width; x++)
+                 *dst_i++ = val;
+              dst += blit_stride;
+            }
+          }
+          break;
+        case 3:
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+            uint8_t *dst_i = (uint8_t*)&dst[0];
+            for (int x = 0; x < width; x++)
+                for (unsigned int b = 0; b < 3; b++) *dst_i++ = color[b];
+            dst += blit_stride;
+          }
+          break;
+        case 4:
+          {
+            uint32_t val = ((uint32_t*)color)[0];
+            if (width == 1)
+            for (unsigned int y = y0; y <= (unsigned)y1; y++)
+            {
+              *((uint32_t*)&dst[0]) = val;
+              dst += blit_stride;
+            }
+            else
+            for (unsigned int y = y0; y <= (unsigned)y1; y++)
+            {
+              //uint32_t *dst_i = (uint32_t*)&dst[0];
+              ctx_span_set_colorbu ((uint32_t*)&dst[0], val, width);
+              dst += blit_stride;
+            }
+          }
+          break;
+        case 5:
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+            uint8_t *dst_i = (uint8_t*)&dst[0];
+            for (int x = 0; x < width; x++)
+               for (unsigned int b = 0; b < 5; b++) *dst_i++ = color[b];
+            dst += blit_stride;
+          }
+          break;
+        case 16:
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+            uint8_t *dst_i = (uint8_t*)&dst[0];
+            for (int x = 0; x < width; x++)for (unsigned int b = 0; b < 16; b++) *dst_i++ = color[b];
+            dst += blit_stride;
+          }
+          break;
+        default:
+          for (unsigned int y = y0; y <= (unsigned)y1; y++)
+          {
+            uint8_t *dst_i = (uint8_t*)&dst[0];
+            for (int x = 0; x < width; x++)
+              for (unsigned int b = 0; b < bytes; b++)
+                *dst_i++ = color[b];
+            dst += blit_stride;
+          }
+      }
+      return;
+    }
+    case CTX_COV_PATH_RGBA8_OVER:
+    {
+      uint32_t si_ga_full = ((uint32_t*)rasterizer->color)[3];
+      uint32_t si_rb_full = ((uint32_t*)rasterizer->color)[4];
+      uint32_t si_a  = rasterizer->color[3];
+      INIT_ENV;
+
+      if (CTX_UNLIKELY(width == 1))
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          ((uint32_t*)(dst))[0] = ctx_over_RGBA8_full_2 (
+             ((uint32_t*)(dst))[0], si_ga_full, si_rb_full, si_a);
+          dst += blit_stride;
+        }
+      }
+      else
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          uint32_t *dst_i = (uint32_t*)&dst[0];
+          for (int i = 0; i < width; i++)
+          {
+            dst_i[i] = ctx_over_RGBA8_full_2 (dst_i[i], si_ga_full, si_rb_full, si_a);
+          }
+          dst += blit_stride;
+        }
+      }
+      return;
+    }
+    case CTX_COV_PATH_RGBA8_COPY_FRAGMENT:
+    {
+      CtxFragment fragment = rasterizer->fragment;
+      CtxMatrix *transform = &rasterizer->state->gstate.source_fill.transform;
+      CtxExtend extend = rasterizer->state->gstate.extend;
+      INIT_ENV;
+
+      if (fragment == ctx_fragment_image_rgba8_RGBA8_bi_scale)
+      {
+        ctx_RGBA8_image_rgba8_RGBA8_bi_scaled_fill_rect (rasterizer, x0, y0, x1,
+y1, 1);
+        return;
+      }
+      else if (fragment == ctx_fragment_image_rgba8_RGBA8_bi_affine && extend == CTX_EXTEND_NONE)
+      {
+        ctx_RGBA8_image_rgba8_RGBA8_bi_affine_fill_rect (rasterizer, x0, y0, x1,
+y1, 1);
+        return;
+      }
+
+      if (CTX_LIKELY(ctx_matrix_no_perspective (transform)))
+      {
+        int scan = rasterizer->scanline/CTX_FULL_AA;
+        float u0, v0, ud, vd, w0, wd;
+        ctx_init_uv (rasterizer, x0, scan, &u0, &v0, &w0, &ud, &vd, &wd);
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          fragment (rasterizer, u0, v0, w0, &dst[0], width, ud, vd, wd);
+          u0 -= vd;
+          v0 += ud;
+          dst += blit_stride;
+        }
+      }
+      else
+      {
+        int scan = rasterizer->scanline/CTX_FULL_AA;
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          float u0, v0, ud, vd, w0, wd;
+          ctx_init_uv (rasterizer, x0, scan + y-y0, &u0, &v0, &w0, &ud, &vd, &wd);
+          fragment (rasterizer, u0, v0, w0, &dst[0], width, ud, vd, wd);
+          dst += blit_stride;
+        }
+      }
+      return;
+    }
+    case CTX_COV_PATH_RGBA8_OVER_FRAGMENT:
+    {
+      CtxFragment fragment = rasterizer->fragment;
+      CtxExtend extend = rasterizer->state->gstate.extend;
+#if 0
+      if (fragment == ctx_fragment_image_rgba8_RGBA8_nearest_copy)
+      {
+        ctx_RGBA8_image_rgba8_RGBA8_nearest_fill_rect_copy (rasterizer, x0, y0, x1, y1, 0);
+        return;
+      }
+      else
+#endif
+      if (fragment == ctx_fragment_image_rgba8_RGBA8_bi_scale)
+      {
+        ctx_RGBA8_image_rgba8_RGBA8_bi_scaled_fill_rect (rasterizer, x0, y0, x1,
+y1, 0);
+        return;
+      }
+      else if (fragment == ctx_fragment_image_rgba8_RGBA8_bi_affine && extend == CTX_EXTEND_NONE)
+      {
+        ctx_RGBA8_image_rgba8_RGBA8_bi_affine_fill_rect (rasterizer, x0, y0, x1,
+y1, 0);
+        return;
+      }
+
+      INIT_ENV;
+      ctx_RGBA8_source_over_normal_full_cov_fragment (rasterizer,
+                         &dst[0], NULL, x0, NULL, width, y1-y0+1);
+      return;
+    }
+    break;
+    default:
+    break;
+    }
+  }
+  else
+  {
+    switch (comp)
+    {
+    case CTX_COV_PATH_RGBA8_COPY:
+    {
+      uint32_t color;
+      memcpy (&color, (uint32_t*)rasterizer->color, sizeof (color));
+      INIT_ENV;
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          uint32_t *dst_i = (uint32_t*)&dst[0];
+          for (unsigned int i = 0; i < (unsigned)width; i++)
+          {
+            dst_i[i] = ctx_lerp_RGBA8 (dst_i[i], color, cov);
+          }
+          dst += blit_stride;
+        }
+        return;
+      }
+    }
+    case CTX_COV_PATH_RGBAF_COPY:
+    {
+      float *color = ((float*)rasterizer->color);
+      float covf = cov / 255.0f;
+      INIT_ENV;
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          float *dst_f = (float*)&dst[0];
+          for (unsigned int i = 0; i < (unsigned)width; i++)
+          {
+            for (unsigned int c = 0; c < 4; c++)
+              dst_f[i*4+c] = ctx_lerpf (dst_f[i*4+c], color[c], covf);
+          }
+          dst += blit_stride;
+        }
+        return;
+      }
+    }
+    case CTX_COV_PATH_RGBA8_OVER:
+    {
+      uint32_t color;
+      memcpy (&color, (uint32_t*)rasterizer->color, sizeof (color));
+      INIT_ENV;
+      if (width == 1)
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          uint32_t *dst_i = (uint32_t*)&dst[0];
+          *dst_i = ctx_over_RGBA8 (*dst_i, color, cov);
+          dst += blit_stride;
+        }
+      }
+      else
+      {
+        for (unsigned int y = y0; y <= (unsigned)y1; y++)
+        {
+          uint32_t *dst_i = (uint32_t*)&dst[0];
+          for (unsigned int i = 0; i < (unsigned)width; i++)
+          {
+            dst_i[i] = ctx_over_RGBA8 (dst_i[i], color, cov);
+          }
+          dst += blit_stride;
+        }
+      }
+      return;
+    }
+    break;
+    default:
+    break;
+    }
+  }
+
+  INIT_ENV;
+#undef INIT_ENV
+
+
+  /* fallback */
+  {
+    uint8_t coverage[width];
+    memset (coverage, cov, sizeof (coverage) );
+    for (unsigned int y = y0; y <= (unsigned)y1; y++)
+    {
+      rasterizer->apply_coverage (rasterizer, &dst[0], rasterizer->color, x0, coverage, width);
+      rasterizer->scanline += CTX_FULL_AA;
+      dst += blit_stride;
+    }
+  }
+}
+
+void
+CTX_SIMD_SUFFIX (ctx_composite_fill_rect) (CtxRasterizer *rasterizer,
+                          float          x0,
+                          float          y0,
+                          float          x1,
+                          float          y1,
+                          uint8_t        cov);
+
+void
+CTX_SIMD_SUFFIX (ctx_composite_fill_rect) (CtxRasterizer *rasterizer,
+                          float          x0,
+                          float          y0,
+                          float          x1,
+                          float          y1,
+                          uint8_t        cov)
+{
+  if((ctx_fmod1f (x0) < 0.01f || ctx_fmod1f(x0) > 0.99f) &&
+     (ctx_fmod1f (y0) < 0.01f || ctx_fmod1f(y0) > 0.99f) &&
+     (ctx_fmod1f (x1) < 0.01f || ctx_fmod1f(x1) > 0.99f) &&
+     (ctx_fmod1f (y1) < 0.01f || ctx_fmod1f(y1) > 0.99f))
+  {
+    /* best-case scenario axis aligned rectangle */
+    ctx_composite_fill_rect_aligned (rasterizer, (int)x0, (int)y0, (int)(x1-1), (int)(y1-1), 255);
+    return;
+  }
+
+  int blit_x = rasterizer->blit_x;
+  int blit_y = rasterizer->blit_y;
+  int blit_stride = rasterizer->blit_stride;
+  int blit_width = rasterizer->blit_width;
+  int blit_height = rasterizer->blit_height;
+
+  x0 = ctx_maxf (x0, blit_x);
+  y0 = ctx_maxf (y0, blit_y);
+  x1 = ctx_minf (x1, blit_x + blit_width);
+  y1 = ctx_minf (y1, blit_y + blit_height);
+
+  uint8_t left = (int)(255-ctx_fmod1f (x0) * 255);
+  uint8_t top  = (int)(255-ctx_fmod1f (y0) * 255);
+  uint8_t right  = (int)(ctx_fmod1f (x1) * 255);
+  uint8_t bottom = (int)(ctx_fmod1f (y1) * 255);
+
+  x0 = ctx_floorf (x0);
+  y0 = ctx_floorf (y0);
+  x1 = ctx_floorf (x1+7/8.0f);
+  y1 = ctx_floorf (y1+15/15.0f);
+
+  int has_top    = (top < 255);
+  int has_bottom = (bottom <255);
+  int has_right  = (right >0);
+  int has_left   = (left >0);
+
+  if (x1 >= blit_x + blit_width) has_right = 0;
+  if (y1 >= blit_y + blit_height) has_bottom = 0;
+
+  int width = (int)(x1 - x0);
+
+  if ((width >0))
+  {
+     uint8_t *dst = ( (uint8_t *) rasterizer->buf);
+     uint8_t coverage[width+2];
+     uint32_t x0i = (int)x0+has_left;
+     uint32_t x1i = (int)x1-has_right;
+     uint32_t y0i = (int)y0+has_top;
+     uint32_t y1i = (int)y1-has_bottom;
+     dst += (((int)y0) - blit_y) * blit_stride;
+     dst += ((int)x0) * rasterizer->format->bpp/8;
+
+     if (has_top)
+     {
+       int i = 0;
+       if (has_left)
+       {
+         coverage[i++] = (top * left + 255) >> 8;
+       }
+       for (unsigned int x = x0i; x < x1i; x++)
+         coverage[i++] = top;
+       if (has_right)
+         coverage[i++]= (top * right + 255) >> 8;
+
+       rasterizer->apply_coverage (rasterizer, dst, rasterizer->color, (int)x0, coverage, width);
+       dst += blit_stride;
+     }
+
+  if (y1-y0-has_top-has_bottom > 0)
+  {
+    if (has_left)
+      ctx_composite_fill_rect_aligned (rasterizer, (int)x0, y0i,
+                                                   (int)x0, y1i-1, left);
+    if (has_right)
+      ctx_composite_fill_rect_aligned (rasterizer, (int)x1-1, y0i,
+                                                   (int)x1-1, y1i-1, right);
+
+    if (width - has_left - has_right > 0)
+      ctx_composite_fill_rect_aligned (rasterizer, x0i,y0i,
+                                          x1i-1,y1i-1,255);
+
+    dst += blit_stride * (y1i-y0i);
+  }
+    if (has_bottom)
+    {
+      int i = 0;
+      if (has_left)
+        coverage[i++] = (bottom * left + 255) >> 8;
+      for (unsigned int x = x0i; x < x1i; x++)
+        coverage[i++] = bottom;
+      coverage[i++]= (bottom * right + 255) >> 8;
+
+      rasterizer->apply_coverage (rasterizer,dst, rasterizer->color, (int)x0, coverage, width);
+    }
+  }
+}
+
+void
+CTX_SIMD_SUFFIX(ctx_composite_stroke_rect) (CtxRasterizer *rasterizer,
+                           float          x0,
+                           float          y0,
+                           float          x1,
+                           float          y1,
+                           float          line_width);
+
+void
+CTX_SIMD_SUFFIX(ctx_composite_stroke_rect) (CtxRasterizer *rasterizer,
+                           float          x0,
+                           float          y0,
+                           float          x1,
+                           float          y1,
+                           float          line_width)
+{
+      float lwmod = ctx_fmod1f (line_width);
+      int lw = (int)ctx_floorf (line_width + 0.5f);
+      int is_compat_even = (lw % 2 == 0) && (lwmod < 0.1f); // only even linewidths implemented properly
+      int is_compat_odd = (lw % 2 == 1) && (lwmod < 0.1f); // only even linewidths implemented properly
+
+      float off_x = 0;
+      float off_y = 0;
+
+      if (is_compat_odd)
+      {
+        off_x = 0.5f;
+        off_y = (CTX_FULL_AA/2)*1.0f / (CTX_FULL_AA);
+      }
+
+      if((is_compat_odd || is_compat_even) &&
+
+     ((ctx_fmod1f (x0-off_x) < 0.01f || ctx_fmod1f(x0-off_x) > 0.99f) &&
+     (ctx_fmod1f (y0-off_y) < 0.01f || ctx_fmod1f(y0-off_y) > 0.99f) &&
+     (ctx_fmod1f (x1-off_x) < 0.01f || ctx_fmod1f(x1-off_x) > 0.99f) &&
+     (ctx_fmod1f (y1-off_y) < 0.01f || ctx_fmod1f(y1-off_y) > 0.99f)))
+
+
+      {
+        int bw = lw/2+1;
+        int bwb = lw/2;
+
+        if (is_compat_even)
+        {
+          bw = lw/2;
+        }
+        /* top */
+        ctx_composite_fill_rect_aligned (rasterizer,
+                                         (int)x0-bwb, (int)y0-bwb,
+                                         (int)x1+bw-1, (int)y0+bw-1, 255);
+        /* bottom */
+        ctx_composite_fill_rect_aligned (rasterizer,
+                                         (int)x0-bwb, (int)y1-bwb,
+                                         (int)x1-bwb-1, (int)y1+bw-1, 255);
+
+        /* left */
+        ctx_composite_fill_rect_aligned (rasterizer,
+                                         (int)x0-bwb, (int)y0+1,
+                                         (int)x0+bw-1, (int)y1-bwb, 255);
+        /* right */
+        ctx_composite_fill_rect_aligned (rasterizer,
+                                         (int)x1-bwb, (int)y0+1,
+                                         (int)x1+bw-1, (int)y1+bw-1, 255);
+      }
+      else
+      {
+        float hw = line_width/2;
+
+
+        /* top */
+        ctx_composite_fill_rect (rasterizer,
+                                 x0+hw, y0-hw,
+                                 x1-hw, y0+hw, 255);
+        /* bottom */
+        ctx_composite_fill_rect (rasterizer,
+                                 x0+hw, y1-hw,
+                                 x1-hw, y1+hw, 255);
+
+        /* left */
+        ctx_composite_fill_rect (rasterizer,
+                                 x0-hw, y0+hw,
+                                 x0+hw, y1-hw, 255);
+        /* right */
+
+        ctx_composite_fill_rect (rasterizer,
+                                 x1-hw, y0+hw,
+                                 x1+hw, y1-hw, 255);
+
+        /* corners */
+
+        ctx_composite_fill_rect (rasterizer,
+                                 x0-hw, y0-hw,
+                                 x0+hw, y0+hw, 255);
+        ctx_composite_fill_rect (rasterizer,
+                                 x1-hw, y1-hw,
+                                 x1+hw, y1+hw, 255);
+        ctx_composite_fill_rect (rasterizer,
+                                 x1-hw, y0-hw,
+                                 x1+hw, y0+hw, 255);
+        ctx_composite_fill_rect (rasterizer,
+                                 x0-hw, y1-hw,
+                                 x0+hw, y1+hw, 255);
+      }
+}
+
+
+#endif
+
+static void
+CTX_SIMD_SUFFIX (ctx_composite_setup) (CtxRasterizer *rasterizer)
+{
+  if (CTX_UNLIKELY (rasterizer->comp_op==NULL))
+  {
+#if CTX_GRADIENTS
+#if CTX_GRADIENT_CACHE
+  switch (rasterizer->state->gstate.source_fill.type)
+  {
+    case CTX_SOURCE_LINEAR_GRADIENT:
+    case CTX_SOURCE_RADIAL_GRADIENT:
+      ctx_gradient_cache_prime (rasterizer);
+      break;
+    case CTX_SOURCE_TEXTURE:
+
+      _ctx_matrix_multiply (&rasterizer->state->gstate.source_fill.transform,
+                            &rasterizer->state->gstate.source_fill.set_transform,
+                            &rasterizer->state->gstate.transform);
+#if 0
+      rasterizer->state->gstate.source_fill.transform_inv =
+                           rasterizer->state->gstate.source_fill.transform;
+#endif
+      ctx_matrix_invert (&rasterizer->state->gstate.source_fill.transform);
+
+#if 0
+      if (!rasterizer->state->gstate.source_fill.texture.buffer->color_managed)
+      {
+        _ctx_texture_prepare_color_management (rasterizer->state,
+        rasterizer->state->gstate.source_fill.texture.buffer);
+      }
+#endif
+      break;
+  }
+#endif
+#endif
+  }
+    rasterizer->format->setup (rasterizer);
+
+}
+
+
+CtxPixelFormatInfo CTX_SIMD_SUFFIX(ctx_pixel_formats)[]=
+{
+#if CTX_ENABLE_RGBA8
+  {
+    CTX_FORMAT_RGBA8, 4, 32, 4, 0, 0, CTX_FORMAT_RGBA8,
+    NULL, NULL, NULL, ctx_setup_RGBA8
+  },
+#endif
+#if CTX_ENABLE_BGRA8
+  {
+    CTX_FORMAT_BGRA8, 4, 32, 4, 0, 0, CTX_FORMAT_RGBA8,
+    ctx_BGRA8_to_RGBA8, ctx_RGBA8_to_BGRA8, ctx_composite_BGRA8, ctx_setup_RGBA8,
+  },
+#endif
+#if CTX_ENABLE_GRAYF
+  {
+    CTX_FORMAT_GRAYF, 1, 32, 4 * 2, 0, 0, CTX_FORMAT_GRAYAF,
+    NULL, NULL, ctx_composite_GRAYF, ctx_setup_GRAYAF,
+  },
+#endif
+#if CTX_ENABLE_GRAYAF
+  {
+    CTX_FORMAT_GRAYAF, 2, 64, 4 * 2, 0, 0, CTX_FORMAT_GRAYAF,
+    NULL, NULL, NULL, ctx_setup_GRAYAF,
+  },
+#endif
+#if CTX_ENABLE_RGBAF
+  {
+    CTX_FORMAT_RGBAF, 4, 128, 4 * 4, 0, 0, CTX_FORMAT_RGBAF,
+    NULL, NULL, NULL, ctx_setup_RGBAF,
+  },
+#endif
+#if CTX_ENABLE_RGB8
+  {
+    CTX_FORMAT_RGB8, 3, 24, 4, 0, 0, CTX_FORMAT_RGBA8,
+    ctx_RGB8_to_RGBA8, ctx_RGBA8_to_RGB8, ctx_composite_convert, ctx_setup_RGB8,
+  },
+#endif
+#if CTX_ENABLE_GRAY1
+  {
+#if CTX_NATIVE_GRAYA8
+    CTX_FORMAT_GRAY1, 1, 1, 2, 1, 1, CTX_FORMAT_GRAYA8,
+    ctx_GRAY1_to_GRAYA8, ctx_GRAYA8_to_GRAY1, ctx_composite_convert, ctx_setup_GRAY1,
+#else
+    CTX_FORMAT_GRAY1, 1, 1, 4, 1, 1, CTX_FORMAT_RGBA8,
+    ctx_GRAY1_to_RGBA8, ctx_RGBA8_to_GRAY1, ctx_composite_convert, ctx_setup_RGB,
+#endif
+  },
+#endif
+#if CTX_ENABLE_GRAY2
+  {
+#if CTX_NATIVE_GRAYA8
+    CTX_FORMAT_GRAY2, 1, 2, 2, 4, 4, CTX_FORMAT_GRAYA8,
+    ctx_GRAY2_to_GRAYA8, ctx_GRAYA8_to_GRAY2, ctx_composite_convert, ctx_setup_GRAY2,
+#else
+    CTX_FORMAT_GRAY2, 1, 2, 4, 4, 4, CTX_FORMAT_RGBA8,
+    ctx_GRAY2_to_RGBA8, ctx_RGBA8_to_GRAY2, ctx_composite_convert, ctx_setup_RGB,
+#endif
+  },
+#endif
+#if CTX_ENABLE_GRAY4
+  {
+#if CTX_NATIVE_GRAYA8
+    CTX_FORMAT_GRAY4, 1, 4, 2, 16, 16, CTX_FORMAT_GRAYA8,
+    ctx_GRAY4_to_GRAYA8, ctx_GRAYA8_to_GRAY4, ctx_composite_convert, ctx_setup_GRAY4,
+#else
+    CTX_FORMAT_GRAY4, 1, 4, 4, 16, 16, CTX_FORMAT_GRAYA8,
+    ctx_GRAY4_to_RGBA8, ctx_RGBA8_to_GRAY4, ctx_composite_convert, ctx_setup_RGB,
+#endif
+  },
+#endif
+#if CTX_ENABLE_GRAY8
+  {
+#if CTX_NATIVE_GRAYA8
+    CTX_FORMAT_GRAY8, 1, 8, 2, 0, 0, CTX_FORMAT_GRAYA8,
+    ctx_GRAY8_to_GRAYA8, ctx_GRAYA8_to_GRAY8, ctx_composite_convert, ctx_setup_GRAY8,
+#else
+    CTX_FORMAT_GRAY8, 1, 8, 4, 0, 0, CTX_FORMAT_RGBA8,
+    ctx_GRAY8_to_RGBA8, ctx_RGBA8_to_GRAY8, ctx_composite_convert, ctx_setup_RGB,
+#endif
+  },
+#endif
+#if CTX_ENABLE_GRAYA8
+  {
+#if CTX_NATIVE_GRAYA8
+    CTX_FORMAT_GRAYA8, 2, 16, 2, 0, 0, CTX_FORMAT_GRAYA8,
+    ctx_GRAYA8_to_RGBA8, ctx_RGBA8_to_GRAYA8, NULL, ctx_setup_GRAYA8,
+#else
+    CTX_FORMAT_GRAYA8, 2, 16, 4, 0, 0, CTX_FORMAT_RGBA8,
+    ctx_GRAYA8_to_RGBA8, ctx_RGBA8_to_GRAYA8, ctx_composite_convert, ctx_setup_RGB,
+#endif
+  },
+#endif
+#if CTX_ENABLE_RGB332
+  {
+    CTX_FORMAT_RGB332, 3, 8, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_RGB332_to_RGBA8,  ctx_RGBA8_to_RGB332,
+    ctx_composite_RGB332, ctx_setup_RGB332,
+  },
+#endif
+#if CTX_ENABLE_CBRLE
+  {
+    CTX_FORMAT_CBRLE_1, 4, 1, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_3, 4, 3, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_2, 4, 2, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_4, 4, 4, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_5, 4, 5, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_6, 4, 6, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_7, 4, 7, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_8, 4, 8, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_9, 4, 9, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_10, 4, 10, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_11, 4, 11, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_12, 4, 12, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_13, 4, 13, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_14, 4, 14, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_15, 4, 15, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_16, 4, 16, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+
+  {
+    CTX_FORMAT_CBRLE_17, 4, 17, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_18, 4, 18, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_19, 4, 19, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_20, 4, 20, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_21, 4, 21, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_22, 4, 22, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+
+  {
+    CTX_FORMAT_CBRLE_23, 4, 23, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+
+
+  {
+    CTX_FORMAT_CBRLE_24, 4, 24, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE_32, 4, 32, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+  {
+    CTX_FORMAT_CBRLE, 4, 32, 4, 12, 12, CTX_FORMAT_RGBA8,
+    ctx_CBRLE_to_RGBA8,  ctx_RGBA8_to_CBRLE,
+    ctx_composite_CBRLE, ctx_setup_CBRLE,
+  },
+#endif
+#if CTX_ENABLE_RGB565
+  {
+    CTX_FORMAT_RGB565, 3, 16, 4, 16, 32, CTX_FORMAT_RGBA8,
+    ctx_RGB565_to_RGBA8,  ctx_RGBA8_to_RGB565,
+    ctx_composite_RGB565, ctx_setup_RGB565,
+  },
+#endif
+#if CTX_ENABLE_RGB565_BYTESWAPPED
+  {
+    CTX_FORMAT_RGB565_BYTESWAPPED, 3, 16, 4, 16, 32, CTX_FORMAT_RGBA8,
+    ctx_RGB565_BS_to_RGBA8,
+    ctx_RGBA8_to_RGB565_BS,
+    ctx_composite_RGB565_BS, ctx_setup_RGB565,
+  },
+#endif
+#if CTX_ENABLE_CMYKAF
+  {
+    CTX_FORMAT_CMYKAF, 5, 160, 4 * 5, 0, 0, CTX_FORMAT_CMYKAF,
+    NULL, NULL, NULL, ctx_setup_CMYKAF,
+  },
+#endif
+#if CTX_ENABLE_CMYKA8
+  {
+    CTX_FORMAT_CMYKA8, 5, 40, 4 * 5, 0, 0, CTX_FORMAT_CMYKAF,
+    NULL, NULL, ctx_composite_CMYKA8, ctx_setup_CMYKA8,
+  },
+#endif
+#if CTX_ENABLE_CMYK8
+  {
+    CTX_FORMAT_CMYK8, 5, 32, 4 * 5, 0, 0, CTX_FORMAT_CMYKAF,
+    NULL, NULL, ctx_composite_CMYK8, ctx_setup_CMYK8,
+  },
+#endif
+#if CTX_ENABLE_YUV420
+  {
+    CTX_FORMAT_YUV420, 1, 8, 4, 0, 0, CTX_FORMAT_RGBA8,
+    NULL, NULL, ctx_composite_convert, ctx_setup_RGB,
+  },
+#endif
+  {
+    CTX_FORMAT_NONE
+  }
+};
+
+
+
+
+#endif // CTX_COMPOSITE
+
+#endif // CTX_IMPLEMENTATION
+
+#if CTX_IMPLEMENTATION || CTX_SIMD_BUILD
+#if CTX_COMPOSITE 
+
+#define CTX_AA_HALFSTEP2   (CTX_FULL_AA/2)
+#define CTX_AA_HALFSTEP    ((CTX_FULL_AA/2)+1)
+
+CTX_INLINE static int ctx_compare_edges (const void *ap, const void *bp)
+{
+  const CtxSegment *a = (const CtxSegment *) ap;
+  const CtxSegment *b = (const CtxSegment *) bp;
+  return a->data.s16[1] - b->data.s16[1];
+}
+
+CTX_INLINE static int ctx_edge_qsort_partition (CtxSegment *A, int low, int high)
+{
+  CtxSegment pivot = A[ (high+low) /2];
+  int i = low;
+  int j = high;
+  while (i <= j)
+    {
+      while (ctx_compare_edges (&A[i], &pivot) < 0) { i ++; }
+      while (ctx_compare_edges (&pivot, &A[j]) < 0) { j --; }
+      if (i <= j)
+        {
+          CtxSegment tmp = A[i];
+          A[i] = A[j];
+          A[j] = tmp;
+          i++;
+          j--;
+        }
+    }
+  return i;
+}
+
+static inline void ctx_edge_qsort (CtxSegment *entries, int low, int high)
+{
+  int p = ctx_edge_qsort_partition (entries, low, high);
+  if (low < p -1 )
+    { ctx_edge_qsort (entries, low, p - 1); }
+  if (low < high)
+    { ctx_edge_qsort (entries, p, high); }
+}
+
+static inline void ctx_rasterizer_sort_edges (CtxRasterizer *rasterizer)
+{
+  ctx_edge_qsort ((CtxSegment*)& (rasterizer->edge_list.entries[0]), 0, rasterizer->edge_list.count-1);
+}
+
+static inline void ctx_rasterizer_discard_edges (CtxRasterizer *rasterizer)
+{
+  int scanline = rasterizer->scanline;
+  int next_scanline = scanline + CTX_FULL_AA;
+  int limit3 = CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA;
+  CtxSegment *segments = &((CtxSegment*)(rasterizer->edge_list.entries))[0];
+  int *edges = rasterizer->edges;
+  for (unsigned int i = 0; i < rasterizer->active_edges; i++)
+    {
+      CtxSegment *segment = segments + edges[i];
+      int edge_end = segment->data.s16[3]-1;
+      if (edge_end < scanline)
+        {
+
+          int dx_dy = abs(segment->delta);
+          rasterizer->needs_aa3  -= (dx_dy > limit3);
+          rasterizer->needs_aa5  -= (dx_dy > CTX_RASTERIZER_AA_SLOPE_LIMIT5);
+          rasterizer->needs_aa15 -= (dx_dy > CTX_RASTERIZER_AA_SLOPE_LIMIT15);
+          rasterizer->edges[i] = rasterizer->edges[rasterizer->active_edges-1];
+          rasterizer->active_edges--;
+          i--;
+        }
+      else if (edge_end < next_scanline)
+        rasterizer->ending_edges++;
+    }
+#if 0
+  // perhaps we should - but for 99% of the cases we do not need to, so we skip it
+  for (int i = 0; i < rasterizer->pending_edges; i++)
+    {
+      int edge_end = ((CtxSegment*)(rasterizer->edge_list.entries))[rasterizer->edges[CTX_MAX_EDGES-1-i]].data.s16[3]-1;
+      if (edge_end < scanline + CTX_FULL_AA)
+        rasterizer->ending_edges++;
+    }
+#endif
+}
+
+inline static void ctx_rasterizer_increment_edges (CtxRasterizer *rasterizer, int count)
+{
+  rasterizer->scanline += count;
+  CtxSegment *__restrict__ segments = &((CtxSegment*)(rasterizer->edge_list.entries))[0];
+  unsigned int active_edges = rasterizer->active_edges;
+  unsigned int pending_edges = rasterizer->pending_edges;
+  unsigned int pending_base = CTX_MAX_EDGES-pending_edges;
+  for (unsigned int i = 0; i < active_edges; i++)
+    {
+      CtxSegment *segment = segments + rasterizer->edges[i];
+      segment->val += segment->delta * count;
+    }
+  for (unsigned int i = 0; i < pending_edges; i++)
+    {
+      CtxSegment *segment = segments + rasterizer->edges[pending_base+i];
+      segment->val += segment->delta * count;
+    }
+}
+
+/* feeds up to rasterizer->scanline,
+   keeps a pending buffer of edges - that encompass
+   the full incoming scanline,
+   feed until the start of the scanline and check for need for aa
+   in all of pending + active edges, then
+   again feed_edges until middle of scanline if doing non-AA
+   or directly render when doing AA
+*/
+inline static void ctx_edge2_insertion_sort (CtxSegment *segments, int *entries, unsigned int count)
+{
+  for(unsigned int i=1; i<count; i++)
+   {
+     int temp = entries[i];
+     int j = i-1;
+     while (j >= 0 && segments[temp].val - segments[entries[j]].val < 0)
+     {
+       entries[j+1] = entries[j];
+       j--;
+     }
+     entries[j+1] = temp;
+   }
+}
+
+inline static int ctx_edge2_compare2 (CtxSegment *segments, int a, int b)
+{
+  CtxSegment *seg_a = &segments[a];
+  CtxSegment *seg_b = &segments[b];
+  int minval_a = ctx_mini (seg_a->val - seg_a->delta * CTX_AA_HALFSTEP2, seg_a->val + seg_a->delta * CTX_AA_HALFSTEP);
+  int minval_b = ctx_mini (seg_b->val - seg_b->delta * CTX_AA_HALFSTEP2, seg_b->val + seg_b->delta * CTX_AA_HALFSTEP);
+  return minval_a - minval_b;
+}
+
+inline static void ctx_edge2_insertion_sort2 (CtxSegment *segments, int *entries, unsigned int count)
+{
+  for(unsigned int i=1; i<count; i++)
+   {
+     int temp = entries[i];
+     int j = i-1;
+     while (j >= 0 && ctx_edge2_compare2 (segments, temp, entries[j]) < 0)
+     {
+       entries[j+1] = entries[j];
+       j--;
+     }
+     entries[j+1] = temp;
+   }
+}
+
+inline static void ctx_rasterizer_feed_edges (CtxRasterizer *rasterizer, int apply2_sort)
+{
+  int miny;
+  CtxSegment *__restrict__ entries = (CtxSegment*)&rasterizer->edge_list.entries[0];
+  int *edges = rasterizer->edges;
+  unsigned int pending_edges   = rasterizer->pending_edges;
+  rasterizer->horizontal_edges = 0;
+  rasterizer->ending_edges     = 0;
+  for (unsigned int i = 0; i < pending_edges; i++)
+    {
+      if (entries[rasterizer->edges[CTX_MAX_EDGES-1-i]].data.s16[1] - 1 <= rasterizer->scanline &&
+          rasterizer->active_edges < CTX_MAX_EDGES-2)
+        {
+          unsigned int no = rasterizer->active_edges;
+          rasterizer->active_edges++;
+          edges[no] = edges[CTX_MAX_EDGES-1-i];
+          edges[CTX_MAX_EDGES-1-i] =
+            edges[CTX_MAX_EDGES-1-pending_edges + 1];
+          pending_edges--;
+          i--;
+        }
+    }
+  int limit3 = CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA;
+  int scanline = rasterizer->scanline;
+  int next_scanline = scanline + CTX_FULL_AA;
+  unsigned int edge_pos = rasterizer->edge_pos;
+  unsigned int edge_count = rasterizer->edge_list.count;
+  while ((edge_pos < edge_count &&
+         (miny=entries[edge_pos].data.s16[1]-1)  <= next_scanline))
+    {
+      if (rasterizer->active_edges < CTX_MAX_EDGES-2 &&
+      entries[edge_pos].data.s16[3]-1 /* (maxy) */  >= scanline)
+        {
+          int dy = (entries[edge_pos].data.s16[3] - 1 - miny);
+          if (dy)
+            {
+              int yd = scanline - miny;
+              unsigned int no = rasterizer->active_edges;
+              rasterizer->active_edges++;
+              unsigned int index = edges[no] = edge_pos;
+              int x0 = entries[index].data.s16[0];
+              int x1 = entries[index].data.s16[2];
+              int dx_dy = CTX_RASTERIZER_EDGE_MULTIPLIER * (x1 - x0) / dy;
+              entries[index].delta = dx_dy;
+              entries[index].val = x0 * CTX_RASTERIZER_EDGE_MULTIPLIER +
+                                         (yd * dx_dy);
+
+              {
+                int abs_dx_dy = abs(dx_dy);
+                rasterizer->needs_aa3  += (abs_dx_dy > limit3);
+                rasterizer->needs_aa5  += (abs_dx_dy > CTX_RASTERIZER_AA_SLOPE_LIMIT5);
+                rasterizer->needs_aa15 += (abs_dx_dy > CTX_RASTERIZER_AA_SLOPE_LIMIT15);
+              }
+
+              if (miny > scanline &&
+                  pending_edges < CTX_MAX_PENDING-1)
+              {
+                  /* it is a pending edge - we add it to the end of the array
+                     and keep a different count for items stored here, like
+                     a heap and stack growing against each other
+                  */
+                    edges[CTX_MAX_EDGES-1-pending_edges] =
+                    rasterizer->edges[no];
+                    pending_edges++;
+                    rasterizer->active_edges--;
+              }
+            }
+          else
+            rasterizer->horizontal_edges ++;
+        }
+      edge_pos++;
+    }
+    rasterizer->pending_edges = pending_edges;
+    rasterizer->edge_pos = edge_pos;
+    ctx_rasterizer_discard_edges (rasterizer);
+    if (apply2_sort)
+      ctx_edge2_insertion_sort2 ((CtxSegment*)rasterizer->edge_list.entries, rasterizer->edges, rasterizer->active_edges);
+    else
+      ctx_edge2_insertion_sort ((CtxSegment*)rasterizer->edge_list.entries, rasterizer->edges, rasterizer->active_edges);
+}
+#undef CTX_CMPSWP
+
+static inline void ctx_coverage_post_process (CtxRasterizer *rasterizer, unsigned int minx, unsigned int maxx, uint8_t *coverage, int *first_col, int *last_col)
+{
+#if CTX_ENABLE_SHADOW_BLUR
+  if (CTX_UNLIKELY(rasterizer->in_shadow))
+  {
+    float radius = rasterizer->state->gstate.shadow_blur;
+    unsigned int dim = 2 * radius + 1;
+    if (CTX_UNLIKELY (dim > CTX_MAX_GAUSSIAN_KERNEL_DIM))
+      dim = CTX_MAX_GAUSSIAN_KERNEL_DIM;
+    {
+      uint16_t temp[maxx-minx+1];
+      memset (temp, 0, sizeof (temp));
+      for (unsigned int x = dim/2; x < maxx-minx + 1 - dim/2; x ++)
+        for (unsigned int u = 0; u < dim; u ++)
+        {
+          temp[x] += coverage[minx+x+u-dim/2] * rasterizer->kernel[u] * 256;
+        }
+      for (unsigned int x = 0; x < maxx-minx + 1; x ++)
+        coverage[minx+x] = temp[x] >> 8;
+    }
+  }
+#endif
+
+#if CTX_ENABLE_CLIP
+  if (CTX_UNLIKELY(rasterizer->clip_buffer &&  !rasterizer->clip_rectangle))
+  {
+  int scanline     = rasterizer->scanline - CTX_FULL_AA; // we do the
+                                                 // post process after
+                                                 // coverage generation icnrement
+    /* perhaps not working right for clear? */
+    int y = scanline / CTX_FULL_AA;//rasterizer->aa;
+    uint8_t *clip_line = &((uint8_t*)(rasterizer->clip_buffer->data))[rasterizer->blit_width*y];
+    // XXX SIMD candidate
+    for (unsigned int x = minx; x <= maxx; x ++)
+    {
+#if CTX_1BIT_CLIP
+       coverage[x] = (coverage[x] * ((clip_line[x/8]&(1<<(x&8)))?255:0))/255;
+#else
+       coverage[x] = (255 + coverage[x] * clip_line[x-rasterizer->blit_x])>>8;
+#endif
+    }
+  }
+#endif
+}
+
+#define CTX_EDGE(no)      entries[edges[no]]
+#define CTX_EDGE_YMIN     (segment->data.s16[1]-1)
+
+#define UPDATE_PARITY \
+        if (CTX_LIKELY(scanline!=CTX_EDGE_YMIN))\
+        { \
+          if (is_winding)\
+             parity = parity + -1+2*(segment->code == CTX_EDGE_FLIPPED);\
+          else\
+             parity = 1-parity; \
+        }
+
+
+inline static void
+ctx_rasterizer_generate_coverage (CtxRasterizer *rasterizer,
+                                  int            minx,
+                                  int            maxx,
+                                  uint8_t       *coverage,
+                                  int            is_winding,
+                                  const uint8_t  aa_factor,
+                                  const uint8_t  fraction)
+{
+  CtxSegment *entries      = (CtxSegment*)(&rasterizer->edge_list.entries[0]);
+  int        *edges        = rasterizer->edges;
+  int         scanline     = rasterizer->scanline;
+  int         active_edges = rasterizer->active_edges;
+  int         parity       = 0;
+  coverage -= minx;
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment *segment = &entries[edges[t]];
+      UPDATE_PARITY;
+
+      if (parity)
+        {
+          CtxSegment *next_segment = &entries[edges[t+1]];
+          const int x0 = segment->val;
+          const int x1 = next_segment->val;
+          int graystart = x0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int grayend   = x1 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int first     = graystart >> 8;
+          int last      = grayend   >> 8;
+
+          if (CTX_UNLIKELY (first < minx))
+          { 
+            first = minx;
+            graystart=0;
+          }
+          if (CTX_UNLIKELY (last > maxx))
+          {
+            last = maxx;
+            grayend=255;
+          }
+
+          graystart = fraction- (graystart&0xff)/aa_factor;
+          grayend   = (grayend & 0xff) / aa_factor;
+
+          if (first < last)
+          {
+              coverage[first] += graystart;
+              for (int x = first + 1; x < last; x++)
+                coverage[x]  += fraction;
+              coverage[last] += grayend;
+          }
+          else if (first == last)
+            coverage[first] += (graystart-fraction+grayend);
+        }
+   }
+}
+
+inline static void
+ctx_rasterizer_generate_coverage_set (CtxRasterizer *rasterizer,
+                                      int            minx,
+                                      int            maxx,
+                                      uint8_t       *coverage,
+                                      int            is_winding)
+{
+  CtxSegment *entries = (CtxSegment*)(&rasterizer->edge_list.entries[0]);
+  int      *edges = rasterizer->edges;
+  int scanline     = rasterizer->scanline;
+  int active_edges = rasterizer->active_edges;
+  int parity = 0;
+  coverage -= minx;
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment *segment = &entries[edges[t]];
+      UPDATE_PARITY;
+
+      if (parity)
+        {
+          CtxSegment *next_segment = &entries[edges[t+1]];
+          const int x0        = segment->val;
+          const int x1        = next_segment->val;
+          int graystart = x0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int grayend   = x1 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int first     = graystart >> 8;
+          int last      = grayend   >> 8;
+
+          if (CTX_UNLIKELY (first < minx))
+          { 
+            first = minx;
+            graystart=0;
+          }
+          if (CTX_UNLIKELY (last > maxx))
+          {
+            last = maxx;
+            grayend=255;
+          }
+
+          graystart = (graystart&0xff) ^ 255;
+          grayend   = (grayend & 0xff);
+
+          coverage[first] += graystart;
+          coverage[last]  += grayend;
+          if (first + 1< last)
+              memset(&coverage[first+1], 255, last-(first+1));
+        }
+   }
+}
+
+
+inline static void
+ctx_rasterizer_generate_coverage_apply (CtxRasterizer *rasterizer,
+                                        int            minx,
+                                        int            maxx,
+                                        uint8_t* __restrict__ coverage,
+                                        int            is_winding,
+                                        CtxCovPath     comp)
+{
+  CtxSegment *entries = (CtxSegment*)(&rasterizer->edge_list.entries[0]);
+  int *edges          = rasterizer->edges;
+  int scanline        = rasterizer->scanline;
+  const int bpp       = rasterizer->format->bpp;
+  int active_edges    = rasterizer->active_edges;
+  int parity          = 0;
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+  uint32_t *src_pixp;
+  uint32_t src_pix, si_ga, si_rb, si_ga_full, si_rb_full, si_a;
+  if (comp != CTX_COV_PATH_FALLBACK &&
+      comp != CTX_COV_PATH_RGBA8_COPY_FRAGMENT &&
+      comp != CTX_COV_PATH_RGBA8_OVER_FRAGMENT)
+  {
+    src_pixp   = ((uint32_t*)rasterizer->color);
+    src_pix    = src_pixp[0];
+    si_ga      = ((uint32_t*)rasterizer->color)[1];
+    si_rb      = ((uint32_t*)rasterizer->color)[2];
+    si_ga_full = ((uint32_t*)rasterizer->color)[3];
+    si_rb_full = ((uint32_t*)rasterizer->color)[4];
+    si_a       = src_pix >> 24;
+  }
+  else
+  {
+    src_pix    =
+    si_ga      =
+    si_rb      =
+    si_ga_full =
+    si_rb_full =
+    si_a       = 0;
+    src_pixp = &src_pix;
+  }
+#endif
+
+  uint8_t *dst = ( (uint8_t *) rasterizer->buf) +
+         (rasterizer->blit_stride * (scanline / CTX_FULL_AA));
+  int accumulator_x=0;
+  uint8_t accumulated = 0;
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment *segment = &entries[edges[t]];
+      UPDATE_PARITY;
+
+       if (parity)
+        {
+          CtxSegment   *next_segment = &entries[edges[t+1]];
+          const int x0        = segment->val;
+          const int x1        = next_segment->val;
+
+          int graystart = x0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int first = graystart >> 8;
+          int grayend = x1 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int last = grayend >> 8;
+
+          if (CTX_UNLIKELY(first < minx))
+          { 
+            graystart = 0;
+            first = minx;
+          }
+          if (CTX_UNLIKELY(last > maxx))
+          {
+             last = maxx;
+             grayend=255;
+          }
+          graystart = (graystart&0xff) ^ 255;
+
+          grayend     = (grayend & 0xff);
+
+          if (accumulated)
+          {
+            if (accumulator_x == first)
+            {
+              graystart += accumulated;
+            }
+            else
+            {
+              uint32_t* dst_pix = (uint32_t*)(&dst[(accumulator_x*bpp)/8]);
+              switch (comp)
+              {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+                case CTX_COV_PATH_RGBA8_COPY:
+                  *dst_pix = ctx_lerp_RGBA8_2(*dst_pix, si_ga, si_rb, accumulated);
+                  break;
+                case CTX_COV_PATH_RGBA8_OVER:
+                  *dst_pix = ctx_over_RGBA8_2(*dst_pix, si_ga, si_rb, si_a, accumulated);
+                  break;
+#endif
+                default:
+                  rasterizer->apply_coverage (rasterizer, (uint8_t*)dst_pix, rasterizer->color, accumulator_x, &accumulated, 1);
+              }
+            }
+            accumulated = 0;
+          }
+
+          if (first < last)
+          {
+            switch (comp)
+            {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+              case CTX_COV_PATH_RGBA8_COPY:
+              {
+                uint32_t* dst_pix = (uint32_t*)(&dst[(first *bpp)/8]);
+                *dst_pix = ctx_lerp_RGBA8_2(*dst_pix, si_ga, si_rb, graystart);
+
+                dst_pix++;
+                ctx_span_set_colorb (dst_pix, src_pix, last - first - 1);
+              }
+              break;
+#if CTX_ENABLE_CBRLE
+              case CTX_COV_PATH_CBRLE_COPY:
+              {
+              uint8_t* dsts = (uint8_t*)(&dst[(first *bpp)/8]);
+              uint8_t  startcov = graystart;
+              rasterizer->apply_coverage (rasterizer, (uint8_t*)dsts, rasterizer->color, first, &startcov, 1);
+
+              if (last-(first+1) > 0)
+              ctx_CBRLE_compress (rasterizer->color,
+                                   dst,
+                                   rasterizer->blit_width,
+                                   rasterizer->blit_stride,
+                                   first+1, last-(first+1), 
+                                   CBRLE_MODE_SET_COLOR, NULL, 1);
+
+              }
+              break;
+#endif
+            case CTX_COV_PATH_RGB8_COPY:
+            case CTX_COV_PATH_RGBAF_COPY:
+            case CTX_COV_PATH_RGB565_COPY:
+            case CTX_COV_PATH_RGB332_COPY:
+            case CTX_COV_PATH_GRAYA8_COPY:
+            case CTX_COV_PATH_GRAYAF_COPY:
+            case CTX_COV_PATH_CMYKAF_COPY:
+            case CTX_COV_PATH_GRAY8_COPY:
+            case CTX_COV_PATH_CMYKA8_COPY:
+            case CTX_COV_PATH_CMYK8_COPY:
+            {
+              uint8_t* dsts = (uint8_t*)(&dst[(first *bpp)/8]);
+              uint8_t  startcov = graystart;
+              rasterizer->apply_coverage (rasterizer, (uint8_t*)dsts, rasterizer->color, first, &startcov, 1);
+              uint8_t* dst_i = (uint8_t*)dsts;
+              uint8_t *color = ((uint8_t*)&rasterizer->color_native);
+              unsigned int bytes = rasterizer->format->bpp/8;
+              dst_i+=bytes;
+
+              unsigned int count = last-(first+1);//  (last - post) - (first+pre) + 1;
+
+              //for (int i = first + pre; i <= last - post; i++)
+              if (CTX_LIKELY(count>0))
+              switch (bytes)
+              {
+                case 1:
+#if 1
+                  memset (dst_i, color[0], count);
+#else
+                  while (count--)
+                  {
+                    dst_i[0] = color[0];
+                    dst_i++;
+                  }
+#endif
+                  break;
+                case 2:
+                  {
+                    uint16_t val = ((uint16_t*)color)[0];
+                    while (count--)
+                    {
+                      ((uint16_t*)dst_i)[0] = val;
+                      dst_i+=2;
+                    }
+                  }
+                  break;
+                case 4:
+                  {
+                    uint32_t val = ((uint32_t*)color)[0];
+                    ctx_span_set_colorb ((uint32_t*)dst, val, count);
+                  }
+                  break;
+                case 16:
+                  ctx_span_set_color_x4 ((uint32_t*)dst, (uint32_t*)color, count);
+                  break;
+                case 3:
+                 while (count--)
+                 {
+                   *dst_i ++ = color[0];
+                   *dst_i ++ = color[1];
+                   *dst_i ++ = color[2];
+                 }
+                 break;
+                case 5:
+                 while (count--)
+                 {
+                   *dst_i ++ = color[0];
+                   *dst_i ++ = color[1];
+                   *dst_i ++ = color[2];
+                   *dst_i ++ = color[3];
+                   *dst_i ++ = color[4];
+                 }
+                 break;
+                default:
+                 while (count--)
+                 {
+                   for (unsigned int b = 0; b < bytes; b++)
+                     *dst_i++ = color[b];
+                 }
+                  break;
+               }
+            }
+              break;
+
+#if CTX_ENABLE_GRAY4
+              case CTX_COV_PATH_GRAY4_COPY:
+              {
+                uint8_t* dstp = (uint8_t*)(&dst[(first *bpp)/8]);
+                uint8_t *srcp = (uint8_t*)src_pixp;
+                uint8_t  startcov = graystart;
+                rasterizer->apply_coverage (rasterizer, (uint8_t*)dstp, rasterizer->color, first, &startcov, 1);
+                dstp = (uint8_t*)(&dst[((first+1)*bpp)/8]);
+                unsigned int count = last - first - 1;
+                int val = srcp[0]/17;
+
+                uint8_t val_x2 = val + (val << 4);
+                {
+                  int x = first + 1;
+                  for (unsigned int i = 0; i < count && x & 1; count--)
+                  {
+                     int bitno = x & 1;
+                     *dstp &= ~(15<<(bitno*4));
+                     *dstp |= (val<<(bitno*4));
+                     dstp += (bitno == 1);
+                     x++;
+                  }
+
+                  for (unsigned int i = 0; i < count && count>2; count-=2, x+=2, dstp++)
+                     *dstp = val_x2;
+
+                  for (unsigned int i = 0; i < count; count--)
+                  {
+                     int bitno = x & 1;
+                     *dstp &= ~(15<<(bitno*4));
+                     *dstp |= (val<<(bitno*4));
+                     dstp += (bitno == 1);
+                     x++;
+                  }
+                }
+              }
+              break;
+#endif
+
+#if CTX_ENABLE_GRAY2
+              case CTX_COV_PATH_GRAY2_COPY:
+              {
+                uint8_t* dstp = (uint8_t*)(&dst[(first *bpp)/8]);
+                uint8_t *srcp = (uint8_t*)src_pixp;
+                uint8_t  startcov = graystart;
+                rasterizer->apply_coverage (rasterizer, (uint8_t*)dstp, rasterizer->color, first, &startcov, 1);
+                dstp = (uint8_t*)(&dst[((first+1)*bpp)/8]);
+                unsigned int count = last - first - 1;
+                int val = srcp[0]/85; 
+
+                uint8_t val_x4 = val + (val << 2) + (val << 4) + (val << 6);
+                {
+                  int x = first + 1;
+                  for (unsigned int i = 0; i < count && x & 3; count--)
+                  {
+                     int bitno = x & 3;
+                     *dstp &= ~(3<<(bitno*2));
+                     *dstp |= (val<<(bitno*2));
+                     dstp += (bitno == 3);
+                     x++;
+                  }
+
+                  for (unsigned int i = 0; i < count && count>4; count-=4, x+=4, dstp++)
+                     *dstp = val_x4;
+
+                  for (unsigned int i = 0; i < count; count--)
+                  {
+                     int bitno = x & 3;
+                     *dstp &= ~(3<<(bitno*2));
+                     *dstp |= (val<<(bitno*2));
+                     dstp += (bitno == 3);
+                     x++;
+                  }
+                }
+              }
+              break;
+#endif
+
+#if CTX_ENABLE_GRAY1
+              case CTX_COV_PATH_GRAY1_COPY:
+              {
+                uint8_t* dstp = (uint8_t*)(&dst[(first *bpp)/8]);
+                uint8_t *srcp = (uint8_t*)src_pixp;
+                uint8_t  startcov = graystart;
+                rasterizer->apply_coverage (rasterizer, (uint8_t*)dstp, rasterizer->color, first, &startcov, 1);
+                dstp = (uint8_t*)(&dst[((first+1)*bpp)/8]);
+                unsigned int count = last - first - 1;
+                if (srcp[0]>=127)
+                {
+                  int x = first + 1;
+                  for (unsigned int i = 0; i < count && x & 7; count--)
+                  {
+                     int bitno = x & 7;
+                     *dstp |= (1<<bitno);
+                     dstp += (bitno == 7);
+                     x++;
+                  }
+
+                  for (unsigned int i = 0; i < count && count>8; count-=8)
+                  {
+                     *dstp = 255;
+                     dstp++;
+                     x+=8;
+                  }
+
+                  for (unsigned int i = 0; i < count; i++)
+                  {
+                     int bitno = x & 7;
+                     *dstp |= (1<<bitno);
+                     dstp += (bitno == 7);
+                     x++;
+                  }
+                }
+                else
+                {
+                  unsigned int x = first + 1;
+                  for (unsigned int i = 0; i < count && x & 7; count--)
+                  {
+                     int bitno = x & 7;
+                     *dstp &= ~(1<<bitno);
+                     dstp += (bitno == 7);
+                     x++;
+                  }
+
+                  for (unsigned int i = 0; i < count && count>8; count-=8)
+                  {
+                     *dstp = 0;
+                     dstp++;
+                     x+=8;
+                  }
+
+                  for (unsigned int i = 0; i < count; i++)
+                  {
+                     int bitno = x & 7;
+                     *dstp &= ~(1<<bitno);
+                     dstp += (bitno == 7);
+                     x++;
+                  }
+
+                }
+              }
+              break;
+#endif
+
+            case CTX_COV_PATH_RGBA8_OVER:
+            {
+              uint32_t* dst_pix = (uint32_t*)(&dst[(first *bpp)/8]);
+              *dst_pix = ctx_over_RGBA8_2(*dst_pix, si_ga, si_rb, si_a, graystart);
+              dst_pix++;
+              for (unsigned int i = first + 1; i < (unsigned)last; i++)
+              {
+                *dst_pix = ctx_over_RGBA8_full_2(*dst_pix, si_ga_full, si_rb_full, si_a);
+                dst_pix++;
+              }
+            }
+            break;
+            case CTX_COV_PATH_RGBA8_COPY_FRAGMENT:
+            {
+              float u0 = 0; float v0 = 0;
+              float ud = 0; float vd = 0;
+              float w0 = 1; float wd = 0;
+              uint8_t gs = graystart;
+              ctx_RGBA8_source_copy_normal_fragment (rasterizer, &dst[(first * bpp)/8], NULL, first, &gs, 1);
+              ctx_init_uv (rasterizer, first+1, scanline/CTX_FULL_AA,&u0, &v0, &w0, &ud, &vd, &wd);
+              rasterizer->fragment (rasterizer, u0, v0, w0, &dst[((first+1)*bpp)/8], last-first-1, ud, vd, wd);
+            }
+            break;
+              case CTX_COV_PATH_RGBA8_OVER_FRAGMENT:
+            {
+              uint8_t gs = graystart;
+              ctx_RGBA8_source_over_normal_fragment (rasterizer, &dst[(first * bpp)/8], NULL, first, &gs, 1);
+              ctx_RGBA8_source_over_normal_full_cov_fragment (rasterizer,
+                                                     &dst[((first+1)*bpp)/8], NULL, first + 1, NULL, last-first-1, 1);
+            }
+            break;
+#endif
+              default:
+            {
+#if static_OPAQUE
+              uint8_t *opaque = &rasterizer->opaque[0];
+#else
+              uint8_t opaque[last-first];
+              memset (opaque, 255, sizeof (opaque));
+#endif
+              opaque[0] = graystart;
+              rasterizer->apply_coverage (rasterizer,
+                                          &dst[(first * bpp)/8],
+                                          rasterizer->color, first, opaque, last-first);
+
+#if static_OPAQUE
+              opaque[0] = 255;
+#endif
+            }
+            }
+            accumulated = grayend;
+          }
+          else if (first == last)
+          {
+            accumulated = (graystart-(grayend^255));
+          }
+          accumulator_x = last;
+        }
+   }
+
+   if (accumulated)
+   {
+     uint32_t* dst_pix = (uint32_t*)(&dst[(accumulator_x*bpp)/8]);
+     switch (comp)
+     {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+       case CTX_COV_PATH_RGBA8_COPY:
+         *dst_pix = ctx_lerp_RGBA8_2(*dst_pix, si_ga, si_rb, accumulated);
+         break;
+       case CTX_COV_PATH_RGBA8_OVER:
+         *dst_pix = ctx_over_RGBA8_2(*dst_pix, si_ga, si_rb, si_a, accumulated);
+         break;
+#endif
+       default:
+         rasterizer->apply_coverage (rasterizer, (uint8_t*)dst_pix, rasterizer->color, accumulator_x, &accumulated, 1);
+     }
+   }
+}
+
+inline static int ctx_rasterizer_is_simple (CtxRasterizer *rasterizer)
+{
+  if (rasterizer->fast_aa == 0 ||
+      rasterizer->ending_edges ||
+      rasterizer->pending_edges)
+   return 0;
+  int *edges  = rasterizer->edges;
+  CtxSegment *segments = &((CtxSegment*)(rasterizer->edge_list.entries))[0];
+
+  int active_edges = rasterizer->active_edges;
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment *segment0 = segments + edges[t];
+      CtxSegment *segment1 = segments + edges[t+1];
+      const int delta0    = segment0->delta;
+      const int delta1    = segment1->delta;
+      const int x0        = segment0->val;
+      const int x1        = segment1->val;
+      int x0_end   = x0 + delta0 * CTX_AA_HALFSTEP;
+      int x1_end   = x1 + delta1 * CTX_AA_HALFSTEP;
+      int x0_start = x0 - delta0 * CTX_AA_HALFSTEP2;
+      int x1_start = x1 - delta1 * CTX_AA_HALFSTEP2;
+      if (x1_end < x0_end   ||
+          x1_start < x0_end ||
+          x1_end < x0_start
+         )
+         return 0;
+    }
+  return 1;
+}
+
+
+inline static void
+ctx_rasterizer_generate_coverage_set2 (CtxRasterizer *rasterizer,
+                                         int            minx,
+                                         int            maxx,
+                                         uint8_t       *coverage,
+                                         int            is_winding)
+{
+  CtxSegment *entries = (CtxSegment*)(&rasterizer->edge_list.entries[0]);
+  int *edges  = rasterizer->edges;
+  int scanline        = rasterizer->scanline;
+  int active_edges    = rasterizer->active_edges;
+  int parity        = 0;
+
+  coverage -= minx;
+
+  const int minx_ = minx * CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV;
+  const int maxx_ = maxx * CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV;
+
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment   *segment = &entries[edges[t]];
+      UPDATE_PARITY;
+
+       if (parity)
+        {
+          CtxSegment   *next_segment = &entries[edges[t+1]];
+          const int x0        = segment->val;
+          const int x1        = next_segment->val;
+          const int delta0    = segment->delta;
+          const int delta1    = next_segment->delta;
+
+          int x0_start = x0 - delta0 * CTX_AA_HALFSTEP2;
+          int x1_start = x1 - delta1 * CTX_AA_HALFSTEP2;
+          int x0_end   = x0 + delta0 * CTX_AA_HALFSTEP;
+          int x1_end   = x1 + delta1 * CTX_AA_HALFSTEP;
+
+          int graystart = x0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int grayend   = x1 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int first     = graystart >> 8;
+          int last      = grayend   >> 8;
+
+          if (CTX_UNLIKELY (first < minx))
+          { 
+            first = minx;
+            graystart=0;
+          }
+          if (CTX_UNLIKELY (last > maxx))
+          {
+            last = maxx;
+            grayend=255;
+          }
+          graystart = (graystart&0xff) ^ 255;
+          grayend   = (grayend & 0xff);
+
+          if (first < last)
+          {
+            int pre = 1;
+            int post = 1;
+
+            if (abs(delta0) < CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA)
+            {
+              coverage[first] += graystart;
+            }
+            else
+            {
+              unsigned int u0 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_mini (x0_start, x0_end)));
+              unsigned int u1 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_maxi (x0_start, x0_end)));
+
+              int us = u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV);
+              int count = 0;
+
+              int mod = ((u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256) % 256)^255) *
+                         (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/255);
+              int sum = ((u1-u0+CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV)/255);
+
+              int recip = 65536/sum;
+              for (unsigned int u = u0; u < u1; u+= CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV)
+              {
+                coverage[us + count] += ((u - u0 + mod) * recip)>>16;
+                count++;
+              }
+              pre = (us+count-1)-first+1;
+            }
+  
+            if (abs(delta1) < CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA)
+            {
+               coverage[last] += grayend;
+            }
+            else
+            {
+              unsigned int u0 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_mini (x1_start, x1_end)));
+              unsigned int u1 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_maxi (x1_start, x1_end)));
+
+              int us = u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV);
+              int count = 0;
+              int mod = ((((u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256) % 256)^255)+64) *
+                    (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/255));
+              int sum = ((u1-u0+CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV * 5/4)/255);
+              int recip = 65536 / sum;
+              for (unsigned int u = u0; u < u1; u+= CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV)
+              {
+                coverage[us + count] += (((u - u0 + mod) * recip)>>16) ^ 255;
+                count++;
+              }
+              post = last-us+1;
+            }
+            for (int i = first + pre; i <= last - post; i++)
+              coverage[i] = 255;
+          }
+          else if (first == last)
+          {
+            coverage[last]+=(graystart-(grayend^255));
+          }
+        }
+   }
+}
+
+
+inline static void
+ctx_rasterizer_generate_coverage_apply2 (CtxRasterizer *rasterizer,
+                                         int            minx,
+                                         int            maxx,
+                                         uint8_t       *coverage,
+                                         int            is_winding,
+                                         CtxCovPath     comp)
+{
+  CtxSegment *entries = (CtxSegment*)(&rasterizer->edge_list.entries[0]);
+  int *edges          = rasterizer->edges;
+  int  scanline       = rasterizer->scanline;
+  const int  bpp      = rasterizer->format->bpp;
+  int  active_edges   = rasterizer->active_edges;
+  int  parity         = 0;
+
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+  uint32_t *src_pixp;
+  uint32_t src_pix, si_ga, si_rb, si_ga_full, si_rb_full, si_a;
+  if (comp != CTX_COV_PATH_FALLBACK &&
+      comp != CTX_COV_PATH_RGBA8_COPY_FRAGMENT &&
+      comp != CTX_COV_PATH_RGBA8_OVER_FRAGMENT)
+  {
+    src_pixp   = ((uint32_t*)rasterizer->color);
+    src_pix    = src_pixp[0];
+    si_ga      = ((uint32_t*)rasterizer->color)[1];
+    si_rb      = ((uint32_t*)rasterizer->color)[2];
+    si_ga_full = ((uint32_t*)rasterizer->color)[3];
+    si_rb_full = ((uint32_t*)rasterizer->color)[4];
+    si_a  = src_pix >> 24;
+  }
+  else
+  {
+    src_pix    =
+    si_ga      =
+    si_rb      =
+    si_ga_full =
+    si_rb_full =
+    si_a  = 0;
+    src_pixp = &src_pix;
+  }
+#endif
+
+  uint8_t *dst = ( (uint8_t *) rasterizer->buf) +
+         (rasterizer->blit_stride * (scanline / CTX_FULL_AA));
+
+  coverage -= minx;
+
+  const int minx_ = minx * CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV;
+  const int maxx_ = maxx * CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV;
+
+  int accumulated_x0 = 65538;
+  int accumulated_x1 = 65536;
+
+  for (int t = 0; t < active_edges -1;t++)
+    {
+      CtxSegment   *segment = &entries[edges[t]];
+      UPDATE_PARITY;
+
+       if (parity)
+        {
+          CtxSegment   *next_segment = &entries[edges[t+1]];
+          const int x0        = segment->val;
+          const int x1        = next_segment->val;
+          const int delta0    = segment->delta;
+          const int delta1    = next_segment->delta;
+
+          int x0_start = x0 - delta0 * CTX_AA_HALFSTEP2;
+          int x1_start = x1 - delta1 * CTX_AA_HALFSTEP2;
+          int x0_end   = x0 + delta0 * CTX_AA_HALFSTEP;
+          int x1_end   = x1 + delta1 * CTX_AA_HALFSTEP;
+
+          int graystart = x0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int grayend   = x1 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256);
+          int first     = graystart >> 8;
+          int last      = grayend   >> 8;
+
+          if (CTX_UNLIKELY (first < minx))
+          { 
+            first = minx;
+            graystart=0;
+          }
+          if (CTX_UNLIKELY (last > maxx))
+          {
+            last = maxx;
+            grayend=255;
+          }
+          graystart = 255-(graystart&0xff);
+          grayend   = (grayend & 0xff);
+
+          if (first < last)
+          {
+            int pre = 1;
+            int post = 1;
+
+          if (abs(delta0) < CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA)
+          {
+             coverage[first] += graystart;
+
+            accumulated_x1 = first;
+            accumulated_x0 = ctx_mini (accumulated_x0, first);
+          }
+          else
+          {
+            unsigned int u0 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_mini (x0_start, x0_end)));
+            unsigned int u1 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_maxi (x0_start, x0_end)));
+
+            int mod = ((u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256) % 256)^255) *
+                    (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/255);
+            int sum = ((u1-u0+CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV)/255);
+
+            int us = u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV);
+            int count = 0;
+            int recip = 65536/ sum;
+            for (unsigned int u = u0; u < u1; u+= CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV)
+            {
+              coverage[us + count] += ((u - u0 + mod) * recip)>>16;
+              count++;
+            }
+            pre = (us+count-1)-first+1;
+
+            accumulated_x0 = ctx_mini (accumulated_x0, us);
+            accumulated_x1 = us + count - 1;
+          }
+
+          if (accumulated_x1-accumulated_x0>=0)
+          {
+             switch (comp)
+             {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+                case CTX_COV_PATH_RGBA8_OVER:
+                {
+                  uint32_t *dst_i = (uint32_t*)&dst[((accumulated_x0) * bpp)/8];
+                  for (int i = 0; i < accumulated_x1-accumulated_x0+1; i++)
+                    {
+                      *dst_i = ctx_over_RGBA8_2 (*dst_i, si_ga, si_rb, si_a, coverage[accumulated_x0+i]);
+                      dst_i++;
+                    }
+                }
+                break;
+
+                case CTX_COV_PATH_RGBA8_COPY:
+                {
+                  uint32_t *dst_i = (uint32_t*)&dst[((accumulated_x0) * bpp)/8];
+                  for (int i = 0; i < accumulated_x1-accumulated_x0+1; i++)
+                  {
+                    *dst_i = ctx_lerp_RGBA8_2 (*dst_i, si_ga, si_rb, coverage[accumulated_x0+i]);
+                    dst_i++;
+                  }
+                }
+                  break;
+                case CTX_COV_PATH_RGB8_COPY:
+                {
+                  uint8_t *dst_i = (uint8_t*)&dst[((accumulated_x0) * bpp)/8];
+                  uint8_t *srcp = (uint8_t*)src_pixp;
+                  for (int i = 0; i < accumulated_x1-accumulated_x0+1; i++)
+                  {
+                    for (int c = 0; c < 3; c++)
+                      dst_i[c] = ctx_lerp_u8 (dst_i[c], srcp[c], coverage[accumulated_x0+i]);
+                    dst_i +=3;
+                  }
+                }
+                  break;
+#endif
+                default:
+                rasterizer->apply_coverage (rasterizer,
+                          &dst[((accumulated_x0) * bpp)/8],
+                          rasterizer->color,
+                          accumulated_x0,
+                          &coverage[accumulated_x0],
+                          accumulated_x1-accumulated_x0+1);
+             }
+             accumulated_x0 = 65538;
+             accumulated_x1 = 65536;
+          }
+
+          if (abs(delta1) < CTX_RASTERIZER_AA_SLOPE_LIMIT3_FAST_AA)
+          {
+             coverage[last] += grayend;
+             accumulated_x1 = last;
+             accumulated_x0 = last;
+          }
+          else
+          {
+            unsigned int u0 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_mini (x1_start, x1_end)));
+            unsigned int u1 = ctx_mini (maxx_, ctx_maxi (minx_, ctx_maxi (x1_start, x1_end)));
+
+            int us = u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV);
+            int count = 0;
+
+            int mod = ((((u0 / (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/256) % 256)^255) +64) *
+                    (CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV/255));
+            int sum = ((u1-u0+CTX_RASTERIZER_EDGE_MULTIPLIER * CTX_SUBDIV * 5/4)/255);
+
+            int recip = 65536/ sum;
+            for (unsigned int u = u0; u < u1; u+= CTX_RASTERIZER_EDGE_MULTIPLIER*CTX_SUBDIV)
+            {
+              coverage[us + count] = (((u - u0 + mod)*recip)>>16)^255;
+              count++;
+            }
+            post = last-us+1;
+
+            accumulated_x1 = us + count;
+            accumulated_x0 = us;
+          }
+          switch (comp)
+          {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+            case CTX_COV_PATH_RGBAF_COPY:
+            case CTX_COV_PATH_GRAY8_COPY:
+            case CTX_COV_PATH_RGB8_COPY:
+            case CTX_COV_PATH_GRAYA8_COPY:
+            case CTX_COV_PATH_GRAYAF_COPY:
+            case CTX_COV_PATH_CMYKAF_COPY:
+            case CTX_COV_PATH_RGB565_COPY:
+            case CTX_COV_PATH_RGB332_COPY:
+            case CTX_COV_PATH_CMYK8_COPY:
+            case CTX_COV_PATH_CMYKA8_COPY:
+            {
+              uint8_t* dsts = (uint8_t*)(&dst[(first *bpp)/8]);
+              uint8_t* dst_i = (uint8_t*)dsts;
+              uint8_t* color = ((uint8_t*)&rasterizer->color_native);
+              unsigned int bytes = rasterizer->format->bpp/8;
+              dst_i+=pre*bytes;
+
+              int scount = (last - post) - (first+pre) + 1;
+              unsigned int count = scount;
+
+              //for (int i = first + pre; i <= last - post; i++)
+              if (CTX_LIKELY(scount>0))
+              switch (bytes)
+              {
+                case 1:
+#if 1
+                  memset (dst_i, color[0], count);
+#else
+                  while (count--)
+                  {
+                    dst_i[0] = color[0];
+                    dst_i++;
+                  }
+#endif
+                  break;
+                case 2:
+                  {
+                    uint16_t val = ((uint16_t*)color)[0];
+                    while (count--)
+                    {
+                      ((uint16_t*)dst_i)[0] = val;
+                      dst_i+=2;
+                    }
+                  }
+                  break;
+                case 4:
+                  {
+                    uint32_t val = ((uint32_t*)color)[0];
+                    while (count--)
+                    {
+                      ((uint32_t*)dst_i)[0] = val;
+                      dst_i+=4;
+                    }
+                  }
+                  break;
+                case 16:
+                  ctx_span_set_color_x4 ((uint32_t*)dst, (uint32_t*)color, count);
+                  break;
+                case 3:
+                 while (count--)
+                 {
+                   *dst_i++ = color[0];
+                   *dst_i++ = color[1];
+                   *dst_i++ = color[2];
+                 }
+                 break;
+                case 5:
+                 while (count--)
+                 {
+                   *dst_i++ = color[0];
+                   *dst_i++ = color[1];
+                   *dst_i++ = color[2];
+                   *dst_i++ = color[3];
+                   *dst_i++ = color[4];
+                 }
+                 break;
+                default:
+                 while (count--)
+                 {
+                   for (unsigned int b = 0; b < bytes; b++)
+                     *dst_i++ = color[b];
+                 }
+                  break;
+               }
+             }
+             break;
+#if CTX_ENABLE_CBRLE
+            case CTX_COV_PATH_CBRLE_COPY:
+              {
+              int count = (last - post) - (first+pre) + 1;
+              if (count>0)
+              ctx_CBRLE_compress (rasterizer->color,
+                                   dst,
+                                   rasterizer->blit_width,
+                                   rasterizer->blit_stride,
+                                   pre, count,
+                                   CBRLE_MODE_SET_COLOR, NULL, 1);
+
+              }
+              break;
+#endif
+
+            case CTX_COV_PATH_RGBA8_COPY:
+            {
+              uint32_t* dst_pix = (uint32_t*)(&dst[(first *bpp)/8]);
+              dst_pix+=pre;
+              ctx_span_set_color (dst_pix, src_pix, last-first-pre-post + 1);
+            }
+            break;
+
+
+            case CTX_COV_PATH_RGBA8_OVER:
+            {
+              uint32_t* dst_pix = (uint32_t*)(&dst[(first *bpp)/8]);
+              dst_pix+=pre;
+              int scount = (last - post) - (first + pre) + 1;
+              if (scount > 0)
+              {
+                unsigned int count = scount;
+                while (count--)
+                {
+                  *dst_pix = ctx_over_RGBA8_full_2(*dst_pix, si_ga_full, si_rb_full, si_a);
+                  dst_pix++;
+                }
+              }
+            }
+            break;
+            case CTX_COV_PATH_RGBA8_COPY_FRAGMENT:
+            {
+              int width = last-first-pre-post+1;
+              if (width>0)
+              {
+                float u0 = 0; float v0 = 0;
+                float ud = 0; float vd = 0;
+                float w0 = 1; float wd = 0;
+                ctx_init_uv (rasterizer, first+pre, rasterizer->scanline/CTX_FULL_AA,&u0, &v0, &w0, &ud, &vd, &wd);
+                rasterizer->fragment (rasterizer, u0, v0, w0, &dst[(first+pre)*bpp/8],
+                                      width, ud, vd, wd);
+              }
+            }
+            break;
+            case CTX_COV_PATH_RGBA8_OVER_FRAGMENT:
+              {
+                int width = last-first-pre-post+1;
+                if (width>0)
+                ctx_RGBA8_source_over_normal_full_cov_fragment (rasterizer,
+                               &dst[((first+pre)*bpp)/8],
+                               NULL,
+                               first + pre,
+                               NULL,
+                               width, 1);
+              }
+            break;
+#endif
+            default:
+              {
+                int width = last-first-pre-post+1;
+                if (width > 0)
+                {
+#if static_OPAQUE
+                uint8_t *opaque = &rasterizer->opaque[0];
+#else
+                uint8_t opaque[width];
+                memset (opaque, 255, sizeof (opaque));
+#endif
+                rasterizer->apply_coverage (rasterizer,
+                            &dst[((first + pre) * bpp)/8],
+                            rasterizer->color,
+                            first + pre,
+                            opaque,
+                            width);
+                }
+              }
+          }
+          }
+          else if (first == last)
+          {
+            coverage[last]+=(graystart-(255-grayend));
+
+            accumulated_x1 = last;
+            accumulated_x0 = ctx_mini (accumulated_x0, last);
+          }
+        }
+   }
+
+   if (accumulated_x1-accumulated_x0>=0)
+   {
+             switch (comp)
+             {
+#if CTX_RASTERIZER_SWITCH_DISPATCH
+                case CTX_COV_PATH_RGBA8_OVER:
+                {
+                  uint32_t *dst_i = (uint32_t*)&dst[((accumulated_x0) * bpp)/8];
+                  for (int i = 0; i < accumulated_x1-accumulated_x0+1; i++)
+                    {
+                      *dst_i = ctx_over_RGBA8_2 (*dst_i, si_ga, si_rb, si_a, coverage[accumulated_x0+i]);
+                      dst_i++;
+                    }
+                }
+                break;
+                case CTX_COV_PATH_RGBA8_COPY:
+                {
+                  uint32_t *dst_i = (uint32_t*)&dst[((accumulated_x0) * bpp)/8];
+                  for (int i = 0; i < accumulated_x1-accumulated_x0+1; i++)
+                  {
+                    *dst_i = ctx_lerp_RGBA8_2 (*dst_i, si_ga, si_rb, coverage[accumulated_x0+i]);
+                    dst_i++;
+                  }
+                }
+                  break;
+#endif
+                default:
+                rasterizer->apply_coverage (rasterizer,
+                          &dst[((accumulated_x0) * bpp)/8],
+                          rasterizer->color,
+                          accumulated_x0,
+                          &coverage[accumulated_x0],
+                          accumulated_x1-accumulated_x0+1);
+             }
+   }
+}
+
+#undef CTX_EDGE_Y0
+#undef CTX_EDGE
+
+static inline void
+ctx_rasterizer_reset (CtxRasterizer *rasterizer)
+{
+  rasterizer->has_shape       =   
+  rasterizer->has_prev        =   
+  rasterizer->edge_list.count =    // ready for new edges
+  rasterizer->edge_pos        =   
+  rasterizer->scanline        = 0;
+  if (CTX_LIKELY(!rasterizer->preserve))
+  {
+    rasterizer->scan_min      =
+    rasterizer->col_min       = 50000000;
+    rasterizer->scan_max      =
+    rasterizer->col_max       = -50000000;
+  }
+  //rasterizer->comp_op       = NULL; // keep comp_op cached 
+  //     between rasterizations where rendering attributes are
+  //     nonchanging
+}
+
+static void
+ctx_rasterizer_rasterize_edges2 (CtxRasterizer *rasterizer, const int fill_rule 
+#if CTX_SHAPE_CACHE
+                                ,CtxShapeEntry *shape
+#endif
+                               )
+{
+  rasterizer->pending_edges   =   
+  rasterizer->active_edges    =   0;
+  //rasterizer->scanline        = 0;
+  int       is_winding  = fill_rule == CTX_FILL_RULE_WINDING;
+  const CtxCovPath comp = rasterizer->comp;
+  const int real_aa     = rasterizer->aa;
+  uint8_t  *dst         = ((uint8_t *) rasterizer->buf);
+  int       scan_start  = rasterizer->blit_y * CTX_FULL_AA;
+  int       scan_end    = scan_start + (rasterizer->blit_height - 1) * CTX_FULL_AA;
+  const int blit_width  = rasterizer->blit_width;
+  const int blit_max_x  = rasterizer->blit_x + blit_width;
+  int       minx        = rasterizer->col_min / CTX_SUBDIV - rasterizer->blit_x;
+  int       maxx        = (rasterizer->col_max + CTX_SUBDIV-1) / CTX_SUBDIV -
+                          rasterizer->blit_x;
+  const int blit_stride = rasterizer->blit_stride;
+  uint8_t   real_fraction = 255/real_aa;
+
+  rasterizer->prev_active_edges = -1;
+  if (
+#if CTX_SHAPE_CACHE
+    !shape &&
+#endif
+    maxx > blit_max_x - 1)
+    { maxx = blit_max_x - 1; }
+
+  minx = ctx_maxi (rasterizer->state->gstate.clip_min_x, minx);
+  maxx = ctx_mini (rasterizer->state->gstate.clip_max_x, maxx);
+  minx = ctx_maxi (0, minx); // redundant?
+  if (CTX_UNLIKELY (minx >= maxx))
+    {
+      return;
+    }
+#if CTX_SHAPE_CACHE
+  uint8_t _coverage[shape?2:maxx-minx+1];
+#else
+  uint8_t _coverage[maxx-minx+1];
+#endif
+  uint8_t *coverage = &_coverage[0];
+
+  int coverage_size;
+
+  rasterizer->scan_min -= (rasterizer->scan_min % CTX_FULL_AA);
+#if CTX_SHAPE_CACHE
+  if (shape)
+    {
+      coverage_size = shape->width;
+      coverage = &shape->data[0];
+      scan_start = rasterizer->scan_min;
+      scan_end   = rasterizer->scan_max;
+    }
+  else
+#endif
+  {
+     coverage_size = sizeof (_coverage);
+     if (rasterizer->scan_min > scan_start)
+       {
+          dst += (rasterizer->blit_stride * (rasterizer->scan_min-scan_start) / CTX_FULL_AA);
+          scan_start = rasterizer->scan_min;
+       }
+      scan_end = ctx_mini (rasterizer->scan_max, scan_end);
+  }
+
+  if (CTX_UNLIKELY(rasterizer->state->gstate.clip_min_y * CTX_FULL_AA > scan_start ))
+    { 
+       dst += (rasterizer->blit_stride * (rasterizer->state->gstate.clip_min_y * CTX_FULL_AA -scan_start) / CTX_FULL_AA);
+       scan_start = rasterizer->state->gstate.clip_min_y * CTX_FULL_AA; 
+    }
+  scan_end = ctx_mini (rasterizer->state->gstate.clip_max_y * CTX_FULL_AA, scan_end);
+  if (CTX_UNLIKELY(scan_start > scan_end ||
+      (scan_start > (rasterizer->blit_y + (rasterizer->blit_height-1)) * CTX_FULL_AA) ||
+      (scan_end < (rasterizer->blit_y) * CTX_FULL_AA)))
+  { 
+    /* not affecting this rasterizers scanlines */
+    return;
+  }
+
+  rasterizer->horizontal_edges =
+    rasterizer->needs_aa3  =
+    rasterizer->needs_aa5  =
+    rasterizer->needs_aa15 = 0;
+
+  ctx_rasterizer_sort_edges (rasterizer);
+  rasterizer->scanline = scan_start;
+  ctx_rasterizer_feed_edges (rasterizer, 0); 
+
+  int avoid_direct = (0 
+#if CTX_ENABLE_CLIP
+         || rasterizer->clip_buffer
+#endif
+#if CTX_ENABLE_SHADOW_BLUR
+         || rasterizer->in_shadow
+#endif
+#if CTX_SHAPE_CACHE
+         || shape != NULL
+#endif
+         );
+
+  for (; rasterizer->scanline <= scan_end;)
+    {
+
+    if (rasterizer->active_edges == 0 && rasterizer->pending_edges == 0)
+    { /* no edges */
+      ctx_rasterizer_feed_edges (rasterizer, 0);
+      ctx_rasterizer_increment_edges (rasterizer, CTX_FULL_AA);
+      dst += blit_stride;
+#if CTX_SHAPE_CACHE
+      if (shape)
+      {
+        memset (coverage, 0, coverage_size);
+        coverage += shape->width;
+      }
+#endif
+      rasterizer->prev_active_edges = rasterizer->active_edges;
+      continue;
+    }
+    else if (real_aa != 1 && ( (rasterizer->horizontal_edges!=0) 
+          || (rasterizer->active_edges != rasterizer->prev_active_edges)
+          || (rasterizer->active_edges + rasterizer->pending_edges == rasterizer->ending_edges)
+          ))
+    { /* needs full AA */
+        int increment = CTX_FULL_AA/real_aa;
+        memset (coverage, 0, coverage_size);
+        for (int i = 0; i < real_aa; i++)
+        {
+          ctx_rasterizer_feed_edges (rasterizer, 0);
+          ctx_rasterizer_generate_coverage (rasterizer, minx, maxx, coverage, is_winding, real_aa, real_fraction);
+          ctx_rasterizer_increment_edges (rasterizer, increment);
+        }
+    }
+    else if (rasterizer->needs_aa3 == 0)
+    {
+      if (! avoid_direct)
+      { /* can generate with direct rendering to target (we're not using shape cache) */
+        ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP2);
+        ctx_rasterizer_feed_edges (rasterizer, 0);
+
+        ctx_rasterizer_generate_coverage_apply (rasterizer, minx, maxx, coverage, is_winding, comp);
+        ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP);
+
+        dst += blit_stride;
+        rasterizer->prev_active_edges = rasterizer->active_edges;
+        continue;
+      }
+      else
+      { /* cheap fully correct AA, to coverage mask / clipping */
+        ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP2);
+        ctx_rasterizer_feed_edges (rasterizer, 0);
+
+        memset (coverage, 0, coverage_size);
+        ctx_rasterizer_generate_coverage_set (rasterizer, minx, maxx, coverage, is_winding);
+        ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP);
+      }
+    }
+    else if (ctx_rasterizer_is_simple (rasterizer))
+    { /* the scanline transitions does not contain multiple intersections - each aa segment is a linear ramp */
+      ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP2);
+      ctx_rasterizer_feed_edges (rasterizer, 1);
+      memset (coverage, 0, coverage_size);
+      if (!avoid_direct)
+      {
+        ctx_rasterizer_generate_coverage_apply2 (rasterizer, minx, maxx, coverage, is_winding,
+                      comp);
+        ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP);
+
+        dst += blit_stride;
+        rasterizer->prev_active_edges = rasterizer->active_edges;
+        continue;
+      }
+      ctx_rasterizer_generate_coverage_set2 (rasterizer, minx, maxx, coverage, is_winding);
+      ctx_rasterizer_increment_edges (rasterizer, CTX_AA_HALFSTEP);
+      if (real_aa == 1)
+      {
+        for (int x = minx; x <= maxx; x ++)
+          coverage[x] = coverage[x] > 127?255:0;
+      }
+    }
+    else
+    { /* determine level of oversampling based on lowest steepness edges */
+      int aa = 3;
+      if (rasterizer->needs_aa5 && real_aa >=5)
+      {
+         aa = 5;
+         if (rasterizer->needs_aa15 && real_aa >=15)
+           aa = 15;
+      }
+      int scanline_increment = 15/aa;
+
+      memset (coverage, 0, coverage_size);
+      uint8_t fraction = 255/aa;
+      for (int i = 0; i < CTX_FULL_AA; i+= scanline_increment)
+      {
+        ctx_rasterizer_feed_edges (rasterizer, 0);
+        ctx_rasterizer_generate_coverage (rasterizer, minx, maxx, coverage, is_winding, aa, fraction);
+        ctx_rasterizer_increment_edges (rasterizer, scanline_increment);
+      }
+    }
+
+  ctx_coverage_post_process (rasterizer, minx, maxx, coverage - minx, NULL, NULL);
+#if CTX_SHAPE_CACHE
+  if (shape == NULL)
+#endif
+  {
+    rasterizer->apply_coverage (rasterizer,
+                         &dst[(minx * rasterizer->format->bpp) /8],
+                         rasterizer->color,
+                         minx,
+                         coverage,
+                         maxx-minx+ 1);
+  }
+#if CTX_SHAPE_CACHE
+  else
+  {
+    coverage += shape->width;
+  }
+#endif
+      dst += blit_stride;
+      rasterizer->prev_active_edges = rasterizer->active_edges;
+    }
+
+  if (CTX_UNLIKELY(rasterizer->state->gstate.compositing_mode == CTX_COMPOSITE_SOURCE_OUT ||
+      rasterizer->state->gstate.compositing_mode == CTX_COMPOSITE_SOURCE_IN ||
+      rasterizer->state->gstate.compositing_mode == CTX_COMPOSITE_DESTINATION_IN ||
+      rasterizer->state->gstate.compositing_mode == CTX_COMPOSITE_DESTINATION_ATOP ||
+      rasterizer->state->gstate.compositing_mode == CTX_COMPOSITE_CLEAR))
+  {
+     /* fill in the rest of the blitrect when compositing mode permits it */
+     uint8_t nocoverage[rasterizer->blit_width];
+     //int gscan_start = rasterizer->state->gstate.clip_min_y * CTX_FULL_AA;
+     int gscan_start = rasterizer->state->gstate.clip_min_y * CTX_FULL_AA;
+     int gscan_end = rasterizer->state->gstate.clip_max_y * CTX_FULL_AA;
+     memset (nocoverage, 0, sizeof(nocoverage));
+     int startx   = rasterizer->state->gstate.clip_min_x;
+     int endx     = rasterizer->state->gstate.clip_max_x;
+     int clipw    = endx-startx + 1;
+     uint8_t *dst = ( (uint8_t *) rasterizer->buf);
+
+     dst = (uint8_t*)(rasterizer->buf) + rasterizer->blit_stride * (gscan_start / CTX_FULL_AA);
+     for (rasterizer->scanline = gscan_start; rasterizer->scanline < scan_start;)
+     {
+       rasterizer->apply_coverage (rasterizer,
+                                   &dst[ (startx * rasterizer->format->bpp) /8],
+                                   rasterizer->color,
+                                      0,
+                                      nocoverage, clipw);
+       rasterizer->scanline += CTX_FULL_AA;
+       dst += rasterizer->blit_stride;
+     }
+     if (minx < startx)
+     {
+     dst = (uint8_t*)(rasterizer->buf) + rasterizer->blit_stride * (scan_start / CTX_FULL_AA);
+     for (rasterizer->scanline = scan_start; rasterizer->scanline < scan_end;)
+     {
+       rasterizer->apply_coverage (rasterizer,
+                                   &dst[ (startx * rasterizer->format->bpp) /8],
+                                   rasterizer->color,
+                                   0,
+                                   nocoverage, minx-startx);
+       dst += blit_stride;
+     }
+     }
+
+     if (endx > maxx)
+     {
+     dst = (uint8_t*)(rasterizer->buf) + rasterizer->blit_stride * (scan_start / CTX_FULL_AA);
+     for (rasterizer->scanline = scan_start; rasterizer->scanline < scan_end;)
+     {
+       rasterizer->apply_coverage (rasterizer,
+                                   &dst[ (maxx * rasterizer->format->bpp) /8],
+                                   rasterizer->color,
+                                   0,
+                                   nocoverage, endx-maxx);
+
+       rasterizer->scanline += CTX_FULL_AA;
+       dst += rasterizer->blit_stride;
+     }
+     }
+#if 1
+     dst = (uint8_t*)(rasterizer->buf) + rasterizer->blit_stride * (scan_end / CTX_FULL_AA);
+     // XXX this crashes under valgrind/asan
+     if(0)for (rasterizer->scanline = scan_end; rasterizer->scanline/CTX_FULL_AA < gscan_end-1;)
+     {
+       rasterizer->apply_coverage (rasterizer,
+                                   &dst[ (startx * rasterizer->format->bpp) /8],
+                                   rasterizer->color,
+                                   0,
+                                   nocoverage, clipw-1);
+
+       rasterizer->scanline += CTX_FULL_AA;
+       dst += blit_stride;
+     }
+#endif
+  }
+}
+
+
+#if CTX_INLINE_FILL_RULE
+void
+CTX_SIMD_SUFFIX (ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule 
+#if CTX_SHAPE_CACHE
+                                ,CtxShapeEntry *shape
+#endif
+                               );
+#else
+
+void
+CTX_SIMD_SUFFIX (ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule 
+#if CTX_SHAPE_CACHE
+                                ,CtxShapeEntry *shape
+#endif
+                               );
+#endif
+
+
+#if CTX_INLINE_FILL_RULE
+void
+CTX_SIMD_SUFFIX (ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule 
+#if CTX_SHAPE_CACHE
+                                ,CtxShapeEntry *shape
+#endif
+                               )
+{
+  if (fill_rule)
+  {
+    ctx_rasterizer_rasterize_edges2 (rasterizer, 1
+#if CTX_SHAPE_CACHE
+                    ,shape
+#endif
+                    );
+  }
+  else
+  {
+    ctx_rasterizer_rasterize_edges2 (rasterizer, 0
+#if CTX_SHAPE_CACHE
+                    ,shape
+#endif
+                    );
+  }
+}
+#else
+
+void
+CTX_SIMD_SUFFIX (ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule 
+#if CTX_SHAPE_CACHE
+                                ,CtxShapeEntry *shape
+#endif
+                               )
+{
+    ctx_rasterizer_rasterize_edges2 (rasterizer, fill_rule
+#if CTX_SHAPE_CACHE
+                    ,shape
+#endif
+                    );
+}
+
+#endif
+
+
+
+extern CtxPixelFormatInfo *ctx_pixel_formats;
+void CTX_SIMD_SUFFIX(ctx_simd_setup)(void);
+void CTX_SIMD_SUFFIX(ctx_simd_setup)(void)
+{
+  ctx_pixel_formats         = CTX_SIMD_SUFFIX(ctx_pixel_formats);
+  ctx_composite_setup       = CTX_SIMD_SUFFIX(ctx_composite_setup);
+  ctx_rasterizer_rasterize_edges = CTX_SIMD_SUFFIX(ctx_rasterizer_rasterize_edges);
+#if CTX_FAST_FILL_RECT
+  ctx_composite_fill_rect   = CTX_SIMD_SUFFIX(ctx_composite_fill_rect);
+  ctx_composite_stroke_rect = CTX_SIMD_SUFFIX(ctx_composite_stroke_rect);
+#endif
+}
+
+
+#endif
+#endif
+#if CTX_IMPLEMENTATION
+#if CTX_RASTERIZER
+
+
+inline static float ctx_fast_hypotf (float x, float y)
+{
+  if (x < 0) { x = -x; }
+  if (y < 0) { y = -y; }
+  if (x < y)
+    { return 0.96f * y + 0.4f * x; }
+  else
+    { return 0.96f * x + 0.4f * y; }
+}
+
+
+
+static void
+ctx_rasterizer_gradient_add_stop (CtxRasterizer *rasterizer, float pos, float *rgba)
+{
+  /* FIXME XXX we only have one gradient, but might need separate gradients
+   * for fill/stroke !
+   * 
+   */
+  CtxGradient *gradient = &rasterizer->state->gradient;
+  CtxGradientStop *stop = &gradient->stops[gradient->n_stops];
+  stop->pos = pos;
+  ctx_color_set_rgba (rasterizer->state, & (stop->color), rgba[0], rgba[1], rgba[2], rgba[3]);
+  if (gradient->n_stops < CTX_MAX_GRADIENT_STOPS-1) //we'll keep overwriting the last when out of stops
+    { gradient->n_stops++; }
+}
+
+static inline void ctx_rasterizer_update_inner_point (CtxRasterizer *rasterizer, int x, int y)
+{
+  rasterizer->scan_min = ctx_mini (y, rasterizer->scan_min);
+  rasterizer->scan_max = ctx_maxi (y, rasterizer->scan_max);
+  rasterizer->col_min = ctx_mini (x, rasterizer->col_min);
+  rasterizer->col_max = ctx_maxi (x, rasterizer->col_max);
+  rasterizer->inner_x = x;
+  rasterizer->inner_y = y;
+}
+
+static inline int ctx_rasterizer_add_point (CtxRasterizer *rasterizer, int x1, int y1)
+{
+  CtxSegment entry = {CTX_EDGE, {{0,}},0,0};
+
+  entry.data.s16[0]=rasterizer->inner_x;
+  entry.data.s16[1]=rasterizer->inner_y;
+
+  entry.data.s16[2]=x1;
+  entry.data.s16[3]=y1;
+
+  ctx_rasterizer_update_inner_point (rasterizer, x1, y1);
+
+  return ctx_edgelist_add_single (&rasterizer->edge_list, (CtxEntry*)&entry);
+}
+
+#if 0
+#define CTX_SHAPE_CACHE_PRIME1   7853
+#define CTX_SHAPE_CACHE_PRIME2   4129
+#define CTX_SHAPE_CACHE_PRIME3   3371
+#define CTX_SHAPE_CACHE_PRIME4   4221
+#else
+#define CTX_SHAPE_CACHE_PRIME1   283
+#define CTX_SHAPE_CACHE_PRIME2   599
+#define CTX_SHAPE_CACHE_PRIME3   101
+#define CTX_SHAPE_CACHE_PRIME4   661
+#endif
+
+
+#if CTX_SHAPE_CACHE
+float ctx_shape_cache_rate = 0.0;
+int   _ctx_shape_cache_enabled = CTX_SHAPE_CACHE_DEFAULT;
+
+//static CtxShapeCache ctx_cache = {{NULL,}, 0};
+
+static long ctx_shape_cache_hits   = 0;
+static long ctx_shape_cache_misses = 0;
+
+
+/* this returns the buffer to use for rendering, it always
+   succeeds..
+ */
+static inline CtxShapeEntry *ctx_shape_entry_find (CtxRasterizer *rasterizer, uint32_t hash, int width, int height)
+{
+  /* use both some high and some low bits  */
+  int entry_no = ( (hash >> 10) ^ (hash & 1023) ) % CTX_SHAPE_CACHE_ENTRIES;
+  {
+    static int i = 0;
+    i++;
+    if (i>256)
+      {
+        if (ctx_shape_cache_hits+ctx_shape_cache_misses)
+        {
+          ctx_shape_cache_rate = 
+                0.5f * ctx_shape_cache_rate +
+                0.5f * (ctx_shape_cache_hits * 100.0f  / (ctx_shape_cache_hits+ctx_shape_cache_misses));
+        }
+        i = 0;
+        ctx_shape_cache_hits = 0;
+        ctx_shape_cache_misses = 0;
+      }
+  }
+// XXX : this 1 one is needed  to silence a false positive:
+// ==90718== Invalid write of size 1
+// ==90718==    at 0x1189EF: ctx_rasterizer_generate_coverage (ctx.h:4786)
+// ==90718==    by 0x118E57: ctx_rasterizer_rasterize_edges (ctx.h:4907)
+//
+  int size = sizeof (CtxShapeEntry) + width * height + 1;
+
+  CtxShapeEntry *entry = rasterizer->shape_cache.entries[entry_no];
+  if (entry)
+    {
+      int old_size = sizeof (CtxShapeEntry) + entry->width + entry->height + 1;
+      if (entry->hash == hash &&
+          entry->width == width &&
+          entry->height == height)
+        {
+          if (entry->uses < 1<<30)
+            { entry->uses++; }
+          ctx_shape_cache_hits ++;
+          return entry;
+        }
+
+      if (old_size >= size)
+      {
+         rasterizer->shape_cache.size -= old_size;
+         rasterizer->shape_cache.size += (old_size-size); // slack/leaked
+      }
+      else
+      {
+        rasterizer->shape_cache.entries[entry_no] = NULL;
+        rasterizer->shape_cache.size -= entry->width * entry->height;
+        rasterizer->shape_cache.size -= sizeof (CtxShapeEntry);
+        ctx_free (entry);
+        entry = NULL;
+      }
+    }
+
+  if (!entry)
+    entry = rasterizer->shape_cache.entries[entry_no] = (CtxShapeEntry *) ctx_calloc (size, 1);
+
+  rasterizer->shape_cache.size += size;
+
+  ctx_shape_cache_misses ++;
+  entry->hash   = hash;
+  entry->width  = width;
+  entry->height = height;
+  entry->uses = 0;
+  return entry;
+}
+
+#endif
+
+static uint32_t ctx_rasterizer_poly_to_edges (CtxRasterizer *rasterizer)
+{
+#if CTX_SHAPE_CACHE
+  int x = 0;
+  int y = 0;
+#endif
+  unsigned int count = rasterizer->edge_list.count;
+  if (CTX_UNLIKELY (count == 0))
+     return 0;
+  CtxSegment *entry = (CtxSegment*)&rasterizer->edge_list.entries[0];
+#if CTX_SHAPE_CACHE
+#if 1
+  int ox = entry->data.s16[2];
+  int oy = entry->data.s16[3];
+#endif
+  uint32_t hash = rasterizer->edge_list.count;
+  hash = (ox & CTX_SUBDIV);
+  hash *= CTX_SHAPE_CACHE_PRIME1;
+  hash += (oy & CTX_SUBDIV);
+#endif
+  //CtxSegment *entry = &(((CtxSegment*)(rasterizer->edge_list.entries)))[0];
+  for (unsigned int i = 0; i < count; i++)
+    {
+#if CTX_SHAPE_CACHE
+      x = entry->data.s16[2];
+      y = entry->data.s16[3];
+      int dx = x-ox;
+      int dy = y-oy;
+      ox = x;
+      oy = y;
+      hash *= CTX_SHAPE_CACHE_PRIME3;
+      hash += dx;
+      hash *= CTX_SHAPE_CACHE_PRIME4;
+      hash += dy;
+#endif
+#if 1
+      if (entry->data.s16[3] < entry->data.s16[1])
+        {
+          *entry = ctx_segment_s16 (CTX_EDGE_FLIPPED,
+                            entry->data.s16[2], entry->data.s16[3],
+                            entry->data.s16[0], entry->data.s16[1]);
+        }
+#endif
+      entry++;
+    }
+#if CTX_SHAPE_CACHE
+  return hash;
+#else
+  return 0;
+#endif
+}
+
+static inline void ctx_rasterizer_finish_shape (CtxRasterizer *rasterizer)
+{
+  if (rasterizer->has_shape && rasterizer->has_prev)
+    {
+      ctx_rasterizer_line_to (rasterizer, rasterizer->first_x, rasterizer->first_y);
+      rasterizer->has_prev = 0;
+    }
+}
+
+//#define MIN_Y -100
+//#define MAX_Y 3800
+//#define MIN_X -100
+//#define MAX_X 3600*10
+
+static inline void ctx_rasterizer_move_to (CtxRasterizer *rasterizer, float x, float y)
+{
+  int tx = 0, ty = 0;
+
+  rasterizer->x        = x;
+  rasterizer->y        = y;
+  rasterizer->first_x  = x;
+  rasterizer->first_y  = y;
+  rasterizer->has_prev = -1;
+  _ctx_user_to_device_prepped (rasterizer->state, x,y, &tx, &ty);
+
+  tx -= rasterizer->blit_x * CTX_SUBDIV;
+  ctx_rasterizer_update_inner_point (rasterizer, tx, ty);
+}
+
+static inline void
+ctx_rasterizer_line_to_fixed (CtxRasterizer *rasterizer, int x, int y)
+{
+  rasterizer->has_shape = 1;
+  //  XXX we avoid doing this for the cases where we initially have fixed point
+  //  need a separate call for doing this at end of beziers and arcs
+  //if (done)
+  //{
+  //     rasterizer->y         = y*1.0/CTX_FULL_AA;
+  //     rasterizer->x         = x*1.0/CTX_SUBDIV;
+  //}
+  int tx = 0, ty = 0;
+  _ctx_user_to_device_prepped_fixed (rasterizer->state, x, y, &tx, &ty);
+  tx -= rasterizer->blit_x * CTX_SUBDIV;
+
+  ctx_rasterizer_add_point (rasterizer, tx, ty);
+
+  if (CTX_UNLIKELY(rasterizer->has_prev<=0))
+    {
+      CtxSegment *entry = & ((CtxSegment*)rasterizer->edge_list.entries)[rasterizer->edge_list.count-1];
+      entry->code = CTX_NEW_EDGE;
+      rasterizer->has_prev = 1;
+    }
+}
+
+static inline void
+ctx_rasterizer_line_to (CtxRasterizer *rasterizer, float x, float y)
+{
+  int tx = 0, ty = 0;
+  rasterizer->has_shape = 1;
+  rasterizer->y         = y;
+  rasterizer->x         = x;
+
+  _ctx_user_to_device_prepped (rasterizer->state, x, y, &tx, &ty);
+  tx -= rasterizer->blit_x * CTX_SUBDIV;
+
+  ctx_rasterizer_add_point (rasterizer, tx, ty);
+
+  if (CTX_UNLIKELY(rasterizer->has_prev<=0))
+    {
+      CtxSegment *entry = & ((CtxSegment*)rasterizer->edge_list.entries)[rasterizer->edge_list.count-1];
+      entry->code = CTX_NEW_EDGE;
+      rasterizer->has_prev = 1;
+    }
+}
+
+CTX_INLINE static float
+ctx_bezier_sample_1d (float x0, float x1, float x2, float x3, float dt)
+{
+  return ctx_lerpf (
+      ctx_lerpf (ctx_lerpf (x0, x1, dt),
+                 ctx_lerpf (x1, x2, dt), dt),
+      ctx_lerpf (ctx_lerpf (x1, x2, dt),
+                 ctx_lerpf (x2, x3, dt), dt), dt);
+}
+
+CTX_INLINE static void
+ctx_bezier_sample (float x0, float y0,
+                   float x1, float y1,
+                   float x2, float y2,
+                   float x3, float y3,
+                   float dt, float *x, float *y)
+{
+  *x = ctx_bezier_sample_1d (x0, x1, x2, x3, dt);
+  *y = ctx_bezier_sample_1d (y0, y1, y2, y3, dt);
+}
+
+static inline void
+ctx_rasterizer_bezier_divide (CtxRasterizer *rasterizer,
+                              float ox, float oy,
+                              float x0, float y0,
+                              float x1, float y1,
+                              float x2, float y2,
+                              float sx, float sy,
+                              float ex, float ey,
+                              float s,
+                              float e,
+                              int   iteration,
+                              float tolerance)
+{
+  float t = (s + e) * 0.5f;
+  float x, y;
+  float lx, ly, dx, dy;
+  ctx_bezier_sample (ox, oy, x0, y0, x1, y1, x2, y2, t, &x, &y);
+  lx = ctx_lerpf (sx, ex, t);
+  ly = ctx_lerpf (sy, ey, t);
+  dx = lx - x;
+  dy = ly - y;
+  if (iteration < 6 && (dx*dx+dy*dy) > tolerance)
+  {
+    ctx_rasterizer_bezier_divide (rasterizer, ox, oy, x0, y0, x1, y1, x2, y2,
+                                  sx, sy, x, y, s, t, iteration + 1,
+                                  tolerance);
+    ctx_rasterizer_line_to (rasterizer, x, y);
+    ctx_rasterizer_bezier_divide (rasterizer, ox, oy, x0, y0, x1, y1, x2, y2,
+                                  x, y, ex, ey, t, e, iteration + 1,
+                                  tolerance);
+  }
+}
+
+#define CTX_FIX_SCALE 1024
+#define CTX_FIX_SHIFT 10
+                      
+
+CTX_INLINE static int
+ctx_lerp_fixed (int v0, int v1, int dx)
+{
+  return v0 + (((v1-v0) * dx) >> CTX_FIX_SHIFT);
+}
+
+
+
+CTX_INLINE static int
+ctx_bezier_sample_1d_fixed (int x0, int x1, int x2, int x3, int dt)
+{
+  return ctx_lerp_fixed (
+      ctx_lerp_fixed (ctx_lerp_fixed (x0, x1, dt),
+                 ctx_lerp_fixed (x1, x2, dt), dt),
+      ctx_lerp_fixed (ctx_lerp_fixed (x1, x2, dt),
+                 ctx_lerp_fixed (x2, x3, dt), dt), dt);
+}
+
+CTX_INLINE static void
+ctx_bezier_sample_fixed (int x0, int y0,
+                         int x1, int y1,
+                         int x2, int y2,
+                         int x3, int y3,
+                         int dt, int *x, int *y)
+{
+  *x = ctx_bezier_sample_1d_fixed (x0, x1, x2, x3, dt);
+  *y = ctx_bezier_sample_1d_fixed (y0, y1, y2, y3, dt);
+}
+
+static inline void
+ctx_rasterizer_bezier_divide_fixed (CtxRasterizer *rasterizer,
+                              int ox, int oy,
+                              int x0, int y0,
+                              int x1, int y1,
+                              int x2, int y2,
+                              int sx, int sy,
+                              int ex, int ey,
+                              int s,
+                              int e,
+                              int iteration,
+                              int tolerance)
+{
+  int t = (s + e) / 2;
+  int x, y;
+  int lx, ly, dx, dy;
+  ctx_bezier_sample_fixed (ox, oy, x0, y0, x1, y1, x2, y2, t, &x, &y);
+  lx = ctx_lerp_fixed (sx, ex, t);
+  ly = ctx_lerp_fixed (sy, ey, t);
+  dx = lx - x;
+  dy = ly - y;
+  if (iteration < 6 && ((dx*dx+dy*dy))  > tolerance)
+  {
+    ctx_rasterizer_bezier_divide_fixed (rasterizer, ox, oy, x0, y0, x1, y1, x2, y2,
+                                  sx, sy, x, y, s, t, iteration + 1,
+                                  tolerance);
+    ctx_rasterizer_line_to_fixed (rasterizer, x, y);
+    ctx_rasterizer_bezier_divide_fixed (rasterizer, ox, oy, x0, y0, x1, y1, x2, y2,
+                                  x, y, ex, ey, t, e, iteration + 1,
+                                  tolerance);
+  }
+}
+
+static void
+ctx_rasterizer_curve_to (CtxRasterizer *rasterizer,
+                         float x0, float y0,
+                         float x1, float y1,
+                         float x2, float y2)
+{
+#if CTX_32BIT_SEGMENTS
+  float tolerance = 0.125f/ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+#else
+  float tolerance = 0.5f/ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+#endif
+  float ox = rasterizer->state->x;
+  float oy = rasterizer->state->y;
+
+  tolerance = tolerance * tolerance;
+
+  if(1){
+
+#if CTX_AVOID_CLIPPED_SUBDIVISION
+          // XXX need sporting to fixed point
+  float maxx = ctx_maxf (x1,x2);
+  maxx = ctx_maxf (maxx, ox);
+  maxx = ctx_maxf (maxx, x0);
+  float maxy = ctx_maxf (y1,y2);
+  maxy = ctx_maxf (maxy, oy);
+  maxy = ctx_maxf (maxy, y0);
+  float minx = ctx_minf (x1,x2);
+  minx = ctx_minf (minx, ox);
+  minx = ctx_minf (minx, x0);
+  float miny = ctx_minf (y1,y2);
+  miny = ctx_minf (miny, oy);
+  miny = ctx_minf (miny, y0);
+  
+  float coords[4][2]={{minx,miny},
+                      {maxx,miny},
+                      {maxx,maxy},
+                      {minx,maxy}};
+  for (int i = 0; i < 4; i++)
+  {
+    _ctx_user_to_device (rasterizer->state, &coords[i][0], &coords[i][1]);
+  }
+  minx = maxx = coords[0][0];
+  miny = maxy = coords[0][1];
+  for (int i = 1; i < 4; i++)
+  {
+    minx = ctx_minf (minx, coords[i][0]);
+    miny = ctx_minf (miny, coords[i][1]);
+    maxx = ctx_maxf (minx, coords[i][0]);
+    maxy = ctx_maxf (miny, coords[i][1]);
+  }
+
+    if( (maxx-minx) + (maxy-miny) < 0.66f ||
+        (minx > rasterizer->blit_x + rasterizer->blit_width) ||
+        (miny > rasterizer->blit_y + rasterizer->blit_height) ||
+        (maxx < rasterizer->blit_x) ||
+        (maxy < rasterizer->blit_y) )
+    {
+    }
+    else
+#endif
+    {
+#if 1
+        ctx_rasterizer_bezier_divide_fixed (rasterizer,
+            (int)(ox * CTX_FIX_SCALE), (int)(oy * CTX_FIX_SCALE), (int)(x0 * CTX_FIX_SCALE), (int)(y0 * CTX_FIX_SCALE),
+            (int)(x1 * CTX_FIX_SCALE), (int)(y1 * CTX_FIX_SCALE), (int)(x2 * CTX_FIX_SCALE), (int)(y2 * CTX_FIX_SCALE),
+            (int)(ox * CTX_FIX_SCALE), (int)(oy * CTX_FIX_SCALE), (int)(x2 * CTX_FIX_SCALE), (int)(y2 * CTX_FIX_SCALE),
+            0, CTX_FIX_SCALE, 0, (int)(tolerance * CTX_FIX_SCALE * CTX_FIX_SCALE));
+#else
+        ctx_rasterizer_bezier_divide (rasterizer,
+                                      ox, oy, x0, y0,
+                                      x1, y1, x2, y2,
+                                      ox, oy, x2, y2,
+                                      0.0f, 1.0f, 0, tolerance);
+#endif
+    }
+  }
+  ctx_rasterizer_line_to (rasterizer, x2, y2);
+}
+
+static void
+ctx_rasterizer_rel_move_to (CtxRasterizer *rasterizer, float x, float y)
+{
+  //if (CTX_UNLIKELY(x == 0.f && y == 0.f))
+  //{ return; }
+  x += rasterizer->x;
+  y += rasterizer->y;
+  ctx_rasterizer_move_to (rasterizer, x, y);
+}
+
+static void
+ctx_rasterizer_rel_line_to (CtxRasterizer *rasterizer, float x, float y)
+{
+  //if (CTX_UNLIKELY(x== 0.f && y==0.f))
+  //  { return; }
+  x += rasterizer->x;
+  y += rasterizer->y;
+  ctx_rasterizer_line_to (rasterizer, x, y);
+}
+
+static void
+ctx_rasterizer_rel_curve_to (CtxRasterizer *rasterizer,
+                             float x0, float y0, float x1, float y1, float x2, float y2)
+{
+  x0 += rasterizer->x;
+  y0 += rasterizer->y;
+  x1 += rasterizer->x;
+  y1 += rasterizer->y;
+  x2 += rasterizer->x;
+  y2 += rasterizer->y;
+  ctx_rasterizer_curve_to (rasterizer, x0, y0, x1, y1, x2, y2);
+}
+
+
+static int
+ctx_rasterizer_find_texture (CtxRasterizer *rasterizer,
+                             const char *eid)
+{
+  int no;
+  for (no = 0; no < CTX_MAX_TEXTURES; no++)
+  {
+    if (rasterizer->texture_source->texture[no].data &&
+        rasterizer->texture_source->texture[no].eid &&
+        !strcmp (rasterizer->texture_source->texture[no].eid, eid))
+      return no;
+  }
+  return -1;
+}
+
+static void
+ctx_rasterizer_set_texture (CtxRasterizer *rasterizer,
+                            const char *eid,
+                            float x,
+                            float y)
+{
+  int is_stroke = (rasterizer->state->source != 0);
+  CtxSource *source = is_stroke && (rasterizer->state->gstate.source_stroke.type != CTX_SOURCE_INHERIT_FILL)?
+                        &rasterizer->state->gstate.source_stroke:
+                        &rasterizer->state->gstate.source_fill;
+  rasterizer->state->source = 0;
+
+  int no = ctx_rasterizer_find_texture (rasterizer, eid);
+  if (no < 0 || no >= CTX_MAX_TEXTURES) { no = 0; }
+  if (rasterizer->texture_source->texture[no].data == NULL)
+    {
+#if CTX_32BIT_SEGMENTS
+      // not really, but we want to avoid building/linking fprintf
+      // for firmwares which are likely to not have this set
+      //fprintf (stderr, "ctx tex fail %p %s %i\n", rasterizer->texture_source, eid, no);
+#endif
+      return;
+    }
+  else
+  {
+    rasterizer->texture_source->texture[no].frame = rasterizer->texture_source->frame;
+  }
+  source->type = CTX_SOURCE_TEXTURE;
+  source->texture.buffer = &rasterizer->texture_source->texture[no];
+  ctx_matrix_identity (&source->set_transform);
+  ctx_matrix_translate (&source->set_transform, x, y);
+}
+
+
+static void
+ctx_rasterizer_define_texture (CtxRasterizer *rasterizer,
+                               const char    *eid,
+                               int            width,
+                               int            height,
+                               int            format,
+                               char unsigned *data)
+{
+  _ctx_texture_lock (); // we're using the same texture_source from all threads, keeping allocaitons down
+                        // need synchronizing (it could be better to do a pre-pass)
+  ctx_texture_init (rasterizer->texture_source,
+                    eid,
+                    width,
+                    height,
+                    ctx_pixel_format_get_stride ((CtxPixelFormat)format, width),
+                    (CtxPixelFormat)format,
+#if CTX_ENABLE_CM
+                    (void*)rasterizer->state->gstate.texture_space,
+#else
+                    NULL,
+#endif
+                    data,
+                    ctx_buffer_pixels_free, (void*)23);
+                    /*  when userdata for ctx_buffer_pixels_free is 23, texture_init dups the data on
+                     *  use
+                     */
+
+  ctx_rasterizer_set_texture (rasterizer, eid, 0.0f, 0.0f);
+  if (!rasterizer->state->gstate.source_fill.texture.buffer->color_managed)
+  {
+    _ctx_texture_prepare_color_management (rasterizer->state,
+    rasterizer->state->gstate.source_fill.texture.buffer);
+  }
+  _ctx_texture_unlock ();
+}
+
+
+inline static int
+ctx_is_transparent (CtxRasterizer *rasterizer, int stroke)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  if (gstate->global_alpha_u8 == 0)
+    return 1;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+  {
+    uint8_t ga[2];
+    ctx_color_get_graya_u8 (rasterizer->state, &gstate->source_fill.color, ga);
+    if (ga[1] == 0)
+      return 1;
+  }
+  return 0;
+}
+
+
+
+static void
+ctx_rasterizer_fill (CtxRasterizer *rasterizer)
+{
+  unsigned int preserved_count =
+          (rasterizer->preserve&&rasterizer->edge_list.count)?
+             rasterizer->edge_list.count:1;
+  int blit_x = rasterizer->blit_x;
+  int blit_y = rasterizer->blit_y;
+  int blit_width = rasterizer->blit_width;
+  int blit_height = rasterizer->blit_height;
+#if CTX_SHAPE_CACHE
+  int blit_stride = rasterizer->blit_stride;
+#endif
+
+  CtxSegment temp[preserved_count]; /* copy of already built up path's poly line
+                                       XXX - by building a large enough path
+                                       the stack can be smashed!
+                                     */
+  if (CTX_UNLIKELY(rasterizer->preserve))
+    { memcpy (temp, rasterizer->edge_list.entries, sizeof (temp) ); }
+
+#if CTX_ENABLE_SHADOW_BLUR
+  if (CTX_UNLIKELY(rasterizer->in_shadow))
+  {
+  for (unsigned int i = 0; i < rasterizer->edge_list.count; i++)
+    {
+      CtxSegment *entry = &((CtxSegment*)rasterizer->edge_list.entries)[i];
+      entry->data.s16[2] += rasterizer->shadow_x * CTX_SUBDIV;
+      entry->data.s16[3] += rasterizer->shadow_y * CTX_FULL_AA;
+    }
+    rasterizer->scan_min += rasterizer->shadow_y * CTX_FULL_AA;
+    rasterizer->scan_max += rasterizer->shadow_y * CTX_FULL_AA;
+    rasterizer->col_min  += (rasterizer->shadow_x - rasterizer->state->gstate.shadow_blur * 3 + 1) * CTX_SUBDIV;
+    rasterizer->col_max  += (rasterizer->shadow_x + rasterizer->state->gstate.shadow_blur * 3 + 1) * CTX_SUBDIV;
+  }
+#endif
+
+  if (CTX_UNLIKELY(ctx_is_transparent (rasterizer, 0) ||
+      rasterizer->scan_min > CTX_FULL_AA * (blit_y + blit_height) ||
+      rasterizer->scan_max < CTX_FULL_AA * blit_y ||
+      rasterizer->col_min > CTX_SUBDIV * (blit_x + blit_width) ||
+      rasterizer->col_max < CTX_SUBDIV * blit_x))
+    {
+    }
+  else
+  {
+    ctx_composite_setup (rasterizer);
+
+    rasterizer->state->ink_min_x = ctx_mini (rasterizer->state->ink_min_x, rasterizer->col_min / CTX_SUBDIV);
+    rasterizer->state->ink_max_x = ctx_maxi (rasterizer->state->ink_min_x, rasterizer->col_max / CTX_SUBDIV);
+    rasterizer->state->ink_min_y = ctx_mini (rasterizer->state->ink_min_y, rasterizer->scan_min / CTX_FULL_AA);
+    rasterizer->state->ink_max_y = ctx_maxi (rasterizer->state->ink_max_y, rasterizer->scan_max / CTX_FULL_AA);
+
+#if CTX_FAST_FILL_RECT
+  if (rasterizer->edge_list.count == 5)
+    {
+      CtxSegment *entry0 = &(((CtxSegment*)(rasterizer->edge_list.entries)))[0];
+      CtxSegment *entry1 = &(((CtxSegment*)(rasterizer->edge_list.entries)))[1];
+      CtxSegment *entry2 = &(((CtxSegment*)(rasterizer->edge_list.entries)))[2];
+      CtxSegment *entry3 = &(((CtxSegment*)(rasterizer->edge_list.entries)))[3];
+
+
+      if (
+          (!(rasterizer->state->gstate.clipped != 0)) &
+          (entry0->data.s16[2] == entry1->data.s16[2]) &
+          (entry0->data.s16[3] == entry3->data.s16[3]) &
+          (entry1->data.s16[3] == entry2->data.s16[3]) &
+          (entry2->data.s16[2] == entry3->data.s16[2])
+#if CTX_ENABLE_SHADOW_BLUR
+           && !rasterizer->in_shadow
+#endif
+         )
+       {
+         float x0 = entry3->data.s16[2] * (1.0f / CTX_SUBDIV);
+         float y0 = entry3->data.s16[3] * (1.0f / CTX_FULL_AA);
+         float x1 = entry1->data.s16[2] * (1.0f / CTX_SUBDIV);
+         float y1 = entry1->data.s16[3] * (1.0f / CTX_FULL_AA);
+
+         if (x1 > x0 && y1 > y0)
+         {
+           ctx_composite_fill_rect (rasterizer, x0, y0, x1, y1, 255);
+           goto done;
+         }
+       }
+    }
+#endif
+
+    ctx_rasterizer_finish_shape (rasterizer);
+
+    uint32_t hash = ctx_rasterizer_poly_to_edges (rasterizer);
+    if (hash){};
+
+#if CTX_SHAPE_CACHE
+    int width = (rasterizer->col_max + (CTX_SUBDIV-1) ) / CTX_SUBDIV - rasterizer->col_min/CTX_SUBDIV + 1;
+    int height = (rasterizer->scan_max + (CTX_FULL_AA-1) ) / CTX_FULL_AA - rasterizer->scan_min / CTX_FULL_AA + 1;
+    if (width * height < CTX_SHAPE_CACHE_DIM && width >=1 && height >= 1
+        && width < CTX_SHAPE_CACHE_MAX_DIM
+        && height < CTX_SHAPE_CACHE_MAX_DIM 
+#if CTX_ENABLE_SHADOW_BLUR
+        && !rasterizer->in_shadow
+#endif
+        )
+      {
+        int scan_min = rasterizer->scan_min;
+        int col_min = rasterizer->col_min;
+        scan_min -= (scan_min % CTX_FULL_AA);
+        int y0 = scan_min / CTX_FULL_AA;
+        int y1 = y0 + height;
+        int x0 = col_min / CTX_SUBDIV;
+        int ymin = y0;
+        int x1 = x0 + width;
+        int clip_x_min = blit_x;
+        int clip_x_max = blit_x + blit_width - 1;
+        int clip_y_min = blit_y;
+        int clip_y_max = blit_y + blit_height - 1;
+
+        int dont_cache = 0;
+        if (CTX_UNLIKELY(x1 >= clip_x_max))
+          { x1 = clip_x_max;
+            dont_cache = 1;
+          }
+        int xo = 0;
+        if (CTX_UNLIKELY(x0 < clip_x_min))
+          {
+            xo = clip_x_min - x0;
+            x0 = clip_x_min;
+            dont_cache = 1;
+          }
+        if (CTX_UNLIKELY(y0 < clip_y_min || y1 >= clip_y_max))
+          dont_cache = 1;
+        if (dont_cache || !_ctx_shape_cache_enabled)
+        {
+          rasterizer->scanline = scan_min;
+          ctx_rasterizer_rasterize_edges (rasterizer, rasterizer->state->gstate.fill_rule
+#if CTX_SHAPE_CACHE
+                                        , NULL
+#endif
+                                       );
+        }
+        else
+        {
+        rasterizer->scanline = scan_min;
+        CtxShapeEntry *shape = ctx_shape_entry_find (rasterizer, hash, width, height); 
+
+        if (shape->uses == 0)
+          {
+            CtxBuffer *buffer_backup = rasterizer->clip_buffer;
+            rasterizer->clip_buffer = NULL;
+            ctx_rasterizer_rasterize_edges (rasterizer, rasterizer->state->gstate.fill_rule, shape);
+            rasterizer->clip_buffer = buffer_backup;
+          }
+
+        int ewidth = x1 - x0;
+        if (ewidth>0)
+        {
+          rasterizer->scanline = scan_min;
+          int bpp = rasterizer->format->bpp;
+          if (rasterizer->clip_buffer && !rasterizer->clip_rectangle)
+          {
+          uint8_t composite[ewidth];
+          uint8_t *clip_data = (uint8_t*)rasterizer->clip_buffer->data;
+          int shape_width = shape->width;
+          for (int y = y0; y < y1; y++)
+            {
+              if ( (y >= clip_y_min) && (y <= clip_y_max) )
+                {
+                    for (int x = 0; x < ewidth; x++)
+                    {
+                      int val = shape->data[shape_width * (int)(y-ymin) + xo + x];
+                      // XXX : not valid for 1bit clip buffers
+                      val = (val*(clip_data) [
+                              ((y-blit_y) * blit_width) + x0 + x])/255;
+                      composite[x] = val;
+                    }
+                    rasterizer->apply_coverage (rasterizer,
+                                                 ( (uint8_t *) rasterizer->buf) + (y-blit_y) * blit_stride + ((int) (x0) * bpp)/8,
+                                                 rasterizer->color,
+                                                 x0, // is 0
+                                                 composite,
+                                                 ewidth );
+                 }
+               rasterizer->scanline += CTX_FULL_AA;
+            }
+          }
+          else
+          {
+          for (int y = y0; y < y1; y++)
+            {
+              if (CTX_LIKELY((y >= clip_y_min) && (y <= clip_y_max) ))
+                {
+                    rasterizer->apply_coverage (rasterizer,
+                                                 ( (uint8_t *) rasterizer->buf) + (y-blit_y) * blit_stride + (int) ((x0) * bpp)/8, rasterizer->color,
+                                                 x0,
+                                                 &shape->data[shape->width * (int) (y-ymin) + xo],
+                                                 ewidth );
+                }
+               rasterizer->scanline += CTX_FULL_AA;
+            }
+          }
+         }
+        }
+      }
+    else
+#endif
+    {
+            
+    ctx_rasterizer_rasterize_edges (rasterizer, rasterizer->state->gstate.fill_rule
+#if CTX_SHAPE_CACHE
+                                    , NULL
+#endif
+                                   );
+    }
+  }
+#if CTX_FAST_FILL_RECT
+done:
+#endif
+  if (CTX_UNLIKELY(rasterizer->preserve))
+    {
+      memcpy (rasterizer->edge_list.entries, temp, sizeof (temp) );
+      rasterizer->edge_list.count = preserved_count;
+    }
+#if CTX_ENABLE_SHADOW_BLUR
+  if (CTX_UNLIKELY(rasterizer->in_shadow))
+  {
+    rasterizer->scan_min -= rasterizer->shadow_y * CTX_FULL_AA;
+    rasterizer->scan_max -= rasterizer->shadow_y * CTX_FULL_AA;
+    rasterizer->col_min  -= (rasterizer->shadow_x - rasterizer->state->gstate.shadow_blur * 3 + 1) * CTX_SUBDIV;
+    rasterizer->col_max  -= (rasterizer->shadow_x + rasterizer->state->gstate.shadow_blur * 3 + 1) * CTX_SUBDIV;
+  }
+#endif
+  rasterizer->preserve = 0;
+}
+
+#if 0
+static void
+ctx_rasterizer_triangle (CtxRasterizer *rasterizer,
+                         int x0, int y0,
+                         int x1, int y1,
+                         int x2, int y2,
+                         int r0, int g0, int b0, int a0,
+                         int r1, int g1, int b1, int a1,
+                         int r2, int g2, int b2, int a2,
+                         int u0, int v0,
+                         int u1, int v1)
+{
+
+}
+#endif
+
+
+typedef struct _CtxTermGlyph CtxTermGlyph;
+
+struct _CtxTermGlyph
+{
+  uint32_t unichar;
+  int      col;
+  int      row;
+  uint8_t  rgba_bg[4];
+  uint8_t  rgba_fg[4];
+};
+
+static int _ctx_glyph (Ctx *ctx, uint32_t unichar, int stroke);
+static void
+ctx_rasterizer_glyph (CtxRasterizer *rasterizer, uint32_t unichar, int stroke)
+{
+  float tx = rasterizer->state->x;
+  float ty = rasterizer->state->y - rasterizer->state->gstate.font_size;
+  float tx2 = rasterizer->state->x + rasterizer->state->gstate.font_size;
+  float ty2 = rasterizer->state->y + rasterizer->state->gstate.font_size;
+  _ctx_user_to_device (rasterizer->state, &tx, &ty);
+  _ctx_user_to_device (rasterizer->state, &tx2, &ty2);
+
+  if (tx2 < rasterizer->blit_x || ty2 < rasterizer->blit_y) return;
+  if (tx  > rasterizer->blit_x + rasterizer->blit_width ||
+      ty  > rasterizer->blit_y + rasterizer->blit_height)
+          return;
+
+#if CTX_BRAILLE_TEXT
+  float font_size = 0;
+  int ch = 1;
+  int cw = 1;
+
+  if (rasterizer->term_glyphs)
+  {
+    float tx = 0;
+    font_size = rasterizer->state->gstate.font_size;
+
+    ch = (int)ctx_term_get_cell_height (rasterizer->backend.ctx);
+    cw = (int)ctx_term_get_cell_width (rasterizer->backend.ctx);
+
+    _ctx_user_to_device_distance (rasterizer->state, &tx, &font_size);
+  }
+  if (rasterizer->term_glyphs && !stroke &&
+      fabsf (font_size - ch) < 0.5f)
+  {
+    float tx = rasterizer->x;
+    float ty = rasterizer->y;
+    _ctx_user_to_device (rasterizer->state, &tx, &ty);
+    int col = (int)(tx / cw + 1);
+    int row = (int)(ty / ch + 1);
+    CtxTermGlyph *glyph = ctx_calloc (sizeof (CtxTermGlyph), 1);
+    ctx_list_append (&rasterizer->glyphs, glyph);
+    glyph->unichar = unichar;
+    glyph->col = col;
+    glyph->row = row;
+    ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_fill.color,
+                         &glyph->rgba_fg[0]);
+  }
+  else
+#endif
+  _ctx_glyph (rasterizer->backend.ctx, unichar, stroke);
+}
+
+static void
+_ctx_text (Ctx        *ctx,
+           const char *string,
+           int         stroke,
+           int         visible);
+static void
+ctx_rasterizer_text (CtxRasterizer *rasterizer, const char *string, int stroke)
+{
+#if CTX_BRAILLE_TEXT
+  float font_size = 0;
+  if (rasterizer->term_glyphs)
+  {
+    float tx = 0;
+    font_size = rasterizer->state->gstate.font_size;
+    _ctx_user_to_device_distance (rasterizer->state, &tx, &font_size);
+  }
+  int   ch = (int)ctx_term_get_cell_height (rasterizer->backend.ctx);
+  int   cw = (int)ctx_term_get_cell_width (rasterizer->backend.ctx);
+
+  if (rasterizer->term_glyphs && !stroke &&
+      fabsf (font_size - ch) < 0.5f)
+  {
+    float tx = rasterizer->x;
+    float ty = rasterizer->y;
+    _ctx_user_to_device (rasterizer->state, &tx, &ty);
+    int col = (int)(tx / cw + 1);
+    int row = (int)(ty / ch + 1);
+
+    for (int i = 0; string[i]; i++, col++)
+    {
+      CtxTermGlyph *glyph = ctx_calloc (sizeof (CtxTermGlyph), 1);
+      ctx_list_prepend (&rasterizer->glyphs, glyph);
+      glyph->unichar = string[i];
+      glyph->col = col;
+      glyph->row = row;
+      ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_fill.color,
+                      glyph->rgba_fg);
+    }
+  }
+  else
+#endif
+  {
+    _ctx_text (rasterizer->backend.ctx, string, stroke, 1);
+  }
+}
+
+void
+_ctx_font (Ctx *ctx, const char *name);
+static void
+ctx_rasterizer_set_font (CtxRasterizer *rasterizer, const char *font_name)
+{
+  //_ctx_font (rasterizer->backend.ctx, font_name);
+}
+
+static void
+ctx_rasterizer_arc (CtxRasterizer *rasterizer,
+                    float          x,
+                    float          y,
+                    float          radius,
+                    float          start_angle,
+                    float          end_angle,
+                    int            anticlockwise)
+{
+  float factor = ctx_matrix_get_scale (&rasterizer->state->gstate.transform);
+  int full_segments = CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS;
+  full_segments = (int)(factor * radius * CTX_PI * 2 / 4.0f);
+  if (full_segments > CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS)
+    { full_segments = CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS; }
+  if (full_segments < 42) full_segments = 42;
+  float step = CTX_PI*2.0f/full_segments;
+  int steps;
+
+  if (end_angle < -30.0f)
+    end_angle = -30.0f;
+  if (start_angle < -30.0f)
+    start_angle = -30.0f;
+  if (end_angle > 30.0f)
+    end_angle = 30.0f;
+  if (start_angle > 30.0f)
+    start_angle = 30.0f;
+
+  if (radius <= 0.0001f)
+          return;
+
+  if (end_angle == start_angle)
+          // XXX also detect arcs fully outside render view
+    {
+    if (rasterizer->has_prev!=0)
+      ctx_rasterizer_line_to (rasterizer, x + ctx_cosf (end_angle) * radius,
+                              y + ctx_sinf (end_angle) * radius);
+      else
+      ctx_rasterizer_move_to (rasterizer, x + ctx_cosf (end_angle) * radius,
+                            y + ctx_sinf (end_angle) * radius);
+      return;
+    }
+#if 1
+  if ( (!anticlockwise && fabsf((end_angle - start_angle) - CTX_PI*2) < 0.01f)  ||
+       ( (anticlockwise && fabsf((start_angle - end_angle) - CTX_PI*2) < 0.01f ) ) 
+  ||   (anticlockwise && fabsf((end_angle - start_angle) - CTX_PI*2) < 0.01f)  ||  (!anticlockwise && fabsf((start_angle - end_angle) - CTX_PI*2) < 0.01f )  )
+    {
+      steps = full_segments - 1;
+    }
+  else
+#endif
+    {
+      if (anticlockwise)
+      steps = (int)((start_angle - end_angle) / (CTX_PI*2) * full_segments);
+      else
+      steps = (int)((end_angle - start_angle) / (CTX_PI*2) * full_segments);
+   // if (steps > full_segments)
+   //   steps = full_segments;
+    }
+
+  if (anticlockwise) { step = step * -1; }
+  int first = 1;
+  if (steps == 0 /* || steps==full_segments -1  || (anticlockwise && steps == full_segments) */)
+    {
+      float xv = x + ctx_cosf (start_angle) * radius;
+      float yv = y + ctx_sinf (start_angle) * radius;
+      if (!rasterizer->has_prev)
+        { ctx_rasterizer_move_to (rasterizer, xv, yv); }
+      first = 0;
+    }
+  else
+    {
+      for (float angle = start_angle, i = 0; i < steps; angle += step, i++)
+        {
+          float xv = x + ctx_cosf (angle) * radius;
+          float yv = y + ctx_sinf (angle) * radius;
+          if (first && !rasterizer->has_prev)
+            { ctx_rasterizer_move_to (rasterizer, xv, yv); }
+          else
+            { ctx_rasterizer_line_to (rasterizer, xv, yv); }
+          first = 0;
+        }
+    }
+  ctx_rasterizer_line_to (rasterizer, x + ctx_cosf (end_angle) * radius,
+                          y + ctx_sinf (end_angle) * radius);
+}
+
+static void
+ctx_rasterizer_quad_to (CtxRasterizer *rasterizer,
+                        float        cx,
+                        float        cy,
+                        float        x,
+                        float        y)
+{
+  ctx_rasterizer_curve_to (rasterizer,
+                           (cx * 2 + rasterizer->x) / 3.0f, (cy * 2 + rasterizer->y) / 3.0f,
+                           (cx * 2 + x) / 3.0f,           (cy * 2 + y) / 3.0f,
+                           x,                              y);
+}
+
+static void
+ctx_rasterizer_rel_quad_to (CtxRasterizer *rasterizer,
+                            float cx, float cy,
+                            float x,  float y)
+{
+  ctx_rasterizer_quad_to (rasterizer, cx + rasterizer->x, cy + rasterizer->y,
+                          x  + rasterizer->x, y  + rasterizer->y);
+}
+
+static void
+ctx_rasterizer_rectangle_reverse (CtxRasterizer *rasterizer,
+                                  float x,
+                                  float y,
+                                  float width,
+                                  float height);
+
+static void
+ctx_rasterizer_stroke (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  CtxSource source_backup;
+  int count = rasterizer->edge_list.count;
+  if (count == 0)
+    return;
+  if (gstate->source_stroke.type != CTX_SOURCE_INHERIT_FILL)
+  {
+    source_backup = gstate->source_fill;
+    gstate->source_fill = rasterizer->state->gstate.source_stroke;
+  }
+  int preserved = rasterizer->preserve;
+  float factor = ctx_matrix_get_scale (&gstate->transform);
+  float line_width = gstate->line_width * factor;
+
+  rasterizer->comp_op = NULL;
+  ctx_composite_setup (rasterizer);
+
+  CtxSegment temp[count]; /* copy of already built up path's poly line  */
+  memcpy (temp, rasterizer->edge_list.entries, sizeof (temp) );
+
+#if CTX_FAST_FILL_RECT
+  if (rasterizer->edge_list.count == 5)
+    {
+      CtxSegment *entry0 = &((CtxSegment*)rasterizer->edge_list.entries)[0];
+      CtxSegment *entry1 = &((CtxSegment*)rasterizer->edge_list.entries)[1];
+      CtxSegment *entry2 = &((CtxSegment*)rasterizer->edge_list.entries)[2];
+      CtxSegment *entry3 = &((CtxSegment*)rasterizer->edge_list.entries)[3];
+
+      if (!rasterizer->state->gstate.clipped &&
+          (entry0->data.s16[2] == entry1->data.s16[2]) &&
+          (entry0->data.s16[3] == entry3->data.s16[3]) &&
+          (entry1->data.s16[3] == entry2->data.s16[3]) &&
+          (entry2->data.s16[2] == entry3->data.s16[2])
+#if CTX_ENABLE_SHADOW_BLUR
+           && !rasterizer->in_shadow
+#endif
+         )
+       {
+
+        float x0 = entry3->data.s16[2] * 1.0f / CTX_SUBDIV;
+        float y0 = entry3->data.s16[3] * 1.0f / CTX_FULL_AA;
+        float x1 = entry1->data.s16[2] * 1.0f / CTX_SUBDIV;
+        float y1 = entry1->data.s16[3] * 1.0f / CTX_FULL_AA;
+
+        ctx_composite_stroke_rect (rasterizer, x0, y0, x1, y1, line_width);
+
+        goto done;
+
+
+       }
+    }
+#endif
+  
+    {
+    {
+      if (line_width < 5.0f)
+      {
+      factor *= 0.89f; /* this hack adjustment makes sharp 1px and 2px strokewidths
+      //                 end up sharp without erronious AA; we seem to be off by
+      //                 one somewhere else, causing the need for this
+      //                 */
+      line_width *= 0.89f;
+      }
+      ctx_rasterizer_reset (rasterizer); /* then start afresh with our stroked shape  */
+      CtxMatrix transform_backup = gstate->transform;
+      _ctx_matrix_identity (&gstate->transform);
+      //gstate->transform_type = 0;
+      _ctx_transform_prime (rasterizer->state);
+      float prev_x = 0.0f;
+      float prev_y = 0.0f;
+      float half_width_x = line_width/2;
+      float half_width_y = half_width_x;
+
+      if (CTX_UNLIKELY(line_width <= 0.0f))
+        { // makes 0 width be hairline
+          half_width_x = .5f;
+          half_width_y = .5f;
+        }
+      int start = 0;
+      int end   = 0;
+      while (start < count)
+        {
+          int started = 0;
+          int i;
+          for (i = start; i < count; i++)
+            {
+              CtxSegment *entry = &temp[i];
+              float x, y;
+              if (entry->code == CTX_NEW_EDGE)
+                {
+                  if (CTX_LIKELY(started))
+                    {
+                      end = i - 1;
+                      goto foo;
+                    }
+                  prev_x = entry->data.s16[0] / CTX_SUBDIV;
+                  prev_y = entry->data.s16[1] / CTX_FULL_AA;
+                  started = 1;
+                  start = i;
+                }
+              x = entry->data.s16[2] / CTX_SUBDIV;
+              y = entry->data.s16[3] / CTX_FULL_AA;
+              float dx = x - prev_x;
+              float dy = y - prev_y;
+              float length = ctx_fast_hypotf (dx, dy);
+              if (length>0.001f)
+                {
+                  float recip_length = 1.0f/length;
+                  dx = dx * recip_length * half_width_x;
+                  dy = dy * recip_length * half_width_y;
+                  if (CTX_UNLIKELY(entry->code == CTX_NEW_EDGE))
+                    {
+                      ctx_rasterizer_finish_shape (rasterizer);
+                      ctx_rasterizer_move_to (rasterizer, prev_x+dy, prev_y-dx);
+                    }
+                  ctx_rasterizer_line_to (rasterizer, prev_x-dy, prev_y+dx);
+                  
+                  // we need to know the slope of the other side
+
+                  // XXX possible miter line-to
+                  //ctx_rasterizer_line_to (rasterizer, prev_x-dy+4, prev_y+dx+10);
+                  //ctx_rasterizer_line_to (rasterizer, prev_x-dy+8, prev_y+dx+0);
+
+                  ctx_rasterizer_line_to (rasterizer, x-dy, y+dx);
+                }
+              prev_x = x;
+              prev_y = y;
+            }
+          end = i-1;
+foo:
+          for (int i = end; i >= start; i--)
+            {
+              CtxSegment *entry = &temp[i];
+              float x, y, dx, dy;
+              x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+              y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+              dx = x - prev_x;
+              dy = y - prev_y;
+              float length = ctx_fast_hypotf (dx, dy);
+              float recip_length = 1.0f/length;
+              dx = dx * recip_length * half_width_x;
+              dy = dy * recip_length * half_width_y;
+              if (CTX_LIKELY(length>0.001f))
+                {
+                  ctx_rasterizer_line_to (rasterizer, prev_x-dy, prev_y+dx);
+                  // XXX possible miter line-to
+             //   ctx_rasterizer_line_to (rasterizer, prev_x-dy+10, prev_y+dx+10);
+                  ctx_rasterizer_line_to (rasterizer, x-dy,      y+dx);
+                }
+              prev_x = x;
+              prev_y = y;
+              if (CTX_UNLIKELY(entry->code == CTX_NEW_EDGE))
+                {
+                  x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+                  y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+                  dx = x - prev_x;
+                  dy = y - prev_y;
+                  length = ctx_fast_hypotf (dx, dy);
+                  recip_length = 1.0f/length;
+                  if (CTX_LIKELY(length>0.001f))
+                    {
+                      dx = dx * recip_length * half_width_x;
+                      dy = dy * recip_length * half_width_y;
+                      ctx_rasterizer_line_to (rasterizer, prev_x-dy, prev_y+dx);
+                      ctx_rasterizer_line_to (rasterizer, x-dy, y+dx);
+                    }
+                }
+              if ( (prev_x != x) && (prev_y != y) )
+                {
+                  prev_x = x;
+                  prev_y = y;
+                }
+            }
+          start = end+1;
+        }
+      ctx_rasterizer_finish_shape (rasterizer);
+      switch (gstate->line_cap)
+        {
+          case CTX_CAP_SQUARE: // XXX: incorrect - if rectangles were in
+                               //                  reverse order - rotation would be off
+                               //                  better implement correct here
+            {
+              float x = 0, y = 0;
+              int has_prev = 0;
+              for (int i = 0; i < count; i++)
+                {
+                  CtxSegment *entry = &temp[i];
+                  if (CTX_UNLIKELY(entry->code == CTX_NEW_EDGE))
+                    {
+                      if (has_prev)
+                        {
+                          ctx_rasterizer_rectangle_reverse (rasterizer, x - half_width_x, y - half_width_y, half_width_x, half_width_y);
+                          ctx_rasterizer_finish_shape (rasterizer);
+                        }
+                      x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+                      y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+                      ctx_rasterizer_rectangle_reverse (rasterizer, x - half_width_x, y - half_width_y, half_width_x * 2, half_width_y * 2);
+                      ctx_rasterizer_finish_shape (rasterizer);
+                    }
+                  x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+                  y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+                  has_prev = 1;
+                }
+              ctx_rasterizer_rectangle_reverse (rasterizer, x - half_width_x, y - half_width_y, half_width_x * 2, half_width_y * 2);
+              ctx_rasterizer_finish_shape (rasterizer);
+            }
+            break;
+          case CTX_CAP_NONE: /* nothing to do */
+            break;
+          case CTX_CAP_ROUND:
+            {
+              float x = 0, y = 0;
+              int has_prev = 0;
+              for (int i = 0; i < count; i++)
+                {
+                  CtxSegment *entry = &temp[i];
+                  if (CTX_UNLIKELY(entry->code == CTX_NEW_EDGE))
+                    {
+                      if (has_prev)
+                        {
+                          ctx_rasterizer_arc (rasterizer, x, y, half_width_x, CTX_PI*3, 0, 1);
+                          ctx_rasterizer_finish_shape (rasterizer);
+                        }
+                      x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+                      y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+                      ctx_rasterizer_arc (rasterizer, x, y, half_width_x, CTX_PI*2, 0, 1);
+                      ctx_rasterizer_finish_shape (rasterizer);
+                    }
+                  x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+                  y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+                  has_prev = 1;
+                }
+              ctx_rasterizer_move_to (rasterizer, x, y);
+              ctx_rasterizer_arc (rasterizer, x, y, half_width_x, CTX_PI*2, 0, 1);
+              ctx_rasterizer_finish_shape (rasterizer);
+              break;
+            }
+        }
+      switch (gstate->line_join)
+        {
+          case CTX_JOIN_BEVEL:
+          case CTX_JOIN_MITER:
+            break;
+          case CTX_JOIN_ROUND:
+            {
+              float x = 0, y = 0;
+              for (int i = 0; i < count-1; i++)
+                {
+                  CtxSegment *entry = &temp[i];
+                  x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+                  y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+                  if (CTX_UNLIKELY(entry[1].code == CTX_EDGE))
+                    {
+                      ctx_rasterizer_arc (rasterizer, x, y, half_width_x, CTX_PI*2, 0, 1);
+                      ctx_rasterizer_finish_shape (rasterizer);
+                    }
+                }
+              break;
+            }
+        }
+      CtxFillRule rule_backup = gstate->fill_rule;
+      gstate->fill_rule = CTX_FILL_RULE_WINDING;
+      rasterizer->preserve = 0; // so fill isn't tripped
+      ctx_rasterizer_fill (rasterizer);
+      gstate->fill_rule = rule_backup;
+      gstate->transform = transform_backup;
+      //gstate->transform_type = 0;
+      _ctx_transform_prime (rasterizer->state);
+    }
+  }
+#if CTX_FAST_FILL_RECT
+done:
+#endif
+  if (preserved)
+    {
+      memcpy (rasterizer->edge_list.entries, temp, sizeof (temp) );
+      rasterizer->edge_list.count = count;
+      rasterizer->preserve = 0;
+    }
+  if (gstate->source_stroke.type != CTX_SOURCE_INHERIT_FILL)
+    gstate->source_fill = source_backup;
+}
+
+#if CTX_1BIT_CLIP
+#define CTX_CLIP_FORMAT CTX_FORMAT_GRAY1
+#else
+#define CTX_CLIP_FORMAT CTX_FORMAT_GRAY8
+#endif
+
+
+static void
+ctx_rasterizer_clip_reset (CtxRasterizer *rasterizer)
+{
+#if CTX_ENABLE_CLIP
+  if (rasterizer->clip_buffer)
+   ctx_buffer_destroy (rasterizer->clip_buffer);
+  rasterizer->clip_buffer = NULL;
+#endif
+  rasterizer->state->gstate.clip_min_x = rasterizer->blit_x;
+  rasterizer->state->gstate.clip_min_y = rasterizer->blit_y;
+
+  rasterizer->state->gstate.clip_max_x = rasterizer->blit_x + rasterizer->blit_width - 1;
+  rasterizer->state->gstate.clip_max_y = rasterizer->blit_y + rasterizer->blit_height - 1;
+}
+
+static void
+ctx_rasterizer_clip_apply (CtxRasterizer *rasterizer,
+                           CtxSegment    *edges)
+{
+  unsigned int count = edges[0].data.u32[0];
+
+  int minx = 5000;
+  int miny = 5000;
+  int maxx = -5000;
+  int maxy = -5000;
+  int prev_x = 0;
+  int prev_y = 0;
+  int blit_width = rasterizer->blit_width;
+  int blit_height = rasterizer->blit_height;
+
+  float coords[6][2];
+
+  for (unsigned int i = 0; i < count; i++)
+    {
+      CtxSegment *entry = &edges[i+1];
+      float x, y;
+      if (entry->code == CTX_NEW_EDGE)
+        {
+          prev_x = entry->data.s16[0] / CTX_SUBDIV;
+          prev_y = entry->data.s16[1] / CTX_FULL_AA;
+          if (prev_x < minx) { minx = prev_x; }
+          if (prev_y < miny) { miny = prev_y; }
+          if (prev_x > maxx) { maxx = prev_x; }
+          if (prev_y > maxy) { maxy = prev_y; }
+        }
+      x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+      y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+      if (x < minx) { minx = (int)x; }
+      if (y < miny) { miny = (int)y; }
+      if (x > maxx) { maxx = (int)x; }
+      if (y > maxy) { maxy = (int)y; }
+
+      if (i < 6)
+      {
+        coords[i][0] = x;
+        coords[i][1] = y;
+      }
+    }
+
+#if CTX_ENABLE_CLIP
+
+  if ((rasterizer->clip_rectangle==1
+       || !rasterizer->clip_buffer)
+      )
+  {
+    if (count == 5)
+    {
+      if (coords[0][0] == coords[1][0] &&
+          coords[0][1] == coords[4][1] &&
+          coords[0][1] == coords[3][1] &&
+          coords[1][1] == coords[2][1] &&
+          coords[3][0] == coords[4][0]
+          )
+      {
+#if 0
+        printf ("%d,%d %dx%d\n", minx, miny,
+                                       maxx-minx+1, maxy-miny+1);
+#endif
+
+         rasterizer->state->gstate.clip_min_x =
+            ctx_maxi (minx, rasterizer->state->gstate.clip_min_x);
+         rasterizer->state->gstate.clip_min_y =
+            ctx_maxi (miny, rasterizer->state->gstate.clip_min_y);
+         rasterizer->state->gstate.clip_max_x =
+            ctx_mini (maxx, rasterizer->state->gstate.clip_max_x);
+         rasterizer->state->gstate.clip_max_y =
+            ctx_mini (maxy, rasterizer->state->gstate.clip_max_y);
+
+         rasterizer->clip_rectangle = 1;
+
+#if 0
+         if (!rasterizer->clip_buffer)
+           rasterizer->clip_buffer = ctx_buffer_new (blit_width,
+                                                     blit_height,
+                                                     CTX_CLIP_FORMAT);
+
+         memset (rasterizer->clip_buffer->data, 0, blit_width * blit_height);
+         int i = 0;
+         for (int y = rasterizer->state->gstate.clip_min_y;
+                  y <= rasterizer->state->gstate.clip_max_y;
+                  y++)
+         for (int x = rasterizer->state->gstate.clip_min_x;
+                  x <= rasterizer->state->gstate.clip_max_x;
+                  x++, i++)
+         {
+           ((uint8_t*)(rasterizer->clip_buffer->data))[i] = 255;
+         }
+#endif
+
+         return;
+      }
+#if 0
+      else
+      {
+        printf ("%d,%d %dx%d  0,0:%.2f 0,1:%.2f 1,0:%.2f 11:%.2f 20:%.2f 21:%2.f 30:%.2f 31:%.2f 40:%.2f 41:%.2f\n", minx, miny,
+                                       maxx-minx+1, maxy-miny+1
+                                       
+         ,coords[0][0] ,  coords[0][1]
+         ,coords[1][0] ,  coords[1][1]
+         ,coords[2][0] ,  coords[2][1]
+         ,coords[3][0] ,  coords[3][1]
+         ,coords[4][0] ,  coords[4][1]
+         );
+      }
+#endif
+    }
+  }
+  rasterizer->clip_rectangle = 0;
+
+  if ((minx == maxx) || (miny == maxy)) // XXX : reset hack
+  {
+    ctx_rasterizer_clip_reset (rasterizer);
+    return;//goto done;
+  }
+
+  int we_made_it = 0;
+  CtxBuffer *clip_buffer;
+
+  if (!rasterizer->clip_buffer)
+  {
+    rasterizer->clip_buffer = ctx_buffer_new (blit_width,
+                                              blit_height,
+                                              CTX_CLIP_FORMAT);
+    clip_buffer = rasterizer->clip_buffer;
+    we_made_it = 1;
+    if (CTX_CLIP_FORMAT == CTX_FORMAT_GRAY1)
+      memset (rasterizer->clip_buffer->data, 0, blit_width * blit_height/8);
+    else
+      memset (rasterizer->clip_buffer->data, 0, blit_width * blit_height);
+  }
+  else
+  {
+    clip_buffer = ctx_buffer_new (blit_width, blit_height,
+                                  CTX_CLIP_FORMAT);
+  }
+
+  {
+
+  float prev_x = 0;
+  float prev_y = 0;
+
+    Ctx *ctx = ctx_new_for_framebuffer (clip_buffer->data, blit_width, blit_height,
+       blit_width,
+       CTX_CLIP_FORMAT);
+
+  for (unsigned int i = 0; i < count; i++)
+    {
+      CtxSegment *entry = &edges[i+1];
+      float x, y;
+      if (entry->code == CTX_NEW_EDGE)
+        {
+          prev_x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+          prev_y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+          ctx_move_to (ctx, prev_x, prev_y);
+        }
+      x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+      y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+      ctx_line_to (ctx, x, y);
+    }
+    ctx_gray (ctx, 1.0f);
+    ctx_fill (ctx);
+    ctx_destroy (ctx);
+  }
+
+  int maybe_rect = 1;
+  rasterizer->clip_rectangle = 0;
+
+  if (CTX_CLIP_FORMAT == CTX_FORMAT_GRAY1)
+  {
+    unsigned int count = blit_width * blit_height / 8;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      ((uint8_t*)rasterizer->clip_buffer->data)[i] =
+      (((uint8_t*)rasterizer->clip_buffer->data)[i] &
+      ((uint8_t*)clip_buffer->data)[i]);
+    }
+  }
+  else
+  {
+    int count = blit_width * blit_height;
+
+
+    int i;
+    int x0 = 0;
+    int y0 = 0;
+    int width = -1;
+    int next_stage = 0;
+    uint8_t *p_data = (uint8_t*)rasterizer->clip_buffer->data;
+    uint8_t *data = (uint8_t*)clip_buffer->data;
+
+    i=0;
+    /* find upper left */
+    for (; i < count && maybe_rect && !next_stage; i++)
+    {
+      uint8_t val = (p_data[i] * data[i])/255;
+      data[i] = val;
+      switch (val)
+      {
+        case 255:
+          x0 = i % blit_width;
+          y0 = i / blit_width;
+          next_stage = 1;
+          break;
+        case 0: break;
+        default:
+          maybe_rect = 0;
+          break;
+      }
+    }
+
+    next_stage = 0;
+    /* figure out with */
+    for (; i < count && !next_stage && maybe_rect; i++)
+    {
+      int x = i % blit_width;
+      int y = i / blit_width;
+      uint8_t val = (p_data[i] * data[i])/255;
+      data[i] = val;
+
+      if (y == y0)
+      {
+        switch (val)
+        {
+          case 255:
+            width = x - x0 + 1;
+            break;
+          case 0:
+            next_stage = 1;
+            break;
+          default:
+            maybe_rect = 0;
+            break;
+        }
+        if (x % blit_width == blit_width - 1) next_stage = 1;
+      }
+      else next_stage = 1;
+    }
+
+    next_stage = 0;
+    /* body */
+    for (; i < count && maybe_rect && !next_stage; i++)
+    {
+      int x = i % blit_width;
+      uint8_t val = (p_data[i] * data[i])/255;
+      data[i] = val;
+
+      if (x < x0)
+      {
+        if (val != 0){ maybe_rect = 0; next_stage = 1; }
+      } else if (x < x0 + width)
+      {
+        if (val != 255){ if (val != 0) maybe_rect = 0; next_stage = 1; }
+      } else {
+        if (val != 0){ maybe_rect = 0; next_stage = 1; }
+      }
+    }
+
+    next_stage = 0;
+    /* foot */
+    for (; i < count && maybe_rect && !next_stage; i++)
+    {
+      uint8_t val = (p_data[i] * data[i])/255;
+      data[i] = val;
+
+      if (val != 0){ maybe_rect = 0; next_stage = 1; }
+    }
+
+
+    for (; i < count; i++)
+    {
+      uint8_t val = (p_data[i] * data[i])/255;
+      data[i] = val;
+    }
+
+    if (maybe_rect)
+       rasterizer->clip_rectangle = 1;
+  }
+  if (!we_made_it)
+   ctx_buffer_destroy (clip_buffer);
+#else
+  if (coords[0][0]){};
+#endif
+  
+  rasterizer->state->gstate.clip_min_x = ctx_maxi (minx,
+                                         rasterizer->state->gstate.clip_min_x);
+  rasterizer->state->gstate.clip_min_y = ctx_maxi (miny,
+                                         rasterizer->state->gstate.clip_min_y);
+  rasterizer->state->gstate.clip_max_x = ctx_mini (maxx,
+                                         rasterizer->state->gstate.clip_max_x);
+  rasterizer->state->gstate.clip_max_y = ctx_mini (maxy,
+                                         rasterizer->state->gstate.clip_max_y);
+}
+
+
+static void
+ctx_rasterizer_clip (CtxRasterizer *rasterizer)
+{
+  int count = rasterizer->edge_list.count;
+  CtxSegment temp[count+1]; /* copy of already built up path's poly line  */
+  rasterizer->state->has_clipped=1;
+  rasterizer->state->gstate.clipped=1;
+  //if (rasterizer->preserve)
+    { memcpy (temp + 1, rasterizer->edge_list.entries, sizeof (temp) - sizeof (temp[0]));
+      temp[0].code = CTX_NOP;
+      temp[0].data.u32[0] = count;
+      ctx_state_set_blob (rasterizer->state, CTX_clip, (uint8_t*)temp, sizeof(temp));
+    }
+  ctx_rasterizer_clip_apply (rasterizer, temp);
+  ctx_rasterizer_reset (rasterizer);
+  if (rasterizer->preserve)
+    {
+      memcpy (rasterizer->edge_list.entries, temp + 1, sizeof (temp) - sizeof(temp[0]));
+      rasterizer->edge_list.count = count;
+      rasterizer->preserve = 0;
+    }
+}
+
+
+#if 0
+static void
+ctx_rasterizer_load_image (CtxRasterizer *rasterizer,
+                           const char  *path,
+                           float x,
+                           float y)
+{
+  // decode PNG, put it in image is slot 1,
+  // magic width height stride format data
+  ctx_buffer_load_png (&rasterizer->backend.ctx->texture[0], path);
+  ctx_rasterizer_set_texture (rasterizer, 0, x, y);
+}
+#endif
+
+static void
+ctx_rasterizer_rectangle_reverse (CtxRasterizer *rasterizer,
+                                  float x,
+                                  float y,
+                                  float width,
+                                  float height)
+{
+  ctx_rasterizer_move_to (rasterizer, x, y);
+  ctx_rasterizer_rel_line_to (rasterizer, 0, height);
+  ctx_rasterizer_rel_line_to (rasterizer, width, 0);
+  ctx_rasterizer_rel_line_to (rasterizer, 0, -height);
+  ctx_rasterizer_rel_line_to (rasterizer, -width, 0);
+  //ctx_rasterizer_rel_line_to (rasterizer, width/2, 0);
+  ctx_rasterizer_finish_shape (rasterizer);
+}
+
+static void
+ctx_rasterizer_rectangle (CtxRasterizer *rasterizer,
+                          float x,
+                          float y,
+                          float width,
+                          float height)
+{
+  ctx_rasterizer_move_to (rasterizer, x, y);
+  ctx_rasterizer_rel_line_to (rasterizer, width, 0);
+  ctx_rasterizer_rel_line_to (rasterizer, 0, height);
+  ctx_rasterizer_rel_line_to (rasterizer, -width, 0);
+  ctx_rasterizer_rel_line_to (rasterizer, 0, -height);
+  //ctx_rasterizer_rel_line_to (rasterizer, width/2, 0);
+  ctx_rasterizer_finish_shape (rasterizer);
+}
+
+static void
+ctx_rasterizer_set_pixel (CtxRasterizer *rasterizer,
+                          uint16_t x,
+                          uint16_t y,
+                          uint8_t r,
+                          uint8_t g,
+                          uint8_t b,
+                          uint8_t a)
+{
+  rasterizer->state->gstate.source_fill.type = CTX_SOURCE_COLOR;
+  ctx_color_set_RGBA8 (rasterizer->state, &rasterizer->state->gstate.source_fill.color, r, g, b, a);
+  rasterizer->comp_op = NULL;
+#if 0
+  // XXX : doesn't take transforms into account - and has
+  // received less testing than code paths part of protocol,
+  // using rectangle properly will trigger the fillrect fastpath
+  ctx_rasterizer_pset (rasterizer, x, y, 255);
+#else
+  ctx_rasterizer_rectangle (rasterizer, x, y, 1.0, 1.0);
+  ctx_rasterizer_fill (rasterizer);
+#endif
+}
+
+#if CTX_ENABLE_SHADOW_BLUR
+static inline float
+ctx_gaussian (float x, float mu, float sigma)
+{
+  float a = ( x- mu) / sigma;
+  return ctx_expf (-0.5f * a * a);
+}
+
+static inline void
+ctx_compute_gaussian_kernel (int dim, float radius, float *kernel)
+{
+  float sigma = radius / 2;
+  float sum = 0.0;
+  int i = 0;
+  //for (int row = 0; row < dim; row ++)
+    for (int col = 0; col < dim; col ++, i++)
+    {
+      float val = //ctx_gaussian (row, radius, sigma) *
+                            ctx_gaussian (col, radius, sigma);
+      kernel[i] = val;
+      sum += val;
+    }
+  i = 0;
+  //for (int row = 0; row < dim; row ++)
+    for (int col = 0; col < dim; col ++, i++)
+        kernel[i] /= sum;
+}
+#endif
+
+static void
+ctx_rasterizer_round_rectangle (CtxRasterizer *rasterizer, float x, float y, float width, float height, float corner_radius)
+{
+  float aspect  = 1.0f;
+  float radius  = corner_radius / aspect;
+  float degrees = CTX_PI / 180.0f;
+
+  if (radius > width*0.5f) radius = width/2;
+  if (radius > height*0.5f) radius = height/2;
+
+  ctx_rasterizer_finish_shape (rasterizer);
+  ctx_rasterizer_arc (rasterizer, x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees, 0);
+  ctx_rasterizer_arc (rasterizer, x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees, 0);
+  ctx_rasterizer_arc (rasterizer, x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees, 0);
+  ctx_rasterizer_arc (rasterizer, x + radius, y + radius, radius, 180 * degrees, 270 * degrees, 0);
+
+  ctx_rasterizer_finish_shape (rasterizer);
+}
+
+static void
+ctx_rasterizer_process (Ctx *ctx, CtxCommand *command);
+
+#if CTX_COMPOSITING_GROUPS
+static void
+ctx_rasterizer_start_group (CtxRasterizer *rasterizer) /* add a radius? */
+{
+  CtxEntry save_command = ctx_void(CTX_SAVE);
+  // allocate buffer, and set it as temporary target
+  int no;
+  if (rasterizer->group[0] == NULL) // first group
+  {
+    rasterizer->saved_buf = rasterizer->buf;
+  }
+  for (no = 0; rasterizer->group[no] && no < CTX_GROUP_MAX; no++);
+
+  if (no >= CTX_GROUP_MAX)
+     return;
+  rasterizer->group[no] = ctx_buffer_new (rasterizer->blit_width,
+                                          rasterizer->blit_height,
+                                          rasterizer->format->composite_format);
+  rasterizer->buf = rasterizer->group[no]->data;
+  ctx_rasterizer_process (rasterizer->backend.ctx, (CtxCommand*)&save_command);
+}
+
+static void
+ctx_rasterizer_end_group (CtxRasterizer *rasterizer)
+{
+  CtxEntry restore_command = ctx_void(CTX_RESTORE);
+  CtxEntry save_command = ctx_void(CTX_SAVE);
+  int no = 0;
+  for (no = 0; rasterizer->group[no] && no < CTX_GROUP_MAX; no++);
+  no--;
+
+  if (no < 0)
+    return;
+
+  Ctx *ctx = rasterizer->backend.ctx;
+
+  CtxCompositingMode comp = rasterizer->state->gstate.compositing_mode;
+  CtxBlend blend = rasterizer->state->gstate.blend_mode;
+  CtxExtend extend = rasterizer->state->gstate.extend;
+  float global_alpha = rasterizer->state->gstate.global_alpha_f;
+  // fetch compositing, blending, global alpha
+  ctx_rasterizer_process (ctx, (CtxCommand*)&restore_command);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&save_command);
+  CtxEntry set_state[4]=
+  {
+    ctx_u32 (CTX_COMPOSITING_MODE, comp,  0),
+    ctx_u32 (CTX_BLEND_MODE,       blend, 0),
+    ctx_u32 (CTX_EXTEND,          extend, 0),
+    ctx_f  (CTX_GLOBAL_ALPHA,     global_alpha, 0.0)
+  };
+  ctx_rasterizer_process (ctx, (CtxCommand*)&set_state[0]);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&set_state[1]);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&set_state[2]);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&set_state[3]);
+  if (no == 0)
+  {
+    rasterizer->buf = rasterizer->saved_buf;
+  }
+  else
+  {
+    rasterizer->buf = rasterizer->group[no-1]->data;
+  }
+  // XXX use texture_source ?
+   ctx_texture_init (ctx, ".ctx-group", 
+                  rasterizer->blit_width, 
+                  rasterizer->blit_height,
+                                         
+                  rasterizer->blit_width * rasterizer->format->bpp/8,
+                  rasterizer->format->pixel_format,
+                  NULL, // space
+                  (uint8_t*)rasterizer->group[no]->data,
+                  NULL, NULL);
+  {
+     const char *eid = ".ctx-group";
+     int   eid_len = ctx_strlen (eid);
+
+     CtxEntry commands[4] =
+      {
+       ctx_f   (CTX_TEXTURE, rasterizer->blit_x, rasterizer->blit_y), 
+       ctx_u32 (CTX_DATA, eid_len, eid_len/9+1),
+       ctx_u32 (CTX_CONT, 0,0),
+       ctx_u32 (CTX_CONT, 0,0)
+      };
+     memcpy( (char *) &commands[2].data.u8[0], eid, eid_len);
+     ( (char *) (&commands[2].data.u8[0]) ) [eid_len]=0;
+
+     ctx_rasterizer_process (ctx, (CtxCommand*)commands);
+  }
+  {
+    CtxEntry commands[2]=
+    {
+      ctx_f (CTX_RECTANGLE, rasterizer->blit_x, rasterizer->blit_y),
+      ctx_f (CTX_CONT,      rasterizer->blit_width, rasterizer->blit_height)
+    };
+    ctx_rasterizer_process (ctx, (CtxCommand*)commands);
+  }
+  {
+    CtxEntry commands[1] = { ctx_void (CTX_FILL) };
+    ctx_rasterizer_process (ctx, (CtxCommand*)commands);
+  }
+  //ctx_texture_release (rasterizer->backend.ctx, ".ctx-group");
+  ctx_buffer_destroy (rasterizer->group[no]);
+  rasterizer->group[no] = 0;
+  ctx_rasterizer_process (ctx, (CtxCommand*)&restore_command);
+}
+#endif
+
+#if CTX_ENABLE_SHADOW_BLUR
+static void
+ctx_rasterizer_shadow_stroke (CtxRasterizer *rasterizer)
+{
+  CtxColor color;
+  CtxEntry save_command = ctx_void(CTX_SAVE);
+  Ctx *ctx = rasterizer->backend.ctx;
+
+  float rgba[4] = {0, 0, 0, 1.0};
+  if (ctx_get_color (rasterizer->backend.ctx, CTX_shadowColor, &color) == 0)
+    ctx_color_get_rgba (rasterizer->state, &color, rgba);
+
+  CtxEntry set_color_command [3]=
+  {
+    ctx_f (CTX_COLOR, CTX_RGBA, rgba[0]),
+    ctx_f (CTX_CONT, rgba[1], rgba[2]),
+    ctx_f (CTX_CONT, rgba[3], 0)
+  };
+  CtxEntry restore_command = ctx_void(CTX_RESTORE);
+  float radius = rasterizer->state->gstate.shadow_blur;
+  int dim = 2 * radius + 1;
+  if (dim > CTX_MAX_GAUSSIAN_KERNEL_DIM)
+    dim = CTX_MAX_GAUSSIAN_KERNEL_DIM;
+  ctx_compute_gaussian_kernel (dim, radius, rasterizer->kernel);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&save_command);
+  {
+    int i = 0;
+    for (int v = 0; v < dim; v += 1, i++)
+      {
+        float dy = rasterizer->state->gstate.shadow_offset_y + v - dim/2;
+        set_color_command[2].data.f[0] = rasterizer->kernel[i] * rgba[3];
+        ctx_rasterizer_process (ctx, (CtxCommand*)&set_color_command[0]);
+#if CTX_ENABLE_SHADOW_BLUR
+        rasterizer->in_shadow = 1;
+#endif
+        rasterizer->shadow_x = rasterizer->state->gstate.shadow_offset_x;
+        rasterizer->shadow_y = dy;
+        rasterizer->preserve = 1;
+        ctx_rasterizer_stroke (rasterizer);
+#if CTX_ENABLE_SHADOW_BLUR
+        rasterizer->in_shadow = 0;
+#endif
+      }
+  }
+  //ctx_free (kernel);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&restore_command);
+}
+
+static void
+ctx_rasterizer_shadow_text (CtxRasterizer *rasterizer, const char *str)
+{
+  float x = rasterizer->state->x;
+  float y = rasterizer->state->y;
+  CtxColor color;
+  CtxEntry save_command = ctx_void(CTX_SAVE);
+  Ctx *ctx = rasterizer->backend.ctx;
+
+  float rgba[4] = {0, 0, 0, 1.0};
+  if (ctx_get_color (rasterizer->backend.ctx, CTX_shadowColor, &color) == 0)
+    ctx_color_get_rgba (rasterizer->state, &color, rgba);
+
+  CtxEntry set_color_command [3]=
+  {
+    ctx_f (CTX_COLOR, CTX_RGBA, rgba[0]),
+    ctx_f (CTX_CONT, rgba[1], rgba[2]),
+    ctx_f (CTX_CONT, rgba[3], 0)
+  };
+  CtxEntry move_to_command [1]=
+  {
+    ctx_f (CTX_MOVE_TO, x, y),
+  };
+  CtxEntry restore_command = ctx_void(CTX_RESTORE);
+  float radius = rasterizer->state->gstate.shadow_blur;
+  int dim = 2 * radius + 1;
+  if (dim > CTX_MAX_GAUSSIAN_KERNEL_DIM)
+    dim = CTX_MAX_GAUSSIAN_KERNEL_DIM;
+  ctx_compute_gaussian_kernel (dim, radius, rasterizer->kernel);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&save_command);
+
+  {
+      {
+        move_to_command[0].data.f[0] = x;
+        move_to_command[0].data.f[1] = y;
+        set_color_command[2].data.f[0] = rgba[3];
+        ctx_rasterizer_process (ctx, (CtxCommand*)&set_color_command);
+        ctx_rasterizer_process (ctx, (CtxCommand*)&move_to_command);
+        rasterizer->in_shadow=1;
+        ctx_rasterizer_text (rasterizer, str, 0);
+        rasterizer->in_shadow=0;
+      }
+  }
+  ctx_rasterizer_process (ctx, (CtxCommand*)&restore_command);
+  move_to_command[0].data.f[0] = x;
+  move_to_command[0].data.f[1] = y;
+  ctx_rasterizer_process (ctx, (CtxCommand*)&move_to_command);
+}
+
+static void
+ctx_rasterizer_shadow_fill (CtxRasterizer *rasterizer)
+{
+  CtxColor color;
+  Ctx *ctx = rasterizer->backend.ctx;
+  CtxEntry save_command = ctx_void(CTX_SAVE);
+
+  float rgba[4] = {0, 0, 0, 1.0};
+  if (ctx_get_color (rasterizer->backend.ctx, CTX_shadowColor, &color) == 0)
+    ctx_color_get_rgba (rasterizer->state, &color, rgba);
+
+  CtxEntry set_color_command [3]=
+  {
+    ctx_f (CTX_COLOR, CTX_RGBA, rgba[0]),
+    ctx_f (CTX_CONT, rgba[1], rgba[2]),
+    ctx_f (CTX_CONT, rgba[3], 0)
+  };
+  CtxEntry restore_command = ctx_void(CTX_RESTORE);
+  float radius = rasterizer->state->gstate.shadow_blur;
+  int dim = 2 * radius + 1;
+  if (dim > CTX_MAX_GAUSSIAN_KERNEL_DIM)
+    dim = CTX_MAX_GAUSSIAN_KERNEL_DIM;
+  ctx_compute_gaussian_kernel (dim, radius, rasterizer->kernel);
+  ctx_rasterizer_process (ctx, (CtxCommand*)&save_command);
+
+  {
+    for (int v = 0; v < dim; v ++)
+      {
+        int i = v;
+        float dy = rasterizer->state->gstate.shadow_offset_y + v - dim/2;
+        set_color_command[2].data.f[0] = rasterizer->kernel[i] * rgba[3];
+        ctx_rasterizer_process (ctx, (CtxCommand*)&set_color_command);
+        rasterizer->in_shadow = 1;
+        rasterizer->shadow_x = rasterizer->state->gstate.shadow_offset_x;
+        rasterizer->shadow_y = dy;
+        rasterizer->preserve = 1;
+        ctx_rasterizer_fill (rasterizer);
+        rasterizer->in_shadow = 0;
+      }
+  }
+  ctx_rasterizer_process (ctx, (CtxCommand*)&restore_command);
+}
+#endif
+
+static void
+ctx_rasterizer_line_dash (CtxRasterizer *rasterizer, unsigned int count, float *dashes)
+{
+  if (!dashes)
+  {
+    rasterizer->state->gstate.n_dashes = 0;
+    return;
+  }
+  count = CTX_MIN(count, CTX_MAX_DASHES);
+  rasterizer->state->gstate.n_dashes = count;
+  memcpy(&rasterizer->state->gstate.dashes[0], dashes, count * sizeof(float));
+  for (unsigned int i = 0; i < count; i ++)
+  {
+    if (rasterizer->state->gstate.dashes[i] < 0.0001f)
+      rasterizer->state->gstate.dashes[i] = 0.0001f; // hang protection
+  }
+}
+
+
+static void
+ctx_rasterizer_process (Ctx *ctx, CtxCommand *command)
+{
+  CtxEntry      *entry      = &command->entry;
+  CtxRasterizer *rasterizer = (CtxRasterizer *) ctx->backend;
+  CtxState      *state      = rasterizer->state;
+  CtxCommand    *c          = (CtxCommand *) entry;
+  int            clear_clip = 0;
+
+  ctx_interpret_style (state, entry, NULL);
+  switch (c->code)
+    {
+#if CTX_ENABLE_SHADOW_BLUR
+      case CTX_SHADOW_COLOR:
+        {
+          CtxColor  col;
+          CtxColor *color = &col;
+          //state->gstate.source_fill.type = CTX_SOURCE_COLOR;
+          switch ((int)c->rgba.model)
+            {
+              case CTX_RGB:
+                ctx_color_set_rgba (state, color, c->rgba.r, c->rgba.g, c->rgba.b, 1.0f);
+                break;
+              case CTX_RGBA:
+                //ctx_color_set_rgba (state, color, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+                ctx_color_set_rgba (state, color, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+                break;
+              case CTX_DRGBA:
+                ctx_color_set_drgba (state, color, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+                break;
+#if CTX_ENABLE_CMYK
+              case CTX_CMYKA:
+                ctx_color_set_cmyka (state, color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, c->cmyka.a);
+                break;
+              case CTX_CMYK:
+                ctx_color_set_cmyka (state, color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, 1.0f);
+                break;
+              case CTX_DCMYKA:
+                ctx_color_set_dcmyka (state, color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, c->cmyka.a);
+                break;
+              case CTX_DCMYK:
+                ctx_color_set_dcmyka (state, color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, 1.0f);
+                break;
+#endif
+              case CTX_GRAYA:
+                ctx_color_set_graya (state, color, c->graya.g, c->graya.a);
+                break;
+              case CTX_GRAY:
+                ctx_color_set_graya (state, color, c->graya.g, 1.0f);
+                break;
+            }
+          ctx_set_color (rasterizer->backend.ctx, CTX_shadowColor, color);
+        }
+        break;
+#endif
+      case CTX_LINE_DASH:
+        if (c->line_dash.count)
+          {
+            ctx_rasterizer_line_dash (rasterizer, c->line_dash.count, c->line_dash.data);
+          }
+        else
+        ctx_rasterizer_line_dash (rasterizer, 0, NULL);
+        break;
+
+
+      case CTX_LINE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_line_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_REL_LINE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_rel_line_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_MOVE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_move_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_REL_MOVE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_rel_move_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_CURVE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_curve_to (rasterizer, c->c.x0, c->c.y0,
+                                 c->c.x1, c->c.y1,
+                                 c->c.x2, c->c.y2);
+        break;
+      case CTX_REL_CURVE_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_rel_curve_to (rasterizer, c->c.x0, c->c.y0,
+                                     c->c.x1, c->c.y1,
+                                     c->c.x2, c->c.y2);
+        break;
+      case CTX_QUAD_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_quad_to (rasterizer, c->c.x0, c->c.y0, c->c.x1, c->c.y1);
+        break;
+      case CTX_REL_QUAD_TO:
+        if (ctx->bail) break;
+        ctx_rasterizer_rel_quad_to (rasterizer, c->c.x0, c->c.y0, c->c.x1, c->c.y1);
+        break;
+      case CTX_ARC:
+        if (ctx->bail) break;
+        ctx_rasterizer_arc (rasterizer, c->arc.x, c->arc.y, c->arc.radius, c->arc.angle1, c->arc.angle2, (int)c->arc.direction);
+        break;
+      case CTX_RECTANGLE:
+        if (ctx->bail) break;
+        ctx_rasterizer_rectangle (rasterizer, c->rectangle.x, c->rectangle.y,
+                                  c->rectangle.width, c->rectangle.height);
+        break;
+      case CTX_ROUND_RECTANGLE:
+        if (ctx->bail) break;
+        ctx_rasterizer_round_rectangle (rasterizer, c->rectangle.x, c->rectangle.y,
+                                        c->rectangle.width, c->rectangle.height,
+                                        c->rectangle.radius);
+        break;
+      case CTX_SET_PIXEL:
+        ctx_rasterizer_set_pixel (rasterizer, c->set_pixel.x, c->set_pixel.y,
+                                  c->set_pixel.rgba[0],
+                                  c->set_pixel.rgba[1],
+                                  c->set_pixel.rgba[2],
+                                  c->set_pixel.rgba[3]);
+        break;
+      case CTX_DEFINE_TEXTURE:
+        {
+          uint8_t *pixel_data = ctx_define_texture_pixel_data (entry);
+          ctx_rasterizer_define_texture (rasterizer, c->define_texture.eid,
+                                         c->define_texture.width, c->define_texture.height,
+                                         c->define_texture.format,
+                                         pixel_data);
+          rasterizer->comp_op = NULL;
+          rasterizer->fragment = NULL;
+        }
+        break;
+      case CTX_TEXTURE:
+        ctx_rasterizer_set_texture (rasterizer, c->texture.eid,
+                                    c->texture.x, c->texture.y);
+        rasterizer->comp_op = NULL;
+        rasterizer->fragment = NULL;
+        break;
+      case CTX_SOURCE_TRANSFORM:
+        ctx_matrix_set (&state->gstate.source_fill.set_transform,
+                        ctx_arg_float (0), ctx_arg_float (1),
+                        ctx_arg_float (2), ctx_arg_float (3),
+                        ctx_arg_float (4), ctx_arg_float (5),
+                        ctx_arg_float (6), ctx_arg_float (7),
+                        ctx_arg_float (8));
+        rasterizer->comp_op = NULL;
+        break;
+#if 0
+      case CTX_LOAD_IMAGE:
+        ctx_rasterizer_load_image (rasterizer, ctx_arg_string(),
+                                   ctx_arg_float (0), ctx_arg_float (1) );
+        break;
+#endif
+#if CTX_GRADIENTS
+      case CTX_GRADIENT_STOP:
+        {
+          float rgba[4]= {ctx_u8_to_float (ctx_arg_u8 (4) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+1) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+2) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+3) )
+                         };
+          ctx_rasterizer_gradient_add_stop (rasterizer,
+                                            ctx_arg_float (0), rgba);
+          rasterizer->comp_op = NULL;
+        }
+        break;
+      case CTX_LINEAR_GRADIENT:
+        ctx_state_gradient_clear_stops (state);
+        rasterizer->gradient_cache_valid = 0;
+        rasterizer->comp_op = NULL;
+        break;
+      case CTX_RADIAL_GRADIENT:
+        ctx_state_gradient_clear_stops (state);
+        rasterizer->gradient_cache_valid = 0;
+        rasterizer->comp_op = NULL;
+        break;
+#endif
+      case CTX_PRESERVE:
+        rasterizer->preserve = 1;
+        break;
+      case CTX_COLOR:
+      case CTX_COMPOSITING_MODE:
+      case CTX_BLEND_MODE:
+      case CTX_EXTEND:
+        rasterizer->comp_op = NULL;
+        break;
+#if CTX_COMPOSITING_GROUPS
+      case CTX_START_GROUP:
+        ctx_rasterizer_start_group (rasterizer);
+        break;
+      case CTX_END_GROUP:
+        ctx_rasterizer_end_group (rasterizer);
+        break;
+#endif
+
+      case CTX_RESTORE:
+        for (unsigned int i = state->gstate_no?state->gstate_stack[state->gstate_no-1].keydb_pos:0;
+             i < state->gstate.keydb_pos; i++)
+        {
+          if (state->keydb[i].key == CTX_clip)
+          {
+            clear_clip = 1;
+          }
+        }
+        /* FALLTHROUGH */
+      case CTX_ROTATE:
+      case CTX_SCALE:
+      case CTX_APPLY_TRANSFORM:
+      case CTX_TRANSLATE:
+      case CTX_IDENTITY:
+        /* FALLTHROUGH */
+      case CTX_SAVE:
+        rasterizer->comp_op = NULL;
+        ctx_interpret_transforms (state, entry, NULL);
+        if (clear_clip)
+        {
+          ctx_rasterizer_clip_reset (rasterizer);
+          for (unsigned int i = state->gstate_no?state->gstate_stack[state->gstate_no-1].keydb_pos:0;
+             i < state->gstate.keydb_pos; i++)
+        {
+          if (state->keydb[i].key == CTX_clip)
+          {
+            int idx = ctx_float_to_string_index (state->keydb[i].value);
+            if (idx >=0)
+            {
+              CtxSegment *edges = (CtxSegment*)&state->stringpool[idx];
+              ctx_rasterizer_clip_apply (rasterizer, edges);
+            }
+          }
+        }
+        }
+        break;
+      case CTX_STROKE:
+          if (rasterizer->edge_list.count == 0)break;
+#if CTX_ENABLE_SHADOW_BLUR
+        if (state->gstate.shadow_blur > 0.0f &&
+            !rasterizer->in_text)
+          ctx_rasterizer_shadow_stroke (rasterizer);
+#endif
+        {
+        int count = rasterizer->edge_list.count;
+        if (state->gstate.n_dashes)
+        {
+          int n_dashes = state->gstate.n_dashes;
+          float *dashes = state->gstate.dashes;
+          float factor = ctx_matrix_get_scale (&state->gstate.transform);
+
+          CtxSegment temp[count]; /* copy of already built up path's poly line  */
+          memcpy (temp, rasterizer->edge_list.entries, sizeof (temp));
+          int start = 0;
+          int end   = 0;
+      CtxMatrix transform_backup = state->gstate.transform;
+      _ctx_matrix_identity (&state->gstate.transform);
+      //state->gstate.transform_type = 0;
+      _ctx_transform_prime (state);
+      ctx_rasterizer_reset (rasterizer); /* for dashing we create
+                                            a dashed path to stroke */
+      float prev_x = 0.0f;
+      float prev_y = 0.0f;
+      //float pos = 0.0;
+
+      int   dash_no  = 0.0;
+      float dash_lpos = state->gstate.line_dash_offset * factor;
+      int   is_down = 0;
+
+          while (start < count)
+          {
+            int started = 0;
+            int i;
+            is_down = 0;
+
+            if (!is_down)
+            {
+              CtxSegment *entry = &temp[0];
+              prev_x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+              prev_y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+              ctx_rasterizer_move_to (rasterizer, prev_x, prev_y);
+              is_down = 1;
+            }
+
+            for (i = start; i < count; i++)
+            {
+              CtxSegment *entry = &temp[i];
+              float x, y;
+              if (entry->code == CTX_NEW_EDGE)
+                {
+                  if (started)
+                    {
+                      end = i - 1;
+                      dash_no = 0;
+                      dash_lpos = 0.0;
+                      goto foo;
+                    }
+                  prev_x = entry->data.s16[0] * 1.0f / CTX_SUBDIV;
+                  prev_y = entry->data.s16[1] * 1.0f / CTX_FULL_AA;
+                  started = 1;
+                  start = i;
+                  is_down = 1;
+                  ctx_rasterizer_move_to (rasterizer, prev_x, prev_y);
+                }
+
+again:
+
+              x = entry->data.s16[2] * 1.0f / CTX_SUBDIV;
+              y = entry->data.s16[3] * 1.0f / CTX_FULL_AA;
+              float dx = x - prev_x;
+              float dy = y - prev_y;
+              float length = ctx_fast_hypotf (dx, dy);
+
+              if (dash_lpos + length >= dashes[dash_no] * factor)
+              {
+                float p = (dashes[dash_no] * factor - dash_lpos) / length;
+                float splitx = x * p + (1.0f - p) * prev_x;
+                float splity = y * p + (1.0f - p) * prev_y;
+                if (is_down)
+                {
+                  ctx_rasterizer_line_to (rasterizer, splitx, splity);
+                  is_down = 0;
+                }
+                else
+                {
+                  ctx_rasterizer_move_to (rasterizer, splitx, splity);
+                  is_down = 1;
+                }
+                prev_x = splitx;
+                prev_y = splity;
+                dash_no++;
+                dash_lpos=0;
+                if (dash_no >= n_dashes) dash_no = 0;
+                goto again;
+              }
+              else
+              {
+                //pos += length;
+                dash_lpos += length;
+                {
+                  if (is_down)
+                    ctx_rasterizer_line_to (rasterizer, x, y);
+                }
+              }
+              prev_x = x;
+              prev_y = y;
+            }
+          end = i-1;
+foo:
+          start = end+1;
+        }
+        state->gstate.transform = transform_backup;
+        //state->gstate.transform_type = 0;
+        _ctx_transform_prime (state);
+        }
+        ctx_rasterizer_stroke (rasterizer);
+        }
+        ctx_rasterizer_reset (rasterizer);
+
+        break;
+      case CTX_FONT:
+        ctx_rasterizer_set_font (rasterizer, ctx_arg_string() );
+        break;
+      case CTX_TEXT:
+        if (ctx->bail)
+        {
+          _ctx_text (rasterizer->backend.ctx, ctx_arg_string(), 0, 0);
+          break;
+        }
+
+        rasterizer->in_text++;
+#if CTX_ENABLE_SHADOW_BLUR
+        if (state->gstate.shadow_blur > 0.0)
+          ctx_rasterizer_shadow_text (rasterizer, ctx_arg_string ());
+#endif
+        ctx_rasterizer_text (rasterizer, ctx_arg_string(), 0);
+        rasterizer->in_text--;
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_STROKE_TEXT:
+        ctx_rasterizer_text (rasterizer, ctx_arg_string(), 1);
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_GLYPH:
+        if (ctx->bail) break;
+        {
+        uint32_t unichar = entry[0].data.u32[0];
+        uint32_t stroke = unichar &  ((uint32_t)1<<31);
+        if (stroke) unichar -= stroke;
+        ctx_rasterizer_glyph (rasterizer, entry[0].data.u32[0], stroke);
+        }
+        break;
+      case CTX_PAINT:
+        // XXX simplify this with a special case
+        ctx_rasterizer_rectangle (rasterizer, -1000.0, -1000.0, 11000, 11000);
+        ctx_rasterizer_fill (rasterizer);
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_FILL:
+        if (!ctx->bail)
+        {
+          if (rasterizer->edge_list.count == 0)break;
+#if CTX_ENABLE_SHADOW_BLUR
+        if (state->gstate.shadow_blur > 0.0f &&
+            !rasterizer->in_text)
+          ctx_rasterizer_shadow_fill (rasterizer);
+#endif
+        ctx_rasterizer_fill (rasterizer);
+        }
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_START_FRAME:
+      case CTX_BEGIN_PATH:
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_CLIP:
+        ctx_rasterizer_clip (rasterizer);
+        break;
+      case CTX_CLOSE_PATH:
+        ctx_rasterizer_finish_shape (rasterizer);
+        break;
+      case CTX_IMAGE_SMOOTHING:
+        rasterizer->comp_op = NULL;
+        break;
+    }
+  ctx_interpret_pos_bare (state, entry, NULL);
+}
+
+
+//static CtxFont *ctx_fonts;
+void
+ctx_rasterizer_deinit (CtxRasterizer *rasterizer)
+{
+  //rasterizer->fonts = ctx_fonts;
+  ctx_drawlist_deinit (&rasterizer->edge_list);
+#if CTX_ENABLE_CLIP
+  if (rasterizer->clip_buffer)
+  {
+    ctx_buffer_destroy (rasterizer->clip_buffer);
+    rasterizer->clip_buffer = NULL;
+  }
+#endif
+#if CTX_SHAPE_CACHE
+  for (int i = 0; i < CTX_SHAPE_CACHE_ENTRIES; i ++)
+    if (rasterizer->shape_cache.entries[i])
+    {
+      ctx_free (rasterizer->shape_cache.entries[i]);
+      rasterizer->shape_cache.entries[i] = NULL;
+    }
+#endif
+}
+
+void
+ctx_rasterizer_destroy (CtxRasterizer *rasterizer)
+{
+  ctx_rasterizer_deinit (rasterizer);
+  ctx_free (rasterizer);
+}
+
+CtxAntialias ctx_get_antialias (Ctx *ctx)
+{
+#if CTX_EVENTS
+  if (ctx_backend_is_tiled (ctx))
+  {
+     CtxTiled *fb = (CtxTiled*)(ctx->backend);
+     return fb->antialias;
+  }
+#endif
+  if (ctx_backend_type (ctx) != CTX_BACKEND_RASTERIZER) return CTX_ANTIALIAS_DEFAULT;
+
+  switch (((CtxRasterizer*)(ctx->backend))->aa)
+  {
+    case 1: return CTX_ANTIALIAS_NONE;
+    case 3: return CTX_ANTIALIAS_FAST;
+    //case 5: return CTX_ANTIALIAS_GOOD;
+    default:
+    case 15: return CTX_ANTIALIAS_DEFAULT;
+  }
+}
+
+static int _ctx_antialias_to_aa (CtxAntialias antialias)
+{
+  switch (antialias)
+  {
+    case CTX_ANTIALIAS_NONE: return 1;
+    case CTX_ANTIALIAS_FAST: return 3;
+    case CTX_ANTIALIAS_GOOD: return 5;
+    default:
+    case CTX_ANTIALIAS_DEFAULT: return CTX_RASTERIZER_AA;
+  }
+}
+
+void
+ctx_set_antialias (Ctx *ctx, CtxAntialias antialias)
+{
+#if CTX_TERMINAL_EVENTS
+  if (ctx_backend_is_tiled (ctx))
+  {
+     CtxTiled *fb = (CtxTiled*)(ctx->backend);
+     fb->antialias = antialias;
+#if CTX_THREADS
+     for (int i = 0; i < _ctx_max_threads; i++)
+#else
+     int i = 0;
+#endif
+     {
+       ctx_set_antialias (fb->host[i], antialias);
+     }
+     return;
+  }
+#endif
+  if (ctx_backend_type (ctx) != CTX_BACKEND_RASTERIZER) return;
+
+  ((CtxRasterizer*)(ctx->backend))->aa = 
+     _ctx_antialias_to_aa (antialias);
+  ((CtxRasterizer*)(ctx->backend))->fast_aa = 0;
+  if (antialias == CTX_ANTIALIAS_DEFAULT||
+      antialias == CTX_ANTIALIAS_FAST)
+    ((CtxRasterizer*)(ctx->backend))->fast_aa = 1;
+}
+
+CtxRasterizer *
+ctx_rasterizer_init (CtxRasterizer *rasterizer, Ctx *ctx, Ctx *texture_source, CtxState *state, void *data, int x, int y, int width, int height, int stride, CtxPixelFormat pixel_format, CtxAntialias antialias)
+{
+#if CTX_ENABLE_CLIP
+  if (rasterizer->clip_buffer)
+    ctx_buffer_destroy (rasterizer->clip_buffer);
+#endif
+  if (rasterizer->edge_list.size)
+    ctx_drawlist_deinit (&rasterizer->edge_list);
+#if CTX_SHAPE_CACHE
+  memset (rasterizer, 0, sizeof (CtxRasterizer) - sizeof (CtxShapeCache));
+#else
+  memset (rasterizer, 0, sizeof (CtxRasterizer));
+#endif
+  CtxBackend *backend = (CtxBackend*)rasterizer;
+  backend->process = ctx_rasterizer_process;
+  backend->destroy = (CtxDestroyNotify)ctx_rasterizer_destroy;
+  backend->ctx     = ctx;
+  rasterizer->edge_list.flags |= CTX_DRAWLIST_EDGE_LIST;
+  rasterizer->state       = state;
+  rasterizer->texture_source = texture_source?texture_source:ctx;
+
+  rasterizer->aa          = _ctx_antialias_to_aa (antialias);
+  rasterizer->fast_aa = (antialias == CTX_ANTIALIAS_DEFAULT||antialias == CTX_ANTIALIAS_FAST);
+  ctx_state_init (rasterizer->state);
+  rasterizer->buf         = data;
+  rasterizer->blit_x      = x;
+  rasterizer->blit_y      = y;
+  rasterizer->blit_width  = width;
+  rasterizer->blit_height = height;
+  rasterizer->state->gstate.clip_min_x  = x;
+  rasterizer->state->gstate.clip_min_y  = y;
+  rasterizer->state->gstate.clip_max_x  = x + width - 1;
+  rasterizer->state->gstate.clip_max_y  = y + height - 1;
+  rasterizer->blit_stride = stride;
+  rasterizer->scan_min    = 5000;
+  rasterizer->scan_max    = -5000;
+
+  if (pixel_format == CTX_FORMAT_BGRA8)
+  {
+    pixel_format = CTX_FORMAT_RGBA8;
+    rasterizer->swap_red_green = 1;
+  }
+
+  rasterizer->format = ctx_pixel_format_info (pixel_format);
+
+#if CTX_GRADIENTS
+#if CTX_GRADIENT_CACHE
+  rasterizer->gradient_cache_elements = CTX_GRADIENT_CACHE_ELEMENTS;
+  rasterizer->gradient_cache_valid = 0;
+#endif
+#endif
+
+#if static_OPAQUE
+  memset (rasterizer->opaque, 255, sizeof (rasterizer->opaque));
+#endif
+
+  return rasterizer;
+}
+
+Ctx *
+ctx_new_for_buffer (CtxBuffer *buffer)
+{
+  Ctx *ctx = _ctx_new_drawlist (buffer->width, buffer->height);
+  ctx_set_backend (ctx,
+                    ctx_rasterizer_init ( (CtxRasterizer *) ctx_malloc (sizeof (CtxRasterizer) ),
+                                          ctx, NULL, &ctx->state,
+                                          buffer->data, 0, 0, buffer->width, buffer->height,
+                                          buffer->stride, buffer->format->pixel_format,
+                                          CTX_ANTIALIAS_DEFAULT));
+  return ctx;
+}
+
+Ctx *
+ctx_new_for_framebuffer (void *data, int width, int height,
+                         int stride,
+                         CtxPixelFormat pixel_format)
+{
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+  CtxRasterizer *r = ctx_rasterizer_init ( (CtxRasterizer *) ctx_calloc (sizeof (CtxRasterizer), 1),
+                                          ctx, NULL, &ctx->state, data, 0, 0, width, height,
+                                          stride, pixel_format, CTX_ANTIALIAS_DEFAULT);
+  ctx_set_backend (ctx, r);
+  if (pixel_format == CTX_FORMAT_GRAY1) // XXX we get some bugs without it..
+  {                                     //     something is going amiss with offsets
+    ctx_set_antialias (ctx, CTX_ANTIALIAS_NONE);
+  }
+  return ctx;
+}
+
+// ctx_new_for_stream (FILE *stream);
+
+#if 0
+CtxRasterizer *ctx_rasterizer_new (void *data, int x, int y, int width, int height,
+                                   int stride, CtxPixelFormat pixel_format)
+{
+  CtxState    *state    = (CtxState *) ctx_malloc (sizeof (CtxState) );
+  CtxRasterizer *rasterizer = (CtxRasterizer *) ctx_malloc (sizeof (CtxBackend) );
+  ctx_rasterizer_init (rasterizer, state, data, x, y, width, height,
+                       stride, pixel_format, CTX_ANTIALIAS_DEFAULT);
+}
+#endif
+
+#else
+
+#endif
+
+
+void
+ctx_state_gradient_clear_stops (CtxState *state)
+{
+  state->gradient.n_stops = 0;
+}
+
+
+/****  end of engine ****/
+/* atty - audio interface and driver for terminals
+ * Copyright (C) 2020 Øyvind Kolås <pippin@gimp.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>. 
+ */
+
+static const char *base64_map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+static void bin2base64_group (const unsigned char *in, int remaining, char *out)
+{
+  unsigned char digit[4] = {0,0,64,64};
+  int i;
+  digit[0] = in[0] >> 2;
+  digit[1] = ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4);
+  if (remaining > 1)
+    {
+      digit[2] = ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6);
+      if (remaining > 2)
+        digit[3] = ((in[2] & 0x3f));
+    }
+  for (i = 0; i < 4; i++)
+    out[i] = base64_map[digit[i]];
+}
+
+void
+ctx_bin2base64 (const void *bin,
+                size_t      bin_length,
+                char       *ascii)
+{
+  /* this allocation is a hack to ensure we always produce the same result,
+   * regardless of padding data accidentally taken into account.
+   */
+  unsigned char *bin2 = (unsigned char*)ctx_calloc (bin_length + 4, 1);
+  unsigned const char *p = bin2;
+  unsigned int i;
+  if (bin_length > 128 * 1024 * 1024) return;
+  memcpy (bin2, bin, (size_t)bin_length);
+  for (i=0; i*3 < bin_length; i++)
+   {
+     int remaining = bin_length - i*3;
+     bin2base64_group (&p[i*3], remaining, &ascii[i*4]);
+   }
+  ctx_free (bin2);
+  ascii[i*4]=0;
+}
+
+static unsigned char base64_revmap[255];
+static void base64_revmap_init (void)
+{
+  static int done = 0;
+  if (done)
+    return;
+
+  for (int i = 0; i < 255; i ++)
+    base64_revmap[i]=255;
+  for (int i = 0; i < 64; i ++)
+    base64_revmap[((const unsigned char*)base64_map)[i]]=i;
+  /* include variants used in URI encodings for decoder,
+   * even if that is not how we encode
+  */
+  base64_revmap['-']=62;
+  base64_revmap['_']=63;
+  base64_revmap['+']=62;
+  base64_revmap['/']=63;
+
+  done = 1;
+}
+
+
+int
+ctx_base642bin (const char    *ascii,
+                int           *length,
+                unsigned char *bin)
+{
+  int i;
+  int charno = 0;
+  int outputno = 0;
+  int carry = 0;
+  base64_revmap_init ();
+  for (i = 0; ascii[i]; i++)
+    {
+      int bits = base64_revmap[((const unsigned char*)ascii)[i]];
+      if (length && outputno > *length)
+        {
+          *length = -1;
+          return -1;
+        }
+      if (bits != 255)
+        {
+          switch (charno % 4)
+            {
+              case 0:
+                carry = bits;
+                break;
+              case 1:
+                bin[outputno] = (carry << 2) | (bits >> 4);
+                outputno++;
+                carry = bits & 15;
+                break;
+              case 2:
+                bin[outputno] = (carry << 4) | (bits >> 2);
+                outputno++;
+                carry = bits & 3;
+                break;
+              case 3:
+                bin[outputno] = (carry << 6) | bits;
+                outputno++;
+                carry = 0;
+                break;
+            }
+          charno++;
+        }
+    }
+  bin[outputno]=0;
+  if (length)
+    *length= outputno;
+  return outputno;
+}
+#ifndef SQUOZE_H
+#define SQUOZE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <assert.h>
+
+uint32_t squoze6 (const char *utf8);
+uint64_t squoze10 (const char *utf8);
+uint64_t squoze12 (const char *utf8);
+const char *squoze6_decode (uint32_t hash);
+const char *squoze10_decode (uint64_t hash);
+const char *squoze12_decode (uint64_t hash);
+
+//#define SQUOZE_NO_INTERNING  // this disables the interning - providing only a hash (and decode for non-overflowed hashes)
+
+#define SQUOZE_ENTER_SQUEEZE    16
+
+#define SQUOZE_SPACE            0
+#define SQUOZE_DEC_OFFSET_A     27
+#define SQUOZE_INC_OFFSET_A     28
+#define SQUOZE_DEC_OFFSET_B     29
+#define SQUOZE_INC_OFFSET_B     30
+#define SQUOZE_ENTER_UTF5       31
+
+#define SQUOZE_JUMP_STRIDE      26
+#define SQUOZE_JUMP_OFFSET      19
+
+static inline uint32_t squoze_utf8_to_unichar (const char *input);
+static inline int      squoze_unichar_to_utf8 (uint32_t  ch, uint8_t  *dest);
+static inline int      squoze_utf8_len        (const unsigned char first_byte);
+
+
+/* returns the base-offset of the segment this unichar belongs to,
+ *
+ * segments are 26 items long and are offset so that the 'a'-'z' is
+ * one segment.
+ */
+static inline int squoze_new_offset (uint32_t unichar)
+{
+  uint32_t ret = unichar - (unichar % SQUOZE_JUMP_STRIDE) + SQUOZE_JUMP_OFFSET;
+  if (ret > unichar) ret -= SQUOZE_JUMP_STRIDE;
+  return ret;
+}
+
+static int squoze_needed_jump (uint32_t off, uint32_t unicha)
+{
+  int count = 0;
+  int unichar = unicha;
+  int offset = off;
+
+  if (unichar == 32) // space is always in range
+    return 0;
+
+  /* TODO: replace this with direct computation of values instead of loops */
+
+  while (unichar < offset)
+  {
+    offset -= SQUOZE_JUMP_STRIDE;
+    count ++;
+  }
+  if (count)
+  {
+    return -count;
+  }
+  while (unichar - offset >= SQUOZE_JUMP_STRIDE)
+  {
+    offset += SQUOZE_JUMP_STRIDE;
+    count ++;
+  }
+  return count;
+}
+
+static inline int
+squoze_utf5_length (uint32_t unichar)
+{
+  int octets = 0;
+  if (unichar == 0)
+    return 1;
+  while (unichar)
+  {
+    octets ++;
+    unichar /= 16;
+  }
+  return octets;
+}
+
+typedef struct EncodeUtf5 {
+  int      is_utf5;
+  int      offset;
+  int      length;
+  void    *write_data;
+  uint32_t current;
+} EncodeUtf5;
+
+static inline uint64_t
+squoze_overflow_mask_for_dim (int squoze_dim)
+{
+  return ((uint64_t)1<<(squoze_dim * 5 + 1));
+}
+
+static int squoze_compute_cost_utf5 (int offset, int val, int next_val)
+{
+  int cost = 0; 
+  cost += squoze_utf5_length (val);
+  if (next_val)
+  {
+    int no_change_cost = squoze_utf5_length (next_val);
+#if 0 // not hit in test-corpus, it is easier to specify and
+      // port the hash consistently without it
+    offset = squoze_new_offset (val);
+    int change_cost = 1;
+    int needed_jump = squoze_needed_jump (offset, next_val);
+
+    if (needed_jump == 0)
+    {
+      change_cost += 1;
+    } else if (needed_jump >= -2 && needed_jump <= 2)
+    {
+      change_cost += 2;
+    }
+    else if (needed_jump >= -10 && needed_jump <= -10)
+    {
+      change_cost += 3;
+    }
+    else
+    {
+      change_cost += 100;
+    }
+
+    if (change_cost < no_change_cost)
+    {
+      cost += change_cost;
+    }
+    else
+#endif
+    {
+      cost += no_change_cost;
+    }
+
+  }
+
+
+
+  return cost;
+}
+
+static int squoze_compute_cost_squeezed (int offset, int val, int next_val)
+{
+  int needed_jump = squoze_needed_jump (offset, val);
+  int cost = 0;
+  if (needed_jump == 0)
+  {
+    cost += 1;
+  }
+  else if (needed_jump >= -2 && needed_jump <= 2)
+  {
+    cost += 2;
+    offset += SQUOZE_JUMP_STRIDE * needed_jump;
+  }
+  else if (needed_jump >= -10 && needed_jump <= 10)
+  {
+    cost += 3;
+    offset += SQUOZE_JUMP_STRIDE * needed_jump;
+  }
+  else
+  {
+    cost += 100; // very expensive, makes the other choice win
+  }
+
+  if (next_val)
+  {
+    int change_cost = 1 + squoze_utf5_length (next_val);
+    int no_change_cost = 0;
+    needed_jump = squoze_needed_jump (offset, next_val);
+
+    if (needed_jump == 0)
+    {
+      no_change_cost += 1;
+    }
+    else if (needed_jump >= -2 && needed_jump <= 2)
+    {
+      no_change_cost += 2;
+    }
+    else if (needed_jump >= -10 && needed_jump <= 10)
+    {
+      no_change_cost += 3;
+      offset += SQUOZE_JUMP_STRIDE * needed_jump;
+    }
+    else
+    {
+      no_change_cost = change_cost;
+    }
+    if (change_cost < no_change_cost)
+      cost += change_cost;
+    else
+      cost += no_change_cost;
+  }
+
+  return cost;
+}
+
+
+static void squoze5_encode (const char *input, int inlen,
+                            char *output, int *r_outlen,
+                            int permit_squeezed,
+                            int escape_endzero)
+{
+  int offset  = squoze_new_offset('a');
+  int is_utf5 = 1;
+  int len     = 0;
+
+  for (int i = 0; i < inlen; i+= squoze_utf8_len (input[i]))
+  {
+    int val = squoze_utf8_to_unichar (&input[i]);
+    int next_val = 0;
+    int first_len = squoze_utf8_len (input[i]);
+    if (i + first_len < inlen)
+      next_val = squoze_utf8_to_unichar (&input[i+first_len]);
+
+    if (is_utf5)
+    {
+      int change_cost    = squoze_compute_cost_squeezed (offset, val, next_val);
+      int no_change_cost = squoze_compute_cost_utf5 (offset, val, next_val);
+  
+      if (i != 0)          /* ignore cost of initial 'G' */
+        change_cost += 1;
+
+      if (permit_squeezed && change_cost <= no_change_cost)
+      {
+        output[len++] = SQUOZE_ENTER_SQUEEZE;
+        is_utf5 = 0;
+      }
+    }
+    else
+    {
+      int change_cost    = 1 + squoze_compute_cost_utf5 (offset, val, next_val);
+      int no_change_cost = squoze_compute_cost_squeezed (offset, val, next_val);
+
+      if (change_cost < no_change_cost)
+      {
+        output[len++] = SQUOZE_ENTER_UTF5;
+        is_utf5 = 1;
+      }
+    }
+
+    if (!is_utf5)
+    {
+      int needed_jump = squoze_needed_jump (offset, val);
+      if (needed_jump)
+      {
+        if (needed_jump >= -2 && needed_jump <= 2)
+        {
+          switch (needed_jump)
+          {
+            case -1: output[len++] = SQUOZE_DEC_OFFSET_B; break;
+            case  1: output[len++] = SQUOZE_INC_OFFSET_B; break;
+            case -2: output[len++] = SQUOZE_DEC_OFFSET_A; break;
+            case  2: output[len++] = SQUOZE_INC_OFFSET_A; break;
+          }
+          offset += SQUOZE_JUMP_STRIDE * needed_jump;
+        }
+        else if (needed_jump >= -10 && needed_jump <= 10) {
+              int encoded_val;
+              if (needed_jump < -2)
+                encoded_val = 5 - needed_jump;
+              else
+                encoded_val = needed_jump - 3;
+
+              output[len++] = (encoded_val / 4) + SQUOZE_DEC_OFFSET_A;
+              output[len++] = (encoded_val % 4) + SQUOZE_DEC_OFFSET_A;
+
+              offset += SQUOZE_JUMP_STRIDE * needed_jump;
+        }
+        else
+        {
+          assert(0); // should not be reached
+          output[len++] = SQUOZE_ENTER_UTF5;
+          is_utf5 = 1;
+        }
+      }
+    }
+
+    if (is_utf5)
+    {
+      int octets = 0;
+      offset = squoze_new_offset (val);
+      while (val)
+      {
+        int oval = val % 16;
+        int hi = 16;
+        if (val / 16) hi = 0;
+        output[len+ (octets++)] = oval + hi;
+        val /= 16;
+      }
+      for (int j = 0; j < octets/2; j++) // mirror in-place
+      {                                  // TODO refactor to be single pass
+        int tmp = output[len+j];
+        output[len+j] = output[len+octets-1-j];
+        output[len+octets-1-j] = tmp;
+      }
+      len += octets;
+    }
+    else 
+    {
+       if (val == ' ')
+       {
+         output[len++] = SQUOZE_SPACE;
+       }
+       else
+       {
+         output[len++] = val-offset+1;
+       }
+    }
+  }
+
+  if (escape_endzero && len && output[len-1]==0)
+  {
+    if (is_utf5)
+      output[len++] = 16;
+    else
+      output[len++] = SQUOZE_ENTER_UTF5;
+  }
+  output[len]=0;
+  if (r_outlen)
+    *r_outlen = len;
+}
+
+static inline uint64_t _squoze (int squoze_dim, const char *utf8)
+{
+  char encoded[4096]="";
+  int  encoded_len=0;
+  squoze5_encode (utf8, strlen (utf8), encoded, &encoded_len, 1, 1);
+  uint64_t hash = 0;
+  int  utf5 = (encoded[0] != SQUOZE_ENTER_SQUEEZE);
+  uint64_t multiplier = ((squoze_dim == 6) ? 0x25bd1e975
+                                           : 0x98173415bd1e975);
+
+  uint64_t overflowed_mask = squoze_overflow_mask_for_dim (squoze_dim);
+  uint64_t all_bits        = overflowed_mask - 1;
+
+  int rshift = (squoze_dim == 6) ? 8 : 16;
+
+
+  if (encoded_len - (!utf5) <= squoze_dim)
+  {
+    for (int i = !utf5; i < encoded_len; i++)
+    {
+      uint64_t val = encoded[i];
+      hash = hash | (val << (5*(i-(!utf5))));
+    }
+    hash <<= 1; // make room for the bit that encodes utf5 or squeeze
+  }
+  else
+  {
+    for (int i = 0; i < encoded_len; i++)
+    {
+      uint64_t val = encoded[i];
+      hash = hash ^ val;
+      hash = hash * multiplier;
+      hash = hash & all_bits;
+      hash = hash ^ ((hash >> rshift));
+    }
+    hash |= overflowed_mask;
+  }
+  return hash | utf5;
+}
+
+typedef struct _CashInterned CashInterned;
+
+struct _CashInterned {
+    uint64_t   hash;
+    char      *string;
+};
+
+static CashInterned *interned = NULL;
+static int n_interned = 0;
+static int s_interned = 0;
+
+static int squoze_interned_find (uint64_t hash)
+{
+#if 1
+  int min = 0;
+  int max = n_interned - 1;
+  if (max <= 0)
+    return 0;
+  do
+  {
+     int pos = (min + max)/2;
+     if (interned[pos].hash == hash)
+       return pos;
+     else if (min == max - 1)
+       return max;
+     else if (interned[pos].hash < hash)
+       min = pos;
+     else
+       max = pos;
+  } while (min != max);
+  return max;
+#else
+  for (int i = 0; i < n_interned; i++)
+    if (interned[i].hash > hash)
+      return i;
+  return 0;
+#endif
+}
+
+#ifdef __CTX_H__
+#define strdup ctx_strdup
+#define strstr ctx_strstr
+#endif
+
+static inline uint64_t squoze (int squoze_dim, const char *utf8)
+{
+  uint64_t hash = _squoze (squoze_dim, utf8);
+#ifdef SQUOZE_NO_INTERNING
+  return hash;
+#endif
+  uint64_t overflowed_mask = squoze_overflow_mask_for_dim (squoze_dim);
+  if (hash & overflowed_mask)
+  {
+    int pos = squoze_interned_find (hash);
+    if (interned && interned[pos].hash == hash)
+      return hash;
+
+    if (n_interned + 1 >= s_interned)
+    {
+       s_interned = (s_interned + 128)*2;
+       interned = (CashInterned*)realloc (interned, s_interned * sizeof (CashInterned));
+    }
+
+    n_interned++;
+#if 1
+    if (n_interned-pos)
+      memmove (&interned[pos+1], &interned[pos], (n_interned-pos) * sizeof (CashInterned));
+    // the memmove is the expensive part of testing for collisions
+    // insertions should be cheaper! at least looking up strings
+    // is cheap
+#else
+    pos = n_interned-1;
+#endif
+    {
+      CashInterned *entry = &interned[pos];
+      entry->hash = hash;
+      entry->string = strdup (utf8);
+    }
+
+  }
+  return hash;
+}
+
+uint32_t squoze6 (const char *utf8)
+{
+  return squoze (6, utf8);
+}
+
+uint64_t squoze10 (const char *utf8)
+{
+  return squoze (10, utf8);
+}
+
+uint64_t squoze12 (const char *utf8)
+{
+  return squoze (12, utf8);
+}
+
+uint32_t ctx_strhash(const char *str) {
+  return squoze (6, str);
+}
+
+typedef struct CashUtf5Dec {
+  int       is_utf5;
+  int       offset;
+  void     *write_data;
+  uint32_t  current;
+  void    (*append_unichar) (uint32_t unichar, void *write_data);
+  int       jumped_amount;
+  int       jump_mode;
+} CashUtf5Dec;
+
+typedef struct CashUtf5DecDefaultData {
+  uint8_t *buf;
+  int      length;
+} CashUtf5DecDefaultData;
+
+static void squoze_decode_utf5_append_unichar_as_utf8 (uint32_t unichar, void *write_data)
+{
+  CashUtf5DecDefaultData *data = (CashUtf5DecDefaultData*)write_data;
+  int length = squoze_unichar_to_utf8 (unichar, &data->buf[data->length]);
+  data->buf[data->length += length] = 0;
+}
+
+static void squoze_decode_jump (CashUtf5Dec *dec, uint8_t in)
+{
+  dec->offset -= SQUOZE_JUMP_STRIDE * dec->jumped_amount;
+  int jump_len = (dec->jump_mode - SQUOZE_DEC_OFFSET_A) * 4 +
+                 (in - SQUOZE_DEC_OFFSET_A);
+  if (jump_len > 7)
+    jump_len = 5 - jump_len;
+  else
+    jump_len += 3;
+  dec->offset += jump_len * SQUOZE_JUMP_STRIDE;
+  dec->jumped_amount = 0;
+}
+
+static void squoze_decode_utf5 (CashUtf5Dec *dec, uint8_t in)
+{
+  if (dec->is_utf5)
+  {
+    if (in >= 16)
+    {
+      if (dec->current)
+      {
+        dec->offset = squoze_new_offset (dec->current);
+        dec->append_unichar (dec->current, dec->write_data);
+        dec->current = 0;
+      }
+    }
+    if (in == SQUOZE_ENTER_SQUEEZE)
+    {
+      if (dec->current)
+      {
+        dec->offset = squoze_new_offset (dec->current);
+        dec->append_unichar (dec->current, dec->write_data);
+        dec->current = 0;
+      }
+      dec->is_utf5 = 0;
+    }
+    else
+    {
+      dec->current = dec->current * 16 + (in % 16);
+    }
+  }
+  else
+  {
+    if (dec->jumped_amount)
+    {
+      switch (in)
+      {
+        case SQUOZE_DEC_OFFSET_A:
+        case SQUOZE_DEC_OFFSET_B:
+        case SQUOZE_INC_OFFSET_A:
+        case SQUOZE_INC_OFFSET_B:
+          squoze_decode_jump (dec, in);
+          break;
+        default:
+          dec->append_unichar (dec->offset + (in - 1), dec->write_data);
+          dec->jumped_amount = 0;
+          dec->jump_mode = 0;
+          break;
+      }
+    }
+    else
+    {
+      switch (in)
+      {
+        case SQUOZE_ENTER_UTF5:
+          dec->is_utf5 = 1;
+          dec->jumped_amount = 0;
+          dec->jump_mode = 0;
+          break;
+        case SQUOZE_SPACE: 
+          dec->append_unichar (' ', dec->write_data);
+          dec->jumped_amount = 0;
+          dec->jump_mode = 0;
+          break;
+        case SQUOZE_DEC_OFFSET_A:
+          dec->jumped_amount = -2;
+          dec->jump_mode = in;
+          dec->offset += dec->jumped_amount * SQUOZE_JUMP_STRIDE;
+          break;
+        case SQUOZE_INC_OFFSET_A:
+          dec->jumped_amount = 2;
+          dec->jump_mode = in;
+          dec->offset += dec->jumped_amount * SQUOZE_JUMP_STRIDE;
+          break;
+        case SQUOZE_DEC_OFFSET_B:
+          dec->jumped_amount = -1;
+          dec->jump_mode = in;
+          dec->offset += dec->jumped_amount * SQUOZE_JUMP_STRIDE;
+          break;
+        case SQUOZE_INC_OFFSET_B:
+          dec->jumped_amount = 1;
+          dec->jump_mode = in;
+          dec->offset += dec->jumped_amount * SQUOZE_JUMP_STRIDE;
+          break;
+        default:
+          dec->append_unichar (dec->offset + (in - 1), dec->write_data);
+          dec->jumped_amount = 0;
+          dec->jump_mode = 0;
+      }
+    }
+  }
+}
+
+static void squoze_decode_utf5_bytes (int is_utf5, 
+                        const unsigned char *input, int inlen,
+                        char *output, int *r_outlen)
+{
+  CashUtf5DecDefaultData append_data = {(unsigned char*)output, 0};
+  CashUtf5Dec dec = {is_utf5,
+                     squoze_new_offset('a'),
+                     &append_data,
+                     0,
+                     squoze_decode_utf5_append_unichar_as_utf8,
+                     0, 0
+                    };
+  for (int i = 0; i < inlen; i++)
+    squoze_decode_utf5 (&dec, input[i]);
+  if (dec.current)
+    dec.append_unichar (dec.current, dec.write_data);
+  if (r_outlen)
+    *r_outlen = append_data.length;
+}
+
+static const char *squoze_decode_r (int squoze_dim, uint64_t hash, char *ret, int retlen)
+{
+  uint64_t overflowed_mask = ((uint64_t)1<<(squoze_dim * 5 + 1));
+
+  if (hash & overflowed_mask)
+  {
+#if 0
+    for (int i = 0; i < n_interned; i++)
+    {
+      CashInterned *entry = &interned[i];
+      if (entry->hash == hash)
+        return entry->string;
+    }
+#else
+    int pos = squoze_interned_find (hash);
+    if (!interned || (interned[pos].hash!=hash))
+      return NULL;
+    return interned[pos].string;
+#endif
+    return NULL;
+  }
+
+  uint8_t utf5[140]=""; // we newer go really high since there isnt room
+                        // in the integers
+  uint64_t tmp = hash & (overflowed_mask-1);
+  int len = 0;
+  int is_utf5 = tmp & 1;
+  tmp /= 2;
+  int in_utf5 = is_utf5;
+  while (tmp > 0)
+  {
+    uint64_t remnant = tmp % 32;
+    uint64_t val = remnant;
+
+    if      ( in_utf5 && val == SQUOZE_ENTER_SQUEEZE) in_utf5 = 0;
+    else if (!in_utf5 && val == SQUOZE_ENTER_UTF5) in_utf5 = 1;
+
+    utf5[len++] = val;
+    tmp -= remnant;
+    tmp /= 32;
+  }
+  utf5[len]=0;
+  squoze_decode_utf5_bytes (is_utf5, utf5, len, ret, &retlen);
+  //ret[retlen]=0;
+  return ret;
+}
+
+/* copy the value as soon as possible, some mitigation is in place
+ * for more than one value in use and cross-thread interactions.
+ */
+static const char *squoze_decode (int squoze_dim, uint64_t hash)
+{
+#if CTX_THREADS
+#define THREAD __thread  // use thread local storage
+  static THREAD int no = 0;
+  static THREAD char ret[3][256];
+  no ++;
+  if (no > 7) no = 0;
+  return squoze_decode_r (squoze_dim, hash, ret[no], 256);
+#undef THREAD
+#else
+  static char ret[64];
+  return squoze_decode_r (squoze_dim, hash, ret, 256);
+#endif
+}
+
+const char *squoze6_decode (uint32_t hash)
+{
+  return squoze_decode (6, hash);
+}
+
+const char *squoze10_decode (uint64_t hash)
+{
+  return squoze_decode (10, hash);
+}
+
+const char *squoze12_decode (uint64_t hash)
+{
+  return squoze_decode (12, hash);
+}
+
+static inline uint32_t
+squoze_utf8_to_unichar (const char *input)
+{
+  const uint8_t *utf8 = (const uint8_t *) input;
+  uint8_t c = utf8[0];
+  if ( (c & 0x80) == 0)
+    { return c; }
+  else if ( (c & 0xE0) == 0xC0)
+    return ( (utf8[0] & 0x1F) << 6) |
+           (utf8[1] & 0x3F);
+  else if ( (c & 0xF0) == 0xE0)
+    return ( (utf8[0] & 0xF)  << 12) |
+           ( (utf8[1] & 0x3F) << 6) |
+           (utf8[2] & 0x3F);
+  else if ( (c & 0xF8) == 0xF0)
+    return ( (utf8[0] & 0x7)  << 18) |
+           ( (utf8[1] & 0x3F) << 12) |
+           ( (utf8[2] & 0x3F) << 6) |
+           (utf8[3] & 0x3F);
+  else if ( (c & 0xFC) == 0xF8)
+    return ( (utf8[0] & 0x3)  << 24) |
+           ( (utf8[1] & 0x3F) << 18) |
+           ( (utf8[2] & 0x3F) << 12) |
+           ( (utf8[3] & 0x3F) << 6) |
+           (utf8[4] & 0x3F);
+  else if ( (c & 0xFE) == 0xFC)
+    return ( (utf8[0] & 0x1)  << 30) |
+           ( (utf8[1] & 0x3F) << 24) |
+           ( (utf8[2] & 0x3F) << 18) |
+           ( (utf8[3] & 0x3F) << 12) |
+           ( (utf8[4] & 0x3F) << 6) |
+           (utf8[5] & 0x3F);
+  return 0;
+}
+static inline int
+squoze_unichar_to_utf8 (uint32_t  ch,
+                      uint8_t  *dest)
+{
+  /* http://www.cprogramming.com/tutorial/utf8.c  */
+  /*  Basic UTF-8 manipulation routines
+    by Jeff Bezanson
+    placed in the public domain Fall 2005 ... */
+  if (ch < 0x80)
+    {
+      dest[0] = (char) ch;
+      return 1;
+    }
+  if (ch < 0x800)
+    {
+      dest[0] = (ch>>6) | 0xC0;
+      dest[1] = (ch & 0x3F) | 0x80;
+      return 2;
+    }
+  if (ch < 0x10000)
+    {
+      dest[0] = (ch>>12) | 0xE0;
+      dest[1] = ( (ch>>6) & 0x3F) | 0x80;
+      dest[2] = (ch & 0x3F) | 0x80;
+      return 3;
+    }
+  if (ch < 0x110000)
+    {
+      dest[0] = (ch>>18) | 0xF0;
+      dest[1] = ( (ch>>12) & 0x3F) | 0x80;
+      dest[2] = ( (ch>>6) & 0x3F) | 0x80;
+      dest[3] = (ch & 0x3F) | 0x80;
+      return 4;
+    }
+  return 0;
+}
+
+static inline int
+squoze_utf8_len (const unsigned char first_byte)
+{
+  if      ( (first_byte & 0x80) == 0)
+    { return 1; } /* ASCII */
+  else if ( (first_byte & 0xE0) == 0xC0)
+    { return 2; }
+  else if ( (first_byte & 0xF0) == 0xE0)
+    { return 3; }
+  else if ( (first_byte & 0xF8) == 0xF0)
+    { return 4; }
+  return 1;
+}
+
+#endif
+
+
+static inline int
+ctx_conts_for_entry (CtxEntry *entry)
+{
+    switch (entry->code)
+    {
+      case CTX_DATA:
+        return entry->data.u32[1];
+      case CTX_RADIAL_GRADIENT:
+      case CTX_ARC:
+      case CTX_CURVE_TO:
+      case CTX_REL_CURVE_TO:
+      case CTX_COLOR:
+      case CTX_ROUND_RECTANGLE:
+      case CTX_SHADOW_COLOR:
+        return 2;
+      case CTX_ARC_TO:
+      case CTX_REL_ARC_TO:
+        return 3;
+      case CTX_APPLY_TRANSFORM:
+      case CTX_SOURCE_TRANSFORM:
+        return 4;
+      case CTX_FILL_RECT:
+      case CTX_STROKE_RECT:
+      case CTX_RECTANGLE:
+      case CTX_VIEW_BOX:
+      case CTX_REL_QUAD_TO:
+      case CTX_QUAD_TO:
+      case CTX_LINEAR_GRADIENT:
+        return 1;
+
+      case CTX_TEXT:
+      case CTX_LINE_DASH:
+      case CTX_COLOR_SPACE:
+      case CTX_STROKE_TEXT:
+      case CTX_FONT:
+      case CTX_TEXTURE:
+        {
+          int eid_len = entry[1].data.u32[1];
+          return eid_len + 1;
+        }
+      case CTX_DEFINE_TEXTURE:
+        {
+          int eid_len = entry[2].data.u32[1];
+          int pix_len = entry[2 + eid_len + 1].data.u32[1];
+          return eid_len + pix_len + 2 + 1;
+        }
+      default:
+        return 0;
+    }
+}
+
+// expanding arc_to to arc can be the job
+// of a layer in front of backend?
+//   doing:
+//     rectangle
+//     arc
+//     ... etc reduction to beziers
+//     or even do the reduction to
+//     polylines directly here...
+//     making the rasterizer able to
+//     only do poly-lines? will that be faster?
+
+/* the iterator - should decode bitpacked data as well -
+ * making the rasterizers simpler, possibly do unpacking
+ * all the way to absolute coordinates.. unless mixed
+ * relative/not are wanted.
+ */
+
+
+void
+ctx_iterator_init (CtxIterator      *iterator,
+                   CtxDrawlist  *drawlist,
+                   int               start_pos,
+                   int               flags)
+{
+  iterator->drawlist   = drawlist;
+  iterator->flags          = flags;
+  iterator->bitpack_pos    = 0;
+  iterator->bitpack_length = 0;
+  iterator->pos            = start_pos;
+  iterator->end_pos        = drawlist->count;
+  iterator->first_run      = 1; // -1 is a marker used for first run
+  ctx_memset (iterator->bitpack_command, 0, sizeof (iterator->bitpack_command) );
+}
+
+int ctx_iterator_pos (CtxIterator *iterator)
+{
+  return iterator->pos;
+}
+
+static inline CtxEntry *_ctx_iterator_next (CtxIterator *iterator)
+{
+  int ret = iterator->pos;
+  CtxEntry *entry = &iterator->drawlist->entries[ret];
+  if (CTX_UNLIKELY(ret >= iterator->end_pos))
+    { return NULL; }
+
+  if (CTX_UNLIKELY(iterator->first_run))
+      iterator->first_run = 0;
+  else
+     iterator->pos += (ctx_conts_for_entry (entry) + 1);
+
+  if (CTX_UNLIKELY(iterator->pos >= iterator->end_pos))
+    { return NULL; }
+  return &iterator->drawlist->entries[iterator->pos];
+}
+
+// 6024x4008
+#if CTX_BITPACK
+static void
+ctx_iterator_expand_s8_args (CtxIterator *iterator, CtxEntry *entry)
+{
+  int no = 0;
+  for (int cno = 0; cno < 4; cno++)
+    for (int d = 0; d < 2; d++, no++)
+      iterator->bitpack_command[cno].data.f[d] =
+        entry->data.s8[no] * 1.0f / CTX_SUBDIV;
+  iterator->bitpack_command[0].code =
+    iterator->bitpack_command[1].code =
+      iterator->bitpack_command[2].code =
+        iterator->bitpack_command[3].code = CTX_CONT;
+  iterator->bitpack_length = 4;
+  iterator->bitpack_pos = 0;
+}
+
+static void
+ctx_iterator_expand_s16_args (CtxIterator *iterator, CtxEntry *entry)
+{
+  int no = 0;
+  for (int cno = 0; cno < 2; cno++)
+    for (int d = 0; d < 2; d++, no++)
+      iterator->bitpack_command[cno].data.f[d] = entry->data.s16[no] * 1.0f /
+          CTX_SUBDIV;
+  iterator->bitpack_command[0].code =
+    iterator->bitpack_command[1].code = CTX_CONT;
+  iterator->bitpack_length = 2;
+  iterator->bitpack_pos    = 0;
+}
+#endif
+
+CtxCommand *
+ctx_iterator_next (CtxIterator *iterator)
+{
+  CtxEntry *ret;
+#if CTX_BITPACK
+  int expand_bitpack = iterator->flags & CTX_ITERATOR_EXPAND_BITPACK;
+again:
+  if (CTX_UNLIKELY(iterator->bitpack_length))
+    {
+      ret = &iterator->bitpack_command[iterator->bitpack_pos];
+      iterator->bitpack_pos += (ctx_conts_for_entry (ret) + 1);
+      if (iterator->bitpack_pos >= iterator->bitpack_length)
+        {
+          iterator->bitpack_length = 0;
+        }
+      return (CtxCommand *) ret;
+    }
+#endif
+  ret = _ctx_iterator_next (iterator);
+#if CTX_BITPACK
+  if (CTX_UNLIKELY(ret && expand_bitpack))
+    switch ((CtxCode)(ret->code))
+      {
+        case CTX_REL_CURVE_TO_REL_LINE_TO:
+          ctx_iterator_expand_s8_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_REL_CURVE_TO;
+          iterator->bitpack_command[1].code =
+          iterator->bitpack_command[2].code = CTX_CONT;
+          iterator->bitpack_command[3].code = CTX_REL_LINE_TO;
+          // 0.0 here is a common optimization - so check for it
+          if (ret->data.s8[6]== 0 && ret->data.s8[7] == 0)
+            { iterator->bitpack_length = 3; }
+          else
+            iterator->bitpack_length          = 4;
+          goto again;
+        case CTX_REL_LINE_TO_REL_CURVE_TO:
+          ctx_iterator_expand_s8_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_REL_LINE_TO;
+          iterator->bitpack_command[1].code = CTX_REL_CURVE_TO;
+          iterator->bitpack_length          = 2;
+          goto again;
+        case CTX_REL_CURVE_TO_REL_MOVE_TO:
+          ctx_iterator_expand_s8_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_REL_CURVE_TO;
+          iterator->bitpack_command[3].code = CTX_REL_MOVE_TO;
+          iterator->bitpack_length          = 4;
+          goto again;
+        case CTX_REL_LINE_TO_X4:
+          ctx_iterator_expand_s8_args (iterator, ret);
+          iterator->bitpack_command[0].code =
+          iterator->bitpack_command[1].code =
+          iterator->bitpack_command[2].code =
+          iterator->bitpack_command[3].code = CTX_REL_LINE_TO;
+          iterator->bitpack_length          = 4;
+          goto again;
+        case CTX_REL_QUAD_TO_S16:
+          ctx_iterator_expand_s16_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_REL_QUAD_TO;
+          iterator->bitpack_length          = 1;
+          goto again;
+        case CTX_REL_QUAD_TO_REL_QUAD_TO:
+          ctx_iterator_expand_s8_args (iterator, ret);
+          iterator->bitpack_command[0].code =
+          iterator->bitpack_command[2].code = CTX_REL_QUAD_TO;
+          iterator->bitpack_length          = 3;
+          goto again;
+        case CTX_REL_LINE_TO_X2:
+          ctx_iterator_expand_s16_args (iterator, ret);
+          iterator->bitpack_command[0].code =
+          iterator->bitpack_command[1].code = CTX_REL_LINE_TO;
+          iterator->bitpack_length          = 2;
+          goto again;
+        case CTX_REL_LINE_TO_REL_MOVE_TO:
+          ctx_iterator_expand_s16_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_REL_LINE_TO;
+          iterator->bitpack_command[1].code = CTX_REL_MOVE_TO;
+          iterator->bitpack_length          = 2;
+          goto again;
+        case CTX_MOVE_TO_REL_LINE_TO:
+          ctx_iterator_expand_s16_args (iterator, ret);
+          iterator->bitpack_command[0].code = CTX_MOVE_TO;
+          iterator->bitpack_command[1].code = CTX_REL_MOVE_TO;
+          iterator->bitpack_length          = 2;
+          goto again;
+        case CTX_FILL_MOVE_TO:
+          iterator->bitpack_command[1]      = *ret;
+          iterator->bitpack_command[0].code = CTX_FILL;
+          iterator->bitpack_command[1].code = CTX_MOVE_TO;
+          iterator->bitpack_pos             = 0;
+          iterator->bitpack_length          = 2;
+          goto again;
+        case CTX_LINEAR_GRADIENT:
+        case CTX_QUAD_TO:
+        case CTX_REL_QUAD_TO:
+        case CTX_TEXTURE:
+        case CTX_RECTANGLE:
+        case CTX_VIEW_BOX:
+        case CTX_ARC:
+        case CTX_ARC_TO:
+        case CTX_REL_ARC_TO:
+        case CTX_COLOR:
+        case CTX_SHADOW_COLOR:
+        case CTX_RADIAL_GRADIENT:
+        case CTX_CURVE_TO:
+        case CTX_REL_CURVE_TO:
+        case CTX_APPLY_TRANSFORM:
+        case CTX_SOURCE_TRANSFORM:
+        case CTX_ROUND_RECTANGLE:
+        case CTX_TEXT:
+        case CTX_STROKE_TEXT:
+        case CTX_FONT:
+        case CTX_LINE_DASH:
+        case CTX_FILL:
+        case CTX_PAINT:
+        case CTX_NOP:
+        case CTX_MOVE_TO:
+        case CTX_LINE_TO:
+        case CTX_REL_MOVE_TO:
+        case CTX_REL_LINE_TO:
+        case CTX_VER_LINE_TO:
+        case CTX_REL_VER_LINE_TO:
+        case CTX_HOR_LINE_TO:
+        case CTX_REL_HOR_LINE_TO:
+        case CTX_ROTATE:
+        case CTX_END_FRAME:
+        case CTX_TEXT_ALIGN:
+        case CTX_TEXT_BASELINE:
+        case CTX_TEXT_DIRECTION:
+        case CTX_MITER_LIMIT:
+        case CTX_GLOBAL_ALPHA:
+        case CTX_COMPOSITING_MODE:
+        case CTX_BLEND_MODE:
+        case CTX_SHADOW_BLUR:
+        case CTX_SHADOW_OFFSET_X:
+        case CTX_SHADOW_OFFSET_Y:
+        case CTX_START_FRAME:
+        case CTX_EXIT:
+        case CTX_BEGIN_PATH:
+        case CTX_CLOSE_PATH:
+        case CTX_SAVE:
+        case CTX_CLIP:
+        case CTX_PRESERVE:
+        case CTX_DEFINE_FONT:
+        case CTX_DEFINE_GLYPH:
+        case CTX_IDENTITY:
+        case CTX_FONT_SIZE:
+        case CTX_START_GROUP:
+        case CTX_END_GROUP:
+        case CTX_RESTORE:
+        case CTX_LINE_WIDTH:
+        case CTX_LINE_DASH_OFFSET:
+        case CTX_LINE_HEIGHT:
+        case CTX_WRAP_LEFT:
+        case CTX_WRAP_RIGHT:
+        case CTX_STROKE:
+        case CTX_KERNING_PAIR:
+        case CTX_SCALE:
+        case CTX_GLYPH:
+        case CTX_SET_PIXEL:
+        case CTX_FILL_RULE:
+        case CTX_LINE_CAP:
+        case CTX_LINE_JOIN:
+        case CTX_NEW_PAGE:
+        case CTX_SET_KEY:
+        case CTX_TRANSLATE:
+        case CTX_DEFINE_TEXTURE:
+        case CTX_GRADIENT_STOP:
+        case CTX_DATA: // XXX : would be better if we hide the DATAs
+        case CTX_CONT: // shouldnt happen
+        default:
+          iterator->bitpack_length = 0;
+#if 0
+        default: // XXX remove - and get better warnings
+          iterator->bitpack_command[0] = ret[0];
+          iterator->bitpack_command[1] = ret[1];
+          iterator->bitpack_command[2] = ret[2];
+          iterator->bitpack_command[3] = ret[3];
+          iterator->bitpack_command[4] = ret[4];
+          iterator->bitpack_pos = 0;
+          iterator->bitpack_length = 1;
+          goto again;
+#endif
+      }
+#endif
+  return (CtxCommand *) ret;
+}
+
+static void ctx_drawlist_compact (CtxDrawlist *drawlist);
+static void
+ctx_drawlist_resize (CtxDrawlist *drawlist, int desired_size)
+{
+  int flags=drawlist->flags;
+#if CTX_DRAWLIST_STATIC
+  if (flags & CTX_DRAWLIST_EDGE_LIST)
+    {
+      static CtxSegment sbuf[CTX_MAX_EDGE_LIST_SIZE];
+      drawlist->entries = (CtxEntry*)&sbuf[0];
+      drawlist->size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+  else if (flags & CTX_DRAWLIST_CURRENT_PATH)
+    {
+      static CtxEntry sbuf[CTX_MAX_EDGE_LIST_SIZE];
+      drawlist->entries = &sbuf[0];
+      drawlist->size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+  else
+    {
+      static CtxEntry sbuf[CTX_MAX_JOURNAL_SIZE];
+      drawlist->entries = &sbuf[0];
+      drawlist->size = CTX_MAX_JOURNAL_SIZE;
+      if(0)ctx_drawlist_compact (drawlist);
+    }
+#else
+  int new_size = desired_size;
+  int min_size = CTX_MIN_JOURNAL_SIZE;
+  int max_size = CTX_MAX_JOURNAL_SIZE;
+  if ((flags & CTX_DRAWLIST_EDGE_LIST))
+    {
+      min_size = CTX_MIN_EDGE_LIST_SIZE;
+      max_size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+  else if (flags & CTX_DRAWLIST_CURRENT_PATH)
+    {
+      min_size = CTX_MIN_EDGE_LIST_SIZE;
+      max_size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+  else
+    {
+#if 0
+      ctx_drawlist_compact (drawlist);
+#endif
+    }
+
+  if (CTX_UNLIKELY(new_size < drawlist->size))
+    { return; }
+  if (CTX_UNLIKELY(drawlist->size == max_size))
+    { return; }
+  new_size = ctx_maxi (new_size, min_size);
+  //if (new_size < drawlist->count)
+  //  { new_size = drawlist->count + 4; }
+  new_size = ctx_mini (new_size, max_size);
+  if (new_size != drawlist->size)
+    {
+      int item_size = sizeof (CtxEntry);
+      if (flags & CTX_DRAWLIST_EDGE_LIST) item_size = sizeof (CtxSegment);
+      //fprintf (stderr, "growing drawlist %p %i to %d from %d\n", drawlist, flags, new_size, drawlist->size);
+  if (drawlist->entries)
+    {
+      //printf ("grow %p to %d from %d\n", drawlist, new_size, drawlist->size);
+      CtxEntry *ne =  (CtxEntry *) ctx_malloc (item_size * new_size);
+      memcpy (ne, drawlist->entries, drawlist->size * item_size );
+      ctx_free (drawlist->entries);
+      drawlist->entries = ne;
+      //drawlist->entries = (CtxEntry*)ctx_malloc (drawlist->entries, item_size * new_size);
+    }
+  else
+    {
+      //fprintf (stderr, "allocating for %p %d\n", drawlist, new_size);
+      drawlist->entries = (CtxEntry *) ctx_malloc (item_size * new_size);
+    }
+  drawlist->size = new_size;
+    }
+  //fprintf (stderr, "drawlist %p is %d\n", drawlist, drawlist->size);
+#endif
+}
+
+
+static inline int
+ctx_drawlist_add_single (CtxDrawlist *drawlist, CtxEntry *entry)
+{
+  unsigned int max_size = CTX_MAX_JOURNAL_SIZE;
+  int ret = drawlist->count;
+  int flags = drawlist->flags;
+  if (CTX_LIKELY((flags & CTX_DRAWLIST_EDGE_LIST ||
+       flags & CTX_DRAWLIST_CURRENT_PATH)))
+    {
+      max_size = CTX_MAX_EDGE_LIST_SIZE;
+    }
+  if (CTX_UNLIKELY(flags & CTX_DRAWLIST_DOESNT_OWN_ENTRIES))
+    {
+      return ret;
+    }
+  if (CTX_UNLIKELY(ret + 64 >= drawlist->size - 40))
+    {
+      int new_ = CTX_MAX (drawlist->size * 2, ret + 1024);
+      ctx_drawlist_resize (drawlist, new_);
+    }
+
+  if (CTX_UNLIKELY(drawlist->count >= max_size - 20))
+    {
+      return 0;
+    }
+  if ((flags & CTX_DRAWLIST_EDGE_LIST))
+    ((CtxSegment*)(drawlist->entries))[drawlist->count] = *(CtxSegment*)entry;
+  else
+    drawlist->entries[drawlist->count] = *entry;
+  ret = drawlist->count;
+  drawlist->count++;
+  return ret;
+}
+
+
+int
+ctx_add_single (Ctx *ctx, void *entry)
+{
+  return ctx_drawlist_add_single (&ctx->drawlist, (CtxEntry *) entry);
+}
+
+static inline int
+ctx_drawlist_add_entry (CtxDrawlist *drawlist, CtxEntry *entry)
+{
+  int length = ctx_conts_for_entry (entry) + 1;
+  int ret = 0;
+  for (int i = 0; i < length; i ++)
+    {
+      ret = ctx_drawlist_add_single (drawlist, &entry[i]);
+    }
+  return ret;
+}
+
+#if 0
+int
+ctx_drawlist_insert_entry (CtxDrawlist *drawlist, int pos, CtxEntry *entry)
+{
+  int length = ctx_conts_for_entry (entry) + 1;
+  int tmp_pos = ctx_drawlist_add_entry (drawlist, entry);
+  for (int i = 0; i < length; i++)
+  {
+    for (int j = pos + i + 1; j < tmp_pos; j++)
+      drawlist->entries[j] = entry[j-1];
+    drawlist->entries[pos + i] = entry[i];
+  }
+  return pos;
+}
+#endif
+int
+ctx_drawlist_insert_entry (CtxDrawlist *drawlist, int pos, CtxEntry *entry)
+{
+  int length = ctx_conts_for_entry (entry) + 1;
+  int tmp_pos = ctx_drawlist_add_entry (drawlist, entry);
+#if 1
+  for (int i = 0; i < length; i++)
+  {
+    for (int j = tmp_pos; j > pos + i; j--)
+      drawlist->entries[j] = drawlist->entries[j-1];
+    drawlist->entries[pos + i] = entry[i];
+  }
+  return pos;
+#endif
+  return tmp_pos;
+}
+
+int ctx_append_drawlist (Ctx *ctx, void *data, int length)
+{
+  CtxEntry *entries = (CtxEntry *) data;
+  if (length % sizeof (CtxEntry) )
+    {
+      ctx_log("drawlist not multiple of 9\n");
+      return -1;
+    }
+#if 0
+  for (unsigned int i = 0; i < length / sizeof (CtxEntry); i++)
+    {
+      ctx_drawlist_add_single (&ctx->drawlist, &entries[i]);
+    }
+#else
+  CtxDrawlist dl;
+  dl.entries = entries;
+  dl.count = length/9;
+  dl.size = length;
+  dl.flags = CTX_DRAWLIST_DOESNT_OWN_ENTRIES;
+  dl.bitpack_pos = 0;
+
+  CtxIterator it;
+  ctx_iterator_init (&it, &dl, 0, 0);
+  CtxCommand *command;
+ 
+  while ((command = ctx_iterator_next (&it)))
+  {
+     ctx_process (ctx, (CtxEntry*)command);
+  }
+#endif
+  return 0;
+}
+
+int ctx_set_drawlist (Ctx *ctx, void *data, int length)
+{
+  CtxDrawlist *drawlist = &ctx->drawlist;
+  if (drawlist->flags & CTX_DRAWLIST_DOESNT_OWN_ENTRIES)
+    {
+      return -1;
+    }
+  ctx->drawlist.count = 0;
+  if (!data || length == 0)
+    return 0;
+  if (CTX_UNLIKELY(length % 9)) return -1;
+  ctx_drawlist_resize (drawlist, length/9);
+  memcpy (drawlist->entries, data, length);
+  drawlist->count = length / 9;
+  return length;
+}
+
+const CtxEntry *ctx_get_drawlist (Ctx *ctx, int *count)
+{
+  if (count) *count = ctx->drawlist.count;
+  return ctx->drawlist.entries;
+}
+
+int
+ctx_add_data (Ctx *ctx, void *data, int length)
+{
+  if (CTX_UNLIKELY(length % sizeof (CtxEntry) ))
+    {
+      //ctx_log("err\n");
+      return -1;
+    }
+  /* some more input verification might be in order.. like
+   * verify that it is well-formed up to length?
+   *
+   * also - it would be very useful to stop processing
+   * upon flush - and do drawlist resizing.
+   */
+  return ctx_drawlist_add_entry (&ctx->drawlist, (CtxEntry *) data);
+}
+
+int ctx_drawlist_add_u32 (CtxDrawlist *drawlist, CtxCode code, uint32_t u32[2])
+{
+  CtxEntry entry[4];
+  entry[0].code = code;
+  entry[0].data.u32[0] = u32[0];
+  entry[0].data.u32[1] = u32[1];
+  return ctx_drawlist_add_single (drawlist, &entry[0]);
+}
+
+int ctx_drawlist_add_data (CtxDrawlist *drawlist, const void *data, int length)
+{
+  CtxEntry entry[4] = {{CTX_DATA, {{0},}}};
+  entry[0].data.u32[0] = 0;
+  entry[0].data.u32[1] = 0;
+  int ret = ctx_drawlist_add_single (drawlist, &entry[0]);
+  if (CTX_UNLIKELY(!data)) { return -1; }
+  int length_in_blocks;
+  if (length <= 0) { length = ctx_strlen ( (char *) data) + 1; }
+  length_in_blocks = length / sizeof (CtxEntry);
+  length_in_blocks += (length % sizeof (CtxEntry) ) ?1:0;
+  if ((signed)drawlist->count + length_in_blocks + 4 > drawlist->size)
+    { ctx_drawlist_resize (drawlist, (int)(drawlist->count * 1.2 + length_in_blocks + 32)); }
+  if (CTX_UNLIKELY((signed)drawlist->count >= drawlist->size))
+    { return -1; }
+  drawlist->count += length_in_blocks;
+  drawlist->entries[ret].data.u32[0] = length;
+  drawlist->entries[ret].data.u32[1] = length_in_blocks;
+  memcpy (&drawlist->entries[ret+1], data, length);
+  {
+    //int reverse = ctx_drawlist_add (drawlist, CTX_DATA_REV);
+    CtxEntry entry[4] = {{CTX_DATA_REV, {{0},}}};
+    entry[0].data.u32[0] = length;
+    entry[0].data.u32[1] = length_in_blocks;
+    ctx_drawlist_add_single (drawlist, &entry[0]);
+
+    /* this reverse marker exist to enable more efficient
+       front to back traversal, can be ignored in other
+       direction, is this needed after string setters as well?
+     */
+  }
+  return ret;
+}
+
+static inline CtxEntry
+ctx_void (CtxCode code)
+{
+  CtxEntry command;
+  command.code = code;
+  return command;
+}
+
+static inline CtxEntry
+ctx_f (CtxCode code, float x, float y)
+{
+  CtxEntry command;
+  command.code = code;
+  command.data.f[0] = x;
+  command.data.f[1] = y;
+  return command;
+}
+
+static CtxEntry
+ctx_u32 (CtxCode code, uint32_t x, uint32_t y)
+{
+  CtxEntry command = ctx_void (code);
+  command.data.u32[0] = x;
+  command.data.u32[1] = y;
+  return command;
+}
+
+#if 0
+static CtxEntry
+ctx_s32 (CtxCode code, int32_t x, int32_t y)
+{
+  CtxEntry command = ctx_void (code);
+  command.data.s32[0] = x;
+  command.data.s32[1] = y;
+  return command;
+}
+#endif
+
+static inline CtxEntry
+ctx_s16 (CtxCode code, int x0, int y0, int x1, int y1)
+{
+  CtxEntry command;
+  command.code = code;
+  command.data.s16[0] = x0;
+  command.data.s16[1] = y0;
+  command.data.s16[2] = x1;
+  command.data.s16[3] = y1;
+  return command;
+}
+
+
+static CtxEntry
+ctx_u8 (CtxCode code,
+        uint8_t a, uint8_t b, uint8_t c, uint8_t d,
+        uint8_t e, uint8_t f, uint8_t g, uint8_t h)
+{
+  CtxEntry command;
+  command.code = code;
+  command.data.u8[0] = a;
+  command.data.u8[1] = b;
+  command.data.u8[2] = c;
+  command.data.u8[3] = d;
+  command.data.u8[4] = e;
+  command.data.u8[5] = f;
+  command.data.u8[6] = g;
+  command.data.u8[7] = h;
+  return command;
+}
+
+static void
+ctx_process_cmd_str_with_len (Ctx *ctx, CtxCode code, const char *string, uint32_t arg0, uint32_t arg1, int len)
+{
+  CtxEntry commands[1 + 2 + (len+1+1)/9];
+  ctx_memset (commands, 0, sizeof (commands) );
+  commands[0] = ctx_u32 (code, arg0, arg1);
+  commands[1].code = CTX_DATA;
+  commands[1].data.u32[0] = len;
+  commands[1].data.u32[1] = (len+1+1)/9 + 1;
+  memcpy( (char *) &commands[2].data.u8[0], string, len);
+  ( (char *) (&commands[2].data.u8[0]) ) [len]=0;
+  ctx_process (ctx, commands);
+}
+
+static void
+ctx_process_cmd_str (Ctx *ctx, CtxCode code, const char *string, uint32_t arg0, uint32_t arg1)
+{
+  ctx_process_cmd_str_with_len (ctx, code, string, arg0, arg1, ctx_strlen (string));
+}
+
+static void
+ctx_process_cmd_str_float (Ctx *ctx, CtxCode code, const char *string, float arg0, float arg1)
+{
+  uint32_t iarg0;
+  uint32_t iarg1;
+  memcpy (&iarg0, &arg0, sizeof (iarg0));
+  memcpy (&iarg1, &arg1, sizeof (iarg1));
+  ctx_process_cmd_str_with_len (ctx, code, string, iarg0, iarg1, ctx_strlen (string));
+}
+
+#if CTX_BITPACK_PACKER
+static unsigned int
+ctx_last_history (CtxDrawlist *drawlist)
+{
+  unsigned int last_history = 0;
+  unsigned int i = 0;
+  while (i < drawlist->count)
+    {
+      CtxEntry *entry = &drawlist->entries[i];
+      i += (ctx_conts_for_entry (entry) + 1);
+    }
+  return last_history;
+}
+#endif
+
+#if CTX_BITPACK_PACKER
+
+static float
+find_max_dev (CtxEntry *entry, int nentrys)
+{
+  float max_dev = 0.0;
+  for (int c = 0; c < nentrys; c++)
+    {
+      for (int d = 0; d < 2; d++)
+        {
+          if (entry[c].data.f[d] > max_dev)
+            { max_dev = entry[c].data.f[d]; }
+          if (entry[c].data.f[d] < -max_dev)
+            { max_dev = -entry[c].data.f[d]; }
+        }
+    }
+  return max_dev;
+}
+
+static void
+pack_s8_args (CtxEntry *entry, int npairs)
+{
+  for (int c = 0; c < npairs; c++)
+    for (int d = 0; d < 2; d++)
+      { entry[0].data.s8[c*2+d]=entry[c].data.f[d] * CTX_SUBDIV; }
+}
+
+static void
+pack_s16_args (CtxEntry *entry, int npairs)
+{
+  for (int c = 0; c < npairs; c++)
+    for (int d = 0; d < 2; d++)
+      { entry[0].data.s16[c*2+d]=entry[c].data.f[d] * CTX_SUBDIV; }
+}
+#endif
+
+#if CTX_BITPACK_PACKER
+static void
+ctx_drawlist_remove_tiny_curves (CtxDrawlist *drawlist, int start_pos)
+{
+  CtxIterator iterator;
+  if ( (drawlist->flags & CTX_TRANSFORMATION_BITPACK) == 0)
+    { return; }
+  ctx_iterator_init (&iterator, drawlist, start_pos, CTX_ITERATOR_FLAT);
+  iterator.end_pos = drawlist->count - 5;
+  CtxCommand *command = NULL;
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    {
+      CtxEntry *entry = &command->entry;
+      /* things smaller than this have probably been scaled down
+         beyond recognition, bailing for both better packing and less rasterization work
+       */
+      if (command[0].code == CTX_REL_CURVE_TO)
+        {
+          float max_dev = find_max_dev (entry, 3);
+          if (max_dev < 1.0)
+            {
+              entry[0].code = CTX_REL_LINE_TO;
+              entry[0].data.f[0] = entry[2].data.f[0];
+              entry[0].data.f[1] = entry[2].data.f[1];
+              entry[1].code = CTX_NOP;
+              entry[2].code = CTX_NOP;
+            }
+        }
+    }
+}
+#endif
+
+#if CTX_BITPACK_PACKER
+static void
+ctx_drawlist_bitpack (CtxDrawlist *drawlist, unsigned int start_pos)
+{
+#if CTX_BITPACK
+  unsigned int i = 0;
+  if ( (drawlist->flags & CTX_TRANSFORMATION_BITPACK) == 0)
+    { return; }
+  ctx_drawlist_remove_tiny_curves (drawlist, drawlist->bitpack_pos);
+  i = drawlist->bitpack_pos;
+  if (start_pos > i)
+    { i = start_pos; }
+  while (i < drawlist->count - 4) /* the -4 is to avoid looking past
+                                    initialized data we're not ready
+                                    to bitpack yet*/
+    {
+      CtxEntry *entry = &drawlist->entries[i];
+      if (entry[0].code == CTX_SET_RGBA_U8 &&
+          entry[1].code == CTX_MOVE_TO &&
+          entry[2].code == CTX_REL_LINE_TO &&
+          entry[3].code == CTX_REL_LINE_TO &&
+          entry[4].code == CTX_REL_LINE_TO &&
+          entry[5].code == CTX_REL_LINE_TO &&
+          entry[6].code == CTX_FILL &&
+          ctx_fabsf (entry[2].data.f[0] - 1.0f) < 0.02f &&
+          ctx_fabsf (entry[3].data.f[1] - 1.0f) < 0.02f)
+        {
+          entry[0].code = CTX_SET_PIXEL;
+          entry[0].data.u16[2] = entry[1].data.f[0];
+          entry[0].data.u16[3] = entry[1].data.f[1];
+          entry[1].code = CTX_NOP;
+          entry[2].code = CTX_NOP;
+          entry[3].code = CTX_NOP;
+          entry[4].code = CTX_NOP;
+          entry[5].code = CTX_NOP;
+          entry[6].code = CTX_NOP;
+        }
+#if 1
+      else if (entry[0].code == CTX_REL_LINE_TO)
+        {
+          if (entry[1].code == CTX_REL_LINE_TO &&
+              entry[2].code == CTX_REL_LINE_TO &&
+              entry[3].code == CTX_REL_LINE_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_LINE_TO_X4;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else if (entry[1].code == CTX_REL_CURVE_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_LINE_TO_REL_CURVE_TO;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else if (entry[1].code == CTX_REL_LINE_TO &&
+                   entry[2].code == CTX_REL_LINE_TO &&
+                   entry[3].code == CTX_REL_LINE_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_LINE_TO_X4;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else if (entry[1].code == CTX_REL_MOVE_TO)
+            {
+              float max_dev = find_max_dev (entry, 2);
+              if (max_dev < 31000 / CTX_SUBDIV)
+                {
+                  pack_s16_args (entry, 2);
+                  entry[0].code = CTX_REL_LINE_TO_REL_MOVE_TO;
+                  entry[1].code = CTX_NOP;
+                }
+            }
+          else if (entry[1].code == CTX_REL_LINE_TO)
+            {
+              float max_dev = find_max_dev (entry, 2);
+              if (max_dev < 31000 / CTX_SUBDIV)
+                {
+                  pack_s16_args (entry, 2);
+                  entry[0].code = CTX_REL_LINE_TO_X2;
+                  entry[1].code = CTX_NOP;
+                }
+            }
+        }
+#endif
+#if 1
+      else if (entry[0].code == CTX_REL_CURVE_TO)
+        {
+          if (entry[3].code == CTX_REL_LINE_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_CURVE_TO_REL_LINE_TO;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else if (entry[3].code == CTX_REL_MOVE_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_CURVE_TO_REL_MOVE_TO;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else
+            {
+              float max_dev = find_max_dev (entry, 3);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 3);
+                  ctx_arg_s8 (6) =
+                    ctx_arg_s8 (7) = 0;
+                  entry[0].code = CTX_REL_CURVE_TO_REL_LINE_TO;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                }
+            }
+        }
+#endif
+#if 1
+      else if (entry[0].code == CTX_REL_QUAD_TO)
+        {
+          if (entry[2].code == CTX_REL_QUAD_TO)
+            {
+              float max_dev = find_max_dev (entry, 4);
+              if (max_dev < 114 / CTX_SUBDIV)
+                {
+                  pack_s8_args (entry, 4);
+                  entry[0].code = CTX_REL_QUAD_TO_REL_QUAD_TO;
+                  entry[1].code = CTX_NOP;
+                  entry[2].code = CTX_NOP;
+                  entry[3].code = CTX_NOP;
+                }
+            }
+          else
+            {
+              float max_dev = find_max_dev (entry, 2);
+              if (max_dev < 3100 / CTX_SUBDIV)
+                {
+                  pack_s16_args (entry, 2);
+                  entry[0].code = CTX_REL_QUAD_TO_S16;
+                  entry[1].code = CTX_NOP;
+                }
+            }
+        }
+#endif
+#if 1
+      else if (entry[0].code == CTX_FILL &&
+               entry[1].code == CTX_MOVE_TO)
+        {
+          entry[0] = entry[1];
+          entry[0].code = CTX_FILL_MOVE_TO;
+          entry[1].code = CTX_NOP;
+        }
+#endif
+#if 1
+      else if (entry[0].code == CTX_MOVE_TO &&
+               entry[1].code == CTX_MOVE_TO &&
+               entry[2].code == CTX_MOVE_TO)
+        {
+          entry[0]      = entry[2];
+          entry[0].code = CTX_MOVE_TO;
+          entry[1].code = CTX_NOP;
+          entry[2].code = CTX_NOP;
+        }
+#endif
+#if 1
+      else if ( (entry[0].code == CTX_MOVE_TO &&
+                 entry[1].code == CTX_MOVE_TO) ||
+                (entry[0].code == CTX_REL_MOVE_TO &&
+                 entry[1].code == CTX_MOVE_TO) )
+        {
+          entry[0]      = entry[1];
+          entry[0].code = CTX_MOVE_TO;
+          entry[1].code = CTX_NOP;
+        }
+#endif
+      i += (ctx_conts_for_entry (entry) + 1);
+    }
+
+  unsigned int source = drawlist->bitpack_pos;
+  unsigned int target = drawlist->bitpack_pos;
+  int removed = 0;
+  /* remove nops that have been inserted as part of shortenings
+   */
+  while (source < drawlist->count)
+    {
+      CtxEntry *sentry = &drawlist->entries[source];
+      CtxEntry *tentry = &drawlist->entries[target];
+      while (sentry->code == CTX_NOP && source < drawlist->count)
+        {
+          source++;
+          sentry = &drawlist->entries[source];
+          removed++;
+        }
+      if (sentry != tentry)
+        { *tentry = *sentry; }
+      source ++;
+      target ++;
+    }
+  drawlist->count -= removed;
+  drawlist->bitpack_pos = drawlist->count;
+#endif
+}
+
+#endif
+
+static inline void
+ctx_drawlist_compact (CtxDrawlist *drawlist)
+{
+#if CTX_BITPACK_PACKER
+  unsigned int last_history;
+  last_history = ctx_last_history (drawlist);
+#else
+  if (drawlist) {};
+#endif
+#if CTX_BITPACK_PACKER
+  ctx_drawlist_bitpack (drawlist, last_history);
+#endif
+}
+
+uint8_t *ctx_define_texture_pixel_data (CtxEntry *entry)
+{
+  return &entry[2 + 1 + 1 + ctx_conts_for_entry (&entry[2])].data.u8[0];
+}
+
+#ifndef __CTX_TRANSFORM
+#define __CTX_TRANSFORM
+
+
+static inline void
+_ctx_matrix_apply_transform_only_x (const CtxMatrix *m, float *x, float y_in)
+{
+  //float x_in = *x;
+  //*x = ( (x_in * m->m[0][0]) + (y_in * m->m[1][0]) + m->m[2][0]);
+  float y_res;
+  _ctx_matrix_apply_transform (m, x, &y_res);
+}
+
+void
+ctx_matrix_apply_transform (const CtxMatrix *m, float *x, float *y)
+{
+  _ctx_matrix_apply_transform (m, x, y);
+}
+
+static inline int
+determine_transform_type (const CtxMatrix *m)
+{
+  if (m->m[2][0] != 0.0f ||
+      m->m[2][1] != 0.0f ||
+      m->m[2][2] != 1.0f)
+    return 3;
+  if (m->m[0][1] != 0.0f ||
+      m->m[1][0] != 0.0f)
+    return 3;
+  if (m->m[0][2] != 0.0f ||
+      m->m[1][2] != 0.0f ||
+      m->m[0][0] != 1.0f ||
+      m->m[1][1] != 1.0f)
+    return 2;
+  return 1;
+}
+
+#define TRANSFORM_SHIFT (10)
+#define TRANSFORM_SCALE (1<<TRANSFORM_SHIFT)
+
+static inline void
+_ctx_transform_prime (CtxState *state)
+{
+   state->gstate.transform_type = 
+     determine_transform_type (&state->gstate.transform);
+
+   for (int c = 0; c < 3; c++)
+   {
+     state->gstate.prepped_transform.m[0][c] =
+             (int)(state->gstate.transform.m[0][c] * TRANSFORM_SCALE);
+     state->gstate.prepped_transform.m[1][c] =
+             (int)(state->gstate.transform.m[1][c] * TRANSFORM_SCALE);
+     state->gstate.prepped_transform.m[2][c] =
+             (int)(state->gstate.transform.m[2][c] * TRANSFORM_SCALE);
+   }
+}
+
+static inline void
+_ctx_matrix_apply_transform_perspective_fixed (const Ctx16f16Matrix *m, int x_in, int y_in,
+                int *x_out, int *y_out)
+{
+  int w  = (((x_in * m->m[2][0] +
+               y_in * m->m[2][1])>>TRANSFORM_SHIFT) +
+                     (m->m[2][2]));
+  int w_recip = w?TRANSFORM_SCALE / w:0;
+
+
+  *x_out = ((((((x_in * m->m[0][0] +
+               y_in * m->m[0][1])>>TRANSFORM_SHIFT) +
+                     (m->m[0][2])) * w_recip)>>TRANSFORM_SHIFT) * CTX_SUBDIV) >> TRANSFORM_SHIFT;
+  *y_out = ((((((x_in * m->m[1][0] +
+               y_in * m->m[1][1])>>TRANSFORM_SHIFT) +
+                     (m->m[1][2])) * w_recip)>>TRANSFORM_SHIFT) * CTX_FULL_AA) >> TRANSFORM_SHIFT;
+
+}
+
+static inline void
+_ctx_matrix_apply_transform_affine_fixed (const Ctx16f16Matrix *m, int x_in, int y_in,
+                int *x_out, int *y_out)
+{
+  *x_out = ((((x_in * m->m[0][0] +
+               y_in * m->m[0][1])>>TRANSFORM_SHIFT) +
+                     (m->m[0][2])) * CTX_SUBDIV) >>TRANSFORM_SHIFT;
+  *y_out = ((((x_in * m->m[1][0] +
+               y_in * m->m[1][1])>>TRANSFORM_SHIFT) +
+                     (m->m[1][2])) * CTX_FULL_AA) >>TRANSFORM_SHIFT;
+}
+
+static inline void
+_ctx_matrix_apply_transform_scale_translate_fixed (const Ctx16f16Matrix *m, int x_in, int y_in, int *x_out, int *y_out)
+{
+  *x_out = ((((x_in * m->m[0][0])>>TRANSFORM_SHIFT) +
+                     (m->m[0][2])) * CTX_SUBDIV) >>TRANSFORM_SHIFT;
+  *y_out = ((((y_in * m->m[1][1])>>TRANSFORM_SHIFT) +
+                     (m->m[1][2])) * CTX_FULL_AA) >>TRANSFORM_SHIFT;
+}
+
+static inline void
+_ctx_user_to_device_prepped_fixed (CtxState *state, int x, int y, int *x_out, int *y_out)
+{
+  switch (state->gstate.transform_type)
+  {
+    case 0:
+      _ctx_transform_prime (state);
+      _ctx_user_to_device_prepped_fixed (state, x, y, x_out, y_out);
+      break;
+    case 1:  // identity
+      *x_out = (x * CTX_SUBDIV) / TRANSFORM_SCALE;
+      *y_out = (y * CTX_FULL_AA) / TRANSFORM_SCALE;
+      break;
+    case 2:  // scale/translate
+      _ctx_matrix_apply_transform_scale_translate_fixed (&state->gstate.prepped_transform, x, y, x_out, y_out);
+      break;
+    case 3:  // affine
+      _ctx_matrix_apply_transform_affine_fixed (&state->gstate.prepped_transform, x, y, x_out, y_out);
+      break;
+    case 4:  // perspective
+      _ctx_matrix_apply_transform_perspective_fixed (&state->gstate.prepped_transform, x, y, x_out, y_out);
+      break;
+  }
+}
+
+static inline void
+_ctx_user_to_device_prepped (CtxState *state, float x, float y, int *x_out, int *y_out)
+{
+  int x_in = (int)(x * TRANSFORM_SCALE);
+  int y_in = (int)(y * TRANSFORM_SCALE);
+  _ctx_user_to_device_prepped_fixed (state, x_in, y_in, x_out, y_out);
+}
+
+static inline void
+_ctx_user_to_device (CtxState *state, float *x, float *y)
+{
+  _ctx_matrix_apply_transform (&state->gstate.transform, x, y);
+}
+
+static inline void
+_ctx_matrix_apply_transform_distance (const CtxMatrix *m, float *x, float *y)
+{
+  float x0 = 0.0f;
+  float y0 = 0.0f;
+  float x1 = *x;
+  float y1 = *y;
+
+  _ctx_matrix_apply_transform (m, &x0, &y0);
+  _ctx_matrix_apply_transform (m, &x1, &y1);
+  *x = (x1-x0);
+  *y = (y1-y0);
+}
+
+void
+ctx_matrix_apply_transform_distance (const CtxMatrix *m, float *x, float *y)
+{
+  _ctx_matrix_apply_transform_distance (m, x, y);
+}
+
+static void
+_ctx_user_to_device_distance (CtxState *state, float *x, float *y)
+{
+  ctx_matrix_apply_transform_distance (&state->gstate.transform, x, y);
+}
+
+void ctx_user_to_device          (Ctx *ctx, float *x, float *y)
+{
+  _ctx_user_to_device (&ctx->state, x, y);
+}
+void ctx_user_to_device_distance (Ctx *ctx, float *x, float *y)
+{
+  _ctx_user_to_device_distance (&ctx->state, x, y);
+}
+
+static inline void
+_ctx_device_to_user (CtxState *state, float *x, float *y)
+{
+  CtxMatrix m = state->gstate.transform;
+  ctx_matrix_invert (&m);
+  _ctx_matrix_apply_transform (&m, x, y);
+}
+
+static void
+_ctx_device_to_user_distance (CtxState *state, float *x, float *y)
+{
+  CtxMatrix m = state->gstate.transform;
+  ctx_matrix_invert (&m);
+  _ctx_matrix_apply_transform (&m, x, y);
+  *x -= m.m[2][0];
+  *y -= m.m[2][1];
+}
+
+void ctx_device_to_user          (Ctx *ctx, float *x, float *y)
+{
+  _ctx_device_to_user (&ctx->state, x, y);
+}
+
+void ctx_device_to_user_distance (Ctx *ctx, float *x, float *y)
+{
+  _ctx_device_to_user_distance (&ctx->state, x, y);
+}
+
+
+static void
+ctx_matrix_set (CtxMatrix *matrix, float a, float b, float c, float d, float e, float f, float g, float h, float i)
+{
+  matrix->m[0][0] = a;
+  matrix->m[0][1] = b;
+  matrix->m[0][2] = c;
+  matrix->m[1][0] = d;
+  matrix->m[1][1] = e;
+  matrix->m[1][2] = f;
+  matrix->m[2][0] = g;
+  matrix->m[2][1] = h;
+  matrix->m[2][2] = i;
+}
+
+
+void
+ctx_matrix_identity (CtxMatrix *matrix)
+{
+  _ctx_matrix_identity (matrix);
+}
+
+void
+ctx_matrix_multiply (CtxMatrix       *result,
+                     const CtxMatrix *t,
+                     const CtxMatrix *s)
+{
+  _ctx_matrix_multiply (result, t, s);
+}
+
+void
+ctx_matrix_translate (CtxMatrix *matrix, float x, float y)
+{
+  CtxMatrix transform;
+  transform.m[0][0] = 1.0f;
+  transform.m[0][1] = 0.0f;
+  transform.m[0][2] = x;
+  transform.m[1][0] = 0.0f;
+  transform.m[1][1] = 1.0f;
+  transform.m[1][2] = y;
+  transform.m[2][0] = 0.0f;
+  transform.m[2][1] = 0.0f;
+  transform.m[2][2] = 1.0f;
+  _ctx_matrix_multiply (matrix, matrix, &transform);
+}
+
+void
+ctx_matrix_scale (CtxMatrix *matrix, float x, float y)
+{
+  CtxMatrix transform;
+  transform.m[0][0] = x;
+  transform.m[0][1] = 0.0f;
+  transform.m[0][2] = 0.0f;
+  transform.m[1][0] = 0.0f;
+  transform.m[1][1] = y;
+  transform.m[1][2] = 0.0f;
+  transform.m[2][0] = 0.0f;
+  transform.m[2][1] = 0.0f;
+  transform.m[2][2] = 1.0;
+  _ctx_matrix_multiply (matrix, matrix, &transform);
+}
+
+
+void
+ctx_matrix_rotate (CtxMatrix *matrix, float angle)
+{
+  CtxMatrix transform;
+  float val_sin = ctx_sinf (-angle);
+  float val_cos = ctx_cosf (-angle);
+  transform.m[0][0] = val_cos;
+  transform.m[0][1] = val_sin;
+  transform.m[0][2] = 0;
+  transform.m[1][0] = -val_sin;
+  transform.m[1][1] = val_cos;
+  transform.m[1][2] = 0;
+  transform.m[2][0] = 0.0f;
+  transform.m[2][1] = 0.0f;
+  transform.m[2][2] = 1.0f;
+  _ctx_matrix_multiply (matrix, matrix, &transform);
+}
+
+#if 0
+static void
+ctx_matrix_skew_x (CtxMatrix *matrix, float angle)
+{
+  CtxMatrix transform;
+  float val_tan = ctx_tanf (angle);
+  transform.m[0][0] =    1.0f;
+  transform.m[0][1] = 0.0f;
+  transform.m[1][0] = val_tan;
+  transform.m[1][1] = 1.0f;
+  transform.m[2][0] =    0.0f;
+  transform.m[2][1] = 0.0f;
+  _ctx_matrix_multiply (matrix, &transform, matrix);
+}
+
+static void
+ctx_matrix_skew_y (CtxMatrix *matrix, float angle)
+{
+  CtxMatrix transform;
+  float val_tan = ctx_tanf (angle);
+  transform.m[0][0] =    1.0f;
+  transform.m[0][1] = val_tan;
+  transform.m[1][0] =    0.0f;
+  transform.m[1][1] = 1.0f;
+  transform.m[2][0] =    0.0f;
+  transform.m[2][1] = 0.0f;
+  _ctx_matrix_multiply (matrix, &transform, matrix);
+}
+#endif
+
+
+void
+ctx_identity (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_IDENTITY);
+}
+
+
+
+void
+ctx_apply_transform (Ctx *ctx, float a, float b,
+                     float c, float d, 
+                     float e, float f, float g, float h, float i)
+{
+  CtxEntry command[5]=
+  {
+    ctx_f (CTX_APPLY_TRANSFORM, a, b),
+    ctx_f (CTX_CONT,            c, d),
+    ctx_f (CTX_CONT,            e, f),
+    ctx_f (CTX_CONT,            g, h),
+    ctx_f (CTX_CONT,            i, 0)
+  };
+  ctx_process (ctx, command);
+}
+
+void
+ctx_get_transform  (Ctx *ctx, float *a, float *b,
+                    float *c, float *d,
+                    float *e, float *f,
+                    float *g, float *h,
+                    float *i)
+{
+  if (a) { *a = ctx->state.gstate.transform.m[0][0]; }
+  if (b) { *b = ctx->state.gstate.transform.m[0][1]; }
+  if (c) { *c = ctx->state.gstate.transform.m[0][2]; }
+  if (d) { *d = ctx->state.gstate.transform.m[1][0]; }
+  if (e) { *e = ctx->state.gstate.transform.m[1][1]; }
+  if (f) { *f = ctx->state.gstate.transform.m[1][2]; }
+  if (g) { *g = ctx->state.gstate.transform.m[2][0]; }
+  if (h) { *h = ctx->state.gstate.transform.m[2][1]; }
+  if (i) { *i = ctx->state.gstate.transform.m[2][2]; }
+}
+
+void
+ctx_source_transform (Ctx *ctx, float a, float b,  // hscale, hskew
+                      float c, float d,  // vskew,  vscale
+                      float e, float f,
+                      float g, float h,
+                      float i)  // htran,  vtran
+{
+  CtxEntry command[5]=
+  {
+    ctx_f (CTX_SOURCE_TRANSFORM, a, b),
+    ctx_f (CTX_CONT,             c, d),
+    ctx_f (CTX_CONT,             e, f),
+    ctx_f (CTX_CONT,             g, h),
+    ctx_f (CTX_CONT,             i, 0)
+  };
+  ctx_process (ctx, command);
+}
+
+void
+ctx_source_transform_matrix (Ctx *ctx, CtxMatrix *matrix)
+{
+  ctx_source_transform (ctx,
+    matrix->m[0][0], matrix->m[0][1], matrix->m[0][2],
+    matrix->m[1][0], matrix->m[1][1], matrix->m[1][2],
+    matrix->m[2][0], matrix->m[2][1], matrix->m[2][2]
+    
+    );
+}
+
+void ctx_apply_matrix (Ctx *ctx, CtxMatrix *matrix)
+{
+  ctx_apply_transform (ctx,
+    matrix->m[0][0], matrix->m[0][1], matrix->m[0][2],
+    matrix->m[1][0], matrix->m[1][1], matrix->m[1][2],
+    matrix->m[2][0], matrix->m[2][1], matrix->m[2][2]);
+}
+
+void ctx_get_matrix (Ctx *ctx, CtxMatrix *matrix)
+{
+  *matrix = ctx->state.gstate.transform;
+}
+
+void ctx_set_matrix (Ctx *ctx, CtxMatrix *matrix)
+{
+  ctx_identity (ctx);
+  ctx_apply_matrix (ctx, matrix);
+}
+
+void ctx_rotate (Ctx *ctx, float x)
+{
+  if (x == 0.0f)
+    return;
+  CTX_PROCESS_F1 (CTX_ROTATE, x);
+  if (ctx->transformation & CTX_TRANSFORMATION_SCREEN_SPACE)
+    { ctx->drawlist.count--; }
+}
+
+void ctx_scale (Ctx *ctx, float x, float y)
+{
+  if (x == 1.0f && y == 1.0f)
+    return;
+  CTX_PROCESS_F (CTX_SCALE, x, y);
+  if (ctx->transformation & CTX_TRANSFORMATION_SCREEN_SPACE)
+    { ctx->drawlist.count--; }
+}
+
+void ctx_translate (Ctx *ctx, float x, float y)
+{
+  if (x == 0.0f && y == 0.0f)
+    return;
+  CTX_PROCESS_F (CTX_TRANSLATE, x, y);
+  if (ctx->transformation & CTX_TRANSFORMATION_SCREEN_SPACE)
+    { ctx->drawlist.count--; }
+}
+
+static inline float
+ctx_matrix_determinant (const CtxMatrix *m)
+{
+  float det = m->m[0][0] * (m->m[1][1] * m->m[2][2] -
+                            m->m[1][2] * m->m[2][1])
+              - m->m[0][1] * (m->m[1][0] * m->m[2][2] -
+                              m->m [1][2] * m->m [2][0])
+              + m->m[0][2] * (m->m[1][0] * m->m[2][1] -
+                              m->m[1][1] * m->m[2][0]);
+  return det;
+}
+
+void
+ctx_matrix_invert (CtxMatrix *m)
+{
+  CtxMatrix t = *m;
+  float c = 1.0f / ctx_matrix_determinant (m);
+
+  m->m [0][0] = (t.m [1][1] * t.m [2][2] -
+                   t.m [1][2] * t.m [2][1]) * c;
+  m->m [1][0] = (t.m [1][2] * t.m [2][0] -
+                   t.m [1][0] * t.m [2][2]) * c;
+  m->m [2][0] = (t.m [1][0] * t.m [2][1] -
+                   t.m [1][1] * t.m [2][0]) * c;
+
+  m->m [0][1] = (t.m [0][2] * t.m [2][1] -
+                   t.m [0][1] * t.m [2][2]) * c;
+  m->m [1][1] = (t.m [0][0] * t.m [2][2] -
+                   t.m [0][2] * t.m [2][0]) * c;
+  m->m [2][1] = (t.m [0][1] * t.m [2][0] -
+                   t.m [0][0] * t.m [2][1]) * c;
+
+  m->m [0][2] = (t.m [0][1] * t.m [1][2] -
+                   t.m [0][2] * t.m [1][1]) * c;
+  m->m [1][2] = (t.m [0][2] * t.m [1][0] -
+                   t.m [0][0] * t.m [1][2]) * c;
+  m->m [2][2] = (t.m [0][0] * t.m [1][1] -
+                   t.m [0][1] * t.m [1][0]) * c;
+}
+
+#endif
+#if CTX_AUDIO
+
+//#include <string.h>
+//#include "ctx-internal.h"
+//#include "mmm.h"
+
+#if !__COSMOPOLITAN__
+
+#include <pthread.h>
+#if CTX_ALSA
+#include <alsa/asoundlib.h>
+#endif
+
+
+
+//#include <alloca.h>
+
+#endif
+
+#define DESIRED_PERIOD_SIZE 1000
+
+int ctx_pcm_bytes_per_frame (CtxPCM format)
+{
+  switch (format)
+  {
+    case CTX_F32:  return 4;
+    case CTX_F32S: return 8;
+    case CTX_S16:  return 2;
+    case CTX_S16S: return 4;
+    default: return 1;
+  }
+}
+
+static float    ctx_host_freq     = 48000;
+static CtxPCM   ctx_host_format   = CTX_S16S;
+static float    client_freq   = 48000;
+static CtxPCM   ctx_client_format = CTX_S16S;
+static int      ctx_pcm_queued    = 0;
+static int      ctx_pcm_cur_left  = 0;
+static CtxList *ctx_pcm_list;                 /* data is a blob a 32bit uint first, followed by pcm-data */
+
+
+//static long int ctx_pcm_queued_ticks = 0;  /*  the number of ticks into the future
+  //                                      *  we've queued audio for
+                                       
+
+
+int
+ctx_pcm_channels (CtxPCM format)
+{
+  switch (format)
+  {
+    case CTX_S16:
+    case CTX_F32:
+      return 1;
+    case CTX_S16S:
+    case CTX_F32S:
+      return 2;
+  }
+  return 0;
+}
+
+/* todo: only start audio thread on first write - enabling dynamic choice
+ * of sample-rate? or is it better to keep to opening 48000 as a standard
+ * and do better internal resampling for others?
+ */
+
+#if CTX_ALSA
+static snd_pcm_t *alsa_open (char *dev, int rate, int channels)
+{
+   snd_pcm_hw_params_t *hwp;
+   snd_pcm_sw_params_t *swp;
+   snd_pcm_t *h;
+   int r;
+   int dir;
+   snd_pcm_uframes_t period_size_min;
+   snd_pcm_uframes_t period_size_max;
+   snd_pcm_uframes_t period_size;
+   snd_pcm_uframes_t buffer_size;
+
+   if ((r = snd_pcm_open(&h, dev, SND_PCM_STREAM_PLAYBACK, 0) < 0))
+           return NULL;
+
+   hwp = alloca(snd_pcm_hw_params_sizeof());
+   memset(hwp, 0, snd_pcm_hw_params_sizeof());
+   snd_pcm_hw_params_any(h, hwp);
+
+   snd_pcm_hw_params_set_access(h, hwp, SND_PCM_ACCESS_RW_INTERLEAVED);
+   snd_pcm_hw_params_set_format(h, hwp, SND_PCM_FORMAT_S16_LE);
+   snd_pcm_hw_params_set_rate(h, hwp, rate, 0);
+   snd_pcm_hw_params_set_channels(h, hwp, channels);
+   dir = 0;
+   snd_pcm_hw_params_get_period_size_min(hwp, &period_size_min, &dir);
+   dir = 0;
+   snd_pcm_hw_params_get_period_size_max(hwp, &period_size_max, &dir);
+
+   period_size = DESIRED_PERIOD_SIZE;
+
+   dir = 0;
+   r = snd_pcm_hw_params_set_period_size_near(h, hwp, &period_size, &dir);
+   r = snd_pcm_hw_params_get_period_size(hwp, &period_size, &dir);
+   buffer_size = period_size * 4;
+   r = snd_pcm_hw_params_set_buffer_size_near(h, hwp, &buffer_size);
+   r = snd_pcm_hw_params(h, hwp);
+   swp = alloca(snd_pcm_sw_params_sizeof());
+   memset(hwp, 0, snd_pcm_sw_params_sizeof());
+   snd_pcm_sw_params_current(h, swp);
+   r = snd_pcm_sw_params_set_avail_min(h, swp, period_size);
+   snd_pcm_sw_params_set_start_threshold(h, swp, 0);
+   r = snd_pcm_sw_params(h, swp);
+   r = snd_pcm_prepare(h);
+
+   return h;
+}
+
+static  snd_pcm_t *h = NULL;
+static void *ctx_alsa_audio_start(Ctx *ctx)
+{
+//  Lyd *lyd = aux;
+  int c;
+
+  /* The audio handler is implemented as a mixer that adds data on top
+   * of 0s, XXX: it should be ensured that minimal work is there is
+   * no data available.
+   */
+  for (;;)
+  {
+    int client_channels = ctx_pcm_channels (ctx_client_format);
+    int is_float = 0;
+    int16_t data[81920*8]={0,};
+
+    if (ctx_client_format == CTX_F32 ||
+        ctx_client_format == CTX_F32S)
+      is_float = 1;
+
+    c = snd_pcm_wait(h, 1000);
+
+    if (c >= 0)
+       c = snd_pcm_avail_update(h);
+
+    if (c > 1000) c = 1000; // should use max mmm buffer sizes
+
+    if (c == -EPIPE)
+      snd_pcm_prepare(h);
+
+    if (c > 0)
+    {
+      int i;
+      for (i = 0; i < c && ctx_pcm_cur_left; i ++)
+      {
+        if (ctx_pcm_list && ctx_pcm_cur_left)  //  XXX  this line can be removed
+        {
+          uint32_t *packet_sizep = (ctx_pcm_list->data);
+          uint32_t packet_size = *packet_sizep;
+          uint16_t left = 0, right = 0;
+
+          if (is_float)
+          {
+            float *packet = (ctx_pcm_list->data);
+            packet += 4;
+            packet += (packet_size - ctx_pcm_cur_left) * client_channels;
+            left = right = packet[0] * (1<<15);
+            if (client_channels > 1)
+              right = packet[0] * (1<<15);
+          }
+          else // S16
+          {
+            uint16_t *packet = (ctx_pcm_list->data);
+            packet += 8;
+            packet += (packet_size - ctx_pcm_cur_left) * client_channels;
+
+            left = right = packet[0];
+            if (client_channels > 1)
+              right = packet[1];
+          }
+          data[i * 2 + 0] = left;
+          data[i * 2 + 1] = right;
+
+          ctx_pcm_cur_left--;
+          ctx_pcm_queued --;
+          if (ctx_pcm_cur_left == 0)
+          {
+            void *old = ctx_pcm_list->data;
+            ctx_list_remove (&ctx_pcm_list, old);
+            ctx_free (old);
+            ctx_pcm_cur_left = 0;
+            if (ctx_pcm_list)
+            {
+              uint32_t *packet_sizep = (ctx_pcm_list->data);
+              uint32_t packet_size = *packet_sizep;
+              ctx_pcm_cur_left = packet_size;
+            }
+          }
+        }
+      }
+
+    c = snd_pcm_writei(h, data, c);
+    if (c < 0)
+      c = snd_pcm_recover (h, c, 0);
+     }else{
+      if (getenv("LYD_FATAL_UNDERRUNS"))
+        {
+          printf ("dying XXxx need to add API for this debug\n");
+          //printf ("%i", lyd->active);
+          exit(0);
+        }
+      fprintf (stderr, "ctx alsa underun\n");
+      //exit(0);
+    }
+  }
+}
+#endif
+
+static char MuLawCompressTable[256] =
+{
+   0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
+   4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+   5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+   5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
+};
+
+static unsigned char LinearToMuLawSample(int16_t sample)
+{
+  const int cBias = 0x84;
+  const int cClip = 32635;
+  int sign = (sample >> 8) & 0x80;
+
+  if (sign)
+    sample = (int16_t)-sample;
+
+  if (sample > cClip)
+    sample = cClip;
+
+  sample = (int16_t)(sample + cBias);
+
+  int exponent = (int)MuLawCompressTable[(sample>>7) & 0xFF];
+  int mantissa = (sample >> (exponent+3)) & 0x0F;
+
+  int compressedByte = ~ (sign | (exponent << 4) | mantissa);
+
+  return (unsigned char)compressedByte;
+}
+
+void ctx_ctx_pcm (Ctx *ctx)
+{
+    int client_channels = ctx_pcm_channels (ctx_client_format);
+    int is_float = 0;
+    uint8_t data[81920*8]={0,};
+    int c;
+
+    if (ctx_client_format == CTX_F32 ||
+        ctx_client_format == CTX_F32S)
+      is_float = 1;
+
+    c = 2000;
+
+    if (c > 0 && ctx_pcm_list)
+    {
+      int i;
+      for (i = 0; i < c && ctx_pcm_cur_left; i ++)
+      {
+        if (ctx_pcm_list && ctx_pcm_cur_left)
+        {
+          uint32_t *packet_sizep = (ctx_pcm_list->data);
+          uint32_t packet_size = *packet_sizep;
+          int left = 0, right = 0;
+
+          if (is_float)
+          {
+            float *packet = (ctx_pcm_list->data);
+            packet += 4;
+            packet += (packet_size - ctx_pcm_cur_left) * client_channels;
+            left = right = packet[0] * (1<<15);
+            if (client_channels > 1)
+              right = packet[1] * (1<<15);
+          }
+          else // S16
+          {
+            uint16_t *packet = (ctx_pcm_list->data);
+            packet += 8;
+            packet += (packet_size - ctx_pcm_cur_left) * client_channels;
+
+            left = right = packet[0];
+            if (client_channels > 1)
+              right = packet[1];
+          }
+          data[i] = LinearToMuLawSample((left+right)/2);
+
+          ctx_pcm_cur_left--;
+          ctx_pcm_queued --;
+          if (ctx_pcm_cur_left == 0)
+          {
+            void *old = ctx_pcm_list->data;
+            ctx_list_remove (&ctx_pcm_list, old);
+            ctx_free (old);
+            ctx_pcm_cur_left = 0;
+            if (ctx_pcm_list)
+            {
+              uint32_t *packet_sizep = (ctx_pcm_list->data);
+              uint32_t packet_size = *packet_sizep;
+              ctx_pcm_cur_left = packet_size;
+            }
+          }
+        }
+      }
+
+    char encoded[81920*8]="";
+
+    int encoded_len = ctx_a85enc (data, encoded, i);
+    fprintf (stdout, "\033_Af=%i;", i);
+    fwrite (encoded, 1, encoded_len, stdout);
+    fwrite ("\e\\", 1, 2, stdout);
+    fflush (stdout);
+    }
+}
+
+int ctx_pcm_init (Ctx *ctx)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return 0;
+  }
+  else
+#endif
+  if (ctx_backend_type (ctx) == CTX_BACKEND_CTX)
+  {
+     ctx_host_freq = 8000;
+     ctx_host_format = CTX_S16;
+#if 0
+     pthread_t tid;
+     pthread_create(&tid, NULL, (void*)ctx_audio_start, ctx);
+#endif
+  }
+  else
+  {
+#if CTX_ALSA
+     pthread_t tid;
+     h = alsa_open("default", ctx_host_freq, ctx_pcm_channels (ctx_host_format));
+  if (!h) {
+    fprintf(stderr, "ctx unable to open ALSA device (%d channels, %f Hz), dying\n",
+            ctx_pcm_channels (ctx_host_format), ctx_host_freq);
+    return -1;
+  }
+  pthread_create(&tid, NULL, (void*)ctx_alsa_audio_start, ctx);
+#endif
+  }
+  return 0;
+}
+
+int ctx_pcm_queue (Ctx *ctx, const int8_t *data, int frames)
+{
+  static int inited = 0;
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return mmm_pcm_queue (ctx->backend_data, data, frames);
+  }
+  else
+#endif
+  {
+    if (!inited)
+    {
+      ctx_pcm_init (ctx);
+      inited = 1;
+    }
+    float factor = client_freq * 1.0 / ctx_host_freq;
+    int   scaled_frames = frames / factor;
+    int   bpf = ctx_pcm_bytes_per_frame (ctx_client_format);
+
+    uint8_t *packet = ctx_malloc (scaled_frames * ctx_pcm_bytes_per_frame (ctx_client_format) + 16);
+    *((uint32_t *)packet) = scaled_frames;
+
+    if (factor > 0.999 && factor < 1.0001)
+    {
+       memcpy (packet + 16, data, frames * bpf);
+    }
+    else
+    {
+      /* a crude nearest / sample-and hold resampler */
+      int i;
+      for (i = 0; i < scaled_frames; i++)
+      {
+        int source_frame = i * factor;
+        memcpy (packet + 16 + bpf * i, data + source_frame * bpf, bpf);
+      }
+    }
+    if (ctx_pcm_list == NULL)     // otherwise it is another frame at front
+      ctx_pcm_cur_left = scaled_frames;  // and current cur_left is valid
+
+    ctx_list_append (&ctx_pcm_list, packet);
+    ctx_pcm_queued += scaled_frames;
+
+    return frames;
+  }
+  return 0;
+}
+
+static int ctx_pcm_get_queued_frames (Ctx *ctx)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return mmm_pcm_get_queued_frames (ctx->backend_data);
+  }
+#endif
+  return ctx_pcm_queued;
+}
+
+int ctx_pcm_get_queued (Ctx *ctx)
+{
+  return ctx_pcm_get_queued_frames (ctx);
+}
+
+float ctx_pcm_get_queued_length (Ctx *ctx)
+{
+  return 1.0 * ctx_pcm_get_queued_frames (ctx) / ctx_host_freq;
+}
+
+int ctx_pcm_get_frame_chunk (Ctx *ctx)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return mmm_pcm_get_frame_chunk (ctx->backend_data);
+  }
+#endif
+  if (ctx_backend_type (ctx) == CTX_BACKEND_CTX)
+  {
+    // 300 stuttering
+    // 350 nothing
+    // 380 slight buzz
+    // 390  buzzing
+    // 400 ok - but sometimes falling out
+    // 410 buzzing
+    // 420 ok - but odd latency
+    // 450 buzzing
+
+    if (ctx_pcm_get_queued_frames (ctx) > 400)
+      return 0;
+    else
+      return 400 - ctx_pcm_get_queued_frames (ctx);
+
+  }
+
+  if (ctx_pcm_get_queued_frames (ctx) > 1000)
+    return 0;
+  else
+    return 1000 - ctx_pcm_get_queued_frames (ctx);
+}
+
+void ctx_pcm_set_sample_rate (Ctx *ctx, int sample_rate)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    mmm_pcm_set_sample_rate (ctx->backend_data, sample_rate);
+  }
+  else
+#endif
+    client_freq = sample_rate;
+}
+
+void ctx_pcm_set_format (Ctx *ctx, CtxPCM format)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    mmm_pcm_set_format (ctx->backend_data, format);
+  }
+  else
+#endif
+    ctx_client_format = format;
+}
+
+CtxPCM ctx_pcm_get_format (Ctx *ctx)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return mmm_pcm_get_format (ctx->backend_data);
+  }
+#endif
+  return ctx_client_format;
+}
+
+int ctx_pcm_get_sample_rate (Ctx *ctx)
+{
+#if 0
+  if (!strcmp (ctx->backend->name, "mmm") ||
+      !strcmp (ctx->backend->name, "mmm-client"))
+  {
+    return mmm_pcm_get_sample_rate (ctx->backend_data);
+  }
+#endif
+  return client_freq;
+}
+
+#else
+
+void ctx_pcm_set_format (Ctx *ctx, CtxPCM format) { }
+void ctx_pcm_set_sample_rate (Ctx *ctx, int sample_rate) { }
+int ctx_pcm_get_sample_rate (Ctx *ctx) { return 48000; }
+CtxPCM ctx_pcm_get_format (Ctx *ctx) { return CTX_S16S; }
+int ctx_pcm_queue (Ctx *ctx, const int8_t *data, int frames) { return frames; }
+float ctx_pcm_get_queued_length (Ctx *ctx) { return 0.0; }
+
+#endif
+ /* Copyright (C) 2020 Øyvind Kolås <pippin@gimp.org>
+ */
+
+#if CTX_FORMATTER
+
+/* returns the maximum string length including terminating \0 */
+int ctx_a85enc_len (int input_length)
+{
+  return (input_length / 4 + 1) * 5;
+}
+
+int ctx_a85enc (const void *srcp, char *dst, int count)
+{
+  const uint8_t *src = (uint8_t*)srcp;
+  int out_len = 0;
+
+  int padding = 4-(count % 4);
+  if (padding == 4) padding = 0;
+
+  for (int i = 0; i < (count+3)/4; i ++)
+  {
+    uint32_t input = 0;
+    for (int j = 0; j < 4; j++)
+    {
+      input = (input << 8);
+      if (i*4+j<=count)
+        input += src[i*4+j];
+    }
+
+    int divisor = 85 * 85 * 85 * 85;
+#if 0
+    if (input == 0)
+    {
+        dst[out_len++] = 'z';
+    }
+    /* todo: encode 4 spaces as 'y' */
+    else
+#endif
+    {
+      for (int j = 0; j < 5; j++)
+      {
+        dst[out_len++] = ((input / divisor) % 85) + '!';
+        divisor /= 85;
+      }
+    }
+  }
+  out_len -= padding;
+  dst[out_len]=0;
+  return out_len;
+}
+#endif
+
+#if CTX_PARSER
+
+int ctx_a85dec (const char *src, char *dst, int count)
+{
+  int out_len = 0;
+  uint32_t val = 0;
+  int k = 0;
+  int i = 0;
+  int p = 0;
+  for (i = 0; i < count; i ++)
+  {
+    p = src[i];
+    val *= 85;
+    if (CTX_UNLIKELY(p == '~'))
+    {
+      break;
+    }
+#if 0
+    else if (p == 'z')
+    {
+      for (int j = 0; j < 4; j++)
+        dst[out_len++] = 0;
+      k = 0;
+    }
+    else if (p == 'y') /* lets support this extension */
+    {
+      for (int j = 0; j < 4; j++)
+        dst[out_len++] = 32;
+      k = 0;
+    }
+#endif
+    else if (CTX_LIKELY(p >= '!' && p <= 'u'))
+    {
+      val += p-'!';
+      if (CTX_UNLIKELY (k % 5 == 4))
+      {
+         for (int j = 0; j < 4; j++)
+         {
+           dst[out_len++] = (val & ((unsigned)0xff << 24)) >> 24;
+           val <<= 8;
+         }
+         val = 0;
+      }
+      k++;
+    }
+    // we treat all other chars as whitespace
+  }
+  if (CTX_LIKELY (p != '~'))
+  { 
+    val *= 85;
+  }
+  k = k % 5;
+  if (k)
+  {
+    val += 84;
+    for (int j = k; j < 4; j++)
+    {
+      val *= 85;
+      val += 84;
+    }
+
+    for (int j = 0; j < k-1; j++)
+    {
+      dst[out_len++] = (val & ((unsigned)0xff << 24)) >> 24;
+      val <<= 8;
+    }
+    val = 0;
+  }
+  dst[out_len] = 0;
+  return out_len;
+}
+
+#if 1
+int ctx_a85len (const char *src, int count)
+{
+  int out_len = 0;
+  int k = 0;
+  for (int i = 0; i < count; i ++)
+  {
+    if (src[i] == '~')
+      break;
+    else if (src[i] == 'z')
+    {
+      for (int j = 0; j < 4; j++)
+        out_len++;
+      k = 0;
+    }
+    else if (src[i] >= '!' && src[i] <= 'u')
+    {
+      if (k % 5 == 4)
+        out_len += 4;
+      k++;
+    }
+    // we treat all other chars as whitespace
+  }
+  k = k % 5;
+  if (k)
+    out_len += k-1;
+  return out_len;
+}
+#endif
+
+#endif
+
+#if CTX_IMPLEMENTATION
+
+#define SHA1_IMPLEMENTATION
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
+ *
+ * The plain ANSIC sha1 functionality has been extracted from libtomcrypt,
+ * and is included directly in the sources. /Øyvind K. - since libtomcrypt
+ * is public domain the adaptations done here to make the sha1 self contained
+ * also is public domain.
+ */
+#ifndef __SHA1_H
+#define __SHA1_H
+#if !__COSMOPOLITAN__
+#include <inttypes.h>
+#endif
+
+
+int ctx_sha1_init(CtxSHA1 * sha1);
+CtxSHA1 *ctx_sha1_new (void)
+{
+  CtxSHA1 *state = (CtxSHA1*)ctx_calloc (sizeof (CtxSHA1), 1);
+  ctx_sha1_init (state);
+  return state;
+}
+void ctx_sha1_free (CtxSHA1 *sha1)
+{
+  ctx_free (sha1);
+}
+
+#if 0
+          CtxSHA1 sha1;
+          ctx_sha1_init (&sha1);
+          ctx_sha1_process(&sha1, (unsigned char*)&shape_rect, sizeof (CtxIntRectangle));
+          ctx_sha1_done(&sha1, (unsigned char*)ctx_sha1_hash);
+#endif
+
+#ifdef SHA1_FF0
+#undef SHA1_FF0
+#endif
+#ifdef SHA1_FF1
+#undef SHA1_FF1
+#endif
+
+#ifdef SHA1_IMPLEMENTATION
+#if !__COSMOPOLITAN__
+#include <stdlib.h>
+#include <string.h>
+#endif
+
+#define STORE64H(x,                                                             y)                                                                     \
+   { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned                char)(((x)>>48)&255);     \
+     (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned                char)(((x)>>32)&255);     \
+     (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned                char)(((x)>>16)&255);     \
+     (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); }
+
+#define STORE32H(x,                                                             y)                                                                     \
+     { (y)[0] = (unsigned char)(((x)>>24)&255); (y)[1] = (unsigned              char)(((x)>>16)&255);   \
+       (y)[2] = (unsigned char)(((x)>>8)&255); (y)[3] = (unsigned               char)((x)&255); }
+
+#define LOAD32H(x, y)                            \
+     { x = ((unsigned long)((y)[0] & 255)<<24) | \
+           ((unsigned long)((y)[1] & 255)<<16) | \
+           ((unsigned long)((y)[2] & 255)<<8)  | \
+           ((unsigned long)((y)[3] & 255)); }
+
+/* rotates the hard way */
+#define ROL(x, y)  ((((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
+#define ROLc(x, y) ROL(x,y)
+
+#define CRYPT_OK     0
+#define CRYPT_ERROR  1
+#define CRYPT_NOP    2
+
+#ifndef MAX
+   #define MAX(x, y) ( ((x)>(y))?(x):(y) )
+#endif
+#ifndef MIN
+   #define MIN(x, y) ( ((x)<(y))?(x):(y) )
+#endif
+
+/* a simple macro for making hash "process" functions */
+#define HASH_PROCESS(func_name, compress_name, state_var, block_size)               \
+int func_name (CtxSHA1 *sha1, const unsigned char *in, unsigned long inlen)      \
+{                                                                                   \
+    unsigned long n;                                                                \
+    int           err;                                                              \
+    assert (sha1 != NULL);                                                          \
+    assert (in != NULL);                                                            \
+    if (sha1->curlen > sizeof(sha1->buf)) {                                         \
+       return -1;                                                                   \
+    }                                                                               \
+    while (inlen > 0) {                                                             \
+        if (sha1->curlen == 0 && inlen >= block_size) {                             \
+           if ((err = compress_name (sha1, (unsigned char *)in)) != CRYPT_OK) {     \
+              return err;                                                           \
+           }                                                                        \
+           sha1->length += block_size * 8;                                          \
+           in             += block_size;                                            \
+           inlen          -= block_size;                                            \
+        } else {                                                                    \
+           n = MIN(inlen, (block_size - sha1->curlen));                             \
+           memcpy(sha1->buf + sha1->curlen, in, (size_t)n);                         \
+           sha1->curlen += n;                                                       \
+           in             += n;                                                     \
+           inlen          -= n;                                                     \
+           if (sha1->curlen == block_size) {                                        \
+              if ((err = compress_name (sha1, sha1->buf)) != CRYPT_OK) {            \
+                 return err;                                                        \
+              }                                                                     \
+              sha1->length += 8*block_size;                                         \
+              sha1->curlen = 0;                                                     \
+           }                                                                        \
+       }                                                                            \
+    }                                                                               \
+    return CRYPT_OK;                                                                \
+}
+
+/**********************/
+
+#define F0(x,y,z)  (z ^ (x & (y ^ z)))
+#define F1(x,y,z)  (x ^ y ^ z)
+#define F2(x,y,z)  ((x & y) | (z & (x | y)))
+#define F3(x,y,z)  (x ^ y ^ z)
+
+static int  ctx_sha1_compress(CtxSHA1 *sha1, unsigned char *buf)
+{
+    uint32_t a,b,c,d,e,W[80],i;
+
+    /* copy the state into 512-bits into W[0..15] */
+    for (i = 0; i < 16; i++) {
+        LOAD32H(W[i], buf + (4*i));
+    }
+
+    /* copy state */
+    a = sha1->state[0];
+    b = sha1->state[1];
+    c = sha1->state[2];
+    d = sha1->state[3];
+    e = sha1->state[4];
+
+    /* expand it */
+    for (i = 16; i < 80; i++) {
+        W[i] = ROL(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); 
+    }
+
+    /* compress */
+    /* round one */
+    #define SHA1_FF0(a,b,c,d,e,i) e = (ROLc(a, 5) + F0(b,c,d) + e + W[i] + 0x5a827999UL); b = ROLc(b, 30);
+    #define SHA1_FF1(a,b,c,d,e,i) e = (ROLc(a, 5) + F1(b,c,d) + e + W[i] + 0x6ed9eba1UL); b = ROLc(b, 30);
+    #define SHA1_FF2(a,b,c,d,e,i) e = (ROLc(a, 5) + F2(b,c,d) + e + W[i] + 0x8f1bbcdcUL); b = ROLc(b, 30);
+    #define SHA1_FF3(a,b,c,d,e,i) e = (ROLc(a, 5) + F3(b,c,d) + e + W[i] + 0xca62c1d6UL); b = ROLc(b, 30);
+ 
+    for (i = 0; i < 20; ) {
+       SHA1_FF0(a,b,c,d,e,i++);
+       SHA1_FF0(e,a,b,c,d,i++);
+       SHA1_FF0(d,e,a,b,c,i++);
+       SHA1_FF0(c,d,e,a,b,i++);
+       SHA1_FF0(b,c,d,e,a,i++);
+    }
+
+    /* round two */
+    for (; i < 40; )  { 
+       SHA1_FF1(a,b,c,d,e,i++);
+       SHA1_FF1(e,a,b,c,d,i++);
+       SHA1_FF1(d,e,a,b,c,i++);
+       SHA1_FF1(c,d,e,a,b,i++);
+       SHA1_FF1(b,c,d,e,a,i++);
+    }
+
+    /* round three */
+    for (; i < 60; )  { 
+       SHA1_FF2(a,b,c,d,e,i++);
+       SHA1_FF2(e,a,b,c,d,i++);
+       SHA1_FF2(d,e,a,b,c,i++);
+       SHA1_FF2(c,d,e,a,b,i++);
+       SHA1_FF2(b,c,d,e,a,i++);
+    }
+
+    /* round four */
+    for (; i < 80; )  { 
+       SHA1_FF3(a,b,c,d,e,i++);
+       SHA1_FF3(e,a,b,c,d,i++);
+       SHA1_FF3(d,e,a,b,c,i++);
+       SHA1_FF3(c,d,e,a,b,i++);
+       SHA1_FF3(b,c,d,e,a,i++);
+    }
+
+    #undef SHA1_FF0
+    #undef SHA1_FF1
+    #undef SHA1_FF2
+    #undef SHA1_FF3
+
+    /* store */
+    sha1->state[0] = sha1->state[0] + a;
+    sha1->state[1] = sha1->state[1] + b;
+    sha1->state[2] = sha1->state[2] + c;
+    sha1->state[3] = sha1->state[3] + d;
+    sha1->state[4] = sha1->state[4] + e;
+
+    return CRYPT_OK;
+}
+
+/**
+   Initialize the hash state
+   @param md   The hash state you wish to initialize
+   @return CRYPT_OK if successful
+*/
+int ctx_sha1_init(CtxSHA1 * sha1)
+{
+   assert(sha1 != NULL);
+   sha1->state[0] = 0x67452301UL;
+   sha1->state[1] = 0xefcdab89UL;
+   sha1->state[2] = 0x98badcfeUL;
+   sha1->state[3] = 0x10325476UL;
+   sha1->state[4] = 0xc3d2e1f0UL;
+   sha1->curlen = 0;
+   sha1->length = 0;
+   return CRYPT_OK;
+}
+
+/**
+   Process a block of memory though the hash
+   @param md     The hash state
+   @param in     The data to hash
+   @param inlen  The length of the data (octets)
+   @return CRYPT_OK if successful
+*/
+HASH_PROCESS(ctx_sha1_process, ctx_sha1_compress, sha1, 64)
+
+/**
+   Terminate the hash to get the digest
+   @param md  The hash state
+   @param out [out] The destination of the hash (20 bytes)
+   @return CRYPT_OK if successful
+*/
+int ctx_sha1_done(CtxSHA1 * sha1, unsigned char *out)
+{
+    int i;
+
+    assert(sha1 != NULL);
+    assert(out != NULL);
+
+    if (sha1->curlen >= sizeof(sha1->buf)) {
+       return -1;
+    }
+
+    /* increase the length of the message */
+    sha1->length += sha1->curlen * 8;
+
+    /* append the '1' bit */
+    sha1->buf[sha1->curlen++] = (unsigned char)0x80;
+
+    /* if the length is currently above 56 bytes we append zeros
+     * then compress.  Then we can fall back to padding zeros and length
+     * encoding like normal.
+     */
+    if (sha1->curlen > 56) {
+        while (sha1->curlen < 64) {
+            sha1->buf[sha1->curlen++] = (unsigned char)0;
+        }
+        ctx_sha1_compress(sha1, sha1->buf);
+        sha1->curlen = 0;
+    }
+
+    /* pad upto 56 bytes of zeroes */
+    while (sha1->curlen < 56) {
+        sha1->buf[sha1->curlen++] = (unsigned char)0;
+    }
+
+    /* store length */
+    STORE64H(sha1->length, sha1->buf+56);
+    ctx_sha1_compress(sha1, sha1->buf);
+
+    /* copy output */
+    for (i = 0; i < 5; i++) {
+        STORE32H(sha1->state[i], out+(4*i));
+    }
+    return CRYPT_OK;
+}
+#endif
+
+#endif
+#endif
+#ifdef CTX_X86_64
+
+enum
+{
+  ARCH_X86_INTEL_FEATURE_MMX      = 1 << 23,
+  ARCH_X86_INTEL_FEATURE_XMM      = 1 << 25,
+  ARCH_X86_INTEL_FEATURE_XMM2     = 1 << 26,
+};
+
+enum
+{
+  ARCH_X86_INTEL_FEATURE_PNI      = 1 << 0,
+  ARCH_X86_INTEL_FEATURE_SSSE3    = 1 << 9,
+  ARCH_X86_INTEL_FEATURE_FMA      = 1 << 12,
+  ARCH_X86_INTEL_FEATURE_SSE4_1   = 1 << 19,
+  ARCH_X86_INTEL_FEATURE_SSE4_2   = 1 << 20,
+  ARCH_X86_INTEL_FEATURE_MOVBE    = 1 << 22,
+  ARCH_X86_INTEL_FEATURE_POPCNT   = 1 << 23,
+  ARCH_X86_INTEL_FEATURE_XSAVE    = 1 << 26,
+  ARCH_X86_INTEL_FEATURE_OSXSAVE  = 1 << 27,
+  ARCH_X86_INTEL_FEATURE_AVX      = 1 << 28,
+  ARCH_X86_INTEL_FEATURE_F16C     = 1 << 29
+};
+
+enum
+{
+  ARCH_X86_INTEL_FEATURE_BMI1     = 1 << 3,
+  ARCH_X86_INTEL_FEATURE_BMI2     = 1 << 8,
+  ARCH_X86_INTEL_FEATURE_AVX2     = 1 << 5,
+};
+
+#define cpuid(a,b,eax,ebx,ecx,edx)                     \
+  __asm__("cpuid"                                           \
+           : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \
+           : "0" (a), "2" (b)  )
+
+/* returns x86_64 microarchitecture level
+ *   0
+ */
+int
+ctx_x86_64_level (void)
+{
+  int level = 0;
+  uint32_t eax, ebx, ecx, edx;
+  cpuid (1, 0, eax, ebx, ecx, edx);
+
+  if ((edx & ARCH_X86_INTEL_FEATURE_MMX) == 0)   return level;
+  if ((edx & ARCH_X86_INTEL_FEATURE_XMM) == 0)   return level;
+  level = 1;
+
+  if ((ecx & ARCH_X86_INTEL_FEATURE_SSSE3)==0)   return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_SSE4_1)==0)  return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_SSE4_2)==0)  return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_POPCNT)==0)  return level;
+  level = 2;
+
+  if ((ecx & ARCH_X86_INTEL_FEATURE_AVX)==0)     return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_OSXSAVE)==0) return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_XSAVE)==0)   return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_FMA)==0)     return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_F16C)==0)    return level;
+  if ((ecx & ARCH_X86_INTEL_FEATURE_MOVBE)==0)   return level;
+
+  cpuid (0, 0, eax, ebx, ecx, edx);
+  if (eax >= 7)
+  {
+    cpuid (2, 0, eax, ebx, ecx, edx);
+    if ((ebx & ARCH_X86_INTEL_FEATURE_AVX2)==0)  return level;
+    if ((ebx & ARCH_X86_INTEL_FEATURE_BMI1)==0)  return level;
+    if ((ebx & ARCH_X86_INTEL_FEATURE_BMI2)==0)  return level;
+    level = 3; 
+  }
+  return level;
+}
+
+#endif
+
+#ifdef CTX_ARMV7L
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <elf.h>
+
+
+int ctx_arm_has_neon (int *armv)
+{
+  /* TODO : add or hardcode the other ways it can be on arm, where
+   *        this info comes from the system and not from running cpu
+   *        instructions
+   */
+  int has_neon = 0;
+  int arm_level = 5;
+  int fd = open ("/proc/self/auxv", O_RDONLY);
+  Elf32_auxv_t auxv;
+  if (fd >= 0)
+  {
+    while (read (fd, &auxv, sizeof (Elf32_auxv_t)) == sizeof (Elf32_auxv_t))
+    {
+      if (auxv.a_type == AT_HWCAP)
+      {
+        if (auxv.a_un.a_val & 4096)
+          has_neon = 1;
+      }
+      else if (auxv.a_type == AT_PLATFORM)
+      {
+        if (!strncmp ((const char*)auxv.a_un.a_val, "v6l", 3))
+          arm_level = 6;
+        else if (!strncmp ((const char*)auxv.a_un.a_val, "v7l", 3))
+          arm_level = 7;
+        else if (!strncmp ((const char*)auxv.a_un.a_val, "v8l", 3))
+          arm_level = 8;
+      }
+    }
+    close (fd);
+  }
+  if (armv) *armv = arm_level;
+  return has_neon;
+}
+#endif
+#include <stdio.h>
+#include <string.h>
+
+#if CTX_FORMATTER
+
+static int ctx_yenc (const char *src, char *dst, int count)
+{
+  int out_len = 0;
+  for (int i = 0; i < count; i ++)
+  {
+    int o = (src[i] + 42) % 256;
+    switch (o)
+    {
+      case 0x00: //null
+      case 0x20: //space// but better safe
+      case 0x0A: //lf   // than sorry
+      case 0x0D: //cr
+      case 0x09: //tab  // not really needed
+      case 0x10: //datalink escape (used by ctx)
+      case 0x11: //xoff
+      case 0x13: //xon
+      case 0x1b: //
+      case 0xff: //
+      case 0x3D: //=
+        dst[out_len++] = '=';
+        o = (o + 64) % 256;
+        /* FALLTHROUGH */
+      default:
+        dst[out_len++] = o;
+        break;
+    }
+  }
+  dst[out_len]=0;
+  return out_len;
+}
+#endif
+
+#if CTX_PARSER
+static int ctx_ydec (const char *tmp_src, char *dst, int count)
+{
+  const char *src = tmp_src;
+#if 0
+  if (tmp_src == dst)
+  {
+    src = ctx_malloc (count);
+    memcpy (src, tmp_src, count);
+  }
+#endif
+  int out_len = 0;
+  for (int i = 0; i < count; i ++)
+  {
+    int o = src[i];
+    switch (o)
+    {
+      case '=':
+        i++;
+        o = src[i];
+        if (o == 'y')
+        {
+          dst[out_len]=0;
+#if 0
+          if (tmp_src == dst) ctx_free (src);
+#endif
+          return out_len;
+        }
+        o = (o-42-64) % 256;
+        dst[out_len++] = o;
+        break;
+      case '\n':
+      case '\e':
+      case '\r':
+      case '\0':
+        break;
+      default:
+        o = (o-42) % 256;
+        dst[out_len++] = o;
+        break;
+    }
+  }
+  dst[out_len]=0;
+#if 0
+  if (tmp_src == dst) ctx_free (src);
+#endif
+  return out_len;
+}
+#endif
+
+#if 0
+int main (){
+  char *input="this is a testæøåÅØ'''\"!:_asdac\n\r";
+  char  encoded[256]="";
+  char  decoded[256]="";
+  int   in_len = ctx_strlen (input);
+  int   out_len;
+  int   dec_len;
+
+  printf ("input: %s\n", input);
+
+  out_len = ctx_yenc (input, encoded, in_len);
+  printf ("encoded: %s\n", encoded);
+
+  dec_len = ydec (encoded, encoded, out_len);
+
+  printf ("decoded: %s\n", encoded);
+
+  return 0;
+}
+#endif
+#ifndef __CTX_UTIL_H
+#define __CTX_UTIL_H
+
+
+static int ctx_str_is_number (const char *str)
+{
+  int got_digit = 0;
+  for (int i = 0; str[i]; i++)
+  {
+    if (str[i] >= '0' && str[i] <= '9')
+    {
+       got_digit ++;
+    }
+    else if (str[i] == '.')
+    {
+    }
+    else
+      return 0;
+  }
+  if (got_digit)
+    return 1;
+  return 0;
+}
+
+#if CTX_GET_CONTENTS
+
+typedef struct CtxFileContent
+{
+  char *path;
+  unsigned char *contents;
+  long  length;
+  int   free_data;
+} CtxFileContent;
+
+CtxList *registered_contents = NULL;
+
+void
+ctx_register_contents (const char *path,
+                       const unsigned char *contents,
+                       long length,
+                       int  free_data)
+{
+  // if (path[0] != '/') && strchr(path, ':')) 
+  //   with this check regular use is faster, but we lose
+  //   generic filesystem overrides..
+  for (CtxList *l = registered_contents; l; l = l->next)
+  {
+    CtxFileContent *c = (CtxFileContent*)l->data;
+    if (!ctx_strcmp (c->path, path))
+    {
+       if (c->free_data)
+       {
+         ctx_free (c->contents);
+       }
+       c->free_data = free_data;
+       c->contents = (unsigned char*)contents;
+       c->length = length;
+       return;
+    }
+  }
+  CtxFileContent *c = (CtxFileContent*)ctx_calloc (sizeof (CtxFileContent), 1);
+  c->free_data = free_data;
+  c->contents = (unsigned char*)contents;
+  c->length    = length;
+  ctx_list_append (&registered_contents, c);
+}
+
+void
+_ctx_file_set_contents (const char     *path,
+                        const unsigned char  *contents,
+                        long            length)
+{
+  FILE *file;
+  file = fopen (path, "wb");
+  if (!file)
+    { return; }
+  if (length < 0) length = ctx_strlen ((const char*)contents);
+  fwrite (contents, 1, length, file);
+  fclose (file);
+}
+
+static int
+___ctx_file_get_contents (const char     *path,
+                          unsigned char **contents,
+                          long           *length,
+                          long            max_len)
+{
+  FILE *file;
+  long  size;
+  long  remaining;
+  char *buffer;
+  file = fopen (path, "rb");
+  if (!file)
+    { return -1; }
+  fseek (file, 0, SEEK_END);
+  size = remaining = ftell (file);
+
+  if (size > max_len)
+  {
+     size = remaining = max_len;
+  }
+
+  if (length)
+    { *length =size; }
+  rewind (file);
+  buffer = (char*)ctx_malloc (size + 8);
+  if (!buffer)
+    {
+      fclose (file);
+      return -1;
+    }
+  remaining -= fread (buffer, 1, remaining, file);
+  if (remaining)
+    {
+      fclose (file);
+      ctx_free (buffer);
+      return -1;
+    }
+  fclose (file);
+  *contents = (unsigned char*) buffer;
+  buffer[size] = 0;
+  return 0;
+}
+
+static int
+__ctx_file_get_contents (const char     *path,
+                        unsigned char **contents,
+                        long           *length)
+{
+  return ___ctx_file_get_contents (path, contents, length, 1024*1024*1024);
+}
+
+#if !__COSMOPOLITAN__
+#include <limits.h>
+#endif
+
+
+
+
+#endif
+
+
+#endif
+
+
+static float ctx_state_get (CtxState *state, uint32_t hash)
+{
+  for (int i = state->gstate.keydb_pos-1; i>=0; i--)
+    {
+      if (state->keydb[i].key == hash)
+        { return state->keydb[i].value; }
+    }
+  return -0.0;
+}
+
+static void ctx_state_set (CtxState *state, uint32_t key, float value)
+{
+  if (key != CTX_newState)
+    {
+      if (ctx_state_get (state, key) == value)
+        { return; }
+      for (int i = state->gstate.keydb_pos-1;
+           i >= 0 && state->keydb[i].key != CTX_newState;
+           i--)
+        {
+          if (state->keydb[i].key == key)
+            {
+              state->keydb[i].value = value;
+              return;
+            }
+        }
+    }
+  if (state->gstate.keydb_pos >= CTX_MAX_KEYDB)
+    { return; }
+  state->keydb[state->gstate.keydb_pos].key = key;
+  state->keydb[state->gstate.keydb_pos].value = value;
+  state->gstate.keydb_pos++;
+}
+
+
+#define CTX_KEYDB_STRING_START (-90000.0f)
+#define CTX_KEYDB_STRING_END   (CTX_KEYDB_STRING_START + CTX_STRINGPOOL_SIZE)
+
+static int ctx_float_is_string (float val)
+{
+  return (int)(val) >= CTX_KEYDB_STRING_START && ((int)val) <= CTX_KEYDB_STRING_END;
+}
+
+static int ctx_float_to_string_index (float val)
+{
+  int idx = -1;
+  if (ctx_float_is_string (val))
+  {
+    idx = (int)(val - CTX_KEYDB_STRING_START);
+  }
+  return idx;
+}
+
+static float ctx_string_index_to_float (int index)
+{
+  return CTX_KEYDB_STRING_START + index;
+}
+
+static void *ctx_state_get_blob (CtxState *state, uint32_t key)
+{
+  float stored = ctx_state_get (state, key);
+  int idx = ctx_float_to_string_index (stored);
+  if (idx >= 0)
+  {
+     // can we know length?
+     return &state->stringpool[idx];
+  }
+
+  // format number as string?
+  return NULL;
+}
+
+static const char *ctx_state_get_string (CtxState *state, uint32_t key)
+{
+  const char *ret = (char*)ctx_state_get_blob (state, key);
+  if (ret && ret[0] == 127)
+    return NULL;
+  return ret;
+}
+
+
+static void ctx_state_set_blob (CtxState *state, uint32_t key, uint8_t *data, int len)
+{
+  int idx = state->gstate.stringpool_pos;
+
+  if (idx + len > CTX_STRINGPOOL_SIZE)
+  {
+    ctx_log ("blowing varpool size [%c..]\n", data[0]);
+    //fprintf (stderr, "blowing varpool size [%c%c%c..]\n", data[0],data[1], data[1]?data[2]:0);
+#if 0
+    for (int i = 0; i< CTX_STRINGPOOL_SIZE; i++)
+    {
+       if (i==0) fprintf (stderr, "\n%i ", i);
+       else      fprintf (stderr, "%c", state->stringpool[i]);
+    }
+#endif
+    return;
+  }
+
+  memcpy (&state->stringpool[idx], data, len);
+  state->gstate.stringpool_pos+=len;
+  state->stringpool[state->gstate.stringpool_pos++]=0;
+  ctx_state_set (state, key, ctx_string_index_to_float (idx));
+}
+
+static void ctx_state_set_string (CtxState *state, uint32_t key, const char *string)
+{
+  float old_val = ctx_state_get (state, key);
+  int   old_idx = ctx_float_to_string_index (old_val);
+
+  if (old_idx >= 0)
+  {
+    const char *old_string = ctx_state_get_string (state, key);
+    if (old_string && !ctx_strcmp (old_string, string))
+      return;
+  }
+
+  if (ctx_str_is_number (string))
+  {
+    ctx_state_set (state, key, _ctx_parse_float (string, NULL));
+    return;
+  }
+  // should do same with color
+ 
+  // XXX should special case when the string modified is at the
+  //     end of the stringpool.
+  //
+  //     for clips the behavior is howevre ideal, since
+  //     we can have more than one clip per save/restore level
+  ctx_state_set_blob (state, key, (uint8_t*)string, ctx_strlen(string));
+}
+
+static int ctx_state_get_color (CtxState *state, uint32_t key, CtxColor *color)
+{
+  CtxColor *stored = (CtxColor*)ctx_state_get_blob (state, key);
+  if (stored)
+  {
+    if (stored->magic == 127)
+    {
+      *color = *stored;
+      return 0;
+    }
+  }
+  return -1;
+}
+
+static void ctx_state_set_color (CtxState *state, uint32_t key, CtxColor *color)
+{
+  CtxColor mod_color;
+  CtxColor old_color;
+  mod_color = *color;
+  mod_color.magic = 127;
+  if (ctx_state_get_color (state, key, &old_color)==0)
+  {
+    if (!memcmp (&mod_color, &old_color, sizeof (mod_color)))
+      return;
+  }
+  ctx_state_set_blob (state, key, (uint8_t*)&mod_color, sizeof (CtxColor));
+}
+
+const char *ctx_get_string (Ctx *ctx, uint32_t hash)
+{
+  return ctx_state_get_string (&ctx->state, hash);
+}
+float ctx_get_float (Ctx *ctx, uint32_t hash)
+{
+  return ctx_state_get (&ctx->state, hash);
+}
+int ctx_get_int (Ctx *ctx, uint32_t hash)
+{
+  return (int)ctx_state_get (&ctx->state, hash);
+}
+void ctx_set_float (Ctx *ctx, uint32_t hash, float value)
+{
+  ctx_state_set (&ctx->state, hash, value);
+}
+void ctx_set_string (Ctx *ctx, uint32_t hash, const char *value)
+{
+  ctx_state_set_string (&ctx->state, hash, value);
+}
+void ctx_set_color (Ctx *ctx, uint32_t hash, CtxColor *color)
+{
+  ctx_state_set_color (&ctx->state, hash, color);
+}
+int  ctx_get_color (Ctx *ctx, uint32_t hash, CtxColor *color)
+{
+  return ctx_state_get_color (&ctx->state, hash, color);
+}
+int ctx_is_set (Ctx *ctx, uint32_t hash)
+{
+  return ctx_get_float (ctx, hash) != -0.0f;
+}
+int ctx_is_set_now (Ctx *ctx, uint32_t hash)
+{
+  return ctx_is_set (ctx, hash);
+}
+#ifndef __CTX_COLOR
+#define __CTX_COLOR
+
+int ctx_color_model_get_components (CtxColorModel model)
+{
+  switch (model)
+    {
+      case CTX_GRAY:
+        return 1;
+      case CTX_GRAYA:
+      case CTX_GRAYA_A:
+        return 2;
+      case CTX_RGB:
+      case CTX_LAB:
+      case CTX_LCH:
+      case CTX_DRGB:
+        return 3;
+      case CTX_CMYK:
+      case CTX_DCMYK:
+      case CTX_LABA:
+      case CTX_LCHA:
+      case CTX_RGBA:
+      case CTX_DRGBA:
+      case CTX_RGBA_A:
+      case CTX_RGBA_A_DEVICE:
+        return 4;
+      case CTX_DCMYKA:
+      case CTX_CMYKA:
+      case CTX_CMYKA_A:
+      case CTX_DCMYKA_A:
+        return 5;
+    }
+  return 0;
+}
+
+#if CTX_U8_TO_FLOAT_LUT
+float ctx_u8_float[256];
+#endif
+
+CtxColor *ctx_color_new (void)
+{
+  CtxColor *color = (CtxColor*)ctx_calloc (sizeof (CtxColor), 1);
+  return color;
+}
+
+int ctx_color_is_transparent (CtxColor *color)
+{
+  return color->alpha <= 0.001f;
+}
+
+
+void ctx_color_free (CtxColor *color)
+{
+  ctx_free (color);
+}
+
+static void ctx_color_set_RGBA8 (CtxState *state, CtxColor *color, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+  color->original = color->valid = CTX_VALID_RGBA_U8;
+  color->rgba[0] = r;
+  color->rgba[1] = g;
+  color->rgba[2] = b;
+  color->rgba[3] = a;
+#if CTX_ENABLE_CM
+  color->space = state->gstate.device_space;
+#endif
+}
+
+#if 0
+static void ctx_color_set_RGBA8_ (CtxColor *color, const uint8_t *in)
+{
+  ctx_color_set_RGBA8 (color, in[0], in[1], in[2], in[3]);
+}
+#endif
+
+static void ctx_color_set_graya (CtxState *state, CtxColor *color, float gray, float alpha)
+{
+  color->original = color->valid = CTX_VALID_GRAYA;
+  color->l = gray;
+  color->alpha = alpha;
+}
+#if 0
+static void ctx_color_set_graya_ (CtxColor *color, const float *in)
+{
+  return ctx_color_set_graya (color, in[0], in[1]);
+}
+#endif
+
+void ctx_color_set_rgba (CtxState *state, CtxColor *color, float r, float g, float b, float a)
+{
+#if CTX_ENABLE_CM
+  color->original = color->valid = CTX_VALID_RGBA;
+  color->red      = r;
+  color->green    = g;
+  color->blue     = b;
+  color->space    = state->gstate.rgb_space;
+#else
+  color->original     = color->valid = CTX_VALID_RGBA_DEVICE;
+  color->device_red   = r;
+  color->device_green = g;
+  color->device_blue  = b;
+#endif
+  color->alpha        = a;
+}
+
+static void ctx_color_set_drgba (CtxState *state, CtxColor *color, float r, float g, float b, float a)
+{
+#if CTX_ENABLE_CM
+  color->original     = color->valid = CTX_VALID_RGBA_DEVICE;
+  color->device_red   = r;
+  color->device_green = g;
+  color->device_blue  = b;
+  color->alpha        = a;
+  color->space        = state->gstate.device_space;
+#else
+  ctx_color_set_rgba (state, color, r, g, b, a);
+#endif
+}
+
+#if 0
+static void ctx_color_set_rgba_ (CtxState *state, CtxColor *color, const float *in)
+{
+  ctx_color_set_rgba (color, in[0], in[1], in[2], in[3]);
+}
+#endif
+
+/* the baseline conversions we have whether CMYK support is enabled or not,
+ * providing an effort at right rendering
+ */
+static void ctx_cmyk_to_rgb (float c, float m, float y, float k, float *r, float *g, float *b)
+{
+  *r = (1.0f-c) * (1.0f-k);
+  *g = (1.0f-m) * (1.0f-k);
+  *b = (1.0f-y) * (1.0f-k);
+}
+
+void ctx_rgb_to_cmyk (float r, float g, float b,
+                      float *c_out, float *m_out, float *y_out, float *k_out)
+{
+  float c = 1.0f - r;
+  float m = 1.0f - g;
+  float y = 1.0f - b;
+  float k = ctx_minf (c, ctx_minf (y, m) );
+  if (k < 1.0f)
+    {
+      c = (c - k) / (1.0f - k);
+      m = (m - k) / (1.0f - k);
+      y = (y - k) / (1.0f - k);
+    }
+  else
+    {
+      c = m = y = 0.0f;
+    }
+  *c_out = c;
+  *m_out = m;
+  *y_out = y;
+  *k_out = k;
+}
+
+#if CTX_ENABLE_CMYK
+static void ctx_color_set_cmyka (CtxState *state, CtxColor *color, float c, float m, float y, float k, float a)
+{
+  color->original = color->valid = CTX_VALID_CMYKA;
+  color->cyan     = c;
+  color->magenta  = m;
+  color->yellow   = y;
+  color->key      = k;
+  color->alpha    = a;
+#if CTX_ENABLE_CM
+  color->space    = state->gstate.cmyk_space;
+#endif
+}
+
+static void ctx_color_set_dcmyka (CtxState *state, CtxColor *color, float c, float m, float y, float k, float a)
+{
+  color->original       = color->valid = CTX_VALID_DCMYKA;
+  color->device_cyan    = c;
+  color->device_magenta = m;
+  color->device_yellow  = y;
+  color->device_key     = k;
+  color->alpha          = a;
+#if CTX_ENABLE_CM
+  color->space = state->gstate.device_space;
+#endif
+}
+
+#endif
+
+#if CTX_ENABLE_CM
+
+static void ctx_rgb_user_to_device (CtxState *state, float rin, float gin, float bin,
+                                    float *rout, float *gout, float *bout)
+{
+#if CTX_BABL
+#if 0
+  fprintf (stderr, "-[%p %p\n",
+    state->gstate.fish_rgbaf_user_to_device,
+    state->gstate.fish_rgbaf_device_to_user);
+#endif
+  if (state->gstate.fish_rgbaf_user_to_device)
+  {
+    float rgbaf[4]={rin,gin,bin,1.0};
+    float rgbafo[4];
+    babl_process (state->gstate.fish_rgbaf_user_to_device,
+                  rgbaf, rgbafo, 1);
+
+    *rout = rgbafo[0];
+    *gout = rgbafo[1];
+    *bout = rgbafo[2];
+    return;
+  }
+#endif
+  *rout = rin;
+  *gout = gin;
+  *bout = bin;
+}
+
+static void ctx_rgb_device_to_user (CtxState *state, float rin, float gin, float bin,
+                                    float *rout, float *gout, float *bout)
+{
+#if CTX_BABL
+#if 0
+  fprintf (stderr, "=[%p %p\n",
+    state->gstate.fish_rgbaf_user_to_device,
+    state->gstate.fish_rgbaf_device_to_user);
+#endif
+  if (state->gstate.fish_rgbaf_device_to_user)
+  {
+    float rgbaf[4]={rin,gin,bin,1.0};
+    float rgbafo[4];
+    babl_process (state->gstate.fish_rgbaf_device_to_user,
+                  rgbaf, rgbafo, 1);
+
+    *rout = rgbafo[0];
+    *gout = rgbafo[1];
+    *bout = rgbafo[2];
+    return;
+  }
+#endif
+  *rout = rin;
+  *gout = gin;
+  *bout = bin;
+}
+#endif
+
+static void ctx_color_get_drgba (CtxState *state, CtxColor *color, float *out)
+{
+  if (! (color->valid & CTX_VALID_RGBA_DEVICE) )
+    {
+#if CTX_ENABLE_CM
+      if (color->valid & CTX_VALID_RGBA)
+        {
+          ctx_rgb_user_to_device (state, color->red, color->green, color->blue,
+                                  & (color->device_red), & (color->device_green), & (color->device_blue) );
+        }
+      else
+#endif
+        if (color->valid & CTX_VALID_RGBA_U8)
+          {
+            float red = ctx_u8_to_float (color->rgba[0]);
+            float green = ctx_u8_to_float (color->rgba[1]);
+            float blue = ctx_u8_to_float (color->rgba[2]);
+#if CTX_ENABLE_CM
+            ctx_rgb_user_to_device (state, red, green, blue,
+                                  & (color->device_red), & (color->device_green), & (color->device_blue) );
+#else
+            color->device_red = red;
+            color->device_green = green;
+            color->device_blue = blue;
+#endif
+            color->alpha        = ctx_u8_to_float (color->rgba[3]);
+          }
+#if CTX_ENABLE_CMYK
+        else if (color->valid & CTX_VALID_CMYKA)
+          {
+            ctx_cmyk_to_rgb (color->cyan, color->magenta, color->yellow, color->key,
+                             &color->device_red,
+                             &color->device_green,
+                             &color->device_blue);
+          }
+#endif
+        else if (color->valid & CTX_VALID_GRAYA)
+          {
+            color->device_red   =
+              color->device_green =
+                color->device_blue  = color->l;
+          }
+      color->valid |= CTX_VALID_RGBA_DEVICE;
+    }
+  out[0] = color->device_red;
+  out[1] = color->device_green;
+  out[2] = color->device_blue;
+  out[3] = color->alpha;
+}
+
+
+static inline void
+_ctx_color_get_rgba (CtxState *state, CtxColor *color, float *out)
+{
+#if CTX_ENABLE_CM
+  if (! (color->valid & CTX_VALID_RGBA) )
+    {
+      ctx_color_get_drgba (state, color, out);
+      if (color->valid & CTX_VALID_RGBA_DEVICE)
+        {
+          ctx_rgb_device_to_user (state, color->device_red, color->device_green, color->device_blue,
+                                  & (color->red), & (color->green), & (color->blue) );
+        }
+      color->valid |= CTX_VALID_RGBA;
+    }
+  out[0] = color->red;
+  out[1] = color->green;
+  out[2] = color->blue;
+  out[3] = color->alpha;
+#else
+  ctx_color_get_drgba (state, color, out);
+#endif
+}
+
+void ctx_color_get_rgba (CtxState *state, CtxColor *color, float *out)
+{
+  _ctx_color_get_rgba (state, color, out);
+}
+
+
+
+float ctx_float_color_rgb_to_gray (CtxState *state, const float *rgb)
+{
+        // XXX todo replace with correct according to primaries
+  return CTX_CSS_RGB_TO_LUMINANCE(rgb);
+}
+uint8_t ctx_u8_color_rgb_to_gray (CtxState *state, const uint8_t *rgb)
+{
+        // XXX todo replace with correct according to primaries
+  return (uint8_t)(CTX_CSS_RGB_TO_LUMINANCE(rgb));
+}
+
+void ctx_color_get_graya (CtxState *state, CtxColor *color, float *out)
+{
+  if (! (color->valid & CTX_VALID_GRAYA) )
+    {
+      float rgba[4];
+      ctx_color_get_drgba (state, color, rgba);
+      color->l = ctx_float_color_rgb_to_gray (state, rgba);
+      color->valid |= CTX_VALID_GRAYA;
+    }
+  out[0] = color->l;
+  out[1] = color->alpha;
+}
+
+#if CTX_ENABLE_CMYK
+void ctx_color_get_cmyka (CtxState *state, CtxColor *color, float *out)
+{
+  if (! (color->valid & CTX_VALID_CMYKA) )
+    {
+      if (color->valid & CTX_VALID_GRAYA)
+        {
+          color->cyan = color->magenta = color->yellow = 0.0;
+          color->key = color->l;
+        }
+      else
+        {
+          float rgba[4];
+          ctx_color_get_rgba (state, color, rgba);
+          ctx_rgb_to_cmyk (rgba[0], rgba[1], rgba[2],
+                           &color->cyan, &color->magenta, &color->yellow, &color->key);
+          color->alpha = rgba[3];
+        }
+      color->valid |= CTX_VALID_CMYKA;
+    }
+  out[0] = color->cyan;
+  out[1] = color->magenta;
+  out[2] = color->yellow;
+  out[3] = color->key;
+  out[4] = color->alpha;
+}
+
+#if 0
+static void ctx_color_get_cmyka_u8 (CtxState *state, CtxColor *color, uint8_t *out)
+{
+  if (! (color->valid & CTX_VALID_CMYKA_U8) )
+    {
+      float cmyka[5];
+      ctx_color_get_cmyka (color, cmyka);
+      for (int i = 0; i < 5; i ++)
+        { color->cmyka[i] = ctx_float_to_u8 (cmyka[i]); }
+      color->valid |= CTX_VALID_CMYKA_U8;
+    }
+  out[0] = color->cmyka[0];
+  out[1] = color->cmyka[1];
+  out[2] = color->cmyka[2];
+  out[3] = color->cmyka[3];
+}
+#endif
+#endif
+
+static inline void
+_ctx_color_get_rgba8 (CtxState *state, CtxColor *color, uint8_t *out)
+{
+  if (! (color->valid & CTX_VALID_RGBA_U8) )
+    {
+      float rgba[4];
+      ctx_color_get_drgba (state, color, rgba);
+      for (int i = 0; i < 4; i ++)
+        { color->rgba[i] = ctx_float_to_u8 (rgba[i]); }
+      color->valid |= CTX_VALID_RGBA_U8;
+    }
+  out[0] = color->rgba[0];
+  out[1] = color->rgba[1];
+  out[2] = color->rgba[2];
+  out[3] = color->rgba[3];
+}
+
+void
+ctx_color_get_rgba8 (CtxState *state, CtxColor *color, uint8_t *out)
+{
+  _ctx_color_get_rgba8 (state, color, out);
+}
+
+void ctx_color_get_graya_u8 (CtxState *state, CtxColor *color, uint8_t *out)
+{
+  if (! (color->valid & CTX_VALID_GRAYA_U8) )
+    {
+      float graya[2];
+      ctx_color_get_graya (state, color, graya);
+      color->l_u8 = ctx_float_to_u8 (graya[0]);
+      color->rgba[3] = ctx_float_to_u8 (graya[1]);
+      color->valid |= CTX_VALID_GRAYA_U8;
+    }
+  out[0] = color->l_u8;
+  out[1] = color->rgba[3];
+}
+
+#if 0
+void
+ctx_get_rgba (Ctx *ctx, float *rgba)
+{
+  ctx_color_get_rgba (& (ctx->state), &ctx->state.gstate.source.color, rgba);
+}
+
+void
+ctx_get_drgba (Ctx *ctx, float *rgba)
+{
+  ctx_color_get_drgba (& (ctx->state), &ctx->state.gstate.source.color, rgba);
+}
+#endif
+
+
+#if CTX_ENABLE_CMYK
+#if 0
+void
+ctx_get_cmyka (Ctx *ctx, float *cmyka)
+{
+  ctx_color_get_cmyka (& (ctx->state), &ctx->state.gstate.source.color, cmyka);
+}
+#endif
+#endif
+#if 0
+void
+ctx_get_graya (Ctx *ctx, float *ya)
+{
+  ctx_color_get_graya (& (ctx->state), &ctx->state.gstate.source.color, ya);
+}
+#endif
+
+void ctx_stroke_source (Ctx *ctx)
+{
+  CtxEntry set_stroke = ctx_void (CTX_STROKE_SOURCE);
+  ctx_process (ctx, &set_stroke);
+}
+
+
+static void ctx_color_raw (Ctx *ctx, CtxColorModel model, float *components, int stroke)
+{
+#if 0
+  CtxSource *source = stroke?
+          &ctx->state.gstate.source_stroke:
+          &ctx->state.gstate.source_fill;
+
+  if (model == CTX_RGB || model == CTX_RGBA)
+  {
+    float rgba[4];
+  // XXX it should be possible to disable this, to get a more accurate record
+  // when it is intentional
+    float a = 1.0f;
+    if (model == CTX_RGBA) a = components[3];
+    ctx_color_get_rgba (&ctx->state, &source->color, rgba);
+    if (rgba[0] == components[0] && rgba[1] == components[1] && rgba[2] == components[2] && rgba[3] == a)
+     return;
+  }
+#endif
+
+  if (stroke)
+  {
+    ctx_stroke_source (ctx);
+  }
+
+  CtxEntry command[3]= {
+  ctx_f (CTX_COLOR, model, 0)
+  };
+  switch (model)
+  {
+    case CTX_RGBA:
+    case CTX_RGBA_A:
+    case CTX_RGBA_A_DEVICE:
+    case CTX_DRGBA:
+    case CTX_LABA:
+    case CTX_LCHA:
+      command[2].data.f[0]=components[3];
+      /*FALLTHROUGH*/
+    case CTX_RGB:
+    case CTX_LAB:
+    case CTX_LCH:
+    case CTX_DRGB:
+      command[0].data.f[1]=components[0];
+      command[1].data.f[0]=components[1];
+      command[1].data.f[1]=components[2];
+      break;
+    case CTX_DCMYKA:
+    case CTX_CMYKA:
+    case CTX_DCMYKA_A:
+    case CTX_CMYKA_A:
+      command[2].data.f[1]=components[4];
+      /*FALLTHROUGH*/
+    case CTX_CMYK:
+    case CTX_DCMYK:
+      command[0].data.f[1]=components[0];
+      command[1].data.f[0]=components[1];
+      command[1].data.f[1]=components[2];
+      command[2].data.f[0]=components[3];
+      break;
+    case CTX_GRAYA:
+    case CTX_GRAYA_A:
+      command[1].data.f[0]=components[1];
+      /*FALLTHROUGH*/
+    case CTX_GRAY:
+      command[0].data.f[1]=components[0];
+      break;
+  }
+  ctx_process (ctx, command);
+}
+
+void ctx_rgba (Ctx *ctx, float r, float g, float b, float a)
+{
+#if CTX_PROTOCOL_U8_COLOR
+  uint8_t ru, gu, bu, au;
+  if (r < 0) ru = 0;
+  else if ( r > 1.0f) ru = 255;
+  else ru = (uint8_t)(r * 255);
+  if (g < 0) gu = 0;
+  else if ( g > 1.0f) gu = 255;
+  else gu = (uint8_t)(g * 255);
+  if (b < 0) bu = 0;
+  else if ( b > 1.0f) bu = 255;
+  else bu = (uint8_t)(b * 255);
+  if (a < 0) au = 0;
+  else if ( a > 1.0f) au = 255;
+  else au = (uint8_t)(a * 255);
+
+  CtxEntry command = ctx_u8 (CTX_SET_RGBA_U8, ru,gu,bu,au, 0, 0, 0, 0);
+
+  uint8_t rgba[4];
+  ctx_color_get_rgba8 (&ctx->state, &ctx->state.gstate.source_fill.color, rgba);
+  if (rgba[0] == ru && rgba[1] == gu && rgba[2] == bu && rgba[3] == au)
+     return;
+  ctx_process (ctx, &command);
+#else
+  float components[4]={r,g,b,a};
+  ctx_color_raw (ctx, CTX_RGBA, components, 0);
+#endif
+}
+
+void ctx_rgba_stroke (Ctx *ctx, float r, float g, float b, float a)
+{
+  float components[4]={r,g,b,a};
+  ctx_color_raw (ctx, CTX_RGBA, components, 1);
+}
+
+void ctx_rgb (Ctx *ctx, float   r, float   g, float   b)
+{
+  ctx_rgba (ctx, r, g, b, 1.0f);
+}
+
+void ctx_rgb_stroke (Ctx *ctx, float   r, float   g, float   b)
+{
+  ctx_rgba_stroke (ctx, r, g, b, 1.0f);
+}
+
+void ctx_gray_stroke   (Ctx *ctx, float gray)
+{
+  ctx_color_raw (ctx, CTX_GRAY, &gray, 1);
+}
+void ctx_gray (Ctx *ctx, float gray)
+{
+  ctx_color_raw (ctx, CTX_GRAY, &gray, 0);
+}
+
+void ctx_drgba_stroke (Ctx *ctx, float r, float g, float b, float a)
+{
+  float components[4]={r,g,b,a};
+  ctx_color_raw (ctx, CTX_DRGBA, components, 1);
+}
+void ctx_drgba (Ctx *ctx, float r, float g, float b, float a)
+{
+  float components[4]={r,g,b,a};
+  ctx_color_raw (ctx, CTX_DRGBA, components, 0);
+}
+
+#if CTX_ENABLE_CMYK
+
+void ctx_cmyka_stroke (Ctx *ctx, float c, float m, float y, float k, float a)
+{
+  float components[5]={c,m,y,k,a};
+  ctx_color_raw (ctx, CTX_CMYKA, components, 1);
+}
+void ctx_cmyka (Ctx *ctx, float c, float m, float y, float k, float a)
+{
+  float components[5]={c,m,y,k,a};
+  ctx_color_raw (ctx, CTX_CMYKA, components, 0);
+}
+void ctx_cmyk_stroke   (Ctx *ctx, float c, float m, float y, float k)
+{
+  float components[4]={c,m,y,k};
+  ctx_color_raw (ctx, CTX_CMYK, components, 1);
+}
+void ctx_cmyk (Ctx *ctx, float c, float m, float y, float k)
+{
+  float components[4]={c,m,y,k};
+  ctx_color_raw (ctx, CTX_CMYK, components, 0);
+}
+
+#if 0
+static void ctx_dcmyk_raw (Ctx *ctx, float c, float m, float y, float k, int stroke)
+{
+  float components[5]={c,m,y,k,1.0f};
+  ctx_color_raw (ctx, CTX_DCMYKA, components, stroke);
+}
+
+static void ctx_dcmyka_raw (Ctx *ctx, float c, float m, float y, float k, float a, int stroke)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_COLOR, CTX_DCMYKA + 512 * stroke, c),
+    ctx_f (CTX_CONT, m, y),
+    ctx_f (CTX_CONT, k, a)
+  };
+  ctx_process (ctx, command);
+}
+#endif
+
+void ctx_dcmyk_stroke   (Ctx *ctx, float c, float m, float y, float k)
+{
+  float components[5]={c,m,y,k,1.0f};
+  ctx_color_raw (ctx, CTX_DCMYK, components, 1);
+}
+void ctx_dcmyk (Ctx *ctx, float c, float m, float y, float k)
+{
+  float components[5]={c,m,y,k,1.0f};
+  ctx_color_raw (ctx, CTX_DCMYK, components, 0);
+}
+
+void ctx_dcmyka_stroke   (Ctx *ctx, float c, float m, float y, float k, float a)
+{
+  float components[5]={c,m,y,k,a};
+  ctx_color_raw (ctx, CTX_DCMYKA, components, 1);
+}
+void ctx_dcmyka (Ctx *ctx, float c, float m, float y, float k, float a)
+{
+  float components[5]={c,m,y,k,a};
+  ctx_color_raw (ctx, CTX_DCMYKA, components, 0);
+}
+
+#endif
+
+/* XXX: missing CSS1:
+ *
+ *   EM { color: rgb(110%, 0%, 0%) }  // clipped to 100% 
+ *
+ *
+ *   :first-letter
+ *   :first-list
+ *   :link :visited :active
+ *
+ */
+
+typedef struct ColorDef {
+  uint64_t name;
+  float r;
+  float g;
+  float b;
+  float a;
+} ColorDef;
+
+#if 0
+#define CTX_silver 	CTX_STRH('s','i','l','v','e','r',0,0,0,0,0,0,0,0)
+#define CTX_fuchsia 	CTX_STRH('f','u','c','h','s','i','a',0,0,0,0,0,0,0)
+#define CTX_gray 	CTX_STRH('g','r','a','y',0,0,0,0,0,0,0,0,0,0)
+#define CTX_yellow 	CTX_STRH('y','e','l','l','o','w',0,0,0,0,0,0,0,0)
+#define CTX_white 	CTX_STRH('w','h','i','t','e',0,0,0,0,0,0,0,0,0)
+#define CTX_maroon 	CTX_STRH('m','a','r','o','o','n',0,0,0,0,0,0,0,0)
+#define CTX_magenta 	CTX_STRH('m','a','g','e','n','t','a',0,0,0,0,0,0,0)
+#define CTX_blue 	CTX_STRH('b','l','u','e',0,0,0,0,0,0,0,0,0,0)
+#define CTX_green 	CTX_STRH('g','r','e','e','n',0,0,0,0,0,0,0,0,0)
+#define CTX_red 	CTX_STRH('r','e','d',0,0,0,0,0,0,0,0,0,0,0)
+#define CTX_purple 	CTX_STRH('p','u','r','p','l','e',0,0,0,0,0,0,0,0)
+#define CTX_olive 	CTX_STRH('o','l','i','v','e',0,0,0,0,0,0,0,0,0)
+#define CTX_teal        CTX_STRH('t','e','a','l',0,0,0,0,0,0,0,0,0,0)
+#define CTX_black 	CTX_STRH('b','l','a','c','k',0,0,0,0,0,0,0,0,0)
+#define CTX_cyan 	CTX_STRH('c','y','a','n',0,0,0,0,0,0,0,0,0,0)
+#define CTX_navy 	CTX_STRH('n','a','v','y',0,0,0,0,0,0,0,0,0,0)
+#define CTX_lime 	CTX_STRH('l','i','m','e',0,0,0,0,0,0,0,0,0,0)
+#define CTX_aqua 	CTX_STRH('a','q','u','a',0,0,0,0,0,0,0,0,0,0)
+#define CTX_transparent CTX_STRH('t','r','a','n','s','p','a','r','e','n','t',0,0,0)
+#endif
+
+static ColorDef _ctx_colors[]={
+  {CTX_black,    0, 0, 0, 1},
+  {CTX_red,      1, 0, 0, 1},
+  {CTX_green,    0, 1, 0, 1},
+  {CTX_yellow,   1, 1, 0, 1},
+  {CTX_blue,     0, 0, 1, 1},
+  {CTX_fuchsia,  1, 0, 1, 1},
+  {CTX_cyan,     0, 1, 1, 1},
+  {CTX_white,    1, 1, 1, 1},
+  {CTX_silver,   0.75294f, 0.75294f, 0.75294f, 1},
+  {CTX_gray,     0.50196f, 0.50196f, 0.50196f, 1},
+  {CTX_magenta,  0.50196f, 0, 0.50196f, 1},
+  {CTX_maroon,   0.50196f, 0, 0, 1},
+  {CTX_purple,   0.50196f, 0, 0.50196f, 1},
+  {CTX_green,    0, 0.50196f, 0, 1},
+  {CTX_lime,     0, 1, 0, 1},
+  {CTX_olive,    0.50196f, 0.50196f, 0, 1},
+  {CTX_navy,     0, 0,      0.50196f, 1},
+  {CTX_teal,     0, 0.50196f, 0.50196f, 1},
+  {CTX_aqua,     0, 1, 1, 1},
+  {CTX_transparent, 0, 0, 0, 0},
+  {CTX_none,     0, 0, 0, 0},
+};
+
+static int xdigit_value(const char xdigit)
+{
+  if (xdigit >= '0' && xdigit <= '9')
+   return xdigit - '0';
+  switch (xdigit)
+  {
+    case 'A':case 'a': return 10;
+    case 'B':case 'b': return 11;
+    case 'C':case 'c': return 12;
+    case 'D':case 'd': return 13;
+    case 'E':case 'e': return 14;
+    case 'F':case 'f': return 15;
+  }
+  return 0;
+}
+
+static int
+ctx_color_parse_rgb (CtxState *ctxstate, CtxColor *color, const char *color_string)
+{
+  float dcolor[4] = {0,0,0,1};
+  while (*color_string && *color_string != '(')
+    color_string++;
+  if (*color_string) color_string++;
+
+  {
+    int n_floats = 0;
+    char *p =    (char*)color_string;
+    char *prev = (char*)NULL;
+    for (; p && n_floats < 4 && p != prev && *p; )
+    {
+      float val;
+      prev = p;
+      val = _ctx_parse_float (p, &p);
+      if (p != prev)
+      {
+        if (n_floats < 3)
+          dcolor[n_floats++] = val/255.0f;
+        else
+          dcolor[n_floats++] = val;
+
+        while (*p == ' ' || *p == ',')
+        {
+          p++;
+          prev++;
+        }
+      }
+    }
+  }
+  ctx_color_set_rgba (ctxstate, color, dcolor[0], dcolor[1],dcolor[2],dcolor[3]);
+  return 0;
+}
+
+static int ctx_isxdigit (uint8_t ch)
+{
+  if (ch >= '0' && ch <= '9') return 1;
+  if (ch >= 'a' && ch <= 'f') return 1;
+  if (ch >= 'A' && ch <= 'F') return 1;
+  return 0;
+}
+
+static int
+mrg_color_parse_hex (CtxState *ctxstate, CtxColor *color, const char *color_string)
+{
+  float dcolor[4]={0,0,0,1};
+  int string_length = ctx_strlen (color_string);
+  int i;
+  dcolor[3] = 1.0;
+
+  if (string_length == 7 ||  /* #rrggbb   */
+      string_length == 9)    /* #rrggbbaa */
+    {
+      int num_iterations = (string_length - 1) / 2;
+  
+      for (i = 0; i < num_iterations; ++i)
+        {
+          if (ctx_isxdigit (color_string[2 * i + 1]) &&
+              ctx_isxdigit (color_string[2 * i + 2]))
+            {
+              dcolor[i] = (xdigit_value (color_string[2 * i + 1]) << 4 |
+                           xdigit_value (color_string[2 * i + 2])) / 255.f;
+            }
+          else
+            {
+              return 0;
+            }
+        }
+      /* Successful #rrggbb(aa) parsing! */
+      ctx_color_set_rgba (ctxstate, color, dcolor[0], dcolor[1],dcolor[2],dcolor[3]);
+      return 1;
+    }
+  else if (string_length == 4 ||  /* #rgb  */
+           string_length == 5)    /* #rgba */
+    {
+      int num_iterations = string_length - 1;
+      for (i = 0; i < num_iterations; ++i)
+        {
+          if (ctx_isxdigit (color_string[i + 1]))
+            {
+              dcolor[i] = (xdigit_value (color_string[i + 1]) << 4 |
+                           xdigit_value (color_string[i + 1])) / 255.f;
+            }
+          else
+            {
+              return 0;
+            }
+        }
+      ctx_color_set_rgba (ctxstate, color, dcolor[0], dcolor[1],dcolor[2],dcolor[3]);
+      /* Successful #rgb(a) parsing! */
+      return 0;
+    }
+  /* String was of unsupported length. */
+  return 1;
+}
+
+int ctx_color_set_from_string (Ctx *ctx, CtxColor *color, const char *string)
+{
+  int i;
+  uint32_t hash = ctx_strhash (string);
+//  ctx_color_set_rgba (&(ctx->state), color, 0.4,0.1,0.9,1.0);
+//  return 0;
+    //rgba[0], rgba[1], rgba[2], rgba[3]);
+
+  if (hash == CTX_currentColor)
+  {
+    float rgba[4];
+    CtxColor ccolor;
+    ctx_get_color (ctx, CTX_color, &ccolor);
+    ctx_color_get_rgba (&(ctx->state), &ccolor, rgba);
+    ctx_color_set_rgba (&(ctx->state), color, rgba[0], rgba[1], rgba[2], rgba[3]);
+    return 0;
+  }
+
+  for (i = (sizeof(_ctx_colors)/sizeof(_ctx_colors[0]))-1; i>=0; i--)
+  {
+    if (hash == _ctx_colors[i].name)
+    {
+      ctx_color_set_rgba (&(ctx->state), color,
+       _ctx_colors[i].r, _ctx_colors[i].g, _ctx_colors[i].b, _ctx_colors[i].a);
+      return 0;
+    }
+  }
+
+  if (string[0] == '#')
+    mrg_color_parse_hex (&(ctx->state), color, string);
+  else if (string[0] == 'r' &&
+      string[1] == 'g' &&
+      string[2] == 'b'
+      )
+    ctx_color_parse_rgb (&(ctx->state), color, string);
+
+  return 0;
+}
+
+int ctx_color (Ctx *ctx, const char *string)
+{
+  CtxColor color = {0,};
+  ctx_color_set_from_string (ctx, &color, string);
+  float rgba[4];
+  ctx_color_get_rgba (&(ctx->state), &color, rgba);
+  ctx_color_raw (ctx, CTX_RGBA, rgba, 0);
+  return 0;
+}
+
+void
+ctx_rgba8 (Ctx *ctx, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+#if 0
+  CtxEntry command = ctx_u8 (CTX_SET_RGBA_U8, r, g, b, a, 0, 0, 0, 0);
+
+  uint8_t rgba[4];
+  ctx_color_get_rgba8 (&ctx->state, &ctx->state.gstate.source.color, rgba);
+  if (rgba[0] == r && rgba[1] == g && rgba[2] == b && rgba[3] == a)
+     return;
+
+  ctx_process (ctx, &command);
+#else
+  ctx_rgba (ctx, r/255.0f, g/255.0f, b/255.0f, a/255.0f);
+#endif
+}
+
+void ctx_rgba8_stroke (Ctx *ctx, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+  ctx_rgba_stroke (ctx, r/255.0f, g/255.0f, b/255.0f, a/255.0f);
+}
+
+
+#endif 
+
+#if CTX_BABL
+void ctx_rasterizer_colorspace_babl (CtxState      *state,
+                                     CtxColorSpace  space_slot,
+                                     const Babl    *space)
+{
+  switch (space_slot)
+  {
+    case CTX_COLOR_SPACE_DEVICE_RGB:
+      state->gstate.device_space = space;
+      break;
+    case CTX_COLOR_SPACE_DEVICE_CMYK:
+      state->gstate.device_space = space;
+      break;
+    case CTX_COLOR_SPACE_USER_RGB:
+      state->gstate.rgb_space = space;
+      break;
+    case CTX_COLOR_SPACE_USER_CMYK:
+      state->gstate.cmyk_space = space;
+      break;
+    case CTX_COLOR_SPACE_TEXTURE:
+      state->gstate.texture_space = space;
+      break;
+  }
+
+  const Babl *srgb = babl_space ("sRGB");
+  if (!state->gstate.texture_space) 
+       state->gstate.texture_space = srgb;
+  if (!state->gstate.device_space) 
+       state->gstate.device_space = srgb;
+  if (!state->gstate.rgb_space) 
+       state->gstate.rgb_space = srgb;
+
+  //fprintf (stderr, "%s\n", babl_get_name (state->gstate.device_space));
+
+  state->gstate.fish_rgbaf_device_to_user = babl_fish (
+       babl_format_with_space ("R'G'B'A float", state->gstate.device_space),
+       babl_format_with_space ("R'G'B'A float", state->gstate.rgb_space));
+  state->gstate.fish_rgbaf_user_to_device = babl_fish (
+       babl_format_with_space ("R'G'B'A float", state->gstate.rgb_space),
+       babl_format_with_space ("R'G'B'A float", state->gstate.device_space));
+  state->gstate.fish_rgbaf_texture_to_device = babl_fish (
+       babl_format_with_space ("R'G'B'A float", state->gstate.texture_space),
+       babl_format_with_space ("R'G'B'A float", state->gstate.device_space));
+}
+#endif
+
+void ctx_rasterizer_colorspace_icc (CtxState      *state,
+                                    CtxColorSpace  space_slot,
+                                    char          *icc_data,
+                                    int            icc_length)
+{
+#if CTX_BABL
+   const char *error = NULL;
+   const Babl *space = NULL;
+
+   if (icc_data == NULL) space = babl_space ("sRGB");
+   else if (icc_length < 32)
+   {
+      if (icc_data[0] == '0' && icc_data[1] == 'x')
+        sscanf (icc_data, "%p", &space);
+      else
+      {
+        char tmp[24];
+        int i;
+        for (i = 0; i < icc_length; i++)
+          tmp[i]= (icc_data[i]>='A' && icc_data[i]<='Z')?icc_data[i]+('a'-'A'):icc_data[i];
+        tmp[icc_length]=0;
+        if (!ctx_strcmp (tmp, "srgb"))            space = babl_space ("sRGB");
+        else if (!ctx_strcmp (tmp, "scrgb"))      space = babl_space ("scRGB");
+        else if (!ctx_strcmp (tmp, "acescg"))     space = babl_space ("ACEScg");
+        else if (!ctx_strcmp (tmp, "adobe"))      space = babl_space ("Adobe");
+        else if (!ctx_strcmp (tmp, "apple"))      space = babl_space ("Apple");
+        else if (!ctx_strcmp (tmp, "rec2020"))    space = babl_space ("Rec2020");
+        else if (!ctx_strcmp (tmp, "aces2065-1")) space = babl_space ("ACES2065-1");
+      }
+   }
+
+   if (!space)
+   {
+     space = babl_space_from_icc (icc_data, icc_length, BABL_ICC_INTENT_RELATIVE_COLORIMETRIC, &error);
+   }
+   if (space)
+   {
+     ctx_rasterizer_colorspace_babl (state, space_slot, space);
+   }
+#endif
+}
+
+void ctx_colorspace (Ctx           *ctx,
+                     CtxColorSpace  space_slot,
+                     unsigned char *data,
+                     int            data_length)
+{
+  if (data)
+  {
+    if (data_length <= 0) data_length = (int)ctx_strlen ((char*)data);
+    ctx_process_cmd_str_with_len (ctx, CTX_COLOR_SPACE, (char*)data, space_slot, 0, data_length);
+  }
+  else
+  {
+    ctx_process_cmd_str_with_len (ctx, CTX_COLOR_SPACE, "sRGB", space_slot, 0, 4);
+  }
+}
+
+void ctx_gradient_add_stop_u8
+(Ctx *ctx, float pos, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+  CtxEntry entry = ctx_f (CTX_GRADIENT_STOP, pos, 0);
+  entry.data.u8[4+0] = r;
+  entry.data.u8[4+1] = g;
+  entry.data.u8[4+2] = b;
+  entry.data.u8[4+3] = a;
+  ctx_process (ctx, &entry);
+}
+
+void ctx_gradient_add_stop
+(Ctx *ctx, float pos, float r, float g, float b, float a)
+{
+  int ir =(int)(r * 255);
+  int ig =(int)(g * 255);
+  int ib =(int)(b * 255);
+  int ia =(int)(a * 255);
+  ir = CTX_CLAMP (ir, 0,255);
+  ig = CTX_CLAMP (ig, 0,255);
+  ib = CTX_CLAMP (ib, 0,255);
+  ia = CTX_CLAMP (ia, 0,255);
+  ctx_gradient_add_stop_u8 (ctx, pos, ir, ig, ib, ia);
+}
+
+void ctx_gradient_add_stop_string
+(Ctx *ctx, float pos, const char *string)
+{
+  CtxColor color = {0,};
+  ctx_color_set_from_string (ctx, &color, string);
+  float rgba[4];
+  ctx_color_get_rgba (&(ctx->state), &color, rgba);
+  ctx_gradient_add_stop (ctx, pos, rgba[0], rgba[1], rgba[2], rgba[3]);
+}
+
+//  deviceRGB .. settable when creating an RGB image surface..
+//               queryable when running in terminal - is it really needed?
+//               though it is settable ; and functional for changing this state at runtime..
+//
+//  userRGB - settable at any time, stored in save|restore 
+//  texture - set as the space of data on subsequent 
+
+CtxBuffer *ctx_buffer_new_bare (void)
+{
+  CtxBuffer *buffer = (CtxBuffer *) ctx_calloc (sizeof (CtxBuffer), 1);
+  return buffer;
+}
+
+void ctx_buffer_set_data (CtxBuffer *buffer,
+                          void *data, int width, int height,
+                          int stride,
+                          CtxPixelFormat pixel_format,
+                          void (*freefunc) (void *pixels, void *user_data),
+                          void *user_data)
+{
+  if (buffer->free_func)
+    { buffer->free_func (buffer->data, buffer->user_data); }
+  if (stride <= 0)
+    stride = ctx_pixel_format_get_stride (pixel_format, width);
+  buffer->data      = data;
+  buffer->width     = width;
+  buffer->height    = height;
+  buffer->stride    = stride;
+  buffer->format    = ctx_pixel_format_info (pixel_format);
+  buffer->free_func = freefunc;
+  buffer->user_data = user_data;
+}
+
+CtxBuffer *ctx_buffer_new_for_data (void *data, int width, int height,
+                                    int stride,
+                                    CtxPixelFormat pixel_format,
+                                    void (*freefunc) (void *pixels, void *user_data),
+                                    void *user_data)
+{
+  CtxBuffer *buffer = ctx_buffer_new_bare ();
+  ctx_buffer_set_data (buffer, data, width, height, stride, pixel_format,
+                       freefunc, user_data);
+  return buffer;
+}
+
+void ctx_buffer_pixels_free (void *pixels, void *userdata)
+{
+  ctx_free (pixels);
+}
+
+CtxBuffer *ctx_buffer_new (int width, int height,
+                           CtxPixelFormat pixel_format)
+{
+  //CtxPixelFormatInfo *info = ctx_pixel_format_info (pixel_format);
+  CtxBuffer *buffer = ctx_buffer_new_bare ();
+  int stride = ctx_pixel_format_get_stride (pixel_format, width);
+  int data_len = stride * height;
+  if (pixel_format == CTX_FORMAT_YUV420)
+    data_len = width * height + ((width/2) * (height/2)) * 2;
+
+  uint8_t *pixels = (uint8_t*)ctx_calloc (data_len, 1);
+
+  ctx_buffer_set_data (buffer, pixels, width, height, stride, pixel_format,
+                       ctx_buffer_pixels_free, NULL);
+  return buffer;
+}
+
+static void ctx_buffer_deinit (CtxBuffer *buffer)
+{
+  if (buffer->free_func)
+    buffer->free_func (buffer->data, buffer->user_data);
+  if (buffer->eid)
+  {
+    ctx_free (buffer->eid);
+  }
+  buffer->eid = NULL;
+  buffer->data = NULL;
+  buffer->free_func = NULL;
+  buffer->user_data  = NULL;
+  if (buffer->color_managed)
+  {
+    if (buffer->color_managed != buffer)
+    {
+      ctx_buffer_destroy (buffer->color_managed);
+    }
+    buffer->color_managed = NULL;
+  }
+}
+
+void ctx_buffer_destroy (CtxBuffer *buffer)
+{
+  ctx_buffer_deinit (buffer);
+  ctx_free (buffer);
+}
+
+#if 0
+static int
+ctx_texture_check_eid (Ctx *ctx, const char *eid, int *tw, int *th)
+{
+  for (int i = 0; i <  CTX_MAX_TEXTURES; i++)
+  {
+    if (ctx->texture[i].data &&
+        ctx->texture[i].eid  &&
+        !ctx_strcmp (ctx->texture[i].eid, eid))
+    {
+      if (tw) *tw = ctx->texture[i].width;
+      if (th) *th = ctx->texture[i].height;
+      ctx->texture[i].frame = ctx->texture_cache->frame;
+      return i;
+    }
+  }
+  return -1;
+}
+#endif
+
+const char* ctx_texture_init (Ctx           *ctx,
+                              const char    *eid,
+                              int            width,
+                              int            height,
+                              int            stride,
+                              CtxPixelFormat format,
+                              void          *space,
+                              uint8_t       *pixels,
+                              void (*freefunc) (void *pixels, void *user_data),
+                              void          *user_data)
+{
+  int id = 0;
+  if (eid)
+  {
+    for (int i = 0; i <  CTX_MAX_TEXTURES; i++)
+    {
+      if (ctx->texture[i].data &&
+          ctx->texture[i].eid &&
+          !ctx_strcmp (ctx->texture[i].eid, eid))
+      {
+        ctx->texture[i].frame = ctx->texture_cache->frame;
+        if (freefunc && user_data != (void*)23)
+          freefunc (pixels, user_data);
+        return ctx->texture[i].eid;
+      }
+      if (ctx->texture[i].data == NULL 
+          ||   (ctx->texture_cache->frame - ctx->texture[i].frame >= 2))
+        id = i;
+    }
+  } else
+  {
+    for (int i = 0; i <  CTX_MAX_TEXTURES; i++)
+    {
+      if (ctx->texture[i].data == NULL 
+          || (ctx->texture_cache->frame - ctx->texture[i].frame > 2))
+        id = i;
+    }
+  }
+  //int bpp = ctx_pixel_format_bits_per_pixel (format);
+  ctx_buffer_deinit (&ctx->texture[id]);
+
+  if (stride<=0)
+  {
+    stride = ctx_pixel_format_get_stride ((CtxPixelFormat)format, width);
+  }
+
+  int data_len = stride * height;
+  if (format == CTX_FORMAT_YUV420)
+          data_len = width * height +
+                  2 * ((width/2)*(height/2));
+
+  if (freefunc == ctx_buffer_pixels_free && user_data == (void*)23)
+  {
+     uint8_t *tmp = (uint8_t*)ctx_malloc (data_len);
+     memcpy (tmp, pixels, data_len);
+     pixels = tmp;
+  }
+
+  ctx_buffer_set_data (&ctx->texture[id],
+                       pixels, width, height,
+                       stride, format,
+                       freefunc, user_data);
+#if CTX_ENABLE_CM
+  ctx->texture[id].space = space;
+#endif
+  ctx->texture[id].frame = ctx->texture_cache->frame;
+  if (eid)
+  {
+    /* we got an eid, this is the fast path */
+    ctx->texture[id].eid = ctx_strdup (eid);
+  }
+  else
+  {
+    uint8_t hash[20];
+    char ascii[41];
+
+    CtxSHA1 *sha1 = ctx_sha1_new ();
+    ctx_sha1_process (sha1, pixels, stride * height);
+    ctx_sha1_done (sha1, hash);
+    ctx_sha1_free (sha1);
+    const char *hex="0123456789abcdef";
+    for (int i = 0; i < 20; i ++)
+    {
+       ascii[i*2]=hex[hash[i]/16];
+       ascii[i*2+1]=hex[hash[i]%16];
+    }
+    ascii[40]=0;
+    ctx->texture[id].eid = ctx_strdup (ascii);
+  }
+  return ctx->texture[id].eid;
+}
+
+void
+_ctx_texture_prepare_color_management (CtxState      *state,
+                                       CtxBuffer     *buffer)
+{
+// _ctx_texture_lock ();
+   switch (buffer->format->pixel_format)
+   {
+#if CTX_BABL
+     case CTX_FORMAT_RGBA8:
+       if (buffer->space == state->gstate.device_space)
+       {
+         buffer->color_managed = buffer;
+       }
+       else
+       {
+          CtxBuffer *color_managed = ctx_buffer_new (buffer->width, buffer->height,
+                                                  CTX_FORMAT_RGBA8);
+          babl_process (
+             babl_fish (babl_format_with_space ("R'G'B'A u8", buffer->space),
+                        babl_format_with_space ("R'G'B'A u8", state->gstate.device_space)),
+             buffer->data, color_managed->data,
+             buffer->width * buffer->height
+             );
+          buffer->color_managed = color_managed;
+       }
+       break;
+     case CTX_FORMAT_RGB8:
+       if (buffer->space == state->gstate.device_space)
+       {
+         buffer->color_managed = buffer;
+       }
+       else
+       {
+         CtxBuffer *color_managed = ctx_buffer_new (buffer->width, buffer->height,
+                                               CTX_FORMAT_RGB8);
+         babl_process (
+            babl_fish (babl_format_with_space ("R'G'B' u8", buffer->space),
+                       babl_format_with_space ("R'G'B' u8", state->gstate.device_space)),
+            buffer->data, color_managed->data,
+            buffer->width * buffer->height
+          );
+         buffer->color_managed = color_managed;
+       }
+       break;
+#endif
+     default:
+       buffer->color_managed = buffer;
+   }
+//  _ctx_texture_unlock ();
+}
+
+
+
+int ctx_utf8_len (const unsigned char first_byte)
+{
+  if      ( (first_byte & 0x80) == 0)
+    { return 1; } /* ASCII */
+  else if ( (first_byte & 0xE0) == 0xC0)
+    { return 2; }
+  else if ( (first_byte & 0xF0) == 0xE0)
+    { return 3; }
+  else if ( (first_byte & 0xF8) == 0xF0)
+    { return 4; }
+  return 1;
+}
+
+
+const char *ctx_utf8_skip (const char *s, int utf8_length)
+{
+  int count;
+  if (!s)
+    { return NULL; }
+  for (count = 0; *s; s++)
+    {
+      if ( (*s & 0xC0) != 0x80)
+        { count++; }
+      if (count == utf8_length + 1)
+        { return s; }
+    }
+  return s;
+}
+
+//  XXX  :  unused
+int ctx_utf8_strlen (const char *s)
+{
+  int count;
+  if (!s)
+    { return 0; }
+  for (count = 0; *s; s++)
+    if ( (*s & 0xC0) != 0x80)
+      { count++; }
+  return count;
+}
+
+int
+ctx_unichar_to_utf8 (uint32_t  ch,
+                     uint8_t  *dest)
+{
+  /* http://www.cprogramming.com/tutorial/utf8.c  */
+  /*  Basic UTF-8 manipulation routines
+    by Jeff Bezanson
+    placed in the public domain Fall 2005 ... */
+  if (ch < 0x80)
+    {
+      dest[0] = (char) ch;
+      return 1;
+    }
+  if (ch < 0x800)
+    {
+      dest[0] = (ch>>6) | 0xC0;
+      dest[1] = (ch & 0x3F) | 0x80;
+      return 2;
+    }
+  if (ch < 0x10000)
+    {
+      dest[0] = (ch>>12) | 0xE0;
+      dest[1] = ( (ch>>6) & 0x3F) | 0x80;
+      dest[2] = (ch & 0x3F) | 0x80;
+      return 3;
+    }
+  if (ch < 0x110000)
+    {
+      dest[0] = (ch>>18) | 0xF0;
+      dest[1] = ( (ch>>12) & 0x3F) | 0x80;
+      dest[2] = ( (ch>>6) & 0x3F) | 0x80;
+      dest[3] = (ch & 0x3F) | 0x80;
+      return 4;
+    }
+  return 0;
+}
+
+uint32_t
+ctx_utf8_to_unichar (const char *input)
+{
+  const uint8_t *utf8 = (const uint8_t *) input;
+  uint8_t c = utf8[0];
+  if ( (c & 0x80) == 0)
+    { return c; }
+  else if ( (c & 0xE0) == 0xC0)
+    return ( (utf8[0] & 0x1F) << 6) |
+           (utf8[1] & 0x3F);
+  else if ( (c & 0xF0) == 0xE0)
+    return ( (utf8[0] & 0xF)  << 12) |
+           ( (utf8[1] & 0x3F) << 6) |
+           (utf8[2] & 0x3F);
+  else if ( (c & 0xF8) == 0xF0)
+    return ( (utf8[0] & 0x7)  << 18) |
+           ( (utf8[1] & 0x3F) << 12) |
+           ( (utf8[2] & 0x3F) << 6) |
+           (utf8[3] & 0x3F);
+  else if ( (c & 0xFC) == 0xF8)
+    return ( (utf8[0] & 0x3)  << 24) |
+           ( (utf8[1] & 0x3F) << 18) |
+           ( (utf8[2] & 0x3F) << 12) |
+           ( (utf8[3] & 0x3F) << 6) |
+           (utf8[4] & 0x3F);
+  else if ( (c & 0xFE) == 0xFC)
+    return ( (utf8[0] & 0x1)  << 30) |
+           ( (utf8[1] & 0x3F) << 24) |
+           ( (utf8[2] & 0x3F) << 18) |
+           ( (utf8[3] & 0x3F) << 12) |
+           ( (utf8[4] & 0x3F) << 6) |
+           (utf8[5] & 0x3F);
+  return 0;
+}
+#if CTX_TERMINAL_EVENTS
+
+#if !__COSMOPOLITAN__
+#include <termios.h>
+
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#endif
+
+#if 0
+int ctx_terminal_width (void)
+{
+  char buf[1024];
+  struct termios orig_attr;
+  struct termios raw;
+  tcgetattr (STDIN_FILENO, &orig_attr);
+  raw = orig_attr;
+  raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+  raw.c_oflag &= ~(OPOST);
+  raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return 0;
+  fprintf (stderr, "\e[14t");
+  //tcflush(STDIN_FILENO, 1);
+#if __COSMOPOLITAN__
+  /// XXX ?
+#else
+  tcdrain(STDIN_FILENO);
+#endif
+  int length = 0;
+  usleep (1000 * 60); // to account for possibly lowish latency ssh,
+                      // should be made configurable ; perhaps in
+                      // an env var
+  struct timeval tv = {0,0};
+  fd_set rfds;
+  
+  FD_ZERO(&rfds);
+  FD_SET(0, &rfds);
+  tv.tv_usec = 1000 * 5;
+
+  for (int n = 0; select(1, &rfds, NULL, NULL, &tv) && n < 20; n++)
+  {
+    length += read (STDIN_FILENO, &buf[length], 1);
+  }
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr);
+  if (length == -1)
+  {
+    return 0;
+  }
+  char *semi = strchr (buf, ';');
+  buf[length]=0;
+  if (semi) {semi++; semi = strchr (semi, ';');}
+  if (semi)
+  {
+    return atoi(semi + 1);
+  }
+  return 0;
+}
+
+int ctx_terminal_height (void)
+{
+  char buf[1024];
+  struct termios orig_attr;
+  struct termios raw;
+  tcgetattr (STDIN_FILENO, &orig_attr);
+  raw = orig_attr;
+  raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+  raw.c_oflag &= ~(OPOST);
+  raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return 0;
+  fprintf (stderr, "\e[14t");
+  //tcflush(STDIN_FILENO, 1);
+#if !__COSMOPOLITAN__
+  tcdrain(STDIN_FILENO);
+#endif
+  int length = 0;
+  usleep (1000 * 60); // to account for possibly lowish latency ssh,
+                      // should be made configurable ; perhaps in
+                      // an env var
+  struct timeval tv = {0,0};
+  fd_set rfds;
+  
+  FD_ZERO(&rfds);
+  FD_SET(0, &rfds);
+  tv.tv_usec = 1000 * 5;
+
+  for (int n = 0; select(1, &rfds, NULL, NULL, &tv) && n < 20; n++)
+  {
+    length += read (STDIN_FILENO, &buf[length], 1);
+  }
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr);
+  if (length == -1)
+  {
+    return 0;
+  }
+  char *semi = strchr (buf, ';');
+  buf[length]=0;
+  if (semi)
+  {
+    return atoi(semi + 1);
+  }
+  return 0;
+}
+#else
+
+
+int ctx_terminal_width (void)
+{
+  struct winsize ws; 
+  if (ioctl(0,TIOCGWINSZ,&ws)!=0)
+    return 640;
+  return ws.ws_xpixel;
+} 
+
+int ctx_terminal_height (void)
+{
+  struct winsize ws; 
+  if (ioctl(0,TIOCGWINSZ,&ws)!=0)
+    return 450;
+  return ws.ws_ypixel;
+}
+
+#endif
+
+int ctx_terminal_cols (void)
+{
+  struct winsize ws; 
+  if (ioctl(0,TIOCGWINSZ,&ws)!=0)
+    return 80;
+  return ws.ws_col;
+} 
+
+int ctx_terminal_rows (void)
+{
+  struct winsize ws; 
+  if (ioctl(0,TIOCGWINSZ,&ws)!=0)
+    return 25;
+  return ws.ws_row;
+}
+
+
+
+
+
+#define DECTCEM_CURSOR_SHOW      "\033[?25h"
+#define DECTCEM_CURSOR_HIDE      "\033[?25l"
+#define TERMINAL_MOUSE_OFF       "\033[?1000l\033[?1003l"
+#define TERMINAL_MOUSE_ON_BASIC  "\033[?1000h"
+#define TERMINAL_MOUSE_ON_DRAG   "\033[?1000h\033[?1003h" /* +ON_BASIC for wider */
+#define TERMINAL_MOUSE_ON_FULL   "\033[?1000h\033[?1004h" /* compatibility */
+#define XTERM_ALTSCREEN_ON       "\033[?47h"
+#define XTERM_ALTSCREEN_OFF      "\033[?47l"
+
+/*************************** input handling *************************/
+
+#if !__COSMOPOLITAN__
+#include <termios.h>
+#include <errno.h>
+#include <signal.h>
+#endif
+
+#define DELAY_MS  100  
+
+#ifndef MIN
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#endif
+
+static int  size_changed = 0;       /* XXX: global state */
+static int  ctx_term_signal_installed = 0;   /* XXX: global state */
+
+static const char *mouse_modes[]=
+{TERMINAL_MOUSE_OFF,
+ TERMINAL_MOUSE_ON_BASIC,
+ TERMINAL_MOUSE_ON_DRAG,
+ TERMINAL_MOUSE_ON_FULL,
+ NULL};
+
+/* note that a nick can have multiple occurences, the labels
+ * should be kept the same for all occurences of a combination. */
+typedef struct NcKeyCode {
+  const char *nick;          /* programmers name for key (combo) */
+  const char *label;         /* utf8 label for key */
+  const char  sequence[10];  /* terminal sequence */
+} NcKeyCode;
+static const NcKeyCode keycodes[]={  
+
+  {"up",                  "↑",     "\033[A"},
+  {"down",                "↓",     "\033[B"},
+  {"right",               "→",     "\033[C"},
+  {"left",                "←",     "\033[D"},
+
+  {"shift-up",            "⇧↑",    "\033[1;2A"},
+  {"shift-down",          "⇧↓",    "\033[1;2B"},
+  {"shift-right",         "⇧→",    "\033[1;2C"},
+  {"shift-left",          "⇧←",    "\033[1;2D"},
+
+  {"alt-up",              "^↑",    "\033[1;3A"},
+  {"alt-down",            "^↓",    "\033[1;3B"},
+  {"alt-right",           "^→",    "\033[1;3C"},
+  {"alt-left",            "^←",    "\033[1;3D"},
+
+  {"alt-shift-up",        "alt-s↑", "\033[1;4A"},
+  {"alt-shift-down",      "alt-s↓", "\033[1;4B"},
+  {"alt-shift-right",     "alt-s→", "\033[1;4C"},
+  {"alt-shift-left",      "alt-s←", "\033[1;4D"},
+
+  {"control-up",          "^↑",    "\033[1;5A"},
+  {"control-down",        "^↓",    "\033[1;5B"},
+  {"control-right",       "^→",    "\033[1;5C"},
+  {"control-left",        "^←",    "\033[1;5D"},
+
+  /* putty */
+  {"control-up",          "^↑",    "\033OA"},
+  {"control-down",        "^↓",    "\033OB"},
+  {"control-right",       "^→",    "\033OC"},
+  {"control-left",        "^←",    "\033OD"},
+
+  {"control-shift-up",    "^⇧↑",   "\033[1;6A"},
+  {"control-shift-down",  "^⇧↓",   "\033[1;6B"},
+  {"control-shift-right", "^⇧→",   "\033[1;6C"},
+  {"control-shift-left",  "^⇧←",   "\033[1;6D"},
+
+  {"control-up",          "^↑",    "\033Oa"},
+  {"control-down",        "^↓",    "\033Ob"},
+  {"control-right",       "^→",    "\033Oc"},
+  {"control-left",        "^←",    "\033Od"},
+
+  {"shift-up",            "⇧↑",    "\033[a"},
+  {"shift-down",          "⇧↓",    "\033[b"},
+  {"shift-right",         "⇧→",    "\033[c"},
+  {"shift-left",          "⇧←",    "\033[d"},
+
+  {"insert",              "ins",   "\033[2~"},
+  {"delete",              "del",   "\033[3~"},
+  {"page-up",             "PgUp",  "\033[5~"},
+  {"page-down",           "PdDn",  "\033[6~"},
+  {"home",                "Home",  "\033OH"},
+  {"end",                 "End",   "\033OF"},
+  {"home",                "Home",  "\033[H"},
+  {"end",                 "End",   "\033[F"},
+  {"control-delete",      "^del",  "\033[3;5~"},
+  {"shift-delete",        "⇧del",  "\033[3;2~"},
+  {"control-shift-delete","^⇧del", "\033[3;6~"},
+
+  {"F1",        "F1",  "\033[10~"},
+  {"F2",        "F2",  "\033[11~"},
+  {"F3",        "F3",  "\033[12~"},
+  {"F4",        "F4",  "\033[13~"},
+  {"F1",        "F1",  "\033OP"},
+  {"F2",        "F2",  "\033OQ"},
+  {"F3",        "F3",  "\033OR"},
+  {"F4",        "F4",  "\033OS"},
+  {"F5",        "F5",  "\033[15~"},
+  {"F6",        "F6",  "\033[16~"},
+  {"F7",        "F7",  "\033[17~"},
+  {"F8",        "F8",  "\033[18~"},
+  {"F9",        "F9",  "\033[19~"},
+  {"F9",        "F9",  "\033[20~"},
+  {"F10",       "F10", "\033[21~"},
+  {"F11",       "F11", "\033[22~"},
+  {"F12",       "F12", "\033[23~"},
+  {"tab",       "↹",     {9, '\0'}},
+  {"shift-tab", "shift+↹",  "\033[Z"},
+  {"backspace", "⌫",  {127, '\0'}},
+  {"space",     "␣",   " "},
+  {"esc",        "␛",  "\033"},
+  {"return",    "⏎",  {10,0}},
+  {"return",    "⏎",  {13,0}},
+  /* this section could be autogenerated by code */
+  {"control-a", "^A",  {1,0}},
+  {"control-b", "^B",  {2,0}},
+  {"control-c", "^C",  {3,0}},
+  {"control-d", "^D",  {4,0}},
+  {"control-e", "^E",  {5,0}},
+  {"control-f", "^F",  {6,0}},
+  {"control-g", "^G",  {7,0}},
+  {"control-h", "^H",  {8,0}}, /* backspace? */
+  {"control-i", "^I",  {9,0}}, /* tab */
+  {"control-j", "^J",  {10,0}},
+  {"control-k", "^K",  {11,0}},
+  {"control-l", "^L",  {12,0}},
+  {"control-n", "^N",  {14,0}},
+  {"control-o", "^O",  {15,0}},
+  {"control-p", "^P",  {16,0}},
+  {"control-q", "^Q",  {17,0}},
+  {"control-r", "^R",  {18,0}},
+  {"control-s", "^S",  {19,0}},
+  {"control-t", "^T",  {20,0}},
+  {"control-u", "^U",  {21,0}},
+  {"control-v", "^V",  {22,0}},
+  {"control-w", "^W",  {23,0}},
+  {"control-x", "^X",  {24,0}},
+  {"control-y", "^Y",  {25,0}},
+  {"control-z", "^Z",  {26,0}},
+  {"alt-0",     "%0",  "\0330"},
+  {"alt-1",     "%1",  "\0331"},
+  {"alt-2",     "%2",  "\0332"},
+  {"alt-3",     "%3",  "\0333"},
+  {"alt-4",     "%4",  "\0334"},
+  {"alt-5",     "%5",  "\0335"},
+  {"alt-6",     "%6",  "\0336"},
+  {"alt-7",     "%7",  "\0337"}, /* backspace? */
+  {"alt-8",     "%8",  "\0338"},
+  {"alt-9",     "%9",  "\0339"},
+  {"alt-+",     "%+",  "\033+"},
+  {"alt--",     "%-",  "\033-"},
+  {"alt-/",     "%/",  "\033/"},
+  {"alt-a",     "%A",  "\033a"},
+  {"alt-b",     "%B",  "\033b"},
+  {"alt-c",     "%C",  "\033c"},
+  {"alt-d",     "%D",  "\033d"},
+  {"alt-e",     "%E",  "\033e"},
+  {"alt-f",     "%F",  "\033f"},
+  {"alt-g",     "%G",  "\033g"},
+  {"alt-h",     "%H",  "\033h"}, /* backspace? */
+  {"alt-i",     "%I",  "\033i"},
+  {"alt-j",     "%J",  "\033j"},
+  {"alt-k",     "%K",  "\033k"},
+  {"alt-l",     "%L",  "\033l"},
+  {"alt-n",     "%N",  "\033m"},
+  {"alt-n",     "%N",  "\033n"},
+  {"alt-o",     "%O",  "\033o"},
+  {"alt-p",     "%P",  "\033p"},
+  {"alt-q",     "%Q",  "\033q"},
+  {"alt-r",     "%R",  "\033r"},
+  {"alt-s",     "%S",  "\033s"},
+  {"alt-t",     "%T",  "\033t"},
+  {"alt-u",     "%U",  "\033u"},
+  {"alt-v",     "%V",  "\033v"},
+  {"alt-w",     "%W",  "\033w"},
+  {"alt-x",     "%X",  "\033x"},
+  {"alt-y",     "%Y",  "\033y"},
+  {"alt-z",     "%Z",  "\033z"},
+  {"shift-tab", "shift-↹", {27, 9, 0}},
+  /* Linux Console  */
+  {"home",      "Home", "\033[1~"},
+  {"end",       "End",  "\033[4~"},
+  {"F1",        "F1",   "\033[[A"},
+  {"F2",        "F2",   "\033[[B"},
+  {"F3",        "F3",   "\033[[C"},
+  {"F4",        "F4",   "\033[[D"},
+  {"F5",        "F5",   "\033[[E"},
+  {"F6",        "F6",   "\033[[F"},
+  {"F7",        "F7",   "\033[[G"},
+  {"F8",        "F8",   "\033[[H"},
+  {"F9",        "F9",   "\033[[I"},
+  {"F10",       "F10",  "\033[[J"},
+  {"F11",       "F11",  "\033[[K"},
+  {"F12",       "F12",  "\033[[L"}, 
+  {"ok",        "",     "\033[0n"},
+  {NULL, }
+};
+
+static struct termios orig_attr;    /* in order to restore at exit */
+static int    nc_is_raw = 0;
+static int    atexit_registered = 0;
+static int    mouse_mode = NC_MOUSE_NONE;
+
+static void _nc_noraw (void)
+{
+  if (nc_is_raw && tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr) != -1)
+    nc_is_raw = 0;
+}
+
+void
+nc_at_exit (void)
+{
+  printf (TERMINAL_MOUSE_OFF);
+  printf (XTERM_ALTSCREEN_OFF);
+  _nc_noraw();
+  fprintf (stdout, "\e[?25h");
+  //if (ctx_native_events)
+  fprintf (stdout, "\e[?201l");
+  fprintf (stdout, "\e[?1049l");
+}
+
+static const char *mouse_get_event_int (Ctx *n, int *x, int *y)
+{
+  static int prev_state = 0;
+  const char *ret = "pm";
+  float relx, rely;
+  signed char buf[3];
+  read (n->mouse_fd, buf, 3);
+  relx = buf[1];
+  rely = -buf[2];
+
+  n->mouse_x += (int)(relx * 0.1f);
+  n->mouse_y += (int)(rely * 0.1f);
+
+  if (n->mouse_x < 1) n->mouse_x = 1;
+  if (n->mouse_y < 1) n->mouse_y = 1;
+  if (n->mouse_x >= n->width)  n->mouse_x = n->width;
+  if (n->mouse_y >= n->height) n->mouse_y = n->height;
+
+  if (x) *x = n->mouse_x;
+  if (y) *y = n->mouse_y;
+
+  if ((prev_state & 1) != (buf[0] & 1))
+    {
+      if (buf[0] & 1) ret = "pp";
+    }
+  else if (buf[0] & 1)
+    ret = "pd";
+
+  if ((prev_state & 2) != (buf[0] & 2))
+    {
+      if (buf[0] & 2) ret = "mouse2-press";
+    }
+  else if (buf[0] & 2)
+    ret = "mouse2-drag";
+
+  if ((prev_state & 4) != (buf[0] & 4))
+    {
+      if (buf[0] & 4) ret = "mouse1-press";
+    }
+  else if (buf[0] & 4)
+    ret = "mouse1-drag";
+
+  prev_state = buf[0];
+  return ret;
+}
+
+static const char *mev_type = NULL;
+static int         mev_x = 0;
+static int         mev_y = 0;
+static int         mev_q = 0;
+
+static const char *mouse_get_event (Ctx  *n, int *x, int *y)
+{
+  if (!mev_q)
+    return NULL;
+  *x = mev_x;
+  *y = mev_y;
+  mev_q = 0;
+  return mev_type;
+}
+
+static int mouse_has_event (Ctx *n)
+{
+  struct timeval tv;
+  int retval;
+
+  if (mouse_mode == NC_MOUSE_NONE)
+    return 0;
+
+  if (mev_q)
+    return 1;
+
+  if (n->mouse_fd == 0)
+    return 0;
+  return 0;
+
+  {
+    fd_set rfds;
+    FD_ZERO (&rfds);
+    FD_SET(n->mouse_fd, &rfds);
+    tv.tv_sec = 0; tv.tv_usec = 0;
+    retval = select (n->mouse_fd+1, &rfds, NULL, NULL, &tv);
+  }
+
+  if (retval != 0)
+    {
+      int nx = 0, ny = 0;
+      const char *type = mouse_get_event_int (n, &nx, &ny);
+
+      if ((mouse_mode < NC_MOUSE_DRAG && mev_type && !strcmp (mev_type, "drag")) ||
+          (mouse_mode < NC_MOUSE_ALL && mev_type && !strcmp (mev_type, "motion")))
+        {
+          mev_q = 0;
+          return mouse_has_event (n);
+        }
+
+      if ((mev_type && !strcmp (type, mev_type) && !strcmp (type, "pm")) ||
+         (mev_type && !strcmp (type, mev_type) && !strcmp (type, "mouse1-drag")) ||
+         (mev_type && !strcmp (type, mev_type) && !strcmp (type, "mouse2-drag")))
+        {
+          if (nx == mev_x && ny == mev_y)
+          {
+            mev_q = 0;
+            return mouse_has_event (n);
+          }
+        }
+      mev_x = nx;
+      mev_y = ny;
+      mev_type = type;
+      mev_q = 1;
+    }
+  return retval != 0;
+}
+
+
+static int _nc_raw (void)
+{
+  struct termios raw;
+  if (!isatty (STDIN_FILENO))
+    return -1;
+  if (!atexit_registered)
+    {
+      //atexit (nc_at_exit);
+      atexit_registered = 1;
+    }
+  if (tcgetattr (STDIN_FILENO, &orig_attr) == -1)
+    return -1;
+  raw = orig_attr;  /* modify the original mode */
+  raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+  raw.c_oflag &= ~(OPOST);
+  raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return -1;
+  nc_is_raw = 1;
+#if !__COSMOPOLITAN__
+  tcdrain(STDIN_FILENO);
+  tcflush(STDIN_FILENO, 1);
+#endif
+  return 0;
+}
+
+static int match_keycode (const char *buf, int length, const NcKeyCode **ret)
+{
+  int i;
+  int matches = 0;
+
+  if (!strncmp (buf, "\033[M", MIN(length,3)))
+    {
+      if (length >= 6)
+        return 9001;
+      return 2342;
+    }
+  for (i = 0; keycodes[i].nick; i++)
+    if (!strncmp (buf, keycodes[i].sequence, length))
+      {
+        matches ++;
+        if ((int)strlen (keycodes[i].sequence) == length && ret)
+          {
+            *ret = &keycodes[i];
+            return 1;
+          }
+      }
+  if (matches != 1 && ret)
+    *ret = NULL;
+  return matches==1?2:matches;
+}
+
+static void nc_resize_term (int  dummy)
+{
+  size_changed = 1;
+}
+
+int ctx_nct_has_event (Ctx  *n, int delay_ms)
+{
+  struct timeval tv;
+  int retval;
+  fd_set rfds;
+
+  if (size_changed)
+    return 1;
+  FD_ZERO (&rfds);
+  FD_SET (STDIN_FILENO, &rfds);
+  tv.tv_sec = 0; tv.tv_usec = delay_ms * 1000; 
+  retval = select (1, &rfds, NULL, NULL, &tv);
+  if (size_changed)
+    return 1;
+  return retval == 1 && retval != -1;
+}
+
+const char *ctx_nct_get_event (Ctx *n, int timeoutms, int *x, int *y)
+{
+  unsigned char buf[20];
+  int length;
+
+
+  if (x) *x = -1;
+  if (y) *y = -1;
+
+  if (!ctx_term_signal_installed)
+    {
+      _nc_raw ();
+      ctx_term_signal_installed = 1;
+      signal (SIGWINCH, nc_resize_term);
+    }
+  if (mouse_mode) // XXX too often to do it all the time!
+    printf("%s", mouse_modes[mouse_mode]);
+
+  {
+    int elapsed = 0;
+    int got_event = 0;
+
+    do {
+      if (size_changed)
+        {
+          size_changed = 0;
+          return "size-changed";
+        }
+      got_event = mouse_has_event (n);
+      if (!got_event)
+        got_event = ctx_nct_has_event (n, MIN(DELAY_MS, timeoutms-elapsed));
+      if (size_changed)
+        {
+          size_changed = 0;
+          return "size-changed";
+        }
+      /* only do this if the client has asked for idle events,
+       * and perhaps programmed the ms timer?
+       */
+      elapsed += MIN(DELAY_MS, timeoutms-elapsed);
+      if (!got_event && timeoutms && elapsed >= timeoutms)
+        return "idle";
+    } while (!got_event);
+  }
+
+  if (mouse_has_event (n))
+    return mouse_get_event (n, x, y);
+
+  for (length = 0; length < 10; length ++)
+    if (read (STDIN_FILENO, &buf[length], 1) != -1)
+      {
+        const NcKeyCode *match = NULL;
+
+        /* special case ESC, so that we can use it alone in keybindings */
+        if (length == 0 && buf[0] == 27)
+          {
+            struct timeval tv;
+            fd_set rfds;
+            FD_ZERO (&rfds);
+            FD_SET (STDIN_FILENO, &rfds);
+            tv.tv_sec = 0;
+            tv.tv_usec = 1000 * DELAY_MS;
+            if (select (1, &rfds, NULL, NULL, &tv) == 0)
+              return "esc";
+          }
+
+        switch (match_keycode ((const char*)buf, length + 1, &match))
+          {
+            case 1: /* unique match */
+              if (!match)
+                return NULL;
+              if (!strcmp(match->nick, "ok"))
+              {
+                ctx_frame_ack = 1;
+                return NULL;
+              }
+              return match->nick;
+              break;
+            case 9001: /* mouse event */
+              if (x) *x = ((unsigned char)buf[4]-32);
+              if (y) *y = ((unsigned char)buf[5]-32);
+              switch (buf[3])
+                {
+                        /* XXX : todo reduce this to less string constants */
+                  case 32:  return "pp";
+                  case 33:  return "mouse1-press";
+                  case 34:  return "mouse2-press";
+                  case 40:  return "alt-pp";
+                  case 41:  return "alt-mouse1-press";
+                  case 42:  return "alt-mouse2-press";
+                  case 48:  return "control-pp";
+                  case 49:  return "control-mouse1-press";
+                  case 50:  return "control-mouse2-press";
+                  case 56:  return "alt-control-pp";
+                  case 57:  return "alt-control-mouse1-press";
+                  case 58:  return "alt-control-mouse2-press";
+                  case 64:  return "pd";
+                  case 65:  return "mouse1-drag";
+                  case 66:  return "mouse2-drag";
+                  case 71:  return "pm"; /* shift+motion */
+                  case 72:  return "alt-pd";
+                  case 73:  return "alt-mouse1-drag";
+                  case 74:  return "alt-mouse2-drag";
+                  case 75:  return "pm"; /* alt+motion */
+                  case 80:  return "control-pd";
+                  case 81:  return "control-mouse1-drag";
+                  case 82:  return "control-mouse2-drag";
+                  case 83:  return "pm"; /* ctrl+motion */
+                  case 91:  return "pm"; /* ctrl+alt+motion */
+                  case 95:  return "pm"; /* ctrl+alt+shift+motion */
+                  case 96:  return "scroll-up";
+                  case 97:  return "scroll-down";
+                  case 100: return "shift-scroll-up";
+                  case 101: return "shift-scroll-down";
+                  case 104: return "alt-scroll-up";
+                  case 105: return "alt-scroll-down";
+                  case 112: return "control-scroll-up";
+                  case 113: return "control-scroll-down";
+                  case 116: return "control-shift-scroll-up";
+                  case 117: return "control-shift-scroll-down";
+                  case 35: /* (or release) */
+                  case 51: /* (or ctrl-release) */
+                  case 43: /* (or alt-release) */
+                  case 67: return "pm";
+                           /* have a separate pd ? */
+                  default: {
+                             static char rbuf[100];
+                             sprintf (rbuf, "mouse (unhandled state: %i)", buf[3]);
+                             return rbuf;
+                           }
+                }
+            case 0: /* no matches, bail*/
+              { 
+                static char ret[256];
+                if (length == 0 && ctx_utf8_len (buf[0])>1) /* single unicode
+                                                               char */
+                  {
+                    int n_read = 
+                    read (STDIN_FILENO, &buf[length+1], ctx_utf8_len(buf[0])-1);
+                    if (n_read)
+                    {
+                      buf[ctx_utf8_len(buf[0])]=0;
+                      strcpy (ret, (const char*)buf);
+                    }
+                    return ret;
+                  }
+                if (length == 0) /* ascii */
+                  {
+                    buf[1]=0;
+                    strcpy (ret, (const char*)buf);
+                    return ret;
+                  }
+                sprintf (ret, "unhandled %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c'",
+                  length>=0? buf[0]: 0, length>=0? buf[0]>31?buf[0]:'?': ' ', 
+                  length>=1? buf[1]: 0, length>=1? buf[1]>31?buf[1]:'?': ' ', 
+                  length>=2? buf[2]: 0, length>=2? buf[2]>31?buf[2]:'?': ' ', 
+                  length>=3? buf[3]: 0, length>=3? buf[3]>31?buf[3]:'?': ' ',
+                  length>=4? buf[4]: 0, length>=4? buf[4]>31?buf[4]:'?': ' ',
+                  length>=5? buf[5]: 0, length>=5? buf[5]>31?buf[5]:'?': ' ',
+                  length>=6? buf[6]: 0, length>=6? buf[6]>31?buf[6]:'?': ' ');
+                return ret;
+              }
+              return NULL;
+            default: /* continue */
+              break;
+          }
+      }
+    else
+      return "key read eek";
+  return "fail";
+}
+
+void ctx_nct_consume_events (Ctx *ctx)
+{
+  int ix, iy;
+  CtxCtx *ctxctx = (CtxCtx*)ctx->backend;
+  const char *event = NULL;
+
+  do {
+    float x, y;
+    event = ctx_nct_get_event (ctx, 50, &ix, &iy);
+
+    x = (ix - 1.0f + 0.5f) / ctxctx->cols * ctx->width;
+    y = (iy - 1.0f)        / ctxctx->rows * ctx->height;
+
+    if (!strcmp (event, "pp"))
+    {
+      ctx_pointer_press (ctx, x, y, 0, 0);
+      ctxctx->was_down = 1;
+    } else if (!strcmp (event, "pr"))
+    {
+      ctx_pointer_release (ctx, x, y, 0, 0);
+      ctxctx->was_down = 0;
+    } else if (!strcmp (event, "pm"))
+    {
+      //nct_set_cursor_pos (backend->term, ix, iy);
+      //nct_flush (backend->term);
+      if (ctxctx->was_down)
+      {
+        ctx_pointer_release (ctx, x, y, 0, 0);
+        ctxctx->was_down = 0;
+      }
+      ctx_pointer_motion (ctx, x, y, 0, 0);
+    } else if (!strcmp (event, "pd"))
+    {
+      ctx_pointer_motion (ctx, x, y, 0, 0);
+    } else if (!strcmp (event, "size-changed"))
+    {
+#if 0
+      int width = nct_sys_terminal_width ();
+      int height = nct_sys_terminal_height ();
+      nct_set_size (backend->term, width, height);
+      width *= CPX;
+      height *= CPX;
+      ctx_free (mrg->glyphs);
+      ctx_free (mrg->styles);
+      ctx_free (backend->nct_pixels);
+      backend->nct_pixels = ctx_calloc (width * height * 4, 1);
+      mrg->glyphs = ctx_calloc ((width/CPX) * (height/CPX) * 4, 1);
+      mrg->styles = ctx_calloc ((width/CPX) * (height/CPX) * 1, 1);
+      mrg_set_size (mrg, width, height);
+      mrg_queue_draw (mrg, NULL);
+#endif
+      //if (ctx_backend_is_ctx (ctx))
+#if 0
+      {
+        int width = ctx_terminal_width ();
+        int height = ctx_terminal_height ();
+        ctx_set_size (ctx, width, height);
+      }
+#endif
+
+    }
+    else
+    {
+      if (!strcmp (event, "esc"))
+        ctx_key_press (ctx, 0, "escape", 0);
+      else if (!strcmp (event, "space"))
+        ctx_key_press (ctx, 0, "space", 0);
+      else if (!strcmp (event, "enter"))
+        ctx_key_press (ctx, 0, "\n", 0);
+      else if (!strcmp (event, "return"))
+        ctx_key_press (ctx, 0, "return", 0);
+      else if (!strcmp (event, "idle"))
+      {
+        event = NULL;
+      }
+      else
+      ctx_key_press (ctx, 0, event, 0);
+    }
+  }  while (event);
+}
+
+const char *ctx_native_get_event (Ctx *n, int timeoutms)
+{
+  static unsigned char buf[256];
+  int length;
+
+  if (!ctx_term_signal_installed)
+    {
+      _nc_raw ();
+      ctx_term_signal_installed = 1;
+      signal (SIGWINCH, nc_resize_term);
+    }
+//if (mouse_mode) // XXX too often to do it all the time!
+//  printf("%s", mouse_modes[mouse_mode]);
+
+    int got_event = 0;
+  {
+    int elapsed = 0;
+
+    do {
+      if (size_changed)
+        {
+          size_changed = 0;
+          return "size-changed";
+        }
+      got_event = ctx_nct_has_event (n, MIN(DELAY_MS, timeoutms-elapsed));
+      if (size_changed)
+        {
+          size_changed = 0;
+          return "size-changed";
+        }
+      /* only do this if the client has asked for idle events,
+       * and perhaps programmed the ms timer?
+       */
+      elapsed += MIN(DELAY_MS, timeoutms-elapsed);
+      if (!got_event && timeoutms && elapsed >= timeoutms)
+      {
+        return "idle";
+      }
+    } while (!got_event);
+  }
+
+  for (length = 0; got_event && length < 200; length ++)
+  {
+    if (read (STDIN_FILENO, &buf[length], 1) != -1)
+      {
+         buf[length+1] = 0;
+         if (!strcmp ((char*)buf, "\e[0n"))
+         {
+           ctx_frame_ack = 1;
+           return NULL;
+         }
+         else if (buf[length]=='\n')
+         {
+           buf[length]=0;
+           return (const char*)buf;
+         }
+      }
+      got_event = ctx_nct_has_event (n, 5);
+    }
+  return NULL;
+}
+
+const char *ctx_key_get_label (Ctx  *n, const char *nick)
+{
+  int j;
+  int found = -1;
+  for (j = 0; keycodes[j].nick; j++)
+    if (found == -1 && !strcmp (keycodes[j].nick, nick))
+      return keycodes[j].label;
+  return NULL;
+}
+
+void _ctx_mouse (Ctx *term, int mode)
+{
+  //if (term->is_st && mode > 1)
+  //  mode = 1;
+  if (mode != mouse_mode)
+  {
+    printf ("%s", mouse_modes[mode]);
+    fflush (stdout);
+  }
+  mouse_mode = mode;
+}
+
+
+#endif
+
+#if !__COSMOPOLITAN__
+#include <sys/time.h>
+#endif
+
+#ifdef EMSCRIPTEN
+#include "emscripten.h"
+#endif
+
+#define usecs(time)    ((uint64_t)(time.tv_sec - start_time.tv_sec) * 1000000 + time.     tv_usec)
+
+#if !__COSMOPOLITAN__
+static struct timeval start_time;
+
+static void
+_ctx_init_ticks (void)
+{
+  static int done = 0;
+  if (done)
+    return;
+  done = 1;
+  gettimeofday (&start_time, NULL);
+}
+
+static inline unsigned long
+_ctx_ticks (void)
+{
+  struct timeval measure_time;
+  gettimeofday (&measure_time, NULL);
+  return usecs (measure_time) - usecs (start_time);
+}
+
+CTX_EXPORT unsigned long
+ctx_ticks (void)
+{
+  _ctx_init_ticks ();
+  return _ctx_ticks ();
+}
+
+
+
+int _ctx_enable_hash_cache = 1;
+#if CTX_SHAPE_CACHE
+extern int _ctx_shape_cache_enabled;
+#endif
+
+#if CTX_THREADS
+static mtx_t _ctx_texture_mtx;
+int _ctx_max_threads = 1;
+#endif
+
+void _ctx_texture_lock (void)
+{
+#if CTX_THREADS
+  mtx_lock (&_ctx_texture_mtx);
+#endif
+}
+
+void _ctx_texture_unlock (void)
+{
+#if CTX_THREADS
+  mtx_unlock (&_ctx_texture_mtx);
+#endif
+}
+
+void
+ctx_init (int *argc, char ***argv)
+{
+#if 0
+  const char *backend = getenv ("CTX_BACKEND");
+  if (!backend || ctx_strcmp (backend, "ctx"))
+  {
+    int i;
+    char *new_argv[*argc+5];
+    new_argv[0] = "ctx";
+    new_argv[1] = "-e";
+    new_argv[2] = "--";
+    for (i = 0; i < *argc; i++)
+    {
+      new_argv[i+3] = *argv[i];
+    }
+    new_argv[i+3] = NULL;
+    execvp (new_argv[0], new_argv);
+  }
+#endif
+}
+
+#if 0
+int ctx_count (Ctx *ctx)
+{
+  return ctx->drawlist.count;
+}
+#endif
+
+extern int _ctx_damage_control;
+
+
+#if CTX_EVENTS
+
+void ctx_list_backends(void)
+{
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "possible values for CTX_BACKEND:\n");
+    fprintf (stderr, " ctx");
+#if CTX_SDL
+    fprintf (stderr, " SDL");
+#endif
+#if CTX_KMS
+    fprintf (stderr, " kms");
+#endif
+#if CTX_FB
+    fprintf (stderr, " fb");
+#endif
+#if CTX_TERMINAL_EVENTS
+    fprintf (stderr, " term");
+    fprintf (stderr, " termimg");
+#endif
+    fprintf (stderr, "\n");
+#endif
+}
+
+static uint32_t ctx_ms (Ctx *ctx)
+{
+  return _ctx_ticks () / 1000;
+}
+
+#if CTX_TERMINAL_EVENTS
+
+static int is_in_ctx (void)
+{
+  char buf[1024];
+  struct termios orig_attr;
+  struct termios raw;
+  tcgetattr (STDIN_FILENO, &orig_attr);
+  raw = orig_attr;
+  raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+  raw.c_oflag &= ~(OPOST);
+  raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return 0;
+  fprintf (stderr, "\e[?200$p");
+  //tcflush(STDIN_FILENO, 1);
+#if !__COSMOPOLITAN__
+  tcdrain(STDIN_FILENO);
+#endif
+  int length = 0;
+  usleep (1000 * 60); // to account for possibly lowish latency ssh,
+                      // should be made configurable ; perhaps in
+                      // an env var
+  struct timeval tv = {0,0};
+  fd_set rfds;
+  
+  FD_ZERO(&rfds);
+  FD_SET(0, &rfds);
+  tv.tv_usec = 1000 * 5;
+
+  for (int n = 0; select(1, &rfds, NULL, NULL, &tv) && n < 20; n++)
+  {
+    length += read (STDIN_FILENO, &buf[length], 1);
+  }
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr);
+  if (length == -1)
+  {
+    return 0;
+  }
+  char *semi = strchr (buf, ';');
+  buf[length]=0;
+  if (semi &&  semi[1] == '2')
+  {
+    return 1;
+  }
+  return 0;
+}
+#endif
+
+#if EMSCRIPTEN
+
+CTX_EXPORT Ctx *
+ctx_wasm_get_context (int flags);
+
+static Ctx *ctx_new_ui (int width, int height, const char *backend)
+{
+   return ctx_wasm_get_context (CTX_FLAG_HASH_CACHE);
+}
+#else
+
+static Ctx *ctx_new_ui (int width, int height, const char *backend)
+{
+#if CTX_TILED
+  if (getenv ("CTX_DAMAGE_CONTROL"))
+  {
+    const char * val = getenv ("CTX_DAMAGE_CONTROL");
+    if (!ctx_strcmp (val, "0") ||
+        !ctx_strcmp (val, "off"))
+      _ctx_damage_control = 0;
+    else
+      _ctx_damage_control = 1;
+  }
+#endif
+
+#if CTX_BAREMETAL==0
+  if (getenv ("CTX_HASH_CACHE"))
+  {
+    const char * val = getenv ("CTX_HASH_CACHE");
+    if (!ctx_strcmp (val, "0"))
+      _ctx_enable_hash_cache = 0;
+    if (!ctx_strcmp (val, "off"))
+      _ctx_enable_hash_cache = 0;
+  }
+#endif
+
+#if CTX_THREADS
+  if (getenv ("CTX_THREADS"))
+  {
+    int val = atoi (getenv ("CTX_THREADS"));
+    _ctx_max_threads = val;
+  }
+  else
+  {
+    _ctx_max_threads = 2;
+#ifdef _SC_NPROCESSORS_ONLN
+    _ctx_max_threads = sysconf (_SC_NPROCESSORS_ONLN) / 2;
+#endif
+  }
+  
+  mtx_init (&_ctx_texture_mtx, mtx_plain);
+
+  if (_ctx_max_threads < 1) _ctx_max_threads = 1;
+  if (_ctx_max_threads > CTX_MAX_THREADS) _ctx_max_threads = CTX_MAX_THREADS;
+#endif
+
+#if CTX_BAREMETAL==0
+  //fprintf (stderr, "ctx using %i threads\n", _ctx_max_threads);
+  if (!backend)
+    backend = getenv ("CTX_BACKEND");
+#endif
+
+  if (backend && !ctx_strcmp (backend, ""))
+    backend = NULL;
+  if (backend && !ctx_strcmp (backend, "auto"))
+    backend = NULL;
+  if (backend && !ctx_strcmp (backend, "list"))
+  {
+    ctx_list_backends ();
+    exit (-1);
+  }
+
+  Ctx *ret = NULL;
+#if CTX_TERMINAL_EVENTS
+  /* we do the query on auto but not on directly set ctx
+   *
+   */
+  if ((backend && !ctx_strcmp(backend, "ctx")) ||
+      (backend == NULL && is_in_ctx ()))
+  {
+    if (!backend || !ctx_strcmp (backend, "ctx"))
+    {
+      // full blown ctx protocol - in terminal or standalone
+      ret = ctx_new_ctx (width, height);
+    }
+  }
+#endif
+
+#if CTX_TERMINAL_EVENTS
+#if CTX_HEADLESS
+  if (!ret)
+    {
+      if (backend && !ctx_strcmp (backend, "headless"))
+        ret = ctx_new_headless (width, height);
+    }
+#endif
+#endif
+
+#if CTX_SDL
+  if (!ret && getenv ("DISPLAY"))
+  {
+    if ((backend==NULL) || (!ctx_strcmp (backend, "SDL")))
+      ret = ctx_new_sdl (width, height);
+  }
+#endif
+
+#if CTX_KMS
+  if (!ret && !getenv ("DISPLAY"))
+  {
+    if ((backend==NULL) || (!ctx_strcmp (backend, "kms")))
+      ret = ctx_new_kms (width, height);
+  }
+#endif
+
+
+#if CTX_FB
+  if (!ret && !getenv ("DISPLAY"))
+    {
+      if ((backend==NULL) || (!ctx_strcmp (backend, "fb")))
+        ret = ctx_new_fb (width, height);
+    }
+#endif
+
+#if CTX_TERMINAL_EVENTS
+#if CTX_RASTERIZER
+  // braille in terminal
+  if (!ret)
+  {
+    if ((backend==NULL) || (!ctx_strcmp (backend, "term")))
+    ret = ctx_new_term (width, height);
+  }
+  if (!ret)
+  {
+    if ((backend==NULL) || (!ctx_strcmp (backend, "termimg")))
+    ret = ctx_new_termimg (width, height);
+  }
+#endif
+#endif
+  if (!ret)
+  {
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "no interactive ctx backend\n");
+#endif
+    ctx_list_backends ();
+    exit (2);
+  }
+  ctx_get_event (ret); // enables events
+  return ret;
+}
+#endif
+#endif
+#else
+void _ctx_texture_unlock (void)
+{
+}
+void _ctx_texture_lock (void)
+{
+}
+
+#endif
+void _ctx_resized (Ctx *ctx, int width, int height, long time);
+
+void ctx_set_size (Ctx *ctx, int width, int height)
+{
+  if (ctx->width != width || ctx->height != height)
+  {
+    ctx->width = width;
+    ctx->height = height;
+    switch (ctx_backend_type (ctx))
+    {
+      case CTX_BACKEND_CTX:
+      case CTX_BACKEND_TERM:
+      case CTX_BACKEND_TERMIMG:
+        {CtxCtx *ctxctx = (CtxCtx*)ctx->backend;
+         ctxctx->width = width;
+         ctxctx->height = height;
+        }
+        break;
+      default: break;
+    }
+#if CTX_EVENTS
+    _ctx_resized (ctx, width, height, 0);
+#endif
+  }
+}
+
+#if CTX_EVENTS
+
+typedef struct CtxIdleCb {
+  int (*cb) (Ctx *ctx, void *idle_data);
+  void *idle_data;
+
+  void (*destroy_notify)(void *destroy_data);
+  void *destroy_data;
+
+  int   ticks_full;
+  int   ticks_remaining;
+  int   is_idle;
+  int   id;
+} CtxIdleCb;
+
+void _ctx_events_init (Ctx *ctx)
+{
+  CtxEvents *events = &ctx->events;
+  _ctx_init_ticks ();
+  events->tap_delay_min  = 40;
+  events->tap_delay_max  = 800;
+  events->tap_delay_max  = 8000000; /* quick reflexes needed making it hard for some is an argument against very short values  */
+
+  events->tap_delay_hold = 1000;
+  events->tap_hysteresis = 32;  /* XXX: should be ppi dependent */
+}
+
+
+void _ctx_idle_iteration (Ctx *ctx)
+{
+  static unsigned long prev_ticks = 0;
+  CtxList *l;
+  unsigned long ticks = ctx_ticks ();
+  long tick_delta = (prev_ticks == 0) ? 0 : ticks - prev_ticks;
+  prev_ticks = ticks;
+
+
+  if (!ctx->events.idles && !ctx->events.idles_to_add)
+  {
+#ifdef EMSCRIPTEN
+#ifdef ASYNCIFY
+    emscripten_sleep (10);
+#endif
+#endif
+    return;
+  }
+
+  ctx->events.in_idle_dispatch=1;
+
+  for (l = ctx->events.idles; l; l = l->next)
+  {
+    CtxIdleCb *item = l->data;
+
+    long rem = item->ticks_remaining;
+    if (item->ticks_remaining >= 0)
+    {
+      rem -= tick_delta;
+
+      item->ticks_remaining -= tick_delta / 100;
+
+    if (rem < 0)
+    {
+      int to_be_removed = 0;
+      for (CtxList *l2 = ctx->events.idles_to_remove; l2; l2=l2->next)
+      {
+        CtxIdleCb *item2 = l2->data;
+        if (item2 == item) to_be_removed = 1;
+      }
+      
+      if (!to_be_removed)
+      {
+      if (item->cb (ctx, item->idle_data) == 0)
+      {
+        ctx_list_prepend (&ctx->events.idles_to_remove, item);
+      }
+      else
+        item->ticks_remaining = item->ticks_full;
+      }
+    }
+    else
+        item->ticks_remaining = rem;
+    }
+    else
+    {
+      int to_be_removed = 0;
+      for (CtxList *l2 = ctx->events.idles_to_remove; l2; l2=l2->next)
+      {
+        CtxIdleCb *item2 = l2->data;
+        if (item2 == item) to_be_removed = 1;
+      }
+      
+      if (!to_be_removed)
+      {
+        if (item->cb (ctx, item->idle_data) == 0)
+        {
+          ctx_list_prepend (&ctx->events.idles_to_remove, item);
+        }
+        else
+          item->ticks_remaining = item->ticks_full;
+      }
+    }
+  }
+
+  while (ctx->events.idles_to_add)
+  {
+    CtxIdleCb *item = ctx->events.idles_to_add->data;
+    ctx_list_prepend (&ctx->events.idles, item);
+    ctx_list_remove (&ctx->events.idles_to_add, item);
+  }
+
+  while (ctx->events.idles_to_remove)
+  {
+    CtxIdleCb *item = ctx->events.idles_to_remove->data;
+    ctx_list_remove (&ctx->events.idles, item);
+    ctx_list_remove (&ctx->events.idles_to_remove, item);
+    if (item->destroy_notify)
+      item->destroy_notify (item->destroy_data);
+  }
+  ctx->events.in_idle_dispatch=0;
+#if EMSCRIPTEN
+#ifdef ASYNCIFY
+   emscripten_sleep(1);
+#endif
+#endif
+}
+
+
+void ctx_add_key_binding_full (Ctx *ctx,
+                           const char *key,
+                           const char *action,
+                           const char *label,
+                           CtxCb       cb,
+                           void       *cb_data,
+                           CtxDestroyNotify destroy_notify,
+                           void       *destroy_data)
+{
+  CtxEvents *events = &ctx->events;
+  if (events->n_bindings +1 >= CTX_MAX_KEYBINDINGS)
+  {
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "warning: binding overflow\n");
+#endif
+    return;
+  }
+  events->bindings[events->n_bindings].nick = ctx_strdup (key);
+  strcpy (events->bindings[events->n_bindings].nick, key);
+
+  if (action)
+    events->bindings[events->n_bindings].command = action ? ctx_strdup (action) : NULL;
+  if (label)
+    events->bindings[events->n_bindings].label = label ? ctx_strdup (label) : NULL;
+  events->bindings[events->n_bindings].cb = cb;
+  events->bindings[events->n_bindings].cb_data = cb_data;
+  events->bindings[events->n_bindings].destroy_notify = destroy_notify;
+  events->bindings[events->n_bindings].destroy_data = destroy_data;
+  events->n_bindings++;
+}
+
+void ctx_add_key_binding (Ctx *ctx,
+                          const char *key,
+                          const char *action,
+                          const char *label,
+                          CtxCb       cb,
+                          void       *cb_data)
+{
+  ctx_add_key_binding_full (ctx, key, action, label, cb, cb_data, NULL, NULL);
+}
+
+void ctx_clear_bindings (Ctx *ctx)
+{
+  CtxEvents *events = &ctx->events;
+  int i;
+  for (i = 0; events->bindings[i].nick; i ++)
+  {
+    if (events->bindings[i].destroy_notify)
+      events->bindings[i].destroy_notify (events->bindings[i].destroy_data);
+    ctx_free (events->bindings[i].nick);
+    if (events->bindings[i].command)
+      ctx_free (events->bindings[i].command);
+    if (events->bindings[i].label)
+      ctx_free (events->bindings[i].label);
+  }
+  memset (&events->bindings, 0, sizeof (events->bindings));
+  events->n_bindings = 0;
+}
+
+static void
+ctx_collect_events (CtxEvent *event, void *data, void *data2);
+static void _ctx_bindings_key_press (CtxEvent *event, void *data1, void *data2)
+{
+  Ctx *ctx = event->ctx;
+  CtxEvents *events = &ctx->events;
+  int i;
+  int handled = 0;
+
+  for (i = events->n_bindings-1; i>=0; i--)
+    if (!ctx_strcmp (events->bindings[i].nick, event->string))
+    {
+      if (events->bindings[i].cb)
+      {
+        events->bindings[i].cb (event, events->bindings[i].cb_data, NULL);
+        if (event->stop_propagate)
+          return;
+        handled = 1;
+      }
+    }
+  if (!handled)
+  for (i = events->n_bindings-1; i>=0; i--)
+    if (!ctx_strcmp (events->bindings[i].nick, "any"))
+    {
+      if (events->bindings[i].cb)
+      {
+        events->bindings[i].cb (event, events->bindings[i].cb_data, NULL);
+        if (event->stop_propagate)
+          return;
+      }
+    }
+  ctx_collect_events (event, data1, data2);
+}
+
+CtxBinding *ctx_get_bindings (Ctx *ctx)
+{
+  return &ctx->events.bindings[0];
+}
+
+void ctx_remove_idle (Ctx *ctx, int handle)
+{
+  CtxList *l;
+  //CtxList *to_remove = NULL;
+
+  if (!ctx->events.idles)
+  {
+    return;
+  }
+
+  for (l = ctx->events.idles; l; l = l->next)
+  {
+    CtxIdleCb *item = l->data;
+    if (item->id == handle)
+    {
+      ctx_list_prepend (&ctx->events.idles_to_remove, item);
+    }
+  }
+
+  if (ctx->events.in_idle_dispatch)
+    return;
+
+  while (ctx->events.idles_to_remove)
+  {
+    CtxIdleCb *item = ctx->events.idles_to_remove->data;
+    ctx_list_remove (&ctx->events.idles, item);
+    ctx_list_remove (&ctx->events.idles_to_remove, item);
+    if (item->destroy_notify)
+      item->destroy_notify (item->destroy_data);
+  }
+}
+
+int ctx_add_timeout_full (Ctx *ctx, int ms, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data,
+                          void (*destroy_notify)(void *destroy_data), void *destroy_data)
+{
+  CtxIdleCb *item = ctx_calloc (sizeof (CtxIdleCb), 1);
+  item->cb              = idle_cb;
+  item->idle_data       = idle_data;
+  item->id              = ++ctx->events.idle_id;
+  item->ticks_full      = 
+  item->ticks_remaining = ms * 1000;
+  item->destroy_notify  = destroy_notify;
+  item->destroy_data    = destroy_data;
+  if (ctx->events.in_idle_dispatch)
+  ctx_list_append (&ctx->events.idles_to_add, item);
+  else
+  ctx_list_append (&ctx->events.idles, item);
+  return item->id;
+}
+
+int ctx_add_timeout (Ctx *ctx, int ms, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data)
+{
+  return ctx_add_timeout_full (ctx, ms, idle_cb, idle_data, NULL, NULL);
+}
+
+int ctx_add_idle_full (Ctx *ctx, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data,
+                                 void (*destroy_notify)(void *destroy_data), void *destroy_data)
+{
+  CtxIdleCb *item = ctx_calloc (sizeof (CtxIdleCb), 1);
+  item->cb = idle_cb;
+  item->idle_data = idle_data;
+  item->id = ++ctx->events.idle_id;
+  item->ticks_full =
+  item->ticks_remaining = -1;
+  item->is_idle = 1;
+  item->destroy_notify = destroy_notify;
+  item->destroy_data = destroy_data;
+  ctx_list_append (&ctx->events.idles, item);
+  return item->id;
+}
+
+int ctx_add_idle (Ctx *ctx, int (*idle_cb)(Ctx *ctx, void *idle_data), void *idle_data)
+{
+  return ctx_add_idle_full (ctx, idle_cb, idle_data, NULL, NULL);
+}
+
+#endif
+/* using bigger primes would be a good idea, this falls apart due to rounding
+ * when zoomed in close
+ */
+static inline double ctx_path_hash (void *path)
+{
+  double ret = 0;
+#if 0
+  int i;
+  cairo_path_data_t *data;
+  if (!path)
+    return 0.99999;
+  for (i = 0; i <path->num_data; i += path->data[i].header.length)
+  {
+    data = &path->data[i];
+    switch (data->header.type) {
+      case CAIRO_PATH_MOVE_TO:
+        ret *= 17;
+        ret += data[1].point.x;
+        ret *= 113;
+        ret += data[1].point.y;
+        break;
+      case CAIRO_PATH_LINE_TO:
+        ret *= 121;
+        ret += data[1].point.x;
+        ret *= 1021;
+        ret += data[1].point.y;
+        break;
+      case CAIRO_PATH_CURVE_TO:
+        ret *= 3111;
+        ret += data[1].point.x;
+        ret *= 23;
+        ret += data[1].point.y;
+        ret *= 107;
+        ret += data[2].point.x;
+        ret *= 739;
+        ret += data[2].point.y;
+        ret *= 3;
+        ret += data[3].point.x;
+        ret *= 51;
+        ret += data[3].point.y;
+        break;
+      case CAIRO_PATH_CLOSE_PATH:
+        ret *= 51;
+        break;
+    }
+  }
+#endif
+  return ret;
+}
+
+#if CTX_EVENTS
+void _ctx_item_ref (CtxItem *item)
+{
+  if (item->ref_count < 0)
+  {
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "EEEEK!\n");
+#endif
+  }
+  item->ref_count++;
+}
+
+
+void _ctx_item_unref (CtxItem *item)
+{
+  if (item->ref_count <= 0)
+  {
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "EEEEK!\n");
+#endif
+    return;
+  }
+  item->ref_count--;
+  if (item->ref_count <=0)
+  {
+    {
+      int i;
+      for (i = 0; i < item->cb_count; i++)
+      {
+        if (item->cb[i].finalize)
+          item->cb[i].finalize (item->cb[i].data1, item->cb[i].data2,
+                                   item->cb[i].finalize_data);
+      }
+    }
+    if (item->path)
+    {
+      ctx_free (item->path);
+      item->path = NULL;
+    }
+    ctx_free (item);
+  }
+}
+
+
+void _ctx_item_unref2 (void *data, void *data2)
+{
+  CtxItem *item = (CtxItem*)data;
+  _ctx_item_unref (item);
+}
+
+#if 0
+static int
+path_equal (void *path,
+            void *path2)
+{
+        return 0;
+  CtxDrawlist *a = (CtxDrawlist*)path;
+  CtxDrawlist *b = (CtxDrawlist*)path2;
+  if (!a && !b) return 1;
+  if (!a && b) return 0;
+  if (!b && a) return 0;
+  if (a->count != b->count)
+    return 0;
+  return memcmp (a->entries, b->entries, a->count * 9) == 0;
+}
+#endif
+
+void ctx_listen_set_cursor (Ctx      *ctx,
+                            CtxCursor cursor)
+{
+  if (ctx->events.last_item)
+  {
+    ctx->events.last_item->cursor = cursor;
+  }
+}
+
+void ctx_listen_full (Ctx     *ctx,
+                      float    x,
+                      float    y,
+                      float    width,
+                      float    height,
+                      CtxEventType  types,
+                      CtxCb    cb,
+                      void    *data1,
+                      void    *data2,
+                      void   (*finalize)(void *listen_data,
+                                         void *listen_data2,
+                                         void *finalize_data),
+                      void    *finalize_data)
+{
+  if (!ctx->events.frozen)
+  {
+    CtxItem *item;
+
+    /* early bail for listeners outside screen  */
+    /* XXX: fixme respect clipping */
+    {
+      float tx = x;
+      float ty = y;
+      float tw = width;
+      float th = height;
+      _ctx_user_to_device (&ctx->state, &tx, &ty);
+      _ctx_user_to_device_distance (&ctx->state, &tw, &th);
+      if (ty > ctx->height * 2 ||
+          tx > ctx->width * 2 ||
+          tx + tw < 0 ||
+          ty + th < 0)
+      {
+        if (finalize)
+          finalize (data1, data2, finalize_data);
+        return;
+      }
+    }
+
+    item = ctx_calloc (sizeof (CtxItem), 1);
+    item->x0 = x;
+    item->y0 = y;
+    item->x1 = x + width;
+    item->y1 = y + height;
+    item->cb[0].types = types;
+    item->cb[0].cb = cb;
+    item->cb[0].data1 = data1;
+    item->cb[0].data2 = data2;
+    item->cb[0].finalize = finalize;
+    item->cb[0].finalize_data = finalize_data;
+    item->cb_count = 1;
+    item->types = types;
+    item->path = ctx_current_path (ctx);
+    item->path_hash = ctx_path_hash (item->path);
+    ctx_get_matrix (ctx, &item->inv_matrix);
+    ctx_matrix_invert (&item->inv_matrix);
+
+#if 0
+    if (ctx->events.items)
+    {
+      CtxList *l;
+      for (l = ctx->events.items; l; l = l->next)
+      {
+        CtxItem *item2 = l->data;
+
+        /* store multiple callbacks for one entry when the paths
+         * are exact matches, reducing per event traversal checks at the
+         * cost of a little paint-hit (XXX: is this the right tradeoff,
+         * perhaps it is better to spend more time during event processing
+         * than during paint?)
+         */
+        if (item->path_hash == item2->path_hash &&
+            path_equal (item->path, item2->path))
+        {
+          /* found an item, copy over cb data  */
+          item2->cb[item2->cb_count] = item->cb[0];
+          ctx_free (item);
+          item2->cb_count++;
+          item2->types |= types;
+          return;
+        }
+      }
+    }
+#endif
+    item->ref_count       = 1;
+    ctx->events.last_item = item;
+    ctx_list_prepend_full (&ctx->events.items, item, _ctx_item_unref2, NULL);
+      return;
+  }
+}
+
+void ctx_event_stop_propagate (CtxEvent *event)
+{
+  if (event)
+    event->stop_propagate = 1;
+}
+
+void ctx_listen (Ctx          *ctx,
+                 CtxEventType  types,
+                 CtxCb         cb,
+                 void*         data1,
+                 void*         data2)
+{
+  float x, y, width, height;
+  /* generate bounding box of what to listen for - from current cairo path */
+  if (types & CTX_KEY)
+  {
+    x = 0;
+    y = 0;
+    width = 0;
+    height = 0;
+  }
+  else
+  {
+     float ex1,ey1,ex2,ey2;
+     ctx_path_extents (ctx, &ex1, &ey1, &ex2, &ey2);
+     x = ex1;
+     y = ey1;
+     width = ex2 - ex1;
+     height = ey2 - ey1;
+  }
+
+  if (types == CTX_DRAG_MOTION)
+    types = CTX_DRAG_MOTION | CTX_DRAG_PRESS;
+  return ctx_listen_full (ctx, x, y, width, height, types, cb, data1, data2, NULL, NULL);
+}
+
+void  ctx_listen_with_finalize (Ctx          *ctx,
+                                CtxEventType  types,
+                                CtxCb         cb,
+                                void*         data1,
+                                void*         data2,
+                      void   (*finalize)(void *listen_data, void *listen_data2,
+                                         void *finalize_data),
+                      void    *finalize_data)
+{
+  float x, y, width, height;
+  /* generate bounding box of what to listen for - from current cairo path */
+  if (types & CTX_KEY)
+  {
+    x = 0;
+    y = 0;
+    width = 0;
+    height = 0;
+  }
+  else
+  {
+     float ex1,ey1,ex2,ey2;
+     ctx_path_extents (ctx, &ex1, &ey1, &ex2, &ey2);
+     x = ex1;
+     y = ey1;
+     width = ex2 - ex1;
+     height = ey2 - ey1;
+  }
+
+  if (types == CTX_DRAG_MOTION)
+    types = CTX_DRAG_MOTION | CTX_DRAG_PRESS;
+  return ctx_listen_full (ctx, x, y, width, height, types, cb, data1, data2, finalize, finalize_data);
+}
+
+
+static void ctx_report_hit_region (CtxEvent *event,
+                       void     *data,
+                       void     *data2)
+{
+#if CTX_BAREMETAL==0
+  const char *id = data;
+
+  fprintf (stderr, "hit region %s\n", id);
+#endif
+  // XXX: NYI
+}
+
+void ctx_add_hit_region (Ctx *ctx, const char *id)
+{
+  char *id_copy = ctx_strdup (id);
+  float x, y, width, height;
+  /* generate bounding box of what to listen for - from current cairo path */
+  {
+     float ex1,ey1,ex2,ey2;
+     ctx_path_extents (ctx, &ex1, &ey1, &ex2, &ey2);
+     x = ex1;
+     y = ey1;
+     width = ex2 - ex1;
+     height = ey2 - ey1;
+  }
+  
+  return ctx_listen_full (ctx, x, y, width, height,
+                          CTX_POINTER, ctx_report_hit_region,
+                          id_copy, NULL, (void*)ctx_free, NULL);
+}
+
+typedef struct _CtxGrab CtxGrab;
+
+struct _CtxGrab
+{
+  CtxItem *item;
+  int      device_no;
+  int      timeout_id;
+  int      start_time;
+  float    x; // for tap and hold
+  float    y;
+  CtxEventType  type;
+};
+
+static void grab_free (Ctx *ctx, CtxGrab *grab)
+{
+  if (grab->timeout_id)
+  {
+    ctx_remove_idle (ctx, grab->timeout_id);
+    grab->timeout_id = 0;
+  }
+  _ctx_item_unref (grab->item);
+  ctx_free (grab);
+}
+
+static void device_remove_grab (Ctx *ctx, CtxGrab *grab)
+{
+  ctx_list_remove (&ctx->events.grabs, grab);
+  grab_free (ctx, grab);
+}
+
+static CtxGrab *device_add_grab (Ctx *ctx, int device_no, CtxItem *item, CtxEventType type)
+{
+  CtxGrab *grab = ctx_calloc (1, sizeof (CtxGrab));
+  grab->item = item;
+  grab->type = type;
+  _ctx_item_ref (item);
+  grab->device_no = device_no;
+  ctx_list_append (&ctx->events.grabs, grab);
+  return grab;
+}
+
+static CtxList *_ctx_device_get_grabs (Ctx *ctx, int device_no)
+{
+  CtxList *ret = NULL;
+  CtxList *l;
+  for (l = ctx->events.grabs; l; l = l->next)
+  {
+    CtxGrab *grab = l->data;
+    if (grab->device_no == device_no)
+      ctx_list_append (&ret, grab);
+  }
+  return ret;
+}
+
+static void _mrg_restore_path (Ctx *ctx, void *path)  //XXX
+{
+  CtxDrawlist *dl = (CtxDrawlist*)path;
+  if (!dl) return;
+
+  ctx_append_drawlist (ctx, dl->entries, dl->count*9);
+}
+
+CtxList *_ctx_detect_list (Ctx *ctx, float x, float y, CtxEventType type)
+{
+  CtxList *a;
+  CtxList *ret = NULL;
+
+  if (type == CTX_KEY_DOWN ||
+      type == CTX_KEY_UP ||
+      type == CTX_KEY_PRESS ||
+      type == CTX_MESSAGE ||
+      type == (CTX_KEY_DOWN|CTX_MESSAGE) ||
+      type == (CTX_KEY_DOWN|CTX_KEY_UP) ||
+      type == (CTX_KEY_DOWN|CTX_KEY_UP|CTX_MESSAGE))
+  {
+    for (a = ctx->events.items; a; a = a->next)
+    {
+      CtxItem *item = a->data;
+      if (item->types & type)
+      {
+        ctx_list_prepend (&ret, item);
+        return ret;
+      }
+    }
+    return NULL;
+  }
+
+  for (a = ctx->events.items; a; a = a->next)
+  {
+    CtxItem *item= a->data;
+  
+    float u, v;
+    u = x;
+    v = y;
+    _ctx_matrix_apply_transform (&item->inv_matrix, &u, &v);
+
+    if (u >= item->x0 && v >= item->y0 &&
+        u <  item->x1 && v <  item->y1 && 
+        ((item->types & type) || ((type == CTX_SET_CURSOR) &&
+        item->cursor)))
+    {
+      if (item->path)
+      {
+        _mrg_restore_path (ctx, item->path);
+        // XXX  - is this done on wrongly transformed coordinates?
+        if (ctx_in_fill (ctx, u, v))
+        {
+          ctx_list_prepend (&ret, item);
+        }
+        ctx_begin_path (ctx);
+      }
+      else
+      {
+        ctx_list_prepend (&ret, item);
+      }
+    }
+  }
+  return ret;
+}
+
+CtxItem *_ctx_detect (Ctx *ctx, float x, float y, CtxEventType type)
+{
+  CtxList *l = _ctx_detect_list (ctx, x, y, type);
+  if (l)
+  {
+    ctx_list_reverse (&l);
+    CtxItem *ret = l->data;
+    ctx_list_free (&l);
+    return ret;
+  }
+  return NULL;
+}
+
+static int
+_ctx_emit_cb_item (Ctx *ctx, CtxItem *item, CtxEvent *event, CtxEventType type, float x, float y)
+{
+  static CtxEvent s_event;
+  CtxEvent transformed_event;
+  int i;
+
+
+  if (!event)
+  {
+    event = &s_event;
+    event->type = type;
+    event->x = x;
+    event->y = y;
+  }
+  event->ctx = ctx;
+  transformed_event = *event;
+  transformed_event.device_x = event->x;
+  transformed_event.device_y = event->y;
+
+  {
+    float tx, ty;
+    tx = transformed_event.x;
+    ty = transformed_event.y;
+    _ctx_matrix_apply_transform (&item->inv_matrix, &tx, &ty);
+    transformed_event.x = tx;
+    transformed_event.y = ty;
+
+    if ((type & CTX_DRAG_PRESS) ||
+        (type & CTX_DRAG_MOTION) ||
+        (type & CTX_MOTION))   /* probably a worthwhile check for the performance 
+                                  benefit
+                                */
+    {
+      tx = transformed_event.start_x;
+      ty = transformed_event.start_y;
+      _ctx_matrix_apply_transform (&item->inv_matrix, &tx, &ty);
+      transformed_event.start_x = tx;
+      transformed_event.start_y = ty;
+    }
+
+
+    tx = transformed_event.delta_x;
+    ty = transformed_event.delta_y;
+    _ctx_matrix_apply_transform (&item->inv_matrix, &tx, &ty);
+    transformed_event.delta_x = tx;
+    transformed_event.delta_y = ty;
+  }
+
+  transformed_event.state = ctx->events.modifier_state;
+  transformed_event.type = type;
+
+  for (i = item->cb_count-1; i >= 0; i--)
+  {
+    if (item->cb[i].types & type)
+    {
+      item->cb[i].cb (&transformed_event, item->cb[i].data1, item->cb[i].data2);
+      event->stop_propagate = transformed_event.stop_propagate; /* copy back the response */
+      if (event->stop_propagate)
+        return event->stop_propagate;
+    }
+  }
+  return 0;
+}
+#endif
+
+#if CTX_EVENTS
+
+//#include <stdatomic.h>
+
+void ctx_consume_events (Ctx *ctx)
+{
+  CtxBackend *backend = ctx->backend;
+  if (backend && backend->consume_events)
+    backend->consume_events (ctx);
+}
+
+void ctx_stdin_get_event_fds (Ctx *ctx, int *fd, int *count)
+{
+  fd[0] = STDIN_FILENO;
+  *count = 1;
+}
+
+void ctx_get_event_fds (Ctx *ctx, int *fd, int *count)
+{
+  CtxBackend *backend = ctx->backend;
+  if (backend && backend->get_event_fds)
+    backend->get_event_fds (ctx, fd, count);
+  *count = 0;
+}
+
+CtxEvent *ctx_get_event (Ctx *ctx)
+{
+  static CtxEvent event_copy;
+  if (ctx->events.events)
+    {
+      event_copy = *((CtxEvent*)(ctx->events.events->data));
+      ctx_list_remove (&ctx->events.events, ctx->events.events->data);
+      return &event_copy;
+    }
+
+  _ctx_idle_iteration (ctx);
+#if 1
+  if (ctx->events.ctx_get_event_enabled==0)
+  {
+    ctx->events.ctx_get_event_enabled = 1;
+    ctx_queue_draw (ctx);
+  }
+#endif
+
+  ctx_consume_events (ctx);
+
+  if (ctx->events.events)
+    {
+      event_copy = *((CtxEvent*)(ctx->events.events->data));
+      ctx_list_remove (&ctx->events.events, ctx->events.events->data);
+      return &event_copy;
+    }
+  return NULL;
+}
+
+static int
+_ctx_emit_cb (Ctx *ctx, CtxList *items, CtxEvent *event, CtxEventType type, float x, float y)
+{
+  CtxList *l;
+  event->stop_propagate = 0;
+  for (l = items; l; l = l->next)
+  {
+    _ctx_emit_cb_item (ctx, l->data, event, type, x, y);
+    if (event->stop_propagate)
+      return event->stop_propagate;
+  }
+  return 0;
+}
+
+/*
+ * update what is the currently hovered item and returns it.. and the list of hits
+ * a well.
+ *
+ */
+static CtxItem *_ctx_update_item (Ctx *ctx, int device_no, float x, float y, CtxEventType type, CtxList **hitlist)
+{
+  CtxItem *current = NULL;
+
+  CtxList *l = _ctx_detect_list (ctx, x, y, type);
+  if (l)
+  {
+    ctx_list_reverse (&l);
+    current = l->data;
+  }
+  if (hitlist)
+    *hitlist = l;
+  else
+    ctx_list_free (&l);
+
+  if (ctx->events.prev[device_no] == NULL || current == NULL || (current->path_hash != ctx->events.prev[device_no]->path_hash))
+  {
+// enter/leave should snapshot chain to root
+// and compare with previous snapshotted chain to root
+// and emit/enter/leave as appropriate..
+//
+// leave might be registered for emission on enter..emission?
+
+
+    //int focus_radius = 2;
+    if (current)
+      _ctx_item_ref (current);
+
+    if (ctx->events.prev[device_no])
+    {
+      {
+#if 0
+        CtxIntRectangle rect = {floor(ctx->events.prev[device_no]->x0-focus_radius),
+                             floor(ctx->events.prev[device_no]->y0-focus_radius),
+                             ceil(ctx->events.prev[device_no]->x1)-floor(ctx->events.prev[device_no]->x0) + focus_radius * 2,
+                             ceil(ctx->events.prev[device_no]->y1)-floor(ctx->events.prev[device_no]->y0) + focus_radius * 2};
+        mrg_queue_draw (mrg, &rect);
+#endif 
+      }
+
+      _ctx_emit_cb_item (ctx, ctx->events.prev[device_no], NULL, CTX_LEAVE, x, y);
+      _ctx_item_unref (ctx->events.prev[device_no]);
+      ctx->events.prev[device_no] = NULL;
+    }
+    if (current)
+    {
+#if 0
+      {
+        CtxIntRectangle rect = {floor(current->x0-focus_radius),
+                             floor(current->y0-focus_radius),
+                             ceil(current->x1)-floor(current->x0) + focus_radius * 2,
+                             ceil(current->y1)-floor(current->y0) + focus_radius * 2};
+        mrg_queue_draw (mrg, &rect);
+      }
+#endif
+      _ctx_emit_cb_item (ctx, current, NULL, CTX_ENTER, x, y);
+      ctx->events.prev[device_no] = current;
+    }
+  }
+  current = _ctx_detect (ctx, x, y, type);
+  //fprintf (stderr, "%p\n", current);
+  return current;
+}
+
+static int tap_and_hold_fire (Ctx *ctx, void *data)
+{
+  CtxGrab *grab = data;
+  CtxList *list = NULL;
+  ctx_list_prepend (&list, grab->item);
+  CtxEvent event = {0, };
+
+  event.ctx = ctx;
+  event.time = ctx_ms (ctx);
+
+  event.device_x = 
+  event.x = ctx->events.pointer_x[grab->device_no];
+  event.device_y = 
+  event.y = ctx->events.pointer_y[grab->device_no];
+
+  // XXX: x and y coordinates
+  int ret = _ctx_emit_cb (ctx, list, &event, CTX_TAP_AND_HOLD,
+      ctx->events.pointer_x[grab->device_no], ctx->events.pointer_y[grab->device_no]);
+
+  ctx_list_free (&list);
+
+  grab->timeout_id = 0;
+
+  return 0;
+
+  return ret;
+}
+
+CTX_EXPORT int
+ctx_pointer_drop (Ctx *ctx, float x, float y, int device_no, uint32_t time,
+                  char *string)
+{
+  CtxList *l;
+  CtxList *hitlist = NULL;
+
+  ctx->events.pointer_x[device_no] = x;
+  ctx->events.pointer_y[device_no] = y;
+  if (device_no <= 3)
+  {
+    ctx->events.pointer_x[0] = x;
+    ctx->events.pointer_y[0] = y;
+  }
+
+  if (device_no < 0) device_no = 0;
+  if (device_no >= CTX_MAX_DEVICES) device_no = CTX_MAX_DEVICES-1;
+  CtxEvent *event = &ctx->events.drag_event[device_no];
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+
+  event->ctx = ctx;
+  event->x = x;
+  event->y = y;
+
+  event->delta_x = event->delta_y = 0;
+
+  event->device_no = device_no;
+  event->string    = string;
+  event->time      = time;
+  event->stop_propagate = 0;
+
+  _ctx_update_item (ctx, device_no, x, y, CTX_DROP, &hitlist);
+
+  for (l = hitlist; l; l = l?l->next:NULL)
+  {
+    CtxItem *item = l->data;
+    _ctx_emit_cb_item (ctx, item, event, CTX_DROP, x, y);
+
+    if (event->stop_propagate)
+    {
+      ctx_list_free (&hitlist);
+      return 0;
+    }
+  }
+
+  //mrg_queue_draw (mrg, NULL); /* in case of style change, and more  */
+  ctx_list_free (&hitlist);
+
+  return 0;
+}
+
+CTX_EXPORT int
+ctx_pointer_press (Ctx *ctx, float x, float y, int device_no, uint32_t time)
+{
+  CtxEvents *events = &ctx->events;
+  CtxList *hitlist = NULL;
+  events->pointer_x[device_no] = x;
+  events->pointer_y[device_no] = y;
+  if (device_no <= 3)
+  {
+    events->pointer_x[0] = x;
+    events->pointer_y[0] = y;
+  }
+
+  if (device_no < 0) device_no = 0;
+  if (device_no >= CTX_MAX_DEVICES) device_no = CTX_MAX_DEVICES-1;
+  CtxEvent *event = &events->drag_event[device_no];
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+
+  event->x = event->start_x = event->prev_x = x;
+  event->y = event->start_y = event->prev_y = y;
+
+  event->delta_x = event->delta_y = 0;
+
+  event->device_no = device_no;
+  event->time      = time;
+  event->stop_propagate = 0;
+
+  if (events->pointer_down[device_no] == 1)
+  {
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "events thought device %i was already down\n", device_no);
+#endif
+  }
+  /* doing just one of these two should be enough? */
+  events->pointer_down[device_no] = 1;
+  switch (device_no)
+  {
+    case 1:
+      events->modifier_state |= CTX_MODIFIER_STATE_BUTTON1;
+      break;
+    case 2:
+      events->modifier_state |= CTX_MODIFIER_STATE_BUTTON2;
+      break;
+    case 3:
+      events->modifier_state |= CTX_MODIFIER_STATE_BUTTON3;
+      break;
+    default:
+      break;
+  }
+
+  CtxGrab *grab = NULL;
+  CtxList *l;
+
+  _ctx_update_item (ctx, device_no, x, y, 
+      CTX_PRESS | CTX_DRAG_PRESS | CTX_TAP | CTX_TAP_AND_HOLD, &hitlist);
+
+  for (l = hitlist; l; l = l?l->next:NULL)
+  {
+    CtxItem *item = l->data;
+    if (item &&
+        ((item->types & CTX_DRAG)||
+         (item->types & CTX_TAP) ||
+         (item->types & CTX_TAP_AND_HOLD)))
+    {
+      grab = device_add_grab (ctx, device_no, item, item->types);
+      grab->start_time = time;
+
+      if (item->types & CTX_TAP_AND_HOLD)
+      {
+         grab->timeout_id = ctx_add_timeout (ctx, events->tap_delay_hold, tap_and_hold_fire, grab);
+      }
+    }
+    _ctx_emit_cb_item (ctx, item, event, CTX_PRESS, x, y);
+    if (!event->stop_propagate)
+      _ctx_emit_cb_item (ctx, item, event, CTX_DRAG_PRESS, x, y);
+
+    if (event->stop_propagate)
+    {
+      ctx_list_free (&hitlist);
+      return 0;
+    }
+  }
+
+  //events_queue_draw (mrg, NULL); /* in case of style change, and more  */
+  ctx_list_free (&hitlist);
+  return 0;
+}
+
+void _ctx_resized (Ctx *ctx, int width, int height, long time)
+{
+  CtxItem *item = _ctx_detect (ctx, 0, 0, CTX_KEY_PRESS);
+  CtxEvent event = {0, };
+
+  if (!time)
+    time = ctx_ms (ctx);
+  
+  event.ctx = ctx;
+  event.time = time;
+  event.string = "resize-event"; /* gets delivered to clients as a key_down event, maybe message shouldbe used instead?
+   */
+
+  if (item)
+  {
+    event.stop_propagate = 0;
+    _ctx_emit_cb_item (ctx, item, &event, CTX_KEY_PRESS, 0, 0);
+  }
+
+}
+
+CTX_EXPORT int
+ctx_pointer_release (Ctx *ctx, float x, float y, int device_no, uint32_t time)
+{
+  CtxEvents *events = &ctx->events;
+  if (time == 0)
+    time = ctx_ms (ctx);
+
+  if (device_no < 0) device_no = 0;
+  if (device_no >= CTX_MAX_DEVICES) device_no = CTX_MAX_DEVICES-1;
+  CtxEvent *event = &events->drag_event[device_no];
+
+  event->time = time;
+  event->x = x;
+  event->ctx = ctx;
+  event->y = y;
+  event->device_no = device_no;
+  event->stop_propagate = 0;
+
+  switch (device_no)
+  {
+    case 1:
+      if (events->modifier_state & CTX_MODIFIER_STATE_BUTTON1)
+        events->modifier_state -= CTX_MODIFIER_STATE_BUTTON1;
+      break;
+    case 2:
+      if (events->modifier_state & CTX_MODIFIER_STATE_BUTTON2)
+        events->modifier_state -= CTX_MODIFIER_STATE_BUTTON2;
+      break;
+    case 3:
+      if (events->modifier_state & CTX_MODIFIER_STATE_BUTTON3)
+        events->modifier_state -= CTX_MODIFIER_STATE_BUTTON3;
+      break;
+    default:
+      break;
+  }
+
+  //events_queue_draw (mrg, NULL); /* in case of style change */
+
+  if (events->pointer_down[device_no] == 0)
+  {
+    //fprintf (stderr, "device %i already up\n", device_no);
+  }
+  events->pointer_down[device_no] = 0;
+
+  events->pointer_x[device_no] = x;
+  events->pointer_y[device_no] = y;
+  if (device_no <= 3)
+  {
+    events->pointer_x[0] = x;
+    events->pointer_y[0] = y;
+  }
+  CtxList *hitlist = NULL;
+  CtxList *grablist = NULL , *g= NULL;
+  CtxGrab *grab;
+
+  _ctx_update_item (ctx, device_no, x, y, CTX_RELEASE | CTX_DRAG_RELEASE, &hitlist);
+  grablist = _ctx_device_get_grabs (ctx, device_no);
+
+  for (g = grablist; g; g = g->next)
+  {
+    grab = g->data;
+
+    if (!event->stop_propagate)
+    {
+      if (grab->item->types & CTX_TAP)
+      {
+        long delay = time - grab->start_time;
+
+        if (delay > events->tap_delay_min &&
+            delay < events->tap_delay_max &&
+            (
+              (event->start_x - x) * (event->start_x - x) +
+              (event->start_y - y) * (event->start_y - y)) < ctx_pow2(events->tap_hysteresis)
+            )
+        {
+          _ctx_emit_cb_item (ctx, grab->item, event, CTX_TAP, x, y);
+        }
+      }
+
+      if (!event->stop_propagate && grab->item->types & CTX_DRAG_RELEASE)
+      {
+        _ctx_emit_cb_item (ctx, grab->item, event, CTX_DRAG_RELEASE, x, y);
+      }
+    }
+
+    device_remove_grab (ctx, grab);
+  }
+
+  if (hitlist)
+  {
+    if (!event->stop_propagate)
+      _ctx_emit_cb (ctx, hitlist, event, CTX_RELEASE, x, y);
+    ctx_list_free (&hitlist);
+  }
+  ctx_list_free (&grablist);
+  return 0;
+}
+
+/*  for multi-touch, we use a list of active grabs - thus a grab corresponds to
+ *  a device id. even during drag-grabs events propagate; to stop that stop
+ *  propagation.
+ */
+CTX_EXPORT int
+ctx_pointer_motion (Ctx *ctx, float x, float y, int device_no, uint32_t time)
+{
+  CtxList *hitlist = NULL;
+  CtxList *grablist = NULL, *g;
+  CtxGrab *grab;
+
+  if (device_no < 0) device_no = 0;
+  if (device_no >= CTX_MAX_DEVICES) device_no = CTX_MAX_DEVICES-1;
+  CtxEvent *event = &ctx->events.drag_event[device_no];
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+
+  event->ctx       = ctx;
+  event->x         = x;
+  event->y         = y;
+  event->time      = time;
+  event->device_no = device_no;
+  event->stop_propagate = 0;
+  
+  ctx->events.pointer_x[device_no] = x;
+  ctx->events.pointer_y[device_no] = y;
+
+  if (device_no <= 3)
+  {
+    ctx->events.pointer_x[0] = x;
+    ctx->events.pointer_y[0] = y;
+  }
+
+  grablist = _ctx_device_get_grabs (ctx, device_no);
+  _ctx_update_item (ctx, device_no, x, y, CTX_MOTION, &hitlist);
+
+  {
+    CtxItem  *cursor_item = _ctx_detect (ctx, x, y, CTX_SET_CURSOR);
+    if (cursor_item)
+    {
+      ctx_set_cursor (ctx, cursor_item->cursor);
+    }
+    else
+    {
+      ctx_set_cursor (ctx, CTX_CURSOR_ARROW);
+    }
+    CtxItem  *hovered_item = _ctx_detect (ctx, x, y, CTX_ANY);
+    static CtxItem *prev_hovered_item = NULL;
+    if (prev_hovered_item != hovered_item)
+    {
+      ctx_queue_draw (ctx);
+    }
+    prev_hovered_item = hovered_item;
+  }
+
+  event->delta_x = x - event->prev_x;
+  event->delta_y = y - event->prev_y;
+  event->prev_x  = x;
+  event->prev_y  = y;
+
+  CtxList *remove_grabs = NULL;
+
+  for (g = grablist; g; g = g->next)
+  {
+    grab = g->data;
+
+    if ((grab->type & CTX_TAP) ||
+        (grab->type & CTX_TAP_AND_HOLD))
+    {
+      if (
+          (
+            (event->start_x - x) * (event->start_x - x) +
+            (event->start_y - y) * (event->start_y - y)) >
+              ctx_pow2(ctx->events.tap_hysteresis)
+         )
+      {
+        //fprintf (stderr, "-");
+        ctx_list_prepend (&remove_grabs, grab);
+      }
+      else
+      {
+        //fprintf (stderr, ":");
+      }
+    }
+
+    if (grab->type & CTX_DRAG_MOTION)
+    {
+      _ctx_emit_cb_item (ctx, grab->item, event, CTX_DRAG_MOTION, x, y);
+      if (event->stop_propagate)
+        break;
+    }
+  }
+  if (remove_grabs)
+  {
+    for (g = remove_grabs; g; g = g->next)
+      device_remove_grab (ctx, g->data);
+    ctx_list_free (&remove_grabs);
+  }
+  if (hitlist)
+  {
+    if (!event->stop_propagate)
+      _ctx_emit_cb (ctx, hitlist, event, CTX_MOTION, x, y);
+    ctx_list_free (&hitlist);
+  }
+  ctx_list_free (&grablist);
+  return 0;
+}
+
+CTX_EXPORT void
+ctx_incoming_message (Ctx *ctx, const char *message, long time)
+{
+  CtxItem *item = _ctx_detect (ctx, 0, 0, CTX_MESSAGE);
+  CtxEvent event = {0, };
+
+  if (!time)
+    time = ctx_ms (ctx);
+
+  if (item)
+  {
+    int i;
+    event.ctx = ctx;
+    event.type = CTX_MESSAGE;
+    event.time = time;
+    event.string = message;
+
+#if CTX_BAREMETAL==0
+    fprintf (stderr, "{%s|\n", message);
+#endif
+
+      for (i = 0; i < item->cb_count; i++)
+      {
+        if (item->cb[i].types & (CTX_MESSAGE))
+        {
+          event.state = ctx->events.modifier_state;
+          item->cb[i].cb (&event, item->cb[i].data1, item->cb[i].data2);
+          if (event.stop_propagate)
+            return;// event.stop_propagate;
+        }
+      }
+  }
+}
+
+CTX_EXPORT int
+ctx_scrolled (Ctx *ctx, float x, float y, CtxScrollDirection scroll_direction, uint32_t time)
+{
+  CtxList *hitlist = NULL;
+  CtxList *l;
+
+  int device_no = 0;
+  ctx->events.pointer_x[device_no] = x;
+  ctx->events.pointer_y[device_no] = y;
+
+  CtxEvent *event = &ctx->events.drag_event[device_no];  /* XXX: might
+                                       conflict with other code
+                                       create a sibling member
+                                       of drag_event?*/
+  if (time == 0)
+    time = ctx_ms (ctx);
+
+  event->x         = event->start_x = event->prev_x = x;
+  event->y         = event->start_y = event->prev_y = y;
+  event->delta_x   = event->delta_y = 0;
+  event->device_no = device_no;
+  event->time      = time;
+  event->stop_propagate = 0;
+  event->scroll_direction = scroll_direction;
+
+  _ctx_update_item (ctx, device_no, x, y, CTX_SCROLL, &hitlist);
+
+  for (l = hitlist; l; l = l?l->next:NULL)
+  {
+    CtxItem *item = l->data;
+
+    _ctx_emit_cb_item (ctx, item, event, CTX_SCROLL, x, y);
+
+    if (event->stop_propagate)
+      l = NULL;
+  }
+
+  //mrg_queue_draw (mrg, NULL); /* in case of style change, and more  */
+  ctx_list_free (&hitlist);
+  return 0;
+}
+
+#if 0
+static int ctx_str_has_prefix (const char *string, const char *prefix)
+{
+  for (int i = 0; prefix[i]; i++)
+  {
+    if (!string[i]) return 0;
+    if (string[i] != prefix[i]) return 0;
+  }
+  return 0;
+}
+#endif
+
+
+static const char *ctx_keycode_to_keyname (CtxModifierState modifier_state,
+                                           int keycode)
+{
+   static char temp[6]=" ";
+   const char *str = &temp[0];
+   if (keycode >= 65 && keycode <= 90)
+   {
+     if (modifier_state & CTX_MODIFIER_STATE_SHIFT)
+       temp[0]=keycode-65+'A';
+     else
+       temp[0]=keycode-65+'a';
+   }
+   else if (keycode >= 112 && keycode <= 123)
+   {
+     sprintf (temp, "F%i", keycode-111);
+   }
+   else
+   switch (keycode)
+   {
+     case 8: str="backspace"; break;
+     case 9: str="tab"; break;
+     case 13: str="return"; break;
+     case 16: str="shift"; break;
+     case 17: str="control"; break;
+     case 18: str="alt"; break;
+     case 27: str="escape"; break;
+     case 32: str="space"; break;
+     case 33: str="page-up"; break;
+     case 34: str="page-down"; break;
+     case 35: str="end"; break;
+     case 36: str="home"; break;
+     case 37: str="left"; break;
+     case 38: str="up"; break;
+     case 39: str="right"; break;
+     case 40: str="down"; break;
+     case 45: str="insert"; break;
+     case 46: str="delete"; break;
+     default:
+       if (modifier_state & CTX_MODIFIER_STATE_SHIFT)
+       switch (keycode)
+       {
+         case 173: str="_"; break;
+         case 186: str=":"; break;
+         case 187: str="+"; break;
+         case 188: str="<"; break;
+         case 189: str="_"; break;
+         case 190: str=">"; break;
+         case 191: str="?"; break;
+         case 192: str="~"; break;
+         case 219: str="{"; break;
+         case 221: str="}"; break;
+         case 220: str="|"; break;
+         case 222: str="\""; break;
+         case 48: str=")"; break;
+         case 49: str="!"; break;
+         case 50: str="@"; break;
+         case 51: str="#"; break;
+         case 52: str="$"; break;
+         case 53: str="%"; break;
+         case 54: str="^"; break;
+         case 55: str="&"; break;
+         case 56: str="*"; break;
+         case 57: str="("; break;
+         case 59: str=":"; break;
+         case 61: str="+"; break;
+         default:
+#if CTX_BAREMETAL==0
+           fprintf (stderr, "unhandled skeycode %i\n", keycode);
+#endif
+           str="?";
+           break;
+       }
+       else
+       switch (keycode)
+       {
+         case 61: str="="; break;
+         case 59: str=";"; break;
+         case 173: str="-"; break;
+         case 186: str=";"; break;
+         case 187: str="="; break;
+         case 188: str=","; break;
+         case 189: str="-"; break;
+         case 190: str="."; break;
+         case 191: str="/"; break;
+         case 192: str="`"; break;
+         case 219: str="["; break;
+         case 221: str="]"; break;
+         case 220: str="\\"; break;
+         case 222: str="'"; break;
+         default:
+           if (keycode >= 48 && keycode <=66)
+           {
+             temp[0]=keycode-48+'0';
+           }
+           else
+           {
+#if CTX_BAREMETAL==0
+             fprintf (stderr, "unhandled keycode %i\n", keycode);
+#endif
+             str="?";
+           }
+           break;
+       }
+   }
+   return str;
+}
+typedef struct CtxKeyMap {
+  const char *us;
+  const char *unshifted;
+  const char *shifted;
+} CtxKeyMap;
+
+static CtxKeyMap intl_key_map[]=
+{
+   {"`","`","~"},
+   {"1","1","!"},
+   {"2","2","@"},
+   {"3","3","#"},
+   {"4","4","$"},
+   {"5","5","%"},
+   {"6","6","^"},
+   {"7","7","&"},
+   {"8","8","*"},
+   {"9","9","("},
+   {"0","0",")"},
+   {"-","-","_"},
+   {"=","=","+"},
+
+   {"q","q","Q"},
+   {"w","w","W"},
+   {"e","e","E"},
+   {"r","r","R"},
+   {"t","t","T"},
+   {"y","y","Y"},
+   {"u","u","U"},
+   {"i","i","I"},
+   {"o","o","O"},
+   {"p","p","P"},
+   {"[","[","{"},
+   {"]","]","}"},
+   {"\\","\\","|"},
+
+   {"a","a","A"},
+   {"s","s","S"},
+   {"d","d","D"},
+   {"f","f","F"},
+   {"g","g","G"},
+   {"h","h","H"},
+   {"j","j","J"},
+   {"k","k","K"},
+   {"l","l","L"},
+
+   {"z","z","Z"},
+   {"x","x","X"},
+   {"c","c","C"},
+   {"v","v","V"},
+   {"b","b","B"},
+   {"n","n","N"},
+   {"m","m","M"},
+   {";",";",":"},
+   {"'","'","\""},
+
+   {".",".",">"},
+   {",",",","<"},
+   {"/","/","?"}
+};
+
+static const char *keymap_get_shifted (const char *key)
+{
+  for (unsigned int i = 0; i < sizeof (intl_key_map)/sizeof(intl_key_map[0]);i++)
+  {
+     if (!strcmp (key, intl_key_map[i].us))
+        return intl_key_map[i].shifted;
+  }
+  return key;
+}
+
+static const char *keymap_get_unshifted (const char *key)
+{
+  for (unsigned int i = 0; i < sizeof (intl_key_map)/sizeof(intl_key_map[0]);i++)
+  {
+     if (!strcmp (key, intl_key_map[i].us))
+        return intl_key_map[i].unshifted;
+  }
+  return key;
+}
+
+CTX_EXPORT int
+ctx_key_press (Ctx *ctx, unsigned int keyval,
+               const char *string, uint32_t time)
+{
+  char temp_key[128]="";
+  char event_type[128]="";
+  float x, y; int b;
+
+  if (!string)
+  {
+    string = ctx_keycode_to_keyname (ctx->events.modifier_state, keyval);
+  }
+
+  if (!ctx_strcmp (string, "shift") ||
+      !ctx_strcmp (string, "control") ||
+      !ctx_strcmp (string, "alt"))
+  {
+    return 0;
+  }
+
+  {
+          // code duplication.. perhaps always do this?
+    {
+       if (ctx->events.modifier_state & CTX_MODIFIER_STATE_SHIFT)
+       {
+          if(
+             ctx_utf8_strlen (string)>1 ||
+           (ctx->events.modifier_state & CTX_MODIFIER_STATE_ALT||
+            ctx->events.modifier_state & CTX_MODIFIER_STATE_CONTROL))
+          {
+            if (strstr (string, "shift-") == NULL ||
+                strcmp (strstr (string, "shift-"), "shift-"))
+            sprintf (&temp_key[ctx_strlen(temp_key)], "shift-");
+          }
+          else 
+          {
+            string = keymap_get_shifted (string);
+          }
+       }
+       else
+       {
+          if (!(ctx->events.modifier_state & CTX_MODIFIER_STATE_ALT||
+                ctx->events.modifier_state & CTX_MODIFIER_STATE_CONTROL))
+          {
+            string = keymap_get_unshifted (string);
+          }
+       }
+
+       if ((ctx->events.modifier_state & CTX_MODIFIER_STATE_ALT))
+       {
+         if (strstr (string, "alt-") == NULL ||
+             strcmp (strstr (string, "alt-"), "alt-"))
+         sprintf (&temp_key[ctx_strlen(temp_key)], "alt-");
+       }
+       if ((ctx->events.modifier_state & CTX_MODIFIER_STATE_CONTROL))
+       {
+         if (strstr (string, "control-") == NULL ||
+             strcmp (strstr (string, "control-"), "control-"))
+           sprintf (&temp_key[ctx_strlen(temp_key)], "control-");
+       }
+       sprintf (&temp_key[ctx_strlen(temp_key)], "%s", string);
+       string = temp_key;
+    }
+  }
+
+  int i = 0;
+  for (i = 0; string[i] && string[i] != ' '; i++)
+  {
+    event_type[i] = string[i];
+  }
+  event_type[i]=0;
+  char *pos = (char*)&string[i] + 1;
+  while (*pos==' ')pos++;
+  x = _ctx_parse_float (pos, &pos);
+  while (*pos==' ')pos++;
+  y = _ctx_parse_float (pos, &pos);
+  while (*pos==' ')pos++;
+  b = atoi(pos);
+
+  if (!ctx_strcmp (event_type, "pm") ||
+      !ctx_strcmp (event_type, "pd"))
+    return ctx_pointer_motion (ctx, x, y, b, 0);
+  else if (!ctx_strcmp (event_type, "pp"))
+    return ctx_pointer_press (ctx, x, y, b, 0);
+  else if (!ctx_strcmp (event_type, "pr"))
+    return ctx_pointer_release (ctx, x, y, b, 0);
+  //else if (!ctx_strcmp (event_type, "keydown"))
+  //  return ctx_key_down (ctx, keyval, string + 8, time);
+  //else if (!ctx_strcmp (event_type, "keyup"))
+  //  return ctx_key_up (ctx, keyval, string + 6, time);
+
+  CtxItem *item = _ctx_detect (ctx, 0, 0, CTX_KEY_PRESS);
+  CtxEvent event = {0,};
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+  if (item)
+  {
+    int i;
+    event.ctx = ctx;
+    event.type = CTX_KEY_PRESS;
+    event.unicode = keyval; 
+#ifdef EMSCRIPTEN
+    if (string)
+      event.string = strdup(string);
+    else
+      event.string = strdup("--");
+#else
+    if (string)
+      event.string = ctx_strdup(string);
+    else
+      event.string = ctx_strdup("--");
+#endif
+    event.stop_propagate = 0;
+    event.time = time;
+
+    for (i = 0; i < item->cb_count; i++)
+    {
+      if (item->cb[i].types & (CTX_KEY_PRESS))
+      {
+        event.state = ctx->events.modifier_state;
+        item->cb[i].cb (&event, item->cb[i].data1, item->cb[i].data2);
+        if (event.stop_propagate)
+        {
+#ifdef EMSCRIPTEN
+          free ((void*)event.string);
+#else
+          ctx_free ((void*)event.string);
+#endif
+          return event.stop_propagate;
+        }
+      }
+    }
+#ifdef EMSCRIPTEN
+    free ((void*)event.string);
+#else
+    ctx_free ((void*)event.string);
+#endif
+  }
+  return 0;
+}
+
+CTX_EXPORT int
+ctx_key_down (Ctx *ctx, unsigned int keyval,
+              const char *string, uint32_t time)
+{
+  CtxItem *item = _ctx_detect (ctx, 0, 0, CTX_KEY_DOWN);
+  CtxEvent event = {0,};
+  if (!string)
+    string = ctx_keycode_to_keyname (0, keyval);
+
+  if (!ctx_strcmp (string, "shift"))
+  {
+    ctx->events.modifier_state |= CTX_MODIFIER_STATE_SHIFT;
+  }
+  else if (!ctx_strcmp (string, "control"))
+  {
+    ctx->events.modifier_state |= CTX_MODIFIER_STATE_CONTROL;
+  }
+  else if (!ctx_strcmp (string, "alt"))
+  {
+    ctx->events.modifier_state |= CTX_MODIFIER_STATE_ALT;
+  }
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+  if (item)
+  {
+    int i;
+    event.ctx     = ctx;
+    event.type    = CTX_KEY_DOWN;
+    event.unicode = keyval; 
+    event.string  = ctx_strdup(string);
+    event.stop_propagate = 0;
+    event.time    = time;
+
+    for (i = 0; i < item->cb_count; i++)
+    {
+      if (item->cb[i].types & (CTX_KEY_DOWN))
+      {
+        event.state = ctx->events.modifier_state;
+        item->cb[i].cb (&event, item->cb[i].data1, item->cb[i].data2);
+        if (event.stop_propagate)
+        {
+          ctx_free ((void*)event.string);
+          return event.stop_propagate;
+        }
+      }
+    }
+    ctx_free ((void*)event.string);
+  }
+  return 0;
+}
+
+CTX_EXPORT int
+ctx_key_up (Ctx *ctx, unsigned int keyval,
+            const char *string, uint32_t time)
+{
+  CtxItem *item = _ctx_detect (ctx, 0, 0, CTX_KEY_UP);
+  CtxEvent event = {0,};
+  if (!string)
+    string = ctx_keycode_to_keyname (0, keyval);
+
+  if (!ctx_strcmp (string, "shift"))
+  {
+    ctx->events.modifier_state &= ~(CTX_MODIFIER_STATE_SHIFT);
+  }
+  else if (!ctx_strcmp (string, "control"))
+  {
+    ctx->events.modifier_state &= ~(CTX_MODIFIER_STATE_CONTROL);
+  }
+  else if (!ctx_strcmp (string, "alt"))
+  {
+    ctx->events.modifier_state &= ~(CTX_MODIFIER_STATE_ALT);
+  }
+
+  if (time == 0)
+    time = ctx_ms (ctx);
+  if (item)
+  {
+    int i;
+    event.ctx = ctx;
+    event.type = CTX_KEY_UP;
+    event.unicode = keyval; 
+    event.string = ctx_strdup(string);
+    event.stop_propagate = 0;
+    event.time = time;
+
+    for (i = 0; i < item->cb_count; i++)
+    {
+      if (item->cb[i].types & (CTX_KEY_UP))
+      {
+        event.state = ctx->events.modifier_state;
+        item->cb[i].cb (&event, item->cb[i].data1, item->cb[i].data2);
+        if (event.stop_propagate)
+        {
+          ctx_free ((void*)event.string);
+          return event.stop_propagate;
+        }
+      }
+    }
+    ctx_free ((void*)event.string);
+  }
+  return 0;
+}
+
+void ctx_freeze           (Ctx *ctx)
+{
+  ctx->events.frozen ++;
+}
+
+void ctx_thaw             (Ctx *ctx)
+{
+  ctx->events.frozen --;
+}
+int ctx_events_frozen (Ctx *ctx)
+{
+  return ctx && ctx->events.frozen;
+}
+void ctx_events_clear_items (Ctx *ctx)
+{
+  ctx_list_free (&ctx->events.items);
+}
+
+float ctx_pointer_x (Ctx *ctx)
+{
+  return ctx->events.pointer_x[0];
+}
+
+float ctx_pointer_y (Ctx *ctx)
+{
+  return ctx->events.pointer_y[0];
+}
+
+int ctx_pointer_is_down (Ctx *ctx, int no)
+{
+  if (no < 0 || no > CTX_MAX_DEVICES) return 0;
+  return ctx->events.pointer_down[no];
+}
+
+void _ctx_debug_overlays (Ctx *ctx)
+{
+  CtxList *a;
+  ctx_save (ctx);
+
+  ctx_line_width (ctx, 2);
+  ctx_rgba (ctx, 0,0,0.8f,0.5f);
+  for (a = ctx->events.items; a; a = a->next)
+  {
+    float current_x = ctx_pointer_x (ctx);
+    float current_y = ctx_pointer_y (ctx);
+    CtxItem *item = a->data;
+    CtxMatrix matrix = item->inv_matrix;
+
+    _ctx_matrix_apply_transform (&matrix, &current_x, &current_y);
+
+    if (current_x >= item->x0 && current_x < item->x1 &&
+        current_y >= item->y0 && current_y < item->y1)
+    {
+      ctx_matrix_invert (&matrix);
+      ctx_set_matrix (ctx, &matrix);
+      _mrg_restore_path (ctx, item->path);
+      ctx_stroke (ctx);
+    }
+  }
+  ctx_restore (ctx);
+}
+
+#if CTX_THREADS
+void ctx_set_render_threads   (Ctx *ctx, int n_threads)
+{
+  // XXX
+}
+int ctx_get_render_threads   (Ctx *ctx)
+{
+  return _ctx_max_threads;
+}
+#endif
+void ctx_set_hash_cache (Ctx *ctx, int enable_hash_cache)
+{
+  _ctx_enable_hash_cache = enable_hash_cache;
+}
+int ctx_get_hash_cache (Ctx *ctx)
+{
+  return _ctx_enable_hash_cache;
+}
+
+int ctx_need_redraw (Ctx *ctx)
+{
+  return (ctx->dirty != 0)
+#if CTX_CLIENTS
+    || ctx_clients_need_redraw (ctx)
+#endif
+    ;
+}
+
+
+/*
+ * centralized global API for managing file descriptors that
+ * wake us up, this to remove sleeping and polling
+ */
+
+
+static int _ctx_listen_fd[CTX_MAX_LISTEN_FDS];
+static int _ctx_listen_fds    = 0;
+static int _ctx_listen_max_fd = 0;
+
+void _ctx_add_listen_fd (int fd)
+{
+  _ctx_listen_fd[_ctx_listen_fds++]=fd;
+  if (fd > _ctx_listen_max_fd)
+    _ctx_listen_max_fd = fd;
+}
+
+void _ctx_remove_listen_fd (int fd)
+{
+  for (int i = 0; i < _ctx_listen_fds; i++)
+  {
+    if (_ctx_listen_fd[i] == fd)
+    {
+      _ctx_listen_fd[i] = _ctx_listen_fd[_ctx_listen_fds-1];
+      _ctx_listen_fds--;
+      return;
+    }
+  }
+}
+#ifdef EMSCRIPTEN
+extern int em_in_len;
+#endif
+
+int ctx_input_pending (Ctx *ctx, int timeout)
+{
+  struct timeval tv;
+  fd_set fdset;
+  FD_ZERO (&fdset);
+  for (int i = 0; i < _ctx_listen_fds; i++)
+  {
+    FD_SET (_ctx_listen_fd[i], &fdset);
+  }
+  int input_fds[5];
+  int n_fds;
+  ctx_get_event_fds (ctx, input_fds, &n_fds);
+  for (int i = 0; i < n_fds; i++)
+  {
+    FD_SET (input_fds[i], &fdset);
+  }
+  tv.tv_sec = 0;
+  tv.tv_usec = timeout;
+  tv.tv_sec = timeout / 1000000;
+  tv.tv_usec = timeout % 1000000;
+  int retval = select (_ctx_listen_max_fd + 1, &fdset, NULL, NULL, &tv);
+  if (retval == -1)
+  {
+    perror ("select");
+    return 0;
+  }
+#ifdef EMSCRIPTEN
+  retval += em_in_len;
+#endif
+  return retval;
+}
+
+void ctx_handle_events (Ctx *ctx)
+{
+#if CTX_CLIENTS
+  ctx_clients_handle_events (ctx);
+#endif
+  while (ctx_get_event (ctx)){}
+}
+
+
+static void ctx_events_deinit (Ctx *ctx)
+{
+  ctx_list_free (&ctx->events.items);
+  ctx->events.last_item = NULL;
+
+  while (ctx->events.idles)
+  {
+    CtxIdleCb *item = ctx->events.idles->data;
+    ctx_list_remove (&ctx->events.idles, item);
+    if (item->destroy_notify)
+      item->destroy_notify (item->destroy_data);
+  }
+}
+
+#define evsource_has_event(es)   (es)->has_event((es))
+#define evsource_get_event(es)   (es)->get_event((es))
+#define evsource_destroy(es)     do{if((es)->destroy)(es)->destroy((es));}while(0)
+#define evsource_set_coord(es,x,y) do{if((es)->set_coord)(es)->set_coord((es),(x),(y));}while(0)
+#define evsource_get_fd(es)      ((es)->get_fd?(es)->get_fd((es)):0)
+
+#if CTX_TERMINAL_EVENTS
+
+
+static int mice_has_event ();
+static char *mice_get_event ();
+static void mice_destroy ();
+static int mice_get_fd (EvSource *ev_source);
+static void mice_set_coord (EvSource *ev_source, double x, double y);
+
+static EvSource ctx_ev_src_mice = {
+  NULL,
+  (void*)mice_has_event,
+  (void*)mice_get_event,
+  (void*)mice_destroy,
+  mice_get_fd,
+  mice_set_coord
+};
+
+typedef struct Mice
+{
+  int     fd;
+  double  x;
+  double  y;
+  int     button;
+  int     prev_state;
+} Mice;
+
+Mice *_mrg_evsrc_coord = NULL;
+static int _ctx_mice_fd = 0;
+
+static Mice  mice;
+static Mice* mrg_mice_this = &mice;
+
+static int mmm_evsource_mice_init ()
+{
+  unsigned char reset[]={0xff};
+  /* need to detect which event */
+
+  mrg_mice_this->prev_state = 0;
+  mrg_mice_this->fd = open ("/dev/input/mice", O_RDONLY | O_NONBLOCK);
+  if (mrg_mice_this->fd == -1)
+  {
+    fprintf (stderr, "error opening /dev/input/mice device, maybe add user to input group if such group exist, or otherwise make the rights be satisfied.\n");
+    return -1;
+  }
+  if (write (mrg_mice_this->fd, reset, 1) == -1)
+  {
+    // might happen if we're a regular user with only read permission
+  }
+  _ctx_mice_fd = mrg_mice_this->fd;
+  _mrg_evsrc_coord = mrg_mice_this;
+  return 0;
+}
+
+static void mice_destroy ()
+{
+  if (mrg_mice_this->fd != -1)
+    close (mrg_mice_this->fd);
+}
+
+static int mice_has_event ()
+{
+  struct timeval tv;
+  int retval;
+
+  if (mrg_mice_this->fd == -1)
+    return 0;
+
+  fd_set rfds;
+  FD_ZERO (&rfds);
+  FD_SET(mrg_mice_this->fd, &rfds);
+  tv.tv_sec = 0; tv.tv_usec = 0;
+  retval = select (mrg_mice_this->fd+1, &rfds, NULL, NULL, &tv);
+  if (retval == 1)
+    return FD_ISSET (mrg_mice_this->fd, &rfds);
+  return 0;
+}
+
+static char *mice_get_event ()
+{
+  const char *ret = "pm";
+  double relx, rely;
+  signed char buf[3];
+  int n_read = 0;
+  CtxTiled *tiled = (void*)ctx_ev_src_mice.priv;
+  n_read = read (mrg_mice_this->fd, buf, 3);
+  if (n_read == 0)
+     return ctx_strdup ("");
+  relx = buf[1];
+  rely = -buf[2];
+
+  if (relx < 0)
+  {
+    if (relx > -6)
+    relx = - relx*relx;
+    else
+    relx = -36;
+  }
+  else
+  {
+    if (relx < 6)
+    relx = relx*relx;
+    else
+    relx = 36;
+  }
+
+  if (rely < 0)
+  {
+    if (rely > -6)
+    rely = - rely*rely;
+    else
+    rely = -36;
+  }
+  else
+  {
+    if (rely < 6)
+    rely = rely*rely;
+    else
+    rely = 36;
+  }
+
+  mrg_mice_this->x += relx;
+  mrg_mice_this->y += rely;
+
+  if (mrg_mice_this->x < 0)
+    mrg_mice_this->x = 0;
+  if (mrg_mice_this->y < 0)
+    mrg_mice_this->y = 0;
+  if (mrg_mice_this->x >= tiled->width)
+    mrg_mice_this->x = tiled->width -1;
+  if (mrg_mice_this->y >= tiled->height)
+    mrg_mice_this->y = tiled->height -1;
+  int button = 0;
+  
+  if ((mrg_mice_this->prev_state & 1) != (buf[0] & 1))
+    {
+      if (buf[0] & 1)
+        {
+          ret = "pp";
+        }
+      else
+        {
+          ret = "pr";
+        }
+      button = 1;
+    }
+  else if (buf[0] & 1)
+  {
+    ret = "pd";
+    button = 1;
+  }
+
+  if (!button)
+  {
+    if ((mrg_mice_this->prev_state & 2) != (buf[0] & 2))
+    {
+      if (buf[0] & 2)
+        {
+          ret = "pp";
+        }
+      else
+        {
+          ret = "pr";
+        }
+      button = 3;
+    }
+    else if (buf[0] & 2)
+    {
+      ret = "pd";
+      button = 3;
+    }
+  }
+
+  if (!button)
+  {
+    if ((mrg_mice_this->prev_state & 4) != (buf[0] & 4))
+    {
+      if (buf[0] & 4)
+        {
+          ret = "pp";
+        }
+      else
+        {
+          ret = "pr";
+        }
+      button = 2;
+    }
+    else if (buf[0] & 4)
+    {
+      ret = "pd";
+      button = 2;
+    }
+  }
+
+  mrg_mice_this->prev_state = buf[0];
+
+  {
+    char *r = ctx_malloc (64);
+    sprintf (r, "%s %.0f %.0f %i", ret, mrg_mice_this->x, mrg_mice_this->y, button);
+    return r;
+  }
+
+  return NULL;
+}
+
+static int mice_get_fd (EvSource *ev_source)
+{
+  return mrg_mice_this->fd;
+}
+
+static void mice_set_coord (EvSource *ev_source, double x, double y)
+{
+  mrg_mice_this->x = x;
+  mrg_mice_this->y = y;
+}
+
+static inline EvSource *evsource_mice_new (void)
+{
+  if (mmm_evsource_mice_init () == 0)
+    {
+      mrg_mice_this->x = 0;
+      mrg_mice_this->y = 0;
+      return &ctx_ev_src_mice;
+    }
+  return NULL;
+}
+
+static int evsource_kb_term_has_event (void);
+static char *evsource_kb_term_get_event (void);
+static void evsource_kb_term_destroy (int sign);
+static int evsource_kb_term_get_fd (void);
+
+/* kept out of struct to be reachable by atexit */
+static EvSource ctx_ev_src_kb_term = {
+  NULL,
+  (void*)evsource_kb_term_has_event,
+  (void*)evsource_kb_term_get_event,
+  (void*)evsource_kb_term_destroy,
+  (void*)evsource_kb_term_get_fd,
+  NULL
+};
+
+static struct termios orig_attr;
+
+static void real_evsource_kb_term_destroy (int sign)
+{
+  static int done = 0;
+
+  if (sign == 0)
+    return;
+
+  if (done)
+    return;
+  done = 1;
+
+  switch (sign)
+  {
+    case  -11:break; /* will be called from atexit with sign==-11 */
+    case   SIGSEGV: break;//fprintf (stderr, " SIGSEGV\n");break;
+    case   SIGABRT: fprintf (stderr, " SIGABRT\n");break;
+    case   SIGBUS:  fprintf (stderr, " SIGBUS\n");break;
+    case   SIGKILL: fprintf (stderr, " SIGKILL\n");break;
+    case   SIGINT:  fprintf (stderr, " SIGINT\n");break;
+    case   SIGTERM: fprintf (stderr, " SIGTERM\n");break;
+    case   SIGQUIT: fprintf (stderr, " SIGQUIT\n");break;
+    default: fprintf (stderr, "sign: %i\n", sign);
+             fprintf (stderr, "%i %i %i %i %i %i %i\n", SIGSEGV, SIGABRT, SIGBUS, SIGKILL, SIGINT, SIGTERM, SIGQUIT);
+  }
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr);
+  //fprintf (stderr, "evsource kb destroy\n");
+}
+
+static void evsource_kb_term_destroy (int sign)
+{
+  real_evsource_kb_term_destroy (-11);
+}
+
+static int evsource_kb_term_init ()
+{
+//  ioctl(STDIN_FILENO, KDSKBMODE, K_RAW);
+  //atexit ((void*) real_evsource_kb_term_destroy);
+  signal (SIGSEGV, (void*) real_evsource_kb_term_destroy);
+  signal (SIGABRT, (void*) real_evsource_kb_term_destroy);
+  signal (SIGBUS,  (void*) real_evsource_kb_term_destroy);
+  signal (SIGKILL, (void*) real_evsource_kb_term_destroy);
+  signal (SIGINT,  (void*) real_evsource_kb_term_destroy);
+  signal (SIGTERM, (void*) real_evsource_kb_term_destroy);
+  signal (SIGQUIT, (void*) real_evsource_kb_term_destroy);
+
+  struct termios raw;
+  if (tcgetattr (STDIN_FILENO, &orig_attr) == -1)
+    {
+      fprintf (stderr, "error initializing keyboard\n");
+      return -1;
+    }
+  raw = orig_attr;
+
+  cfmakeraw (&raw);
+
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return 0; // XXX? return other value?
+
+  return 0;
+}
+static int evsource_kb_term_has_event (void)
+{
+  struct timeval tv;
+  int retval;
+
+  fd_set rfds;
+  FD_ZERO (&rfds);
+  FD_SET(STDIN_FILENO, &rfds);
+  tv.tv_sec = 0; tv.tv_usec = 0;
+  retval = select (STDIN_FILENO+1, &rfds, NULL, NULL, &tv);
+  return retval == 1;
+}
+
+/* note that a nick can have multiple occurences, the labels
+ * should be kept the same for all occurences of a combination.
+ *
+ * this table is taken from nchanterm.
+ */
+typedef struct MmmKeyCode {
+  char *nick;          /* programmers name for key */
+  char  sequence[10];  /* terminal sequence */
+} MmmKeyCode;
+static const MmmKeyCode ufb_keycodes[]={
+  {"up",                  "\e[A"},
+  {"down",                "\e[B"},
+  {"right",               "\e[C"},
+  {"left",                "\e[D"},
+
+  {"shift-up",            "\e[1;2A"},
+  {"shift-down",          "\e[1;2B"},
+  {"shift-right",         "\e[1;2C"},
+  {"shift-left",          "\e[1;2D"},
+
+  {"alt-up",              "\e[1;3A"},
+  {"alt-down",            "\e[1;3B"},
+  {"alt-right",           "\e[1;3C"},
+  {"alt-left",            "\e[1;3D"},
+  {"alt-shift-up",         "\e[1;4A"},
+  {"alt-shift-down",       "\e[1;4B"},
+  {"alt-shift-right",      "\e[1;4C"},
+  {"alt-shift-left",       "\e[1;4D"},
+
+  {"control-up",          "\e[1;5A"},
+  {"control-down",        "\e[1;5B"},
+  {"control-right",       "\e[1;5C"},
+  {"control-left",        "\e[1;5D"},
+
+  /* putty */
+  {"control-up",          "\eOA"},
+  {"control-down",        "\eOB"},
+  {"control-right",       "\eOC"},
+  {"control-left",        "\eOD"},
+
+  {"control-shift-up",    "\e[1;6A"},
+  {"control-shift-down",  "\e[1;6B"},
+  {"control-shift-right", "\e[1;6C"},
+  {"control-shift-left",  "\e[1;6D"},
+
+  {"control-up",          "\eOa"},
+  {"control-down",        "\eOb"},
+  {"control-right",       "\eOc"},
+  {"control-left",        "\eOd"},
+
+  {"shift-up",            "\e[a"},
+  {"shift-down",          "\e[b"},
+  {"shift-right",         "\e[c"},
+  {"shift-left",          "\e[d"},
+
+  {"insert",              "\e[2~"},
+  {"delete",              "\e[3~"},
+  {"page-up",             "\e[5~"},
+  {"page-down",           "\e[6~"},
+  {"home",                "\eOH"},
+  {"end",                 "\eOF"},
+  {"home",                "\e[H"},
+  {"end",                 "\e[F"},
+ {"control-delete",       "\e[3;5~"},
+  {"shift-delete",        "\e[3;2~"},
+  {"control-shift-delete","\e[3;6~"},
+
+  {"F1",         "\e[25~"},
+  {"F2",         "\e[26~"},
+  {"F3",         "\e[27~"},
+  {"F4",         "\e[26~"},
+
+
+  {"F1",         "\e[11~"},
+  {"F2",         "\e[12~"},
+  {"F3",         "\e[13~"},
+  {"F4",         "\e[14~"},
+  {"F1",         "\eOP"},
+  {"F2",         "\eOQ"},
+  {"F3",         "\eOR"},
+  {"F4",         "\eOS"},
+  {"F5",         "\e[15~"},
+  {"F6",         "\e[16~"},
+  {"F7",         "\e[17~"},
+  {"F8",         "\e[18~"},
+  {"F9",         "\e[19~"},
+  {"F9",         "\e[20~"},
+  {"F10",        "\e[21~"},
+  {"F11",        "\e[22~"},
+  {"F12",        "\e[23~"},
+  {"tab",         {9, '\0'}},
+  {"shift-tab",   {27, 9, '\0'}}, // also generated by alt-tab in linux console
+  {"alt-space",   {27, ' ', '\0'}},
+  {"shift-tab",   "\e[Z"},
+  {"backspace",   {127, '\0'}},
+  {"space",       " "},
+  {"\e",          "\e"},
+  {"return",      {10,0}},
+  {"return",      {13,0}},
+  /* this section could be autogenerated by code */
+  {"control-a",   {1,0}},
+  {"control-b",   {2,0}},
+  {"control-c",   {3,0}},
+  {"control-d",   {4,0}},
+  {"control-e",   {5,0}},
+  {"control-f",   {6,0}},
+  {"control-g",   {7,0}},
+  {"control-h",   {8,0}}, /* backspace? */
+  {"control-i",   {9,0}},
+  {"control-j",   {10,0}},
+  {"control-k",   {11,0}},
+  {"control-l",   {12,0}},
+  {"control-n",   {14,0}},
+  {"control-o",   {15,0}},
+  {"control-p",   {16,0}},
+  {"control-q",   {17,0}},
+  {"control-r",   {18,0}},
+  {"control-s",   {19,0}},
+  {"control-t",   {20,0}},
+  {"control-u",   {21,0}},
+  {"control-v",   {22,0}},
+  {"control-w",   {23,0}},
+  {"control-x",   {24,0}},
+  {"control-y",   {25,0}},
+  {"control-z",   {26,0}},
+  {"alt-`",       "\e`"},
+  {"alt-0",       "\e0"},
+  {"alt-1",       "\e1"},
+  {"alt-2",       "\e2"},
+  {"alt-3",       "\e3"},
+  {"alt-4",       "\e4"},
+  {"alt-5",       "\e5"},
+  {"alt-6",       "\e6"},
+  {"alt-7",       "\e7"}, /* backspace? */
+  {"alt-8",       "\e8"},
+  {"alt-9",       "\e9"},
+  {"alt-+",       "\e+"},
+  {"alt--",       "\e-"},
+  {"alt-/",       "\e/"},
+  {"alt-a",       "\ea"},
+  {"alt-b",       "\eb"},
+  {"alt-c",       "\ec"},
+  {"alt-d",       "\ed"},
+  {"alt-e",       "\ee"},
+  {"alt-f",       "\ef"},
+  {"alt-g",       "\eg"},
+  {"alt-h",       "\eh"}, /* backspace? */
+  {"alt-i",       "\ei"},
+  {"alt-j",       "\ej"},
+  {"alt-k",       "\ek"},
+  {"alt-l",       "\el"},
+  {"alt-n",       "\em"},
+  {"alt-n",       "\en"},
+  {"alt-o",       "\eo"},
+  {"alt-p",       "\ep"},
+  {"alt-q",       "\eq"},
+  {"alt-r",       "\er"},
+  {"alt-s",       "\es"},
+  {"alt-t",       "\et"},
+  {"alt-u",       "\eu"},
+  {"alt-v",       "\ev"},
+  {"alt-w",       "\ew"},
+  {"alt-x",       "\ex"},
+  {"alt-y",       "\ey"},
+  {"alt-z",       "\ez"},
+  /* Linux Console  */
+  {"home",       "\e[1~"},
+  {"end",        "\e[4~"},
+  {"F1",         "\e[[A"},
+  {"F2",         "\e[[B"},
+  {"F3",         "\e[[C"},
+  {"F4",         "\e[[D"},
+  {"F5",         "\e[[E"},
+  {"F6",         "\e[[F"},
+  {"F7",         "\e[[G"},
+  {"F8",         "\e[[H"},
+  {"F9",         "\e[[I"},
+  {"F10",        "\e[[J"},
+  {"F11",        "\e[[K"},
+  {"F12",        "\e[[L"},
+  {NULL, }
+};
+static int fb_keyboard_match_keycode (const char *buf, int length, const MmmKeyCode **ret)
+{
+  int i;
+  int matches = 0;
+
+  if (!strncmp (buf, "\e[M", MIN(length,3)))
+    {
+      if (length >= 6)
+        return 9001;
+      return 2342;
+    }
+  for (i = 0; ufb_keycodes[i].nick; i++)
+    if (!strncmp (buf, ufb_keycodes[i].sequence, length))
+      {
+        matches ++;
+        if ((int)ctx_strlen (ufb_keycodes[i].sequence) == length && ret)
+          {
+            *ret = &ufb_keycodes[i];
+            return 1;
+          }
+      }
+  if (matches != 1 && ret)
+    *ret = NULL;
+  return matches==1?2:matches;
+}
+
+static char *evsource_kb_term_get_event (void)
+{
+  unsigned char buf[20];
+  int length;
+
+
+  for (length = 0; length < 10; length ++)
+    if (read (STDIN_FILENO, &buf[length], 1) != -1)
+      {
+        const MmmKeyCode *match = NULL;
+
+        //if (!is_active (ctx_ev_src_kb.priv))
+        //  return NULL;
+
+        /* special case ESC, so that we can use it alone in keybindings */
+        if (length == 0 && buf[0] == 27)
+          {
+            struct timeval tv;
+            fd_set rfds;
+            FD_ZERO (&rfds);
+            FD_SET (STDIN_FILENO, &rfds);
+            tv.tv_sec = 0;
+            tv.tv_usec = 1000 * 120;
+            if (select (STDIN_FILENO+1, &rfds, NULL, NULL, &tv) == 0)
+              return ctx_strdup ("escape");
+          }
+
+        switch (fb_keyboard_match_keycode ((void*)buf, length + 1, &match))
+          {
+            case 1: /* unique match */
+              if (!match)
+                return NULL;
+              return ctx_strdup (match->nick);
+              break;
+            case 0: /* no matches, bail*/
+             {
+                char ret[256]="";
+                if (length == 0 && ctx_utf8_len (buf[0])>1) /* read a
+                                                             * single unicode
+                                                             * utf8 character
+                                                             */
+                  {
+                    int bytes = read (STDIN_FILENO, &buf[length+1], ctx_utf8_len(buf[0])-1);
+                    if (bytes)
+                    {
+                      buf[ctx_utf8_len(buf[0])]=0;
+                      strcpy (ret, (void*)buf);
+                    }
+                    return ctx_strdup(ret); //XXX: simplify
+                  }
+                if (length == 0) /* ascii */
+                  {
+                    buf[1]=0;
+                    strcpy (ret, (void*)buf);
+                    return ctx_strdup(ret);
+                  }
+                sprintf (ret, "unhandled %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c' %i:'%c'",
+                    length >=0 ? buf[0] : 0,
+                    length >=0 ? buf[0]>31?buf[0]:'?' : ' ',
+                    length >=1 ? buf[1] : 0,
+                    length >=1 ? buf[1]>31?buf[1]:'?' : ' ',
+                    length >=2 ? buf[2] : 0,
+                    length >=2 ? buf[2]>31?buf[2]:'?' : ' ',
+                    length >=3 ? buf[3] : 0,
+                    length >=3 ? buf[3]>31?buf[3]:'?' : ' ',
+                    length >=4 ? buf[4] : 0,
+                    length >=4 ? buf[4]>31?buf[4]:'?' : ' ',
+                    length >=5 ? buf[5] : 0,
+                    length >=5 ? buf[5]>31?buf[5]:'?' : ' ',
+                    length >=6 ? buf[6] : 0,
+                    length >=6 ? buf[6]>31?buf[6]:'?' : ' '
+                    );
+                return ctx_strdup(ret);
+            }
+              return NULL;
+            default: /* continue */
+              break;
+          }
+      }
+    else
+      return ctx_strdup("key read eek");
+  return ctx_strdup("fail");
+}
+
+static int evsource_kb_term_get_fd (void)
+{
+  return STDIN_FILENO;
+}
+
+
+static inline EvSource *evsource_kb_term_new (void)
+{
+  if (evsource_kb_term_init() == 0)
+  {
+    return &ctx_ev_src_kb_term;
+  }
+  return NULL;
+}
+#endif
+
+#if CTX_RAW_KB_EVENTS
+
+static int evsource_kb_raw_has_event (void);
+static char *evsource_kb_raw_get_event (void);
+static void evsource_kb_raw_destroy (int sign);
+static int evsource_kb_raw_get_fd (void);
+
+
+/* kept out of struct to be reachable by atexit */
+static EvSource ctx_ev_src_kb_raw = {
+  NULL,
+  (void*)evsource_kb_raw_has_event,
+  (void*)evsource_kb_raw_get_event,
+  (void*)evsource_kb_raw_destroy,
+  (void*)evsource_kb_raw_get_fd,
+  NULL
+};
+
+#if 0
+static void real_evsource_kb_raw_destroy (int sign)
+{
+  static int done = 0;
+
+  if (sign == 0)
+    return;
+
+  if (done)
+    return;
+  done = 1;
+
+  switch (sign)
+  {
+    case  -11:break; /* will be called from atexit with sign==-11 */
+    case   SIGSEGV: break;//fprintf (stderr, " SIGSEGV\n");break;
+    case   SIGABRT: fprintf (stderr, " SIGABRT\n");break;
+    case   SIGBUS:  fprintf (stderr, " SIGBUS\n");break;
+    case   SIGKILL: fprintf (stderr, " SIGKILL\n");break;
+    case   SIGINT:  fprintf (stderr, " SIGINT\n");break;
+    case   SIGTERM: fprintf (stderr, " SIGTERM\n");break;
+    case   SIGQUIT: fprintf (stderr, " SIGQUIT\n");break;
+    default: fprintf (stderr, "sign: %i\n", sign);
+             fprintf (stderr, "%i %i %i %i %i %i %i\n", SIGSEGV, SIGABRT, SIGBUS, SIGKILL, SIGINT, SIGTERM, SIGQUIT);
+  }
+  tcsetattr (STDIN_FILENO, TCSAFLUSH, &orig_attr);
+  //fprintf (stderr, "evsource kb destroy\n");
+}
+#endif
+
+#include <string.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+
+
+#include <linux/input.h>
+
+
+static int kb_fd = -1;
+static void evsource_kb_raw_destroy (int sign)
+{
+#if 0
+  real_evsource_kb_raw_destroy (-11);
+#endif
+  if (kb_fd)
+    close (kb_fd);
+  kb_fd = 0;
+}
+
+
+static int evsource_kb_raw_init ()
+{
+#if 0
+//  ioctl(STDIN_FILENO, KDSKBMODE, K_RAW);
+  //atexit ((void*) real_evsource_kb_term_destroy);
+  signal (SIGSEGV, (void*) real_evsource_kb_raw_destroy);
+  signal (SIGABRT, (void*) real_evsource_kb_raw_destroy);
+  signal (SIGBUS,  (void*) real_evsource_kb_raw_destroy);
+  signal (SIGKILL, (void*) real_evsource_kb_raw_destroy);
+  signal (SIGINT,  (void*) real_evsource_kb_raw_destroy);
+  signal (SIGTERM, (void*) real_evsource_kb_raw_destroy);
+  signal (SIGQUIT, (void*) real_evsource_kb_raw_destroy);
+
+  struct termios raw;
+  if (tcgetattr (STDIN_FILENO, &orig_attr) == -1)
+    {
+      fprintf (stderr, "error initializing keyboard\n");
+      return -1;
+    }
+  raw = orig_attr;
+
+  cfmakeraw (&raw);
+
+  raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */
+  if (tcsetattr (STDIN_FILENO, TCSAFLUSH, &raw) < 0)
+    return 0; // XXX? return other value?
+#endif
+
+   kb_fd = open( "/dev/input/event0", O_RDONLY | O_CLOEXEC );
+        if( -1 == kb_fd )
+        {
+            kb_fd = 0;
+            return -1;
+        }
+        char name[ 32 ];
+        if( -1 == ioctl( kb_fd, EVIOCGNAME( sizeof( name )), name ))
+        {
+            kb_fd = 0;
+            return -1;
+        }
+
+        // Grab input
+        if( -1 == ioctl( kb_fd, EVIOCGRAB, (void*)1 ))
+        {
+            fprintf(stderr, "Failed to grab input %s: (%i) %m", name, errno );
+            kb_fd = 0;
+            return -1;
+        }
+
+  return 0;
+}
+static int evsource_kb_raw_has_event (void)
+{
+  struct timeval tv;
+  int retval;
+
+  fd_set rfds;
+  FD_ZERO (&rfds);
+  FD_SET(kb_fd, &rfds);
+  tv.tv_sec = 0; tv.tv_usec = 0;
+  retval = select (kb_fd+1, &rfds, NULL, NULL, &tv);
+  return retval == 1;
+}
+
+typedef struct CtxRawKey{
+  int code;
+  const char *name;
+  const char *shifted;
+} CtxRawKey;
+
+
+static CtxRawKey raw_key_map[]=
+{
+   {KEY_F1, "F1","F1"},
+   {KEY_F2, "F2","F2"},
+   {KEY_F3, "F3","F3"},
+   {KEY_F4, "F4","F4"},
+   {KEY_F5, "F5","F5"},
+   {KEY_F6, "F6","F6"},
+   {KEY_F7, "F7","F7"},
+   {KEY_F8, "F8","F8"},
+   {KEY_F9, "F9","F9"},
+   {KEY_F10, "F10","F10"},
+   {KEY_ESC, "escape","escape"},
+   {KEY_SPACE, "space","space"},
+   {KEY_ENTER, "return","return"},
+   {KEY_LEFT, "left","left"},
+   {KEY_RIGHT, "right","right"},
+   {KEY_UP, "up","up"},
+   {KEY_DOWN, "down","down"},
+   {KEY_HOME, "home","home"},
+   {KEY_END, "end","end"},
+   {KEY_PAGEUP, "page-up","page-up"},
+   {KEY_PAGEDOWN, "page-down","page-down"},
+   {KEY_INSERT, "insert","insert"},
+   {KEY_DELETE, "delete","delete"},
+   {KEY_LEFTCTRL, "control","control"},
+   {KEY_RIGHTCTRL, "control","control"},
+   {KEY_LEFTSHIFT, "shift","shift"},
+   {KEY_RIGHTSHIFT, "shift","shift"},
+   {KEY_LEFTALT, "alt","alt"},
+   {KEY_RIGHTALT, "alt","alt"},
+   {KEY_MINUS, "-","_"},
+   {KEY_EQUAL, "=","+"},
+   {KEY_BACKSPACE, "backspace","backspace"},
+   {KEY_TAB, "tab","tab"},
+   {KEY_GRAVE, "`","~"},
+   {KEY_BACKSLASH, "\\","|"},
+   {KEY_SLASH, "/","?"},
+   {KEY_1, "1","!"},
+   {KEY_2, "2","@"},
+   {KEY_3, "3","#"},
+   {KEY_4, "4","$"},
+   {KEY_5, "5","%"},
+   {KEY_6, "6","^"},
+   {KEY_7, "7","&"},
+   {KEY_8, "8","*"},
+   {KEY_9, "9","("},
+   {KEY_0, "0",")"},
+
+   {KEY_Q, "q","Q"},
+   {KEY_W, "w","W"},
+   {KEY_E, "e","E"},
+   {KEY_R, "r","R"},
+   {KEY_T, "t","T"},
+   {KEY_Y, "y","Y"},
+   {KEY_U, "u","U"},
+   {KEY_I, "i","I"},
+   {KEY_O, "o","O"},
+   {KEY_P, "p","P"},
+   {KEY_A, "a","A"},
+   {KEY_S, "s","S"},
+   {KEY_D, "d","D"},
+   {KEY_F, "f","F"},
+   {KEY_G, "g","G"},
+   {KEY_H, "h","H"},
+   {KEY_J, "j","J"},
+   {KEY_K, "k","K"},
+   {KEY_L, "l","L"},
+   {KEY_Z, "z","Z"},
+   {KEY_X, "x","X"},
+   {KEY_C, "c","C"},
+   {KEY_V, "v","V"},
+   {KEY_B, "b","B"},
+   {KEY_N, "n","N"},
+   {KEY_M, "m","M"},
+   {KEY_SEMICOLON, ";",":"},
+   {KEY_APOSTROPHE, "'", "\""},
+   {KEY_EQUAL, "=", "+"},
+   {KEY_MINUS, "-", "_"},
+   {KEY_COMMA, ",", "<"},
+   {KEY_DOT, ".", ">"},
+   {KEY_SLASH, "/", "?"},
+   {KEY_LEFTBRACE, "[", "{"},
+   {KEY_RIGHTBRACE, "]", "}"}
+};
+
+static Ctx*ctx_fb_global = NULL;
+
+static char *evsource_kb_raw_get_event (void)
+{
+  struct input_event ev;
+  if (!ctx_fb_global) return NULL;
+  memset (&ev, 0, sizeof (ev));
+  if (-1==read(kb_fd, &ev, sizeof(ev)))
+  {
+    return NULL;
+  }
+  if (ev.type == EV_KEY)
+  {
+     for (unsigned int i = 0; i < sizeof(raw_key_map)/sizeof(raw_key_map[0]); i++)
+     {
+       if (raw_key_map[i].code == ev.code)
+       {
+          const char *name = raw_key_map[i].name;
+          switch (ev.value)
+          {
+            case 0: /* up */
+              ctx_key_up (ctx_fb_global, 0, name, 0);
+              break;
+            case 1: /* down */
+              ctx_key_down (ctx_fb_global, 0, name, 0);
+              /*FALLTHROUGH*/
+            case 2: /* repeat */
+              if (strcmp(name,"shift") &&
+                  strcmp(name,"control") &&
+                  strcmp(name,"alt"))
+              ctx_key_press (ctx_fb_global, 0, name, 0);
+              break;
+          }
+          return NULL;
+       }
+     }
+  }
+  return NULL;
+}
+
+static int evsource_kb_raw_get_fd (void)
+{
+  if (kb_fd >= 0)
+    return kb_fd;
+  return 0;
+}
+
+
+static inline EvSource *evsource_kb_raw_new (void)
+{
+  if (evsource_kb_raw_init() == 0)
+  {
+    return &ctx_ev_src_kb_raw;
+  }
+  return NULL;
+}
+#endif
+
+
+static inline int event_check_pending (CtxTiled *tiled)
+{
+  int events = 0;
+  for (int i = 0; i < tiled->evsource_count; i++)
+  {
+    while (evsource_has_event (tiled->evsource[i]))
+    {
+      char *event = evsource_get_event (tiled->evsource[i]);
+      if (event)
+      {
+        if (tiled->vt_active)
+        {
+          ctx_key_press (tiled->backend.ctx, 0, event, 0); // we deliver all events as key-press, the key_press handler disambiguates
+          events++;
+        }
+        ctx_free (event);
+      }
+    }
+  }
+  return events;
+}
+
+#endif
+
+void ctx_queue_draw (Ctx *ctx)
+{
+  ctx->dirty ++;
+}
+
+int ctx_in_fill (Ctx *ctx, float x, float y)
+{
+  float x1, y1, x2, y2;
+  float width, height;
+  float factor = 1.0f;
+  ctx_path_extents (ctx, &x1, &y1, &x2, &y2);
+  width = x2-x1;
+  height = y2-y1;
+  while ((width < 200 || height < 200) && factor < 16.0f)
+  {
+    width *=2;
+    height *=2;
+    factor *=2;
+  }
+  x1 *= factor;
+  y1 *= factor;
+  x2 *= factor;
+  y2 *= factor;
+  x *= factor;
+  y *= factor;
+
+  if (x1 <= x && x <= x2 && y1 <= y && y <= y2)
+  {
+#if CTX_CURRENT_PATH
+     uint32_t pixels[9] = {0,};
+     Ctx *tester = ctx_new_for_framebuffer (&pixels[0], 3, 3, 3*4, CTX_FORMAT_RGBA8);
+     ctx_translate (tester, -(x-1), -(y-1));
+     ctx_scale (tester, factor, factor);
+     ctx_gray (tester, 1.0f);
+     ctx_append_drawlist (tester, ctx->current_path.entries, ctx->current_path.count*9);
+     ctx_fill (tester);
+     ctx_destroy (tester);
+     if (pixels[1+3] != 0)
+       return 1;
+     return 0;
+#else
+     return 1
+#endif
+  }
+  return 0;
+}
+
+int ctx_in_stroke (Ctx *ctx, float x, float y)
+{
+  float x1, y1, x2, y2;
+  float width, height;
+  float factor = 1.0f;
+  ctx_path_extents (ctx, &x1, &y1, &x2, &y2);
+  width = x2-x1;
+  height = y2-y1;
+
+  while ((width < 200 || height < 200) && factor < 16.0f)
+  {
+    width *=2;
+    height *=2;
+    factor *=2;
+  }
+  x1 *= factor;
+  y1 *= factor;
+  x2 *= factor;
+  y2 *= factor;
+  x *= factor;
+  y *= factor;
+  if (x1 <= x && x <= x2 && y1 <= y && y <= y2)
+  {
+#if CTX_CURRENT_PATH
+     uint32_t pixels[9] = {0,};
+     Ctx *tester = ctx_new_for_framebuffer (&pixels[0], 3, 3, 3*4, CTX_FORMAT_RGBA8);
+     ctx_translate (tester, -(x-1), -(y-1));
+     ctx_scale (tester, factor, factor);
+     ctx_gray (tester, 1.0f);
+     ctx_append_drawlist (tester, ctx->current_path.entries, ctx->current_path.count*9);
+     ctx_line_width  (tester, ctx_get_line_width  (ctx) * factor);
+     ctx_line_cap    (tester, ctx_get_line_cap    (ctx));
+     ctx_line_join   (tester, ctx_get_line_join   (ctx));
+     ctx_miter_limit (tester, ctx_get_miter_limit (ctx) * factor);
+     ctx_stroke (tester);
+     ctx_destroy (tester);
+     if (pixels[1+3] != 0)
+       return 1;
+     return 0;
+#else
+     return 1
+#endif
+  }
+  return 0;
+}
+
+static void ctx_svg_arc_circle_to (Ctx *ctx,
+                                   float radius,
+                                   int large,
+                                   int sweep,
+                                   float x1, float y1)
+{
+  float x0, y0;
+  ctx_current_point (ctx, &x0, &y0);
+  int left_side = (large && !sweep) || (sweep && !large);
+
+  float delta_x = (x1-x0) * 0.5f;
+  float delta_y = (y1-y0) * 0.5f;
+
+  float midpoint_x = x0 + delta_x;
+  float midpoint_y = y0 + delta_y;
+
+  float radius_vec_x;
+  float radius_vec_y;
+  float r = radius;
+
+  if (left_side)
+  {
+    radius_vec_x = -delta_y;
+    radius_vec_y = delta_x;
+  }
+  else
+  {
+    radius_vec_x = delta_y;
+    radius_vec_y = -delta_x;
+  }
+
+  float len_squared = ctx_pow2(radius_vec_x) + ctx_pow2(radius_vec_y);
+  if (len_squared - 0.03f > r * r || r < 0)
+  {
+    r = ctx_sqrtf (len_squared);
+  }
+
+  float center_x = midpoint_x +
+           radius_vec_x * ctx_sqrtf(ctx_maxf(0, r * r / len_squared-1));
+  float center_y = midpoint_y +
+           radius_vec_y * ctx_sqrtf(ctx_maxf(0, r * r / len_squared-1));
+
+  float arc = ctx_asinf(ctx_clampf(ctx_sqrtf(len_squared)/r, -1.0, 1.0))*2;
+  if (large) arc = CTX_PI*2-arc;
+
+  float start_angle = ctx_atan2f(y0 - center_y, x0 - center_x);
+  float end_angle = sweep?start_angle+arc:start_angle-arc;
+
+  ctx_arc (ctx, center_x, center_y, r, start_angle, end_angle, !sweep);
+}
+
+
+static inline void ctx_svg_arc_to (Ctx *ctx, float rx, float ry, 
+                            float rotation,  int large, int sweep,
+                            float x1, float y1)
+{
+  ctx_svg_arc_circle_to (ctx, rx, large, sweep, x1, y1);
+  return;
+   // XXX the following fails, one reason is that
+   // ctx_current_point returns the point in the previous user_space
+   // not the current.
+
+  float x0, y0;
+  ctx_current_point (ctx, &x0, &y0);
+  float radius_min = ctx_hypotf (x1-x0,y1-y0)/2.0f;
+  float radius_lim = ctx_hypotf (rx, ry);
+  float up_scale = 1.0f;
+  if (radius_lim < radius_min)
+    up_scale = radius_min / radius_lim;
+  float ratio = rx / ry;
+  ctx_save (ctx);
+  ctx_scale (ctx, up_scale * ratio, up_scale);
+
+  //  the following is a hack, current_point should change instead,
+  //  but that can have performance impact on adding coordinates
+  ctx->state.x /= (up_scale * ratio);
+  ctx->state.y /= (up_scale);
+
+
+  //ctx_rotate (ctx, rotation);
+  
+  x1 = x1 / (up_scale * ratio);
+  y1 = y1 / (up_scale);
+
+  ctx_svg_arc_circle_to (ctx, rx, large, sweep, x1, y1);
+
+  ctx_restore (ctx);
+}
+
+/* the parser comes in the end, nothing in ctx knows about the parser  */
+
+#if CTX_PARSER
+
+/* ctx parser, */
+
+#define CTX_ID_MAXLEN 64 // in use should not be more than 40!
+                         // to offer headroom for multiplexing
+
+
+#define CTX_REPORT_COL_ROW 0
+
+struct
+  _CtxParser
+{
+  Ctx       *ctx;
+  int        t_args; // total number of arguments seen for current command
+  int        state;
+#if CTX_PARSER_FIXED_TEMP
+  uint8_t    holding[CTX_PARSER_MAXLEN]; /*  */
+#else
+  uint8_t   *holding;
+#endif
+  int        hold_len;
+  int        pos;
+
+#if CTX_REPORT_COL_ROW
+  int        line; /*  for error reporting */
+  int        col;  /*  for error reporting */
+#endif
+  float      numbers[CTX_PARSER_MAX_ARGS+1];
+  int        n_numbers;
+  int        decimal;
+  CtxCode    command;
+  int        expected_args; /* low digits are literal higher values
+                               carry special meaning */
+  int        n_args;
+  int        texture_done;
+  uint8_t    texture_id[CTX_ID_MAXLEN]; // used in defineTexture only
+  uint32_t   set_key_hash;
+  float      pcx;
+  float      pcy;
+  int        color_components;
+  int        color_stroke; // 0 is fill source  1 is stroke source
+  CtxColorModel   color_model; // 1 gray 3 rgb 4 cmyk
+  float      left_margin; // set by last user provided move_to
+  int        width;       // <- maybe should be float
+  int        height;
+  float      cell_width;
+  float      cell_height;
+  int        cursor_x;    // <- leaking in from terminal
+  int        cursor_y;
+
+  int        translate_origin;
+
+  CtxColorSpace   color_space_slot;
+
+  void (*exit) (void *exit_data);
+  void *exit_data;
+  int   (*set_prop)(void *prop_data, uint32_t key, const char *data,  int len);
+  int   (*get_prop)(void *prop_data, const char *key, char **data, int *len);
+  void *prop_data;
+  int   prev_byte;
+};
+
+void
+ctx_parser_set_size (CtxParser *parser,
+                 int        width,
+                 int        height,
+                 float      cell_width,
+                 float      cell_height)
+{
+  if (cell_width > 0)
+    parser->cell_width       = cell_width;
+  if (cell_height > 0)
+    parser->cell_height      = cell_height;
+  if (width > 0)
+    parser->width            = width;
+  if (height > 0)
+    parser->height           = height;
+}
+
+static CtxParser *
+ctx_parser_init (CtxParser *parser,
+                 Ctx       *ctx,
+                 int        width,
+                 int        height,
+                 float      cell_width,
+                 float      cell_height,
+                 int        cursor_x,
+                 int        cursor_y,
+  int   (*set_prop)(void *prop_data, uint32_t key, const char *data,  int len),
+  int   (*get_prop)(void *prop_Data, const char *key, char **data, int *len),
+                 void  *prop_data,
+                 void (*exit) (void *exit_data),
+                 void *exit_data
+                )
+{
+  ctx_memset (parser, 0, sizeof (CtxParser) );
+#if CTX_REPORT_COL_ROW
+  parser->line             = 1;
+#endif
+  parser->ctx              = ctx;
+  parser->cell_width       = cell_width;
+  parser->cell_height      = cell_height;
+  parser->cursor_x         = cursor_x;
+  parser->cursor_y         = cursor_y;
+  parser->width            = width;
+  parser->height           = height;
+  parser->exit             = exit;
+  parser->exit_data        = exit_data;
+  parser->color_model      = CTX_RGBA;
+  parser->color_stroke     = 0;
+  parser->color_components = 4;
+  parser->command          = CTX_MOVE_TO;
+  parser->set_prop         = set_prop;
+  parser->get_prop         = get_prop;
+  parser->prop_data        = prop_data;
+  return parser;
+}
+
+CtxParser *ctx_parser_new (
+  Ctx       *ctx,
+  int        width,
+  int        height,
+  float      cell_width,
+  float      cell_height,
+  int        cursor_x,
+  int        cursor_y,
+  int   (*set_prop)(void *prop_data, uint32_t key, const char *data,  int len),
+  int   (*get_prop)(void *prop_Data, const char *key, char **data, int *len),
+  void  *prop_data,
+  void (*exit) (void *exit_data),
+  void *exit_data)
+{
+  return ctx_parser_init ( (CtxParser *) ctx_calloc (sizeof (CtxParser), 1),
+                           ctx,
+                           width, height,
+                           cell_width, cell_height,
+                           cursor_x, cursor_y, set_prop, get_prop, prop_data,
+                           exit, exit_data);
+}
+
+void ctx_parser_destroy (CtxParser *parser)
+{
+#if !CTX_PARSER_FIXED_TEMP
+  if (parser->holding)
+    ctx_free (parser->holding);
+#endif
+  ctx_free (parser);
+}
+
+#define CTX_ARG_COLLECT_NUMBERS             50
+#define CTX_ARG_STRING_OR_NUMBER            100
+#define CTX_ARG_NUMBER_OF_COMPONENTS        200
+#define CTX_ARG_NUMBER_OF_COMPONENTS_PLUS_1 201
+
+static int ctx_arguments_for_code (CtxCode code)
+{
+  switch (code)
+    {
+      case CTX_SAVE:
+      case CTX_START_GROUP:
+      case CTX_END_GROUP:
+      case CTX_IDENTITY:
+      case CTX_CLOSE_PATH:
+      case CTX_BEGIN_PATH:
+      case CTX_START_FRAME:
+      case CTX_END_FRAME:
+      case CTX_RESTORE:
+      case CTX_STROKE:
+      case CTX_FILL:
+      case CTX_PAINT:
+      case CTX_DEFINE_FONT:
+      case CTX_NEW_PAGE:
+      case CTX_CLIP:
+      case CTX_EXIT:
+        return 0;
+      case CTX_GLOBAL_ALPHA:
+      case CTX_COMPOSITING_MODE:
+      case CTX_BLEND_MODE:
+      case CTX_EXTEND:
+      case CTX_FONT_SIZE:
+      case CTX_LINE_JOIN:
+      case CTX_LINE_CAP:
+      case CTX_LINE_WIDTH:
+      case CTX_LINE_DASH_OFFSET:
+      case CTX_LINE_HEIGHT:
+      case CTX_WRAP_LEFT:
+      case CTX_WRAP_RIGHT:
+      case CTX_IMAGE_SMOOTHING:
+      case CTX_SHADOW_BLUR:
+      case CTX_SHADOW_OFFSET_X:
+      case CTX_SHADOW_OFFSET_Y:
+      case CTX_FILL_RULE:
+      case CTX_TEXT_ALIGN:
+      case CTX_TEXT_BASELINE:
+      case CTX_TEXT_DIRECTION:
+      case CTX_MITER_LIMIT:
+      case CTX_REL_VER_LINE_TO:
+      case CTX_REL_HOR_LINE_TO:
+      case CTX_HOR_LINE_TO:
+      case CTX_VER_LINE_TO:
+      case CTX_FONT:
+      case CTX_ROTATE:
+      case CTX_GLYPH:
+        return 1;
+      case CTX_TRANSLATE:
+      case CTX_REL_SMOOTHQ_TO:
+      case CTX_LINE_TO:
+      case CTX_MOVE_TO:
+      case CTX_SCALE:
+      case CTX_REL_LINE_TO:
+      case CTX_REL_MOVE_TO:
+      case CTX_SMOOTHQ_TO:
+        return 2;
+      case CTX_LINEAR_GRADIENT:
+      case CTX_REL_QUAD_TO:
+      case CTX_QUAD_TO:
+      case CTX_RECTANGLE:
+      case CTX_FILL_RECT:
+      case CTX_STROKE_RECT:
+      case CTX_REL_SMOOTH_TO:
+      case CTX_VIEW_BOX:
+      case CTX_SMOOTH_TO:
+        return 4;
+      case CTX_ROUND_RECTANGLE:
+        return 5;
+      case CTX_ARC:
+      case CTX_CURVE_TO:
+      case CTX_REL_CURVE_TO:
+      case CTX_RADIAL_GRADIENT:
+        return 6;
+      case CTX_ARC_TO:
+      case CTX_REL_ARC_TO:
+        return 7;
+      case CTX_APPLY_TRANSFORM:
+      case CTX_SOURCE_TRANSFORM:
+        return 9;
+      case CTX_STROKE_TEXT:
+      case CTX_TEXT:
+      case CTX_COLOR_SPACE:
+      case CTX_DEFINE_GLYPH:
+      case CTX_KERNING_PAIR:
+      case CTX_TEXTURE:
+      case CTX_DEFINE_TEXTURE:
+        return CTX_ARG_STRING_OR_NUMBER;
+      case CTX_LINE_DASH: /* append to current dashes for each argument encountered */
+        return CTX_ARG_COLLECT_NUMBERS;
+      //case CTX_SET_KEY:
+      case CTX_COLOR:
+      case CTX_SHADOW_COLOR:
+        return CTX_ARG_NUMBER_OF_COMPONENTS;
+      case CTX_GRADIENT_STOP:
+        return CTX_ARG_NUMBER_OF_COMPONENTS_PLUS_1;
+
+        default:
+#if 1
+        case CTX_SET_RGBA_U8:
+        case CTX_NOP:
+        case CTX_NEW_EDGE:
+        case CTX_EDGE:
+        case CTX_EDGE_FLIPPED:
+        case CTX_CONT:
+        case CTX_DATA:
+        case CTX_DATA_REV:
+        case CTX_SET_PIXEL:
+        case CTX_REL_LINE_TO_X4:
+        case CTX_REL_LINE_TO_REL_CURVE_TO:
+        case CTX_REL_CURVE_TO_REL_LINE_TO:
+        case CTX_REL_CURVE_TO_REL_MOVE_TO:
+        case CTX_REL_LINE_TO_X2:
+        case CTX_MOVE_TO_REL_LINE_TO:
+        case CTX_REL_LINE_TO_REL_MOVE_TO:
+        case CTX_FILL_MOVE_TO:
+        case CTX_REL_QUAD_TO_REL_QUAD_TO:
+        case CTX_REL_QUAD_TO_S16:
+        case CTX_STROKE_SOURCE:
+#endif
+        return 0;
+    }
+}
+
+static int ctx_parser_set_command (CtxParser *parser, CtxCode code)
+{
+  if (code < 150 && code >= 32)
+  {
+  parser->expected_args = ctx_arguments_for_code (code);
+  parser->n_args = 0;
+  parser->texture_done = 0;
+  if (parser->expected_args >= CTX_ARG_NUMBER_OF_COMPONENTS)
+    {
+      parser->expected_args = (parser->expected_args % 100) + parser->color_components;
+    }
+  }
+  return code;
+}
+
+static void ctx_parser_set_color_model (CtxParser *parser, CtxColorModel color_model, int stroke);
+
+static int ctx_parser_resolve_command (CtxParser *parser, const uint8_t *str)
+{
+  uint32_t ret = str[0]; /* if it is single char it already is the CtxCode */
+
+  /* this is handled outside the hashing to make it possible to be case insensitive
+   * with the rest.
+   */
+  if (str[0] == CTX_SET_KEY && str[1] && str[2] == 0)
+  {
+    switch (str[1])
+    {
+      case 'm': return ctx_parser_set_command (parser, CTX_COMPOSITING_MODE);
+      case 'B': return ctx_parser_set_command (parser, CTX_BLEND_MODE);
+      case 'e': return ctx_parser_set_command (parser, CTX_EXTEND);
+      case 'l': return ctx_parser_set_command (parser, CTX_MITER_LIMIT);
+      case 't': return ctx_parser_set_command (parser, CTX_TEXT_ALIGN);
+      case 'b': return ctx_parser_set_command (parser, CTX_TEXT_BASELINE);
+      case 'd': return ctx_parser_set_command (parser, CTX_TEXT_DIRECTION);
+      case 'j': return ctx_parser_set_command (parser, CTX_LINE_JOIN);
+      case 'c': return ctx_parser_set_command (parser, CTX_LINE_CAP);
+      case 'w': return ctx_parser_set_command (parser, CTX_LINE_WIDTH);
+      case 'D': return ctx_parser_set_command (parser, CTX_LINE_DASH_OFFSET);
+      case 'H': return ctx_parser_set_command (parser, CTX_LINE_HEIGHT);
+      case 'L': return ctx_parser_set_command (parser, CTX_WRAP_LEFT);
+      case 'R': return ctx_parser_set_command (parser, CTX_WRAP_RIGHT);
+      case 'S': return ctx_parser_set_command (parser, CTX_IMAGE_SMOOTHING);
+      case 'C': return ctx_parser_set_command (parser, CTX_SHADOW_COLOR);
+      case 's': return ctx_parser_set_command (parser, CTX_SHADOW_BLUR);
+      case 'x': return ctx_parser_set_command (parser, CTX_SHADOW_OFFSET_X);
+      case 'y': return ctx_parser_set_command (parser, CTX_SHADOW_OFFSET_Y);
+      case 'a': return ctx_parser_set_command (parser, CTX_GLOBAL_ALPHA);
+      case 'f': return ctx_parser_set_command (parser, CTX_FONT_SIZE);
+      case 'r': return ctx_parser_set_command (parser, CTX_FILL_RULE);
+    }
+  }
+
+  if (str[0] && str[1])
+    {
+      uint32_t str_hash;
+      /* trim ctx_ and CTX_ prefix */
+      if ( (str[0] == 'c' && str[1] == 't' && str[2] == 'x' && str[3] == '_') ||
+           (str[0] == 'C' && str[1] == 'T' && str[2] == 'X' && str[3] == '_') )
+        {
+          str += 4;
+        }
+      if ( (str[0] == 's' && str[1] == 'e' && str[2] == 't' && str[3] == '_') )
+        { str += 4; }
+      str_hash = ctx_strhash ( (char *) str);
+      switch (str_hash)
+        {
+          /* first a list of mappings to one_char hashes, handled in a
+           * separate fast path switch without hashing
+           */
+          case CTX_arcTo:          ret = CTX_ARC_TO; break;
+          case CTX_arc:            ret = CTX_ARC; break;
+          case CTX_curveTo:        ret = CTX_CURVE_TO; break;
+          case CTX_restore:        ret = CTX_RESTORE; break;
+          case CTX_stroke:         ret = CTX_STROKE; break;
+          case CTX_fill:           ret = CTX_FILL; break;
+          case CTX_paint:          ret = CTX_PAINT; break;
+          case CTX_endFrame:       ret = CTX_END_FRAME; break;
+          case CTX_horLineTo:      ret = CTX_HOR_LINE_TO; break;
+          case CTX_rotate:         ret = CTX_ROTATE; break;
+          case CTX_color:          ret = CTX_COLOR; break;
+          case CTX_lineTo:         ret = CTX_LINE_TO; break;
+          case CTX_moveTo:         ret = CTX_MOVE_TO; break;
+          case CTX_scale:          ret = CTX_SCALE; break;
+          case CTX_newPage:        ret = CTX_NEW_PAGE; break;
+          case CTX_quadTo:         ret = CTX_QUAD_TO; break;
+          case CTX_viewBox:        ret = CTX_VIEW_BOX; break;
+          case CTX_smoothTo:       ret = CTX_SMOOTH_TO; break;
+          case CTX_smoothQuadTo:   ret = CTX_SMOOTHQ_TO; break;
+          case CTX_clear:          ret = CTX_COMPOSITE_CLEAR; break;
+          case CTX_copy:           ret = CTX_COMPOSITE_COPY; break;
+          case CTX_destinationOver:  ret = CTX_COMPOSITE_DESTINATION_OVER; break;
+          case CTX_destinationIn:    ret = CTX_COMPOSITE_DESTINATION_IN; break;
+          case CTX_destinationOut:   ret = CTX_COMPOSITE_DESTINATION_OUT; break;
+          case CTX_sourceOver:       ret = CTX_COMPOSITE_SOURCE_OVER; break;
+          case CTX_sourceAtop:       ret = CTX_COMPOSITE_SOURCE_ATOP; break;
+          case CTX_destinationAtop:  ret = CTX_COMPOSITE_DESTINATION_ATOP; break;
+          case CTX_sourceOut:        ret = CTX_COMPOSITE_SOURCE_OUT; break;
+          case CTX_sourceIn:         ret = CTX_COMPOSITE_SOURCE_IN; break;
+          case CTX_xor:              ret = CTX_COMPOSITE_XOR; break;
+          case CTX_darken:           ret = CTX_BLEND_DARKEN; break;
+          case CTX_lighten:          ret = CTX_BLEND_LIGHTEN; break;
+          //case CTX_color:          ret = CTX_BLEND_COLOR; break;
+          //
+          //  XXX check that he special casing for color works
+          //      it is the first collision and it is due to our own
+          //      color, not w3c for now unique use of it
+          //
+          case CTX_hue:            ret = CTX_BLEND_HUE; break;
+          case CTX_multiply:       ret = CTX_BLEND_MULTIPLY; break;
+          case CTX_normal:         ret = CTX_BLEND_NORMAL;break;
+          case CTX_screen:         ret = CTX_BLEND_SCREEN;break;
+          case CTX_difference:     ret = CTX_BLEND_DIFFERENCE; break;
+          case CTX_startFrame:     ret = CTX_START_FRAME; break;
+          case CTX_verLineTo:      ret = CTX_VER_LINE_TO; break;
+          case CTX_exit:
+          case CTX_done:           ret = CTX_EXIT; break;
+          case CTX_closePath:      ret = CTX_CLOSE_PATH; break;
+          case CTX_beginPath:
+          case CTX_newPath:        ret = CTX_BEGIN_PATH; break;
+          case CTX_relArcTo:       ret = CTX_REL_ARC_TO; break;
+          case CTX_clip:           ret = CTX_CLIP; break;
+          case CTX_relCurveTo:     ret = CTX_REL_CURVE_TO; break;
+          case CTX_startGroup:     ret = CTX_START_GROUP; break;
+          case CTX_endGroup:       ret = CTX_END_GROUP; break;
+          case CTX_save:           ret = CTX_SAVE; break;
+          case CTX_translate:      ret = CTX_TRANSLATE; break;
+          case CTX_linearGradient: ret = CTX_LINEAR_GRADIENT; break;
+          case CTX_relHorLineTo:   ret = CTX_REL_HOR_LINE_TO; break;
+          case CTX_relLineTo:      ret = CTX_REL_LINE_TO; break;
+          case CTX_relMoveTo:      ret = CTX_REL_MOVE_TO; break;
+          case CTX_font:           ret = CTX_FONT; break;
+          case CTX_radialGradient:ret = CTX_RADIAL_GRADIENT; break;
+          case CTX_gradientAddStop:
+          case CTX_addStop:        ret = CTX_GRADIENT_STOP; break;
+          case CTX_relQuadTo:      ret = CTX_REL_QUAD_TO; break;
+          case CTX_rectangle:
+          case CTX_rect:           ret = CTX_RECTANGLE; break;
+          case CTX_roundRectangle: ret = CTX_ROUND_RECTANGLE; break;
+          case CTX_relSmoothTo:    ret = CTX_REL_SMOOTH_TO; break;
+          case CTX_relSmoothqTo:   ret = CTX_REL_SMOOTHQ_TO; break;
+          case CTX_strokeText:     ret = CTX_STROKE_TEXT; break;
+          case CTX_strokeRect:     ret = CTX_STROKE_RECT; break;
+          case CTX_fillRect:       ret = CTX_FILL_RECT; break;
+          case CTX_relVerLineTo:   ret = CTX_REL_VER_LINE_TO; break;
+          case CTX_text:           ret = CTX_TEXT; break;
+          case CTX_identity:       ret = CTX_IDENTITY; break;
+          case CTX_transform:      ret = CTX_APPLY_TRANSFORM; break;
+          case CTX_sourceTransform: ret = CTX_SOURCE_TRANSFORM; break;
+          case CTX_texture:        ret = CTX_TEXTURE; break;
+          case CTX_defineTexture:  ret = CTX_DEFINE_TEXTURE; break;
+#if 0
+          case CTX_rgbSpace:
+            return ctx_parser_set_command (parser, CTX_SET_RGB_SPACE);
+          case CTX_cmykSpace:
+            return ctx_parser_set_command (parser, CTX_SET_CMYK_SPACE);
+          case CTX_drgbSpace:
+            return ctx_parser_set_command (parser, CTX_SET_DRGB_SPACE);
+#endif
+          case CTX_defineFont:
+            return ctx_parser_set_command (parser, CTX_DEFINE_FONT);
+          case CTX_defineGlyph:
+            return ctx_parser_set_command (parser, CTX_DEFINE_GLYPH);
+          case CTX_kerningPair:
+            return ctx_parser_set_command (parser, CTX_KERNING_PAIR);
+
+          case CTX_colorSpace:
+            return ctx_parser_set_command (parser, CTX_COLOR_SPACE);
+          case CTX_fillRule:
+            return ctx_parser_set_command (parser, CTX_FILL_RULE);
+          case CTX_fontSize:
+          case CTX_setFontSize:
+            return ctx_parser_set_command (parser, CTX_FONT_SIZE);
+          case CTX_compositingMode:
+            return ctx_parser_set_command (parser, CTX_COMPOSITING_MODE);
+
+          case CTX_extend:
+            return ctx_parser_set_command (parser, CTX_EXTEND);
+
+          case CTX_blend:
+          case CTX_blending:
+          case CTX_blendMode:
+            return ctx_parser_set_command (parser, CTX_BLEND_MODE);
+
+          case CTX_miterLimit:
+            return ctx_parser_set_command (parser, CTX_MITER_LIMIT);
+          case CTX_textAlign:
+            return ctx_parser_set_command (parser, CTX_TEXT_ALIGN);
+          case CTX_textBaseline:
+            return ctx_parser_set_command (parser, CTX_TEXT_BASELINE);
+          case CTX_textDirection:
+            return ctx_parser_set_command (parser, CTX_TEXT_DIRECTION);
+          case CTX_join:
+          case CTX_lineJoin:
+          case CTX_setLineJoin:
+            return ctx_parser_set_command (parser, CTX_LINE_JOIN);
+          case CTX_glyph:
+            return ctx_parser_set_command (parser, CTX_GLYPH);
+          case CTX_cap:
+          case CTX_lineCap:
+          case CTX_setLineCap:
+            return ctx_parser_set_command (parser, CTX_LINE_CAP);
+          case CTX_lineDash:
+            return ctx_parser_set_command (parser, CTX_LINE_DASH);
+          case CTX_lineWidth:
+          case CTX_setLineWidth:
+            return ctx_parser_set_command (parser, CTX_LINE_WIDTH);
+          case CTX_lineDashOffset:
+            return ctx_parser_set_command (parser, CTX_LINE_DASH_OFFSET);
+          case CTX_lineHeight:
+            return ctx_parser_set_command (parser, CTX_LINE_HEIGHT);
+          case CTX_wrapLeft:
+            return ctx_parser_set_command (parser, CTX_WRAP_LEFT);
+          case CTX_wrapRight:
+            return ctx_parser_set_command (parser, CTX_WRAP_RIGHT);
+          case CTX_imageSmoothing:
+            return ctx_parser_set_command (parser, CTX_IMAGE_SMOOTHING);
+          case CTX_shadowColor:
+            return ctx_parser_set_command (parser, CTX_SHADOW_COLOR);
+          case CTX_shadowBlur:
+            return ctx_parser_set_command (parser, CTX_SHADOW_BLUR);
+          case CTX_shadowOffsetX:
+            return ctx_parser_set_command (parser, CTX_SHADOW_OFFSET_X);
+          case CTX_shadowOffsetY:
+            return ctx_parser_set_command (parser, CTX_SHADOW_OFFSET_Y);
+          case CTX_globalAlpha:
+            return ctx_parser_set_command (parser, CTX_GLOBAL_ALPHA);
+
+          case CTX_strokeSource:
+            return ctx_parser_set_command (parser, CTX_STROKE_SOURCE);
+
+          /* strings are handled directly here,
+           * instead of in the one-char handler, using return instead of break
+           */
+          case CTX_gray:
+            ctx_parser_set_color_model (parser, CTX_GRAY, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_graya:
+            ctx_parser_set_color_model (parser, CTX_GRAYA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_rgb:
+            ctx_parser_set_color_model (parser, CTX_RGB, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_drgb:
+            ctx_parser_set_color_model (parser, CTX_DRGB, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_rgba:
+            ctx_parser_set_color_model (parser, CTX_RGBA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_drgba:
+            ctx_parser_set_color_model (parser, CTX_DRGBA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_cmyk:
+            ctx_parser_set_color_model (parser, CTX_CMYK, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_cmyka:
+            ctx_parser_set_color_model (parser, CTX_CMYKA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_lab:
+            ctx_parser_set_color_model (parser, CTX_LAB, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_laba:
+            ctx_parser_set_color_model (parser, CTX_LABA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_lch:
+            ctx_parser_set_color_model (parser, CTX_LCH, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_lcha:
+            ctx_parser_set_color_model (parser, CTX_LCHA, 0);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+
+          /* and a full repeat of the above, with S for Stroke suffix */
+          case CTX_grayS:
+            ctx_parser_set_color_model (parser, CTX_GRAY, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_grayaS:
+            ctx_parser_set_color_model (parser, CTX_GRAYA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_rgbS:
+            ctx_parser_set_color_model (parser, CTX_RGB, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_drgbS:
+            ctx_parser_set_color_model (parser, CTX_DRGB, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_rgbaS:
+            ctx_parser_set_color_model (parser, CTX_RGBA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_drgbaS:
+            ctx_parser_set_color_model (parser, CTX_DRGBA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_cmykS:
+            ctx_parser_set_color_model (parser, CTX_CMYK, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_cmykaS:
+            ctx_parser_set_color_model (parser, CTX_CMYKA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_labS:
+            ctx_parser_set_color_model (parser, CTX_LAB, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_labaS:
+            ctx_parser_set_color_model (parser, CTX_LABA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_lchS:
+            ctx_parser_set_color_model (parser, CTX_LCH, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+          case CTX_lchaS:
+            ctx_parser_set_color_model (parser, CTX_LCHA, 1);
+            return ctx_parser_set_command (parser, CTX_COLOR);
+
+          /* words that correspond to low integer constants
+          */
+          case CTX_nonzero:     return CTX_FILL_RULE_WINDING;
+          case CTX_winding:     return CTX_FILL_RULE_WINDING;
+          case CTX_evenOdd:     return CTX_FILL_RULE_EVEN_ODD;
+          case CTX_bevel:       return CTX_JOIN_BEVEL;
+          case CTX_round:       return CTX_JOIN_ROUND;
+          case CTX_miter:       return CTX_JOIN_MITER;
+          case CTX_none:        return CTX_CAP_NONE;
+          case CTX_square:      return CTX_CAP_SQUARE;
+          case CTX_start:       return CTX_TEXT_ALIGN_START;
+          case CTX_end:         return CTX_TEXT_ALIGN_END;
+          case CTX_left:        return CTX_TEXT_ALIGN_LEFT;
+          case CTX_right:       return CTX_TEXT_ALIGN_RIGHT;
+          case CTX_center:      return CTX_TEXT_ALIGN_CENTER;
+          case CTX_top:         return CTX_TEXT_BASELINE_TOP;
+          case CTX_bottom :     return CTX_TEXT_BASELINE_BOTTOM;
+          case CTX_middle:      return CTX_TEXT_BASELINE_MIDDLE;
+          case CTX_alphabetic:  return CTX_TEXT_BASELINE_ALPHABETIC;
+          case CTX_hanging:     return CTX_TEXT_BASELINE_HANGING;
+          case CTX_ideographic: return CTX_TEXT_BASELINE_IDEOGRAPHIC;
+
+          case CTX_userRGB:     return CTX_COLOR_SPACE_USER_RGB;
+          case CTX_deviceRGB:   return CTX_COLOR_SPACE_DEVICE_RGB;
+          case CTX_userCMYK:    return CTX_COLOR_SPACE_USER_CMYK;
+          case CTX_deviceCMYK:  return CTX_COLOR_SPACE_DEVICE_CMYK;
+#undef STR
+#undef LOWER
+          default:
+            ret = str_hash;
+        }
+    }
+  if (ret == CTX_CLOSE_PATH2)
+   {
+     ret = CTX_CLOSE_PATH;
+   }
+
+  return ctx_parser_set_command (parser, (CtxCode) ret);
+}
+
+enum
+{
+  CTX_PARSER_NEUTRAL = 0,
+  CTX_PARSER_NUMBER,
+  CTX_PARSER_NEGATIVE_NUMBER,
+  CTX_PARSER_WORD,
+  CTX_PARSER_COMMENT,
+  CTX_PARSER_STRING_APOS,
+  CTX_PARSER_STRING_QUOT,
+  CTX_PARSER_STRING_APOS_ESCAPED,
+  CTX_PARSER_STRING_QUOT_ESCAPED,
+  CTX_PARSER_STRING_A85,
+  CTX_PARSER_STRING_YENC,
+} CTX_STATE;
+
+static void ctx_parser_set_color_model (CtxParser *parser, CtxColorModel color_model, int stroke)
+{
+  parser->color_model      = color_model;
+  parser->color_stroke     = stroke;
+  parser->color_components = ctx_color_model_get_components (color_model);
+}
+
+static void ctx_parser_get_color_rgba (CtxParser *parser, int offset, float *red, float *green, float *blue, float *alpha)
+{
+  /* XXX - this function is to be deprecated */
+  *alpha = 1.0f;
+  switch (parser->color_model)
+    {
+      case CTX_GRAYA:
+        *alpha = parser->numbers[offset + 1];
+        /* FALLTHROUGH */
+      case CTX_GRAY:
+        *red = *green = *blue = parser->numbers[offset + 0];
+        break;
+      default:
+      case CTX_LABA: // NYI - needs RGB profile
+      case CTX_LCHA: // NYI - needs RGB profile
+      case CTX_RGBA:
+        *alpha = parser->numbers[offset + 3];
+        /* FALLTHROUGH */
+      case CTX_LAB: // NYI
+      case CTX_LCH: // NYI
+      case CTX_RGB:
+        *red = parser->numbers[offset + 0];
+        *green = parser->numbers[offset + 1];
+        *blue = parser->numbers[offset + 2];
+        break;
+      case CTX_CMYKA:
+        *alpha = parser->numbers[offset + 4];
+        /* FALLTHROUGH */
+      case CTX_CMYK:
+        /* should use profile instead  */
+        *red = (1.0f-parser->numbers[offset + 0]) *
+               (1.0f - parser->numbers[offset + 3]);
+        *green = (1.0f-parser->numbers[offset + 1]) *
+                 (1.0f - parser->numbers[offset + 3]);
+        *blue = (1.0f-parser->numbers[offset + 2]) *
+                (1.0f - parser->numbers[offset + 3]);
+        break;
+    }
+}
+
+static void ctx_parser_dispatch_command (CtxParser *parser)
+{
+  CtxCode cmd = parser->command;
+  Ctx *ctx = parser->ctx;
+
+  if (parser->expected_args != CTX_ARG_STRING_OR_NUMBER &&
+      parser->expected_args != CTX_ARG_COLLECT_NUMBERS &&
+      parser->expected_args != parser->n_numbers)
+    {
+#if CTX_REPORT_COL_ROW
+         fprintf (stderr, "ctx:%i:%i %c got %i instead of %i args\n",
+               parser->line, parser->col,
+               cmd, parser->n_numbers, parser->expected_args);
+#endif
+      //return;
+    }
+
+#define arg(a)  (parser->numbers[a])
+  parser->command = CTX_NOP;
+  //parser->n_args = 0;
+  switch (cmd)
+    {
+      default:
+        break; // to silence warnings about missing ones
+      case CTX_PRESERVE:
+        ctx_preserve (ctx);
+        break;
+      case CTX_FILL:
+        ctx_fill (ctx);
+        break;
+      case CTX_PAINT:
+        ctx_paint (ctx);
+        break;
+      case CTX_SAVE:
+        ctx_save (ctx);
+        break;
+      case CTX_START_GROUP:
+        ctx_start_group (ctx);
+        break;
+      case CTX_END_GROUP:
+        ctx_end_group (ctx);
+        break;
+      case CTX_STROKE:
+        ctx_stroke (ctx);
+        break;
+      case CTX_STROKE_SOURCE:
+        ctx_stroke_source (ctx);
+        break;
+      case CTX_RESTORE:
+        ctx_restore (ctx);
+        break;
+#if CTX_ENABLE_CM
+      case CTX_COLOR_SPACE:
+        if (parser->n_numbers == 1)
+        {
+          parser->color_space_slot = (CtxColorSpace) arg(0);
+          parser->command = CTX_COLOR_SPACE; // did this work without?
+        }
+        else
+        {
+          ctx_colorspace (ctx, (CtxColorSpace)parser->color_space_slot,
+                               parser->holding, parser->pos);
+        }
+        break;
+#endif
+      case CTX_KERNING_PAIR:
+        switch (parser->n_args)
+        {
+          case 0:
+            parser->numbers[0] = ctx_utf8_to_unichar ((char*)parser->holding);
+            break;
+          case 1:
+            parser->numbers[1] = ctx_utf8_to_unichar ((char*)parser->holding);
+            break;
+          case 2:
+            parser->numbers[2] = _ctx_parse_float ((char*)parser->holding, NULL);
+            {
+              CtxEntry e = {CTX_KERNING_PAIR, {{0},}};
+              e.data.u16[0] = (uint16_t)parser->numbers[0];
+              e.data.u16[1] = (uint16_t)parser->numbers[1];
+              e.data.s32[1] = (int32_t)(parser->numbers[2] * 256);
+              ctx_process (ctx, &e);
+            }
+            break;
+        }
+        parser->command = CTX_KERNING_PAIR;
+        parser->n_args ++; // make this more generic?
+        break;             
+      case CTX_TEXTURE:
+        if (parser->texture_done)
+        {
+        }
+        else
+        if (parser->n_numbers == 2)
+        {
+          const char *eid = (char*)parser->holding;
+          float x0 = arg(0);
+          float x1 = arg(1);
+          ctx_texture (ctx, eid, x0, x1);
+          parser->texture_done = 1;
+        }
+        parser->command = CTX_TEXTURE;
+        //parser->n_args++;
+        break;
+      case CTX_DEFINE_TEXTURE:
+        if (parser->texture_done)
+        {
+          if (parser->texture_done++ == 1)
+          {
+             const char *eid = (char*)parser->texture_id;
+             int width  = (int)arg(0);
+             int height = (int)arg(1);
+             CtxPixelFormat format = (CtxPixelFormat)arg(2);
+             int stride = ctx_pixel_format_get_stride (format, width);
+             int data_len = stride * height;
+             if (format == CTX_FORMAT_YUV420)
+                 data_len = height * width + 2*(height/2) * (width/2);
+
+
+             if (parser->pos != data_len)
+             {
+             fprintf (stderr, "unexpected datasize for define texture %s %ix%i\n size:%i != expected:%i - start of data: %i %i %i %i\n", eid, width, height,
+                               parser->pos,
+                               stride * height,
+                               parser->holding[0],
+                               parser->holding[1],
+                               parser->holding[2],
+                               parser->holding[3]
+                               );
+             }
+             else
+             ctx_define_texture (ctx, eid, width, height, stride, format, parser->holding, NULL);
+          }
+        }
+        else
+        {
+        switch (parser->n_numbers)
+        {
+          case 0:
+             strncpy ((char*)parser->texture_id, (char*)parser->holding, sizeof(parser->texture_id));
+             parser->texture_id[sizeof(parser->texture_id)-1]=0;
+             break;
+          case 1:
+          case 2:
+             break;
+          case 3:
+             parser->texture_done = 1;
+             break;
+          default:
+             fprintf (stderr, "!!%i\n", parser->n_numbers);
+             break;
+        }
+        }
+        parser->command = CTX_DEFINE_TEXTURE;
+        break;
+
+      case CTX_DEFINE_FONT:
+        // XXX: todo
+        break;
+
+      case CTX_DEFINE_GLYPH:
+        /* XXX : reuse n_args logic - to enforce order */
+        if (parser->n_numbers == 1)
+        {
+          CtxEntry e = {CTX_DEFINE_GLYPH, {{0},}};
+          e.data.u32[0] = parser->color_space_slot;
+          e.data.u32[1] = (int)arg(0) * 256;
+          ctx_process (ctx, &e);
+        }
+        else
+        {
+          int unichar = ctx_utf8_to_unichar ((char*)parser->holding);
+          parser->color_space_slot = (CtxColorSpace)unichar;
+        }
+        parser->command = CTX_DEFINE_GLYPH;
+        break;             
+
+      case CTX_COLOR:
+        {
+          switch (parser->color_model)
+            {
+              case CTX_GRAY:
+              case CTX_GRAYA:
+              case CTX_RGB:
+              case CTX_RGBA:
+              case CTX_DRGB:
+              case CTX_DRGBA:
+                ctx_color_raw (ctx, parser->color_model, parser->numbers, parser->color_stroke);
+                break;
+#if CTX_ENABLE_CMYK
+              case CTX_CMYK:
+              case CTX_CMYKA:
+                ctx_color_raw (ctx, parser->color_model, parser->numbers, parser->color_stroke);
+                break;
+#else
+              /* when there is no cmyk support at all in rasterizer
+               * do a naive mapping to RGB on input.
+               */
+              case CTX_CMYK:
+              case CTX_CMYKA:
+              case CTX_DCMYKA:
+                {
+                  float rgba[4] = {1,1,1,1.0f};
+
+                  ctx_cmyk_to_rgb (arg(0), arg(1), arg(2), arg(3), &rgba[0], &rgba[1], &rgba[2]);
+                  if (parser->color_model == CTX_CMYKA)
+                    { rgba[3] = arg(4); }
+                  ctx_color_raw (ctx, CTX_RGBA, rgba, parser->color_stroke);
+                }
+                break;
+#endif
+              case CTX_LAB:
+              case CTX_LCH:
+              default:
+                break;
+            }
+        }
+        break;
+      case CTX_LINE_DASH:
+        if (parser->n_numbers)
+        {
+          ctx_line_dash (ctx, parser->numbers, parser->n_numbers);
+        }
+        else
+        {
+          ctx_line_dash (ctx, NULL, 0);
+        }
+        //append_dash_val (ctx, arg(0));
+        break;
+      case CTX_ARC_TO:
+        ctx_svg_arc_to (ctx, arg(0), arg(1), arg(2), (int)arg(3), (int)arg(4), arg(5), arg(6));
+        break;
+      case CTX_REL_ARC_TO:
+        //ctx_rel_arc_to (ctx, arg(0), arg(1), arg(2), arg(3), arg(4) );
+        //
+        {
+          float x = ctx_x (ctx);
+          float y = ctx_y (ctx);
+          ctx_svg_arc_to (ctx, arg(0), arg(1), arg(2), (int)arg(3), (int)arg(4), arg(5)+x, arg(6)+y);
+        }
+        break;
+      case CTX_REL_SMOOTH_TO:
+        {
+          float cx = parser->pcx;
+          float cy = parser->pcy;
+          float ax = 2 * ctx_x (ctx) - cx;
+          float ay = 2 * ctx_y (ctx) - cy;
+          ctx_curve_to (ctx, ax, ay, arg(0) +  cx, arg(1) + cy,
+                        arg(2) + cx, arg(3) + cy);
+          parser->pcx = arg(0) + cx;
+          parser->pcy = arg(1) + cy;
+        }
+        break;
+      case CTX_SMOOTH_TO:
+        {
+          float ax = 2 * ctx_x (ctx) - parser->pcx;
+          float ay = 2 * ctx_y (ctx) - parser->pcy;
+          ctx_curve_to (ctx, ax, ay, arg(0), arg(1),
+                        arg(2), arg(3) );
+          parser->pcx = arg(0);
+          parser->pcx = arg(1);
+        }
+        break;
+      case CTX_SMOOTHQ_TO:
+        parser->pcx = 2 * ctx_x (ctx) - parser->pcx;
+        parser->pcy = 2 * ctx_y (ctx) - parser->pcy;
+        ctx_quad_to (ctx, parser->pcx, parser->pcy, arg(0), arg(1) );
+        break;
+      case CTX_REL_SMOOTHQ_TO:
+        {
+          float x = ctx_x (ctx);
+          float y = ctx_y (ctx);
+          parser->pcx = 2 * ctx_x (ctx) - parser->pcx;
+          parser->pcy = 2 * ctx_y (ctx) - parser->pcy;
+          ctx_quad_to (ctx, parser->pcx, parser->pcy, arg(0) + x, arg(1) + y);
+        }
+        break;
+      case CTX_VER_LINE_TO:
+        ctx_line_to (ctx, ctx_x (ctx), arg(0) );
+        parser->command = CTX_VER_LINE_TO;
+        parser->pcx = ctx_x (ctx);
+        parser->pcy = ctx_y (ctx);
+        break;
+      case CTX_HOR_LINE_TO:
+        ctx_line_to (ctx, arg(0), ctx_y (ctx) );
+        parser->command = CTX_HOR_LINE_TO;
+        parser->pcx = ctx_x (ctx);
+        parser->pcy = ctx_y (ctx);
+        break;
+      case CTX_REL_HOR_LINE_TO:
+        ctx_rel_line_to (ctx, arg(0), 0.0f);
+        parser->command = CTX_REL_HOR_LINE_TO;
+        parser->pcx = ctx_x (ctx);
+        parser->pcy = ctx_y (ctx);
+        break;
+      case CTX_REL_VER_LINE_TO:
+        ctx_rel_line_to (ctx, 0.0f, arg(0) );
+        parser->command = CTX_REL_VER_LINE_TO;
+        parser->pcx = ctx_x (ctx);
+        parser->pcy = ctx_y (ctx);
+        break;
+      case CTX_ARC:
+        ctx_arc (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), (int)arg(5));
+        break;
+      case CTX_APPLY_TRANSFORM:
+        ctx_apply_transform (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), arg(5) , arg(6), arg(7), arg(8));
+        break;
+      case CTX_SOURCE_TRANSFORM:
+        ctx_source_transform (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), arg(5), arg(6), arg(7), arg(8));
+        break;
+      case CTX_CURVE_TO:
+        ctx_curve_to (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), arg(5) );
+        parser->pcx = arg(2);
+        parser->pcy = arg(3);
+        parser->command = CTX_CURVE_TO;
+        break;
+      case CTX_REL_CURVE_TO:
+        parser->pcx = arg(2) + ctx_x (ctx);
+        parser->pcy = arg(3) + ctx_y (ctx);
+        ctx_rel_curve_to (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), arg(5) );
+        parser->command = CTX_REL_CURVE_TO;
+        break;
+      case CTX_LINE_TO:
+        ctx_line_to (ctx, arg(0), arg(1) );
+        parser->command = CTX_LINE_TO;
+        parser->pcx = arg(0);
+        parser->pcy = arg(1);
+        break;
+      case CTX_MOVE_TO:
+        ctx_move_to (ctx, arg(0), arg(1) );
+        parser->command = CTX_LINE_TO;
+        parser->pcx = arg(0);
+        parser->pcy = arg(1);
+        parser->left_margin = parser->pcx;
+        break;
+      case CTX_FONT_SIZE:
+        ctx_font_size (ctx, arg(0) );
+        break;
+      case CTX_MITER_LIMIT:
+        ctx_miter_limit (ctx, arg(0) );
+        break;
+      case CTX_SCALE:
+        ctx_scale (ctx, arg(0), arg(1) );
+        break;
+      case CTX_NEW_PAGE:
+        ctx_new_page (ctx);
+        break;
+      case CTX_QUAD_TO:
+        parser->pcx = arg(0);
+        parser->pcy = arg(1);
+        ctx_quad_to (ctx, arg(0), arg(1), arg(2), arg(3) );
+        parser->command = CTX_QUAD_TO;
+        break;
+      case CTX_REL_QUAD_TO:
+        parser->pcx = arg(0) + ctx_x (ctx);
+        parser->pcy = arg(1) + ctx_y (ctx);
+        ctx_rel_quad_to (ctx, arg(0), arg(1), arg(2), arg(3) );
+        parser->command = CTX_REL_QUAD_TO;
+        break;
+      case CTX_CLIP:
+        ctx_clip (ctx);
+        break;
+      case CTX_TRANSLATE:
+        ctx_translate (ctx, arg(0), arg(1) );
+        break;
+      case CTX_ROTATE:
+        ctx_rotate (ctx, arg(0) );
+        break;
+      case CTX_FONT:
+        ctx_font (ctx, (char *) parser->holding);
+        break;
+
+      case CTX_STROKE_TEXT:
+      case CTX_TEXT:
+        if (parser->n_numbers == 1)
+          { ctx_rel_move_to (ctx, -parser->numbers[0], 0.0); }  //  XXX : scale by font(size)
+        else
+          {
+            for (char *c = (char *) parser->holding; c; )
+              {
+                char *next_nl = ctx_strchr (c, '\n');
+                if (next_nl)
+                  { *next_nl = 0; }
+                /* do our own layouting on a per-word basis?, to get justified
+                 * margins? then we'd want explict margins rather than the
+                 * implicit ones from move_to's .. making move_to work within
+                 * margins.
+                 */
+                if (cmd == CTX_STROKE_TEXT)
+                  { ctx_text_stroke (ctx, c); }
+                else
+                  { ctx_text (ctx, c); }
+                if (next_nl)
+                  {
+                    *next_nl = '\n'; // swap it newline back in
+                    ctx_move_to (ctx, parser->left_margin, ctx_y (ctx) +
+                                 ctx_get_font_size (ctx) );
+                    c = next_nl + 1;
+                    if (c[0] == 0)
+                      { c = NULL; }
+                  }
+                else
+                  {
+                    c = NULL;
+                  }
+              }
+          }
+        if (cmd == CTX_STROKE_TEXT)
+          { parser->command = CTX_STROKE_TEXT; }
+        else
+          { parser->command = CTX_TEXT; }
+        break;
+      case CTX_REL_LINE_TO:
+        ctx_rel_line_to (ctx, arg(0), arg(1) );
+        parser->pcx += arg(0);
+        parser->pcy += arg(1);
+        break;
+      case CTX_REL_MOVE_TO:
+        ctx_rel_move_to (ctx, arg(0), arg(1) );
+        parser->pcx += arg(0);
+        parser->pcy += arg(1);
+        parser->left_margin = ctx_x (ctx);
+        break;
+      case CTX_LINE_WIDTH:
+        ctx_line_width (ctx, arg(0));
+        break;
+      case CTX_LINE_DASH_OFFSET:
+        ctx_line_dash_offset (ctx, arg(0));
+        break;
+      case CTX_LINE_HEIGHT:
+        ctx_line_height (ctx, arg(0));
+        break;
+      case CTX_WRAP_LEFT:
+        ctx_wrap_left (ctx, arg(0));
+        break;
+      case CTX_WRAP_RIGHT:
+        ctx_wrap_right (ctx, arg(0));
+        break;
+      case CTX_IMAGE_SMOOTHING:
+        ctx_image_smoothing (ctx, (int)arg(0));
+        break;
+      case CTX_SHADOW_COLOR:
+        ctx_shadow_rgba (ctx, arg(0), arg(1), arg(2), arg(3));
+        break;
+      case CTX_SHADOW_BLUR:
+        ctx_shadow_blur (ctx, arg(0) );
+        break;
+      case CTX_SHADOW_OFFSET_X:
+        ctx_shadow_offset_x (ctx, arg(0) );
+        break;
+      case CTX_SHADOW_OFFSET_Y:
+        ctx_shadow_offset_y (ctx, arg(0) );
+        break;
+      case CTX_LINE_JOIN:
+        ctx_line_join (ctx, (CtxLineJoin) arg(0) );
+        break;
+      case CTX_LINE_CAP:
+        ctx_line_cap (ctx, (CtxLineCap) arg(0) );
+        break;
+      case CTX_COMPOSITING_MODE:
+        ctx_compositing_mode (ctx, (CtxCompositingMode) arg(0) );
+        break;
+      case CTX_BLEND_MODE:
+        {
+          int blend_mode = (int)arg(0);
+          if (blend_mode == CTX_COLOR) blend_mode = CTX_BLEND_COLOR;
+          ctx_blend_mode (ctx, (CtxBlend)blend_mode);
+        }
+        break;
+      case CTX_EXTEND:
+        ctx_extend (ctx, (CtxExtend)arg(0));
+        break;
+      case CTX_FILL_RULE:
+        ctx_fill_rule (ctx, (CtxFillRule) arg(0) );
+        break;
+      case CTX_TEXT_ALIGN:
+        ctx_text_align (ctx, (CtxTextAlign) arg(0) );
+        break;
+      case CTX_TEXT_BASELINE:
+        ctx_text_baseline (ctx, (CtxTextBaseline) arg(0) );
+        break;
+      case CTX_TEXT_DIRECTION:
+        ctx_text_direction (ctx, (CtxTextDirection) arg(0) );
+        break;
+      case CTX_IDENTITY:
+        ctx_identity (ctx);
+        break;
+      case CTX_RECTANGLE:
+        ctx_rectangle (ctx, arg(0), arg(1), arg(2), arg(3) );
+        break;
+      case CTX_FILL_RECT:
+        ctx_rectangle (ctx, arg(0), arg(1), arg(2), arg(3) );
+        ctx_fill (ctx);
+        break;
+      case CTX_STROKE_RECT:
+        ctx_rectangle (ctx, arg(0), arg(1), arg(2), arg(3) );
+        ctx_stroke (ctx);
+        break;
+      case CTX_ROUND_RECTANGLE:
+        ctx_round_rectangle (ctx, arg(0), arg(1), arg(2), arg(3), arg(4));
+        break;
+      case CTX_VIEW_BOX:
+        ctx_view_box (ctx, arg(0), arg(1), arg(2), arg(3) );
+        ctx_parser_set_size (parser, (int)arg(2), (int)arg(3), 0, 0);
+        break;
+      case CTX_LINEAR_GRADIENT:
+        ctx_linear_gradient (ctx, arg(0), arg(1), arg(2), arg(3) );
+        break;
+      case CTX_RADIAL_GRADIENT:
+        ctx_radial_gradient (ctx, arg(0), arg(1), arg(2), arg(3), arg(4), arg(5) );
+        break;
+      case CTX_GRADIENT_STOP:
+        {
+          float red, green, blue, alpha;
+          ctx_parser_get_color_rgba (parser, 1, &red, &green, &blue, &alpha);
+          ctx_gradient_add_stop (ctx, arg(0), red, green, blue, alpha);
+        }
+        break;
+      case CTX_GLOBAL_ALPHA:
+        ctx_global_alpha (ctx, arg(0) );
+        break;
+      case CTX_BEGIN_PATH:
+        ctx_begin_path (ctx);
+        break;
+      case CTX_GLYPH:
+        ctx_glyph (ctx, (uint32_t)arg(0), 0);
+        break;
+      case CTX_CLOSE_PATH:
+        ctx_close_path (ctx);
+        break;
+      case CTX_EXIT:
+        if (parser->exit)
+          { parser->exit (parser->exit_data);
+            return;
+          }
+        break;
+      case CTX_END_FRAME:
+        //ctx_flush (ctx); // XXX  XXX  flush only does things inside backends
+        break;
+      case CTX_START_FRAME: // XXX is it right to do things here?
+        ctx_start_frame (ctx);
+        if (parser->translate_origin)
+        {
+          ctx_translate (ctx,
+                         (parser->cursor_x-1) * parser->cell_width * 1.0f,
+                         (parser->cursor_y-1) * parser->cell_height * 1.0f);
+        }
+        break;
+    }
+#undef arg
+//  parser->n_numbers = 0;
+}
+
+static inline void ctx_parser_holding_append (CtxParser *parser, int byte)
+{
+#if !CTX_PARSER_FIXED_TEMP
+  if (CTX_UNLIKELY(parser->hold_len < parser->pos + 1 + 1))
+  {
+    int new_len = parser->hold_len * 2;
+    if (new_len < 512) new_len = 512;
+    parser->holding = (uint8_t*)ctx_realloc (parser->holding, parser->hold_len, new_len);
+    parser->hold_len = new_len;
+  }
+#endif
+
+  parser->holding[parser->pos++]=byte;
+#if CTX_PARSER_FIXED_TEMP
+  if (CTX_UNLIKELY(parser->pos > (int) sizeof (parser->holding)-2))
+    { parser->pos = sizeof (parser->holding)-2; }
+#endif
+  parser->holding[parser->pos]=0;
+}
+
+static void ctx_parser_transform_percent (CtxParser *parser, CtxCode code, int arg_no, float *value)
+{
+  int big   = parser->width;
+  int small = parser->height;
+  if (big < small)
+    {
+      small = parser->width;
+      big   = parser->height;
+    }
+  switch (code)
+    {
+      case CTX_RADIAL_GRADIENT:
+      case CTX_ARC:
+        switch (arg_no)
+          {
+            case 0:
+            case 3:
+              *value *= (parser->width/100.0f);
+              break;
+            case 1:
+            case 4:
+              *value *= (parser->height/100.0f);
+              break;
+            case 2:
+            case 5:
+              *value *= small/100.0f;
+              break;
+          }
+        break;
+      case CTX_FONT_SIZE:
+      case CTX_MITER_LIMIT:
+      case CTX_LINE_WIDTH:
+      case CTX_LINE_DASH_OFFSET:
+        {
+          *value *= (small/100.0f);
+        }
+        break;
+      case CTX_ARC_TO:
+      case CTX_REL_ARC_TO:
+        if (arg_no > 3)
+          {
+            *value *= (small/100.0f);
+          }
+        else
+          {
+            if (arg_no % 2 == 0)
+              { *value  *= ( (parser->width) /100.0f); }
+            else
+              { *value *= ( (parser->height) /100.0f); }
+          }
+        break;
+      case CTX_ROUND_RECTANGLE:
+        if (arg_no == 4)
+        {
+          { *value *= ((parser->height)/100.0f); }
+          return;
+        }
+        /* FALLTHROUGH */
+      default: // even means x coord
+        if (arg_no % 2 == 0)
+          { *value  *= ((parser->width)/100.0f); }
+        else
+          { *value *= ((parser->height)/100.0f); }
+        break;
+    }
+}
+
+static void ctx_parser_transform_percent_height (CtxParser *parser, CtxCode code, int arg_no, float *value)
+{
+  *value *= (parser->height/100.0f);
+}
+
+static void ctx_parser_transform_percent_width (CtxParser *parser, CtxCode code, int arg_no, float *value)
+{
+  *value *= (parser->height/100.0f);
+}
+
+static void ctx_parser_transform_cell (CtxParser *parser, CtxCode code, int arg_no, float *value)
+{
+  float small = parser->cell_width;
+  if (small > parser->cell_height)
+    { small = parser->cell_height; }
+  switch (code)
+    {
+      case CTX_RADIAL_GRADIENT:
+      case CTX_ARC:
+        switch (arg_no)
+          {
+            case 0:
+            case 3:
+              *value *= parser->cell_width;
+              break;
+            case 1:
+            case 4:
+              *value *= parser->cell_height;
+              break;
+            case 2:
+            case 5:
+              *value *= small; // use height?
+              break;
+          }
+        break;
+      case CTX_MITER_LIMIT:
+      case CTX_FONT_SIZE:
+      case CTX_LINE_WIDTH:
+      case CTX_LINE_DASH_OFFSET:
+        {
+          *value *= parser->cell_height;
+        }
+        break;
+      case CTX_ARC_TO:
+      case CTX_REL_ARC_TO:
+        if (arg_no > 3)
+          {
+            *value *= small;
+          }
+        else
+          {
+            *value *= (arg_no%2==0) ?parser->cell_width:parser->cell_height;
+          }
+        break;
+      case CTX_RECTANGLE:
+        if (arg_no % 2 == 0)
+          { *value *= parser->cell_width; }
+        else
+          {
+            if (! (arg_no > 1) )
+              { (*value) -= 1.0f; }
+            *value *= parser->cell_height;
+          }
+        break;
+      default: // even means x coord odd means y coord
+        *value *= (arg_no%2==0) ?parser->cell_width:parser->cell_height;
+        break;
+    }
+}
+
+// %h %v %m %M
+
+static void ctx_parser_number_done (CtxParser *parser)
+{
+
+}
+
+static void ctx_parser_word_done (CtxParser *parser)
+{
+  parser->holding[parser->pos]=0;
+  //int old_args = parser->expected_args;
+  int command = ctx_parser_resolve_command (parser, parser->holding);
+  if ((command >= 0 && command < 32)
+      || (command > 150) || (command < 0)
+      )  // special case low enum values
+    {                   // and enum values too high to be
+                        // commands - permitting passing words
+                        // for strings in some cases
+      parser->numbers[parser->n_numbers] = command;
+
+      // trigger transition from number
+      parser->state = CTX_PARSER_NUMBER;
+      char c = ',';
+      ctx_parser_feed_bytes (parser, &c, 1);
+    }
+  else if (command > 0)
+    {
+#if 0
+      if (old_args == CTX_ARG_COLLECT_NUMBERS ||
+          old_args == CTX_ARG_STRING_OR_NUMBER)
+      {
+        int tmp1 = parser->command;
+        int tmp2 = parser->expected_args;
+        int tmp3 = parser->n_numbers;
+ //     int tmp4 = parser->n_args;
+        ctx_parser_dispatch_command (parser);
+        parser->command = (CtxCode)tmp1;
+        parser->expected_args = tmp2;
+        parser->n_numbers = tmp3;
+ //     parser->n_args = tmp4;
+      }
+#endif
+
+      parser->command = (CtxCode) command;
+      parser->n_numbers = 0;
+      parser->n_args = 0;
+      if (parser->expected_args == 0)
+        {
+          ctx_parser_dispatch_command (parser);
+        }
+    }
+  else
+    {
+      /* interpret char by char */
+      uint8_t buf[16]=" ";
+      for (int i = 0; parser->pos && parser->holding[i] > ' '; i++)
+        {
+          buf[0] = parser->holding[i];
+          parser->command = (CtxCode) ctx_parser_resolve_command (parser, buf);
+          parser->n_numbers = 0;
+          parser->n_args = 0;
+          if (parser->command > 0)
+            {
+              if (parser->expected_args == 0)
+                {
+                  ctx_parser_dispatch_command (parser);
+                }
+            }
+          else
+            {
+              ctx_log ("unhandled command '%c'\n", buf[0]);
+            }
+        }
+    }
+}
+
+static void ctx_parser_string_done (CtxParser *parser)
+{
+  if (parser->expected_args == CTX_ARG_STRING_OR_NUMBER)
+  {
+          /*
+    if (parser->state != CTX_PARSER_NUMBER &&
+        parser->state != CTX_PARSER_NEGATIVE_NUMBER &&
+        parser->state != CTX_PARSER_STRING_A85 &&
+        parser->state != CTX_PARSER_STRING_APOS &&
+        parser->state != CTX_PARSER_STRING_QUOT
+        )
+        */
+    {
+    int tmp1 = parser->command;
+    int tmp2 = parser->expected_args;
+    int tmp3 = parser->n_numbers;
+    int tmp4 = parser->n_args;
+    ctx_parser_dispatch_command (parser);
+    parser->command = (CtxCode)tmp1;
+    parser->expected_args = tmp2;
+    parser->n_numbers = tmp3;
+    parser->n_args = tmp4;
+    }
+  }
+  else
+  {
+    ctx_parser_dispatch_command (parser);
+  }
+}
+
+static inline void ctx_parser_feed_byte (CtxParser *parser, char byte)
+{
+#if CTX_REPORT_COL_ROW
+    if (CTX_UNLIKELY(byte == '\n'))
+    {
+        parser->col=0;
+        parser->line++;
+    }
+    else
+    {
+        parser->col++;
+    }
+#endif
+
+    if (CTX_LIKELY(parser->state == CTX_PARSER_STRING_YENC))
+    {
+        if (CTX_UNLIKELY((parser->prev_byte == '=') && (byte == 'y')))
+        {
+          parser->state = CTX_PARSER_NEUTRAL;
+                 //   fprintf (stderr, "got %i\n", parser->pos);
+          parser->pos = ctx_ydec ((char*)parser->holding, (char*)parser->holding, parser->pos) - 1;
+#if 0
+          if (parser->pos > 5)
+                    fprintf (stderr, "dec got %i %c %c %c %c\n", parser->pos,
+                                    parser->holding[0],
+                                    parser->holding[1],
+                                    parser->holding[2],
+                                    parser->holding[3]
+                                    );
+#endif
+          ctx_parser_string_done (parser);
+        }
+        else
+        {
+          ctx_parser_holding_append (parser, byte);
+        }
+        parser->prev_byte = byte;
+        return;
+    }
+    else if (parser->state == CTX_PARSER_STRING_A85)
+    {
+        /* since these are our largest bulk transfers, minimize
+         * overhead for this case. */
+        if (CTX_LIKELY(byte!='~')) 
+        {
+          ctx_parser_holding_append (parser, byte);
+        }
+        else
+        {
+          parser->state = CTX_PARSER_NEUTRAL;
+                 //   fprintf (stderr, "got %i\n", parser->pos);
+          parser->pos = ctx_a85dec ((char*)parser->holding, (char*)parser->holding, parser->pos);
+                 //   fprintf (stderr, "dec got %i\n", parser->pos);
+          ctx_parser_string_done (parser);
+        }
+        return;
+    }
+  switch (parser->state)
+    {
+      case CTX_PARSER_NEUTRAL:
+        switch (byte)
+          {
+            case  0: case  1: case  2: case  3:  case 4:  case 5:
+            case  6: case  7: case  8: case 11: case 12: case 14:
+            case 15: case 16: case 17: case 18: case 19: case 20:
+            case 21: case 22: case 23: case 24: case 25: case 26:
+            case 27: case 28: case 29: case 30: case 31:
+              break;
+            case ' ': case '\t': case '\r': case '\n':
+            case ';': case ',':
+            case '(': case ')':
+            case '{': case '}':
+            //case '=':
+              break;
+            case '#':
+              parser->state = CTX_PARSER_COMMENT;
+              break;
+            case '\'':
+              parser->state = CTX_PARSER_STRING_APOS;
+              parser->pos = 0;
+              parser->holding[0] = 0;
+              break;
+            case '=':
+              parser->state = CTX_PARSER_STRING_YENC;
+              parser->pos = 0;
+              parser->holding[0] = 0;
+              break;
+            case '~':
+              parser->state = CTX_PARSER_STRING_A85;
+              parser->pos = 0;
+              parser->holding[0] = 0;
+              break;
+            case '"':
+              parser->state = CTX_PARSER_STRING_QUOT;
+              parser->pos = 0;
+              parser->holding[0] = 0;
+              break;
+            case '-':
+              parser->state = CTX_PARSER_NEGATIVE_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->decimal = 0;
+              break;
+            case '0': case '1': case '2': case '3': case '4':
+            case '5': case '6': case '7': case '8': case '9':
+              parser->state = CTX_PARSER_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->numbers[parser->n_numbers] += (byte - '0');
+              parser->decimal = 0;
+              break;
+            case '.':
+              parser->state = CTX_PARSER_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->decimal = 1;
+              break;
+            default:
+              parser->state = CTX_PARSER_WORD;
+              parser->pos = 0;
+              ctx_parser_holding_append (parser, byte);
+              break;
+          }
+        break;
+      case CTX_PARSER_NUMBER:
+      case CTX_PARSER_NEGATIVE_NUMBER:
+        {
+          switch (byte)
+            {
+              case 0: case 1: case 2: case 3: case 4: case 5:
+              case 6: case 7: case 8:
+              case 11: case 12: case 14: case 15: case 16:
+              case 17: case 18: case 19: case 20: case 21:
+              case 22: case 23: case 24: case 25: case 26:
+              case 27: case 28: case 29: case 30: case 31:
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              case ' ':
+              case '\t':
+              case '\r':
+              case '\n':
+              case ';':
+              case ',':
+              case '(':
+              case ')':
+              case '{':
+              case '}':
+              case '=':
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              case '#':
+                parser->state = CTX_PARSER_COMMENT;
+                break;
+              case '-':
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                parser->state = CTX_PARSER_NEGATIVE_NUMBER;
+                parser->numbers[parser->n_numbers+1] = 0;
+                parser->n_numbers ++;
+                parser->decimal = 0;
+                break;
+              case '.':
+                //if (parser->decimal) // TODO permit .13.32.43 to equivalent to .12 .32 .43
+                parser->decimal = 1;
+                break;
+              case '0': case '1': case '2': case '3': case '4':
+              case '5': case '6': case '7': case '8': case '9':
+                if (parser->decimal)
+                  {
+                    parser->decimal *= 10;
+                    parser->numbers[parser->n_numbers] += (byte - '0') / (1.0f * parser->decimal);
+                  }
+                else
+                  {
+                    parser->numbers[parser->n_numbers] *= 10;
+                    parser->numbers[parser->n_numbers] += (byte - '0');
+                  }
+                break;
+              case '@': // cells
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                {
+                float fval = parser->numbers[parser->n_numbers];
+                ctx_parser_transform_cell (parser, parser->command, parser->n_numbers, &fval);
+                parser->numbers[parser->n_numbers]= fval;
+                }
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              case '%': // percent of width/height
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                {
+                float fval = parser->numbers[parser->n_numbers];
+                ctx_parser_transform_percent (parser, parser->command, parser->n_numbers, &fval);
+                parser->numbers[parser->n_numbers]= fval;
+                }
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              case '^': // percent of height
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                {
+                float fval = parser->numbers[parser->n_numbers];
+                ctx_parser_transform_percent_height (parser, parser->command, parser->n_numbers, &fval);
+                parser->numbers[parser->n_numbers]= fval;
+                }
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              case '~': // percent of width
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                {
+                float fval = parser->numbers[parser->n_numbers];
+                ctx_parser_transform_percent_width (parser, parser->command, parser->n_numbers, &fval);
+                parser->numbers[parser->n_numbers]= fval;
+                }
+                parser->state = CTX_PARSER_NEUTRAL;
+                break;
+              default:
+                if (parser->state == CTX_PARSER_NEGATIVE_NUMBER)
+                  { parser->numbers[parser->n_numbers] *= -1; }
+                parser->state = CTX_PARSER_WORD;
+                parser->pos = 0;
+                ctx_parser_holding_append (parser, byte);
+                break;
+            }
+          if ( (parser->state != CTX_PARSER_NUMBER) &&
+               (parser->state != CTX_PARSER_NEGATIVE_NUMBER))
+            {
+              parser->n_numbers ++;
+              ctx_parser_number_done (parser);
+
+              if (parser->n_numbers == parser->expected_args ||
+                  parser->expected_args == CTX_ARG_COLLECT_NUMBERS ||
+                  parser->expected_args == CTX_ARG_STRING_OR_NUMBER)
+                {
+                  int tmp1 = parser->n_numbers;
+                  int tmp2 = parser->n_args;
+                  CtxCode tmp3 = parser->command;
+                  int tmp4 = parser->expected_args;
+                  ctx_parser_dispatch_command (parser);
+                  parser->command = tmp3;
+                  switch (parser->command)
+                  {
+                    case CTX_DEFINE_TEXTURE:
+                    case CTX_TEXTURE:
+                      parser->n_numbers = tmp1;
+                      parser->n_args = tmp2;
+                      break;
+                          default:
+                      parser->n_numbers = 0;
+                      parser->n_args = 0;
+                      break;
+                  }
+                  parser->expected_args = tmp4;
+                }
+              if (parser->n_numbers > CTX_PARSER_MAX_ARGS)
+                { parser->n_numbers = CTX_PARSER_MAX_ARGS;
+                }
+            }
+        }
+        break;
+      case CTX_PARSER_WORD:
+        switch (byte)
+          {
+            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+            case 8: case 11: case 12: case 14: case 15: case 16: case 17:
+            case 18: case 19: case 20: case 21: case 22: case 23: case 24:
+            case 25: case 26: case 27: case 28: case 29: case 30: case 31:
+            case ' ': case '\t': case '\r': case '\n':
+            case ';': case ',':
+            case '(': case ')': case '=': case '{': case '}':
+              parser->state = CTX_PARSER_NEUTRAL;
+              break;
+            case '#':
+              parser->state = CTX_PARSER_COMMENT;
+              break;
+            case '-':
+              parser->state = CTX_PARSER_NEGATIVE_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->decimal = 0;
+              break;
+            case '0': case '1': case '2': case '3': case '4':
+            case '5': case '6': case '7': case '8': case '9':
+              parser->state = CTX_PARSER_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->numbers[parser->n_numbers] += (byte - '0');
+              parser->decimal = 0;
+              break;
+            case '.':
+              parser->state = CTX_PARSER_NUMBER;
+              parser->numbers[parser->n_numbers] = 0;
+              parser->decimal = 1;
+              break;
+            default:
+              ctx_parser_holding_append (parser, byte);
+              break;
+          }
+        if (parser->state != CTX_PARSER_WORD)
+          {
+            ctx_parser_word_done (parser);
+          }
+        break;
+      case CTX_PARSER_STRING_A85:
+        if (CTX_LIKELY(byte!='~'))
+        {
+          ctx_parser_holding_append (parser, byte);
+        }
+        else
+        {
+          parser->state = CTX_PARSER_NEUTRAL;
+                 //   fprintf (stderr, "got %i\n", parser->pos);
+          parser->pos = ctx_a85dec ((char*)parser->holding, (char*)parser->holding, parser->pos);
+                 //   fprintf (stderr, "dec got %i\n", parser->pos);
+          ctx_parser_string_done (parser);
+        }
+        break;
+      case CTX_PARSER_STRING_APOS:
+        switch (byte)
+          {
+            case '\\': parser->state = CTX_PARSER_STRING_APOS_ESCAPED; break;
+            case '\'': parser->state = CTX_PARSER_NEUTRAL;
+              ctx_parser_string_done (parser);
+              break;
+            default:
+              ctx_parser_holding_append (parser, byte); break;
+          }
+        break;
+      case CTX_PARSER_STRING_APOS_ESCAPED:
+        switch (byte)
+          {
+            case '0': byte = '\0'; break;
+            case 'b': byte = '\b'; break;
+            case 'f': byte = '\f'; break;
+            case 'n': byte = '\n'; break;
+            case 'r': byte = '\r'; break;
+            case 't': byte = '\t'; break;
+            case 'v': byte = '\v'; break;
+            default: break;
+          }
+        ctx_parser_holding_append (parser, byte);
+        parser->state = CTX_PARSER_STRING_APOS;
+        break;
+      case CTX_PARSER_STRING_QUOT_ESCAPED:
+        switch (byte)
+          {
+            case '0': byte = '\0'; break;
+            case 'b': byte = '\b'; break;
+            case 'f': byte = '\f'; break;
+            case 'n': byte = '\n'; break;
+            case 'r': byte = '\r'; break;
+            case 't': byte = '\t'; break;
+            case 'v': byte = '\v'; break;
+            default: break;
+          }
+        ctx_parser_holding_append (parser, byte);
+        parser->state = CTX_PARSER_STRING_QUOT;
+        break;
+      case CTX_PARSER_STRING_QUOT:
+        switch (byte)
+          {
+            case '\\':
+              parser->state = CTX_PARSER_STRING_QUOT_ESCAPED;
+              break;
+            case '"':
+              parser->state = CTX_PARSER_NEUTRAL;
+              ctx_parser_string_done (parser);
+              break;
+            default:
+              ctx_parser_holding_append (parser, byte);
+              break;
+          }
+        break;
+      case CTX_PARSER_COMMENT:
+        switch (byte)
+          {
+            case '\r':
+            case '\n':
+              parser->state = CTX_PARSER_NEUTRAL;
+            default:
+              break;
+          }
+        break;
+    }
+}
+
+void ctx_parser_feed_bytes (CtxParser *parser, const char *data, int count)
+{
+  for (int i = 0; i < count; i++)
+    ctx_parser_feed_byte (parser, data[i]);
+}
+
+CTX_EXPORT void
+ctx_parse (Ctx *ctx, const char *string)
+{
+  if (!string)
+    return;
+  CtxParser *parser = ctx_parser_new (ctx, ctx_width(ctx),
+                                           ctx_height(ctx),
+                                           ctx_get_font_size(ctx),
+                                           ctx_get_font_size(ctx),
+                                           0, 0, NULL, NULL, NULL, NULL, NULL);
+  ctx_parser_feed_bytes (parser, string, ctx_strlen (string));
+  ctx_parser_feed_bytes (parser, " ", 1);
+  ctx_parser_destroy (parser);
+}
+
+CTX_EXPORT void
+ctx_parse2 (Ctx *ctx, const char *string, float *scene_elapsed_time, 
+            int *scene_no_p)
+{
+  float time = *scene_elapsed_time;
+  int scene_no = *scene_no_p;
+  CtxString *str = ctx_string_new ("");
+  int in_var = 0;
+  float scene_duration = 5.0f;
+
+  int i;
+
+again:
+  i = 0;
+
+  // XXX : this doesn't work when there are [ 's in the text
+
+  int scene_pos = 0;
+  int last_scene = 0;
+  {
+  int in_scene_marker = 0;
+  float duration = -1;
+  for (; string[i]; i++)
+  {
+    char p = string[i];
+    if (in_scene_marker)
+    {
+       if (p == ']')
+       {
+          in_scene_marker = 0;
+       //   printf ("scene: %i time: %f scene %i: %f\n", scene_no, time, scene_pos, duration);
+          last_scene = scene_pos;
+          if (scene_pos == scene_no)
+          {
+            scene_duration = duration;
+            if (scene_duration < time)
+            {
+              scene_no ++;
+              (*scene_no_p)++;
+              *scene_elapsed_time = time = 0;
+            }
+            else
+            {
+              break;
+            }
+          }
+          scene_pos++;
+       }
+       else if (p>='0' && p<='9' && duration < 0)
+       {
+          duration = _ctx_parse_float (&string[i], NULL);
+       }
+    }
+    else
+    {
+       if (p == '[')
+       {
+          in_scene_marker = 1;
+          duration = -1;
+       }
+    }
+  }
+  }
+
+  if (scene_no > last_scene)
+  {
+     scene_no = 0;
+     (*scene_no_p) = 0;
+     goto again;
+  }
+  
+  if (scene_no == 0 && last_scene==0 && string[i]==0)
+    i=0;
+
+#define MAX_KEY_FRAMES 64
+  float keys[MAX_KEY_FRAMES];
+  float values[MAX_KEY_FRAMES];
+  int n_keys = 0;
+  int smooth = 1; // default to catmull rom
+
+  for (; string[i]; i++)
+  {
+    char p = string[i];
+    if (in_var == 0)
+    {
+      if (p == '[')
+        break;
+      else if (p == '(')
+      {
+        in_var = 1;
+        n_keys = 0;
+      }
+      else
+      {
+        ctx_string_append_byte (str, p);
+      }
+    }
+    else
+    {
+      if (p == ')')
+      {
+        float resolved_val = -100000.0;
+        float prev_val = 0;
+        for (int i = 0; i < n_keys; i++)
+        {
+          float key = keys[i];
+          float val = values[i];
+          //printf ("%f=%f\n", key, val);
+          if (key>=time && resolved_val <=-10000.0f)
+          {
+            if (smooth == 0) // linear interpolation
+            {
+              if (i == 0)
+                resolved_val = val;
+              else
+                resolved_val = ctx_lerpf (values[i-1], val, 
+                                (time-keys[i-1])/(key-keys[i-1]));
+            }
+            else
+            {
+              if (i == 0)
+              {
+                resolved_val = val;
+              }
+              else if (n_keys<=2)
+              {
+                resolved_val = ctx_lerpf (values[i-1], val, 
+                                 (time-keys[i-1])/(key-keys[i-1]));
+              } else if (i == 1)
+              {
+                resolved_val = ctx_catmull_rom_left (values[i-1], values[i],
+                                 values[i+1],
+                                 (time-keys[i-1])/(key-keys[i-1]));
+              }
+              else if (i > 1 && i+1 < n_keys)
+              {
+                resolved_val = ctx_catmull_rom (values[i-2], values[i-1],
+                                 val, values[i+1],
+                                 (time-keys[i-1])/(key-keys[i-1]));
+              }
+              else if (i >= 2 && i < n_keys)
+              {
+                resolved_val = ctx_catmull_rom_right (values[i-2], values[i-1],
+                                 values[i],
+                                 (time-keys[i-1])/(key-keys[i-1]));
+              }
+            }
+          }
+          prev_val = val;
+        }
+        if (resolved_val <= -100000.0f) resolved_val = prev_val;
+        ctx_string_append_printf (str, "%f", (double)resolved_val);
+        in_var = 0;
+      }
+      else if (p>='0' && p<='9')
+      {
+        char *sp = (char*)&string[i];
+        char *ep = sp;
+        float key      = _ctx_parse_float (sp, &ep);
+        char *eq       = strchr (sp, '=');
+        float val      = 0.0;
+
+        if (eq)
+           val = _ctx_parse_float (eq+1, &ep);
+
+        keys[n_keys] = key;
+        values[n_keys++] = val;
+
+        i+=(ep-sp)-1;
+      }
+      else if (p=='s')
+      {
+        smooth = 1;
+      } else if (p=='l')
+      {
+        smooth = 0;
+      }
+      else
+      {
+        /* ignore */
+      }
+
+    }
+  }
+
+  /* we've now built up the frame, and parse
+   * it with the regular parser
+   */
+  ctx_parse (ctx, str->str);
+  ctx_string_free (str, 1);
+}
+
+#endif
+
+#if !__COSMOPOLITAN__
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#endif
+
+//#include "ctx.h"
+/* instead of including ctx.h we declare the few utf8
+ * functions we use
+ */
+uint32_t ctx_utf8_to_unichar (const char *input);
+int ctx_unichar_to_utf8 (uint32_t  ch, uint8_t  *dest);
+int ctx_utf8_strlen (const char *s);
+
+static void ctx_string_init (CtxString *string, int initial_size)
+{
+  string->allocated_length = initial_size;
+  string->length = 0;
+  string->utf8_length = 0;
+  string->str = (char*)ctx_malloc (string->allocated_length + 1);
+  string->str[0]='\0';
+}
+
+static void ctx_string_destroy (CtxString *string)
+{
+  if (string->str)
+    {
+      ctx_free (string->str);
+      string->str = NULL;
+    }
+}
+
+void ctx_string_clear (CtxString *string)
+{
+  string->length = 0;
+  string->utf8_length = 0;
+  string->str[string->length]=0;
+}
+
+
+void ctx_string_pre_alloc (CtxString *string, int size)
+{
+  char *old = string->str;
+  int old_len = string->allocated_length;
+  string->allocated_length = CTX_MAX (size + 2, string->length + 2);
+  string->str = (char*)ctx_realloc (old, old_len, string->allocated_length);
+}
+
+
+static inline void _ctx_string_append_byte (CtxString *string, char  val)
+{
+  if (CTX_LIKELY((val & 0xC0) != 0x80))
+    { string->utf8_length++; }
+  if (CTX_UNLIKELY(string->length + 2 >= string->allocated_length))
+    {
+      char *old = string->str;
+      int old_len = string->allocated_length;
+      string->allocated_length = CTX_MAX (string->allocated_length * 2, string->length + 2);
+      string->str = (char*)ctx_realloc (old, old_len, string->allocated_length);
+    }
+  string->str[string->length++] = val;
+  string->str[string->length] = '\0';
+}
+
+void ctx_string_append_byte (CtxString *string, char  val)
+{
+  _ctx_string_append_byte (string, val);
+}
+
+void ctx_string_append_unichar (CtxString *string, unsigned int unichar)
+{
+  char *str;
+  char utf8[5];
+  utf8[ctx_unichar_to_utf8 (unichar, (unsigned char *) utf8)]=0;
+  str = utf8;
+  while (str && *str)
+    {
+      _ctx_string_append_byte (string, *str);
+      str++;
+    }
+}
+
+static inline void _ctx_string_append_str (CtxString *string, const char *str)
+{
+  if (!str) { return; }
+  while (*str)
+    {
+      _ctx_string_append_byte (string, *str);
+      str++;
+    }
+}
+
+void ctx_string_append_utf8char (CtxString *string, const char *str)
+{
+  if (!str) { return; }
+  int len = ctx_utf8_len (*str);
+  for (int i = 0; i < len && *str; i++)
+    {
+      _ctx_string_append_byte (string, *str);
+      str++;
+    }
+}
+
+void ctx_string_append_str (CtxString *string, const char *str)
+{
+  _ctx_string_append_str (string, str);
+}
+
+CtxString *ctx_string_new_with_size (const char *initial, int initial_size)
+{
+  CtxString *string = (CtxString*)ctx_calloc (sizeof (CtxString), 1);
+  ctx_string_init (string, initial_size);
+  if (initial)
+    { _ctx_string_append_str (string, initial); }
+  return string;
+}
+
+CtxString *ctx_string_new (const char *initial)
+{
+  return ctx_string_new_with_size (initial, 8);
+}
+
+void ctx_string_append_data (CtxString *string, const char *str, int len)
+{
+  int i;
+  for (i = 0; i<len; i++)
+    { _ctx_string_append_byte (string, str[i]); }
+}
+
+void ctx_string_append_string (CtxString *string, CtxString *string2)
+{
+  const char *str = ctx_string_get (string2);
+  while (str && *str)
+    {
+      _ctx_string_append_byte (string, *str);
+      str++;
+    }
+}
+
+const char *ctx_string_get (CtxString *string)
+{
+  return string->str;
+}
+
+int ctx_string_get_utf8length (CtxString *string)
+{
+  return string->utf8_length;
+}
+
+int ctx_string_get_length (CtxString *string)
+{
+  return string->length;
+}
+
+void
+ctx_string_free (CtxString *string, int freealloc)
+{
+  if (freealloc)
+    {
+      ctx_string_destroy (string);
+    }
+#if 0
+  if (string->is_line)
+  {
+    VtLine *line = (VtLine*)string;
+    if (line->style)
+      { ctx_free (line->style); }
+    if (line->ctx)
+      { ctx_destroy (line->ctx); }
+    if (line->ctx_copy)
+      { ctx_destroy (line->ctx_copy); }
+  }
+#endif
+  ctx_free (string);
+}
+
+char       *ctx_string_dissolve       (CtxString *string)
+{
+  char *ret = string->str;
+  ctx_string_free (string, 0);
+  return ret;
+}
+
+void
+ctx_string_set (CtxString *string, const char *new_string)
+{
+  ctx_string_clear (string);
+  _ctx_string_append_str (string, new_string);
+}
+
+
+void ctx_string_replace_utf8 (CtxString *string, int pos, const char *new_glyph)
+{
+#if 1
+  int old_len = string->utf8_length;
+#else
+  int old_len = ctx_utf8_strlen (string->str);// string->utf8_length;
+#endif
+  if (CTX_LIKELY(pos == old_len))
+    {
+      _ctx_string_append_str (string, new_glyph);
+      return;
+    }
+
+  char tmpg[3]=" ";
+  int new_len = ctx_utf8_len (*new_glyph);
+  if (new_len <= 1 && new_glyph[0] < 32)
+    {
+      new_len = 1;
+      tmpg[0]=new_glyph[0]+64;
+      new_glyph = tmpg;
+    }
+  {
+    for (int i = old_len; i <= pos + 2; i++)
+      {
+        _ctx_string_append_byte (string, ' ');
+        old_len++;
+      }
+  }
+  if (string->length + new_len  >= string->allocated_length - 2)
+    {
+      char *tmp;
+      char *defer;
+      string->allocated_length = string->length + new_len + 2;
+      tmp = (char*) ctx_calloc (string->allocated_length + 1 + 8, 1);
+      strcpy (tmp, string->str);
+      defer = string->str;
+      string->str = tmp;
+      ctx_free (defer);
+    }
+  char *p = (char *) ctx_utf8_skip (string->str, pos);
+  int prev_len = ctx_utf8_len (*p);
+  char *rest;
+  if (*p == 0 || * (p+prev_len) == 0)
+    {
+      rest = ctx_strdup ("");
+    }
+  else
+    {
+      if (p + prev_len >= string->length  + string->str)
+        { rest = ctx_strdup (""); }
+      else
+        { rest = ctx_strdup (p + prev_len); }
+    }
+  memcpy (p, new_glyph, new_len);
+  memcpy (p + new_len, rest, ctx_strlen (rest) + 1);
+  string->length += new_len;
+  string->length -= prev_len;
+  ctx_free (rest);
+  //string->length = ctx_strlen (string->str);
+  //string->utf8_length = ctx_utf8_strlen (string->str);
+}
+
+void ctx_string_replace_unichar (CtxString *string, int pos, uint32_t unichar)
+{
+  uint8_t utf8[8];
+  ctx_unichar_to_utf8 (unichar, utf8);
+  ctx_string_replace_utf8 (string, pos, (char *) utf8);
+}
+
+uint32_t ctx_string_get_unichar (CtxString *string, int pos)
+{
+  char *p = (char *) ctx_utf8_skip (string->str, pos);
+  if (!p)
+    { return 0; }
+  return ctx_utf8_to_unichar (p);
+}
+
+void ctx_string_insert_utf8 (CtxString *string, int pos, const char *new_glyph)
+{
+  int new_len = ctx_utf8_len (*new_glyph);
+  int old_len = string->utf8_length;
+  char tmpg[3]=" ";
+  if (old_len == pos && 0)
+    {
+      ctx_string_append_str (string, new_glyph);
+      return;
+    }
+  if (new_len <= 1 && new_glyph[0] < 32)
+    {
+      tmpg[0]=new_glyph[0]+64;
+      new_glyph = tmpg;
+    }
+  {
+    for (int i = old_len; i <= pos; i++)
+      {
+        _ctx_string_append_byte (string, ' ');
+        old_len++;
+      }
+  }
+  if (string->length + new_len + 1  > string->allocated_length)
+    {
+      char *tmp;
+      char *defer;
+      string->allocated_length = string->length + new_len + 1;
+      tmp = (char*) ctx_calloc (string->allocated_length + 1, 1);
+      strcpy (tmp, string->str);
+      defer = string->str;
+      string->str = tmp;
+      ctx_free (defer);
+    }
+  char *p = (char *) ctx_utf8_skip (string->str, pos);
+  int prev_len = ctx_utf8_len (*p);
+  char *rest;
+  if ( (*p == 0 || * (p+prev_len) == 0) && pos != 0)
+    {
+      rest = ctx_strdup ("");
+    }
+  else
+    {
+      rest = ctx_strdup (p);
+    }
+  memcpy (p, new_glyph, new_len);
+  memcpy (p + new_len, rest, ctx_strlen (rest) + 1);
+  ctx_free (rest);
+  string->length = ctx_strlen (string->str);
+  string->utf8_length = ctx_utf8_strlen (string->str);
+}
+
+void ctx_string_insert_unichar (CtxString *string, int pos, uint32_t unichar)
+{
+  uint8_t utf8[5]="";
+  utf8[ctx_unichar_to_utf8(unichar, utf8)]=0;
+  ctx_string_insert_utf8 (string, pos, (char*)utf8);
+}
+
+void ctx_string_remove (CtxString *string, int pos)
+{
+  int old_len = string->utf8_length;
+  {
+    for (int i = old_len; i <= pos; i++)
+      {
+        _ctx_string_append_byte (string, ' ');
+        old_len++;
+      }
+  }
+  char *p = (char *) ctx_utf8_skip (string->str, pos);
+  int prev_len = ctx_utf8_len (*p);
+  char *rest;
+  if (!p || *p == 0)
+    {
+      return;
+      rest = ctx_strdup ("");
+      prev_len = 0;
+    }
+  else if (* (p+prev_len) == 0)
+  {
+      rest = ctx_strdup ("");
+  }
+  else
+    {
+      rest = ctx_strdup (p + prev_len);
+    }
+  strcpy (p, rest);
+  string->str[string->length - prev_len] = 0;
+  ctx_free (rest);
+  string->length = ctx_strlen (string->str);
+  string->utf8_length = ctx_utf8_strlen (string->str);
+}
+
+char *ctx_strdup_printf (const char *format, ...)
+{
+  va_list ap;
+  size_t needed;
+  char *buffer;
+  va_start (ap, format);
+  needed = vsnprintf (NULL, 0, format, ap) + 1;
+  buffer = (char*)ctx_malloc (needed);
+  va_end (ap);
+  va_start (ap, format);
+  vsnprintf (buffer, needed, format, ap);
+  va_end (ap);
+  return buffer;
+}
+
+void ctx_string_append_printf (CtxString *string, const char *format, ...)
+{
+  va_list ap;
+  size_t needed;
+  char *buffer;
+  va_start (ap, format);
+  needed = vsnprintf (NULL, 0, format, ap) + 1;
+  buffer = (char*)ctx_malloc (needed);
+  va_end (ap);
+  va_start (ap, format);
+  vsnprintf (buffer, needed, format, ap);
+  va_end (ap);
+  ctx_string_append_str (string, buffer);
+  ctx_free (buffer);
+}
+
+CtxString *ctx_string_new_printf (const char *format, ...)
+{
+  CtxString *string = ctx_string_new ("");
+  va_list ap;
+  size_t needed;
+  char *buffer;
+  va_start (ap, format);
+  needed = vsnprintf (NULL, 0, format, ap) + 1;
+  buffer = (char*)ctx_malloc (needed);
+  va_end (ap);
+  va_start (ap, format);
+  vsnprintf (buffer, needed, format, ap);
+  va_end (ap);
+  ctx_string_append_str (string, buffer);
+  ctx_free (buffer);
+  return string;
+}
+
+
+void
+ctx_string_append_int (CtxString *string, int val)
+{
+  char buf[64];
+  char *bp = &buf[0];
+  int remainder;
+  if (val < 0)
+  {
+    buf[0]='-';
+    bp++;
+    remainder = -val;
+  }
+  else
+  remainder = val;
+
+  int len = 0;
+  do {
+    int digit = remainder % 10;
+    bp[len++] = digit + '0';
+    remainder /= 10;
+  } while (remainder);
+
+  bp[len]=0;
+  for (int i = 0; i < len/2; i++)
+  {
+    int tmp = bp[i];
+    bp[i] = bp[len-1-i];
+    bp[len-1-i] = tmp;
+  }
+  len += (val < 0);
+  ctx_string_append_str (string, buf);
+}
+
+void
+ctx_string_append_float (CtxString *string, float val)
+{
+  if (val < 0.0f)
+  {
+    ctx_string_append_byte (string, '-');
+    val = -val;
+  }
+  int remainder = ((int)(val*10000))%10000;
+  if (remainder % 10 > 5)
+    remainder = remainder/10+1;
+  else
+    remainder /= 10;
+  ctx_string_append_int (string, (int)val);
+  if (remainder)
+  {
+    if (remainder<0)
+      remainder=-remainder;
+    ctx_string_append_byte (string, '.');
+    if (remainder < 10)
+      ctx_string_append_byte (string, '0');
+    if (remainder < 100)
+      ctx_string_append_byte (string, '0');
+    ctx_string_append_int (string, remainder);
+  }
+}
+
+void ctx_drawlist_clear (Ctx *ctx)
+{
+  ctx->drawlist.count = 0;
+  ctx->drawlist.bitpack_pos = 0;
+}
+
+static void ctx_drawlist_backend_destroy (CtxBackend *backend)
+{
+  ctx_free (backend);
+}
+
+static void ctx_update_current_path (Ctx *ctx, CtxEntry *entry)
+{
+#if CTX_CURRENT_PATH
+  switch (entry->code)
+    {
+      case CTX_TEXT:
+      case CTX_STROKE_TEXT:
+      case CTX_BEGIN_PATH:
+        ctx->current_path.count = 0;
+        break;
+      case CTX_CLIP:
+      case CTX_FILL:
+      case CTX_STROKE:
+              // XXX unless preserve
+        ctx->current_path.count = 0;
+        break;
+      case CTX_CLOSE_PATH:
+      case CTX_LINE_TO:
+      case CTX_MOVE_TO:
+      case CTX_CURVE_TO:
+      case CTX_QUAD_TO:
+      case CTX_SMOOTH_TO:
+      case CTX_SMOOTHQ_TO:
+      case CTX_REL_LINE_TO:
+      case CTX_REL_MOVE_TO:
+      case CTX_REL_QUAD_TO:
+      case CTX_REL_SMOOTH_TO:
+      case CTX_REL_SMOOTHQ_TO:
+      case CTX_REL_CURVE_TO:
+      case CTX_ARC:
+      case CTX_ARC_TO:
+      case CTX_REL_ARC_TO:
+      case CTX_RECTANGLE:
+      case CTX_ROUND_RECTANGLE:
+        ctx_drawlist_add_entry (&ctx->current_path, entry);
+        break;
+      default:
+        break;
+    }
+#endif
+}
+
+static void
+ctx_drawlist_process (Ctx *ctx, CtxEntry *entry)
+{
+#if CTX_CURRENT_PATH
+  ctx_update_current_path (ctx, entry);
+#endif
+  /* these functions can alter the code and coordinates of
+     command that in the end gets added to the drawlist
+   */
+  ctx_interpret_style (&ctx->state, entry, ctx);
+  ctx_interpret_transforms (&ctx->state, entry, ctx);
+  ctx_interpret_pos (&ctx->state, entry, ctx);
+  ctx_drawlist_add_entry (&ctx->drawlist, entry);
+}
+
+static CtxBackend *ctx_drawlist_backend_new (void)
+{
+  CtxBackend *backend = (CtxBackend*)ctx_calloc (sizeof (CtxBackend), 1);
+  backend->process = (void(*)(Ctx *a, CtxCommand *c))ctx_drawlist_process;
+  backend->destroy = (void(*)(void *a))ctx_drawlist_backend_destroy;
+  return backend;
+}
+
+#if CTX_RASTERIZER
+
+
+static int
+ctx_rect_intersect (const CtxIntRectangle *a, const CtxIntRectangle *b)
+{
+  if (a->x >= b->x + b->width ||
+      b->x >= a->x + a->width ||
+      a->y >= b->y + b->height ||
+      b->y >= a->y + a->height) return 0;
+
+  return 1;
+}
+
+
+static void
+_ctx_add_hash (CtxHasher *hasher, CtxIntRectangle *shape_rect, uint32_t hash)
+{
+  CtxIntRectangle rect = {0,0, hasher->rasterizer.blit_width/hasher->cols,
+                               hasher->rasterizer.blit_height/hasher->rows};
+  uint32_t active = 0;
+  int hno = 0;
+  for (int row = 0; row < hasher->rows; row++)
+    for (int col = 0; col < hasher->cols; col++, hno++)
+     {
+      rect.x = col * rect.width;
+      rect.y = row * rect.height;
+      if (ctx_rect_intersect (shape_rect, &rect))
+      {
+        hasher->hashes[(row * hasher->cols + col)] ^= hash;
+        hasher->hashes[(row * hasher->cols + col)] += 11;
+        active |= (1<<hno);
+      }
+    }
+
+  if (hasher->prev_command>=0)
+  {
+    hasher->drawlist->entries[hasher->prev_command].data.u32[1] = active;
+  }
+
+  hasher->prev_command = hasher->pos;
+}
+
+static int
+ctx_str_count_lines (const char *str)
+{
+  int count = 0;
+  for (const char *p = str; *p; p++)
+    if (*p == '\n') count ++;
+  return count;
+}
+
+static inline uint32_t murmur_32_scramble(uint32_t k) {
+    k *= 0xcc9e2d51;
+    k = (k << 15) | (k >> 17);
+    k *= 0x1b873593;
+    return k;
+}
+
+static inline void murmur3_32_process(CtxMurmur *murmur, const uint8_t* key, size_t len)
+{
+    // code direct from the wikipedia article, it appears there without
+    // a license
+    uint32_t h = murmur->state[0];
+    uint32_t k;
+    /* Read in groups of 4. */
+    for (size_t i = len >> 2; i; i--) {
+        // Here is a source of differing results across endiannesses.
+        // A swap here has no effects on hash properties though.
+        memcpy(&k, key, sizeof(uint32_t));
+        key += sizeof(uint32_t);
+        h ^= murmur_32_scramble(k);
+        h = (h << 13) | (h >> 19);
+        h = h * 5 + 0xe6546b64;
+    }
+    /* Read the rest. */
+    k = 0;
+    for (size_t i = len & 3; i; i--) {
+        k <<= 8;
+        k |= key[i - 1];
+    }
+    // A swap is *not* necessary here because the preceding loop already
+    // places the low bytes in the low places according to whatever endianness
+    // we use. Swaps only apply when the memory is copied in a chunk.
+    h ^= murmur_32_scramble(k);
+    murmur->state[0] = h;
+    murmur->state[1] += len;
+}
+
+static inline void murmur3_32_init (CtxMurmur *murmur)
+{
+  murmur->state[0]=0;
+  murmur->state[1]=0;
+}
+static inline void murmur3_32_free (CtxMurmur *murmur)
+{
+  ctx_free (murmur);
+}
+static inline uint32_t murmur3_32_finalize (CtxMurmur *murmur)
+{
+  uint32_t h = murmur->state[0];
+  /* Finalize. */
+  h ^= murmur->state[1];
+  h ^= h >> 16;
+  h *= 0x85ebca6b;
+  h ^= h >> 13;
+  h *= 0xc2b2ae35;
+  h ^= h >> 16;
+  return h;
+}
+
+static inline int murmur3_32_done (CtxMurmur *murmur, unsigned char *out)
+{
+  murmur3_32_finalize (murmur);
+  for (int i = 0; i < 4; i++)
+    out[i]=0;
+  memcpy (out, &murmur->state[0], 4);
+  return murmur->state[0];
+}
+
+/*
+ * the hasher should store a list of
+ * times when the activeness of each tile changes
+ *
+ * on replay path and text/glyph commands as well
+ * as stroke/fill can be ignored  clips outside
+ * should mean no more drawing until restore
+ */
+
+static inline void
+ctx_device_corners_to_user_rect (CtxState *state,
+                                 float x0, float y0, float x1, float y1,
+                                 CtxIntRectangle *shape_rect)
+{
+  int itw, ith;
+  int itx = 0, ity = 0, itx2 = 0, ity2 = 0;
+  _ctx_user_to_device_prepped (state, x0, y0, &itx, &ity);
+  _ctx_user_to_device_prepped (state, x1, y1, &itx2, &ity2);
+  itx /= CTX_SUBDIV;
+  itx2 /= CTX_SUBDIV;
+  ity /= CTX_FULL_AA;
+  ity2 /= CTX_FULL_AA;
+  itw = itx2-itx;
+  ith = ity2-ity;
+  shape_rect->x=itx;
+  shape_rect->y=ity;
+  shape_rect->width = itw;
+  shape_rect->height = ith;
+}
+
+static void
+ctx_hasher_process (Ctx *ctx, CtxCommand *command)
+{
+  CtxEntry      *entry      = &command->entry;
+  CtxRasterizer *rasterizer = (CtxRasterizer *) ctx->backend;
+  CtxHasher     *hasher     = (CtxHasher*) ctx->backend;
+  CtxState      *state      = rasterizer->state;
+  CtxCommand *c = (CtxCommand *) entry;
+  int aa = 15;//rasterizer->aa;
+
+  ctx_interpret_pos_bare (rasterizer->state, entry, NULL);
+  ctx_interpret_style (rasterizer->state, entry, NULL);
+
+  switch (c->code)
+    {
+      case CTX_TEXT:
+        {
+          const char *str = ctx_arg_string();
+          CtxMurmur murmur;
+          memcpy (&murmur, &hasher->murmur_fill[hasher->source_level], sizeof (CtxMurmur));
+          float width = ctx_text_width (rasterizer->backend.ctx, str);
+
+
+          float height = ctx_get_font_size (rasterizer->backend.ctx);
+           CtxIntRectangle shape_rect;
+
+           float tx = rasterizer->x;
+           float ty = rasterizer->y - height * 1.2f;
+           float tx2 = tx+width;
+           float ty2 = ty+height * (ctx_str_count_lines (str) + 1.5f);
+
+           ctx_device_corners_to_user_rect (rasterizer->state, tx,ty,tx2,ty2, &shape_rect);
+          switch ((int)ctx_state_get (rasterizer->state, CTX_textAlign))
+          {
+          case CTX_TEXT_ALIGN_LEFT:
+          case CTX_TEXT_ALIGN_START:
+                  break;
+          case CTX_TEXT_ALIGN_END:
+          case CTX_TEXT_ALIGN_RIGHT:
+           shape_rect.x -= shape_rect.width;
+           break;
+          case CTX_TEXT_ALIGN_CENTER:
+           shape_rect.x -= shape_rect.width/2;
+           break;
+                   // XXX : doesn't take all text-alignments into account
+          }
+
+          murmur3_32_process(&murmur, (const unsigned char*)ctx_arg_string(), ctx_strlen  (ctx_arg_string()));
+#if 1
+        murmur3_32_process(&murmur, (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+    //      murmur3_32_process(&murmur, (unsigned char*)&color, 4);
+#endif
+          murmur3_32_process(&murmur, (unsigned char*)&shape_rect, sizeof (CtxIntRectangle));
+          _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+
+          ctx_rasterizer_rel_move_to (rasterizer, width, 0);
+        }
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_STROKE_TEXT:
+        {
+          CtxMurmur murmur;
+          const char *str = ctx_arg_string();
+          memcpy (&murmur, &hasher->murmur_stroke[hasher->source_level], sizeof (CtxMurmur));
+          float width = ctx_text_width (rasterizer->backend.ctx, str);
+          float height = ctx_get_font_size (rasterizer->backend.ctx);
+
+           CtxIntRectangle shape_rect;
+
+           float tx = rasterizer->x;
+           float ty = rasterizer->y - height * 1.2f;
+           float tx2 = tx+width;
+           float ty2 = ty+height * (ctx_str_count_lines (str) + 1.5f);
+           ctx_device_corners_to_user_rect (rasterizer->state, tx,ty,tx2,ty2, &shape_rect);
+
+
+#if 0
+          uint32_t color;
+          ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_stroke.color, (uint8_t*)(&color));
+#endif
+          murmur3_32_process(&murmur, (unsigned char*)ctx_arg_string(), ctx_strlen  (ctx_arg_string()));
+#if 1
+          murmur3_32_process(&murmur, (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+    //    murmur3_32_process(&murmur, (unsigned char*)&color, 4);
+#endif
+          murmur3_32_process(&murmur, (unsigned char*)&shape_rect, sizeof (CtxIntRectangle));
+          _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+
+          ctx_rasterizer_rel_move_to (rasterizer, width, 0);
+        }
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_GLYPH:
+         {
+          CtxMurmur murmur;
+          memcpy (&murmur, &hasher->murmur_fill[hasher->source_level], sizeof (CtxMurmur));
+
+          uint8_t string[8];
+          string[ctx_unichar_to_utf8 (c->u32.a0, string)]=0;
+          float width = ctx_text_width (rasterizer->backend.ctx, (char*)string);
+          float height = ctx_get_font_size (rasterizer->backend.ctx);
+
+          float tx = rasterizer->x;
+          float ty = rasterizer->y;
+          float tx2 = rasterizer->x + width;
+          float ty2 = rasterizer->y + height * 2;
+          CtxIntRectangle shape_rect;
+          ctx_device_corners_to_user_rect (rasterizer->state, tx,ty,tx2,ty2, &shape_rect);
+
+          shape_rect.y-=shape_rect.height/2;
+
+
+#if 0
+          uint32_t color;
+          ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_fill.color, (uint8_t*)(&color));
+#endif
+          murmur3_32_process(&murmur, string, ctx_strlen ((const char*)string));
+          murmur3_32_process(&murmur, (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+#if 0
+          murmur3_32_process(&murmur, (unsigned char*)&color, 4);
+#endif
+          murmur3_32_process(&murmur, (unsigned char*)&shape_rect, sizeof (CtxIntRectangle));
+          _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+
+          ctx_rasterizer_rel_move_to (rasterizer, width, 0);
+          ctx_rasterizer_reset (rasterizer);
+         }
+        break;
+
+      case CTX_CLIP:
+      case CTX_PAINT:
+        {
+        CtxMurmur murmur;
+        memcpy (&murmur, &hasher->murmur_fill[hasher->source_level], sizeof (CtxMurmur));
+        if (rasterizer->edge_list.count)
+          murmur3_32_process(&murmur,  (uint8_t*)rasterizer->edge_list.entries, sizeof(CtxSegment) * rasterizer->edge_list.count);
+
+        {
+          int is = rasterizer->state->gstate.fill_rule;
+          murmur3_32_process(&murmur, (uint8_t*)&is, sizeof(int));
+        }
+        CtxIntRectangle shape_rect = {-100,-100,
+                rasterizer->blit_width*10,
+                rasterizer->blit_height*10};
+        _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+        }
+
+        break;
+      case CTX_FILL:
+        {
+          CtxMurmur murmur;
+          memcpy (&murmur, &hasher->murmur_fill[hasher->source_level], sizeof (CtxMurmur));
+
+          /* we eant this hasher to be as good as possible internally,
+           * since it is also used in the small shapes rasterization
+           * cache
+           */
+        //uint64_t hash = ctx_rasterizer_poly_to_hash2 (rasterizer); // + hasher->salt;
+        CtxIntRectangle shape_rect = {
+          (int)(rasterizer->col_min / CTX_SUBDIV - 3),
+          (int)(rasterizer->scan_min / aa - 3),
+          (int)(5+(rasterizer->col_max - rasterizer->col_min + CTX_SUBDIV-1) / CTX_SUBDIV),
+          (int)(5+(rasterizer->scan_max - rasterizer->scan_min + aa-1) / aa)
+        };
+
+        if (rasterizer->edge_list.count)
+          murmur3_32_process(&murmur,  (uint8_t*)rasterizer->edge_list.entries, sizeof(CtxSegment) * rasterizer->edge_list.count);
+
+        {
+          int is = rasterizer->state->gstate.fill_rule;
+          murmur3_32_process(&murmur, (uint8_t*)&is, sizeof(int));
+        }
+        {
+          int is = rasterizer->state->gstate.image_smoothing;
+          murmur3_32_process(&murmur, (uint8_t*)&is, sizeof(int));
+        }
+        {
+          int e = rasterizer->state->gstate.extend;
+          murmur3_32_process(&murmur, (uint8_t*)&e, sizeof(int));
+        }
+
+          _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+
+        if (c->code == CTX_CLIP)
+          ctx_rasterizer_clip (rasterizer);
+
+        if (!rasterizer->preserve)
+          ctx_rasterizer_reset (rasterizer);
+        rasterizer->preserve = 0;
+
+        }
+        break;
+      case CTX_STROKE:
+        {
+          CtxMurmur murmur;
+          memcpy (&murmur, &hasher->murmur_stroke[hasher->source_level], sizeof (CtxMurmur));
+        if (rasterizer->edge_list.count)
+        murmur3_32_process(&murmur,  (uint8_t*)rasterizer->edge_list.entries, sizeof(CtxSegment) * rasterizer->edge_list.count);
+        CtxIntRectangle shape_rect = {
+          (int)(rasterizer->col_min / CTX_SUBDIV - rasterizer->state->gstate.line_width),
+          (int)(rasterizer->scan_min / aa - rasterizer->state->gstate.line_width),
+          (int)((rasterizer->col_max - rasterizer->col_min + 1) / CTX_SUBDIV + rasterizer->state->gstate.line_width),
+          (int)((rasterizer->scan_max - rasterizer->scan_min + 1) / aa + rasterizer->state->gstate.line_width)
+        };
+
+        shape_rect.width += (int)(rasterizer->state->gstate.line_width * 2);
+        shape_rect.height += (int)(rasterizer->state->gstate.line_width * 2);
+        shape_rect.x -= (int)(rasterizer->state->gstate.line_width);
+        shape_rect.y -= (int)(rasterizer->state->gstate.line_width);
+
+        {
+          float f;
+          int i;
+          f = rasterizer->state->gstate.line_width;
+          murmur3_32_process(&murmur, (uint8_t*)&f, sizeof(float));
+          i = rasterizer->state->gstate.line_cap;
+          murmur3_32_process(&murmur, (uint8_t*)&i, sizeof(int));
+          i = rasterizer->state->gstate.line_join;
+          murmur3_32_process(&murmur, (uint8_t*)&i, sizeof(int));
+          i = rasterizer->state->gstate.source_stroke.type;
+          murmur3_32_process(&murmur, (uint8_t*)&i, sizeof(int));
+        }
+
+        uint32_t color;
+        ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_stroke.color, (uint8_t*)(&color));
+
+          murmur3_32_process(&murmur, (unsigned char*)&color, 4);
+
+          _ctx_add_hash (hasher, &shape_rect, murmur3_32_finalize (&murmur));
+        }
+        if (!rasterizer->preserve)
+          ctx_rasterizer_reset (rasterizer);
+        rasterizer->preserve = 0;
+        break;
+        /* the above cases are the painting cases and 
+         * the only ones differing from the rasterizer's process switch
+         */
+
+      case CTX_LINE_TO:
+        ctx_rasterizer_line_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_REL_LINE_TO:
+        ctx_rasterizer_rel_line_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_MOVE_TO:
+        ctx_rasterizer_move_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_REL_MOVE_TO:
+        ctx_rasterizer_rel_move_to (rasterizer, c->c.x0, c->c.y0);
+        break;
+      case CTX_CURVE_TO:
+        ctx_rasterizer_line_to (rasterizer, c->c.x0, c->c.y0);
+        ctx_rasterizer_line_to (rasterizer, c->c.x1, c->c.y1);
+        ctx_rasterizer_line_to (rasterizer, c->c.x2, c->c.y2);
+        //ctx_rasterizer_curve_to (rasterizer, c->c.x0, c->c.y0,
+        //                         c->c.x1, c->c.y1,
+        //                         c->c.x2, c->c.y2);
+        break;
+      case CTX_REL_CURVE_TO:
+        ctx_rasterizer_rel_line_to (rasterizer, c->c.x2, c->c.y2);
+        //ctx_rasterizer_rel_curve_to (rasterizer, c->c.x0, c->c.y0,
+        //                             c->c.x1, c->c.y1,
+        //                             c->c.x2, c->c.y2);
+        break;
+      case CTX_QUAD_TO:
+        ctx_rasterizer_line_to (rasterizer, c->c.x1, c->c.y1);
+        //ctx_rasterizer_quad_to (rasterizer, c->c.x0, c->c.y0, c->c.x1, c->c.y1);
+        break;
+      case CTX_REL_QUAD_TO:
+        ctx_rasterizer_rel_line_to (rasterizer, c->c.x1, c->c.y1);
+        //ctx_rasterizer_rel_quad_to (rasterizer, c->c.x0, c->c.y0, c->c.x1, c->c.y1);
+        break;
+      case CTX_ARC:
+        ctx_rasterizer_arc (rasterizer, c->arc.x, c->arc.y, c->arc.radius, c->arc.angle1, c->arc.angle2, (int)c->arc.direction);
+        break;
+      case CTX_RECTANGLE:
+        ctx_rasterizer_rectangle (rasterizer, c->rectangle.x, c->rectangle.y,
+                                  c->rectangle.width, c->rectangle.height);
+        break;
+      case CTX_ROUND_RECTANGLE:
+        ctx_rasterizer_round_rectangle (rasterizer, c->rectangle.x, c->rectangle.y,
+                                        c->rectangle.width, c->rectangle.height,
+                                        c->rectangle.radius);
+        break;
+      case CTX_SET_PIXEL:
+        ctx_rasterizer_set_pixel (rasterizer, c->set_pixel.x, c->set_pixel.y,
+                                  c->set_pixel.rgba[0],
+                                  c->set_pixel.rgba[1],
+                                  c->set_pixel.rgba[2],
+                                  c->set_pixel.rgba[3]);
+        break;
+      case CTX_PRESERVE:
+        rasterizer->preserve = 1;
+        break;
+      case CTX_SAVE:
+      case CTX_RESTORE:
+
+        if (c->code == CTX_SAVE)
+        {
+           if (hasher->source_level + 1 < CTX_MAX_STATES)
+           {
+             hasher->source_level++;
+             hasher->murmur_fill[hasher->source_level] =
+               hasher->murmur_fill[hasher->source_level-1];
+             hasher->murmur_stroke[hasher->source_level] =
+               hasher->murmur_stroke[hasher->source_level-1];
+           }
+        }
+        else
+        {
+           if (hasher->source_level - 1 >= 0)
+           {
+             hasher->source_level--;
+             hasher->murmur_fill[hasher->source_level] =
+               hasher->murmur_fill[hasher->source_level+1];
+             hasher->murmur_stroke[hasher->source_level] =
+               hasher->murmur_stroke[hasher->source_level+1];
+           }
+        }
+
+        /* FALLTHROUGH */
+      case CTX_ROTATE:
+      case CTX_SCALE:
+      case CTX_TRANSLATE:
+      case CTX_APPLY_TRANSFORM:
+
+        ctx_interpret_transforms (rasterizer->state, entry, NULL);
+        break;
+      case CTX_FONT:
+        ctx_rasterizer_set_font (rasterizer, ctx_arg_string() );
+        break;
+      case CTX_BEGIN_PATH:
+        ctx_rasterizer_reset (rasterizer);
+        break;
+      case CTX_CLOSE_PATH:
+        ctx_rasterizer_finish_shape (rasterizer);
+        break;
+      case CTX_DEFINE_TEXTURE:
+        {
+        murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+        murmur3_32_process(&hasher->murmur_fill[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+        murmur3_32_process (&hasher->murmur_fill[hasher->source_level], (uint8_t*)c->define_texture.eid, ctx_strlen (c->define_texture.eid));
+        murmur3_32_process(&hasher->murmur_fill[hasher->source_level], (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+
+        rasterizer->comp_op = NULL; // why?
+        }
+        break;
+      case CTX_TEXTURE:
+        murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+        murmur3_32_process(&hasher->murmur_fill[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+        murmur3_32_process (&hasher->murmur_fill[hasher->source_level], (uint8_t*)c->texture.eid, ctx_strlen (c->texture.eid));
+        murmur3_32_process (&hasher->murmur_fill[hasher->source_level], (uint8_t*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+        rasterizer->comp_op = NULL; // why?
+        break;
+      case CTX_COLOR:
+        {
+          uint32_t color;
+          if (((int)(ctx_arg_float(0))&512))
+          {
+            ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_stroke.color, (uint8_t*)(&color));
+            murmur3_32_init (&hasher->murmur_stroke[hasher->source_level]);
+            murmur3_32_process(&hasher->murmur_stroke[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+            murmur3_32_process(&hasher->murmur_stroke[hasher->source_level], (unsigned char*)&color, 4);
+          }
+          else
+          {
+            ctx_color_get_rgba8 (rasterizer->state, &rasterizer->state->gstate.source_fill.color, (uint8_t*)(&color));
+            murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+            murmur3_32_process(&hasher->murmur_fill[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+            murmur3_32_process(&hasher->murmur_fill[hasher->source_level], (unsigned char*)&color, 4);
+          }
+        }
+        break;
+      case CTX_LINEAR_GRADIENT:
+          murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+          murmur3_32_process(&hasher->murmur_fill[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+          murmur3_32_process(&hasher->murmur_fill[hasher->source_level], 
+                           (uint8_t*)c, sizeof (c->linear_gradient));
+          murmur3_32_process (&hasher->murmur_fill[hasher->source_level], (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+        break;
+      case CTX_RADIAL_GRADIENT:
+          murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+          murmur3_32_process(&hasher->murmur_fill[hasher->source_level], &rasterizer->state->gstate.global_alpha_u8, 1);
+          murmur3_32_process(&hasher->murmur_fill[hasher->source_level], 
+                           (uint8_t*)c, sizeof (c->radial_gradient));
+          murmur3_32_process (&hasher->murmur_fill[hasher->source_level], (unsigned char*)(&rasterizer->state->gstate.transform), sizeof (rasterizer->state->gstate.transform));
+        //ctx_state_gradient_clear_stops (rasterizer->state);
+        break;
+#if CTX_GRADIENTS
+      case CTX_GRADIENT_STOP:
+        {
+          float rgba[4]= {ctx_u8_to_float (ctx_arg_u8 (4) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+1) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+2) ),
+                          ctx_u8_to_float (ctx_arg_u8 (4+3) )
+                         };
+          murmur3_32_process(&hasher->murmur_fill[hasher->source_level], 
+                           (uint8_t*) &rgba[0], sizeof(rgba));
+        }
+        break;
+#endif
+    }
+
+#if 0
+  if (command->code == CTX_START_FRAME)
+  {
+  }
+#endif
+
+    hasher->pos += ctx_conts_for_entry ((CtxEntry*)(command))+1;
+  if (command->code == CTX_LINE_WIDTH)
+    {
+      float x = state->gstate.line_width;
+      /* normalize line width according to scaling factor
+       */
+      x = x * ctx_maxf (ctx_maxf (ctx_fabsf (state->gstate.transform.m[0][0]),
+                                  ctx_fabsf (state->gstate.transform.m[0][1]) ),
+                        ctx_maxf (ctx_fabsf (state->gstate.transform.m[1][0]),
+                                  ctx_fabsf (state->gstate.transform.m[1][1]) ) );
+      state->gstate.line_width = x;
+    }
+}
+
+static CtxRasterizer *
+ctx_hasher_init (CtxRasterizer *rasterizer, Ctx *ctx, CtxState *state, int width, int height, int cols, int rows, CtxDrawlist *drawlist)
+{
+  CtxHasher *hasher = (CtxHasher*)rasterizer;
+  ctx_memset (rasterizer, 0, sizeof (CtxHasher) );
+  CtxBackend *backend = (CtxBackend*)hasher;
+  backend->ctx         = ctx;
+  backend->process = ctx_hasher_process;
+  backend->destroy = (CtxDestroyNotify)ctx_rasterizer_destroy;
+  // XXX need own destructor to not leak ->hashes
+  rasterizer->edge_list.flags |= CTX_DRAWLIST_EDGE_LIST;
+  rasterizer->state       = state;
+  ctx_state_init (rasterizer->state);
+  rasterizer->blit_x      = 0;
+  rasterizer->blit_y      = 0;
+  rasterizer->blit_width  = width;
+  rasterizer->blit_height = height;
+  rasterizer->state->gstate.clip_min_x  = 0;
+  rasterizer->state->gstate.clip_min_y  = 0;
+  rasterizer->state->gstate.clip_max_x  = width - 1;
+  rasterizer->state->gstate.clip_max_y  = height - 1;
+  rasterizer->scan_min    = 5000;
+  rasterizer->scan_max    = -5000;
+  //rasterizer->aa          = 15;
+
+  hasher->rows = rows;
+  hasher->cols = cols;
+  hasher->pos  = 0;
+
+  hasher->drawlist = drawlist;
+  hasher->prev_command = -1;
+
+  memset(hasher->hashes,0, sizeof (hasher->hashes));
+  murmur3_32_init (&hasher->murmur_fill[hasher->source_level]);
+  murmur3_32_init (&hasher->murmur_stroke[hasher->source_level]);
+
+  return rasterizer;
+}
+
+Ctx *ctx_hasher_new (int width, int height, int cols, int rows, CtxDrawlist *drawlist)
+{
+  Ctx *ctx           = _ctx_new_drawlist (width, height);
+  CtxState    *state = &ctx->state;
+  CtxRasterizer *rasterizer = (CtxRasterizer *) ctx_calloc (sizeof (CtxHasher), 1);
+  ctx_hasher_init (rasterizer, ctx, state, width, height, cols, rows, drawlist);
+  ctx_set_backend (ctx, (void*)rasterizer);
+  return ctx;
+}
+
+uint32_t ctx_hasher_get_hash (Ctx *ctx, int col, int row)
+{
+  CtxHasher *hasher = (CtxHasher*)ctx->backend;
+  if (row < 0) row =0;
+  if (col < 0) col =0;
+  if (row >= hasher->rows) row = hasher->rows-1;
+  if (col >= hasher->cols) col = hasher->cols-1;
+
+  hasher->drawlist->entries[hasher->prev_command].data.u32[1] = 0xffffffff;
+
+  return hasher->hashes[(row*hasher->cols+col)];
+}
+
+#endif
+/*
+ * TODO:
+ *   gradients
+ *   text-layout
+ *   textures
+ *   links
+ *
+ */
+
+
+#if CTX_PDF
+
+#define CTX_PDF_MAX_OBJS 256
+#define CTX_PDF_MAX_RESOURCES 256 // in one page
+
+#define CTX_PDF_MAX_PAGES CTX_PDF_MAX_OBJS
+
+typedef struct _CtxPDF CtxPDF;
+enum { CTX_PDF_TIMES = 1,
+       CTX_PDF_HELVETICA, //2
+       CTX_PDF_COURIER, //3
+       CTX_PDF_SYMBOL, //4
+       CTX_PDF_TIMES_BOLD,
+       CTX_PDF_HELVETICA_BOLD,
+       CTX_PDF_COURIER_BOLD,
+       CTX_PDF_ZAPF_DING_BATS, // 8
+       CTX_PDF_TIMES_ITALIC, // 9
+       CTX_PDF_HELVETICA_ITALIC, // 10
+       CTX_PDF_COURIER_ITALIC, // 11
+       CTX_PDF_TIMES_BOLD_ITALIC, // 12
+       CTX_PDF_HELVETICA_BOLD_ITALIC, //13
+       CTX_PDF_COURIER_BOLD_ITALIC, //14
+       // courier and helvetica variants are called
+       // oblique not italic in the PDF spec
+
+};
+
+typedef struct
+_CtxPdfResource
+{
+  int id;
+  int type; // 0 opacity, 1 linear grad, 2 radial grad
+  union { 
+     struct { float value;}                   opacity;
+     struct { float x0, y0, x1, y1;}          linear_gradient;
+     struct { float x0, y0, r0, x1, y1, r1;}  radial_gradient;
+     struct { const char *eid;int width, height,stride,format;uint8_t *data;}  texture;
+     struct { int   no;}    font;
+     // texture
+     // linear-gradient
+     // radial-gradient
+  };
+} CtxPdfResource;
+
+
+struct
+  _CtxPDF
+{
+  CtxBackend     backend;
+  int            preserve;
+  const char    *path;
+  CtxString     *document;
+  CtxState       state;
+  int            pat;
+  int            xref[CTX_PDF_MAX_OBJS];
+  int            objs;
+  int            page_length_offset;
+  int            page_height_offset;
+  int            kids_offset;
+  int            page_count_offset;
+
+  int            width;
+  int            height;
+
+  char          *encoding;
+
+  CtxPdfResource resource[CTX_PDF_MAX_RESOURCES];
+  int            resource_count;
+
+  int            page_resource[CTX_PDF_MAX_RESOURCES];
+  int            page_resource_count;
+  int            new_resource[CTX_PDF_MAX_RESOURCES];
+  int            new_resource_count;
+
+  int            next_obj; // pre-emptive builds
+                           // during page build
+
+  float          page_size[4];
+
+  int            page_objs[CTX_PDF_MAX_PAGES];
+  int            content_objs[CTX_PDF_MAX_PAGES];
+  int            page_count;
+
+  int            pages; // known to be 1
+  int            font;
+  int            font_map;
+
+
+  int alphas[10];
+};
+
+
+#define ctx_pdf_print(str) \
+        do { ctx_string_append_str (pdf->document, str);\
+}while (0)
+#define ctx_pdf_printf(fmt, a...) \
+        do { ctx_string_append_printf (pdf->document, fmt, ##a);\
+}while (0)
+#define ctx_pdf_print1i(i0) \
+        do { ctx_string_append_int (pdf->document, i0);\
+        ctx_string_append_byte (pdf->document, ' ');\
+}while (0)
+#define ctx_pdf_print1f(f0) \
+        do { ctx_string_append_float (pdf->document, f0);\
+             ctx_string_append_byte (pdf->document, ' '); }while (0)
+#define ctx_pdf_print2f(f0,f1) \
+        do { ctx_pdf_print1f(f0);ctx_pdf_print1f(f1); }while (0)
+#define ctx_pdf_print3f(f0,f1,f2) \
+        do { ctx_pdf_print2f(f0,f1);ctx_pdf_print1f(f2); }while (0)
+#define ctx_pdf_print4f(f0,f1,f2,f3) \
+        do { ctx_pdf_print3f(f0,f1,f2);ctx_pdf_print1f(f3); }while (0)
+#define ctx_pdf_print5f(f0,f1,f2,f3,f4) \
+        do { ctx_pdf_print4f(f0,f1,f2,f3);ctx_pdf_print1f(f4); }while (0)
+#define ctx_pdf_print6f(f0,f1,f2,f3,f4,f5) \
+        do { ctx_pdf_print5f(f0,f1,f2,f3,f4);ctx_pdf_print1f(f5); }while (0)
+
+/**
+ * Generate a cubic Bezier representing an arc on the unit circle of total
+ * angle ‘size‘ radians, beginning ‘start‘ radians above the x-axis.
+ */
+static void acuteArcToBezier(float start, float size,
+                float *ax,
+                float *ay,
+                float *bx,
+                float *by,
+                float *cx,
+                float *cy,
+                float *dx,
+                float *dy
+                ) {
+  // Evaluate constants.
+  float alpha = size / 2.0,
+      cos_alpha = ctx_cosf(alpha),
+      sin_alpha = ctx_sinf(alpha),
+      cot_alpha = 1.0 / ctx_tanf(alpha),
+      phi = start + alpha, // This is how far the arc needs to be rotated.
+      cos_phi = ctx_cosf(phi),
+      sin_phi = ctx_sinf(phi),
+      lambda = (4.0 - cos_alpha) / 3.0,
+      mu = sin_alpha + (cos_alpha - lambda) * cot_alpha;
+ // Return rotated waypoints.
+ *ax = ctx_cosf(start),
+ *ay = ctx_sinf(start),
+ *bx = lambda * cos_phi + mu * sin_phi,
+ *by = lambda * sin_phi - mu * cos_phi,
+ *cx = lambda * cos_phi - mu * sin_phi,
+ *cy = lambda * sin_phi + mu * cos_phi,
+ *dx = ctx_cosf(start + size),
+ *dy = ctx_sinf(start + size);
+}
+
+
+static char *ctx_utf8_to_mac_roman (const uint8_t *string);
+static char *ctx_utf8_to_windows_1252 (const uint8_t *string);
+
+void pdf_end_object (CtxPDF *pdf)
+{
+  ctx_pdf_print("\nendobj\n");
+}
+
+int pdf_add_object (CtxPDF *pdf)
+{
+  if (pdf->objs) pdf_end_object (pdf);
+  // we use 1 indexing in this array
+  pdf->xref[++pdf->objs] = pdf->document->length;
+  ctx_pdf_printf("%i 0 obj\n", pdf->objs);
+  return pdf->objs;
+}
+
+static void
+pdf_start_page (CtxPDF *pdf)
+{
+  pdf->page_count++;
+  pdf->content_objs[pdf->page_count]=pdf_add_object (pdf); // 2 - our actual page contents
+  ctx_pdf_printf ("<</Length ");
+  pdf->page_length_offset = pdf->document->length;
+  ctx_pdf_printf ("XXXXXXXXXX>>\n");
+  ctx_pdf_printf ("stream\nBT\n1 0 0 -1 0 ");
+  pdf->page_height_offset = pdf->document->length;
+  ctx_pdf_printf ("XXXXXXXXXX cm\n/F1 24 Tf\n", pdf->height);
+
+  pdf->page_resource_count = 0;
+  pdf->new_resource_count = 0;
+  pdf->next_obj = pdf->content_objs[pdf->page_count]+1;
+}
+
+static void
+pdf_end_page (CtxPDF *pdf)
+{
+  int length = (pdf->document->length - pdf->page_length_offset) - 17;
+  char buf[11];
+  snprintf (buf, 11, "%10u", length);
+  memcpy   (&pdf->document->str[pdf->page_length_offset], buf, 10);
+  snprintf (buf, 11, "% 9f", pdf->page_size[3]);
+  memcpy   (&pdf->document->str[pdf->page_height_offset], buf, 10);
+  ctx_pdf_printf("\nET\nendstream\n");
+
+  for (int i = 0; i < pdf->new_resource_count; i ++)
+  {
+    float opacity = 1.0f;
+    for (int j = 0; j < pdf->resource_count; j ++)
+    {
+      if (pdf->resource[j].id == pdf->new_resource[i])
+        opacity = pdf->resource[j].opacity.value;
+    }
+    pdf->alphas[i]=pdf_add_object (pdf); // 4
+    ctx_pdf_printf ("<</Type/ExtGState/ca %.2f/CA %.2f>>", opacity, opacity);
+  }
+
+   pdf->page_objs[pdf->page_count]=pdf_add_object (pdf);
+   ctx_pdf_printf ("<<"
+"/Contents %i 0 R/Type/Page/Resources<</ProcSet[/PDF/Text]/Font %i 0 R", pdf->content_objs[pdf->page_count], pdf->font_map);
+   ctx_pdf_printf ("/ExtGState");
+
+   ctx_pdf_printf ("<<");
+   for (int i = 0; i < pdf->page_resource_count; i++)
+   {
+     ctx_pdf_printf ("/G%i %i 0 R", pdf->page_resource[i],
+                                    pdf->page_resource[i]);
+   }
+   ctx_pdf_print (">>");
+   ctx_pdf_print (">>/Parent ");
+   ctx_pdf_print1i (pdf->pages);ctx_pdf_print ("0 R");
+   ctx_pdf_print ("/MediaBox[");
+   ctx_pdf_print4f (pdf->page_size[0], pdf->page_size[1],
+                    pdf->page_size[2]+pdf->page_size[0], pdf->page_size[3]+pdf->page_size[1]);
+   ctx_pdf_print ("]>>");
+
+}
+
+
+void ctx_pdf_set_opacity (CtxPDF *pdf, float alpha)
+{
+  int obj_no = 0;
+
+  for (int i = 0; i < pdf->resource_count; i++)
+  {
+    if (pdf->resource[i].type == 0 &&
+        pdf->resource[i].opacity.value == alpha)
+    {
+      obj_no = pdf->resource[i].id;
+    }
+  }
+
+  if (obj_no == 0)
+  {
+     pdf->resource[pdf->resource_count].type = 0;
+     pdf->resource[pdf->resource_count].opacity.value = alpha;
+     obj_no = pdf->resource[pdf->resource_count].id = 
+             pdf->next_obj++;
+     pdf->resource_count++;
+
+     pdf->new_resource[pdf->new_resource_count++] =
+       obj_no;
+  }
+
+  ctx_pdf_printf("/G%i gs ", obj_no);
+
+  for (int i = 0; i < pdf->page_resource_count; i ++)
+  {
+    if (pdf->page_resource[i] == obj_no)
+      return;
+  }
+  pdf->page_resource[pdf->page_resource_count++] = obj_no;
+}
+
+static void
+ctx_pdf_line_to (Ctx *ctx, float x, float y)
+{
+  CtxPDF *pdf = (void*)ctx->backend;
+  ctx_pdf_print2f(x, y); ctx_pdf_print("l ");
+}
+static void
+ctx_pdf_move_to (Ctx *ctx, float x, float y)
+{
+  CtxPDF *pdf = (void*)ctx->backend;
+  ctx_pdf_print2f(x, y); ctx_pdf_print("m ");
+}
+static void
+ctx_pdf_curve_to (Ctx *ctx, float cx0, float cy0, float cx1, float cy1, float x, float y)
+{
+  CtxPDF *pdf = (void*)ctx->backend;
+  ctx_pdf_print6f(cx0,cy0,cx1,cy1,x,y); ctx_pdf_print("c ");
+}
+
+static void
+ctx_pdf_apply_transform (Ctx *ctx, float a, float b, float c, float d, float e, float f)
+{
+  CtxPDF *pdf = (void*)ctx->backend;
+  ctx_pdf_print6f(a,b,c,d,e,f);
+  ctx_pdf_print("cm\n");
+}
+
+static void
+ctx_pdf_process (Ctx *ctx, CtxCommand *c)
+{
+  CtxPDF *pdf = (void*)ctx->backend;
+  CtxEntry *entry = (CtxEntry *) &c->entry;
+  CtxState *state = &pdf->state;
+
+  CtxDrawlist *preserved = NULL;
+
+  ctx_interpret_style (&pdf->state, entry, NULL);
+
+  switch (entry->code)
+    {
+      case CTX_NEW_PAGE:
+        pdf_end_page (pdf);
+        pdf_start_page (pdf);
+        break;
+
+      case CTX_LINE_TO:         ctx_pdf_line_to (ctx, c->line_to.x, c->line_to.y); break;
+      case CTX_HOR_LINE_TO:     ctx_pdf_line_to (ctx, ctx_arg_float(0), state->y); break;
+      case CTX_VER_LINE_TO:     ctx_pdf_line_to (ctx, state->x, ctx_arg_float(0)); break;
+      case CTX_REL_LINE_TO:     ctx_pdf_line_to (ctx, c->line_to.x + state->x, c->line_to.y + state->y); break;
+      case CTX_REL_HOR_LINE_TO: ctx_pdf_line_to (ctx, ctx_arg_float(0) + state->x, state->y); break;
+      case CTX_REL_VER_LINE_TO: ctx_pdf_line_to (ctx, state->x, ctx_arg_float(0) + state->y); break;
+
+      case CTX_MOVE_TO:         ctx_pdf_move_to (ctx, c->move_to.x, c->move_to.y); break;
+      case CTX_REL_MOVE_TO:     ctx_pdf_move_to (ctx, c->move_to.x + state->x, c->move_to.y + state->y); break;
+
+      case CTX_CURVE_TO:
+        ctx_pdf_curve_to (ctx, c->curve_to.cx1, c->curve_to.cy1,
+                               c->curve_to.cx2, c->curve_to.cy2,
+                               c->curve_to.x, c->curve_to.y);
+        break;
+
+
+      case CTX_REL_CURVE_TO:
+        ctx_pdf_curve_to (ctx, c->curve_to.cx1 + state->x, c->curve_to.cy1 + state->y,
+                               c->curve_to.cx2 + state->x, c->curve_to.cy2 + state->y,
+                               c->curve_to.x   + state->x, c->curve_to.y   + state->y);
+        break;
+
+
+      case CTX_PRESERVE:
+        pdf->preserve = 1;
+        break;
+
+      case CTX_QUAD_TO:
+        {
+          float cx = ctx_arg_float (0);
+          float cy = ctx_arg_float (1);
+          float  x = ctx_arg_float (2);
+          float  y = ctx_arg_float (3);
+          float cx1 = (cx * 2 + state->x) / 3.0f;
+          float cy1 = (cy * 2 + state->y) / 3.0f;
+          float cx2 = (cx * 2 + x) / 3.0f;
+          float cy2 = (cy * 2 + y) / 3.0f;
+          ctx_pdf_curve_to (ctx, cx1, cy1, cx2, cy2, x, y);
+        }
+        break;
+
+      case CTX_REL_QUAD_TO:
+        {
+          float cx = ctx_arg_float (0);
+          float cy = ctx_arg_float (1);
+          float  x = ctx_arg_float (2);
+          float  y = ctx_arg_float (3);
+          float cx1 = (cx * 2 ) / 3.0f;
+          float cy1 = (cy * 2 ) / 3.0f;
+          float cx2 = (cx * 2 + x) / 3.0f;
+          float cy2 = (cy * 2 + y) / 3.0f;
+          ctx_pdf_curve_to (ctx, cx1 + state->x, cy1 + state->y,
+                                 cx2 + state->x, cy2 + state->y,
+                                 x   + state->x, y   + state->y);
+        }
+        break;
+
+      case CTX_LINE_WIDTH:
+        ctx_pdf_printf("%f w\n", ctx_arg_float (0));
+        break;
+
+      case CTX_ARC:
+        {
+           float x = c->arc.x,
+                 y = c->arc.y,
+                 w = c->arc.radius,
+                 h = c->arc.radius,
+                 stop  = c->arc.angle1,
+                 start = c->arc.angle2;
+                 //direction = c->arc.direction;
+
+           start = start * 0.99;
+
+           while (start < 0) start += CTX_PI * 2;
+           while (stop < 0) stop += CTX_PI * 2;
+
+           start = ctx_fmodf (start, CTX_PI * 2);
+           stop  = ctx_fmodf (stop, CTX_PI * 2);
+           // Adjust angles to counter linear scaling.
+           if (start <= CTX_PI/2) {
+             start = ctx_atanf(w / h * ctx_tanf(start));
+           } else if (start > CTX_PI/2 && start <= 3 * CTX_PI/2) {
+             start = ctx_atanf(w / h * ctx_tanf(start)) + CTX_PI;
+           } else {
+             start = ctx_atanf(w / h * ctx_tanf(start)) + CTX_PI*2;
+           }
+           if (stop <= CTX_PI/2) {
+             stop = ctx_atanf(w / h * ctx_tanf(stop));
+           } else if (stop > CTX_PI/2 && stop <= 3 * CTX_PI/2) {
+             stop = ctx_atanf (w / h * ctx_tanf(stop)) + CTX_PI;
+           } else {
+             stop = ctx_atanf (w / h * ctx_tanf(stop)) + CTX_PI*2;
+           }
+           // Exceed the interval if necessary in order to preserve the size and
+           // orientation of the arc.
+           if (start > stop) {
+             stop += CTX_PI * 2;
+           }
+             // Create curves
+             float epsilon = 0.00001f; // Smallest visible angle on displays up to 4K.
+             float arcToDraw = 0;
+             float curves[4][8]={{0.0f,}};
+             int n_curves = 0;
+             while(stop - start > epsilon) {
+               arcToDraw = ctx_minf(stop - start, CTX_PI/2);
+               {
+                 //float cx0, cy0, cx1, cy1, cx2, cy2, x, y;
+                 acuteArcToBezier(start, arcToDraw, 
+                                 &curves[n_curves][0], &curves[n_curves][1],
+                                 &curves[n_curves][2], &curves[n_curves][3],
+                                 &curves[n_curves][4], &curves[n_curves][5],
+                                 &curves[n_curves][6], &curves[n_curves][7]);
+                 n_curves++;
+               }
+             start += arcToDraw;
+           }
+
+             float rx = w / 2.0f;
+             float ry = h / 2.0f;
+             ctx_pdf_print2f(x + rx * curves[0][0], y + ry * curves[0][1]);
+             ctx_pdf_print("m\n");
+             for (int i = 0; i < n_curves; i++)
+             {
+               ctx_pdf_curve_to (ctx, x + rx * curves[i][2], y + ry * curves[i][3],
+                                  x + rx * curves[i][4], y + ry * curves[i][5],
+                                  x + rx * curves[i][6], y + ry * curves[i][7]);
+             }
+        }
+#if 0
+        fprintf (stderr, "F %2.1f %2.1f %2.1f %2.1f %2.1f %2.1f\n",
+                        ctx_arg_float(0),
+                        ctx_arg_float(1),
+                        ctx_arg_float(2),
+                        ctx_arg_float(3),
+                        ctx_arg_float(4),
+                        ctx_arg_float(5),
+                        ctx_arg_float(6));
+        if (ctx_arg_float (5) == 1)
+          pdf_arc (cr, ctx_arg_float (0), ctx_arg_float (1),
+                     ctx_arg_float (2), ctx_arg_float (3),
+                     ctx_arg_float (4) );
+        else
+          pdf_arc_negative (cr, ctx_arg_float (0), ctx_arg_float (1),
+                              ctx_arg_float (2), ctx_arg_float (3),
+                              ctx_arg_float (4) );
+#endif
+        break;
+
+      case CTX_COLOR:
+        int space =  ((int) ctx_arg_float (0)) & 511;
+        switch (space) // XXX remove 511 after stroke source is complete
+        {
+           case CTX_RGBA:
+           case CTX_DRGBA:
+             ctx_pdf_set_opacity (pdf, c->rgba.a);
+             /*FALLTHROUGH*/
+           case CTX_RGB:
+              if (space == CTX_RGB || space == CTX_DRGB)
+                ctx_pdf_set_opacity (pdf, 1.0);
+             ctx_pdf_print3f(c->rgba.r, c->rgba.g, c->rgba.b);
+             ctx_pdf_print("rg ");
+             ctx_pdf_print3f(c->rgba.r, c->rgba.g, c->rgba.b);
+             ctx_pdf_print("RG\n");
+             break;
+           case CTX_CMYKA:
+           case CTX_DCMYKA:
+             ctx_pdf_set_opacity (pdf, c->cmyka.a);
+               /*FALLTHROUGH*/
+           case CTX_CMYK:
+           case CTX_DCMYK:
+              if (space == CTX_CMYK || space == CTX_DCMYK)
+                ctx_pdf_set_opacity (pdf, 1.0);
+              ctx_pdf_print4f(c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k);
+              ctx_pdf_print("k ");
+              ctx_pdf_print4f(c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k);
+              ctx_pdf_print("K ");
+              break;
+           case CTX_GRAYA:
+             ctx_pdf_set_opacity (pdf, c->graya.a);
+               /*FALLTHROUGH*/
+           case CTX_GRAY:
+              if (space == CTX_GRAY)
+                ctx_pdf_set_opacity (pdf, 1.0);
+              ctx_pdf_print1f(c->graya.g);
+              ctx_pdf_print("g ");
+              ctx_pdf_print1f(c->graya.g);
+              ctx_pdf_print("G\n");
+              break;
+            }
+        break;
+
+      case CTX_SET_RGBA_U8:
+        ctx_pdf_printf("/G%i gs\n", ctx_arg_u8(3)*10/255);
+        ctx_pdf_printf("%f %f %f RG\n",
+                               ctx_u8_to_float (ctx_arg_u8 (0) ),
+                               ctx_u8_to_float (ctx_arg_u8 (1) ),
+                               ctx_u8_to_float (ctx_arg_u8 (2) ));
+        ctx_pdf_printf("%f %f %f rg\n",
+                               ctx_u8_to_float (ctx_arg_u8 (0) ),
+                               ctx_u8_to_float (ctx_arg_u8 (1) ),
+                               ctx_u8_to_float (ctx_arg_u8 (2) ));
+        break;
+
+      case CTX_RECTANGLE:
+      case CTX_ROUND_RECTANGLE:
+        ctx_pdf_print4f(c->rectangle.x, c->rectangle.y,
+                        c->rectangle.width, c->rectangle.height);
+        ctx_pdf_print("re\n");
+        break;
+
+      case CTX_SET_PIXEL:
+#if 0
+        pdf_set_source_rgba (cr, ctx_u8_to_float (ctx_arg_u8 (0) ),
+                               ctx_u8_to_float (ctx_arg_u8 (1) ),
+                               ctx_u8_to_float (ctx_arg_u8 (2) ),
+                               ctx_u8_to_float (ctx_arg_u8 (3) ) );
+        pdf_rectangle (cr, ctx_arg_u16 (2), ctx_arg_u16 (3), 1, 1);
+        pdf_fill (cr);
+#endif
+        break;
+
+      case CTX_FILL:
+        if (pdf->preserve)
+        {
+          preserved = ctx_current_path (ctx);
+          pdf->preserve = 0;
+        }
+        ctx_pdf_print ("f\n");
+        break;
+
+      case CTX_TRANSLATE:
+         ctx_pdf_apply_transform (ctx, 1.f, 0.f, 0.f, 1.f, c->f.a0, c->f.a1); 
+         break;
+      case CTX_SCALE:     
+         ctx_pdf_apply_transform (ctx, c->f.a0, 0.f, 0.f, c->f.a1, 0.f, 0.f); 
+         break;
+      case CTX_ROTATE:
+         ctx_pdf_apply_transform (ctx,
+             ctx_cosf (-c->f.a0), ctx_sinf (-c->f.a0),
+             -ctx_sinf (-c->f.a0), ctx_cosf (-c->f.a0),
+             0.f, 0.f);
+         break;
+
+      case CTX_APPLY_TRANSFORM:
+        ctx_pdf_apply_transform (ctx, c->f.a0, c->f.a1,
+                                      c->f.a3, c->f.a4,
+                                      c->f.a4, c->f.a7);
+        break;
+
+      case CTX_STROKE:
+        if (pdf->preserve)
+        {
+          preserved = ctx_current_path (ctx);
+          ctx_pdf_print("S\n");
+          pdf->preserve = 0;
+        }
+        else
+        {
+          ctx_pdf_print("S\n");
+        }
+        break;
+
+      case CTX_CLIP:
+        if (pdf->preserve)
+        {
+          preserved = ctx_current_path (ctx);
+          ctx_pdf_print("W\n");
+          pdf->preserve = 0;
+        }
+        else
+        {
+          ctx_pdf_print("W\n");
+        }
+        break;
+      case CTX_BEGIN_PATH:  ctx_pdf_print("n\n"); break;
+      case CTX_CLOSE_PATH:  ctx_pdf_print("h\n"); break;
+      case CTX_SAVE:        ctx_pdf_print("q\n"); break;
+      case CTX_RESTORE:     ctx_pdf_print("Q\n"); break;
+      case CTX_FONT_SIZE:   ctx_pdf_printf("/F%i %f Tf\n", pdf->font, state->gstate.font_size); break;
+      case CTX_MITER_LIMIT: ctx_pdf_printf("%f M\n", ctx_arg_float (0)); break;
+      case CTX_LINE_CAP:    ctx_pdf_printf("%i J\n", ctx_arg_u8 (0)); break;
+      case CTX_LINE_JOIN:   ctx_pdf_printf("%i j\n", ctx_arg_u8 (0)); break;
+
+      case CTX_FONT:
+        {
+          const char *str = ctx_arg_string ();
+          if (!strcmp (str, "Helvetica"))             pdf->font = CTX_PDF_HELVETICA;
+          if (!strcmp (str, "Helvetica Bold"))        pdf->font = CTX_PDF_HELVETICA_BOLD;
+          if (!strcmp (str, "Helvetica Italic"))      pdf->font = CTX_PDF_HELVETICA_ITALIC;
+          if (!strcmp (str, "Helvetica BoldItalic"))  pdf->font = CTX_PDF_HELVETICA_BOLD_ITALIC;
+          if (!strcmp (str, "Helvetica Bold Italic")) pdf->font = CTX_PDF_HELVETICA_BOLD_ITALIC;
+          if (!strcmp (str, "Symbol"))                pdf->font = CTX_PDF_SYMBOL;
+          if (!strcmp (str, "Zapf Dingbats"))         pdf->font = CTX_PDF_ZAPF_DING_BATS;
+          if (!strcmp (str, "ZapfDingbats"))          pdf->font = CTX_PDF_ZAPF_DING_BATS;
+          if (!strcmp (str, "Times"))                 pdf->font = CTX_PDF_TIMES;
+          if (!strcmp (str, "Times Italic"))          pdf->font = CTX_PDF_TIMES_ITALIC;
+          if (!strcmp (str, "Times Bold"))            pdf->font = CTX_PDF_TIMES_BOLD;
+          if (!strcmp (str, "Times Bold Italic"))     pdf->font = CTX_PDF_TIMES_BOLD_ITALIC;
+          if (!strcmp (str, "Times BoldItalic"))      pdf->font = CTX_PDF_TIMES_BOLD_ITALIC;
+          if (!strcmp (str, "Courier"))               pdf->font = CTX_PDF_COURIER;
+          if (!strcmp (str, "Courier Bold"))          pdf->font = CTX_PDF_COURIER_BOLD;
+          if (!strcmp (str, "Courier Italic"))        pdf->font = CTX_PDF_COURIER_ITALIC;
+          if (!strcmp (str, "Courier Bold Italic"))   pdf->font = CTX_PDF_COURIER_BOLD_ITALIC;
+          if (!strcmp (str, "Courier BoldItalic"))    pdf->font = CTX_PDF_COURIER_BOLD_ITALIC;
+        }
+        ctx_pdf_printf("/F%i %f Tf\n", pdf->font, state->gstate.font_size);
+        break;
+
+
+#if 0
+      case CTX_BLEND_MODE:
+        {
+        }
+        break;
+      case CTX_COMPOSITING_MODE:
+        {
+          int pdf_val = CAIRO_OPERATOR_OVER;
+          switch (ctx_arg_u8 (0) )
+            {
+              case CTX_COMPOSITE_SOURCE_OVER:
+                pdf_val = CAIRO_OPERATOR_OVER;
+                break;
+              case CTX_COMPOSITE_COPY:
+                pdf_val = CAIRO_OPERATOR_SOURCE;
+                break;
+            }
+          pdf_set_operator (cr, pdf_val);
+        }
+        break;
+#endif
+      case CTX_LINEAR_GRADIENT: { ctx_pdf_print("1 0 0 rg\n"); } break;
+      case CTX_RADIAL_GRADIENT: { ctx_pdf_print("0 2 0 rg\n"); } break;
+      case CTX_TEXTURE:
+      case CTX_DEFINE_TEXTURE: { ctx_pdf_print("0 0 1 rg\n"); } break;
+      case CTX_GRADIENT_STOP:
+        // we set the color so we might get a flavour of the gradient
+         ctx_pdf_printf("%f %f %f rg\n", ctx_arg_u8(4)/255.0f,
+                                         ctx_arg_u8(4+1)/255.0f,
+                                         ctx_arg_u8(4+2)/255.0f);
+        break;
+      case CTX_TEXT:
+        ctx_pdf_print("1 0 0 -1 ");
+        ctx_pdf_print2f(state->x, state->y);
+        ctx_pdf_print("Tm ");
+        if (0)
+        {
+          char *encoded = ctx_utf8_to_mac_roman ((uint8_t*)ctx_arg_string ());
+          ctx_pdf_printf ("(%s) Tj\n", encoded);
+          ctx_free (encoded);
+        }
+        else
+        {
+          char *encoded = ctx_utf8_to_windows_1252 ((uint8_t*)ctx_arg_string ());
+          ctx_pdf_printf ("(%s) Tj\n", encoded);
+          ctx_free (encoded);
+        }
+        break;
+      case CTX_CONT:
+      case CTX_EDGE:
+      case CTX_DATA:
+      case CTX_DATA_REV:
+      case CTX_END_FRAME:
+        break;
+      case CTX_VIEW_BOX:
+        pdf->page_size[0] = ctx_arg_float(0);
+        pdf->page_size[1] = ctx_arg_float(1);
+        pdf->page_size[2] = ctx_arg_float(2);
+        pdf->page_size[3] = ctx_arg_float(3);
+        ctx_set_size (ctx, 
+          ctx_arg_float(2),
+          ctx_arg_float(3));
+        break;
+    }
+  ctx_interpret_pos_bare (&pdf->state, entry, pdf);
+#if CTX_CURRENT_PATH
+  ctx_update_current_path (ctx, entry);
+#endif
+
+  if (preserved)
+  {
+    CtxIterator iterator;
+    CtxCommand *command;
+    
+    ctx_iterator_init (&iterator, preserved, 0, CTX_ITERATOR_EXPAND_BITPACK);
+    while ( (command = ctx_iterator_next (&iterator) ) )
+      { ctx_pdf_process (ctx, command); }
+    ctx_free (preserved);
+  }
+}
+
+void ctx_pdf_destroy (CtxPDF *pdf)
+{
+  FILE *f = fopen (pdf->path, "w");
+  char buf[12];
+
+  pdf_end_page (pdf);
+
+  int outlines=pdf_add_object (pdf);
+  ctx_pdf_print("<</Type/Outlines/Count 0>>");
+  int catalog=pdf_add_object (pdf);
+  ctx_pdf_printf("<</Type/Catalog/Outlines %i 0 R/Pages %i 0 R>>", outlines, pdf->pages);
+
+
+  // patch-back the value in pages earlier
+  snprintf (buf, 11, "% 10d", pdf->page_count);
+  memcpy   (&pdf->document->str[pdf->page_count_offset], buf, 10);
+
+  // patch-back the value in pages earlier
+  int kids = pdf_add_object (pdf); 
+  snprintf (buf, 11, "% 10d", kids);
+  memcpy   (&pdf->document->str[pdf->kids_offset], buf, 10);
+
+  ctx_pdf_print ("[");
+  for (int page_no =1; page_no <= pdf->page_count; page_no++)
+    ctx_pdf_printf ("%i 0 R ", pdf->page_objs[page_no]);
+  ctx_pdf_print ("]");
+  pdf_end_object(pdf);
+
+  int start_xref = pdf->document->length;
+  ctx_pdf_printf ("xref\n0 %i\n", pdf->objs + 1);
+  ctx_pdf_print ("0000000000 65535 f\n");
+        for(int i = 1; i <= pdf->objs; i++)
+        {
+          ctx_pdf_printf ("%010d 65535 n\n", pdf->xref[i]);
+        }
+  ctx_pdf_printf ("trailer\n\n"
+"<</Root %i 0 R\n/Size %i>>\n"
+"startxref\n"
+"%d\n"
+"%%%%EOF\n", catalog, pdf->objs+1,
+       start_xref);
+
+  fwrite (pdf->document->str, pdf->document->length, 1, f);
+  ctx_string_free (pdf->document, 1);
+  ctx_free (pdf);
+}
+
+Ctx *
+ctx_new_pdf (const char *path, float width, float height)
+{
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+  CtxPDF *pdf = ctx_calloc(sizeof(CtxPDF),1);
+  CtxBackend *backend  = (CtxBackend*)pdf;
+  if (width <= 0) width = 595;
+  if (width <= 0) height = 842;
+
+  pdf->width = width;
+  pdf->height = height;
+
+  backend->destroy = (void*)ctx_pdf_destroy;
+  backend->process = ctx_pdf_process;
+  backend->ctx     = ctx;
+  pdf->document    = ctx_string_new("");
+
+  pdf->path = ctx_strdup (path);
+  ctx_state_init (&pdf->state);
+  ctx_set_backend (ctx, (void*)pdf);
+  ctx_pdf_print ("%PDF-1.4\n%ÆØÅ\n");
+  //ctx_pdf_printf ("%%PDF-1.4\n%%%c%c%c%c\n", 0xe2, 0xe3, 0xcf, 0xd3);
+  pdf->pages=pdf_add_object (pdf); // 1
+  pdf->font = CTX_PDF_HELVETICA;
+  //pdf->encoding = "/MacRomanEncoding";
+  pdf->encoding = "/WinAnsiEncoding";
+
+  ctx_pdf_print ("<</Kids ");
+  pdf->kids_offset = pdf->document->length;
+  ctx_pdf_print ("XXXXXXXXXX 0 R/Type/Pages/Count ");
+  pdf->page_count_offset = pdf->document->length;
+  ctx_pdf_print ("XXXXXXXXXX");
+  ctx_pdf_print (">>");
+
+  { // shared fontmap for all pages
+    // good enough without TTF fonts
+    int font[16];
+
+    char *font_names[]={"","Times","Helvetica","Courier","Symbol",
+"Times-Bold", "Helvetica-Bold", "Courier-Bold",
+"ZapfDingbats", "Times-Italic", "Helvetica-Oblique",
+"Courier-Oblique", "Times-BoldItalic", "Helvetica-BoldItalic", "Courier-BoldItalic"
+    };
+
+    for (int font_no = 1; font_no <= 14; font_no++)
+    {
+      font[font_no]= pdf_add_object (pdf);
+      ctx_pdf_printf ("<</Name/F%i/Subtype/Type1/Type/Font/BaseFont /%s /Encoding %s>>",
+                      font_no, font_names[font_no], pdf->encoding);
+    }
+
+    pdf->font_map=pdf_add_object(pdf);
+    ctx_pdf_print ("<<");
+    for (int font_no = 1; font_no <= 14; font_no++)
+      ctx_pdf_printf ("/F%i %i 0 R", font_no, font[font_no]);
+    ctx_pdf_print (">>");
+  }
+
+  pdf->page_size[0] = 0;
+  pdf->page_size[1] = 0;
+  pdf->page_size[2] = pdf->width;
+  pdf->page_size[3] = pdf->height;
+
+  pdf_start_page (pdf);
+
+  return ctx;
+}
+
+void
+ctx_render_pdf (Ctx *ctx, const char *path)
+{
+  Ctx *pdf = ctx_new_pdf (path, 0, 0);
+  CtxIterator iterator;
+  CtxCommand *command;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0, CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    { ctx_pdf_process (pdf, command); }
+  ctx_destroy (pdf);
+}
+
+
+
+
+static char *ctx_utf8_to_mac_roman (const uint8_t *string)
+{
+  CtxString *ret = ctx_string_new ("");
+  if (*string)
+  for (const uint8_t *utf8 = (uint8_t*)string; utf8[0]; utf8 = *utf8?(uint8_t*)ctx_utf8_skip ((char*)utf8, 1):(utf8+1))
+  {
+    uint8_t copy[5];
+
+    memcpy (copy, utf8, ctx_utf8_len (utf8[0]));
+    copy[ctx_utf8_len (utf8[0])]=0;
+    if (copy[0] <=127)
+    {
+      ctx_string_append_byte (ret, copy[0]);
+    }
+    else
+    {
+      int code = 128;
+      /* it would be better to to this comparison on a unicode table,
+       * but this was easier to create
+       */
+#define C(a) \
+      if (!strcmp ((char*)&copy[0], a)) { ctx_string_append_byte (ret, code); continue; }; code++
+      C("Ä");C("Å");C("Ç");C("É");C("Ñ");C("Ö");C("Ü");C("á");C("à");C("â");C("ä");C("ã");C("å");C("ç");C("é");C("è");
+      C("ê");C("ë");C("í");C("ì");C("î");C("ï");C("ñ");C("ó");C("ò");C("ô");C("ö");C("õ");C("ú");C("ù");C("û");C("ü");
+      C("†");C("°");C("¢");C("£");C("§");C("•");C("¶");C("ß");C("®");C("©");C("™");C("´");C("¨");C("≠");C("Æ");C("Ø");
+      C("∞");C("±");C("≤");C("≥");C("¥");C("µ");C("∂");C("∑");C("∏");C("π");C("∫");C("ª");C("º");C("Ω");C("æ");C("ø");
+      C("¿");C("¡");C("¬");C("√");C("ƒ");C("≈");C("∆");C("«");C("»");C("…");C(" ");C("À");C("Ã");C("Õ");C("Œ");C("œ");
+      C("–");C("—");C("“");C("”");C("‘");C("’");C("÷");C("◊");C("ÿ");C("Ÿ");C("⁄");C("€");C("‹");C("›");C("fi");C("fl");
+      C("‡");C("·");C("‚");C("„");C("‰");C("Â");C("Ê");C("Á");C("Ë");C("È");C("Í");C("Î");C("Ï");C("Ì");C("Ó");C("Ô");
+      C("?");C("Ò");C("Ú");C("Û");C("Ù");C("ı");C("ˆ");C("˜");C("¯");C("˘");C("˙");C("˚");C("¸");C("˝");C("˛");C("ˇ");
+      ctx_string_append_byte (ret, '?');
+    }
+  }
+
+  return ctx_string_dissolve (ret);
+}
+
+static char *ctx_utf8_to_windows_1252 (const uint8_t *string)
+{
+  CtxString *ret = ctx_string_new ("");
+  if (*string)
+  for (const uint8_t *utf8 = (uint8_t*)string; utf8[0]; utf8 = *utf8?(uint8_t*)ctx_utf8_skip ((char*)utf8, 1):(utf8+1))
+  {
+    uint8_t copy[5];
+
+    memcpy (copy, utf8, ctx_utf8_len (utf8[0]));
+    copy[ctx_utf8_len (utf8[0])]=0;
+    if (copy[0] == '(' || copy[0] == ')')
+    {
+      ctx_string_append_byte (ret, '\\');
+      ctx_string_append_byte (ret, copy[0]);
+    }
+    else if (copy[0] <=127)
+    {
+      ctx_string_append_byte (ret, copy[0]);
+    }
+    else
+    {
+      int code = 128;
+      /* it would be better to to this comparison on a unicode table,
+       * but this was easier to create
+       */
+C("€");C(" ");C("‚");C("ƒ");C("„");C("…");C("†");C("‡");C("ˆ");C("‰");C("Š");C("‹");C("Œ");C(" ");C("Ž");C(" ");
+C(" ");C("‘");C("’");C("“");C("”");C("•");C("–");C("—");C("˜");C("™");C("š");C("›");C("œ");C(" ");C("ž");C("Ÿ");
+C(" ");C("¡");C("¢");C("£");C("¤");C("¥");C("¦");C("§");C("¨");C("©");C("ª");C("«");C("¬");C("-");C("®");C("¯");
+C("°");C("±");C("²");C("³");C("´");C("µ");C("¶");C("·");C("¸");C("¹");C("º");C("»");C("¼");C("½");C("¾");C("¿");
+C("À");C("Á");C("Â");C("Ã");C("Ä");C("Å");C("Æ");C("Ç");C("È");C("É");C("Ê");C("Ë");C("Ì");C("Í");C("Î");C("Ï");
+C("Ð");C("Ñ");C("Ò");C("Ó");C("Ô");C("Õ");C("Ö");C("×");C("Ø");C("Ù");C("Ú");C("Û");C("Ü");C("Ý");C("Þ");C("ß");
+C("à");C("á");C("â");C("ã");C("ä");C("å");C("æ");C("ç");C("è");C("é");C("ê");C("ë");C("ì");C("í");C("î");C("ï");
+C("ð");C("ñ");C("ò");C("ó");C("ô");C("õ");C("ö");C("÷");C("ø");C("ù");C("ú");C("û");C("ü");C("ý");C("þ");C("ÿ");
+#undef C
+      ctx_string_append_byte (ret, '?');
+    }
+  }
+  return ctx_string_dissolve (ret);
+}
+
+
+
+#endif
+
+#if CTX_CAIRO
+
+typedef struct _CtxCairo CtxCairo;
+struct
+  _CtxCairo
+{
+  CtxBackend        backend;
+  cairo_t          *cr;
+  cairo_pattern_t  *pat;
+  cairo_surface_t  *image;
+  int               preserve;
+
+  // maintain separate fill and stroke state - even though the more limited use of ctx
+  // then suffers?
+  //
+};
+
+static void
+ctx_cairo_process (Ctx *ctx, CtxCommand *c)
+{
+  CtxCairo *ctx_cairo = (void*)ctx->backend;
+  CtxEntry *entry = (CtxEntry *) &c->entry;
+
+#if CTX_CURRENT_PATH
+  ctx_update_current_path (ctx, entry);
+#endif
+
+  cairo_t *cr = ctx_cairo->cr;
+  switch (entry->code)
+    {
+      case CTX_LINE_TO:
+        cairo_line_to (cr, c->line_to.x, c->line_to.y);
+        break;
+      case CTX_REL_LINE_TO:
+        cairo_rel_line_to (cr, c->rel_line_to.x, c->rel_line_to.y);
+        break;
+      case CTX_MOVE_TO:
+        cairo_move_to (cr, c->move_to.x, c->move_to.y);
+        break;
+      case CTX_REL_MOVE_TO:
+        cairo_rel_move_to (cr, ctx_arg_float (0), ctx_arg_float (1) );
+        break;
+      case CTX_CURVE_TO:
+        cairo_curve_to (cr, ctx_arg_float (0), ctx_arg_float (1),
+                        ctx_arg_float (2), ctx_arg_float (3),
+                        ctx_arg_float (4), ctx_arg_float (5) );
+        break;
+      case CTX_REL_CURVE_TO:
+        cairo_rel_curve_to (cr,ctx_arg_float (0), ctx_arg_float (1),
+                            ctx_arg_float (2), ctx_arg_float (3),
+                            ctx_arg_float (4), ctx_arg_float (5) );
+        break;
+      case CTX_PRESERVE:
+        ctx_cairo->preserve = 1;
+        break;
+      case CTX_QUAD_TO:
+        {
+          double x0, y0;
+          cairo_get_current_point (cr, &x0, &y0);
+          float cx = ctx_arg_float (0);
+          float cy = ctx_arg_float (1);
+          float  x = ctx_arg_float (2);
+          float  y = ctx_arg_float (3);
+          cairo_curve_to (cr,
+                          (cx * 2 + x0) / 3.0f, (cy * 2 + y0) / 3.0f,
+                          (cx * 2 + x) / 3.0f,           (cy * 2 + y) / 3.0f,
+                          x,                              y);
+        }
+        break;
+      case CTX_REL_QUAD_TO:
+        {
+          double x0, y0;
+          cairo_get_current_point (cr, &x0, &y0);
+          float cx = ctx_arg_float (0) + x0;
+          float cy = ctx_arg_float (1) + y0;
+          float  x = ctx_arg_float (2) + x0;
+          float  y = ctx_arg_float (3) + y0;
+          cairo_curve_to (cr,
+                          (cx * 2 + x0) / 3.0f, (cy * 2 + y0) / 3.0f,
+                          (cx * 2 + x) / 3.0f,           (cy * 2 + y) / 3.0f,
+                          x,                              y);
+        }
+        break;
+      /* rotate/scale/translate does not occur in fully minified data stream */
+      case CTX_ROTATE:
+        cairo_rotate (cr, ctx_arg_float (0) );
+        break;
+      case CTX_SCALE:
+        cairo_scale (cr, ctx_arg_float (0), ctx_arg_float (1) );
+        break;
+      case CTX_TRANSLATE:
+        cairo_translate (cr, ctx_arg_float (0), ctx_arg_float (1) );
+        break;
+      case CTX_LINE_WIDTH:
+        cairo_set_line_width (cr, ctx_arg_float (0) );
+        break;
+      case CTX_ARC:
+#if 0
+        fprintf (stderr, "F %2.1f %2.1f %2.1f %2.1f %2.1f %2.1f\n",
+                        ctx_arg_float(0),
+                        ctx_arg_float(1),
+                        ctx_arg_float(2),
+                        ctx_arg_float(3),
+                        ctx_arg_float(4),
+                        ctx_arg_float(5),
+                        ctx_arg_float(6));
+#endif
+        if (ctx_arg_float (5) == 1)
+          cairo_arc (cr, ctx_arg_float (0), ctx_arg_float (1),
+                     ctx_arg_float (2), ctx_arg_float (3),
+                     ctx_arg_float (4) );
+        else
+          cairo_arc_negative (cr, ctx_arg_float (0), ctx_arg_float (1),
+                              ctx_arg_float (2), ctx_arg_float (3),
+                              ctx_arg_float (4) );
+        break;
+      case CTX_SET_RGBA_U8:
+        cairo_set_source_rgba (cr, ctx_u8_to_float (ctx_arg_u8 (0) ),
+                               ctx_u8_to_float (ctx_arg_u8 (1) ),
+                               ctx_u8_to_float (ctx_arg_u8 (2) ),
+                               ctx_u8_to_float (ctx_arg_u8 (3) ) );
+        break;
+
+      case CTX_COLOR:
+        int space =  ((int) ctx_arg_float (0)) & 511;
+        switch (space) // XXX remove 511 after stroke source is complete
+        {
+           case CTX_RGBA:
+           case CTX_DRGBA:
+             cairo_set_source_rgba (cr, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+             break;
+           case CTX_RGB:
+             cairo_set_source_rgba (cr, c->rgba.r, c->rgba.g, c->rgba.b, 1.0f);
+             break;
+           case CTX_CMYKA:
+           case CTX_DCMYKA:
+           case CTX_CMYK:
+           case CTX_DCMYK:
+              break;
+           case CTX_GRAYA:
+             cairo_set_source_rgba (cr, c->graya.g, c->graya.g, c->graya.g, c->graya.a);
+             break;
+               /*FALLTHROUGH*/
+           case CTX_GRAY:
+             cairo_set_source_rgba (cr, c->graya.g, c->graya.g, c->graya.g, 1.0f);
+             break;
+            }
+        break;
+
+#if 0
+      case CTX_SET_RGBA_STROKE: // XXX : we need to maintain
+        //       state for the two kinds
+        cairo_set_source_rgba (cr, ctx_arg_u8 (0) /255.0,
+                               ctx_arg_u8 (1) /255.0,
+                               ctx_arg_u8 (2) /255.0,
+                               ctx_arg_u8 (3) /255.0);
+        break;
+#endif
+      case CTX_RECTANGLE:
+      case CTX_ROUND_RECTANGLE: // XXX - arcs
+        cairo_rectangle (cr, c->rectangle.x, c->rectangle.y,
+                         c->rectangle.width, c->rectangle.height);
+        break;
+      case CTX_SET_PIXEL:
+        cairo_set_source_rgba (cr, ctx_u8_to_float (ctx_arg_u8 (0) ),
+                               ctx_u8_to_float (ctx_arg_u8 (1) ),
+                               ctx_u8_to_float (ctx_arg_u8 (2) ),
+                               ctx_u8_to_float (ctx_arg_u8 (3) ) );
+        cairo_rectangle (cr, ctx_arg_u16 (2), ctx_arg_u16 (3), 1, 1);
+        cairo_fill (cr);
+        break;
+      case CTX_FILL:
+        if (ctx_cairo->preserve)
+        {
+          cairo_fill_preserve (cr);
+          ctx_cairo->preserve = 0;
+        }
+        else
+        {
+          cairo_fill (cr);
+        }
+        break;
+      case CTX_STROKE:
+        if (ctx_cairo->preserve)
+        {
+          cairo_stroke_preserve (cr);
+          ctx_cairo->preserve = 0;
+        }
+        else
+        {
+          cairo_stroke (cr);
+        }
+        break;
+      case CTX_IDENTITY:
+        cairo_identity_matrix (cr);
+        break;
+      case CTX_CLIP:
+        if (ctx_cairo->preserve)
+        {
+          cairo_clip_preserve (cr);
+          ctx_cairo->preserve = 0;
+        }
+        else
+        {
+          cairo_clip (cr);
+        }
+        break;
+      case CTX_BEGIN_PATH:
+        cairo_new_path (cr);
+        break;
+      case CTX_CLOSE_PATH:
+        cairo_close_path (cr);
+        break;
+      case CTX_SAVE:
+        cairo_save (cr);
+        break;
+      case CTX_RESTORE:
+        cairo_restore (cr);
+        break;
+      case CTX_FONT_SIZE:
+        cairo_set_font_size (cr, ctx_arg_float (0) );
+        break;
+      case CTX_MITER_LIMIT:
+        cairo_set_miter_limit (cr, ctx_arg_float (0) );
+        break;
+      case CTX_LINE_CAP:
+        {
+          int cairo_val = CAIRO_LINE_CAP_SQUARE;
+          switch (ctx_arg_u8 (0) )
+            {
+              case CTX_CAP_ROUND:
+                cairo_val = CAIRO_LINE_CAP_ROUND;
+                break;
+              case CTX_CAP_SQUARE:
+                cairo_val = CAIRO_LINE_CAP_SQUARE;
+                break;
+              case CTX_CAP_NONE:
+                cairo_val = CAIRO_LINE_CAP_BUTT;
+                break;
+            }
+          cairo_set_line_cap (cr, cairo_val);
+        }
+        break;
+      case CTX_BLEND_MODE:
+        {
+          // does not map to cairo
+        }
+        break;
+      case CTX_COMPOSITING_MODE:
+        {
+          int cairo_val = CAIRO_OPERATOR_OVER;
+          switch (ctx_arg_u8 (0) )
+            {
+              case CTX_COMPOSITE_SOURCE_OVER:
+                cairo_val = CAIRO_OPERATOR_OVER;
+                break;
+              case CTX_COMPOSITE_COPY:
+                cairo_val = CAIRO_OPERATOR_SOURCE;
+                break;
+            }
+          cairo_set_operator (cr, cairo_val);
+        }
+        break;
+      case CTX_LINE_JOIN:
+        {
+          int cairo_val = CAIRO_LINE_JOIN_ROUND;
+          switch (ctx_arg_u8 (0) )
+            {
+              case CTX_JOIN_ROUND:
+                cairo_val = CAIRO_LINE_JOIN_ROUND;
+                break;
+              case CTX_JOIN_BEVEL:
+                cairo_val = CAIRO_LINE_JOIN_BEVEL;
+                break;
+              case CTX_JOIN_MITER:
+                cairo_val = CAIRO_LINE_JOIN_MITER;
+                break;
+            }
+          cairo_set_line_join (cr, cairo_val);
+        }
+        break;
+      case CTX_LINEAR_GRADIENT:
+        {
+          if (ctx_cairo->pat)
+            {
+              cairo_pattern_destroy (ctx_cairo->pat);
+              ctx_cairo->pat = NULL;
+            }
+          ctx_cairo->pat = cairo_pattern_create_linear (ctx_arg_float (0), ctx_arg_float (1),
+                           ctx_arg_float (2), ctx_arg_float (3) );
+          cairo_pattern_add_color_stop_rgba (ctx_cairo->pat, 0, 0, 0, 0, 1);
+          cairo_pattern_add_color_stop_rgba (ctx_cairo->pat, 1, 1, 1, 1, 1);
+          cairo_set_source (cr, ctx_cairo->pat);
+        }
+        break;
+      case CTX_RADIAL_GRADIENT:
+        {
+          if (ctx_cairo->pat)
+            {
+              cairo_pattern_destroy (ctx_cairo->pat);
+              ctx_cairo->pat = NULL;
+            }
+          ctx_cairo->pat = cairo_pattern_create_radial (ctx_arg_float (0), ctx_arg_float (1),
+                           ctx_arg_float (2), ctx_arg_float (3),
+                           ctx_arg_float (4), ctx_arg_float (5) );
+          cairo_set_source (cr, ctx_cairo->pat);
+        }
+        break;
+      case CTX_GRADIENT_STOP:
+        cairo_pattern_add_color_stop_rgba (ctx_cairo->pat,
+                                           ctx_arg_float (0),
+                                           ctx_u8_to_float (ctx_arg_u8 (4) ),
+                                           ctx_u8_to_float (ctx_arg_u8 (5) ),
+                                           ctx_u8_to_float (ctx_arg_u8 (6) ),
+                                           ctx_u8_to_float (ctx_arg_u8 (7) ) );
+        break;
+        // XXX  implement TEXTURE
+#if 0
+      case CTX_LOAD_IMAGE:
+        {
+          if (image)
+            {
+              cairo_surface_destroy (image);
+              image = NULL;
+            }
+          if (pat)
+            {
+              cairo_pattern_destroy (pat);
+              pat = NULL;
+            }
+          image = cairo_image_surface_create_from_png (ctx_arg_string() );
+          cairo_set_source_surface (cr, image, ctx_arg_float (0), ctx_arg_float (1) );
+        }
+        break;
+#endif
+      case CTX_TEXT:
+        /* XXX: implement some linebreaking/wrap, positioning
+         *      behavior here?
+         */
+        cairo_show_text (cr, ctx_arg_string () );
+        break;
+      case CTX_CONT:
+      case CTX_EDGE:
+      case CTX_DATA:
+      case CTX_DATA_REV:
+      case CTX_END_FRAME:
+        break;
+    }
+  ctx_process (ctx_cairo->backend.ctx, entry);
+}
+
+void ctx_cairo_destroy (CtxCairo *ctx_cairo)
+{
+  if (ctx_cairo->pat)
+    { cairo_pattern_destroy (ctx_cairo->pat); }
+  if (ctx_cairo->image)
+    { cairo_surface_destroy (ctx_cairo->image); }
+  ctx_free (ctx_cairo);
+}
+
+void
+ctx_render_cairo (Ctx *ctx, cairo_t *cr)
+{
+  CtxCairo    ctx_cairo; /* on-stack backend */
+  CtxBackend *backend = (CtxBackend*)&ctx_cairo;
+  CtxIterator iterator;
+  CtxCommand *command;
+  ctx_cairo.cr = cr;
+  backend->process = ctx_cairo_process;
+  backend->ctx = ctx;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    { ctx_cairo_process (ctx, command); }
+}
+
+Ctx *
+ctx_new_for_cairo (cairo_t *cr)
+{
+  Ctx *ctx = _ctx_new_drawlist (640, 480);
+  CtxCairo *ctx_cairo = ctx_calloc(sizeof(CtxCairo),1);
+  CtxBackend *backend  = (CtxBackend*)ctx_cairo;
+  backend->destroy = (void*)ctx_cairo_destroy;
+  backend->process = ctx_cairo_process;
+  backend->ctx = ctx;
+  ctx_cairo->cr = cr;
+  ctx_set_backend (ctx, (void*)ctx_cairo);
+  return ctx;
+}
+
+#endif
+
+#if CTX_TERMINAL_EVENTS
+
+#if 0
+static int ctx_find_largest_matching_substring
+ (const char *X, const char *Y, int m, int n, int *offsetY, int *offsetX) 
+{ 
+  int longest_common_suffix[2][n+1];
+  int best_length = 0;
+  for (int i=0; i<=m; i++)
+  {
+    for (int j=0; j<=n; j++)
+    {
+      if (i == 0 || j == 0 || !(X[i-1] == Y[j-1]))
+      {
+        longest_common_suffix[i%2][j] = 0;
+      }
+      else
+      {
+          longest_common_suffix[i%2][j] = longest_common_suffix[(i-1)%2][j-1] + 1;
+          if (best_length < longest_common_suffix[i%2][j])
+          {
+            best_length = longest_common_suffix[i%2][j];
+            if (offsetY) *offsetY = j - best_length;
+            if (offsetX) *offsetX = i - best_length;
+          }
+      }
+    }
+  }
+  return best_length;
+} 
+#endif
+
+typedef struct CtxSpan {
+  int from_prev;
+  int start;
+  int length;
+} CtxSpan;
+
+#define CHUNK_SIZE 32
+#define MIN_MATCH  7        // minimum match length to be encoded
+#define WINDOW_PADDING 16   // look-aside amount
+
+#if 0
+static void _dassert(int line, int condition, const char *str, int foo, int bar, int baz)
+{
+  if (!condition)
+  {
+    FILE *f = fopen ("/tmp/cdebug", "a");
+    fprintf (f, "%i: %s    %i %i %i\n", line, str, foo, bar, baz);
+    fclose (f);
+  }
+}
+#define dassert(cond, foo, bar, baz) _dassert(__LINE__, cond, #cond, foo, bar ,baz)
+#endif
+#define dassert(cond, foo, bar, baz)
+
+/* XXX repeated substring matching is slow, we'll be
+ * better off with a hash-table with linked lists of
+ * matching 3-4 characters in previous.. or even
+ * a naive approach that expects rough alignment..
+ */
+#if 0
+static char *encode_in_terms_of_previous (
+                const char *src,  int src_len,
+                const char *prev, int prev_len,
+                int *out_len,
+                int max_ticks)
+{
+  CtxString *string = ctx_string_new ("");
+  CtxList *encoded_list = NULL;
+
+  /* TODO : make expected position offset in prev slide based on
+   * matches and not be constant */
+
+  long ticks_start = ctx_ticks ();
+  int start = 0;
+  int length = CHUNK_SIZE;
+  for (start = 0; start < src_len; start += length)
+  {
+    CtxSpan *span = ctx_calloc (sizeof (CtxSpan), 1);
+    span->start = start;
+    if (start + length > src_len)
+      span->length = src_len - start;
+    else
+      span->length = length;
+    span->from_prev = 0;
+    ctx_list_append (&encoded_list, span);
+  }
+
+  for (CtxList *l = encoded_list; l; l = l->next)
+  {
+    CtxSpan *span = l->data;
+    if (!span->from_prev)
+    {
+      if (span->length >= MIN_MATCH)
+      {
+         int prev_pos = 0;
+         int curr_pos = 0;
+         assert(1);
+#if 0
+         int prev_start =  0;
+         int prev_window_length = prev_len;
+#else
+         int window_padding = WINDOW_PADDING;
+         int prev_start = span->start - window_padding;
+         if (prev_start < 0)
+           prev_start = 0;
+
+         dassert(span->start>=0 , 0,0,0);
+
+         int prev_window_length = prev_len - prev_start;
+         if (prev_window_length > span->length + window_padding * 2 + span->start)
+           prev_window_length = span->length + window_padding * 2 + span->start;
+#endif
+         int match_len = 0;
+         if (prev_window_length > 0)
+           match_len = ctx_find_largest_matching_substring(prev + prev_start, src + span->start, prev_window_length, span->length, &curr_pos, &prev_pos);
+#if 1
+         prev_pos += prev_start;
+#endif
+
+         if (match_len >= MIN_MATCH)
+         {
+            int start  = span->start;
+            int length = span->length;
+
+            span->from_prev = 1;
+            span->start     = prev_pos;
+            span->length    = match_len;
+            dassert (span->start >= 0, prev_pos, prev_start, span->start);
+            dassert (span->length > 0, prev_pos, prev_start, span->length);
+
+            if (curr_pos)
+            {
+              CtxSpan *prev = ctx_calloc (sizeof (CtxSpan), 1);
+              prev->start = start;
+              prev->length =  curr_pos;
+            dassert (prev->start >= 0, prev_pos, prev_start, prev->start);
+            dassert (prev->length > 0, prev_pos, prev_start, prev->length);
+              prev->from_prev = 0;
+              ctx_list_insert_before (&encoded_list, l, prev);
+            }
+
+
+            if (match_len + curr_pos < start + length)
+            {
+              CtxSpan *next = ctx_calloc (sizeof (CtxSpan), 1);
+              next->start = start + curr_pos + match_len;
+              next->length = (start + length) - next->start;
+            dassert (next->start >= 0, prev_pos, prev_start, next->start);
+      //    dassert (next->length > 0, prev_pos, prev_start, next->length);
+              next->from_prev = 0;
+              if (next->length)
+              {
+                if (l->next)
+                  ctx_list_insert_before (&encoded_list, l->next, next);
+                else
+                  ctx_list_append (&encoded_list, next);
+              }
+              else
+                ctx_free (next);
+            }
+
+            if (curr_pos) // step one item back for forloop
+            {
+              CtxList *tmp = encoded_list;
+              int found = 0;
+              while (!found && tmp && tmp->next)
+              {
+                if (tmp->next == l)
+                {
+                  l = tmp;
+                  break;
+                }
+                tmp = tmp->next;
+              }
+            }
+         }
+      }
+    }
+
+    if (ctx_ticks ()-ticks_start > (unsigned long)max_ticks)
+      break;
+  }
+
+  /* merge adjecant prev span references  */
+  {
+    for (CtxList *l = encoded_list; l; l = l->next)
+    {
+      CtxSpan *span = l->data;
+again:
+      if (l->next)
+      {
+        CtxSpan *next_span = l->next->data;
+        if (span->from_prev && next_span->from_prev &&
+            span->start + span->length == 
+            next_span->start)
+        {
+           span->length += next_span->length;
+           ctx_list_remove (&encoded_list, next_span);
+           goto again;
+        }
+      }
+    }
+  }
+
+  while (encoded_list)
+  {
+    CtxSpan *span = encoded_list->data;
+    if (span->from_prev)
+    {
+      char ref[128];
+      sprintf (ref, "%c%i %i%c", CTX_CODEC_CHAR, span->start, span->length, CTX_CODEC_CHAR);
+      ctx_string_append_data (string, ref, strlen(ref));
+    }
+    else
+    {
+      for (int i = span->start; i< span->start+span->length; i++)
+      {
+        if (src[i] == CTX_CODEC_CHAR)
+        {
+          char bytes[2]={CTX_CODEC_CHAR, CTX_CODEC_CHAR};
+          ctx_string_append_data (string, bytes, 2);
+        }
+        else
+        {
+          ctx_string_append_data (string, &src[i], 1);
+        }
+      }
+    }
+    ctx_free (span);
+    ctx_list_remove (&encoded_list, span);
+  }
+
+  char *ret = string->str;
+  if (out_len) *out_len = string->length;
+  ctx_string_free (string, 0);
+  return ret;
+}
+#endif
+
+#if 0 // for documentation/reference purposes
+static char *decode_ctx (const char *encoded, int enc_len, const char *prev, int prev_len, int *out_len)
+{
+  CtxString *string = ctx_string_new ("");
+  char reference[32]="";
+  int ref_len = 0;
+  int in_ref = 0;
+  for (int i = 0; i < enc_len; i++)
+  {
+    if (encoded[i] == CTX_CODEC_CHAR)
+    {
+      if (!in_ref)
+      {
+        in_ref = 1;
+      }
+      else
+      {
+        int start = atoi (reference);
+        int len = 0;
+        if (strchr (reference, ' '))
+          len = atoi (strchr (reference, ' ')+1);
+
+        if (start < 0)start = 0;
+        if (start >= prev_len)start = prev_len-1;
+        if (len + start > prev_len)
+          len = prev_len - start;
+
+        if (start == 0 && len == 0)
+          ctx_string_append_byte (string, CTX_CODEC_CHAR);
+        else
+          ctx_string_append_data (string, prev + start, len);
+        ref_len = 0;
+        in_ref = 0;
+      }
+    }
+    else
+    {
+      if (in_ref)
+      {
+        if (ref_len < 16)
+        {
+          reference[ref_len++] = encoded[i];
+          reference[ref_len] = 0;
+        }
+      }
+      else
+      ctx_string_append_data (string, &encoded[i], 1);
+    }
+  }
+  char *ret = string->str;
+  if (out_len) *out_len = string->length;
+  ctx_string_free (string, 0);
+  return ret;
+}
+#endif
+
+#define CTX_START_STRING "U\n"  // or " start_frame "
+#define CTX_END_STRING   "\nX"  // or "\ndone"
+#define CTX_END_STRING2  "\n"
+
+int ctx_frame_ack = -1;
+static char *prev_frame_contents = NULL;
+static int   prev_frame_len = 0;
+
+static int ctx_native_events = 1;
+
+static void ctx_ctx_end_frame (Ctx *ctx)
+{
+  CtxCtx *ctxctx = (CtxCtx*)ctx->backend;
+#if 0
+  FILE *debug = fopen ("/tmp/ctx-debug", "a");
+  fprintf (debug, "------\n");
+#endif
+
+  if (ctx_native_events)
+    fprintf (stdout, "\e[?201h");
+  fprintf (stdout, "\e[H\e[?25l\e[?200h");
+#if 1
+  fprintf (stdout, CTX_START_STRING);
+  ctx_render_stream (ctxctx->backend.ctx, stdout, 0);
+  fprintf (stdout, CTX_END_STRING);
+#else
+  {
+    int cur_frame_len = 0;
+    char *rest = ctx_render_string (ctxctx->ctx, 0, &cur_frame_len);
+    char *cur_frame_contents = ctx_malloc (cur_frame_len + strlen(CTX_START_STRING) + strlen (CTX_END_STRING) + 1);
+
+    cur_frame_contents[0]=0;
+    strcat (cur_frame_contents, CTX_START_STRING);
+    strcat (cur_frame_contents, rest);
+    strcat (cur_frame_contents, CTX_END_STRING);
+    ctx_free (rest);
+    cur_frame_len += strlen (CTX_START_STRING) + strlen (CTX_END_STRING);
+
+    if (prev_frame_contents && 0)  // XXX : 
+    {
+      char *encoded;
+      int encoded_len = 0;
+      //uint64_t ticks_start = ctx_ticks ();
+
+      encoded = encode_in_terms_of_previous (cur_frame_contents, cur_frame_len, prev_frame_contents, prev_frame_len, &encoded_len, 1000 * 10);
+//    encoded = ctx_strdup (cur_frame_contents);
+//    encoded_len = ctx_strlen (encoded);
+      //uint64_t ticks_end = ctx_ticks ();
+
+      fwrite (encoded, encoded_len, 1, stdout);
+//    fwrite (encoded, cur_frame_len, 1, stdout);
+#if 0
+      fprintf (debug, "---prev-frame(%i)\n%s", (int)strlen(prev_frame_contents), prev_frame_contents);
+      fprintf (debug, "---cur-frame(%i)\n%s", (int)strlen(cur_frame_contents), cur_frame_contents);
+      fprintf (debug, "---encoded(%.4f %i)---\n%s--------\n",
+                      (ticks_end-ticks_start)/1000.0,
+                      (int)strlen(encoded), encoded);
+#endif
+      ctx_free (encoded);
+    }
+    else
+    {
+      fwrite (cur_frame_contents, cur_frame_len, 1, stdout);
+    }
+
+    if (prev_frame_contents)
+      ctx_free (prev_frame_contents);
+    prev_frame_contents = cur_frame_contents;
+    prev_frame_len = cur_frame_len;
+  }
+#endif
+  fprintf (stdout, CTX_END_STRING2);
+#if 0
+    fclose (debug);
+#endif
+
+#if CTX_SYNC_FRAMES
+  fprintf (stdout, "\e[5n");
+  fflush (stdout);
+
+  ctx_frame_ack = 0;
+  do {
+     ctx_consume_events (ctxctx->backend.ctx);
+  } while (ctx_frame_ack != 1);
+#else
+  fflush (stdout);
+#endif
+}
+
+void ctx_ctx_destroy (CtxCtx *ctx)
+{
+  nc_at_exit ();
+  ctx_free (ctx);
+  /* we're not destoring the ctx member, this is function is called in ctx' teardown */
+}
+
+void ctx_ctx_consume_events (Ctx *ctx)
+{
+  //int ix, iy;
+  CtxCtx *ctxctx = (CtxCtx*)ctx->backend;
+  const char *event = NULL;
+#if CTX_AUDIO
+  ctx_ctx_pcm (ctx);
+#endif
+  assert (ctx_native_events);
+
+#if 1
+    { /* XXX : this is a work-around for signals not working properly, we are polling the
+         size with an ioctl per consume-events
+         */
+      struct winsize ws;
+      ioctl(0,TIOCGWINSZ,&ws);
+      ctxctx->cols = ws.ws_col;
+      ctxctx->rows = ws.ws_row;
+      ctx_set_size (ctx, ws.ws_xpixel, ws.ws_ypixel);
+    }
+#endif
+    //char *cmd = ctx_strdup_printf ("touch /tmp/ctx-%ix%i", ctxctx->width, ctxctx->height);
+    //system (cmd);
+    //ctx_free (cmd);
+
+  if (ctx_native_events)
+    do {
+
+      float x = 0, y = 0;
+      int b = 0;
+      char event_type[128]="";
+      event = ctx_native_get_event (ctx, 1000/120);
+
+      if (event)
+      {
+      sscanf (event, "%s %f %f %i", event_type, &x, &y, &b);
+      if (!strcmp (event_type, "idle"))
+      {
+              event = NULL;
+      }
+      else if (!strcmp (event_type, "pp"))
+      {
+        ctx_pointer_press (ctx, x, y, b, 0);
+      }
+      else if (!strcmp (event_type, "pd")||
+               !strcmp (event_type, "pm"))
+      {
+        ctx_pointer_motion (ctx, x, y, b, 0);
+      }
+      else if (!strcmp (event_type, "pr"))
+      {
+        ctx_pointer_release (ctx, x, y, b, 0);
+      }
+      else if (!strcmp (event_type, "message"))
+      {
+        ctx_incoming_message (ctx, event + strlen ("message"), 0);
+      } else if (!strcmp (event, "size-changed"))
+      {
+        fprintf (stdout, "\e[H\e[2J\e[?25l");
+        ctxctx->cols = ctx_terminal_cols ();
+        ctxctx->rows = ctx_terminal_rows ();
+
+        //system ("touch /tmp/ctx-abc");
+
+        ctx_set_size (ctx, ctx_terminal_width(), ctx_terminal_height());
+
+        if (prev_frame_contents)
+          ctx_free (prev_frame_contents);
+        prev_frame_contents = NULL;
+        prev_frame_len = 0;
+        ctx_queue_draw (ctx);
+
+      //   ctx_key_press(ctx,0,"size-changed",0);
+      }
+      else if (!strcmp (event_type, "keyup"))
+      {
+        char buf[4]={ (int)x, 0 };
+        ctx_key_up (ctx, (int)x, buf, 0);
+      }
+      else if (!strcmp (event_type, "keydown"))
+      {
+        char buf[4]={ (int)x, 0 };
+        ctx_key_down (ctx, (int)x, buf, 0);
+      }
+      else
+      {
+        ctx_key_press (ctx, 0, event, 0);
+      }
+      }
+    } while (event);
+}
+
+Ctx *ctx_new_ctx (int width, int height)
+{
+  float font_size = 12.0;
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+  CtxCtx *ctxctx = (CtxCtx*)ctx_calloc (sizeof (CtxCtx), 1);
+  CtxBackend *backend = (CtxBackend*)ctxctx;
+  fprintf (stdout, "\e[?1049h");
+  fflush (stdout);
+  //fprintf (stderr, "\e[H");
+  //fprintf (stderr, "\e[2J");
+  ctx_native_events = 1;
+  if (width <= 0 || height <= 0)
+  {
+    ctxctx->cols = ctx_terminal_cols ();
+    ctxctx->rows = ctx_terminal_rows ();
+    width  = ctx->width  = ctxctx->width = ctx_terminal_width ();
+    height = ctx->height = ctxctx->width = ctx_terminal_height ();
+    font_size = height / ctxctx->rows;
+    ctx_font_size (ctx, font_size);
+  }
+  else
+  {
+    ctxctx->width = ctx->width  = width;
+    ctxctx->height = ctx->height = height;
+    ctxctx->cols   = width / 80;
+    ctxctx->rows   = height / 24;
+  }
+  backend->ctx = ctx;
+  if (!ctx_native_events)
+    _ctx_mouse (ctx, NC_MOUSE_DRAG);
+  backend->end_frame = ctx_ctx_end_frame;
+  backend->destroy = (void(*)(void *))ctx_ctx_destroy;
+  backend->process = (void*)ctx_drawlist_process;
+  backend->consume_events = ctx_ctx_consume_events;
+  ctx_set_backend (ctx, ctxctx);
+  ctx_set_size (ctx, width, height);
+  return ctx;
+}
+
+void ctx_ctx_pcm (Ctx *ctx);
+
+
+#endif
+
+#if CTX_TILED
+static inline int
+ctx_tiled_threads_done (CtxTiled *tiled)
+{
+  int sum = 0;
+  for (int i = 0; i < _ctx_max_threads; i++)
+  {
+     if (tiled->rendered_frame[i] == tiled->render_frame)
+       sum ++;
+  }
+  return sum;
+}
+
+int _ctx_damage_control = 0;
+
+void ctx_tiled_destroy (CtxTiled *tiled)
+{
+  tiled->quit = 1;
+  mtx_lock (&tiled->mtx);
+  cnd_broadcast (&tiled->cond);
+  mtx_unlock (&tiled->mtx);
+
+  while (tiled->thread_quit < _ctx_max_threads)
+    usleep (1000);
+
+  if (tiled->pixels)
+  {
+    ctx_free (tiled->pixels);
+    tiled->pixels = NULL;
+    for (int i = 0 ; i < _ctx_max_threads; i++)
+    {
+      if (tiled->host[i])
+        ctx_destroy (tiled->host[i]);
+      tiled->host[i]=NULL;
+    }
+    ctx_destroy (tiled->ctx_copy);
+  }
+
+  // leak?
+}
+static unsigned char *sdl_icc = NULL;
+static long sdl_icc_length = 0;
+
+static void ctx_tiled_end_frame (Ctx *ctx)
+{
+  CtxTiled *tiled = (CtxTiled*)ctx->backend;
+  mtx_lock (&tiled->mtx);
+  if (tiled->shown_frame == tiled->render_frame)
+  {
+    int dirty_tiles = 0;
+    ctx_set_drawlist (tiled->ctx_copy, &tiled->backend.ctx->drawlist.entries[0],
+                                           tiled->backend.ctx->drawlist.count * 9);
+    if (_ctx_enable_hash_cache)
+    {
+      Ctx *hasher = ctx_hasher_new (tiled->width, tiled->height,
+                        CTX_HASH_COLS, CTX_HASH_ROWS, &tiled->ctx_copy->drawlist);
+      ctx_render_ctx (tiled->ctx_copy, hasher);
+
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+      {
+        for (int col = 0; col < CTX_HASH_COLS; col++)
+        {
+          uint32_t new_hash = ctx_hasher_get_hash (hasher, col, row);
+          if (new_hash && new_hash != tiled->hashes[(row * CTX_HASH_COLS + col)])
+          {
+            tiled->hashes[(row * CTX_HASH_COLS +  col)] = new_hash;
+            tiled->tile_affinity[row * CTX_HASH_COLS + col] = 1;
+            dirty_tiles++;
+          }
+          else
+          {
+            tiled->tile_affinity[row * CTX_HASH_COLS + col] = -1;
+          }
+        }
+      }
+
+      ctx_destroy (hasher);
+    }
+    else
+    {
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+        for (int col = 0; col < CTX_HASH_COLS; col++)
+          {
+            tiled->tile_affinity[row * CTX_HASH_COLS + col] = 1;
+            dirty_tiles++;
+          }
+    }
+    int dirty_no = 0;
+    if (dirty_tiles)
+    for (int row = 0; row < CTX_HASH_ROWS; row++)
+      for (int col = 0; col < CTX_HASH_COLS; col++)
+      {
+        if (tiled->tile_affinity[row * CTX_HASH_COLS + col] != -1)
+        {
+          tiled->tile_affinity[row * CTX_HASH_COLS + col] = dirty_no * (_ctx_max_threads) / dirty_tiles;
+          dirty_no++;
+          if (col > tiled->max_col) tiled->max_col = col;
+          if (col < tiled->min_col) tiled->min_col = col;
+          if (row > tiled->max_row) tiled->max_row = row;
+          if (row < tiled->min_row) tiled->min_row = row;
+        }
+      }
+
+    if (_ctx_damage_control)
+    {
+      for (int i = 0; i < tiled->width * tiled->height; i++)
+      {
+        tiled->pixels[i*4+2]  = (tiled->pixels[i*4+2] + 255)/2;
+      }
+    }
+
+    tiled->render_frame = ++tiled->frame;
+
+#if 0
+
+          //if (tiled->tile_affinity[hno]==no)
+          {
+            int x0 = ((tiled->width)/CTX_HASH_COLS) * 0;
+            int y0 = ((tiled->height)/CTX_HASH_ROWS) * 0;
+            int width = tiled->width / CTX_HASH_COLS;
+            int height = tiled->height / CTX_HASH_ROWS;
+            Ctx *host = tiled->host[0];
+
+            CtxRasterizer *rasterizer = (CtxRasterizer*)host->backend;
+            int swap_red_green = ((CtxRasterizer*)(host->backend))->swap_red_green;
+            ctx_rasterizer_init (rasterizer,
+                                 host, tiled->backend.ctx, &host->state,
+                                 &tiled->pixels[tiled->width * 4 * y0 + x0 * 4],
+                                 0, 0, 1, 1,
+                                 tiled->width*4, CTX_FORMAT_BGRA8,
+                                 tiled->antialias);
+            ((CtxRasterizer*)(host->backend))->swap_red_green = swap_red_green;
+            if (sdl_icc_length)
+              ctx_colorspace (host, CTX_COLOR_SPACE_DEVICE_RGB, sdl_icc, sdl_icc_length);
+
+            ctx_translate (host, -x0, -y0);
+            ctx_render_ctx (tiled->ctx_copy, host);
+          }
+#endif
+    cnd_broadcast (&tiled->cond);
+  }
+  else
+  {
+    fprintf (stderr, "{drip}");
+  }
+  mtx_unlock (&tiled->mtx);
+  ctx_drawlist_clear (ctx);
+}
+
+static
+void ctx_tiled_render_fun (void **data)
+{
+  int      no = (size_t)data[0];
+  CtxTiled *tiled = data[1];
+
+  while (!tiled->quit)
+  {
+    Ctx *host = tiled->host[no];
+
+    mtx_lock (&tiled->mtx);
+    cnd_wait(&tiled->cond, &tiled->mtx);
+    mtx_unlock (&tiled->mtx);
+
+    if (tiled->render_frame != tiled->rendered_frame[no])
+    {
+      int hno = 0;
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+        for (int col = 0; col < CTX_HASH_COLS; col++, hno++)
+        {
+          if (tiled->tile_affinity[hno]==no)
+          {
+            int x0 = ((tiled->width)/CTX_HASH_COLS) * col;
+            int y0 = ((tiled->height)/CTX_HASH_ROWS) * row;
+            int width = tiled->width / CTX_HASH_COLS;
+            int height = tiled->height / CTX_HASH_ROWS;
+
+            CtxRasterizer *rasterizer = (CtxRasterizer*)host->backend;
+
+            int active_mask = 1 << hno;
+
+#if CTX_TILED_MERGE_HORIZONTAL_NEIGHBORS
+            while (col + 1 < CTX_HASH_COLS &&
+                   tiled->tile_affinity[hno+1] == no)
+            {
+              width += tiled->width / CTX_HASH_COLS;
+              col++;
+              hno++;
+              active_mask |= 1 << hno;
+            }
+#endif
+            int swap_red_green = rasterizer->swap_red_green;
+            int compressed_scanlines = 0;
+#if CTX_ENABLE_CBRLE
+            // compressed_scanlines = 1;
+#endif
+            ctx_rasterizer_init (rasterizer,
+                                 host, tiled->backend.ctx, &host->state,
+                                 &tiled->pixels[tiled->width * 4 * y0 + x0 * 4],
+                                 0, 0, width, height,
+                                 tiled->width*4, compressed_scanlines?CTX_FORMAT_CBRLE_32:CTX_FORMAT_BGRA8,
+                                 tiled->antialias);
+            ((CtxRasterizer*)(host->backend))->swap_red_green = swap_red_green;
+            if (sdl_icc_length)
+              ctx_colorspace (host, CTX_COLOR_SPACE_DEVICE_RGB, sdl_icc, sdl_icc_length);
+
+            ctx_translate (host, -x0, -y0);
+            ctx_render_ctx_masked (tiled->ctx_copy, host, active_mask);
+
+#if CTX_ENABLE_CBRLE
+            if (compressed_scanlines)
+            for (int i = 0; i < height; i ++)
+            {
+              uint8_t temp[width*4];
+              _ctx_CBRLE_decompress (&tiled->pixels[tiled->width * 4 * (y0+i) + x0 * 4],
+                                      temp,
+                                      width,
+                                      width * 4, 0, width);
+              memcpy (&tiled->pixels[tiled->width * 4 * (y0+i) + x0 * 4], temp, sizeof (temp));
+            }
+#endif
+          }
+        }
+      tiled->rendered_frame[no] = tiled->render_frame;
+    }
+  }
+  tiled->thread_quit++; // need atomic?
+}
+
+
+static int       ctx_tiled_cursor_drawn   = 0;
+static int       ctx_tiled_cursor_drawn_x = 0;
+static int       ctx_tiled_cursor_drawn_y = 0;
+static CtxCursor ctx_tiled_cursor_drawn_shape = 0;
+
+
+#define CTX_FB_HIDE_CURSOR_FRAMES 200
+
+static int ctx_tiled_cursor_same_pos = CTX_FB_HIDE_CURSOR_FRAMES;
+
+static inline int ctx_is_in_cursor (int x, int y, int size, CtxCursor shape)
+{
+  switch (shape)
+  {
+    case CTX_CURSOR_ARROW:
+      if (x > ((size * 4)-y*4)) return 0;
+      if (x < y && x > y / 16)
+        return 1;
+      return 0;
+
+    case CTX_CURSOR_RESIZE_SE:
+    case CTX_CURSOR_RESIZE_NW:
+    case CTX_CURSOR_RESIZE_SW:
+    case CTX_CURSOR_RESIZE_NE:
+      {
+        float theta = -45.0f/180 * (float)(M_PI);
+        float cos_theta;
+        float sin_theta;
+
+        if ((shape == CTX_CURSOR_RESIZE_SW) ||
+            (shape == CTX_CURSOR_RESIZE_NE))
+        {
+          theta = -theta;
+          cos_theta = ctx_cosf (theta);
+          sin_theta = ctx_sinf (theta);
+        }
+        else
+        {
+          cos_theta = ctx_cosf (theta);
+          sin_theta = ctx_sinf (theta);
+        }
+        int rot_x = (int)(x * cos_theta - y * sin_theta);
+        int rot_y = (int)(y * cos_theta + x * sin_theta);
+        x = rot_x;
+        y = rot_y;
+      }
+      /*FALLTHROUGH*/
+    case CTX_CURSOR_RESIZE_W:
+    case CTX_CURSOR_RESIZE_E:
+    case CTX_CURSOR_RESIZE_ALL:
+      if (abs (x) < size/2 && abs (y) < size/2)
+      {
+        if (abs(y) < size/10)
+        {
+          return 1;
+        }
+      }
+      if ((abs (x) - size/ (shape == CTX_CURSOR_RESIZE_ALL?2:2.7)) >= 0)
+      {
+        if (abs(y) < (size/2.8)-(abs(x) - (size/2)))
+          return 1;
+      }
+      if (shape != CTX_CURSOR_RESIZE_ALL)
+        break;
+      /* FALLTHROUGH */
+    case CTX_CURSOR_RESIZE_S:
+    case CTX_CURSOR_RESIZE_N:
+      if (abs (y) < size/2 && abs (x) < size/2)
+      {
+        if (abs(x) < size/10)
+        {
+          return 1;
+        }
+      }
+      if ((abs (y) - size/ (shape == CTX_CURSOR_RESIZE_ALL?2:2.7)) >= 0)
+      {
+        if (abs(x) < (size/2.8)-(abs(y) - (size/2)))
+          return 1;
+      }
+      break;
+#if 0
+    case CTX_CURSOR_RESIZE_ALL:
+      if (abs (x) < size/2 && abs (y) < size/2)
+      {
+        if (abs (x) < size/10 || abs(y) < size/10)
+          return 1;
+      }
+      break;
+#endif
+    default:
+      return (x ^ y) & 1;
+  }
+  return 0;
+}
+
+static void ctx_tiled_undraw_cursor (CtxTiled *tiled)
+{
+    int cursor_size = ctx_height (tiled->backend.ctx) / 28;
+
+    if (ctx_tiled_cursor_drawn)
+    {
+      int no = 0;
+      int startx = -cursor_size;
+      int starty = -cursor_size;
+      if (ctx_tiled_cursor_drawn_shape == CTX_CURSOR_ARROW)
+        startx = starty = 0;
+
+      for (int y = starty; y < cursor_size; y++)
+      for (int x = startx; x < cursor_size; x++, no+=4)
+      {
+        if (x + ctx_tiled_cursor_drawn_x < tiled->width && y + ctx_tiled_cursor_drawn_y < tiled->height)
+        {
+          if (ctx_is_in_cursor (x, y, cursor_size, ctx_tiled_cursor_drawn_shape))
+          {
+            int o = ((ctx_tiled_cursor_drawn_y + y) * tiled->width + (ctx_tiled_cursor_drawn_x + x)) * 4;
+            tiled->fb[o+0]^=0x88;
+            tiled->fb[o+1]^=0x88;
+            tiled->fb[o+2]^=0x88;
+          }
+        }
+      }
+
+    ctx_tiled_cursor_drawn = 0;
+    }
+}
+
+static inline void ctx_tiled_draw_cursor (CtxTiled *tiled)
+{
+    int cursor_x = (int)ctx_pointer_x (tiled->backend.ctx);
+    int cursor_y = (int)ctx_pointer_y (tiled->backend.ctx);
+    int cursor_size = ctx_height (tiled->backend.ctx) / 28;
+    CtxCursor cursor_shape = tiled->backend.ctx->cursor;
+    int no = 0;
+
+    if (cursor_x == ctx_tiled_cursor_drawn_x &&
+        cursor_y == ctx_tiled_cursor_drawn_y &&
+        cursor_shape == ctx_tiled_cursor_drawn_shape)
+      ctx_tiled_cursor_same_pos ++;
+    else
+      ctx_tiled_cursor_same_pos = 0;
+
+    if (ctx_tiled_cursor_same_pos >= CTX_FB_HIDE_CURSOR_FRAMES)
+    {
+      if (ctx_tiled_cursor_drawn)
+        ctx_tiled_undraw_cursor (tiled);
+      return;
+    }
+
+    /* no need to flicker when stationary, motion flicker can also be removed
+     * by combining the previous and next position masks when a motion has
+     * occured..
+     */
+    if (ctx_tiled_cursor_same_pos && ctx_tiled_cursor_drawn)
+      return;
+
+    ctx_tiled_undraw_cursor (tiled);
+
+    no = 0;
+
+    int startx = -cursor_size;
+    int starty = -cursor_size;
+
+    if (cursor_shape == CTX_CURSOR_ARROW)
+      startx = starty = 0;
+
+    for (int y = starty; y < cursor_size; y++)
+      for (int x = startx; x < cursor_size; x++, no+=4)
+      {
+        if (x + cursor_x < tiled->width && y + cursor_y < tiled->height)
+        {
+          if (ctx_is_in_cursor (x, y, cursor_size, cursor_shape))
+          {
+            int o = ((cursor_y + y) * tiled->width + (cursor_x + x)) * 4;
+            tiled->fb[o+0]^=0x88;
+            tiled->fb[o+1]^=0x88;
+            tiled->fb[o+2]^=0x88;
+          }
+        }
+      }
+    ctx_tiled_cursor_drawn = 1;
+    ctx_tiled_cursor_drawn_x = cursor_x;
+    ctx_tiled_cursor_drawn_y = cursor_y;
+    ctx_tiled_cursor_drawn_shape = cursor_shape;
+}
+
+#endif
+
+
+
+
+
+#if CTX_TERMINAL_EVENTS
+#if CTX_HEADLESS
+
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+
+static char *ctx_fb_clipboard = NULL;
+static void ctx_headless_set_clipboard (Ctx *ctx, const char *text)
+{
+  if (ctx_fb_clipboard)
+    ctx_free (ctx_fb_clipboard);
+  ctx_fb_clipboard = NULL;
+  if (text)
+  {
+    ctx_fb_clipboard = ctx_strdup (text);
+  }
+}
+
+static char *ctx_headless_get_clipboard (Ctx *ctx)
+{
+  if (ctx_fb_clipboard) return ctx_strdup (ctx_fb_clipboard);
+  return ctx_strdup ("");
+}
+
+static inline int ctx_headless_get_mice_fd (Ctx *ctx)
+{
+  //CtxHeadless *fb = (void*)ctx->backend;
+  return _ctx_mice_fd;
+}
+
+typedef struct _CtxHeadless CtxHeadless;
+struct _CtxHeadless
+{
+   CtxTiled tiled;
+   int           key_balance;
+   int           key_repeat;
+   int           lctrl;
+   int           lalt;
+   int           rctrl;
+
+
+   int          fb_fd;
+   char        *fb_path;
+   int          fb_bits;
+   int          fb_bpp;
+   int          fb_mapped_size;
+   int          vt;
+   cnd_t        cond;
+   mtx_t        mtx;
+   int          tty;
+};
+
+#if UINTPTR_MAX == 0xffFFffFF
+  #define fbdrmuint_t uint32_t
+#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
+  #define fbdrmuint_t uint64_t
+#endif
+
+static void ctx_headless_show_frame (CtxHeadless *fb, int block)
+{
+  CtxTiled *tiled = (void*)fb;
+  if (tiled->shown_frame == tiled->render_frame)
+  {
+    return;
+  }
+
+  if (block)
+  {
+    int count = 0;
+    while (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+    {
+      usleep (500);
+      count ++;
+      if (count > 2000)
+      {
+        tiled->shown_frame = tiled->render_frame;
+        return;
+      }
+    }
+  }
+  else
+  {
+    if (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+      return;
+  }
+    if (tiled->vt_active)
+    {
+       int pre_skip = tiled->min_row * tiled->height/CTX_HASH_ROWS * tiled->width;
+       int post_skip = (CTX_HASH_ROWS-tiled->max_row-1) * tiled->height/CTX_HASH_ROWS * tiled->width;
+
+       int rows = ((tiled->width * tiled->height) - pre_skip - post_skip)/tiled->width;
+
+       int col_pre_skip = tiled->min_col * tiled->width/CTX_HASH_COLS;
+       int col_post_skip = (CTX_HASH_COLS-tiled->max_col-1) * tiled->width/CTX_HASH_COLS;
+       if (_ctx_damage_control)
+       {
+         pre_skip = post_skip = col_pre_skip = col_post_skip = 0;
+       }
+
+       if (pre_skip < 0) pre_skip = 0;
+       if (post_skip < 0) post_skip = 0;
+
+
+       if (tiled->min_row == 100){
+          pre_skip = 0;
+          post_skip = 0;
+       }
+       else
+       {
+         tiled->min_row = 100;
+         tiled->max_row = 0;
+         tiled->min_col = 100;
+         tiled->max_col = 0;
+         {
+           uint8_t *dst = tiled->fb + pre_skip * 4;
+           uint8_t *src = tiled->pixels + pre_skip * 4;
+           int pre = col_pre_skip * 4;
+           int post = col_post_skip * 4;
+           int core = tiled->width * 4 - pre - post;
+           for (int i = 0; i < rows; i++)
+           {
+             dst  += pre;
+             src  += pre;
+             memcpy (dst, src, core);
+             src  += core;
+             dst  += core;
+             dst  += post;
+             src  += post;
+           }
+         }
+    }
+    tiled->shown_frame = tiled->render_frame;
+  }
+}
+
+void ctx_headless_consume_events (Ctx *ctx)
+{
+  CtxHeadless *fb = (void*)ctx->backend;
+  ctx_headless_show_frame (fb, 0);
+  event_check_pending (&fb->tiled);
+}
+
+inline static void ctx_headless_start_frame (Ctx *ctx)
+{
+  ctx_headless_show_frame ((CtxHeadless*)ctx->backend, 1);
+}
+
+void ctx_headless_destroy (CtxHeadless *fb)
+{
+  CtxTiled *tiled=(CtxTiled*)fb;
+
+  if (tiled->fb)
+  {
+  ctx_free (tiled->fb); // it is not the tiled renderers responsibilty,
+                    // since it might not be allocated this way
+  tiled->fb = NULL;
+  }
+  //munmap (tiled->fb, fb->fb_mapped_size);
+  //close (fb->fb_fd);
+  //if (system("stty sane")){};
+  ctx_tiled_destroy ((CtxTiled*)fb);
+  //ctx_free (fb);
+}
+
+//static unsigned char *fb_icc = NULL;
+//static long fb_icc_length = 0;
+
+static CtxHeadless *ctx_headless = NULL;
+
+
+Ctx *ctx_new_headless (int width, int height)
+{
+  if (width < 0 || height < 0)
+  {
+    width = 1920;
+    height = 780;
+  }
+#if CTX_RASTERIZER
+  CtxHeadless *fb = ctx_calloc (sizeof (CtxHeadless), 1);
+  CtxBackend *backend = (CtxBackend*)fb;
+  CtxTiled *tiled     = (CtxTiled*)fb;
+  ctx_headless = fb;
+
+  tiled->width = width;
+  tiled->height = height;
+
+  fb->fb_bits        = 32;
+  fb->fb_bpp         = 4;
+  fb->fb_mapped_size = width * height * 4;
+#endif
+
+  tiled->fb = ctx_calloc (fb->fb_mapped_size, 1);
+  if (!tiled->fb)
+    return NULL;
+  tiled->pixels = ctx_calloc (fb->fb_mapped_size, 1);
+  tiled->show_frame = (void*)ctx_headless_show_frame;
+
+
+ // ctx_get_contents ("file:///tmp/ctx.icc", &sdl_icc, &sdl_icc_length);
+ //
+ // not to be done for headless, we want sRGB thumbs - at least not device specific
+ // perhaps rec2020 or similar?
+
+  backend->ctx = _ctx_new_drawlist (width, height);
+  backend->end_frame = ctx_tiled_end_frame;
+  backend->process = (void*)ctx_drawlist_process;
+  backend->start_frame = ctx_headless_start_frame;
+  backend->destroy = (void*)ctx_headless_destroy;
+  backend->set_clipboard = ctx_headless_set_clipboard;
+  backend->get_clipboard = ctx_headless_get_clipboard;
+  backend->consume_events = ctx_headless_consume_events;
+
+  tiled->ctx_copy = ctx_new (width, height, "drawlist");
+  tiled->width    = width;
+  tiled->height   = height;
+
+  ctx_set_backend (backend->ctx, fb);
+  ctx_set_backend (tiled->ctx_copy, fb);
+  ctx_set_texture_cache (tiled->ctx_copy, backend->ctx);
+
+  for (int i = 0; i < _ctx_max_threads; i++)
+  {
+    tiled->host[i] = ctx_new_for_framebuffer (tiled->pixels,
+                   tiled->width/CTX_HASH_COLS, tiled->height/CTX_HASH_ROWS,
+                   tiled->width * 4, CTX_FORMAT_BGRA8); // this format
+                                  // is overriden in  thread
+    ((CtxRasterizer*)(tiled->host[i]->backend))->swap_red_green = 1;
+    ctx_set_texture_source (tiled->host[i], backend->ctx);
+  }
+
+  mtx_init (&tiled->mtx, mtx_plain);
+  cnd_init (&tiled->cond);
+
+#define start_thread(no)\
+  if(_ctx_max_threads>no){ \
+    static void *args[2]={(void*)no, };\
+    thrd_t tid;\
+    args[1]=fb;\
+    thrd_create (&tid, (void*)ctx_tiled_render_fun, args);\
+  }
+  start_thread(0);
+  start_thread(1);
+  start_thread(2);
+  start_thread(3);
+  start_thread(4);
+  start_thread(5);
+  start_thread(6);
+  start_thread(7);
+  start_thread(8);
+  start_thread(9);
+  start_thread(10);
+  start_thread(11);
+  start_thread(12);
+  start_thread(13);
+  start_thread(14);
+  start_thread(15);
+#undef start_thread
+
+  tiled->vt_active = 1;
+
+  return backend->ctx;
+}
+#endif
+#endif
+
+#if CTX_TERMINAL_EVENTS
+
+#if !__COSMOPOLITAN__
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#endif
+
+
+#if CTX_KMS || CTX_FB
+
+static int ctx_fb_single_buffer = 0;  // used with the framebuffer this
+                               // causes flicker, but brings single
+                               // threaded memory use <2mb 
+
+static int ctx_fb_get_mice_fd (Ctx *ctx)
+{
+  //CtxFb *fb = (void*)ctx->backend;
+  return _ctx_mice_fd;
+}
+
+static void ctx_fb_get_event_fds (Ctx *ctx, int *fd, int *count)
+{
+  int mice_fd = ctx_fb_get_mice_fd (ctx);
+  fd[0] = STDIN_FILENO;
+  if (mice_fd)
+  {
+    fd[1] = mice_fd;
+    *count = 2;
+  }
+  else
+  {
+    *count = 1;
+  }
+}
+#endif
+
+#if CTX_FB
+
+#ifdef __linux__
+  #include <linux/fb.h>
+  #include <linux/vt.h>
+  #include <linux/kd.h>
+#endif
+
+#ifdef __NetBSD__
+  typedef uint8_t unchar;
+  typedef uint8_t u_char;
+  typedef uint16_t ushort;
+  typedef uint32_t u_int;
+  typedef uint64_t u_long;
+  #include <sys/param.h>
+  #include <dev/wscons/wsdisplay_usl_io.h>
+  #include <dev/wscons/wsconsio.h>
+  #include <dev/wscons/wsksymdef.h>
+#endif
+
+  #include <sys/mman.h>
+
+typedef struct _CtxFb CtxFb;
+struct _CtxFb
+{
+   CtxTiled tiled;
+   int           key_balance;
+   int           key_repeat;
+   int           lctrl;
+   int           lalt;
+   int           rctrl;
+
+
+   int          fb_fd;
+   char        *fb_path;
+   int          fb_bits;
+   int          fb_bpp;
+   int          fb_mapped_size;
+   int          vt;
+   int          tty;
+   cnd_t        cond;
+   mtx_t        mtx;
+#if __linux__
+   struct       fb_var_screeninfo vinfo;
+   struct       fb_fix_screeninfo finfo;
+#endif
+};
+
+#if UINTPTR_MAX == 0xffFFffFF
+  #define fbdrmuint_t uint32_t
+#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
+  #define fbdrmuint_t uint64_t
+#endif
+
+
+static void ctx_fb_flip (CtxFb *fb)
+{
+#ifdef __linux__
+  ioctl (fb->fb_fd, FBIOPAN_DISPLAY, &fb->vinfo);
+#endif
+}
+
+static void ctx_fb_show_frame (CtxFb *fb, int block)
+{
+  CtxTiled *tiled = (void*)fb;
+  if (tiled->shown_frame == tiled->render_frame)
+  {
+    if (block == 0) // consume event call
+    {
+      ctx_tiled_draw_cursor (tiled);
+      ctx_fb_flip (fb);
+    }
+    return;
+  }
+
+  if (block)
+  {
+    int count = 0;
+    while (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+    {
+      usleep (500);
+      count ++;
+      if (count > 2000)
+      {
+        tiled->shown_frame = tiled->render_frame;
+        return;
+      }
+    }
+  }
+  else
+  {
+    if (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+      return;
+  }
+
+    if (tiled->vt_active)
+    {
+       int pre_skip = tiled->min_row * tiled->height/CTX_HASH_ROWS * tiled->width;
+       int post_skip = (CTX_HASH_ROWS-tiled->max_row-1) * tiled->height/CTX_HASH_ROWS * tiled->width;
+
+       int rows = ((tiled->width * tiled->height) - pre_skip - post_skip)/tiled->width;
+
+       int col_pre_skip = tiled->min_col * tiled->width/CTX_HASH_COLS;
+       int col_post_skip = (CTX_HASH_COLS-tiled->max_col-1) * tiled->width/CTX_HASH_COLS;
+       if (_ctx_damage_control)
+       {
+         pre_skip = post_skip = col_pre_skip = col_post_skip = 0;
+       }
+
+       if (pre_skip < 0) pre_skip = 0;
+       if (post_skip < 0) post_skip = 0;
+
+
+       if (tiled->min_row == 100){
+          pre_skip = 0;
+          post_skip = 0;
+#ifdef __linux__
+           __u32 dummy = 0;
+          ioctl (fb->fb_fd, FBIO_WAITFORVSYNC, &dummy);
+#endif
+          ctx_tiled_undraw_cursor (tiled);
+       }
+       else
+       {
+
+      tiled->min_row = 100;
+      tiled->max_row = 0;
+      tiled->min_col = 100;
+      tiled->max_col = 0;
+#ifdef __linux__
+    {
+     __u32 dummy = 0;
+     ioctl (fb->fb_fd, FBIO_WAITFORVSYNC, &dummy);
+    }
+#endif
+     ctx_tiled_undraw_cursor (tiled);
+     if (!ctx_fb_single_buffer)
+     switch (fb->fb_bits)
+     {
+       case 32:
+#if 1
+         {
+           uint8_t *dst = tiled->fb + pre_skip * 4;
+           uint8_t *src = tiled->pixels + pre_skip * 4;
+           int pre = col_pre_skip * 4;
+           int post = col_post_skip * 4;
+           int core = tiled->width * 4 - pre - post;
+           for (int i = 0; i < rows; i++)
+           {
+             dst  += pre;
+             src  += pre;
+             memcpy (dst, src, core);
+             src  += core;
+             dst  += core;
+             dst  += post;
+             src  += post;
+           }
+         }
+#else
+         { int count = tiled->width * tiled->height;
+           const uint32_t *src = (void*)tiled->pixels;
+           uint32_t *dst = (void*)tiled->fb;
+           count-= pre_skip;
+           src+= pre_skip;
+           dst+= pre_skip;
+           count-= post_skip;
+           while (count -- > 0)
+           {
+             dst[0] = ctx_swap_red_green2 (src[0]);
+             src++;
+             dst++;
+           }
+         }
+#endif
+         break;
+         /* XXX  :  note: converting a scanline (or all) to target and
+          * then doing a bulk memcpy be faster (at least with som /dev/fbs)  */
+       case 24:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 3;
+           count-= post_skip;
+           while (count -- > 0)
+           {
+             dst[0] = src[0];
+             dst[1] = src[1];
+             dst[2] = src[2];
+             dst+=3;
+             src+=4;
+           }
+         }
+         break;
+       case 16:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 2;
+           while (count -- > 0)
+           {
+             int big = ((src[0] >> 3)) +
+                ((src[1] >> 2)<<5) +
+                ((src[2] >> 3)<<11);
+             dst[0] = big & 255;
+             dst[1] = big >>  8;
+             dst+=2;
+             src+=4;
+           }
+         }
+         break;
+       case 15:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 2;
+           while (count -- > 0)
+           {
+             int big = ((src[2] >> 3)) +
+                       ((src[1] >> 2)<<5) +
+                       ((src[0] >> 3)<<10);
+             dst[0] = big & 255;
+             dst[1] = big >>  8;
+             dst+=2;
+             src+=4;
+           }
+         }
+         break;
+       case 8:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip;
+           while (count -- > 0)
+           {
+             dst[0] = ((src[0] >> 5)) +
+                      ((src[1] >> 5)<<3) +
+                      ((src[2] >> 6)<<6);
+             dst+=1;
+             src+=4;
+           }
+         }
+         break;
+     }
+    }
+    ctx_tiled_cursor_drawn = 0;
+    ctx_tiled_draw_cursor (tiled);
+    ctx_fb_flip (fb);
+    tiled->shown_frame = tiled->render_frame;
+  }
+}
+
+void ctx_fb_consume_events (Ctx *ctx)
+{
+#if CTX_RAW_KB_EVENTS
+  ctx_fb_global = ctx;
+#endif
+  CtxFb *fb = (void*)ctx->backend;
+  ctx_fb_show_frame (fb, 0);
+  event_check_pending (&fb->tiled);
+}
+
+inline static void ctx_fb_start_frame (Ctx *ctx)
+{
+  // show pending frame if any
+  ctx_fb_show_frame ((CtxFb*)ctx->backend, 1);
+}
+
+void ctx_fb_destroy (CtxFb *fb)
+{
+  CtxTiled*tiled=(CtxTiled*)fb;
+
+//#ifdef __linux__
+  ioctl (0, KDSETMODE, KD_TEXT);
+//#endif
+#ifdef __NetBSD__
+  {
+   int mode = WSDISPLAYIO_MODE_EMUL;
+   ioctl (fb->fb_fd, WSDISPLAYIO_SMODE, &mode);
+  }
+#endif
+  munmap (tiled->fb, fb->fb_mapped_size);
+  if (!ctx_fb_single_buffer)
+    ctx_free (tiled->pixels);
+  close (fb->fb_fd);
+  if (system("stty sane")){};
+  ctx_tiled_destroy ((CtxTiled*)fb);
+  //ctx_free (fb);
+}
+
+//static unsigned char *fb_icc = NULL;
+//static long fb_icc_length = 0;
+
+static CtxFb *ctx_fb = NULL;
+#ifdef __linux__
+static void fb_vt_switch_cb (int sig)
+{
+  CtxTiled *tiled = (void*)ctx_fb;
+  CtxBackend *backend = (void*)ctx_fb;
+  if (sig == SIGUSR1)
+  {
+    ioctl (0, VT_RELDISP, 1);
+    tiled->vt_active = 0;
+    ioctl (0, KDSETMODE, KD_TEXT);
+  }
+  else
+  {
+    ioctl (0, VT_RELDISP, VT_ACKACQ);
+    tiled->vt_active = 1;
+    // queue draw
+    tiled->render_frame = ++tiled->frame;
+    ioctl (0, KDSETMODE, KD_GRAPHICS);
+    {
+      backend->ctx->dirty=1;
+
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+      for (int col = 0; col < CTX_HASH_COLS; col++)
+      {
+        tiled->hashes[(row * CTX_HASH_COLS + col)] += 1;
+      }
+    }
+  }
+}
+#endif
+
+
+Ctx *ctx_new_fb (int width, int height)
+{
+#if CTX_RASTERIZER
+  if (getenv ("CTX_FB_SINGLE_BUFFER"))
+    ctx_fb_single_buffer = atoi (getenv ("CTX_FB_SINGLE_BUFFER"));
+  CtxFb *fb = ctx_calloc (sizeof (CtxFb), 1);
+  CtxTiled *tiled = (void*)fb;
+  CtxBackend *backend = (void*)fb;
+  ctx_fb = fb;
+  {
+#ifdef __linux__
+  const char *dev_path = "/dev/fb0";
+#endif
+#ifdef __NetBSD__
+  const char *dev_path = "/dev/ttyE0";
+#endif
+#ifdef __OpenBSD__
+  const char *dev_path = "/dev/ttyC0";
+#endif
+  fb->fb_fd = open (dev_path, O_RDWR);
+  if (fb->fb_fd > 0)
+    fb->fb_path = ctx_strdup (dev_path);
+  else
+  {
+#ifdef __linux__
+    fb->fb_fd = open ("/dev/graphics/fb0", O_RDWR);
+    if (fb->fb_fd > 0)
+    {
+      fb->fb_path = ctx_strdup ("/dev/graphics/fb0");
+    }
+    else
+#endif
+    {
+      ctx_free (fb);
+      return NULL;
+    }
+  }
+
+#ifdef __linux__
+  if (ioctl(fb->fb_fd, FBIOGET_FSCREENINFO, &fb->finfo))
+    {
+      fprintf (stderr, "error getting fbinfo\n");
+      close (fb->fb_fd);
+      ctx_free (fb->fb_path);
+      ctx_free (fb);
+      return NULL;
+    }
+
+   if (ioctl(fb->fb_fd, FBIOGET_VSCREENINFO, &fb->vinfo))
+     {
+       fprintf (stderr, "error getting fbinfo\n");
+      close (fb->fb_fd);
+      ctx_free (fb->fb_path);
+      ctx_free (fb);
+      return NULL;
+     }
+  ioctl (0, KDSETMODE, KD_GRAPHICS);
+
+//fprintf (stderr, "%s\n", fb->fb_path);
+  width = tiled->width = fb->vinfo.xres;
+  height = tiled->height = fb->vinfo.yres;
+
+  fb->fb_bits = fb->vinfo.bits_per_pixel;
+//fprintf (stderr, "fb bits: %i\n", fb->fb_bits);
+
+  if (fb->fb_bits == 16)
+    fb->fb_bits =
+      fb->vinfo.red.length +
+      fb->vinfo.green.length +
+      fb->vinfo.blue.length;
+   else if (fb->fb_bits == 8)
+  {
+    unsigned short red[256],  green[256],  blue[256];
+  //  unsigned short original_red[256];
+  //  unsigned short original_green[256];
+  //  unsigned short original_blue[256];
+    struct fb_cmap cmap = {0, 256, red, green, blue, NULL};
+  //  struct fb_cmap original_cmap = {0, 256, original_red, original_green, original_blue, NULL};
+    int i;
+
+    /* do we really need to restore it ? */
+   // if (ioctl (fb->fb_fd, FBIOPUTCMAP, &original_cmap) == -1)
+   // {
+   //   fprintf (stderr, "palette initialization problem %i\n", __LINE__);
+   // }
+
+    for (i = 0; i < 256; i++)
+    {
+      red[i]   = ((( i >> 5) & 0x7) << 5) << 8;
+      green[i] = ((( i >> 2) & 0x7) << 5) << 8;
+      blue[i]  = ((( i >> 0) & 0x3) << 6) << 8;
+    }
+
+    if (ioctl (fb->fb_fd, FBIOPUTCMAP, &cmap) == -1)
+    {
+      fprintf (stderr, "palette initialization problem %i\n", __LINE__);
+    }
+  }
+
+  fb->fb_bpp = fb->vinfo.bits_per_pixel / 8;
+  fb->fb_mapped_size = fb->finfo.smem_len;
+#endif
+
+#ifdef __NetBSD__
+  struct wsdisplay_fbinfo finfo;
+
+  int mode = WSDISPLAYIO_MODE_DUMBFB;
+  //int mode = WSDISPLAYIO_MODE_MAPPED;
+  if (ioctl (fb->fb_fd, WSDISPLAYIO_SMODE, &mode)) {
+    return NULL;
+  }
+  if (ioctl (fb->fb_fd, WSDISPLAYIO_GINFO, &finfo)) {
+    fprintf (stderr, "ioctl: WSIDSPLAYIO_GINFO failed\n");
+    return NULL;
+  }
+
+  width = tiled->width = finfo.width;
+  height = tiled->height = finfo.height;
+  fb->fb_bits = finfo.depth;
+  fb->fb_bpp = (fb->fb_bits + 1) / 8;
+  fb->fb_mapped_size = width * height * fb->fb_bpp;
+
+
+  if (fb->fb_bits == 8)
+  {
+    uint8_t red[256],  green[256],  blue[256];
+    struct wsdisplay_cmap cmap;
+    cmap.red = red;
+    cmap.green = green;
+    cmap.blue = blue;
+    cmap.count = 256;
+    cmap.index = 0;
+    for (int i = 0; i < 256; i++)
+    {
+      red[i]   = ((( i >> 5) & 0x7) << 5);
+      green[i] = ((( i >> 2) & 0x7) << 5);
+      blue[i]  = ((( i >> 0) & 0x3) << 6);
+    }
+
+    ioctl (fb->fb_fd, WSDISPLAYIO_PUTCMAP, &cmap);
+  }
+#endif
+
+                                              
+  tiled->fb = mmap (NULL, fb->fb_mapped_size, PROT_READ|PROT_WRITE, MAP_SHARED, fb->fb_fd, 0);
+  }
+  if (!tiled->fb)
+    return NULL;
+  if (ctx_fb_single_buffer)
+    tiled->pixels = tiled->fb;
+  else
+    tiled->pixels = ctx_calloc (fb->fb_mapped_size, 1);
+  tiled->show_frame = (void*)ctx_fb_show_frame;
+
+#if CTX_BABL
+  ctx_get_contents ("file:///tmp/ctx.icc", &sdl_icc, &sdl_icc_length);
+#endif
+
+  backend->ctx    = _ctx_new_drawlist (width, height);
+  tiled->ctx_copy = _ctx_new_drawlist (width, height);
+  tiled->width    = width;
+  tiled->height   = height;
+
+  ctx_set_backend (backend->ctx, fb);
+  ctx_set_backend (tiled->ctx_copy, fb);
+  ctx_set_texture_cache (tiled->ctx_copy, backend->ctx);
+
+
+  backend->end_frame = ctx_tiled_end_frame;
+  backend->process = (void*)ctx_drawlist_process;
+
+  backend->start_frame = ctx_fb_start_frame;
+  backend->destroy = (void*)ctx_fb_destroy;
+  backend->set_clipboard = ctx_headless_set_clipboard;
+  backend->get_clipboard = ctx_headless_get_clipboard;
+  backend->consume_events = ctx_fb_consume_events;
+  backend->get_event_fds = ctx_fb_get_event_fds;
+
+  ctx_set_size (backend->ctx, width, height);
+  ctx_set_size (tiled->ctx_copy, width, height);
+
+  for (int i = 0; i < _ctx_max_threads; i++)
+  {
+    tiled->host[i] = ctx_new_for_framebuffer (tiled->pixels,
+                   tiled->width/CTX_HASH_COLS, tiled->height/CTX_HASH_ROWS,
+                   tiled->width * 4, CTX_FORMAT_BGRA8); // this format
+                                  // is overriden in  thread
+    ((CtxRasterizer*)(tiled->host[i]->backend))->swap_red_green = 1;
+    ctx_set_texture_source (tiled->host[i], backend->ctx);
+  }
+
+  mtx_init (&tiled->mtx, mtx_plain);
+  cnd_init (&tiled->cond);
+
+#define start_thread(no)\
+  if(_ctx_max_threads>no){ \
+    static void *args[2]={(void*)no, };\
+    thrd_t tid;\
+    args[1]=fb;\
+    thrd_create (&tid, (void*)ctx_tiled_render_fun, args);\
+  }
+  start_thread(0);
+  start_thread(1);
+  start_thread(2);
+  start_thread(3);
+  start_thread(4);
+  start_thread(5);
+  start_thread(6);
+  start_thread(7);
+  start_thread(8);
+  start_thread(9);
+  start_thread(10);
+  start_thread(11);
+  start_thread(12);
+  start_thread(13);
+  start_thread(14);
+  start_thread(15);
+#undef start_thread
+
+  EvSource *kb = NULL;
+ 
+#if CTX_RAW_KB_EVENTS
+  if (!kb) kb = evsource_kb_raw_new ();
+#endif
+  if (!kb) kb = evsource_kb_term_new ();
+  if (kb)
+  {
+    tiled->evsource[tiled->evsource_count++] = kb;
+    kb->priv = fb;
+  }
+  EvSource *mice  = evsource_mice_new ();
+  if (mice)
+  {
+    tiled->evsource[tiled->evsource_count++] = mice;
+    mice->priv = fb;
+  }
+
+  tiled->vt_active = 1;
+#ifdef __linux__
+  ioctl(0, KDSETMODE, KD_GRAPHICS);
+  signal (SIGUSR1, fb_vt_switch_cb);
+  signal (SIGUSR2, fb_vt_switch_cb);
+
+  struct vt_stat st;
+  if (ioctl (0, VT_GETSTATE, &st) == -1)
+  {
+    ctx_log ("VT_GET_MODE on vt %i failed\n", fb->vt);
+    return NULL;
+  }
+
+  fb->vt = st.v_active;
+
+  struct vt_mode mode;
+  mode.mode   = VT_PROCESS;
+  mode.relsig = SIGUSR1;
+  mode.acqsig = SIGUSR2;
+  if (ioctl (0, VT_SETMODE, &mode) < 0)
+  {
+    ctx_log ("VT_SET_MODE on vt %i failed\n", fb->vt);
+    return NULL;
+  }
+#endif
+
+  return backend->ctx;
+#else
+  return NULL;
+#endif
+}
+#endif
+#endif
+
+#if CTX_TERMINAL_EVENTS
+
+#if !__COSMOPOLITAN__
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#endif
+
+
+
+#if CTX_KMS
+#ifdef __linux__
+  #include <linux/kd.h>
+#endif
+  //#include <linux/fb.h>
+  //#include <linux/vt.h>
+  #include <sys/mman.h>
+  //#include <threads.h>
+  #include <libdrm/drm.h>
+  #include <libdrm/drm_mode.h>
+
+
+typedef struct _CtxKMS CtxKMS;
+struct _CtxKMS
+{
+   CtxTiled tiled;
+   int           key_balance;
+   int           key_repeat;
+   int           lctrl;
+   int           lalt;
+   int           rctrl;
+
+   int          fb_fd;
+   char        *fb_path;
+   int          fb_bits;
+   int          fb_bpp;
+   int          fb_mapped_size;
+   //struct       fb_var_screeninfo vinfo;
+   //struct       fb_fix_screeninfo finfo;
+   int          vt;
+   int          tty;
+   int          is_kms;
+   cnd_t        cond;
+   mtx_t        mtx;
+   struct drm_mode_crtc crtc;
+};
+
+
+#if UINTPTR_MAX == 0xffFFffFF
+  #define fbdrmuint_t uint32_t
+#elif UINTPTR_MAX == 0xffFFffFFffFFffFF
+  #define fbdrmuint_t uint64_t
+#endif
+
+void *ctx_fbkms_new (CtxKMS *fb, int *width, int *height)
+{
+   int got_master = 0;
+   fb->fb_fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC);
+   if (!fb->fb_fd)
+     return NULL;
+   static fbdrmuint_t res_conn_buf[20]={0}; // this is static since its contents
+                                         // are used by the flip callback
+   fbdrmuint_t res_fb_buf[20]={0};
+   fbdrmuint_t res_crtc_buf[20]={0};
+   fbdrmuint_t res_enc_buf[20]={0};
+   struct   drm_mode_card_res res={0};
+
+   if (ioctl(fb->fb_fd, DRM_IOCTL_SET_MASTER, 0))
+     goto cleanup;
+   got_master = 1;
+
+   if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETRESOURCES, &res))
+     goto cleanup;
+   res.fb_id_ptr=(fbdrmuint_t)res_fb_buf;
+   res.crtc_id_ptr=(fbdrmuint_t)res_crtc_buf;
+   res.connector_id_ptr=(fbdrmuint_t)res_conn_buf;
+   res.encoder_id_ptr=(fbdrmuint_t)res_enc_buf;
+   if(ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETRESOURCES, &res))
+      goto cleanup;
+
+
+   unsigned int i;
+   for (i=0;i<res.count_connectors;i++)
+   {
+     struct drm_mode_modeinfo conn_mode_buf[20]={0};
+     fbdrmuint_t conn_prop_buf[20]={0},
+                     conn_propval_buf[20]={0},
+                     conn_enc_buf[20]={0};
+
+     struct drm_mode_get_connector conn={0};
+
+     conn.connector_id=res_conn_buf[i];
+
+     if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn))
+       goto cleanup;
+
+     conn.modes_ptr=(fbdrmuint_t)conn_mode_buf;
+     conn.props_ptr=(fbdrmuint_t)conn_prop_buf;
+     conn.prop_values_ptr=(fbdrmuint_t)conn_propval_buf;
+     conn.encoders_ptr=(fbdrmuint_t)conn_enc_buf;
+
+     if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETCONNECTOR, &conn))
+       goto cleanup;
+
+     //Check if the connector is OK to use (connected to something)
+     if (conn.count_encoders<1 || conn.count_modes<1 || !conn.encoder_id || !conn.connection)
+       continue;
+
+//------------------------------------------------------------------------------
+//Creating a dumb buffer
+//------------------------------------------------------------------------------
+     struct drm_mode_create_dumb create_dumb={0};
+     struct drm_mode_map_dumb    map_dumb={0};
+     struct drm_mode_fb_cmd      cmd_dumb={0};
+     create_dumb.width  = conn_mode_buf[0].hdisplay;
+     create_dumb.height = conn_mode_buf[0].vdisplay;
+     create_dumb.bpp   = 32;
+     create_dumb.flags = 0;
+     create_dumb.pitch = 0;
+     create_dumb.size  = 0;
+     create_dumb.handle = 0;
+     if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_dumb) ||
+         !create_dumb.handle)
+       goto cleanup;
+
+     cmd_dumb.width =create_dumb.width;
+     cmd_dumb.height=create_dumb.height;
+     cmd_dumb.bpp   =create_dumb.bpp;
+     cmd_dumb.pitch =create_dumb.pitch;
+     cmd_dumb.depth =24;
+     cmd_dumb.handle=create_dumb.handle;
+     if (ioctl(fb->fb_fd,DRM_IOCTL_MODE_ADDFB,&cmd_dumb))
+       goto cleanup;
+
+     map_dumb.handle=create_dumb.handle;
+     if (ioctl(fb->fb_fd,DRM_IOCTL_MODE_MAP_DUMB,&map_dumb))
+       goto cleanup;
+
+     void *base = mmap(0, create_dumb.size, PROT_READ | PROT_WRITE, MAP_SHARED,
+                       fb->fb_fd, map_dumb.offset);
+     if (!base)
+     {
+       goto cleanup;
+     }
+     *width  = create_dumb.width;
+     *height = create_dumb.height;
+
+     struct drm_mode_get_encoder enc={0};
+     enc.encoder_id=conn.encoder_id;
+     if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETENCODER, &enc))
+        goto cleanup;
+
+     fb->crtc.crtc_id=enc.crtc_id;
+     if (ioctl(fb->fb_fd, DRM_IOCTL_MODE_GETCRTC, &fb->crtc))
+        goto cleanup;
+
+     fb->crtc.fb_id=cmd_dumb.fb_id;
+     fb->crtc.set_connectors_ptr=(fbdrmuint_t)&res_conn_buf[i];
+     fb->crtc.count_connectors=1;
+     fb->crtc.mode=conn_mode_buf[0];
+     fb->crtc.mode_valid=1;
+     return base;
+   }
+cleanup:
+   if (got_master)
+     ioctl(fb->fb_fd, DRM_IOCTL_DROP_MASTER, 0);
+   fb->fb_fd = 0;
+   return NULL;
+}
+
+void ctx_fbkms_flip (CtxKMS *fb)
+{
+  if (!fb->fb_fd)
+    return;
+  ioctl(fb->fb_fd, DRM_IOCTL_MODE_SETCRTC, &fb->crtc);
+}
+
+void ctx_fbkms_close (CtxKMS *fb)
+{
+  if (!fb->fb_fd)
+    return;
+  ioctl(fb->fb_fd, DRM_IOCTL_DROP_MASTER, 0);
+  close (fb->fb_fd);
+  fb->fb_fd = 0;
+}
+
+static void ctx_kms_flip (CtxKMS *fb)
+{
+  if (fb->is_kms)
+    ctx_fbkms_flip (fb);
+#if 0
+  else
+    ioctl (fb->fb_fd, FBIOPAN_DISPLAY, &fb->vinfo);
+#endif
+}
+
+inline static uint32_t
+ctx_swap_red_green2 (uint32_t orig)
+{
+  uint32_t  green_alpha = (orig & 0xff00ff00);
+  uint32_t  red_blue    = (orig & 0x00ff00ff);
+  uint32_t  red         = red_blue << 16;
+  uint32_t  blue        = red_blue >> 16;
+  return green_alpha | red | blue;
+}
+
+static void ctx_kms_show_frame (CtxKMS *fb, int block)
+{
+  CtxTiled *tiled = (void*)fb;
+  if (tiled->shown_frame == tiled->render_frame)
+  {
+    if (block == 0) // consume event call
+    {
+      ctx_tiled_draw_cursor ((CtxTiled*)fb);
+      ctx_kms_flip (fb);
+    }
+    return;
+  }
+
+  if (block)
+  {
+    int count = 0;
+    while (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+    {
+      usleep (500);
+      count ++;
+      if (count > 500)
+      {
+        tiled->shown_frame = tiled->render_frame;
+        return;
+      }
+    }
+  }
+  else
+  {
+    if (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+      return;
+  }
+
+    if (tiled->vt_active)
+    {
+       int pre_skip = tiled->min_row * tiled->height/CTX_HASH_ROWS * tiled->width;
+       int post_skip = (CTX_HASH_ROWS-tiled->max_row-1) * tiled->height/CTX_HASH_ROWS * tiled->width;
+
+       int rows = ((tiled->width * tiled->height) - pre_skip - post_skip)/tiled->width;
+
+       int col_pre_skip = tiled->min_col * tiled->width/CTX_HASH_COLS;
+       int col_post_skip = (CTX_HASH_COLS-tiled->max_col-1) * tiled->width/CTX_HASH_COLS;
+       if (_ctx_damage_control)
+       {
+         pre_skip = post_skip = col_pre_skip = col_post_skip = 0;
+       }
+
+       if (pre_skip < 0) pre_skip = 0;
+       if (post_skip < 0) post_skip = 0;
+
+
+       if (tiled->min_row == 100){
+          pre_skip = 0;
+          post_skip = 0;
+          // not when kms ?
+#if 0
+     __u32 dummy = 0;
+          ioctl (fb->fb_fd, FBIO_WAITFORVSYNC, &dummy);
+#endif
+          ctx_tiled_undraw_cursor ((CtxTiled*)fb);
+       }
+       else
+       {
+
+      tiled->min_row = 100;
+      tiled->max_row = 0;
+      tiled->min_col = 100;
+      tiled->max_col = 0;
+
+     // not when kms ?
+ #if 0
+     __u32 dummy = 0;
+     ioctl (fb->fb_fd, FBIO_WAITFORVSYNC, &dummy);
+#endif
+     ctx_tiled_undraw_cursor ((CtxTiled*)fb);
+     switch (fb->fb_bits)
+     {
+       case 32:
+#if 1
+         {
+           uint8_t *dst = tiled->fb + pre_skip * 4;
+           uint8_t *src = tiled->pixels + pre_skip * 4;
+           int pre = col_pre_skip * 4;
+           int post = col_post_skip * 4;
+           int core = tiled->width * 4 - pre - post;
+           for (int i = 0; i < rows; i++)
+           {
+             dst  += pre;
+             src  += pre;
+             memcpy (dst, src, core);
+             src  += core;
+             dst  += core;
+             dst  += post;
+             src  += post;
+           }
+         }
+#else
+         { int count = tiled->width * tiled->height;
+           const uint32_t *src = (void*)tiled->pixels;
+           uint32_t *dst = (void*)tiled->fb;
+           count-= pre_skip;
+           src+= pre_skip;
+           dst+= pre_skip;
+           count-= post_skip;
+           while (count -- > 0)
+           {
+             dst[0] = ctx_swap_red_green2 (src[0]);
+             src++;
+             dst++;
+           }
+         }
+#endif
+         break;
+         /* XXX  :  note: converting a scanline (or all) to target and
+          * then doing a bulk memcpy be faster (at least with som /dev/fbs)  */
+       case 24:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 3;
+           count-= post_skip;
+           while (count -- > 0)
+           {
+             dst[0] = src[0];
+             dst[1] = src[1];
+             dst[2] = src[2];
+             dst+=3;
+             src+=4;
+           }
+         }
+         break;
+       case 16:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 2;
+           while (count -- > 0)
+           {
+             int big = ((src[0] >> 3)) +
+                ((src[1] >> 2)<<5) +
+                ((src[2] >> 3)<<11);
+             dst[0] = big & 255;
+             dst[1] = big >>  8;
+             dst+=2;
+             src+=4;
+           }
+         }
+         break;
+       case 15:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip * 2;
+           while (count -- > 0)
+           {
+             int big = ((src[2] >> 3)) +
+                       ((src[1] >> 2)<<5) +
+                       ((src[0] >> 3)<<10);
+             dst[0] = big & 255;
+             dst[1] = big >>  8;
+             dst+=2;
+             src+=4;
+           }
+         }
+         break;
+       case 8:
+         { int count = tiled->width * tiled->height;
+           const uint8_t *src = tiled->pixels;
+           uint8_t *dst = tiled->fb;
+           count-= post_skip;
+           count-= pre_skip;
+           src+= pre_skip * 4;
+           dst+= pre_skip;
+           while (count -- > 0)
+           {
+             dst[0] = ((src[0] >> 5)) +
+                      ((src[1] >> 5)<<3) +
+                      ((src[2] >> 6)<<6);
+             dst+=1;
+             src+=4;
+           }
+         }
+         break;
+     }
+    }
+    ctx_tiled_cursor_drawn = 0;
+    ctx_tiled_draw_cursor (&fb->tiled);
+    ctx_kms_flip (fb);
+    tiled->shown_frame = tiled->render_frame;
+  }
+}
+
+void ctx_kms_consume_events (Ctx *ctx)
+{
+  ctx_fb_global = ctx;
+  CtxKMS *fb = (void*)ctx->backend;
+  ctx_kms_show_frame (fb, 0);
+  event_check_pending (&fb->tiled);
+}
+
+inline static void ctx_kms_start_frame (Ctx *ctx)
+{
+  ctx_kms_show_frame ((CtxKMS*)ctx->backend, 1);
+}
+
+void ctx_kms_destroy (CtxKMS *fb)
+{
+  if (fb->is_kms)
+  {
+    ctx_fbkms_close (fb);
+  }
+#ifdef __linux__
+  ioctl (0, KDSETMODE, KD_TEXT);
+#endif
+  if (system("stty sane")){};
+  ctx_tiled_destroy ((CtxTiled*)fb);
+  //ctx_free (fb);
+}
+
+//static unsigned char *fb_icc = NULL;
+//static long fb_icc_length = 0;
+
+#if 0
+static CtxKMS *ctx_fb = NULL;
+static void vt_switch_cb (int sig)
+{
+  CtxTiled *tiled = (void*)ctx_fb;
+  if (sig == SIGUSR1)
+  {
+    if (ctx_fb->is_kms)
+      ioctl(ctx_fb->fb_fd, DRM_IOCTL_DROP_MASTER, 0);
+    ioctl (0, VT_RELDISP, 1);
+    ctx_fb->vt_active = 0;
+#if 0
+    ioctl (0, KDSETMODE, KD_TEXT);
+#endif
+  }
+  else
+  {
+    ioctl (0, VT_RELDISP, VT_ACKACQ);
+    ctx_fb->vt_active = 1;
+    // queue draw
+    tiled->render_frame = ++tiled->frame;
+#if 0
+    ioctl (0, KDSETMODE, KD_GRAPHICS);
+#endif
+    if (ctx_fb->is_kms)
+    {
+      ioctl(ctx_fb->fb_fd, DRM_IOCTL_SET_MASTER, 0);
+      ctx_kms_flip (ctx_fb);
+    }
+    else
+    {
+      tiled->ctx->dirty=1;
+
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+      for (int col = 0; col < CTX_HASH_COLS; col++)
+      {
+        tiled->hashes[(row * CTX_HASH_COLS + col) *  4] += 1;
+      }
+    }
+  }
+}
+#endif
+
+static int ctx_kms_get_mice_fd (Ctx *ctx)
+{
+  //CtxKMS *fb = (void*)ctx->backend;
+  return _ctx_mice_fd;
+}
+
+Ctx *ctx_new_kms (int width, int height)
+{
+#if CTX_RASTERIZER
+  CtxKMS *fb = ctx_calloc (sizeof (CtxKMS), 1);
+  CtxBackend *backend = (CtxBackend*)fb;
+
+  CtxTiled *tiled = (void*)fb;
+  tiled->fb = ctx_fbkms_new (fb, &tiled->width, &tiled->height);
+  if (tiled->fb)
+  {
+    fb->is_kms         = 1;
+    width              = tiled->width;
+    height             = tiled->height;
+    /*
+       we're ignoring the input width and height ,
+       maybe turn them into properties - for
+       more generic handling.
+     */
+    fb->fb_mapped_size = tiled->width * tiled->height * 4;
+    fb->fb_bits        = 32;
+    fb->fb_bpp         = 4;
+  }
+  if (!tiled->fb)
+    return NULL;
+  tiled->pixels = ctx_calloc (fb->fb_mapped_size, 1);
+
+#if CTX_BABL
+  ctx_get_contents ("file:///tmp/ctx.icc", &sdl_icc, &sdl_icc_length);
+#endif
+
+  backend->ctx = _ctx_new_drawlist (width, height);
+  tiled->ctx_copy = _ctx_new_drawlist (width, height);
+
+  tiled->width    = width;
+  tiled->height   = height;
+  tiled->show_frame = (void*)ctx_kms_show_frame;
+
+  ctx_set_backend (backend->ctx, fb);
+  ctx_set_backend (tiled->ctx_copy, fb);
+  ctx_set_texture_cache (tiled->ctx_copy, backend->ctx);
+
+  backend->end_frame = ctx_tiled_end_frame;
+  backend->start_frame = ctx_kms_start_frame;
+  backend->destroy = (void*)ctx_kms_destroy;
+  backend->process = (void*)ctx_drawlist_process;
+  backend->consume_events = ctx_kms_consume_events;
+  backend->get_event_fds = (void*) ctx_fb_get_event_fds;
+  backend->set_clipboard = ctx_headless_set_clipboard;
+  backend->get_clipboard = ctx_headless_get_clipboard;
+
+  for (int i = 0; i < _ctx_max_threads; i++)
+  {
+    tiled->host[i] = ctx_new_for_framebuffer (tiled->pixels,
+                   tiled->width/CTX_HASH_COLS, tiled->height/CTX_HASH_ROWS,
+                   tiled->width * 4, CTX_FORMAT_BGRA8); // this format
+                                  // is overriden in  thread
+    ((CtxRasterizer*)(tiled->host[i]->backend))->swap_red_green = 1;
+    ctx_set_texture_source (tiled->host[i], backend->ctx);
+  }
+
+  mtx_init (&tiled->mtx, mtx_plain);
+  cnd_init (&tiled->cond);
+
+#define start_thread(no)\
+  if(_ctx_max_threads>no){ \
+    static void *args[2]={(void*)no, };\
+    thrd_t tid;\
+    args[1]=fb;\
+    thrd_create (&tid, (void*)ctx_tiled_render_fun, args);\
+  }
+  start_thread(0);
+  start_thread(1);
+  start_thread(2);
+  start_thread(3);
+  start_thread(4);
+  start_thread(5);
+  start_thread(6);
+  start_thread(7);
+  start_thread(8);
+  start_thread(9);
+  start_thread(10);
+  start_thread(11);
+  start_thread(12);
+  start_thread(13);
+  start_thread(14);
+  start_thread(15);
+#undef start_thread
+
+
+  EvSource *kb = evsource_kb_raw_new ();
+  if (!kb) kb = evsource_kb_term_new ();
+  if (kb)
+  {
+    tiled->evsource[tiled->evsource_count++] = kb;
+    kb->priv = fb;
+  }
+  EvSource *mice  = evsource_mice_new ();
+  if (mice)
+  {
+    tiled->evsource[tiled->evsource_count++] = mice;
+    mice->priv = fb;
+  }
+
+  tiled->vt_active = 1;
+#ifdef __linux__
+  ioctl(0, KDSETMODE, KD_GRAPHICS);
+#endif
+  tiled->shown_frame = tiled->render_frame;
+#if 0
+  signal (SIGUSR1, vt_switch_cb);
+  signal (SIGUSR2, vt_switch_cb);
+
+  struct vt_stat st;
+  if (ioctl (0, VT_GETSTATE, &st) == -1)
+  {
+    ctx_log ("VT_GET_MODE on vt %i failed\n", fb->vt);
+    return NULL;
+  }
+
+  fb->vt = st.v_active;
+
+  struct vt_mode mode;
+  mode.mode   = VT_PROCESS;
+  mode.relsig = SIGUSR1;
+  mode.acqsig = SIGUSR2;
+  if (ioctl (0, VT_SETMODE, &mode) < 0)
+  {
+    ctx_log ("VT_SET_MODE on vt %i failed\n", fb->vt);
+    return NULL;
+  }
+#endif
+
+  return backend->ctx;
+#else
+  return NULL;
+#endif
+}
+#endif
+#endif
+
+#if CTX_SDL
+
+/**/
+
+typedef struct _CtxSDL CtxSDL;
+struct _CtxSDL
+{
+   CtxTiled  tiled;
+   /* where we diverge from fb*/
+   int           key_balance;
+   int           key_repeat;
+   int           lctrl;
+   int           lalt;
+   int           rctrl;
+   int           lshift;
+   int           rshift;
+
+   SDL_Window   *window;
+   SDL_Renderer *backend;
+   SDL_Texture  *texture;
+
+   int           fullscreen;
+};
+
+
+
+int ctx_show_fps = 1;
+void ctx_sdl_set_title (void *self, const char *new_title)
+{
+   Ctx *ctx = (Ctx*)self;
+   CtxSDL *sdl = (CtxSDL*)ctx->backend;
+   if (!ctx_show_fps)
+   SDL_SetWindowTitle (sdl->window, new_title);
+}
+
+static long ctx_sdl_start_time = 0;
+
+static void ctx_sdl_show_frame (CtxSDL *sdl, int block)
+{
+  CtxTiled *tiled = &sdl->tiled;
+  CtxBackend *backend = (CtxBackend*)tiled;
+  if (tiled->shown_cursor != backend->ctx->cursor)
+  {
+    tiled->shown_cursor = backend->ctx->cursor;
+    SDL_Cursor *new_cursor =  NULL;
+    switch (tiled->shown_cursor)
+    {
+      case CTX_CURSOR_UNSET: // XXX: document how this differs from none
+                             //      perhaps falling back to arrow?
+        break;
+      case CTX_CURSOR_NONE:
+        new_cursor = NULL;
+        break;
+      case CTX_CURSOR_ARROW:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
+        break;
+      case CTX_CURSOR_CROSSHAIR:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
+        break;
+      case CTX_CURSOR_WAIT:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT);
+        break;
+      case CTX_CURSOR_HAND:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
+        break;
+      case CTX_CURSOR_IBEAM:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
+        break;
+      case CTX_CURSOR_MOVE:
+      case CTX_CURSOR_RESIZE_ALL:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
+        break;
+      case CTX_CURSOR_RESIZE_N:
+      case CTX_CURSOR_RESIZE_S:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
+        break;
+      case CTX_CURSOR_RESIZE_E:
+      case CTX_CURSOR_RESIZE_W:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
+        break;
+      case CTX_CURSOR_RESIZE_NE:
+      case CTX_CURSOR_RESIZE_SW:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
+        break;
+      case CTX_CURSOR_RESIZE_NW:
+      case CTX_CURSOR_RESIZE_SE:
+        new_cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
+        break;
+    }
+    if (new_cursor)
+    {
+      SDL_Cursor *old_cursor = SDL_GetCursor();
+      SDL_SetCursor (new_cursor);
+      SDL_ShowCursor (1);
+      if (old_cursor)
+        SDL_FreeCursor (old_cursor);
+    }
+    else
+    {
+      SDL_ShowCursor (0);
+    }
+  }
+
+  if (tiled->shown_frame == tiled->render_frame)
+  {
+    return;
+  }
+
+  if (block)
+  {
+    int count = 0;
+    while (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+    {
+      usleep (500);
+      count ++;
+      if (count > 900)
+      {
+        tiled->shown_frame = tiled->render_frame;
+        fprintf (stderr, "[drop]");
+        return;
+      }
+    }
+  }
+  else
+  {
+    if (ctx_tiled_threads_done (tiled) != _ctx_max_threads)
+      return;
+  }
+
+
+  if (tiled->min_row == 100)
+  {
+  }
+  else
+  {
+    int x = tiled->min_col * tiled->width/CTX_HASH_COLS;
+    int y = tiled->min_row * tiled->height/CTX_HASH_ROWS;
+    int x1 = (tiled->max_col+1) * tiled->width/CTX_HASH_COLS;
+    int y1 = (tiled->max_row+1) * tiled->height/CTX_HASH_ROWS;
+
+    if (_ctx_damage_control)
+    {
+      x = 0;
+      y = 0;
+      x1 = tiled->width;
+      y1 = tiled->height;
+    }
+
+    int width = x1 - x;
+    int height = y1 - y;
+    tiled->min_row = 100;
+    tiled->max_row = 0;
+    tiled->min_col = 100;
+    tiled->max_col = 0;
+
+    SDL_Rect r = {x, y, width, height};
+    SDL_UpdateTexture (sdl->texture, &r,
+                      (void*)(tiled->pixels + y * tiled->width * 4 + x * 4),
+                      tiled->width * 4);
+    SDL_RenderClear (sdl->backend);
+    SDL_RenderCopy (sdl->backend, sdl->texture, NULL, NULL);
+    SDL_RenderPresent (sdl->backend);
+
+
+  if (ctx_show_fps)
+  {
+    static char tmp_title[1024];
+    static uint64_t prev_time = 0;
+    uint64_t time = ctx_ticks ();
+    float fps = 1000000.0f/  (time - ctx_sdl_start_time);
+    float fps2 = 1000000.0f/  (time - prev_time);
+    prev_time = time;
+    static float fps_avg = 0.0f;
+
+    if (time - prev_time < 1000 * 1000 * 0.05f)
+    fps_avg = (fps_avg * 0.9f + fps2 *  0.1f);
+
+    sprintf (tmp_title, "FPS: %.1f %.1f %.1f", (double)(fps2*0.75f+fps_avg*0.25f), (double)fps2, (double)fps);
+#if CTX_SHAPE_CACHE 
+    sprintf (&tmp_title[strlen(tmp_title)], " shape hit rate: %.2f", (double)ctx_shape_cache_rate);
+#endif
+
+    SDL_SetWindowTitle (sdl->window, tmp_title);
+  }
+  }
+  tiled->shown_frame = tiled->render_frame;
+}
+
+static const char *ctx_sdl_keysym_to_name (unsigned int sym, int *r_keycode)
+{
+  static char buf[16]="";
+  buf[ctx_unichar_to_utf8 (sym, (void*)buf)]=0;
+  int scan_code = sym;
+  const char *name = &buf[0];
+   switch (sym)
+   {
+     case SDLK_RSHIFT: name="shift";scan_code = 16 ; break;
+     case SDLK_LSHIFT: name="shift";scan_code = 16 ; break;
+     case SDLK_LCTRL: name="control";scan_code = 17 ; break;
+     case SDLK_RCTRL: name="control";scan_code = 17 ; break;
+     case SDLK_LALT:  name="alt";scan_code = 18 ; break;
+     case SDLK_RALT:  name="alt";scan_code = 18 ; break;
+     case SDLK_CAPSLOCK: name = "capslock"; scan_code = 20 ; break;
+     //case SDLK_NUMLOCK: name = "numlock"; scan_code = 144 ; break;
+     //case SDLK_SCROLLLOCK: name = "scrollock"; scan_code = 145 ; break;
+
+     case SDLK_F1:     name = "F1"; scan_code = 112; break;
+     case SDLK_F2:     name = "F2"; scan_code = 113; break;
+     case SDLK_F3:     name = "F3"; scan_code = 114; break;
+     case SDLK_F4:     name = "F4"; scan_code = 115; break;
+     case SDLK_F5:     name = "F5"; scan_code = 116; break;
+     case SDLK_F6:     name = "F6"; scan_code = 117; break;
+     case SDLK_F7:     name = "F7"; scan_code = 118; break;
+     case SDLK_F8:     name = "F8"; scan_code = 119; break;
+     case SDLK_F9:     name = "F9"; scan_code = 120; break;
+     case SDLK_F10:    name = "F10"; scan_code = 121; break;
+     case SDLK_F11:    name = "F11"; scan_code = 122; break;
+     case SDLK_F12:    name = "F12"; scan_code = 123; break;
+     case SDLK_ESCAPE: name = "escape"; break;
+     case SDLK_DOWN:   name = "down"; scan_code = 40; break;
+     case SDLK_LEFT:   name = "left"; scan_code = 37; break;
+     case SDLK_UP:     name = "up"; scan_code = 38;  break;
+     case SDLK_RIGHT:  name = "right"; scan_code = 39; break;
+     case SDLK_BACKSPACE: name = "backspace"; break;
+     case SDLK_SPACE:  name = "space"; break;
+     case SDLK_TAB:    name = "tab"; break;
+     case SDLK_DELETE: name = "delete"; scan_code = 46; break;
+     case SDLK_INSERT: name = "insert"; scan_code = 45; break;
+     case SDLK_RETURN:
+       //if (key_repeat == 0) // return never should repeat
+       name = "return";   // on a DEC like terminal
+       break;
+     case SDLK_HOME:     name = "home"; scan_code = 36; break;
+     case SDLK_END:      name = "end"; scan_code = 35; break;
+     case SDLK_PAGEDOWN: name = "page-down"; scan_code = 34; break;
+     case SDLK_PAGEUP:   name = "page-up"; scan_code = 33; break;
+     case ',': scan_code = 188; break;
+     case '.': scan_code = 190; break;
+     case '/': scan_code = 191; break;
+     case '`': scan_code = 192; break;
+     case '[': scan_code = 219; break;
+     case '\\': scan_code = 220; break;
+     case ']':  scan_code = 221; break;
+     case '\'': scan_code = 222; break;
+     default:
+       ;
+   }
+   if (sym >= 'a' && sym <='z') scan_code -= 32;
+   if (r_keycode)
+   {
+     *r_keycode = scan_code;
+   }
+   return name;
+}
+
+void ctx_sdl_consume_events (Ctx *ctx)
+{
+  static float x = 0.0f;
+  static float y = 0.0f;
+  CtxBackend *backend = (void*)ctx->backend;
+  CtxTiled    *tiled = (void*)backend;
+  CtxSDL      *sdl = (void*)backend;
+  SDL_Event event;
+  int got_events = 0;
+
+  ctx_sdl_show_frame (sdl, 0);
+
+  while (SDL_PollEvent (&event))
+  {
+    got_events ++;
+    switch (event.type)
+    {
+      case SDL_MOUSEBUTTONDOWN:
+        SDL_CaptureMouse (1);
+        ctx_pointer_press (ctx, event.button.x, event.button.y, event.button.button, 0);
+        break;
+      case SDL_MOUSEBUTTONUP:
+        SDL_CaptureMouse (0);
+        ctx_pointer_release (ctx, event.button.x, event.button.y, event.button.button, 0);
+        break;
+      case SDL_MOUSEMOTION:
+        //  XXX : look at mask and generate motion for each pressed
+        //        button
+        ctx_pointer_motion (ctx, event.motion.x, event.motion.y, 1, 0);
+        x = event.motion.x;
+        y = event.motion.y;
+        break;
+      case SDL_FINGERMOTION:
+        ctx_pointer_motion (ctx, event.tfinger.x * tiled->width, event.tfinger.y * tiled->height,
+            (event.tfinger.fingerId%10) + 4, 0);
+        break;
+      case SDL_FINGERDOWN:
+        {
+        static int fdowns = 0;
+        fdowns ++;
+        if (fdowns > 1) // the very first finger down from SDL seems to be
+                        // mirrored as mouse events, later ones not - at
+                        // least under wayland
+        {
+          ctx_pointer_press (ctx, event.tfinger.x * tiled->width, event.tfinger.y * tiled->height, 
+          (event.tfinger.fingerId%10) + 4, 0);
+        }
+        }
+        break;
+      case SDL_FINGERUP:
+        ctx_pointer_release (ctx, event.tfinger.x * tiled->width, event.tfinger.y * tiled->height,
+          (event.tfinger.fingerId%10) + 4, 0);
+        break;
+#if 1
+      case SDL_TEXTINPUT:
+    //  if (!active)
+    //    break;
+        if (!sdl->lctrl && !sdl->rctrl && !sdl->lalt 
+           //&& ( (vt && vt_keyrepeat (vt) ) || (key_repeat==0) )
+           )
+          {
+            const char *name = event.text.text;
+            int keycode = 0;
+            if (!strcmp (name, " ") ) { name = "space"; }
+            if (name[0] && name[1] == 0)
+            {
+              keycode = name[0];
+              keycode = toupper (keycode);
+              switch (keycode)
+              {
+                case '.':  keycode = 190; break;
+                case ';':  keycode = 59; break;
+                case ',':  keycode = 188; break;
+                case '/':  keycode = 191; break;
+                case '\'': keycode = 222; break;
+                case '`':  keycode = 192; break;
+                case '[':  keycode = 219; break;
+                case ']':  keycode = 221; break;
+                case '\\': keycode = 220; break;
+              }
+            }
+            ctx_key_press (ctx, keycode, name, 0);
+          }
+        break;
+#endif
+      case SDL_KEYDOWN:
+        {
+          char buf[32] = "";
+          const char *name = buf;
+          if (!event.key.repeat)
+          {
+            sdl->key_balance ++;
+            sdl->key_repeat = 0;
+          }
+          else
+          {
+            sdl->key_repeat ++;
+          }
+          int keycode;
+          name = ctx_sdl_keysym_to_name (event.key.keysym.sym, &keycode);
+
+          ctx_key_down (ctx, keycode, name, 0);
+
+          if (ctx_utf8_strlen (name) > 1 ||
+              (ctx->events.modifier_state &
+                                           (CTX_MODIFIER_STATE_CONTROL|
+                                            CTX_MODIFIER_STATE_ALT))
+              )
+          if (strcmp(name, "space"))
+            ctx_key_press (ctx, keycode, name, 0);
+        }
+        break;
+      case SDL_KEYUP:
+        {
+           sdl->key_balance --;
+           int keycode;
+           const char *name = ctx_sdl_keysym_to_name (event.key.keysym.sym, &keycode);
+           ctx_key_up (ctx, keycode, name, 0);
+        }
+        break;
+      case SDL_QUIT:
+        ctx_quit (ctx);
+        break;
+      case SDL_DROPFILE:
+        ctx_pointer_drop (ctx, x, y, 0, 0, event.drop.file);
+        break;
+      case SDL_DROPTEXT:
+        if (!strncmp ("file://", event.drop.file, 7))
+          ctx_pointer_drop (ctx, x, y, 0, 0, event.drop.file + 7);
+        break;
+      case SDL_WINDOWEVENT:
+        if (event.window.event == SDL_WINDOWEVENT_RESIZED)
+        {
+          ctx_sdl_show_frame (sdl, 1);
+          int width = event.window.data1;
+          int height = event.window.data2;
+          SDL_DestroyTexture (sdl->texture);
+          sdl->texture = SDL_CreateTexture (sdl->backend, SDL_PIXELFORMAT_ABGR8888,
+                          SDL_TEXTUREACCESS_STREAMING, width, height);
+          ctx_free (tiled->pixels);
+          tiled->pixels = ctx_calloc (4, width * height);
+
+          tiled->width  = width;
+          tiled->height = height;
+          ctx_set_size (backend->ctx, width, height);
+          ctx_set_size (tiled->ctx_copy, width, height);
+        }
+        break;
+    }
+  }
+}
+
+static void ctx_sdl_set_clipboard (Ctx *ctx, const char *text)
+{
+  if (text)
+    SDL_SetClipboardText (text);
+}
+
+static char *ctx_sdl_get_clipboard (Ctx *ctx)
+{
+  return SDL_GetClipboardText ();
+}
+
+
+inline static void ctx_sdl_start_frame (Ctx *ctx)
+{
+  CtxSDL  *sdl = (CtxSDL*)ctx->backend;
+  ctx_sdl_show_frame (sdl, 1);
+  ctx_sdl_start_time = ctx_ticks ();
+}
+
+void ctx_sdl_destroy (CtxSDL *sdl)
+{
+  if (sdl->texture)
+    SDL_DestroyTexture (sdl->texture);
+  if (sdl->backend)
+    SDL_DestroyRenderer (sdl->backend);
+  if (sdl->window)
+  {
+    SDL_DestroyWindow (sdl->window);
+  }
+  sdl->texture = NULL;sdl->backend = NULL;sdl->window = NULL;
+
+  ctx_tiled_destroy ((CtxTiled*)sdl);
+}
+
+void ctx_sdl_set_fullscreen (Ctx *ctx, int val)
+{
+  CtxSDL *sdl = (void*)ctx->backend;
+
+  if (val)
+  {
+    SDL_SetWindowFullscreen (sdl->window, SDL_WINDOW_FULLSCREEN_DESKTOP);
+  }
+  else
+  {
+    SDL_SetWindowFullscreen (sdl->window, 0);
+  }
+  // XXX we're presuming success
+  sdl->fullscreen = val;
+}
+int ctx_sdl_get_fullscreen (Ctx *ctx)
+{
+  CtxSDL *sdl = (void*)ctx->backend;
+  return sdl->fullscreen;
+}
+
+Ctx *ctx_new_sdl (int width, int height)
+{
+#if CTX_RASTERIZER
+
+  CtxSDL *sdl = (CtxSDL*)ctx_calloc (sizeof (CtxSDL), 1);
+  CtxTiled *tiled = (void*)sdl;
+  CtxBackend *backend = (CtxBackend*)sdl;
+#if CTX_BABL
+  ctx_get_contents ("file:///tmp/ctx.icc", &sdl_icc, &sdl_icc_length);
+#endif
+  if (width <= 0 || height <= 0)
+  {
+    width  = 1920;
+    height = 1080;
+  }
+  sdl->window = SDL_CreateWindow("ctx", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN|SDL_WINDOW_RESIZABLE);
+  //sdl->backend = SDL_CreateRenderer (sdl->window, -1, SDL_RENDERER_SOFTWARE);
+  sdl->backend = SDL_CreateRenderer (sdl->window, -1, 0);
+  if (!sdl->backend)
+  {
+     ctx_destroy (backend->ctx);
+     ctx_free (sdl);
+     return NULL;
+  }
+  sdl->fullscreen = 0;
+
+
+  ctx_show_fps = getenv ("CTX_SHOW_FPS")!=NULL;
+
+  sdl->texture = SDL_CreateTexture (sdl->backend,
+        SDL_PIXELFORMAT_ABGR8888,
+        SDL_TEXTUREACCESS_STREAMING,
+        width, height);
+
+  SDL_StartTextInput ();
+  SDL_EnableScreenSaver ();
+  SDL_GL_SetSwapInterval (1);
+
+  backend->ctx      = _ctx_new_drawlist (width, height);
+  tiled->ctx_copy = _ctx_new_drawlist (width, height);
+  tiled->width    = width;
+  tiled->height   = height;
+  tiled->cols     = 80;
+  tiled->rows     = 20;
+  ctx_set_backend (backend->ctx, sdl);
+  ctx_set_backend (tiled->ctx_copy, sdl);
+  ctx_set_texture_cache (tiled->ctx_copy, backend->ctx);
+
+  tiled->pixels = (uint8_t*)ctx_malloc (width * height * 4);
+  tiled->show_frame = (void*)ctx_sdl_show_frame;
+
+
+  backend->set_windowtitle = (void*)ctx_sdl_set_title;
+  backend->end_frame = ctx_tiled_end_frame;
+  backend->process = (void*)ctx_drawlist_process;
+  backend->start_frame = ctx_sdl_start_frame;
+  backend->destroy = (void*)ctx_sdl_destroy;
+  backend->consume_events = ctx_sdl_consume_events;
+
+  backend->set_clipboard = ctx_sdl_set_clipboard;
+  backend->get_clipboard = ctx_sdl_get_clipboard;
+
+  for (int i = 0; i < _ctx_max_threads; i++)
+  {
+    tiled->host[i] = ctx_new_for_framebuffer (tiled->pixels,
+                     tiled->width/CTX_HASH_COLS, tiled->height/CTX_HASH_ROWS,
+                     tiled->width * 4, CTX_FORMAT_RGBA8);
+    ctx_set_texture_source (tiled->host[i], backend->ctx);
+  }
+
+  mtx_init (&tiled->mtx, mtx_plain);
+  cnd_init (&tiled->cond);
+
+#define start_thread(no)\
+  if(_ctx_max_threads>no){ \
+    static void *args[2]={(void*)no, };\
+    thrd_t tid;\
+    args[1]=sdl;\
+    thrd_create (&tid, (void*)ctx_tiled_render_fun, args);\
+  }
+  start_thread(0);
+  start_thread(1);
+  start_thread(2);
+  start_thread(3);
+  start_thread(4);
+  start_thread(5);
+  start_thread(6);
+  start_thread(7);
+  start_thread(8);
+  start_thread(9);
+  start_thread(10);
+  start_thread(11);
+  start_thread(12);
+  start_thread(13);
+  start_thread(14);
+  start_thread(15);
+#undef start_thread
+
+  return backend->ctx;
+#else
+  return NULL;
+#endif
+}
+#endif
+
+#if CTX_TERMINAL_EVENTS
+
+#if !__COSMOPOLITAN__
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#endif
+
+typedef struct CtxTermCell
+{
+  char    utf8[5];
+  uint8_t fg[4];
+  uint8_t bg[4];
+
+  char    prev_utf8[5];
+  uint8_t prev_fg[4];
+  uint8_t prev_bg[4];
+} CtxTermCell;
+
+typedef struct CtxTermLine
+{
+  CtxTermCell *cells;
+  int maxcol;
+  int size;
+} CtxTermLine;
+
+typedef enum
+{
+  CTX_TERM_ASCII,
+  CTX_TERM_ASCII_MONO,
+  CTX_TERM_SEXTANT,
+  CTX_TERM_BRAILLE_MONO,
+  CTX_TERM_BRAILLE,
+  CTX_TERM_QUARTER,
+} CtxTermMode;
+
+typedef struct _CtxTerm CtxTerm;
+struct _CtxTerm
+{
+   CtxBackend  backender;
+   int         width;
+   int         height;
+   int         cols;
+   int         rows;
+   int         was_down;
+
+   uint8_t    *pixels;
+
+   Ctx        *host;
+   CtxList    *lines;
+   CtxTermMode mode;
+};
+
+static int ctx_term_ch = 8;
+static int ctx_term_cw = 8;
+
+void ctx_term_set (CtxTerm *term,
+                      int col, int row, const char *utf8,
+                      uint8_t *fg, uint8_t *bg)
+{
+  if (col < 1 || row < 1 || col > term->cols  || row > term->rows) return;
+  while (ctx_list_length (term->lines) < row)
+  {
+    ctx_list_append (&term->lines, ctx_calloc (sizeof (CtxTermLine), 1));
+  }
+  CtxTermLine *line = ctx_list_nth_data (term->lines, row-1);
+  assert (line);
+  if (line->size < col)
+  {
+     int new_size = ((col + 128)/128)*128;
+     line->cells = ctx_realloc (line->cells, line->size, sizeof (CtxTermCell) * new_size);
+     memset (&line->cells[line->size], 0, sizeof (CtxTermCell) * (new_size - line->size) );
+     line->size = new_size;
+  }
+  if (col > line->maxcol) line->maxcol = col;
+  strncpy (line->cells[col-1].utf8, (char*)utf8, 4);
+  memcpy  (line->cells[col-1].fg, fg, 4);
+  memcpy  (line->cells[col-1].bg, bg, 4);
+}
+
+static int _ctx_term256 = 0; // XXX TODO implement autodetect for this
+static long _ctx_curfg = -1;
+static long _ctx_curbg = -1;
+
+static long ctx_rgb_to_long (int r,int g, int b)
+{
+  return r * 256 * 256 + g * 256 + b;
+}
+
+
+static void ctx_term_set_fg (int red, int green, int blue)
+{
+  long lc = ctx_rgb_to_long (red, green, blue);
+  if (lc == _ctx_curfg)
+    return;
+  _ctx_curfg=lc;
+  if (_ctx_term256 == 0)
+  {
+    fprintf(stderr, "\e[38;2;%i;%i;%im", red,green,blue);
+  }
+  else
+  {
+    int gray = (int)((green /255.0f) * 24 + 0.5f);
+    int r    = (int)((red/255.0f)    * 6 + 0.5f);
+    int g    = (int)((green/255.0f)  * 6 + 0.5f);
+    int b    = (int)((blue/255.0f)   * 6 + 0.5f);
+    if (gray > 23) gray = 23;
+
+    if (r > 5) r = 5;
+    if (g > 5) g = 5;
+    if (b > 5) b = 5;
+
+    if (((int)(r/1.66)== (int)(g/1.66)) && ((int)(g/1.66) == ((int)(b/1.66))))
+    {
+      fprintf(stderr,"\e[38;5;%im", 16 + 216 + gray);
+    }
+    else
+      fprintf(stderr,"\e[38;5;%im", 16 + r * 6 * 6 + g * 6  + b);
+  }
+}
+
+static void ctx_term_set_bg(int red, int green, int blue)
+{
+  long lc = ctx_rgb_to_long (red, green, blue);
+//if (lc == _ctx_curbg)
+//  return;
+  _ctx_curbg=lc;
+  if (_ctx_term256 == 0)
+  {
+    fprintf(stderr,"\e[48;2;%i;%i;%im", red,green,blue);
+  }
+  else
+  {
+    int gray = (int)((green /255.0f) * 24 + 0.5f);
+    int r    = (int)((red/255.0f)    * 6 + 0.5f);
+    int g    = (int)((green/255.0f)  * 6 + 0.5f);
+    int b    = (int)((blue/255.0f)   * 6 + 0.5f);
+    if (gray > 23) gray = 23;
+
+    if (r > 5) r = 5;
+    if (g > 5) g = 5;
+    if (b > 5) b = 5;
+
+    if (((int)(r/1.66)== (int)(g/1.66)) && ((int)(g/1.66) == ((int)(b/1.66))))
+    {
+      fprintf(stderr,"\e[48;5;%im", 16 + 216 + gray);
+    }
+    else
+      fprintf(stderr,"\e[48;5;%im", 16 + r * 6 * 6 + g * 6  + b);
+  }
+}
+
+static int _ctx_term_force_full = 0;
+
+void ctx_term_scanout (CtxTerm *term)
+{
+  int row = 1;
+  fprintf (stderr,"\e[H");
+//  printf ("\e[?25l");
+  fprintf (stderr, "\e[0m");
+
+  int cur_fg[3]={-1,-1,-1};
+  int cur_bg[3]={-1,-1,-1};
+
+  for (CtxList *l = term->lines; l; l = l->next)
+  {
+    CtxTermLine *line = l->data;
+    for (int col = 1; col <= line->maxcol; col++)
+    {
+      CtxTermCell *cell = &line->cells[col-1];
+
+      if (strcmp(cell->utf8, cell->prev_utf8) ||
+          memcmp(cell->fg, cell->prev_fg, 3) ||
+          memcmp(cell->bg, cell->prev_bg, 3) || _ctx_term_force_full)
+      {
+        if (cell->fg[0] != cur_fg[0] ||
+            cell->fg[1] != cur_fg[1] ||
+            cell->fg[2] != cur_fg[2])
+        {
+          ctx_term_set_fg (cell->fg[0], cell->fg[1], cell->fg[2]);
+          cur_fg[0]=cell->fg[0];
+          cur_fg[1]=cell->fg[1];
+          cur_fg[2]=cell->fg[2];
+        }
+        if (cell->bg[0] != cur_bg[0] ||
+            cell->bg[1] != cur_bg[1] ||
+            cell->bg[2] != cur_bg[2])
+        {
+          ctx_term_set_bg (cell->bg[0], cell->bg[1], cell->bg[2]);
+          cur_bg[0]=cell->bg[0];
+          cur_bg[1]=cell->bg[1];
+          cur_bg[2]=cell->bg[2];
+        }
+        fprintf (stderr, "%s", cell->utf8);
+      }
+      else
+      {
+        // TODO: accumulate succesive such to be ignored items,
+        // and compress them into one, making us compress largely
+        // reused screens well
+        fprintf (stderr, "\e[C");
+      }
+      strcpy (cell->prev_utf8, cell->utf8);
+      memcpy (cell->prev_fg, cell->fg, 3);
+      memcpy (cell->prev_bg, cell->bg, 3);
+    }
+    if (row != term->rows)
+      fprintf (stderr, "\n\r");
+    row ++;
+  }
+  fprintf (stderr, "\e[0m");
+  //printf ("\e[?25h");
+  //
+}
+
+// xx
+// xx
+// xx
+//
+
+static inline int _ctx_rgba8_manhattan_diff (const uint8_t *a, const uint8_t *b)
+{ // wrongly named!
+  int c;
+  int diff = 0;
+  for (c = 0; c<3;c++)
+    diff += (int)ctx_pow2(a[c]-b[c]);
+  return (int)ctx_sqrtf(diff);
+  return diff;
+}
+
+static inline void ctx_term_output_buf_half (uint8_t *pixels,
+                          int width,
+                          int height,
+                          CtxTerm *term)
+{
+  int stride = width * 4;
+  const char *sextants[]={
+   " ","▘","▝","▀","▖","▌", "▞", "▛", "▗", "▚", "▐", "▜","▄","▙","▟","█",
+
+  };
+  for (int row = 0; row < height/2; row++)
+    {
+      for (int col = 0; col < width-3; col++)
+        {
+          int     unicode = 0;
+          int     bitno = 0;
+          uint8_t rgba[2][4] = {
+                             {255,255,255,0},
+                             {0,0,0,0}};
+          int i = 0;
+
+          int  rgbasum[2][4] = {0,};
+          int  sumcount[2];
+
+          int curdiff = 0;
+          /* first find starting point colors */
+          for (int yi = 0; yi < ctx_term_ch; yi++)
+            for (int xi = 0; xi < ctx_term_cw; xi++, i++)
+                {
+                  int noi = (row * ctx_term_ch + yi) * stride + (col*ctx_term_cw+xi) * 4;
+
+                  if (rgba[0][3] == 0)
+                  {
+                    for (int c = 0; c < 3; c++)
+                      rgba[0][c] = pixels[noi + c];
+                    rgba[0][3] = 255; // used only as mark of in-use
+                  }
+                  else
+                  {
+                    int diff = _ctx_rgba8_manhattan_diff (&pixels[noi], rgba[0]);
+                    if (diff > curdiff)
+                    {
+                      curdiff = diff;
+                      for (int c = 0; c < 3; c++)
+                        rgba[1][c] = pixels[noi + c];
+                    }
+                  }
+
+                }
+
+          for (int iters = 0; iters < 1; iters++)
+          {
+                  i= 0;
+          for (int i = 0; i < 4; i ++)
+             rgbasum[0][i] = rgbasum[1][i]=0;
+          sumcount[0] = sumcount[1] = 0;
+
+          for (int yi = 0; yi < ctx_term_ch; yi++)
+            for (int xi = 0; xi < ctx_term_cw; xi++, i++)
+                {
+                  int noi = (row * ctx_term_ch + yi) * stride + (col*ctx_term_cw+xi) * 4;
+
+                  int diff1 = _ctx_rgba8_manhattan_diff (&pixels[noi], rgba[0]);
+                  int diff2 = _ctx_rgba8_manhattan_diff (&pixels[noi], rgba[1]);
+                  int cluster = 0;
+                  if (diff1 <= diff2)
+                    cluster = 0;
+                  else
+                    cluster = 1;
+                  sumcount[cluster]++;
+                  for (int c = 0; c < 3; c++)
+                    rgbasum[cluster][c] += pixels[noi+c];
+                }
+
+
+          if (sumcount[0])
+          for (int c = 0; c < 3; c++)
+          {
+            rgba[0][c] = rgbasum[0][c] / sumcount[0];
+          }
+          if (sumcount[1])
+          for (int c = 0; c < 3; c++)
+          {
+            rgba[1][c] = rgbasum[1][c] / sumcount[1];
+          }
+          }
+
+          int pixels_set = 0;
+          for (int y = 0; y < ctx_term_ch; y++)
+            for (int x = 0; x < ctx_term_cw; x++)
+              {
+                int no = (row * ctx_term_ch + y) * stride + (col*ctx_term_cw+x) * 4;
+#define CHECK_IS_SET \
+      (_ctx_rgba8_manhattan_diff (&pixels[no], rgba[0])< \
+       _ctx_rgba8_manhattan_diff (&pixels[no], rgba[1]))
+
+                int set = CHECK_IS_SET;
+#undef CHECK_IS_SET
+                if (set)
+                  { unicode |=  (1<< (bitno) ); 
+                    pixels_set ++; 
+                  }
+                bitno++;
+              }
+           if (pixels_set == 4)
+             ctx_term_set (term, col +1, row + 1, " ",
+                           rgba[1], rgba[0]);
+           else
+             ctx_term_set (term, col +1, row + 1, sextants[unicode],
+                           rgba[0], rgba[1]);
+        }
+    }
+}
+
+void ctx_term_find_color_pair (CtxTerm *term, int x0, int y0, int w, int h,
+                uint8_t rgba[2][4])
+        //uint8_t *rgba0, uint8_t *rgba1)
+{
+int curdiff = 0;
+int stride = term->width * 4;
+uint8_t *pixels = term->pixels;
+/* first find starting point colors */
+for (int y = y0; y < y0 + h; y++)
+  for (int x = x0; x < x0 + w; x++)
+      {
+        int noi = (y) * stride + (x) * 4;
+
+        if (rgba[0][3] == 0)
+        {
+          for (int c = 0; c < 3; c++)
+            rgba[0][c] = pixels[noi + c];
+          rgba[0][3] = 255; // used only as mark of in-use
+        }
+        else
+        {
+          int diff = _ctx_rgba8_manhattan_diff (&pixels[noi], &rgba[0][0]);
+          if (diff > curdiff)
+          {
+            curdiff = diff;
+            for (int c = 0; c < 3; c++)
+              rgba[1][c] = pixels[noi + c];
+          }
+        }
+      }
+          int  rgbasum[2][4] = {0,};
+          int  sumcount[2];
+
+          for (int iters = 0; iters < 1; iters++)
+          {
+          for (int i = 0; i < 4; i ++)
+             rgbasum[0][i] = rgbasum[1][i]=0;
+          sumcount[0] = sumcount[1] = 0;
+
+          for (int y = y0; y < y0 + h; y++)
+            for (int x = x0; x < x0 + w; x++)
+                {
+                  int noi = (y) * stride + (x) * 4;
+
+                  int diff1 = _ctx_rgba8_manhattan_diff (&pixels[noi], rgba[0]);
+                  int diff2 = _ctx_rgba8_manhattan_diff (&pixels[noi], rgba[1]);
+                  int cluster = 0;
+                  if (diff1 <= diff2)
+                    cluster = 0;
+                  else
+                    cluster = 1;
+                  sumcount[cluster]++;
+                  for (int c = 0; c < 3; c++)
+                    rgbasum[cluster][c] += pixels[noi+c];
+                }
+
+
+          if (sumcount[0])
+          for (int c = 0; c < 3; c++)
+          {
+            rgba[0][c] = rgbasum[0][c] / sumcount[0];
+          }
+          if (sumcount[1])
+          for (int c = 0; c < 3; c++)
+          {
+            rgba[1][c] = rgbasum[1][c] / sumcount[1];
+          }
+          }
+
+}
+
+
+
+static void ctx_term_output_buf_quarter (uint8_t *pixels,
+                          int width,
+                          int height,
+                          CtxTerm *term)
+{
+  int stride = width * 4;
+  const char *sextants[]={
+   " ","▘","▝","▀","▖","▌", "▞", "▛", "▗", "▚", "▐", "▜","▄","▙","▟","█"
+
+  };
+  for (int row = 0; row < height/ctx_term_ch; row++)
+    {
+      for (int col = 0; col < width /ctx_term_cw; col++)
+        {
+          int     unicode = 0;
+          int     bitno = 0;
+          uint8_t rgba[2][4] = {
+                             {255,255,255,0},
+                             {0,0,0,0}};
+          ctx_term_find_color_pair (term, col * ctx_term_cw,
+                                    row * ctx_term_ch,
+                                    ctx_term_cw,
+                                    ctx_term_ch, rgba);
+
+          int pixels_set = 0;
+          for (int y = 0; y < 2; y++)
+            for (int x = 0; x < ctx_term_cw; x++)
+              {
+                int no = (row * ctx_term_ch + y) * stride + (col*ctx_term_cw+x) * 4;
+#define CHECK_IS_SET \
+      (_ctx_rgba8_manhattan_diff (&pixels[no], rgba[0])< \
+       _ctx_rgba8_manhattan_diff (&pixels[no], rgba[1]))
+
+                int set = CHECK_IS_SET;
+#undef CHECK_IS_SET
+                if (set)
+                  { unicode |=  (1<< (bitno) ); 
+                    pixels_set ++; 
+                  }
+                bitno++;
+              }
+           if (pixels_set == 4)
+             ctx_term_set (term, col +1, row + 1, " ",
+                           rgba[1], rgba[0]);
+           else
+             ctx_term_set (term, col +1, row + 1, sextants[unicode],
+                           rgba[0], rgba[1]);
+        }
+    }
+}
+
+
+static void ctx_term_output_buf_sextant (uint8_t *pixels,
+                          int width,
+                          int height,
+                          CtxTerm *term)
+{
+  int stride = width * 4;
+
+  const char *sextants[]={
+   " ","🬀","🬁","🬂","🬃","🬄","🬅","🬆","🬇","🬈","🬉","🬊","🬋","🬌","🬍","🬎","🬏","🬐","🬑","🬒","🬓","▌","🬔","🬕","🬖","🬗","🬘","🬙","🬚","🬛","🬜","🬝","🬞","🬟","🬠","🬡","🬢","🬣","🬤","🬥","🬦","🬧","▐","🬨","🬩","🬪","🬫","🬬","🬭","🬮","🬯","🬰","🬱","🬲","🬳","🬴","🬵","🬶","🬷","🬸","🬹","🬺","🬻","█"
+  };
+
+  for (int row = 0; row < height/ctx_term_ch; row++)
+    {
+      for (int col = 0; col < width /ctx_term_cw; col++)
+        {
+          int     unicode = 0;
+          int     bitno = 0;
+          uint8_t rgba[2][4] = {
+                             {255,255,255,0},
+                             {0,0,0,0}};
+
+          ctx_term_find_color_pair (term, col * ctx_term_cw,
+                                    row * ctx_term_ch,
+                                    ctx_term_cw,
+                                    ctx_term_ch, rgba);
+
+          int pixels_set = 0;
+          for (int y = 0; y < ctx_term_ch; y++)
+            for (int x = 0; x < ctx_term_cw; x++)
+              {
+                int no = (row * ctx_term_ch + y) * stride + (col*ctx_term_cw+x) * 4;
+#define CHECK_IS_SET \
+      (_ctx_rgba8_manhattan_diff (&pixels[no], rgba[0])< \
+       _ctx_rgba8_manhattan_diff (&pixels[no], rgba[1]))
+
+                int set = CHECK_IS_SET;
+#undef CHECK_IS_SET
+                if (set)
+                  { unicode |=  (1<< (bitno) ); 
+                    pixels_set ++; 
+                  }
+                bitno++;
+              }
+
+          if (pixels_set == 6)
+            ctx_term_set (term, col +1, row + 1, " ",
+                          rgba[1], rgba[0]);
+          else
+            ctx_term_set (term, col +1, row + 1, sextants[unicode], rgba[0], rgba[1]);
+        }
+    }
+}
+
+static void ctx_term_output_buf_ascii (uint8_t *pixels,
+                          int width,
+                          int height,
+                          CtxTerm *term,
+                          int mono)
+{
+  /* this is a crude ascii-mode built on a quick mapping of sexels to ascii */
+  int stride = width * 4;
+  const char *sextants[]={
+   " ","`","'","^","🬃","`","~","\"","-","\"","'","\"","-","\"","~","^",",",";",
+   "=","/","i","[","p","P","z",")","/","7","f",">","/","F",",","\\",":",":",
+   "\\","\\","(","T","j","T","]","?","s","\\","<","q","_","=","=","=","c","L",
+   "Q","C","a","b","J","]","m","b","d","@"
+  };
+  uint8_t black[4] = {0,0,0,255};
+  for (int row = 0; row < height/ctx_term_ch; row++)
+    {
+      for (int col = 0; col < width /ctx_term_cw; col++)
+        {
+          int     unicode = 0;
+          int     bitno = 0;
+          uint8_t rgba[2][4] = {
+                             {255,255,255,0},
+                             {0,0,0,0}};
+
+          ctx_term_find_color_pair (term, col * ctx_term_cw,
+                                    row * ctx_term_ch,
+                                    ctx_term_cw,
+                                    ctx_term_ch, rgba);
+
+
+          if (_ctx_rgba8_manhattan_diff (black, rgba[1]) >
+              _ctx_rgba8_manhattan_diff (black, rgba[0]))
+          {
+            for (int c = 0; c < 4; c ++)
+            {
+              int tmp = rgba[0][c];
+              rgba[0][c] = rgba[1][c];
+              rgba[1][c] = tmp;
+            }
+          }
+          if (mono)
+          {
+            rgba[1][0] = 0;
+            rgba[1][1] = 0;
+            rgba[1][2] = 0;
+          }
+
+
+          int brightest_dark_diff = _ctx_rgba8_manhattan_diff (black, rgba[0]);
+
+          int pixels_set = 0;
+          for (int y = 0; y < ctx_term_ch; y++)
+            for (int x = 0; x < ctx_term_cw; x++)
+              {
+                int no = (row * ctx_term_ch + y) * stride + (col*ctx_term_cw+x) * 4;
+#define CHECK_IS_SET \
+      (_ctx_rgba8_manhattan_diff (&pixels[no], rgba[0])< \
+       _ctx_rgba8_manhattan_diff (&pixels[no], rgba[1]))
+
+                int set = CHECK_IS_SET;
+#undef CHECK_IS_SET
+                if (set)
+                  { unicode |=  (1<< (bitno) ); 
+                    pixels_set ++; 
+                  }
+                bitno++;
+              }
+
+
+           if (pixels_set == 6 && brightest_dark_diff < 40)
+             ctx_term_set (term, col +1, row + 1, " ",
+                           rgba[1], rgba[0]);
+           else
+             ctx_term_set (term, col +1, row + 1, sextants[unicode],
+                           rgba[0], rgba[1]);
+        }
+    }
+}
+
+static void ctx_term_output_buf_braille (uint8_t *pixels,
+                          int width,
+                          int height,
+                          CtxTerm *term,
+                          int mono)
+{
+  int reverse = 0;
+  int stride = width * 4;
+  uint8_t black[4] = {0,0,0,255};
+  for (int row = 0; row < height/ctx_term_ch; row++)
+    {
+      for (int col = 0; col < width /ctx_term_cw; col++)
+        {
+          int     unicode = 0;
+          int     bitno = 0;
+          uint8_t rgba[2][4] = {
+                             {255,255,255,0},
+                             {0,0,0,0}};
+
+          ctx_term_find_color_pair (term, col * ctx_term_cw,
+                                    row * ctx_term_ch,
+                                    ctx_term_cw,
+                                    ctx_term_ch, rgba);
+
+
+          /* make darkest consistently be background  */
+          if (_ctx_rgba8_manhattan_diff (black, rgba[1]) >
+              _ctx_rgba8_manhattan_diff (black, rgba[0]))
+          {
+            for (int c = 0; c < 4; c ++)
+            {
+              int tmp = rgba[0][c];
+              rgba[0][c] = rgba[1][c];
+              rgba[1][c] = tmp;
+            }
+          }
+          if (mono)
+          {
+            rgba[1][0] = 0;
+            rgba[1][1] = 0;
+            rgba[1][2] = 0;
+          }
+
+          int pixels_set = 0;
+          for (int x = 0; x < 2; x++)
+            for (int y = 0; y < 3; y++)
+              {
+                int no = (row * 4 + y) * stride + (col*2+x) * 4;
+#define CHECK_IS_SET \
+      (_ctx_rgba8_manhattan_diff (&pixels[no], rgba[0])< \
+       _ctx_rgba8_manhattan_diff (&pixels[no], rgba[1]))
+
+                int set = CHECK_IS_SET;
+                if (reverse) { set = !set; }
+                if (set)
+                  { unicode |=  (1<< (bitno) ); 
+                    pixels_set ++; 
+                  }
+                bitno++;
+              }
+          {
+            int x = 0;
+            int y = 3;
+            int no = (row * 4 + y) * stride + (col*2+x) * 4;
+            int setA = CHECK_IS_SET;
+            no = (row * 4 + y) * stride + (col*2+x+1) * 4;
+            int setB = CHECK_IS_SET;
+
+            pixels_set += setA;
+            pixels_set += setB;
+#undef CHECK_IS_SET
+            if (reverse) { setA = !setA; }
+            if (reverse) { setB = !setB; }
+            if (setA != 0 && setB==0)
+              { unicode += 0x2840; }
+            else if (setA == 0 && setB)
+              { unicode += 0x2880; }
+            else if ( (setA != 0) && (setB != 0) )
+              { unicode += 0x28C0; }
+            else
+              { unicode += 0x2800; }
+            char utf8[5];
+            utf8[ctx_unichar_to_utf8 (unicode, (uint8_t*)utf8)]=0;
+
+#if 0
+            if (pixels_set == 8)
+            {
+              if (rgba[0][0] < 32 && rgba[0][1] < 32 && rgba[0][2] < 32)
+              {
+                ctx_term_set (term, col +1, row + 1, " ",
+                                 rgba[1], rgba[0]);
+                continue;
+              }
+            }
+#endif
+            {
+              ctx_term_set (term, col +1, row + 1, utf8,
+                               rgba[0], rgba[1]);
+            }
+          }
+        }
+    }
+}
+
+
+inline static int
+ctx_is_half_opaque (CtxRasterizer *rasterizer)
+{
+  CtxGState *gstate = &rasterizer->state->gstate;
+  if (gstate->source_fill.type == CTX_SOURCE_COLOR)
+  {
+    uint8_t ga[2];
+    ctx_color_get_graya_u8 (rasterizer->state, &gstate->source_fill.color, ga);
+    if ( (ga[1] * gstate->global_alpha_f) >= 127)
+      return 1;
+    return 0;
+  }
+  return gstate->global_alpha_f > 0.5f;
+}
+
+inline static void ctx_term_process (Ctx *ctx,
+                                     CtxCommand *command)
+{
+  CtxTerm *term = (void*)ctx->backend;
+
+#if CTX_CURRENT_PATH
+  ctx_update_current_path (ctx, &command->entry);
+#endif
+
+
+#if CTX_BRAILLE_TEXT
+  if (command->code == CTX_FILL)
+  {
+     CtxRasterizer *rasterizer = (CtxRasterizer*)term->host->backend;
+
+     if (ctx_is_half_opaque (rasterizer))
+     {
+        CtxIntRectangle shape_rect = {
+          ((int)(rasterizer->col_min / CTX_SUBDIV - 2))/2,
+          ((int)(rasterizer->scan_min / 15 - 2))/3,
+          ((int)(3+((int)rasterizer->col_max - rasterizer->col_min + 1) / CTX_SUBDIV))/2,
+          ((int)(3+((int)rasterizer->scan_max - rasterizer->scan_min + 1) / 15))/3
+        };
+#if 0
+  CtxGState *gstate = &rasterizer->state->gstate;
+       fprintf (stderr, "{%i,%i %ix%i %.2f %i}",
+                       shape_rect.x, shape_rect.y,
+                       shape_rect.width, shape_rect.height,
+
+                       gstate->global_alpha_f,
+                       ga[1]
+                       
+                       );
+   //  sleep(1);
+#endif
+
+       if (shape_rect.y > 0) // XXX : workaround 
+       for (int row = shape_rect.y;
+            row < (shape_rect.y+(int)shape_rect.height);
+            row++)
+       for (int col = shape_rect.x;
+            col < (shape_rect.x+(int)shape_rect.width);
+            col++)
+
+       if (0){ // disabled - offset is wrong (or offset of cursor in stuff is wrong
+         for (CtxList *l = rasterizer->glyphs; l; l=l?l->next:NULL)
+         {
+           CtxTermGlyph *glyph = l->data;
+           if ((glyph->row == row+1) &&
+               (glyph->col == col+1))
+           {
+              ctx_list_remove (&rasterizer->glyphs, glyph);
+              ctx_free (glyph);
+              l = NULL;
+           }
+         }
+       }
+     }
+  }
+#endif
+
+  /* we need to interpret state related things ourself to be able to respond to
+   * queries.
+   */
+  ctx_interpret_style (&ctx->state, &command->entry, ctx);
+  ctx_interpret_transforms (&ctx->state, &command->entry, ctx);
+  ctx_interpret_pos (&ctx->state, &command->entry, ctx);
+
+  /* directly forward */
+  ctx_process (term->host, &command->entry);
+}
+
+inline static void ctx_term_end_frame (Ctx *ctx)
+{
+  CtxTerm *term = (CtxTerm*)ctx->backend;
+  int width =  term->width;
+  int height = term->height;
+  switch (term->mode)
+  {
+    case CTX_TERM_QUARTER:
+       ctx_term_output_buf_quarter (term->pixels,
+                                width, height, term);
+       break;
+    case CTX_TERM_ASCII:
+       ctx_term_output_buf_ascii (term->pixels,
+                                width, height, term, 0);
+       break;
+    case CTX_TERM_ASCII_MONO:
+       ctx_term_output_buf_ascii (term->pixels,
+                                width, height, term, 1);
+       break;
+    case CTX_TERM_SEXTANT:
+       ctx_term_output_buf_sextant (term->pixels,
+                                width, height, term);
+       break;
+    case CTX_TERM_BRAILLE:
+       ctx_term_output_buf_braille (term->pixels,
+                                width, height, term, 0);
+       break;
+    case CTX_TERM_BRAILLE_MONO:
+       ctx_term_output_buf_braille (term->pixels,
+                                width, height, term, 1);
+       break;
+  }
+#if CTX_BRAILLE_TEXT
+  CtxRasterizer *rasterizer = (CtxRasterizer*)(term->host->backend);
+  // XXX instead sort and inject along with braille
+  //
+
+  //uint8_t rgba_bg[4]={0,0,0,0};
+  //uint8_t rgba_fg[4]={255,0,255,255};
+
+  for (CtxList *l = rasterizer->glyphs; l; l = l->next)
+  {
+    CtxTermGlyph *glyph = l->data;
+
+    uint8_t *pixels = term->pixels;
+    long rgb_sum[4]={0,0,0};
+    for (int v = 0; v <  ctx_term_ch; v ++)
+    for (int u = 0; u <  ctx_term_cw; u ++)
+    {
+      int i = ((glyph->row-1) * ctx_term_ch + v) * rasterizer->blit_width + 
+              ((glyph->col-1) * ctx_term_cw + u);
+      for (int c = 0; c < 3; c ++)
+        rgb_sum[c] += pixels[i*4+c];
+    }
+    for (int c = 0; c < 3; c ++)
+      glyph->rgba_bg[c] = rgb_sum[c] / (ctx_term_ch * ctx_term_cw);
+    char utf8[8];
+    utf8[ctx_unichar_to_utf8(glyph->unichar, (uint8_t*)utf8)]=0;
+    ctx_term_set (term, glyph->col, glyph->row, 
+                     utf8, glyph->rgba_fg, glyph->rgba_bg);
+    ctx_free (glyph);
+  }
+
+#endif
+  printf ("\e[H");
+  printf ("\e[0m");
+  ctx_term_scanout (term);
+  printf ("\e[0m");
+  fflush (NULL);
+#if CTX_BRAILLE_TEXT
+  while (rasterizer->glyphs)
+    ctx_list_remove (&rasterizer->glyphs, rasterizer->glyphs->data);
+#endif
+}
+
+void ctx_term_destroy (CtxTerm *term)
+{
+  while (term->lines)
+  {
+    ctx_free (term->lines->data);
+    ctx_list_remove (&term->lines, term->lines->data);
+  }
+  printf ("\e[?25h"); // cursor on
+  nc_at_exit ();
+  ctx_free (term->pixels);
+  ctx_destroy (term->host);
+  ctx_free (term);
+  /* we're not destoring the ctx member, this is function is called in ctx' teardown */
+}
+
+float ctx_term_get_cell_width (Ctx *ctx)
+{
+  return ctx_term_cw;
+}
+
+float ctx_term_get_cell_height (Ctx *ctx)
+{
+  return ctx_term_ch;
+}
+
+Ctx *ctx_new_term (int width, int height)
+{
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+#if CTX_RASTERIZER
+  CtxTerm *term = (CtxTerm*)ctx_calloc (sizeof (CtxTerm), 1);
+  CtxBackend *backend = (void*)term;
+ 
+  const char *mode = getenv ("CTX_TERM_MODE");
+  ctx_term_cw = 2;
+  ctx_term_ch = 3;
+
+  if (!mode) term->mode = CTX_TERM_SEXTANT;
+  else if (!strcmp (mode, "sextant")) term->mode = CTX_TERM_SEXTANT;
+  else if (!strcmp (mode, "ascii")) term->mode = CTX_TERM_ASCII_MONO;
+  //else if (!strcmp (mode, "ascii-mono")) term->mode = CTX_TERM_ASCII_MONO;
+  else if (!strcmp (mode, "quarter")) term->mode = CTX_TERM_QUARTER;
+  //else if (!strcmp (mode, "braille")){
+  //  term->mode = CTX_TERM_BRAILLE;
+  //  ctx_term_ch = 4;
+  //}
+  else if (!strcmp (mode, "braille")){
+    term->mode = CTX_TERM_BRAILLE_MONO;
+    ctx_term_ch = 4;
+  }
+  else {
+    fprintf (stderr, "recognized values for CTX_TERM_MODE:\n"
+                    " sextant ascii quarter braille\n");
+    exit (1);
+  }
+
+  mode = getenv ("CTX_TERM_FORCE_FULL");
+  if (mode && strcmp (mode, "0") && strcmp (mode, "no"))
+    _ctx_term_force_full = 1;
+
+  fprintf (stderr, "\e[?1049h");
+  fprintf (stderr, "\e[?25l"); // cursor off
+
+  int maxwidth = ctx_terminal_cols  () * ctx_term_cw;
+  int maxheight = (ctx_terminal_rows ()) * ctx_term_ch;
+  if (width <= 0 || height <= 0)
+  {
+    width = maxwidth;
+    height = maxheight;
+  }
+  if (width > maxwidth) width = maxwidth;
+  if (height > maxheight) height = maxheight;
+  backend->ctx = ctx;
+  term->width  = width;
+  term->height = height;
+
+  term->cols = (width + 1) / ctx_term_cw;
+  term->rows = (height + 2) / ctx_term_ch;
+  term->lines = 0;
+  term->pixels = (uint8_t*)ctx_malloc (width * height * 4);
+  term->host = ctx_new_for_framebuffer (term->pixels,
+                                           width, height,
+                                           width * 4, CTX_FORMAT_RGBA8);
+#if CTX_BRAILLE_TEXT
+  ((CtxRasterizer*)term->host->backend)->term_glyphs=1;
+#endif
+  _ctx_mouse (ctx, NC_MOUSE_DRAG);
+  ctx_set_backend (ctx, term);
+  backend->process = ctx_term_process;
+  backend->end_frame = ctx_term_end_frame;
+  backend->destroy = (void(*)(void*))ctx_term_destroy;
+  backend->consume_events = ctx_nct_consume_events;
+  backend->get_event_fds = (void*) ctx_stdin_get_event_fds;
+  ctx_set_size (ctx, width, height);
+  ctx_font_size (ctx, ctx_term_ch); 
+  ctx_font_size (term->host, ctx_term_ch); 
+#endif
+
+  return ctx;
+}
+
+#endif
+
+#if CTX_TERMINAL_EVENTS
+
+#if !__COSMOPOLITAN__
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#endif
+
+typedef struct _CtxTermImg CtxTermImg;
+struct _CtxTermImg
+{
+   CtxBackend backend;
+   int         width;
+   int         height;
+   int         cols;
+   int         rows;
+   int         was_down;
+   // we need to have the above members in that order up to here
+   uint8_t    *pixels;
+   Ctx        *host;
+   CtxList    *lines;
+};
+
+inline static void ctx_termimg_process (Ctx        *ctx,
+                                        CtxCommand *command)
+{
+  CtxTermImg *termimg = (void*)ctx->backend;
+#if CTX_CURRENT_PATH
+  ctx_update_current_path (ctx, &command->entry);
+#endif
+
+  /* directly forward */
+  ctx_process (termimg->host, &command->entry);
+}
+
+inline static void ctx_termimg_end_frame (Ctx *ctx)
+{
+  CtxTermImg *termimg = (CtxTermImg*)ctx->backend;
+  int width =  termimg->width;
+  int height = termimg->height;
+  if (!termimg->pixels) return;
+  char *encoded = ctx_malloc (width * height * 3 * 3);
+  ctx_bin2base64 (termimg->pixels, width * height * 3,
+                  encoded);
+  int encoded_len = strlen (encoded);
+
+  int i = 0;
+
+  printf ("\e[H");
+  printf ("\e_Gf=24,s=%i,v=%i,t=d,a=T,m=1;\e\\", width, height);
+  while (i <  encoded_len)
+  {
+     if (i + 4096 <  encoded_len)
+     {
+       printf  ("\e_Gm=1;");
+     }
+     else
+     {
+       printf  ("\e_Gm=0;");
+     }
+     for (int n = 0; n < 4000 && i < encoded_len; n++)
+     {
+       printf ("%c", encoded[i]);
+       i++;
+     }
+     printf ("\e\\");
+  }
+  ctx_free (encoded);
+  
+  fflush (NULL);
+}
+
+void ctx_termimg_destroy (CtxTermImg *termimg)
+{
+  while (termimg->lines)
+  {
+    ctx_free (termimg->lines->data);
+    ctx_list_remove (&termimg->lines, termimg->lines->data);
+  }
+  printf ("\e[?25h"); // cursor on
+  nc_at_exit ();
+  ctx_free (termimg->pixels);
+  ctx_destroy (termimg->host);
+  ctx_free (termimg);
+  /* we're not destoring the ctx member, this is function is called in ctx' teardown */
+}
+
+Ctx *ctx_new_termimg (int width, int height)
+{
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+#if CTX_RASTERIZER
+  fprintf (stdout, "\e[?1049h");
+  fprintf (stdout, "\e[?25l"); // cursor off
+  CtxTermImg *termimg = (CtxTermImg*)ctx_calloc (sizeof (CtxTermImg), 1);
+  CtxBackend *backend = (void*)termimg;
+
+
+  int maxwidth = ctx_terminal_width ();
+
+  int colwidth = maxwidth/ctx_terminal_cols ();
+  maxwidth-=colwidth;
+
+  int maxheight = ctx_terminal_height ();
+  if (width <= 0 || height <= 0)
+  {
+    width  = maxwidth;
+    height = maxheight;
+  }
+  if (width > maxwidth) width = maxwidth;
+  if (height > maxheight) height = maxheight;
+  termimg->width  = width;
+  termimg->height = height;
+  termimg->lines = 0;
+  termimg->pixels = (uint8_t*)ctx_malloc (width * height * 3);
+  termimg->host = ctx_new_for_framebuffer (termimg->pixels,
+                                           width, height,
+                                           width * 3, CTX_FORMAT_RGB8);
+  _ctx_mouse (ctx, NC_MOUSE_DRAG);
+  ctx_set_backend (ctx, termimg);
+
+  backend->ctx = ctx;
+  backend->process = ctx_termimg_process;
+  backend->end_frame = ctx_termimg_end_frame;
+  backend->destroy = (void(*)(void*))ctx_termimg_destroy;
+  backend->consume_events = ctx_nct_consume_events;
+  backend->get_event_fds = (void*) ctx_stdin_get_event_fds;
+  ctx_set_size (ctx, width, height);
+  ctx_font_size (ctx, 14.0f);
+#endif
+
+  return ctx;
+}
+
+#endif
+
+
+typedef struct CtxCbBackend
+{
+  CtxBackend     backend;
+  CtxPixelFormat format;
+  int            flags;
+  int            memory_budget;
+  int            min_col; // hasher cols and rows
+  int            min_row; // hasher cols and rows
+  int            max_col; // hasher cols and rows
+  int            max_row; // hasher cols and rows
+  uint16_t      *fb;
+  Ctx           *ctx;
+
+  void (*set_pixels) (Ctx *ctx, void *user_data, 
+                      int x, int y, int w, int h, void *buf, int buf_size);
+  void   *set_pixels_user_data;
+  int  (*update_fb) (Ctx *ctx, void *user_data);
+  void   *update_fb_user_data;
+
+  uint32_t hashes[CTX_HASH_ROWS * CTX_HASH_COLS];
+
+  CtxHasher     rasterizer;
+  uint8_t res[CTX_HASH_ROWS * CTX_HASH_COLS]; // when non-0 we have non-full res rendered
+} CtxCbBackend;
+
+void ctx_cb_set_flags (Ctx *ctx, int flags)
+{
+  CtxCbBackend *backend_cb = (CtxCbBackend*)ctx->backend;
+  if (flags & CTX_FLAG_GRAY2)
+    flags |= CTX_FLAG_LOWFI;
+  if (flags & CTX_FLAG_GRAY4)
+    flags |= CTX_FLAG_LOWFI;
+  if (flags & CTX_FLAG_GRAY8)
+    flags |= CTX_FLAG_LOWFI;
+  if (flags & CTX_FLAG_RGB332)
+    flags |= CTX_FLAG_LOWFI;
+
+  if (flags & CTX_FLAG_LOWFI)
+    flags |= CTX_FLAG_HASH_CACHE;
+  backend_cb->flags = flags;
+}
+
+int ctx_cb_get_flags (Ctx *ctx)
+{
+  CtxCbBackend *backend_cb = (CtxCbBackend*)ctx->backend;
+  return backend_cb->flags;
+}
+
+static inline uint16_t ctx_rgb332_to_rgb565 (uint8_t rgb, int byteswap)
+{
+   uint8_t red, green, blue;
+   ctx_332_unpack (rgb, &red, &green, &blue);
+   return ctx_565_pack (red, green, blue, byteswap);
+}
+
+void
+ctx_cb_set_memory_budget (Ctx *ctx, int memory_budget)
+{
+  CtxCbBackend *backend_cb = (CtxCbBackend*)ctx->backend;
+  backend_cb->memory_budget = memory_budget;
+  if (backend_cb->fb)
+  {
+    ctx_free (backend_cb->fb);
+    backend_cb->fb = NULL;
+  }
+}
+
+#define CTX_MEMDEBUG 0  // by setting this to 1 we get reports about
+                        // scratch buffer overflows into the 1kb buffer
+                        // area
+                        //
+#if CTX_MEMDEBUG
+#define CTX_SCRATCH_PAD  512
+
+static void
+ctx_memdebug (CtxCbBackend *cb_backend, int line_no)
+{
+  int started = 0;
+  int last = 0;
+  int first = 0;
+  if (!cb_backend->fb)
+    return;
+  for (int i = cb_backend->memory_budget/2; i < cb_backend->memory_budget/2 + CTX_SCRATCH_PAD/2;i++)
+  {
+    if (cb_backend->fb[i] != 42)
+    {
+      if (!started)
+      {
+        first = i;
+        started = 1;
+      }
+      last = i;
+      cb_backend->fb[i] = 42;
+    }
+  }
+  if (started)
+  fprintf (stderr, "%i scratch overreach - first wrong byte at buf + %i last: %i\n",
+                  line_no,
+                  first - cb_backend->memory_budget/2,
+                                                                          last - cb_backend->memory_budget/2);
+}
+                        
+#define CTX_VERIFY_MEM()  do{ctx_memdebug(backend_cb, __LINE__);}while(0)
+#else
+#define CTX_SCRATCH_PAD   1024
+#define CTX_VERIFY_MEM()  do{}while(0)
+#endif
+
+static int ctx_render_cb (CtxCbBackend *backend_cb, 
+                          int x0, int y0,
+                          int x1, int y1,
+                          uint32_t active_mask)
+{
+  Ctx *ctx           = backend_cb->ctx;
+  int flags          = backend_cb->flags;
+  int memory_budget  = backend_cb->memory_budget;
+  uint16_t *fb;
+  CtxPixelFormat format = backend_cb->format;
+  int bpp            = ctx_pixel_format_bits_per_pixel (format) / 8;
+  int abort          = 0;
+  
+  int width          = x1 - x0 + 1;
+  int height         = y1 - y0 + 1;
+  int byteswap;
+  byteswap = (format == CTX_FORMAT_RGB565_BYTESWAPPED);
+
+  if (!backend_cb->fb)
+  {
+    backend_cb->fb = (uint16_t*)ctx_malloc (memory_budget + CTX_SCRATCH_PAD);
+#if CTX_MEMDEBUG
+    for (int i = backend_cb->memory_budget/2; i < backend_cb->memory_budget/2 + CTX_SCRATCH_PAD/2;i++)
+      backend_cb->fb[i] = 42;
+#endif
+  }
+  fb = backend_cb->fb;
+
+#if CTX_ENABLE_CBRLE
+  if (flags & CTX_FLAG_CBRLE)
+  {
+    int bitdepth = memory_budget * 8 / height / width;
+    int zformat;
+    if (bitdepth < 1)
+    {
+      fprintf (stderr, "not enough memory for 1bit cbrle\n");
+      return 1;
+    }
+    switch (bitdepth)
+    {
+      case 1: zformat = CTX_FORMAT_CBRLE_1; break;
+      case 2: zformat = CTX_FORMAT_CBRLE_2; break;
+      case 3: zformat = CTX_FORMAT_CBRLE_3; break;
+      case 4: zformat = CTX_FORMAT_CBRLE_4; break;
+      case 5: zformat = CTX_FORMAT_CBRLE_5; break;
+      case 6: zformat = CTX_FORMAT_CBRLE_6; break;
+      case 7: zformat = CTX_FORMAT_CBRLE_7; break;
+      case 8: zformat = CTX_FORMAT_CBRLE_8; break;
+      case 9: zformat = CTX_FORMAT_CBRLE_9; break;
+      case 10: zformat = CTX_FORMAT_CBRLE_10; break;
+      case 11: zformat = CTX_FORMAT_CBRLE_11; break;
+      case 12: zformat = CTX_FORMAT_CBRLE_12; break;
+      case 13: zformat = CTX_FORMAT_CBRLE_13; break;
+      case 14: zformat = CTX_FORMAT_CBRLE_14; break;
+      case 15: zformat = CTX_FORMAT_CBRLE_15; break;
+      case 16: zformat = CTX_FORMAT_CBRLE_16; break;
+      case 17: zformat = CTX_FORMAT_CBRLE_17; break;
+      case 18: zformat = CTX_FORMAT_CBRLE_18; break;
+      case 19: zformat = CTX_FORMAT_CBRLE_19; break;
+      case 20: zformat = CTX_FORMAT_CBRLE_20; break;
+      case 21: zformat = CTX_FORMAT_CBRLE_21; break;
+      case 22: zformat = CTX_FORMAT_CBRLE_22; break;
+      case 23: zformat = CTX_FORMAT_CBRLE_23; break;
+      default:
+      case 24: zformat = CTX_FORMAT_CBRLE_24; break;
+    }
+    //zformat = CTX_FORMAT_GRAY4;
+    //bitdepth = 4;
+    int stride = (width * bitdepth + 7) / 8;
+
+    memset(fb, 0, stride * height);
+    CtxRasterizer *r = ctx_rasterizer_init ((CtxRasterizer*)&backend_cb->rasterizer,
+                ctx, NULL, &ctx->state, fb, x0, y0, width, height,
+                stride, zformat, CTX_ANTIALIAS_DEFAULT);
+    ((CtxBackend*)r)->destroy = (CtxDestroyNotify)ctx_rasterizer_deinit;
+    ctx_push_backend (ctx, r);
+
+    //ctx_scale (ctx, 1.0f/scale_factor, 1.0f/scale_factor);
+    ctx_translate (ctx, -1.0f * x0, -1.0f * y0);
+    if (active_mask)
+      ctx_render_ctx_masked (ctx, ctx, active_mask);
+    else
+      ctx_render_ctx (ctx, ctx);
+
+    for (int y = 0; y < height;y++)
+    {
+      uint8_t rgba8[width*4];
+      uint16_t rgb565[width];
+
+      _ctx_CBRLE_decompress ((uint8_t*)&fb[stride * y/2], 
+                              rgba8, width, stride, 0, width);
+
+      for (int i = 0; i < width; i++)
+      {
+         rgb565[i] = ctx_888_to_565 ( ((uint32_t*)&rgba8[i*4])[0], 1);
+      }
+
+      backend_cb->set_pixels (ctx, backend_cb->set_pixels_user_data, 
+                            //x0, y0, width, render_height, (uint16_t*)scaled,
+                            //width * render_height * bpp);
+                            x0,y0+y,width,1,(void*)rgb565,
+                            stride);// * height);
+    }
+
+    ctx_pop_backend (ctx);    
+
+    return abort;
+  }
+#endif
+
+  if (flags & CTX_FLAG_LOWFI)
+  {
+    int scale_factor  = 1;
+    int small_width   = width / scale_factor;
+    int small_height  = height / scale_factor;
+
+    int tbpp = bpp * 8;
+    CtxPixelFormat tformat = format;
+      if   (flags & CTX_FLAG_GRAY2)
+      {
+        tformat = CTX_FORMAT_GRAY2;
+        tbpp = 2;
+      }
+      else if (flags & CTX_FLAG_GRAY4)
+      {
+        tformat = CTX_FORMAT_GRAY4;
+        tbpp = 4;
+      }
+      else if (flags & CTX_FLAG_GRAY8)
+      {
+        tformat = CTX_FORMAT_GRAY8;
+        tbpp = 8;
+      }
+      else
+      if (flags & (CTX_FLAG_RGB332))
+      {
+        tbpp = 8;
+        tformat = CTX_FORMAT_RGB332;
+      }
+    int small_stride = (small_width * tbpp + 7) / 8;
+    int min_scanlines = 4;
+
+    while (memory_budget - (small_height * small_stride) < width * bpp * min_scanlines)
+    {
+      scale_factor ++;
+      small_width   = width / scale_factor;
+      small_height  = height / scale_factor;
+      min_scanlines = scale_factor * 2;
+      small_stride  = (small_width * tbpp + 7) / 8;
+    }
+
+    int render_height = (memory_budget - (small_height * small_stride)) /
+                        (width * bpp);
+
+    const uint8_t *fb_u8 = (uint8_t*)fb;
+    uint16_t *scaled = (uint16_t*)&fb_u8[small_height*small_stride];
+
+    memset(fb, 0, small_stride * small_height);
+    CtxRasterizer *r = ctx_rasterizer_init ((CtxRasterizer*)&backend_cb->rasterizer,
+                ctx, NULL, &ctx->state, fb, 0, 0, small_width, small_height,
+                small_stride, tformat, CTX_ANTIALIAS_DEFAULT);
+    ((CtxBackend*)r)->destroy = (CtxDestroyNotify)ctx_rasterizer_deinit;
+    ctx_push_backend (ctx, r);
+
+    ctx_scale (ctx, 1.0f/scale_factor, 1.0f/scale_factor);
+    ctx_translate (ctx, -1.0f * x0, -1.0f * y0);
+    if (active_mask)
+      ctx_render_ctx_masked (ctx, ctx, active_mask);
+    else
+      ctx_render_ctx (ctx, ctx);
+    ctx_pop_backend (ctx);
+
+    if (backend_cb->update_fb && (flags & CTX_FLAG_INTRA_UPDATE))
+      backend_cb->update_fb (ctx, backend_cb->update_fb_user_data);
+    int yo = 0;
+    do
+    {
+      render_height = ctx_mini (render_height, y1-y0+1);
+      int off = 0;
+      for (int y = 0; y < render_height; y++)
+      {
+        int sbase = (small_stride * ((yo+y)/scale_factor));
+        off = y * width;
+        switch (tformat)
+        {
+          case CTX_FORMAT_GRAY1:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                int     soff = sbase + ((sx)/8);
+                uint8_t bits = fb_u8[soff];
+                uint16_t val = (bits & (1<<(sx&7)))?0xffff:0;
+                sx++;
+
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+            break;
+          case CTX_FORMAT_GRAY2:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                int     soff = sbase + ((sx)/4);
+                uint8_t bits = fb_u8[soff];
+                uint8_t g    = 85 * ((bits >> (2*(sx&3)))&3);
+                uint16_t val = ctx_565_pack (g, g, g, byteswap);
+                sx++;
+
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+            break;
+          case CTX_FORMAT_GRAY4:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                int     soff = sbase + ((sx)/2);
+                uint8_t bits = fb_u8[soff];
+                uint8_t g    = 17 * ((bits >> (4*(sx&1)))&15);
+                uint16_t val = ctx_565_pack (g, g, g, byteswap);
+                sx++;
+
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+
+
+            break;
+          case CTX_FORMAT_GRAY8:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                uint8_t g   = fb_u8[sbase + (sx++)];
+                uint16_t val = ctx_565_pack (g, g, g, byteswap);
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+            break;
+          case CTX_FORMAT_RGB332:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                uint16_t val = ctx_rgb332_to_rgb565 (
+                   fb_u8[sbase + (sx++)], byteswap);
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+            break;
+          default:
+          case CTX_FORMAT_RGB565:
+          case CTX_FORMAT_RGB565_BYTESWAPPED:
+            {
+              int sx = 0;
+              for (int x = 0; x < width;)
+              {
+                uint16_t val = fb[sbase/2+(sx++)];
+                for (int i = 0; i < scale_factor && x < width; i++, x++)
+                  scaled[off++]  = val;
+              }
+            }
+            break;
+        }
+        for (int ty = 1; ty < scale_factor && y + 1< render_height; ty++)
+        {
+           memcpy (&scaled[off], &scaled[off-width], 2 * width);
+           off += width;
+           y++;
+        }
+      }
+      backend_cb->set_pixels (ctx, backend_cb->set_pixels_user_data, 
+                              x0, y0, width, render_height, (uint16_t*)scaled,
+                              width * render_height * bpp);
+      y0 += render_height;
+      yo += render_height;
+    } while (y0 < y1);
+
+    if (backend_cb->update_fb && (flags & CTX_FLAG_INTRA_UPDATE))
+      backend_cb->update_fb (ctx, backend_cb->update_fb_user_data);
+    // abort does not happen for low-res update
+  }
+  else
+  {
+    int render_height = height;
+    if (width * render_height > memory_budget / bpp)
+    {
+       render_height = memory_budget / width / bpp;
+    }
+    CtxRasterizer *r = ctx_rasterizer_init((CtxRasterizer*)&backend_cb->rasterizer,
+                         ctx, NULL, &ctx->state, fb, 0, 0, width, height,
+                         width * bpp, format, CTX_ANTIALIAS_DEFAULT);
+    ((CtxBackend*)r)->destroy = (CtxDestroyNotify)ctx_rasterizer_deinit;
+    ctx_push_backend (ctx, r);
+
+    do
+    {
+      render_height = ctx_mini (render_height, y1-y0+1);
+      ctx_rasterizer_init (r, ctx, NULL, &ctx->state, fb, 0, 0, width,
+                   render_height, width * bpp, format, CTX_ANTIALIAS_DEFAULT);
+    ((CtxBackend*)r)->destroy = (CtxDestroyNotify)ctx_rasterizer_deinit;
+
+      if ((flags & CTX_FLAG_KEEP_DATA) == 0)
+        memset (fb, 0, width * bpp * render_height);
+
+      ctx_translate (ctx, -1.0f * x0, -1.0f * y0);
+      if (active_mask)
+        ctx_render_ctx_masked (ctx, ctx, active_mask);
+      else
+        ctx_render_ctx (ctx, ctx);
+
+      backend_cb->set_pixels (ctx, backend_cb->set_pixels_user_data, 
+                              x0, y0, width, render_height, (uint16_t*)fb,
+                              width * render_height * bpp);
+
+      if (backend_cb->update_fb && (flags & CTX_FLAG_INTRA_UPDATE))
+        abort = backend_cb->update_fb (ctx, backend_cb->update_fb_user_data);
+
+      y0 += render_height;
+    } while (y0 < y1 && !abort);
+    ctx_pop_backend (ctx);    
+  }
+  return abort;
+}
+
+
+/* XXX: todo replace this with a single function that writes
+ * to pointers, like path_extent
+ */
+static int
+ctx_cb_x0 (Ctx *ctx)
+{
+  CtxCbBackend *cb_backend = (CtxCbBackend*)ctx->backend;
+  return cb_backend->min_col * (ctx_width (ctx)/CTX_HASH_COLS);
+}
+
+static int
+ctx_cb_x1 (Ctx *ctx)
+{
+  CtxCbBackend *cb_backend = (CtxCbBackend*)ctx->backend;
+  return (cb_backend->max_col+1) * (ctx_width (ctx)/CTX_HASH_COLS)-1;
+}
+
+static int
+ctx_cb_y0 (Ctx *ctx)
+{
+  CtxCbBackend *cb_backend = (CtxCbBackend*)ctx->backend;
+  return cb_backend->min_row * (ctx_height (ctx)/CTX_HASH_ROWS);
+}
+
+static int
+ctx_cb_y1 (Ctx *ctx)
+{
+  CtxCbBackend *cb_backend = (CtxCbBackend*)ctx->backend;
+  return (cb_backend->max_row+1) * (ctx_height (ctx)/CTX_HASH_ROWS)-1;
+}
+
+void
+ctx_cb_extent (Ctx *ctx, float *x0, float *y0, float *x1, float *y1)
+{
+  if (x0) *x0 = ctx_cb_x0 (ctx);
+  if (y0) *y0 = ctx_cb_y0 (ctx);
+  if (x1) *x1 = ctx_cb_x1 (ctx);
+  if (y1) *y1 = ctx_cb_y1 (ctx);
+}
+
+static void
+ctx_cb_end_frame (Ctx *ctx)
+{
+  CtxCbBackend *cb_backend = (CtxCbBackend*)ctx->backend;
+  static int64_t prev_time = 0;
+  int64_t cur_time = ctx_ticks () / 1000;
+  int width = ctx_width (ctx);
+  int height = ctx_height (ctx);
+
+  int tile_width = width / CTX_HASH_COLS;
+  int tile_height = height / CTX_HASH_ROWS;
+  if (cb_backend->flags & (CTX_FLAG_GRAY2|CTX_FLAG_GRAY4|CTX_FLAG_GRAY8|CTX_FLAG_RGB332))
+      cb_backend->flags|=CTX_FLAG_LOWFI;
+
+  if (cb_backend->flags & CTX_FLAG_SHOW_FPS)
+  {
+   
+  float em = ctx_height (ctx) * 0.08f;
+  float y = em;
+  ctx_font_size (ctx, em);
+  ctx_rectangle (ctx, ctx_width(ctx)-(em*4), 0, em *4, em * 1.1f);
+  ctx_rgba (ctx, 0, 0, 0, 0.7f);
+  ctx_fill (ctx);
+
+  ctx_rgba (ctx, 1, 1, 0, 1);
+
+  if (prev_time)
+  {
+    char buf[22];
+    float fps = 1.0f/((cur_time-prev_time)/1000.0f);
+    ctx_move_to (ctx, width - (em * 3.8f), y);
+    sprintf (buf, "%2.1f fps", (double)fps);
+    ctx_text (ctx, buf);
+    ctx_begin_path (ctx);
+  }
+  prev_time = cur_time;
+  }
+
+
+  if (cb_backend->flags & CTX_FLAG_HASH_CACHE)
+  {
+    CtxState    *state = &ctx->state;
+
+    CtxPixelFormat format = cb_backend->format;
+    int bpp               = ctx_pixel_format_bits_per_pixel (format) / 8;
+    int tile_dim          = tile_width * tile_height * bpp;
+
+    CtxRasterizer *rasterizer = (CtxRasterizer*)&cb_backend->rasterizer;
+    ctx_hasher_init (rasterizer, ctx, state, width, height, CTX_HASH_COLS, CTX_HASH_ROWS, &ctx->drawlist);
+    ((CtxBackend*)rasterizer)->destroy = (CtxDestroyNotify)ctx_rasterizer_deinit;
+
+    ctx_push_backend (ctx, rasterizer);
+
+    int dirty_tiles = 0;
+    ctx_render_ctx (ctx, ctx);
+
+    cb_backend->max_col = -100;
+    cb_backend->min_col = 100;
+    cb_backend->max_row = -100;
+    cb_backend->min_row = 100;
+
+    uint32_t active_mask = 0;
+    uint32_t *hashes = ((CtxHasher*)(ctx->backend))->hashes;
+    int tile_no =0;
+    int low_res_tiles = 0;
+
+      for (int row = 0; row < CTX_HASH_ROWS; row++)
+        for (int col = 0; col < CTX_HASH_COLS; col++, tile_no++)
+        {
+          uint32_t new_hash = hashes[tile_no];
+          if (new_hash &&
+              new_hash != cb_backend->hashes[tile_no])
+          {
+            dirty_tiles++;
+            cb_backend->max_col = ctx_maxi (cb_backend->max_col, col);
+            cb_backend->max_row = ctx_maxi (cb_backend->max_row, row);
+            cb_backend->min_col = ctx_mini (cb_backend->min_col, col);
+            cb_backend->min_row = ctx_mini (cb_backend->min_row, row);
+          }
+          else
+          {
+            low_res_tiles += cb_backend->res[tile_no];
+          }
+        }
+
+
+      int in_low_res = 0;
+      int old_flags = cb_backend->flags;
+      if (cb_backend->flags & CTX_FLAG_LOWFI)
+      {
+        in_low_res = 1; // default to assume we're in low res
+        if (dirty_tiles == 0 && low_res_tiles !=0) // no dirty and got low_res_tiles
+        {
+            cb_backend->max_col = -100;
+            cb_backend->min_col = 100;
+            cb_backend->max_row = -100;
+            cb_backend->min_row = 100;
+            tile_no = 0;
+            for (int row = 0; row < CTX_HASH_ROWS; row++)
+              for (int col = 0; col < CTX_HASH_COLS; col++, tile_no++)
+              {
+                if (cb_backend->res[tile_no])
+              {
+                cb_backend->max_col = ctx_maxi (cb_backend->max_col, col);
+                cb_backend->max_row = ctx_maxi (cb_backend->max_row, row);
+                cb_backend->min_col = ctx_mini (cb_backend->min_col, col);
+                cb_backend->min_row = ctx_mini (cb_backend->min_row, row);
+                dirty_tiles++;
+              }
+              }
+
+            active_mask = 0;
+            for (int row = cb_backend->min_row; row <= cb_backend->max_row; row++)
+            for (int col = cb_backend->min_col; col <= cb_backend->max_col; col++)
+            {
+              tile_no = row * CTX_HASH_COLS + col;
+              int tile_no = 0;
+              active_mask |= (1<<tile_no);
+            }
+            if ((cb_backend->flags & CTX_FLAG_STAY_LOW) == 0)
+              cb_backend->flags &= ~CTX_FLAG_LOWFI;
+            in_low_res = 0;
+        }
+        else if (dirty_tiles)
+        {
+            int memory = (cb_backend->max_col-cb_backend->min_col+1)*
+                          (cb_backend->max_row-cb_backend->min_row+1)*tile_dim;
+            if (memory < cb_backend->memory_budget && 0)
+            {
+              in_low_res = 0;
+              if ((cb_backend->flags & CTX_FLAG_STAY_LOW) == 0)
+                cb_backend->flags &= ~CTX_FLAG_LOWFI;
+            }
+        }
+      }
+
+      ctx_pop_backend (ctx); // done with hasher
+      if (dirty_tiles)
+      {
+         int x0 = cb_backend->min_col     * tile_width;
+         int y0 = cb_backend->min_row     * tile_height;
+         int x1 = (cb_backend->max_col+1) * tile_width - 1;
+         int y1 = (cb_backend->max_row+1) * tile_height - 1;
+#if 0
+         if (cb_backend->flags & CTX_FLAG_DAMAGE_CONTROL)
+         {
+           ctx_save (ctx);
+           ctx_rectangle (ctx, x0, y0, x1-x0+1, y1-y0+1);
+           ctx_rgba (ctx, 1,0,0,0.5);
+           ctx_line_width (ctx, 4.0);
+           ctx_stroke (ctx);
+           ctx_restore (ctx);
+         }
+#endif
+
+         //int width = x1 - x0 + 1;
+         //int height = y1 - y0 + 1;
+         int abort = 0;
+         int abortable = 1;
+
+         if (dirty_tiles <= 4 && low_res_tiles <= 4)
+         {
+           in_low_res = 0;
+           abortable = 0;
+         }
+
+         if (in_low_res)
+         {
+             abort = ctx_render_cb (cb_backend, x0, y0, x1, y1, active_mask);
+             for (int row = cb_backend->min_row; row <= cb_backend->max_row; row++)
+               for (int col = cb_backend->min_col; col <= cb_backend->max_col; col++)
+               {
+                 int tile_no = row * CTX_HASH_COLS + col;
+                 //if (abort)
+                 //{
+                   //cb_backend->res[tile_no]=0;
+                   //cb_backend->hashes[tile_no]= 23;
+                 //}
+                 //else
+                 {
+                   cb_backend->hashes[tile_no]= hashes[tile_no];
+                   cb_backend->res[tile_no]=in_low_res;
+                 }
+               }
+         }
+         else // full res
+         {
+           tile_no = 0;
+
+           for (int row = 0; row < CTX_HASH_ROWS; row++)
+           {
+             for (int col = 0; col < CTX_HASH_COLS; col++)
+               if (!abort)
+             {
+               tile_no = row * CTX_HASH_COLS + col;
+               active_mask = 1<<tile_no;
+               uint32_t new_hash = hashes[tile_no];
+               int used_tiles = 1;
+
+               if ((new_hash != cb_backend->hashes[tile_no]) ||
+                   cb_backend->res[tile_no])
+               {
+                    int x0 = col * tile_width;
+                    int y0 = row * tile_height;
+                    int x1 = x0 +  tile_width-1;
+                    int y1 = y0 +  tile_height-1;
+
+#if 1
+             int max_tiles = (cb_backend->memory_budget / tile_dim);
+                    int cont = 1;
+                    /* merge horizontal adjecant dirty tiles */
+                    if (used_tiles < max_tiles && col + 1 < CTX_HASH_COLS) do {
+                      uint32_t next_new_hash = hashes[tile_no+used_tiles];
+                      if ((next_new_hash != cb_backend->hashes[tile_no+used_tiles]) ||
+                        cb_backend->res[tile_no+used_tiles])
+                      {
+                        active_mask |= (1 << (tile_no+used_tiles));
+                        used_tiles ++;
+                        x1 += (ctx_width (ctx)/CTX_HASH_COLS);
+                      }
+                      else
+                      {
+                        cont = 0;
+                      }
+                    } while (used_tiles < max_tiles && cont && col + used_tiles < CTX_HASH_COLS);
+#endif
+
+
+                    abort = ctx_render_cb (cb_backend, x0, y0, x1, y1, active_mask);
+                    {
+                      for (int i = 0; i < used_tiles; i ++)
+                      {
+                        cb_backend->res[tile_no + i]=0;
+                        cb_backend->hashes[tile_no + i] = hashes[tile_no+i];
+                      }
+                    }
+                    if (!abortable)
+                       abort = 0;
+                    col += used_tiles - 1;
+                  }
+               }
+           }
+             }
+           }
+      cb_backend->flags = old_flags;
+  }
+  else
+  {
+    ctx_render_cb (cb_backend, 0, 0, ctx_width(ctx)-1, ctx_height(ctx)-1, 0);
+  }
+  if (cb_backend->update_fb)
+    cb_backend->update_fb (ctx, cb_backend->update_fb_user_data);
+}
+
+Ctx *ctx_new_cb (int width, int height, CtxPixelFormat format,
+                 void (*set_pixels) (Ctx *ctx, void *user_data, 
+                                     int x, int y, int w, int h, void *buf,
+                                     int buf_size),
+                 void *set_pixels_user_data,
+                 int (*update_fb) (Ctx *ctx, void *user_data),
+                 void *update_fb_user_data,
+                 int   memory_budget,
+                 void *scratch_fb,
+                 int   flags)
+{
+  Ctx *ctx                   = ctx_new_drawlist (width, height);
+  CtxBackend    *backend     = (CtxBackend*)ctx_calloc (sizeof (CtxCbBackend), 1);
+  CtxCbBackend  *cb_backend  = (CtxCbBackend*)backend;
+  backend->end_frame         = ctx_cb_end_frame;
+  cb_backend->format         = format;
+  cb_backend->fb             = (uint16_t*)scratch_fb;
+  cb_backend->set_pixels     = set_pixels;
+  cb_backend->update_fb      = update_fb;
+  cb_backend->set_pixels_user_data = set_pixels_user_data;
+  cb_backend->update_fb_user_data   = update_fb_user_data;
+  cb_backend->memory_budget  = memory_budget;
+  ctx_set_backend (ctx, backend);
+  ctx_cb_set_flags (ctx, flags);
+  cb_backend->ctx = ctx;
+  if (!scratch_fb)
+  {
+    cb_backend->memory_budget = 0;
+    ctx_cb_set_memory_budget (ctx, memory_budget);
+  }
+#if CTX_EVENTS
+  ctx_get_event (ctx);
+#endif
+  return ctx;
+}
+
+#if CTX_TFT_ESPI
+
+static void ctx_tft_set_pixels (Ctx *ctx, void *user_data, int x, int y, int w, int h, void *buf, int buf_size)
+{
+  TFT_eSPI *tft = (TFT_eSPI*)user_data;
+  tft->pushRect (x, y, w, h, (uint16_t*)buf);
+}
+
+Ctx *ctx_new_tft (TFT_eSPI *tft,
+                  int memory_budget,
+                  void *scratch_fb,
+                  int flags)
+{
+  return ctx_new_cb (tft->width(), tft->height(), 
+                     CTX_FORMAT_RGB565_BYTESWAPPED,
+                     ctx_tft_set_pixels,
+                     tft,
+                     NULL,
+                     NULL,
+                     memory_budget,
+                     scratch_fb,
+                     flags);
+}
+#endif
+
+#ifdef EMSCRIPTEN
+#include "emscripten.h"
+
+#include <unistd.h>
+
+int width = 512;
+int height = 384;
+
+static uint8_t *fb = NULL;
+static Ctx *em_ctx = NULL;
+
+CTX_EXPORT unsigned char *
+get_fb(int w, int h) {
+  if (fb)
+  {
+    if (width == w && height == h) return fb;
+    free (fb); // this is not using the ctx allocator
+               // and will thus not be part of the micropython heap budget
+    fb = NULL;
+  }
+  width  = w;
+  height = h;
+  fb = calloc (w *h, 4);
+  if (em_ctx) ctx_destroy (em_ctx);
+  em_ctx = NULL;
+  return fb;
+}
+
+EMSCRIPTEN_KEEPALIVE
+float pointer_x = 0;
+EMSCRIPTEN_KEEPALIVE
+float pointer_y = 0;
+EMSCRIPTEN_KEEPALIVE
+int32_t pointer_down = 0;
+int32_t pointer_was_down = 0;
+
+
+static uint32_t key_queue[32];
+static int key_queue_head = 0; // read head
+static int key_queued = 0;
+
+EMSCRIPTEN_KEEPALIVE
+void ctx_wasm_queue_key_event (int type, int keycode)
+{
+  if (key_queued >= 31) return;
+  int pos = (key_queue_head + key_queued) % 32;
+  key_queue[pos * 2 + 0] = type;
+  key_queue[pos * 2 + 1] = keycode;
+  key_queued ++;
+}
+
+int ctx_wasm_get_key_event (int *type, int *keycode)
+{
+  if (!key_queued)
+    return -1;
+
+  *type = key_queue[key_queue_head * 2 + 0];
+  *keycode = key_queue[key_queue_head * 2 + 1];
+
+  key_queued--;
+  key_queue_head++;
+  key_queue_head = key_queue_head % 16;
+
+  return 0;
+}
+
+int update_fb (Ctx *ctx, void *user_data)
+{
+  EM_ASM(
+    var canvas = document.getElementById('c');
+    var context = canvas.getContext('2d');
+
+     if (!canvas.regevents)
+     {
+       canvas.onmousedown = function (e){
+          var loc = windowToCanvas (canvas, e.clientX, e.clientY);
+          setValue(_pointer_x, loc.x, "float");
+          setValue(_pointer_y, loc.y, "float");
+          setValue(_pointer_down, 1, "i32");
+          e.stopPropagate=1;
+                       };
+       canvas.onmouseup = function (e){
+          var loc = windowToCanvas (canvas, e.clientX, e.clientY);
+          setValue(_pointer_x, loc.x, "float");
+          setValue(_pointer_y, loc.y, "float");
+          setValue(_pointer_down, 0, "i32");
+          e.stopPropagate=1;
+                       };
+       canvas.onmousemove = function (e){
+          var loc = windowToCanvas (canvas, e.clientX, e.clientY);
+          setValue(_pointer_x, loc.x, "float");
+          setValue(_pointer_y, loc.y, "float");
+          e.stopPropagate=1;
+                       };
+       canvas.onkeydown = function (e){
+          _ctx_wasm_queue_key_event (1, e.keyCode);
+                       e.preventDefault();
+                       e.stopPropagate = 1;
+                       };
+
+       canvas.onkeyup = function (e){
+          _ctx_wasm_queue_key_event (2, e.keyCode);
+                       e.preventDefault();
+                       e.stopPropagate = 1;
+                       };
+       canvas.regevents = true;
+     }
+  );
+
+#ifdef EMSCRIPTEN
+#ifdef ASYNCIFY
+   emscripten_sleep(0);
+#endif
+#endif
+
+   int ret = 0;
+
+   if (key_queued)
+     while (key_queued)
+   {
+     int type = 0 , keycode = 0;
+
+     ctx_wasm_get_key_event (&type, &keycode);
+     switch (type)
+     {
+       case 1:
+         ctx_key_down(ctx,keycode,NULL,0);
+         ctx_key_press(ctx,keycode,NULL,0);
+         ret = 1;
+         break;
+       case 2:
+         ctx_key_up(ctx,keycode,NULL,0);
+         ret = 1;
+         break;
+     }
+   }
+
+   if (pointer_down && !pointer_was_down)
+   {
+      ctx_pointer_press (ctx, pointer_x, pointer_y, 0, 0);
+      ret = 1;
+   } else if (!pointer_down && pointer_was_down)
+   {
+      ctx_pointer_release (ctx, pointer_x, pointer_y, 0, 0);
+      ret = 1;
+   } else if (pointer_down)
+   {
+      ctx_pointer_motion (ctx, pointer_x, pointer_y, 0, 0);
+      ret = 1;
+   }
+
+   pointer_was_down = pointer_down;
+
+   return ret;
+}
+
+EMSCRIPTEN_KEEPALIVE
+uint8_t wasm_scratch[1024*1024*4];
+
+static void set_pixels (Ctx *ctx, void *user_data, int x0, int y0, int w, int h, void *buf, int buf_size)
+{
+  uint8_t *src = (uint8_t*)buf;
+  int in_w = w;
+  if (x0 < 0) x0 = 0;
+  if (y0 < 0) y0 = 0;
+  if (x0 + w > ctx_width (ctx))
+  {
+     fprintf (stderr, "adjusting xbounds from %i %i\n", x0, w);
+     w = ctx_width (ctx) - x0;
+  }
+  if (y0 + h > ctx_height (ctx))
+  {
+     h = ctx_height (ctx) - y0;
+     fprintf (stderr, "adjusting ybounds\n");
+  }
+  for (int i = 0; i < h; i++)
+  {
+    ctx_RGB565_BS_to_RGBA8 (NULL, x0, src + i * in_w * 2,
+                    wasm_scratch + i * w * 4, w);
+  }
+
+  EM_ASM(
+    var x0 = $0;
+    var y0 = $1;
+    var w = $2;
+    var h = $3;
+    var canvas = document.getElementById('c');
+    var context = canvas.getContext('2d');
+    var _ctx = _ctx_wasm_get_context(0); // we presume an earlier
+                                         // call to have passed
+                                         // the memory budget
+    const offset = _get_fb(canvas.width, canvas.height);
+    const imgData = context.createImageData(w,h);
+
+    const linearMem = new Uint8Array(wasmMemory.buffer, _wasm_scratch,
+                                     w*h*4);
+
+    for (let i = 0; i < w * h;i++)
+    {
+      //var a = linearMem[i*4+3];
+      //var r = 1.0;
+      //if (a!=0) r = 255.0/a;
+      imgData.data[i*4+0] = linearMem[i*4+0];// * r;
+      imgData.data[i*4+1] = linearMem[i*4+1];// * r;
+      imgData.data[i*4+2] = linearMem[i*4+2];// * r;
+      imgData.data[i*4+3] = 255;
+    }
+    context.putImageData(imgData,x0,y0);
+  , x0,y0, w, h);
+
+}
+
+#if 0
+int wasm_damage_control = 0;
+
+CTX_EXPORT
+void wasm_set_damage_control(int val)
+{
+  wasm_damage_control = val;
+}
+#endif
+
+void ctx_wasm_reset (void)
+{
+  if (fb) free (fb); fb = NULL;
+  em_ctx = NULL;
+}
+
+Ctx *ctx_wasm_get_context (int memory_budget)
+{
+
+
+EM_ASM(
+    {var canvas = document.getElementById('c');
+     const offset = _get_fb(canvas.width, canvas.height);
+
+     //var dc = document.getElementById('damagecontrol');
+     //if (dc)
+     //{
+     //  _wasm_set_damage_control(dc.checked?1:0);
+     //}
+   }
+);
+
+   if (em_ctx && memory_budget)
+   {
+      CtxCbBackend *cb_backend = (CtxCbBackend*)em_ctx->backend;
+      if (memory_budget != cb_backend->memory_budget)
+      {
+         ctx_cb_set_memory_budget (em_ctx, memory_budget);
+         ctx_cb_set_flags (em_ctx, 0);
+      }
+   }
+
+
+
+   if (!em_ctx){
+      em_ctx = ctx_new_cb (width, height, CTX_FORMAT_RGB565_BYTESWAPPED,
+                           set_pixels, 
+                           NULL,
+                           update_fb,
+                           NULL,
+                           memory_budget, NULL, 
+                           0);
+   }
+
+#if 0
+   if (wasm_damage_control)
+   {
+     int flags = ctx_cb_get_flags (em_ctx);
+     flags |= CTX_FLAG_DAMAGE_CONTROL;
+     ctx_cb_set_flags (em_ctx, flags);
+   }
+   else
+   {
+     int flags = ctx_cb_get_flags (em_ctx);
+     flags &= ~CTX_FLAG_DAMAGE_CONTROL;
+     ctx_cb_set_flags (em_ctx, flags);
+   }
+#endif
+   return em_ctx;
+}
+
+#endif
+
+static CtxFont ctx_fonts[CTX_MAX_FONTS];// = NULL;
+static int     ctx_font_count = 0;
+
+static void ctx_font_setup (Ctx *ctx);
+
+static inline int ctx_font_is_monospaced (CtxFont *font)
+{
+#if CTX_ONE_FONT_ENGINE
+  return 0; // XXX
+#else
+  return font->monospaced;
+#endif
+}
+
+#if CTX_FONT_ENGINE_STB
+static float
+ctx_glyph_width_stb (CtxFont *font, Ctx *ctx, uint32_t unichar);
+static float
+ctx_glyph_kern_stb (CtxFont *font, Ctx *ctx, uint32_t unicharA, uint32_t unicharB);
+static int
+ctx_glyph_stb (CtxFont *font, Ctx *ctx, uint32_t unichar, int stroke);
+
+CtxFontEngine ctx_font_engine_stb =
+{
+#if CTX_FONTS_FROM_FILE
+  ctx_load_font_ttf_file,
+#endif
+  ctx_load_font_ttf,
+  ctx_glyph_stb,
+  ctx_glyph_width_stb,
+  ctx_glyph_kern_stb,
+};
+
+
+int
+ctx_load_font_ttf (const char *name, const void *ttf_contents, int length)
+{
+  char buf[256];
+  ctx_font_setup (NULL);
+  if (ctx_font_count >= CTX_MAX_FONTS)
+    { return -1; }
+
+  if (!stbtt_InitFont (&ctx_fonts[ctx_font_count].stb.ttf_info, ttf_contents, 0) )
+    {
+      ctx_log ( "Font init failed\n");
+      return -1;
+    }
+
+  if (name == NULL || !strcmp (name, "import")){
+  int length = 0;
+  const char *val = stbtt_GetFontNameDefault (&ctx_fonts[ctx_font_count].stb.ttf_info,
+                          &length);
+  if (val)
+  {
+    memset(buf,0,sizeof(buf));
+    memcpy(buf,val, length);
+    name = buf;
+  }
+  else
+    name = "import";
+  }
+
+  ctx_fonts[ctx_font_count].type = 1;
+  ctx_fonts[ctx_font_count].stb.name = (char *) ctx_malloc (ctx_strlen (name) + 1);
+  ctx_strcpy ( (char *) ctx_fonts[ctx_font_count].stb.name, name);
+
+  ctx_fonts[ctx_font_count].engine = &ctx_font_engine_stb;
+
+  CtxFont *font = &ctx_fonts[ctx_font_count];
+  if (font->engine->glyph_width (font, NULL, 'O') ==
+      font->engine->glyph_width (font, NULL, 'I'))
+  {
+    font->monospaced = 1;
+  }
+  else
+    font->monospaced = 0;
+
+  ctx_font_count ++;
+  return ctx_font_count-1;
+}
+
+#if CTX_FONTS_FROM_FILE
+int
+ctx_load_font_ttf_file (const char *name, const char *path)
+{
+  ctx_font_setup (NULL);
+  uint8_t *contents = NULL;
+  long length = 0;
+  ctx_get_contents (path, &contents, &length);
+  if (!contents)
+    {
+      ctx_log ( "File load failed\n");
+      return -1;
+    }
+  return ctx_load_font_ttf (name, contents, length);
+}
+#endif
+
+static int
+ctx_glyph_stb_find (Ctx *ctx, CtxFont *font, uint32_t unichar)
+{
+  stbtt_fontinfo *ttf_info = &font->stb.ttf_info;
+
+#if CTX_GLYPH_CACHE
+  uint32_t hash = ((((size_t)(font) * 23) ^ unichar) * 17) %
+            (CTX_GLYPH_CACHE_SIZE);
+  if (ctx)
+  {
+    if (ctx->glyph_index_cache[hash].font == font &&
+        ctx->glyph_index_cache[hash].unichar == unichar)
+          return ctx->glyph_index_cache[hash].offset;
+  }
+#endif
+
+  int index = stbtt_FindGlyphIndex (ttf_info, unichar);
+
+#if CTX_GLYPH_CACHE
+  if (ctx)
+  {
+    ctx->glyph_index_cache[hash].font    = font;
+    ctx->glyph_index_cache[hash].unichar = unichar;
+    ctx->glyph_index_cache[hash].offset  = index;
+  }
+#endif
+
+  return index;
+}
+
+static float
+ctx_glyph_width_stb (CtxFont *font, Ctx *ctx, uint32_t unichar)
+{
+  stbtt_fontinfo *ttf_info = &font->stb.ttf_info;
+  float font_size          = 1.0f;
+  if (ctx)
+      font_size = ctx->state.gstate.font_size;
+  float scale              = stbtt_ScaleForPixelHeight (ttf_info, font_size);
+  int advance, lsb;
+  int glyph = ctx_glyph_stb_find (ctx, font, unichar);
+
+#if CTX_EVENTS
+  if (ctx && ctx_backend_type (ctx) == CTX_BACKEND_TERM && ctx_fabsf(3.0f - font_size) < 0.03f)
+    return 2;
+#endif
+
+  if (glyph==0)
+    { return 0.0f; }
+  stbtt_GetGlyphHMetrics (ttf_info, glyph, &advance, &lsb);
+  return (advance * scale);
+}
+
+static float
+ctx_glyph_kern_stb (CtxFont *font, Ctx *ctx, uint32_t unicharA, uint32_t unicharB)
+{
+  stbtt_fontinfo *ttf_info = &font->stb.ttf_info;
+  float font_size = ctx->state.gstate.font_size;
+  float scale = stbtt_ScaleForPixelHeight (ttf_info, font_size);
+  int glyphA = ctx_glyph_stb_find (ctx, font, unicharA);
+  int glyphB = ctx_glyph_stb_find (ctx, font, unicharB);
+  return stbtt_GetGlyphKernAdvance (ttf_info, glyphA, glyphB) * scale;
+}
+
+static int
+ctx_glyph_stb (CtxFont *font, Ctx *ctx, uint32_t unichar, int stroke)
+{
+  stbtt_fontinfo *ttf_info = &font->stb.ttf_info;
+  int glyph = ctx_glyph_stb_find (ctx, font, unichar);
+  if (glyph==0)
+    { return -1; }
+  float font_size = ctx->state.gstate.font_size;
+  int   baseline = ctx->state.y;
+  float origin_x = ctx->state.x;
+  float origin_y = baseline;
+  float scale    = stbtt_ScaleForPixelHeight (ttf_info, font_size);;
+  stbtt_vertex *vertices = NULL;
+  ctx_begin_path (ctx);
+  int num_verts = stbtt_GetGlyphShape (ttf_info, glyph, &vertices);
+  for (int i = 0; i < num_verts; i++)
+    {
+      stbtt_vertex *vertex = &vertices[i];
+      switch (vertex->type)
+        {
+          case STBTT_vmove:
+            ctx_move_to (ctx,
+                         origin_x + vertex->x * scale, origin_y - vertex->y * scale);
+            break;
+          case STBTT_vline:
+            ctx_line_to (ctx,
+                         origin_x + vertex->x * scale, origin_y - vertex->y * scale);
+            break;
+          case STBTT_vcubic:
+            ctx_curve_to (ctx,
+                          origin_x + vertex->cx  * scale, origin_y - vertex->cy  * scale,
+                          origin_x + vertex->cx1 * scale, origin_y - vertex->cy1 * scale,
+                          origin_x + vertex->x   * scale, origin_y - vertex->y   * scale);
+            break;
+          case STBTT_vcurve:
+            ctx_quad_to (ctx,
+                         origin_x + vertex->cx  * scale, origin_y - vertex->cy  * scale,
+                         origin_x + vertex->x   * scale, origin_y - vertex->y   * scale);
+            break;
+        }
+    }
+  stbtt_FreeShape (ttf_info, vertices);
+  if (stroke)
+    {
+      ctx_stroke (ctx);
+    }
+  else
+    { ctx_fill (ctx); }
+  return 0;
+}
+#endif
+
+static inline int ctx_font_get_length (CtxFont *font)
+{
+   return font->ctx.data->data.u32[1];
+}
+
+#if CTX_FONT_ENGINE_CTX
+
+static inline uint32_t
+ctx_glyph_find_next (CtxFont *font, Ctx *ctx, int offset)
+{
+  int length = ctx_font_get_length (font);
+  for (int i = offset; i < length; i++)
+  {
+    CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+    if (entry->code == CTX_DEFINE_GLYPH)
+    {
+      return entry->data.u32[0];
+    }
+  }
+  return 0;
+}
+
+static int ctx_glyph_find_ctx (CtxFont *font, Ctx *ctx, uint32_t unichar)
+{
+#if CTX_GLYPH_CACHE
+  uint32_t hash = ((((size_t)(font) * 23) ^ unichar) * 17) %
+            (CTX_GLYPH_CACHE_SIZE);
+  if (ctx)
+  {
+    if (ctx->glyph_index_cache[hash].font == font &&
+        ctx->glyph_index_cache[hash].unichar == unichar)
+          return ctx->glyph_index_cache[hash].offset;
+  }
+#endif
+#if 1
+  int length = ctx_font_get_length (font);
+  for (int i = 0; i < length; i++)
+  {
+    CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+    if (entry->code == CTX_DEFINE_GLYPH &&
+        entry->data.u32[0] == unichar)
+    {
+#if CTX_GLYPH_CACHE
+       if (ctx)
+       {
+         ctx->glyph_index_cache[hash].font    = font;
+         ctx->glyph_index_cache[hash].unichar = unichar;
+         ctx->glyph_index_cache[hash].offset  = i;
+       }
+#endif
+       return i;
+       // XXX this could be prone to insertion of valid header
+       // data in included bitmaps.. is that an issue?
+       //   
+    }
+  }
+#else
+  int start = 0;
+  int end = ctx_font_get_length (font);
+  int max_iter = 10;
+    uint32_t start_glyph = ctx_glyph_find_next (font, ctx, start);
+    if (unichar  == start_glyph)
+    {
+#if CTX_GLYPH_CACHE
+       if (ctx)
+       {
+         ctx->glyph_index_cache[hash].font    = font;
+         ctx->glyph_index_cache[hash].unichar = unichar;
+         ctx->glyph_index_cache[hash].offset  = start;
+       }
+#endif
+       return start;
+    }
+
+  do {
+    int middle = (start + end) / 2;
+
+    uint32_t middle_glyph = ctx_glyph_find_next (font, ctx, middle);
+    if (unichar  == middle_glyph)
+    {
+#if CTX_GLYPH_CACHE
+       if (ctx)
+       {
+         ctx->glyph_index_cache[hash].font    = font;
+         ctx->glyph_index_cache[hash].unichar = unichar;
+         ctx->glyph_index_cache[hash].offset  = middle;
+       }
+#endif
+       return middle;
+    }
+    else if (unichar < middle_glyph)
+    {
+       end = middle;
+    } else
+    {
+       start = middle;
+    }
+
+    if (start == end)
+      return -1;
+  } while (max_iter -- > 0);
+#endif
+  return -1;
+}
+
+
+static float
+ctx_glyph_kern_ctx (CtxFont *font, Ctx *ctx, uint32_t unicharA, uint32_t unicharB)
+{
+  float font_size = ctx->state.gstate.font_size;
+  int first_kern = ctx_glyph_find_ctx (font, ctx, unicharA);
+  if (first_kern < 0) return 0.0;
+
+#if CTX_EVENTS
+  if (ctx_backend_type (ctx) == CTX_BACKEND_TERM && ctx_fabsf(3.0f - font_size) < 0.03f)
+    return 0.0f;
+#endif
+
+  int length = ctx_font_get_length (font);
+  for (int i = first_kern + 1; i < length; i++)
+    {
+      CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+      if (entry->code == CTX_KERNING_PAIR)
+        {
+          if (entry->data.u16[0] == unicharA && entry->data.u16[1] == unicharB)
+            { return entry->data.s32[1] / 255.0f * font_size / CTX_BAKE_FONT_SIZE; }
+        }
+      if (entry->code == CTX_DEFINE_GLYPH)
+        return 0.0;
+    }
+  return 0.0;
+}
+
+static float
+ctx_glyph_width_ctx (CtxFont *font, Ctx *ctx, uint32_t unichar)
+{
+  float font_size = 1.0f;
+  if (ctx)
+  {
+    CtxState *state = &ctx->state;
+    font_size = state->gstate.font_size;
+  }
+  int   start     = ctx_glyph_find_ctx (font, ctx, unichar);
+  if (start < 0)
+    { return 0.0; }  // XXX : fallback
+
+#if CTX_EVENTS
+  if (ctx && ctx_backend_type (ctx) == CTX_BACKEND_TERM && 
+                  ctx_fabsf(3.0f - font_size) < 0.03f 
+                  )
+    return 2.0f;
+#endif
+
+  int length = ctx_font_get_length (font);
+  for (int i = start; i < length; i++)
+    {
+      CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+      if (entry->code == CTX_DEFINE_GLYPH)
+        if (entry->data.u32[0] == (unsigned) unichar)
+          { return (entry->data.u32[1] / 255.0f * font_size / CTX_BAKE_FONT_SIZE); }
+    }
+  return 0.0;
+}
+
+static int
+ctx_glyph_drawlist (CtxFont *font, Ctx *ctx, CtxDrawlist *drawlist, uint32_t unichar, int stroke)
+{
+  CtxState *state = &ctx->state;
+  CtxIterator iterator;
+  float origin_x = state->x;
+  float origin_y = state->y;
+  ctx_current_point (ctx, &origin_x, &origin_y);
+  int in_glyph = 0;
+  float font_size = state->gstate.font_size;
+  int start = 0;
+#if CTX_ONE_FONT_ENGINE==0
+  if (font->type == 0)
+#endif
+  {
+  start = ctx_glyph_find_ctx (font, ctx, unichar);
+  if (start < 0)
+    { return -1; }  // XXX : fallback glyph
+  }
+  ctx_iterator_init (&iterator, drawlist, start, CTX_ITERATOR_EXPAND_BITPACK);
+  CtxCommand *command;
+
+  /* XXX :  do a binary search instead of a linear search */
+  while ( (command= ctx_iterator_next (&iterator) ) )
+    {
+      CtxEntry *entry = &command->entry;
+      if (in_glyph)
+        {
+          if (entry->code == CTX_DEFINE_GLYPH)
+            {
+              if (stroke)
+                { ctx_stroke (ctx); }
+              else
+                {
+#if CTX_RASTERIZER
+#if CTX_ENABLE_SHADOW_BLUR
+      if (ctx->backend && ((CtxRasterizer*)(ctx->backend))->in_shadow)
+      {
+        ctx_rasterizer_shadow_fill ((CtxRasterizer*)ctx->backend);
+        ((CtxRasterizer*)(ctx->backend))->in_shadow = 1;
+      }
+      else
+#endif
+#endif
+         ctx_fill (ctx); 
+               
+                }
+              ctx_restore (ctx);
+              return 0;
+            }
+          ctx_process (ctx, entry);
+        }
+      else if (entry->code == CTX_DEFINE_GLYPH && entry->data.u32[0] == unichar)
+        {
+          in_glyph = 1;
+          ctx_save (ctx);
+          ctx_translate (ctx, origin_x, origin_y);
+          ctx_move_to (ctx, 0, 0);
+          ctx_begin_path (ctx);
+          ctx_scale (ctx, font_size / CTX_BAKE_FONT_SIZE,
+                     font_size / CTX_BAKE_FONT_SIZE);
+        }
+    }
+  if (stroke)
+    { ctx_stroke (ctx);
+    }
+  else
+    { 
+    
+#if CTX_RASTERIZER
+#if CTX_ENABLE_SHADOW_BLUR
+      if (ctx->backend && ((CtxRasterizer*)(ctx->backend))->in_shadow)
+      {
+        ctx_rasterizer_shadow_fill ((CtxRasterizer*)ctx->backend);
+        ((CtxRasterizer*)(ctx->backend))->in_shadow = 1;
+      }
+      else
+#endif
+#endif
+      {
+         ctx_fill (ctx); 
+      }
+    }
+  ctx_restore (ctx);
+  return -1;
+}
+
+static int
+ctx_glyph_ctx (CtxFont *font, Ctx *ctx, uint32_t unichar, int stroke)
+{
+  CtxDrawlist drawlist;
+  drawlist.entries = font->ctx.data;
+  int length = ctx_font_get_length (font);
+  drawlist.count = length;
+  drawlist.size  = length;
+  drawlist.flags = CTX_DRAWLIST_DOESNT_OWN_ENTRIES;
+  return ctx_glyph_drawlist (font, ctx, &drawlist, unichar, stroke);
+}
+
+#if 0
+uint32_t ctx_glyph_no (Ctx *ctx, int no)
+{
+  CtxFont *font = &ctx_fonts[ctx->state.gstate.font];
+  if (no < 0 || no >= font->ctx.glyphs)
+    { return 0; }
+  return font->ctx.index[no*2]; // needs index
+}
+#endif
+
+static void ctx_font_init_ctx (CtxFont *font)
+{
+}
+
+int
+ctx_load_font_ctx (const char *name, const void *data, int length);
+#if CTX_FONTS_FROM_FILE
+int
+ctx_load_font_ctx_file (const char *name, const char *path);
+#endif
+
+#if CTX_ONE_FONT_ENGINE==0
+static CtxFontEngine ctx_font_engine_ctx =
+{
+#if CTX_FONTS_FROM_FILE
+  ctx_load_font_ctx_file,
+#endif
+  ctx_load_font_ctx,
+  ctx_glyph_ctx,
+  ctx_glyph_width_ctx,
+  ctx_glyph_kern_ctx,
+};
+#endif
+
+int
+ctx_load_font_ctx (const char *name, const void *data, int length)
+{
+  ctx_font_setup (NULL);
+  if (length % sizeof (CtxEntry) )
+    { return -1; }
+  if (ctx_font_count >= CTX_MAX_FONTS)
+    { return -1; }
+
+#if CTX_ONE_FONT_ENGINE==0
+  ctx_fonts[ctx_font_count].type = 0;
+  ctx_fonts[ctx_font_count].engine = &ctx_font_engine_ctx;
+#endif
+  //ctx_fonts[ctx_font_count].name = name;
+  ctx_fonts[ctx_font_count].ctx.data = (CtxEntry *) data;
+  //ctx_fonts[ctx_font_count].ctx.length = length / sizeof (CtxEntry);
+  ctx_font_init_ctx (&ctx_fonts[ctx_font_count]);
+
+  ctx_font_count++;
+
+#if CTX_ONE_FONT_ENGINE==0
+  CtxFont *font = &ctx_fonts[ctx_font_count-1];
+  if (font->engine->glyph_width (font, NULL, 'O') ==
+      font->engine->glyph_width (font, NULL, 'I'))
+  {
+    font->monospaced = 1;
+  }
+  else
+    font->monospaced = 0;
+#endif
+
+  return ctx_font_count-1;
+}
+
+#if CTX_FONTS_FROM_FILE
+int
+ctx_load_font_ctx_file (const char *name, const char *path)
+{
+  ctx_font_setup (NULL);
+  uint8_t *contents = NULL;
+  long length = 0;
+  ctx_get_contents (path, &contents, &length);
+  if (!contents)
+    {
+      ctx_log ( "File load failed\n");
+      return -1;
+    }
+  return ctx_load_font_ctx (name, contents, length);
+}
+#endif
+#endif
+
+#if CTX_FONT_ENGINE_CTX_FS
+
+static float
+ctx_glyph_kern_ctx_fs (CtxFont *font, Ctx *ctx, uint32_t unicharA, uint32_t unicharB)
+{
+#if 0
+  float font_size = ctx->state.gstate.font_size;
+  int first_kern = ctx_glyph_find_ctx (font, ctx, unicharA);
+  if (first_kern < 0) return 0.0;
+  for (int i = first_kern + 1; i < font->ctx.length; i++)
+    {
+      CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+      if (entry->code == CTX_KERNING_PAIR)
+        {
+          if (entry->data.u16[0] == unicharA && entry->data.u16[1] == unicharB)
+            { return entry->data.s32[1] / 255.0f * font_size / CTX_BAKE_FONT_SIZE; }
+        }
+      if (entry->code == CTX_DEFINE_GLYPH)
+        return 0.0;
+    }
+#endif
+  return 0.0;
+}
+
+static float
+ctx_glyph_width_ctx_fs (CtxFont *font, Ctx *ctx, uint32_t unichar)
+{
+  CtxState *state = &ctx->state;
+  char path[1024];
+  sprintf (path, "%s/%010x", font->ctx_fs.path, (uint32_t)unichar);
+  uint8_t *data = NULL;
+  long int len_bytes = 0;
+  ctx_get_contents (path, &data, &len_bytes);
+  float ret = 0.0;
+  float font_size = state->gstate.font_size;
+  if (data){
+    Ctx *glyph_ctx = ctx_new_drawlist (100, 100);
+    ctx_parse (glyph_ctx, (char*)data);
+    for (uint32_t i = 0; i < glyph_ctx->drawlist.count; i++)
+    {
+      CtxEntry *e = &glyph_ctx->drawlist.entries[i];
+      if (e->code == CTX_DEFINE_GLYPH)
+        ret = e->data.u32[1] / 255.0f * font_size / CTX_BAKE_FONT_SIZE;
+    }
+    ctx_free (data);
+    ctx_destroy (glyph_ctx);
+  }
+  return ret;
+}
+
+static int
+ctx_glyph_ctx_fs (CtxFont *font, Ctx *ctx, uint32_t unichar, int stroke)
+{
+  char path[1024];
+  sprintf (path, "file://%s/%010x", font->ctx_fs.path, unichar);
+  uint8_t *data = NULL;
+  long int len_bytes = 0;
+  ctx_get_contents (path, &data, &len_bytes);
+
+  if (data){
+    Ctx *glyph_ctx = ctx_new_drawlist (100, 100);
+    ctx_parse (glyph_ctx, (char*)data);
+    int ret = ctx_glyph_drawlist (font, ctx, &(glyph_ctx->drawlist),
+                                  unichar, stroke);
+    ctx_free (data);
+    ctx_destroy (glyph_ctx);
+    return ret;
+  }
+  return -1;
+}
+
+int
+ctx_load_font_ctx_fs (const char *name, const void *data, int length);
+
+static CtxFontEngine ctx_font_engine_ctx_fs =
+{
+#if CTX_FONTS_FROM_FILE
+  NULL,
+#endif
+  ctx_load_font_ctx_fs,
+  ctx_glyph_ctx_fs,
+  ctx_glyph_width_ctx_fs,
+  ctx_glyph_kern_ctx_fs,
+};
+
+int
+ctx_load_font_ctx_fs (const char *name, const void *path, int length) // length is ignored
+{
+  ctx_font_setup (NULL);
+  if (ctx_font_count >= CTX_MAX_FONTS)
+    { return -1; }
+
+  ctx_fonts[ctx_font_count].type = 3;
+  ctx_fonts[ctx_font_count].ctx_fs.name = strdup (name);
+  ctx_fonts[ctx_font_count].ctx_fs.path = ctx_strdup (path);
+  int path_len = ctx_strlen (path);
+  if (ctx_fonts[ctx_font_count].ctx_fs.path[path_len-1] == '/')
+   ctx_fonts[ctx_font_count].ctx_fs.path[path_len-1] = 0;
+  ctx_fonts[ctx_font_count].engine = &ctx_font_engine_ctx_fs;
+  ctx_font_count++;
+  return ctx_font_count-1;
+}
+
+#endif
+
+int
+_ctx_glyph (Ctx *ctx, uint32_t unichar, int stroke)
+{
+  CtxFont *font = &ctx_fonts[ctx->state.gstate.font];
+  // a begin-path here did not remove stray spikes in terminal
+#if CTX_ONE_FONT_ENGINE
+  return ctx_glyph_ctx (font, ctx, unichar, stroke);
+#else
+  return font->engine->glyph (font, ctx, unichar, stroke);
+#endif
+
+}
+
+int
+ctx_glyph (Ctx *ctx, uint32_t unichar, int stroke)
+{
+#if CTX_BACKEND_TEXT
+  CtxEntry commands[3]; // 3 to silence incorrect warning from static analysis
+  ctx_memset (commands, 0, sizeof (commands) );
+  if (stroke)
+    unichar = unichar | (1<<31);
+  commands[0] = ctx_u32 (CTX_GLYPH, unichar, 0);
+  //commands[1].data.u8[4] = stroke;
+  ctx_process (ctx, commands);
+  return 0; // XXX is return value used?
+#else
+  return _ctx_glyph (ctx, unichar, stroke);
+#endif
+}
+
+float
+ctx_glyph_width (Ctx *ctx, int unichar)
+{
+  CtxFont *font = &ctx_fonts[ctx->state.gstate.font];
+#if CTX_ONE_FONT_ENGINE
+  return ctx_glyph_width_ctx (font, ctx, unichar);
+#else
+  return font->engine->glyph_width (font, ctx, unichar);
+#endif
+}
+
+static float
+ctx_glyph_kern (Ctx *ctx, int unicharA, int unicharB)
+{
+  CtxFont *font = &ctx_fonts[ctx->state.gstate.font];
+#if CTX_ONE_FONT_ENGINE
+  return ctx_glyph_kern_ctx (font, ctx, unicharA, unicharB);
+#else
+  return font->engine->glyph_kern (font, ctx, unicharA, unicharB);
+#endif
+}
+
+float
+ctx_text_width (Ctx        *ctx,
+                const char *string)
+{
+  float sum = 0.0;
+  if (!string)
+    return 0.0f;
+  for (const char *utf8 = string; *utf8; utf8 = ctx_utf8_skip (utf8, 1) )
+    {
+      sum += ctx_glyph_width (ctx, ctx_utf8_to_unichar (utf8) );
+    }
+  return sum;
+}
+
+static void
+_ctx_glyphs (Ctx     *ctx,
+             CtxGlyph *glyphs,
+             int       n_glyphs,
+             int       stroke)
+{
+  for (int i = 0; i < n_glyphs; i++)
+    {
+      {
+        uint32_t unichar = glyphs[i].index;
+        ctx_move_to (ctx, glyphs[i].x, glyphs[i].y);
+        ctx_glyph (ctx, unichar, stroke);
+      }
+    }
+}
+
+
+#define CTX_MAX_WORD_LEN 128
+
+#if 1
+static int ctx_glyph_find (Ctx *ctx, CtxFont *font, uint32_t unichar)
+{
+  int length = ctx_font_get_length (font);
+  for (int i = 0; i < length; i++)
+    {
+      CtxEntry *entry = (CtxEntry *) &font->ctx.data[i];
+      if (entry->code == CTX_DEFINE_GLYPH && entry->data.u32[0] == unichar)
+        { return i; }
+    }
+  return 0;
+}
+#endif
+
+static inline int
+_ctx_text_substitute_ligatures (Ctx *ctx, CtxFont *font,
+                                uint32_t *unichar, uint32_t next_unichar)
+{
+  if (ctx_font_is_monospaced (font))
+    return 0;
+  if (*unichar == 'f')
+    switch (next_unichar)
+    {
+      case 'f': if (ctx_glyph_find (ctx, font, 0xfb00))
+        {
+          *unichar = 0xfb00;
+          return 1;
+        }
+        break;
+      case 'i':
+        if (ctx_glyph_find (ctx, font, 0xfb01))
+        {
+          *unichar = 0xfb01;
+          return 1;
+        }
+        break;
+      case 'l': 
+        if (ctx_glyph_find (ctx, font, 0xfb02))
+        {
+          *unichar = 0xfb02;
+          return 1;
+        }
+        break;
+      case 't': 
+        if (ctx_glyph_find (ctx, font, 0xfb05))
+        {
+          *unichar = 0xfb05;
+          return 1;
+        }
+        break;
+    }
+  return 0;
+}
+
+static void
+_ctx_text (Ctx        *ctx,
+           const char *string,
+           int         stroke,
+           int         visible)
+{
+  char word[CTX_MAX_WORD_LEN];
+  int word_len = 0;
+  CtxState *state = &ctx->state;
+  CtxFont *font = &ctx_fonts[state->gstate.font];
+  float x = ctx->state.x;
+  word[word_len]=0;
+  switch ( (int) ctx_state_get (state, CTX_textAlign) )
+    //switch (state->gstate.text_align)
+    {
+      case CTX_TEXT_ALIGN_START:
+      case CTX_TEXT_ALIGN_LEFT:
+        break;
+      case CTX_TEXT_ALIGN_CENTER:
+        x -= ctx_text_width (ctx, string) /2;
+        break;
+      case CTX_TEXT_ALIGN_END:
+      case CTX_TEXT_ALIGN_RIGHT:
+        x -= ctx_text_width (ctx, string);
+        break;
+    }
+  float y = ctx->state.y;
+  float baseline_offset = 0.0f;
+  switch ( (int) ctx_state_get (state, CTX_textBaseline) )
+    {
+      case CTX_TEXT_BASELINE_HANGING:
+        /* XXX : crude */
+        baseline_offset = ctx->state.gstate.font_size  * 0.55f;
+        break;
+      case CTX_TEXT_BASELINE_TOP:
+        /* XXX : crude */
+        baseline_offset = ctx->state.gstate.font_size  * 0.7f;
+        break;
+      case CTX_TEXT_BASELINE_BOTTOM:
+        baseline_offset = -ctx->state.gstate.font_size * 0.1f;
+        break;
+      case CTX_TEXT_BASELINE_ALPHABETIC:
+      case CTX_TEXT_BASELINE_IDEOGRAPHIC:
+        baseline_offset = 0.0f;
+        break;
+      case CTX_TEXT_BASELINE_MIDDLE:
+        baseline_offset = ctx->state.gstate.font_size * 0.25f;
+        break;
+    }
+  float x0 = x;
+  float x1 = x + 10000.0f;
+  
+  float wrap_left = ctx_get_wrap_left (ctx);
+  float wrap_right = ctx_get_wrap_right (ctx);
+  if (wrap_left != wrap_right)
+  {
+    x0 = wrap_left;
+  }
+
+  if (*string)
+  for (const char *utf8 = string; utf8 && ( (utf8==string ) || utf8[-1]); utf8 = *utf8?ctx_utf8_skip (utf8, 1):NULL)
+    {
+      if (*utf8 == '\n' ||
+          *utf8 == ' ' ||
+          *utf8 == '\0')
+        {
+          float word_width = 0.0;
+          word[word_len]=0;
+
+          for (const char *bp = &word[0]; *bp; bp = ctx_utf8_skip (bp, 1))
+          {
+            uint32_t unichar      = ctx_utf8_to_unichar (bp);
+            const char *next_utf8 = ctx_utf8_skip (bp, 1);
+            uint32_t next_unichar = *next_utf8?ctx_utf8_to_unichar (next_utf8):0;
+
+            if (_ctx_text_substitute_ligatures (ctx, font, &unichar, next_unichar))
+              bp++;
+
+            float glyph_width     = ctx_glyph_width (ctx, unichar);
+            word_width += glyph_width;
+            if (next_unichar)
+              word_width += ctx_glyph_kern (ctx, unichar, next_unichar);
+          }
+
+          if (wrap_left != wrap_right &&
+              x + word_width >= wrap_right)
+          {
+            y += ctx->state.gstate.font_size * ctx_get_line_height (ctx);
+            x = x0;
+          }
+
+          for (const char *bp = &word[0]; *bp; bp = ctx_utf8_skip (bp, 1))
+          {
+            uint32_t unichar      = ctx_utf8_to_unichar (bp);
+            const char *next_utf8 = ctx_utf8_skip (bp, 1);
+            uint32_t next_unichar = *next_utf8?ctx_utf8_to_unichar (next_utf8):0;
+
+            if (_ctx_text_substitute_ligatures (ctx, font, &unichar, next_unichar))
+              bp++;
+
+            float glyph_width = ctx_glyph_width (ctx, unichar);
+            if (x + glyph_width >= x1)
+            {
+              y += ctx->state.gstate.font_size * ctx_get_line_height (ctx);
+              x = x0;
+            }
+            if (visible)
+            {
+              ctx_move_to (ctx, x, y + baseline_offset);
+              _ctx_glyph (ctx, unichar, stroke);
+            }
+            x += glyph_width;
+            if (next_unichar)
+              x += ctx_glyph_kern (ctx, unichar, next_unichar );
+          }
+
+          if (*utf8 == '\n')
+          {
+            y += ctx->state.gstate.font_size * ctx_get_line_height (ctx);
+            x = x0;
+          }
+          else if (*utf8 == ' ')
+          {
+            x += ctx_glyph_width (ctx, ' ');
+          }
+          word_len=0;
+          word[word_len]=0;
+        }
+      else
+      {
+        int len = ctx_utf8_len (*utf8);
+        for (int i = 0; i < len; i++)
+        {
+          if (word_len + 1 < CTX_MAX_WORD_LEN-1)
+            word[word_len++]=utf8[i];
+        }
+      }
+
+    }
+  if (!visible)
+    { ctx_move_to (ctx, x, y); }
+}
+
+
+CtxGlyph *
+ctx_glyph_allocate (int n_glyphs)
+{
+  return (CtxGlyph *) ctx_malloc (sizeof (CtxGlyph) * n_glyphs);
+}
+void
+ctx_glyph_free     (CtxGlyph *glyphs)
+{
+  ctx_free (glyphs);
+}
+
+void
+ctx_glyphs (Ctx        *ctx,
+            CtxGlyph   *glyphs,
+            int         n_glyphs)
+{
+  _ctx_glyphs (ctx, glyphs, n_glyphs, 0);
+}
+
+void
+ctx_glyphs_stroke (Ctx        *ctx,
+                   CtxGlyph   *glyphs,
+                   int         n_glyphs)
+{
+  _ctx_glyphs (ctx, glyphs, n_glyphs, 1);
+}
+
+void
+ctx_text (Ctx        *ctx,
+          const char *string)
+{
+  if (!string)
+    return;
+#if CTX_BACKEND_TEXT
+  ctx_process_cmd_str (ctx, CTX_TEXT, string, 0, 0);
+  _ctx_text (ctx, string, 0, 0);
+#else
+  _ctx_text (ctx, string, 0, 1);
+#endif
+}
+
+
+void
+ctx_fill_text (Ctx *ctx, const char *string,
+               float x, float y)
+{
+  ctx_move_to (ctx, x, y);
+  ctx_text (ctx, string);
+}
+
+void
+ctx_text_stroke (Ctx        *ctx,
+                 const char *string)
+{
+  if (!string)
+    return;
+#if CTX_BACKEND_TEXT
+  ctx_process_cmd_str (ctx, CTX_STROKE_TEXT, string, 0, 0);
+  _ctx_text (ctx, string, 1, 0);
+#else
+  _ctx_text (ctx, string, 1, 1);
+#endif
+}
+
+void
+ctx_stroke_text (Ctx *ctx, const char *string,
+               float x, float y)
+{
+  ctx_move_to (ctx, x, y);
+  ctx_text_stroke (ctx, string);
+}
+
+static const char *ctx_font_get_name (CtxFont *font)
+{
+#if CTX_ONE_FONT_ENGINE
+    return ((char*)(font->ctx.data+2))+1;
+#else
+  switch (font->type)
+  {
+    case 0:  return ((char*)(font->ctx.data+2))+1;
+#if CTX_FONT_ENGINE_STB
+    case 1:  return font->stb.name;
+    case 2:  return font->stb.name;
+#endif
+#if CTX_FONT_ENGINE_CTX_FS
+    case 3:  return font->ctx_fs.name;
+#endif
+  }
+  return "-";
+#endif
+}
+
+static int _ctx_resolve_font (const char *name)
+{
+  char temp[ctx_strlen (name)+1];
+  /* first we look for exact */
+  for (int i = 0; i < ctx_font_count; i ++)
+    {
+      if (!ctx_strcmp (ctx_font_get_name (&ctx_fonts[i]), name) )
+        { return i; }
+    }
+  /* ... and substring matches for passed in string */
+  for (int i = 0; i < ctx_font_count; i ++)
+    {
+      if (ctx_strstr (ctx_font_get_name (&ctx_fonts[i]), name) )
+        { return i; }
+    }
+
+  /* then we normalize some names */
+  if (!strncmp (name, "Helvetica", 9))
+  {
+     memset(temp,0,sizeof(temp));
+     strncpy (temp, name + 4, sizeof(temp)-1);
+     memcpy (temp, "Arrrr", 5);  // we should match Arial and Arimo
+     name = temp;
+  }
+  else if (!strncmp (name, "Monospace", 9))
+  {
+     memset(temp,0,sizeof(temp));
+     strncpy (temp, name + 2, sizeof(temp)-1);
+     memcpy (temp, "Courier", 7); 
+     name = temp;
+  }
+  else if (!strncmp (name, "Mono ", 5))
+  {
+    memset(temp,0,sizeof(temp));
+    strncpy (temp + 3, name, sizeof(temp)-1-3);
+    memcpy (temp, "Courier ", 8); 
+    name = temp;
+  }
+  else if (!strcmp (name, "Mono"))
+  {
+    name = "Courier";
+  }
+
+  /* and attempt substring matching with mangled named
+   * permitting matches with length and two first chars
+   * to be valid
+   */
+  {
+    char *subname = (char*)name;
+    int namelen = 0; 
+    if (strchr (subname, ' '))
+    {
+      subname = strchr (subname, ' ');
+      namelen = subname - name;
+      subname++;
+    }
+    for (int i = 0; i < ctx_font_count; i ++)
+    {
+      const char *font_name = ctx_font_get_name (&ctx_fonts[i]);
+      if (font_name[0]==name[0] &&
+          font_name[1]==name[1] &&
+          font_name[namelen] == name[namelen] &&
+          (namelen == 0 || ctx_strstr (font_name, subname) ))
+        return i;
+    }
+  }
+
+  /* then we look for a match of the substring after the first
+   * space
+   */
+  if (strchr (name, ' '))
+  {
+     char *subname = strchr (name, ' ');
+     for (int i = 0; i < ctx_font_count; i ++)
+     {
+       const char *font_name = ctx_font_get_name (&ctx_fonts[i]);
+       if (ctx_strstr (font_name, subname) )
+         { return i; }
+     }
+  }
+
+  return -1;
+}
+
+const char *ctx_get_font_name (Ctx *ctx, int no)
+{
+  if (no >= 0 && no < ctx_font_count)
+    return ctx_font_get_name (&ctx_fonts[no]);
+  return NULL;
+}
+
+int ctx_resolve_font (const char *name)
+{
+  int ret = _ctx_resolve_font (name);
+  if (ret >= 0)
+    { return ret; }
+  if (!ctx_strcmp (name, "regular") )
+    {
+      int ret = _ctx_resolve_font ("sans");
+      if (ret >= 0) { return ret; }
+      ret = _ctx_resolve_font ("serif");
+      if (ret >= 0) { return ret; }
+    }
+  return 0;
+}
+
+
+
+#if !( defined(CTX_FONT_0) ||\
+       defined(CTX_FONT_1) ||\
+       defined(CTX_FONT_2) ||\
+       defined(CTX_FONT_3) ||\
+       defined(CTX_FONT_4) ||\
+       defined(CTX_FONT_5) ||\
+       defined(CTX_FONT_6) ||\
+       defined(CTX_FONT_7) ||\
+       defined(CTX_FONT_8) ||\
+       defined(CTX_FONT_9) ||\
+       defined(CTX_FONT_10) ||\
+       defined(CTX_FONT_11) ||\
+       defined(CTX_FONT_12) ||\
+       defined(CTX_FONT_13) ||\
+       defined(CTX_FONT_14) ||\
+       defined(CTX_FONT_15) ||\
+       defined(CTX_FONT_16) ||\
+       defined(CTX_FONT_17) ||\
+       defined(CTX_FONT_18) ||\
+       defined(CTX_FONT_19) ||\
+       defined(CTX_FONT_20) ||\
+       defined(CTX_FONT_21))
+#define static_FONT(font_string, font_data) \
+  ctx_load_font_ctx(font_string, ctx_font_##font_data, sizeof (ctx_font_##font_data))
+#define CTX_FONT_0 static_FONT("sans-ctx", ascii)
+#endif
+
+
+
+static void ctx_font_setup (Ctx *ctx)
+{
+  static int initialized = 0;
+  if (initialized) { 
+    if (ctx)
+      ctx->fonts = ctx_fonts;
+    return;
+  }
+  initialized = 1;
+
+  //if (!ctx_fonts)
+#ifdef EMSCRIPTEN
+    //ctx_fonts = calloc (CTX_MAX_FONTS, sizeof (CtxFont));
+#else
+    //ctx_fonts = ctx_calloc (CTX_MAX_FONTS, sizeof (CtxFont));
+#endif
+  if (ctx)
+    ctx->fonts = &ctx_fonts[0];
+
+  ctx_font_count = 0; 
+
+#if CTX_FONT_ENGINE_CTX_FS
+  if (getenv ("CTX_FONT_LIVE_PATH"))
+  {
+    if (getenv ("CTX_FONT_LIVE_NAME"))
+      ctx_load_font_ctx_fs (getenv ("CTX_FONT_LIVE_NAME"), getenv ("CTX_FONT_LIVE_PATH"), 0);
+    else
+      ctx_load_font_ctx_fs ("Arrrr Regular", getenv ("CTX_FONT_LIVE_PATH"),0);
+  }
+#endif
+
+#if CTX_FONT_ENGINE_CTX
+
+#ifdef CTX_FONT_0
+  CTX_FONT_0;
+#endif
+#ifdef CTX_FONT_1
+  CTX_FONT_1;
+#endif
+#ifdef CTX_FONT_2
+  CTX_FONT_2;
+#endif
+#ifdef CTX_FONT_3
+  CTX_FONT_3;
+#endif
+#ifdef CTX_FONT_4
+  CTX_FONT_4;
+#endif
+#ifdef CTX_FONT_5
+  CTX_FONT_5;
+#endif
+#ifdef CTX_FONT_6
+  CTX_FONT_6;
+#endif
+#ifdef CTX_FONT_7
+  CTX_FONT_7;
+#endif
+#ifdef CTX_FONT_8
+  CTX_FONT_8;
+#endif
+#ifdef CTX_FONT_9
+  CTX_FONT_9;
+#endif
+#ifdef CTX_FONT_10
+  CTX_FONT_10;
+#endif
+#ifdef CTX_FONT_11
+  CTX_FONT_11;
+#endif
+#ifdef CTX_FONT_12
+  CTX_FONT_12;
+#endif
+#ifdef CTX_FONT_13
+  CTX_FONT_13;
+#endif
+#ifdef CTX_FONT_14
+  CTX_FONT_14;
+#endif
+#ifdef CTX_FONT_15
+  CTX_FONT_15;
+#endif
+#ifdef CTX_FONT_16
+  CTX_FONT_16;
+#endif
+#ifdef CTX_FONT_17
+  CTX_FONT_17;
+#endif
+#ifdef CTX_FONT_18
+  CTX_FONT_18;
+#endif
+#ifdef CTX_FONT_19
+  CTX_FONT_19;
+#endif
+#ifdef CTX_FONT_20
+  CTX_FONT_20;
+#endif
+#ifdef CTX_FONT_21
+  CTX_FONT_21;
+#endif
+#ifdef CTX_FONT_22
+  CTX_FONT_22;
+#endif
+#ifdef CTX_FONT_23
+  CTX_FONT_23;
+#endif
+#ifdef CTX_FONT_24
+  CTX_FONT_24;
+#endif
+#ifdef CTX_FONT_25
+  CTX_FONT_25;
+#endif
+#ifdef CTX_FONT_26
+  CTX_FONT_26;
+#endif
+#ifdef ctx_font_27
+  ctx_font_27;
+#endif
+#ifdef ctx_font_28
+  ctx_font_28;
+#endif
+#ifdef CTX_FONT_29
+  CTX_FONT_29;
+#endif
+#ifdef CTX_FONT_30
+  CTX_FONT_30;
+#endif
+#ifdef CTX_FONT_31
+  CTX_FONT_31;
+#endif
+#endif
+}
+
+
+
+#if CTX_FORMATTER
+
+typedef struct _CtxFormatter  CtxFormatter;
+struct _CtxFormatter 
+{
+  void *target; // FILE
+  int   longform;
+  int   indent;
+
+  void (*add_str)(CtxFormatter *formatter, const char *str, int len);
+};
+
+static inline void ctx_formatter_addstr (CtxFormatter *formatter, const char *str, int len)
+{
+  formatter->add_str (formatter, str, len);
+}
+
+#if 0
+static inline void ctx_formatter_addstrf (CtxFormatter *formatter, const char *format, ...)
+{
+   va_list ap;
+   size_t needed;
+   char *buffer;
+   va_start (ap, format);
+   needed = vsnprintf (NULL, 0, format, ap) + 1;
+   buffer = (char*) ctx_malloc (needed);
+   va_end (ap);
+   va_start (ap, format);
+   vsnprintf (buffer, needed, format, ap);
+   va_end (ap);
+   ctx_formatter_addstr (formatter, buffer, -1);
+   ctx_free (buffer);
+}
+#endif
+
+
+static void
+ctx_print_int (CtxFormatter *formatter, int val)
+{
+  char buf[64];
+  char *bp = &buf[0];
+  int remainder;
+  if (val < 0)
+  {
+    buf[0]='-';
+    bp++;
+    remainder = -val;
+  }
+  else
+  remainder = val;
+
+  int len = 0;
+  do {
+    int digit = remainder % 10;
+    bp[len++] = digit + '0';
+    remainder /= 10;
+  } while (remainder);
+
+  bp[len]=0;
+  for (int i = 0; i < len/2; i++)
+  {
+    int tmp = bp[i];
+    bp[i] = bp[len-1-i];
+    bp[len-1-i] = tmp;
+  }
+  len += (val < 0);
+  ctx_formatter_addstr (formatter, buf, len);
+}
+
+static void
+ctx_print_float (CtxFormatter *formatter, float val)
+{
+  if (val < 0.0f)
+  {
+    ctx_formatter_addstr (formatter, "-", 1);
+    val = -val;
+  }
+  int remainder = ((int)(val*10000))%10000;
+  if (remainder % 10 > 5)
+    remainder = remainder/10+1;
+  else
+    remainder /= 10;
+
+  ctx_print_int (formatter, (int)val);
+  if (remainder)
+  {
+    ctx_formatter_addstr (formatter, ".", 1);
+    if (remainder < 10)
+      ctx_formatter_addstr (formatter, "0", 1);
+    if (remainder < 100)
+      ctx_formatter_addstr (formatter, "0", 1);
+    ctx_print_int (formatter, remainder);
+  }
+}
+
+static void _ctx_stream_addstr (CtxFormatter *formatter, const char *str, int len)
+{
+  if (!str || len == 0)
+  {
+    return;
+  }
+  if (len < 0) len = ctx_strlen (str);
+  fwrite (str, len, 1, (FILE*)formatter->target);
+}
+
+void _ctx_string_addstr (CtxFormatter *formatter, const char *str, int len)
+{
+  if (!str || len == 0)
+  {
+    return;
+  }
+  if (len < 0) len = ctx_strlen (str);
+  ctx_string_append_data ((CtxString*)(formatter->target), str, len);
+}
+
+static void _ctx_print_endcmd (CtxFormatter *formatter)
+{
+  if (formatter->longform)
+    {
+      ctx_formatter_addstr (formatter, ");\n", 3);
+    }
+}
+
+static void _ctx_indent (CtxFormatter *formatter)
+{
+  for (int i = 0; i < formatter->indent; i++)
+    { ctx_formatter_addstr (formatter, "  ", 2);
+    }
+}
+
+const char *_ctx_code_to_name (int code)
+{
+      switch (code)
+        {
+          case CTX_REL_LINE_TO_X4:           return "relLinetoX4"; break;
+          case CTX_REL_LINE_TO_REL_CURVE_TO: return "relLineToRelCurveTo"; break;
+          case CTX_REL_CURVE_TO_REL_LINE_TO: return "relCurveToRelLineTo"; break;
+          case CTX_REL_CURVE_TO_REL_MOVE_TO: return "relCurveToRelMoveTo"; break;
+          case CTX_REL_LINE_TO_X2:           return "relLineToX2"; break;
+          case CTX_MOVE_TO_REL_LINE_TO:      return "moveToRelLineTo"; break;
+          case CTX_REL_LINE_TO_REL_MOVE_TO:  return "relLineToRelMoveTo"; break;
+          case CTX_FILL_MOVE_TO:             return "fillMoveTo"; break;
+          case CTX_REL_QUAD_TO_REL_QUAD_TO:  return "relQuadToRelQuadTo"; break;
+          case CTX_REL_QUAD_TO_S16:          return "relQuadToS16"; break;
+
+          case CTX_SET_KEY:              return "setParam"; break;
+          case CTX_COLOR:                return "setColor"; break;
+          case CTX_DEFINE_GLYPH:         return "defineGlyph"; break;
+          case CTX_DEFINE_FONT:          return "defineFont"; break;
+          case CTX_KERNING_PAIR:         return "kerningPair"; break;
+          case CTX_SET_PIXEL:            return "setPixel"; break;
+          case CTX_GLOBAL_ALPHA:         return "globalAlpha"; break;
+          case CTX_TEXT:                 return "text"; break;
+          case CTX_STROKE_TEXT:          return "strokeText"; break;
+          case CTX_SAVE:                 return "save"; break;
+          case CTX_RESTORE:              return "restore"; break;
+          case CTX_STROKE_SOURCE:        return "strokeSource"; break;
+          case CTX_NEW_PAGE:             return "newPage"; break;
+          case CTX_START_GROUP:          return "startGroup"; break;
+          case CTX_END_GROUP:            return "endGroup"; break;
+          case CTX_RECTANGLE:            return "rectangle"; break;
+          case CTX_ROUND_RECTANGLE:      return "roundRectangle"; break;
+          case CTX_LINEAR_GRADIENT:      return "linearGradient"; break;
+          case CTX_RADIAL_GRADIENT:      return "radialGradient"; break;
+          case CTX_GRADIENT_STOP:        return "gradientAddStop"; break;
+          case CTX_VIEW_BOX:             return "viewBox"; break;
+          case CTX_MOVE_TO:              return "moveTo"; break;
+          case CTX_LINE_TO:              return "lineTo"; break;
+          case CTX_BEGIN_PATH:           return "beginPath"; break;
+          case CTX_REL_MOVE_TO:          return "relMoveTo"; break;
+          case CTX_REL_LINE_TO:          return "relLineTo"; break;
+          case CTX_FILL:                 return "fill"; break;
+          case CTX_PAINT:                return "paint"; break;
+          case CTX_EXIT:                 return "exit"; break;
+          case CTX_APPLY_TRANSFORM:      return "transform"; break;
+          case CTX_SOURCE_TRANSFORM:     return "sourceTransform"; break;
+          case CTX_REL_ARC_TO:           return "relArcTo"; break;
+          case CTX_GLYPH:                return "glyph"; break;
+          case CTX_TEXTURE:              return "texture"; break;
+          case CTX_DEFINE_TEXTURE:       return "defineTexture"; break;
+          case CTX_IDENTITY:             return "identity"; break;
+          case CTX_CLOSE_PATH:           return "closePath"; break;
+          case CTX_PRESERVE:             return "preserve"; break;
+          case CTX_START_FRAME:          return "start_frame"; break;
+          case CTX_END_FRAME:            return "end_frame"; break;
+          case CTX_FONT:                 return "font"; break;
+          case CTX_STROKE:               return "stroke"; break;
+          case CTX_CLIP:                 return "clip"; break;
+          case CTX_ARC:                  return "arc"; break;
+          case CTX_SCALE:                return "scale"; break;
+          case CTX_TRANSLATE:            return "translate"; break;
+          case CTX_ROTATE:               return "rotate"; break;
+          case CTX_ARC_TO:               return "arcTo"; break;
+          case CTX_CURVE_TO:             return "curveTo"; break;
+          case CTX_REL_CURVE_TO:         return "relCurveTo"; break;
+          case CTX_REL_QUAD_TO:          return "relQuadTo"; break;
+          case CTX_QUAD_TO:              return "quadTo"; break;
+          case CTX_SMOOTH_TO:            return "smoothTo"; break;
+          case CTX_REL_SMOOTH_TO:        return "relSmoothTo"; break;
+          case CTX_SMOOTHQ_TO:           return "smoothqTo"; break;
+          case CTX_REL_SMOOTHQ_TO:       return "relSmoothqTo"; break;
+          case CTX_HOR_LINE_TO:          return "horLineTo"; break;
+          case CTX_VER_LINE_TO:          return "verLineTo"; break;
+          case CTX_REL_HOR_LINE_TO:      return "relHorLineTo"; break;
+          case CTX_REL_VER_LINE_TO:      return "relVerLineTo"; break;
+          case CTX_COMPOSITING_MODE:     return "compositingMode"; break;
+          case CTX_BLEND_MODE:           return "blendMode"; break;
+          case CTX_EXTEND:               return "extend"; break;
+          case CTX_TEXT_ALIGN:           return "textAlign"; break;
+          case CTX_TEXT_BASELINE:        return "textBaseline"; break;
+          case CTX_TEXT_DIRECTION:       return "textDirection"; break;
+          case CTX_FONT_SIZE:            return "fontSize"; break;
+          case CTX_MITER_LIMIT:          return "miterLimit"; break;
+          case CTX_LINE_JOIN:            return "lineJoin"; break;
+          case CTX_LINE_CAP:             return "lineCap"; break;
+          case CTX_LINE_WIDTH:           return "lineWidth"; break;
+          case CTX_LINE_DASH_OFFSET:     return "lineDashOffset"; break;
+          case CTX_LINE_HEIGHT:          return "lineHeight";break;
+          case CTX_WRAP_LEFT:            return "wrapLeft"; break;
+          case CTX_WRAP_RIGHT:           return "wrapRight"; break;
+          case CTX_IMAGE_SMOOTHING:      return "imageSmoothing"; break;
+          case CTX_SHADOW_BLUR:          return "shadowBlur";  break;
+          case CTX_FILL_RULE:            return "fillRule"; break;
+        }
+      return NULL;
+}
+
+static void _ctx_print_name (CtxFormatter *formatter, int code)
+{
+#define CTX_VERBOSE_NAMES 1
+#if CTX_VERBOSE_NAMES
+  if (formatter->longform)
+    {
+      const char *name = NULL;
+      _ctx_indent (formatter);
+      //switch ((CtxCode)code)
+      name = _ctx_code_to_name (code);
+      if (name)
+        {
+          ctx_formatter_addstr (formatter, name, -1);
+          ctx_formatter_addstr (formatter, " (", 2);
+          if (code == CTX_SAVE)
+            { formatter->indent ++; }
+          else if (code == CTX_RESTORE)
+            { formatter->indent --; }
+          return;
+        }
+    }
+#endif
+  {
+    char name[3];
+    name[0]=CTX_SET_KEY;
+    name[2]='\0';
+    switch (code)
+      {
+        case CTX_GLOBAL_ALPHA:      name[1]='a'; break;
+        case CTX_COMPOSITING_MODE:  name[1]='m'; break;
+        case CTX_BLEND_MODE:        name[1]='B'; break;
+        case CTX_EXTEND:            name[1]='e'; break;
+        case CTX_TEXT_ALIGN:        name[1]='t'; break;
+        case CTX_TEXT_BASELINE:     name[1]='b'; break;
+        case CTX_TEXT_DIRECTION:    name[1]='d'; break;
+        case CTX_FONT_SIZE:         name[1]='f'; break;
+        case CTX_MITER_LIMIT:       name[1]='l'; break;
+        case CTX_LINE_JOIN:         name[1]='j'; break;
+        case CTX_LINE_CAP:          name[1]='c'; break;
+        case CTX_LINE_WIDTH:        name[1]='w'; break;
+        case CTX_LINE_DASH_OFFSET:  name[1]='D'; break;
+        case CTX_LINE_HEIGHT:       name[1]='H'; break;
+        case CTX_WRAP_LEFT:         name[1]='L'; break;
+        case CTX_WRAP_RIGHT:        name[1]='R'; break;
+        case CTX_IMAGE_SMOOTHING:   name[1]='S'; break;
+        case CTX_SHADOW_BLUR:       name[1]='s'; break;
+        case CTX_SHADOW_COLOR:      name[1]='C'; break;
+        case CTX_SHADOW_OFFSET_X:   name[1]='x'; break;
+        case CTX_SHADOW_OFFSET_Y:   name[1]='y'; break;
+        case CTX_FILL_RULE:         name[1]='r'; break;
+        default:
+          name[0] = code;
+          name[1] = 0;
+          break;
+      }
+    ctx_formatter_addstr (formatter, name, -1);
+    if (formatter->longform)
+      ctx_formatter_addstr (formatter, " (", 2);
+    else
+      ctx_formatter_addstr (formatter, " ", 1);
+  }
+}
+
+static void
+ctx_print_entry_enum (CtxFormatter *formatter, CtxEntry *entry, int args)
+{
+  _ctx_print_name (formatter, entry->code);
+  for (int i = 0; i <  args; i ++)
+    {
+      int val = ctx_arg_u8 (i);
+      if (i>0)
+        { 
+          ctx_formatter_addstr (formatter, " ", 1);
+        }
+#if CTX_VERBOSE_NAMES
+      if (formatter->longform)
+        {
+          const char *str = NULL;
+          switch (entry->code)
+            {
+              case CTX_TEXT_BASELINE:
+                switch (val)
+                  {
+                    case CTX_TEXT_BASELINE_ALPHABETIC: str = "alphabetic"; break;
+                    case CTX_TEXT_BASELINE_TOP:        str = "top";        break;
+                    case CTX_TEXT_BASELINE_BOTTOM:     str = "bottom";     break;
+                    case CTX_TEXT_BASELINE_HANGING:    str = "hanging";    break;
+                    case CTX_TEXT_BASELINE_MIDDLE:     str = "middle";     break;
+                    case CTX_TEXT_BASELINE_IDEOGRAPHIC:str = "ideographic";break;
+                  }
+                break;
+              case CTX_TEXT_ALIGN:
+                switch (val)
+                  {
+                    case CTX_TEXT_ALIGN_LEFT:   str = "left"; break;
+                    case CTX_TEXT_ALIGN_RIGHT:  str = "right"; break;
+                    case CTX_TEXT_ALIGN_START:  str = "start"; break;
+                    case CTX_TEXT_ALIGN_END:    str = "end"; break;
+                    case CTX_TEXT_ALIGN_CENTER: str = "center"; break;
+                  }
+                break;
+              case CTX_LINE_CAP:
+                switch (val)
+                  {
+                    case CTX_CAP_NONE:   str = "none"; break;
+                    case CTX_CAP_ROUND:  str = "round"; break;
+                    case CTX_CAP_SQUARE: str = "square"; break;
+                  }
+                break;
+              case CTX_LINE_JOIN:
+                switch (val)
+                  {
+                    case CTX_JOIN_MITER: str = "miter"; break;
+                    case CTX_JOIN_ROUND: str = "round"; break;
+                    case CTX_JOIN_BEVEL: str = "bevel"; break;
+                  }
+                break;
+              case CTX_FILL_RULE:
+                switch (val)
+                  {
+                    case CTX_FILL_RULE_WINDING:  str = "winding"; break;
+                    case CTX_FILL_RULE_EVEN_ODD: str = "evenodd"; break;
+                  }
+                break;
+              case CTX_EXTEND:
+                switch (val)
+                  {
+                    case CTX_EXTEND_NONE:    str = "none"; break;
+                    case CTX_EXTEND_PAD:     str = "pad"; break;
+                    case CTX_EXTEND_REPEAT:  str = "repeat"; break;
+                    case CTX_EXTEND_REFLECT: str = "reflect"; break;
+                  }
+                break;
+              case CTX_BLEND_MODE:
+                val = ctx_arg_u32 (i);
+                switch (val)
+                  {
+            case CTX_BLEND_NORMAL:      str = "normal"; break;
+            case CTX_BLEND_MULTIPLY:    str = "multiply"; break;
+            case CTX_BLEND_SCREEN:      str = "screen"; break;
+            case CTX_BLEND_OVERLAY:     str = "overlay"; break;
+            case CTX_BLEND_DARKEN:      str = "darken"; break;
+            case CTX_BLEND_LIGHTEN:     str = "lighten"; break;
+            case CTX_BLEND_COLOR_DODGE: str = "colorDodge"; break;
+            case CTX_BLEND_COLOR_BURN:  str = "colorBurn"; break;
+            case CTX_BLEND_HARD_LIGHT:  str = "hardLight"; break;
+            case CTX_BLEND_SOFT_LIGHT:  str = "softLight"; break;
+            case CTX_BLEND_DIFFERENCE:  str = "difference"; break;
+            case CTX_BLEND_EXCLUSION:   str = "exclusion"; break;
+            case CTX_BLEND_HUE:         str = "hue"; break;
+            case CTX_BLEND_SATURATION:  str = "saturation"; break;
+            case CTX_BLEND_COLOR:       str = "color"; break; 
+            case CTX_BLEND_LUMINOSITY:  str = "luminosity"; break;
+                  }
+                break;
+              case CTX_COMPOSITING_MODE:
+                val = ctx_arg_u32 (i);
+                switch (val)
+                  {
+              case CTX_COMPOSITE_SOURCE_OVER: str = "sourceOver"; break;
+              case CTX_COMPOSITE_COPY: str = "copy"; break;
+              case CTX_COMPOSITE_CLEAR: str = "clear"; break;
+              case CTX_COMPOSITE_SOURCE_IN: str = "sourceIn"; break;
+              case CTX_COMPOSITE_SOURCE_OUT: str = "sourceOut"; break;
+              case CTX_COMPOSITE_SOURCE_ATOP: str = "sourceAtop"; break;
+              case CTX_COMPOSITE_DESTINATION: str = "destination"; break;
+              case CTX_COMPOSITE_DESTINATION_OVER: str = "destinationOver"; break;
+              case CTX_COMPOSITE_DESTINATION_IN: str = "destinationIn"; break;
+              case CTX_COMPOSITE_DESTINATION_OUT: str = "destinationOut"; break;
+              case CTX_COMPOSITE_DESTINATION_ATOP: str = "destinationAtop"; break;
+              case CTX_COMPOSITE_XOR: str = "xor"; break;
+                  }
+
+               break;
+            }
+          if (str)
+            {
+              ctx_formatter_addstr (formatter, str, -1);
+            }
+          else
+            {
+              ctx_print_int (formatter, val);
+            }
+        }
+      else
+#endif
+        {
+          ctx_print_int (formatter, val);
+        }
+    }
+  _ctx_print_endcmd (formatter);
+}
+
+#if 0
+static void
+ctx_print_a85 (CtxFormatter *formatter, uint8_t *data, int length)
+{
+  char *tmp = (char*)ctx_malloc (ctx_a85enc_len (length));
+  ctx_a85enc (data, tmp, length);
+  ctx_formatter_addstr (formatter, " ~", 2);
+  ctx_formatter_addstr (formatter, tmp, -1);
+  ctx_formatter_addstr (formatter, "~ ", 2);
+  ctx_free (tmp);
+}
+#endif
+
+static void
+ctx_print_yenc (CtxFormatter *formatter, uint8_t *data, int length)
+{
+  char *tmp = (char*)ctx_malloc (length * 2 + 2);// worst case scenario
+  int enclength = ctx_yenc ((char*)data, tmp, length);
+  data[enclength]=0;
+  ctx_formatter_addstr (formatter, " =", 2);
+  ctx_formatter_addstr (formatter, tmp, enclength);
+  ctx_formatter_addstr (formatter, "=y ", 2);
+  ctx_free (tmp);
+}
+
+static void
+ctx_print_escaped_string (CtxFormatter *formatter, const char *string)
+{
+  if (!string) { return; }
+  for (int i = 0; string[i]; i++)
+    {
+      switch (string[i])
+        {
+          case '"':
+            ctx_formatter_addstr (formatter, "\\\"", 2);
+            break;
+          case '\\':
+            ctx_formatter_addstr (formatter, "\\\\", 2);
+            break;
+          case '\n':
+            ctx_formatter_addstr (formatter, "\\n", 2);
+            break;
+          default:
+            ctx_formatter_addstr (formatter, &string[i], 1);
+        }
+    }
+}
+
+
+static void
+ctx_print_entry (CtxFormatter *formatter, CtxEntry *entry, int args)
+{
+  _ctx_print_name (formatter, entry->code);
+  for (int i = 0; i <  args; i ++)
+    {
+      float val = ctx_arg_float (i);
+      if (i>0 /* && val >= 0.0f */)
+        {
+          if (formatter->longform)
+            {
+              ctx_formatter_addstr (formatter, ", ", 2);
+            }
+          else
+            {
+              ctx_formatter_addstr (formatter, " ", 1);
+            }
+        }
+      ctx_print_float (formatter, val);
+    }
+  _ctx_print_endcmd (formatter);
+}
+
+static void
+ctx_print_glyph (CtxFormatter *formatter, CtxEntry *entry, int args)
+{
+  _ctx_print_name (formatter, entry->code);
+  ctx_print_int (formatter, entry->data.u32[0]);
+  _ctx_print_endcmd (formatter);
+}
+
+static void
+ctx_formatter_process (void *user_data, CtxCommand *c);
+
+
+static void
+ctx_formatter_process (void *user_data, CtxCommand *c)
+{
+  CtxEntry *entry = &c->entry;
+  CtxFormatter *formatter = (CtxFormatter*)user_data;
+
+  switch (entry->code)
+  //switch ((CtxCode)(entry->code))
+    {
+      case CTX_GLYPH:
+        ctx_print_glyph (formatter, entry, 1);
+        break;
+      case CTX_LINE_TO:
+      case CTX_REL_LINE_TO:
+      case CTX_SCALE:
+      case CTX_TRANSLATE:
+      case CTX_MOVE_TO:
+      case CTX_REL_MOVE_TO:
+      case CTX_SMOOTHQ_TO:
+      case CTX_REL_SMOOTHQ_TO:
+        ctx_print_entry (formatter, entry, 2);
+        break;
+      case CTX_TEXTURE:
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", -1);
+        ctx_print_escaped_string (formatter, c->texture.eid);
+        ctx_formatter_addstr (formatter, "\", ", 2);
+        ctx_print_float (formatter, c->texture.x);
+        ctx_formatter_addstr (formatter, ", ", 2);
+        ctx_print_float (formatter, c->texture.y);
+        ctx_formatter_addstr (formatter, " ", 1);
+        _ctx_print_endcmd (formatter);
+        break;
+
+      case CTX_DEFINE_TEXTURE:
+        {
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", 1);
+        ctx_print_escaped_string (formatter, c->define_texture.eid);
+        ctx_formatter_addstr (formatter, "\", ", 2);
+        ctx_print_int (formatter, c->define_texture.width);
+        ctx_formatter_addstr (formatter, ", ", 2);
+        ctx_print_int (formatter, c->define_texture.height);
+        ctx_formatter_addstr (formatter, ", ", 2);
+        ctx_print_int (formatter, c->define_texture.format);
+        ctx_formatter_addstr (formatter, ", ", 2);
+
+        uint8_t *pixel_data = ctx_define_texture_pixel_data (entry);
+#if 1
+
+        int stride = ctx_pixel_format_get_stride ((CtxPixelFormat)c->define_texture.format, c->define_texture.width);
+        int data_len = stride * c->define_texture.height;
+        if (c->define_texture.format == CTX_FORMAT_YUV420)
+          data_len = c->define_texture.height * c->define_texture.width +
+                       2*(c->define_texture.height/2) * (c->define_texture.width/2);
+        //fprintf (stderr, "encoding %i bytes\n", c->define_texture.height *stride);
+        //ctx_print_a85 (formatter, pixel_data, c->define_texture.height * stride);
+        ctx_print_yenc (formatter, pixel_data, data_len);
+#else
+        ctx_formatter_addstrf (formatter, "\"", 1);
+        ctx_print_escaped_string (formatter, pixel_data);
+        ctx_formatter_addstrf (formatter, "\" ");
+
+#endif
+
+        _ctx_print_endcmd (formatter);
+        }
+        break;
+
+      case CTX_REL_ARC_TO:
+      case CTX_ARC_TO:
+        ctx_print_entry (formatter, entry, 7);
+        break;
+      case CTX_ROUND_RECTANGLE:
+        ctx_print_entry (formatter, entry, 5);
+        break;
+      case CTX_CURVE_TO:
+      case CTX_REL_CURVE_TO:
+      case CTX_ARC:
+      case CTX_RADIAL_GRADIENT:
+        ctx_print_entry (formatter, entry, 6);
+        break;
+      case CTX_APPLY_TRANSFORM:
+      case CTX_SOURCE_TRANSFORM:
+        ctx_print_entry (formatter, entry, 9);
+        break;
+      case CTX_QUAD_TO:
+      case CTX_RECTANGLE:
+      case CTX_REL_QUAD_TO:
+      case CTX_LINEAR_GRADIENT:
+      case CTX_VIEW_BOX:
+      case CTX_SMOOTH_TO:
+      case CTX_REL_SMOOTH_TO:
+        ctx_print_entry (formatter, entry, 4);
+        break;
+      case CTX_FONT_SIZE:
+      case CTX_MITER_LIMIT:
+      case CTX_ROTATE:
+      case CTX_LINE_WIDTH:
+      case CTX_LINE_DASH_OFFSET:
+      case CTX_LINE_HEIGHT:
+      case CTX_WRAP_LEFT:
+      case CTX_WRAP_RIGHT:
+      case CTX_GLOBAL_ALPHA:
+      case CTX_SHADOW_BLUR:
+      case CTX_SHADOW_OFFSET_X:
+      case CTX_SHADOW_OFFSET_Y:
+      case CTX_VER_LINE_TO:
+      case CTX_HOR_LINE_TO:
+      case CTX_REL_VER_LINE_TO:
+      case CTX_REL_HOR_LINE_TO:
+        ctx_print_entry (formatter, entry, 1);
+        break;
+#if 0
+      case CTX_SET:
+        _ctx_print_name (formatter, entry->code);
+        switch (c->set.key_hash)
+        {
+           case CTX_x: ctx_formatter_addstrf (formatter, " 'x' "); break;
+           case CTX_y: ctx_formatter_addstrf (formatter, " 'y' "); break;
+           case CTX_width: ctx_formatter_addstrf (formatter, " width "); break;
+           case CTX_height: ctx_formatter_addstrf (formatter, " height "); break;
+           default:
+             ctx_formatter_addstrf (formatter, " %d ", c->set.key_hash);
+        }
+        ctx_formatter_addstrf (formatter, "\"", 1);
+        ctx_print_escaped_string (formatter, (char*)c->set.utf8);
+        ctx_formatter_addstrf (formatter, "\"", 1);
+        _ctx_print_endcmd (formatter);
+        break;
+#endif
+      case CTX_COLOR:
+        if (1)//formatter->longform)
+          {
+            _ctx_indent (formatter);
+            int model = (int) c->set_color.model;
+            const char *suffix="";
+            if (model & 512)
+            {
+              model = model & 511;
+              suffix = "S";
+            }
+            switch (model)
+              {
+                case CTX_GRAY:
+                  ctx_formatter_addstr (formatter, "gray", 4);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+
+                  ctx_print_float (formatter, c->graya.g);
+                  break;
+                case CTX_GRAYA:
+                  ctx_formatter_addstr (formatter, "graya", 5);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+
+                  ctx_print_float (formatter, c->graya.g);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->graya.a);
+                  break;
+                case CTX_RGBA:
+                  if (c->rgba.a != 1.0f)
+                  {
+                    ctx_formatter_addstr (formatter, "rgba", 4);
+                    ctx_formatter_addstr (formatter, suffix, -1);
+                    ctx_formatter_addstr (formatter, " ", 1);
+
+                    ctx_print_float (formatter, c->rgba.r);
+                    ctx_formatter_addstr (formatter, " ", 1);
+                    ctx_print_float (formatter, c->rgba.g);
+                    ctx_formatter_addstr (formatter, " ", 1);
+                    ctx_print_float (formatter, c->rgba.b);
+                    ctx_formatter_addstr (formatter, " ", 1);
+                    ctx_print_float (formatter, c->rgba.a);
+                    break;
+                  }
+                  /* FALLTHROUGH */
+                case CTX_RGB:
+                  if (c->rgba.r == c->rgba.g && c->rgba.g == c->rgba.b)
+                  {
+                    ctx_formatter_addstr (formatter, "gray", 4);
+                    ctx_formatter_addstr (formatter, suffix, -1);
+                    ctx_formatter_addstr (formatter, " ", 1);
+
+                    ctx_print_float (formatter, c->rgba.r);
+                    ctx_formatter_addstr (formatter, " ", 1);
+                    break;
+                  }
+                  ctx_formatter_addstr (formatter, "rgb", 3);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.r);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.g);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.b);
+                  break;
+                case CTX_DRGB:
+                  ctx_formatter_addstr (formatter, "drgb", 4);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+
+                  ctx_print_float (formatter, c->rgba.r);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.g);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.b);
+                  break;
+                case CTX_DRGBA:
+                  ctx_formatter_addstr (formatter, "drgba", 5);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+
+                  ctx_print_float (formatter, c->rgba.r);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.g);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.b);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->rgba.a);
+                  break;
+                case CTX_CMYK:
+                  ctx_formatter_addstr (formatter, "cmyk", 4);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+
+                  ctx_print_float (formatter, c->cmyka.c);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.m);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.y);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.k);
+                  break;
+                case CTX_CMYKA:
+                  ctx_formatter_addstr (formatter, "cmyk", 5);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.c);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.m);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.y);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.k);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.a);
+                  break;
+                case CTX_DCMYK:
+                  ctx_formatter_addstr (formatter, "dcmyk", 6);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.c);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.m);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.y);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.k);
+                  break;
+                case CTX_DCMYKA:
+                  ctx_formatter_addstr (formatter, "dcmyka", 7);
+                  ctx_formatter_addstr (formatter, suffix, -1);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.c);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.m);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.y);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.k);
+                  ctx_formatter_addstr (formatter, " ", 1);
+                  ctx_print_float (formatter, c->cmyka.a);
+                  break;
+              }
+          }
+        else
+          {
+            ctx_print_entry (formatter, entry, 1);
+          }
+        break;
+      case CTX_SET_RGBA_U8:
+        if (formatter->longform)
+          {
+            _ctx_indent (formatter);
+            ctx_formatter_addstr (formatter, "rgba (", -1);
+          }
+        else
+          {
+            ctx_formatter_addstr (formatter, "rgba (", -1);
+          }
+        for (int c = 0; c < 4; c++)
+          {
+            if (c)
+              {
+                if (formatter->longform)
+                  ctx_formatter_addstr (formatter, ", ", 2);
+                else
+                  ctx_formatter_addstr (formatter, " ", 1);
+              }
+            ctx_print_float (formatter, ctx_u8_to_float (ctx_arg_u8 (c) ) );
+          }
+        _ctx_print_endcmd (formatter);
+        break;
+      case CTX_SET_PIXEL:
+#if 0
+        ctx_set_pixel_u8 (d_ctx,
+                          ctx_arg_u16 (2), ctx_arg_u16 (3),
+                          ctx_arg_u8 (0),
+                          ctx_arg_u8 (1),
+                          ctx_arg_u8 (2),
+                          ctx_arg_u8 (3) );
+#endif
+        break;
+      case CTX_FILL:
+      case CTX_PAINT:
+      case CTX_START_FRAME:
+      case CTX_STROKE:
+      case CTX_IDENTITY:
+      case CTX_CLIP:
+      case CTX_BEGIN_PATH:
+      case CTX_CLOSE_PATH:
+      case CTX_SAVE:
+      case CTX_PRESERVE:
+      case CTX_START_GROUP:
+      case CTX_NEW_PAGE:
+      case CTX_END_GROUP:
+      case CTX_RESTORE:
+      case CTX_STROKE_SOURCE:
+        ctx_print_entry (formatter, entry, 0);
+        break;
+      case CTX_TEXT_ALIGN:
+      case CTX_TEXT_BASELINE:
+      case CTX_TEXT_DIRECTION:
+      case CTX_FILL_RULE:
+      case CTX_LINE_CAP:
+      case CTX_LINE_JOIN:
+      case CTX_COMPOSITING_MODE:
+      case CTX_BLEND_MODE:
+      case CTX_EXTEND:
+      case CTX_IMAGE_SMOOTHING:
+        ctx_print_entry_enum (formatter, entry, 1);
+        break;
+      case CTX_GRADIENT_STOP:
+        _ctx_print_name (formatter, entry->code);
+        ctx_print_float (formatter, ctx_arg_float (0));
+        for (int c = 0; c < 4; c++)
+          {
+            ctx_formatter_addstr (formatter, " ", 1);
+            ctx_print_float (formatter, ctx_u8_to_float (ctx_arg_u8 (4+c) ) );
+          }
+        _ctx_print_endcmd (formatter);
+        break;
+      case CTX_TEXT:
+      case CTX_STROKE_TEXT:
+      case CTX_FONT:
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", 1);
+        ctx_print_escaped_string (formatter, ctx_arg_string() );
+        ctx_formatter_addstr (formatter, "\"", 1);
+        _ctx_print_endcmd (formatter);
+        break;
+      case CTX_CONT:
+      case CTX_EDGE:
+      case CTX_DATA:
+      case CTX_DATA_REV:
+      case CTX_END_FRAME:
+        break;
+
+      case CTX_DEFINE_FONT:
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", 1);
+        ctx_print_escaped_string (formatter, ctx_arg_string());
+        ctx_formatter_addstr (formatter, "\"", 1);
+        _ctx_print_endcmd (formatter);
+        // XXX: todo, also print license if present
+        break;
+
+      case CTX_KERNING_PAIR:
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", 1);
+        {
+           uint8_t utf8[16];
+           utf8[ctx_unichar_to_utf8 (c->kern.glyph_before, utf8)]=0;
+           ctx_print_escaped_string (formatter, (char*)utf8);
+           ctx_formatter_addstr (formatter, "\", \"", -1);
+           utf8[ctx_unichar_to_utf8 (c->kern.glyph_after, utf8)]=0;
+           ctx_print_escaped_string (formatter, (char*)utf8);
+           ctx_formatter_addstr (formatter, "\", ", 3);
+           ctx_print_float (formatter, c->kern.amount/256.0f);
+           ctx_print_escaped_string (formatter, (char*)utf8);
+        }
+        _ctx_print_endcmd (formatter);
+        break;
+
+      case CTX_DEFINE_GLYPH:
+        _ctx_print_name (formatter, entry->code);
+        ctx_formatter_addstr (formatter, "\"", 1);
+        {
+           uint8_t utf8[16];
+           utf8[ctx_unichar_to_utf8 (entry->data.u32[0], utf8)]=0;
+           ctx_print_escaped_string (formatter, (char*)utf8);
+           ctx_formatter_addstr (formatter, "\", ", 3);
+           ctx_print_float (formatter, entry->data.u32[1]/256.0f);
+        }
+        _ctx_print_endcmd (formatter);
+        break;
+    }
+}
+
+void
+ctx_render_stream (Ctx *ctx, FILE *stream, int longform)
+{
+  CtxIterator iterator;
+  CtxFormatter formatter;
+  formatter.target= stream;
+  formatter.longform = longform;
+  formatter.indent = 0;
+  formatter.add_str = _ctx_stream_addstr;
+  CtxCommand *command;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    { ctx_formatter_process (&formatter, command); }
+  fwrite ("\n", 1, 1, stream);
+}
+
+char *
+ctx_render_string (Ctx *ctx, int longform, int *retlen)
+{
+  CtxString *string = ctx_string_new ("");
+  CtxIterator iterator;
+  CtxFormatter formatter;
+  formatter.target= string;
+  formatter.longform = longform;
+  formatter.indent = 0;
+  formatter.add_str = _ctx_string_addstr;
+  CtxCommand *command;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    { ctx_formatter_process (&formatter, command); }
+  char *ret = string->str;
+  if (retlen)
+    *retlen = string->length;
+  ctx_string_free (string, 0);
+  return ret;
+}
+
+
+#endif
+#include <ctype.h>
+#include <sys/stat.h>
+
+CTX_EXPORT int
+ctx_width (Ctx *ctx)
+{
+  return ctx->width;
+}
+CTX_EXPORT int
+ctx_height (Ctx *ctx)
+{
+  return ctx->height;
+}
+
+CtxState *ctx_get_state (Ctx *ctx)
+{
+  return &ctx->state;
+}
+
+void ctx_dirty_rect (Ctx *ctx, int *x, int *y, int *width, int *height)
+{
+  if ( (ctx->state.ink_min_x > ctx->state.ink_max_x) ||
+       (ctx->state.ink_min_y > ctx->state.ink_max_y) )
+    {
+      if (x) { *x = 0; }
+      if (y) { *y = 0; }
+      if (width) { *width = 0; }
+      if (height) { *height = 0; }
+      return;
+    }
+  if (ctx->state.ink_min_x < 0)
+    { ctx->state.ink_min_x = 0; }
+  if (ctx->state.ink_min_y < 0)
+    { ctx->state.ink_min_y = 0; }
+  if (x) { *x = ctx->state.ink_min_x; }
+  if (y) { *y = ctx->state.ink_min_y; }
+  if (width) { *width = ctx->state.ink_max_x - ctx->state.ink_min_x + 1; }
+  if (height) { *height = ctx->state.ink_max_y - ctx->state.ink_min_y + 1; }
+}
+
+#if CTX_CURRENT_PATH
+static CtxIterator *
+ctx_current_path_iterator (Ctx *ctx)
+{
+  CtxIterator *iterator = &ctx->current_path_iterator;
+  ctx_iterator_init (iterator, &ctx->current_path, 0, CTX_ITERATOR_EXPAND_BITPACK);
+  return iterator;
+}
+
+CtxDrawlist *
+ctx_current_path (Ctx *ctx)
+{
+  CtxDrawlist *drawlist = ctx_calloc (sizeof (CtxDrawlist) + 
+                              ctx->current_path.count * 9, 1);
+  drawlist->entries = (CtxEntry*)(&drawlist[1]);
+  drawlist->size = drawlist->count = ctx->current_path.count;
+  drawlist->flags = CTX_DRAWLIST_DOESNT_OWN_ENTRIES;
+  memcpy (drawlist->entries, ctx->current_path.entries,
+          drawlist->count * 9);
+  return drawlist;
+}
+
+void
+ctx_path_extents (Ctx *ctx, float *ex1, float *ey1, float *ex2, float *ey2)
+{
+  float minx = 50000.0;
+  float miny = 50000.0;
+  float maxx = -50000.0;
+  float maxy = -50000.0;
+  float x = 0;
+  float y = 0;
+
+  CtxIterator *iterator = ctx_current_path_iterator (ctx);
+  CtxCommand *command;
+
+  while ((command = ctx_iterator_next (iterator)))
+  {
+     int got_coord = 0;
+     switch (command->code)
+     {
+        // XXX missing some segment types
+        case CTX_LINE_TO:
+        case CTX_MOVE_TO:
+          x = command->move_to.x;
+          y = command->move_to.y;
+          got_coord++;
+          break;
+        case CTX_REL_LINE_TO:
+        case CTX_REL_MOVE_TO:
+          x += command->line_to.x;
+          y += command->line_to.y;
+          got_coord++;
+          break;
+        case CTX_CURVE_TO:
+          x = command->curve_to.x;
+          y = command->curve_to.y;
+          got_coord++;
+          break;
+        case CTX_REL_CURVE_TO:
+          x += command->rel_curve_to.x;
+          y += command->rel_curve_to.y;
+          got_coord++;
+          break;
+        case CTX_ARC:
+          minx = ctx_minf (minx, command->arc.x - command->arc.radius);
+          miny = ctx_minf (miny, command->arc.y - command->arc.radius);
+          maxx = ctx_maxf (maxx, command->arc.x + command->arc.radius);
+          maxy = ctx_maxf (maxy, command->arc.y + command->arc.radius);
+
+          break;
+        case CTX_RECTANGLE:
+        case CTX_ROUND_RECTANGLE:
+          x = command->rectangle.x;
+          y = command->rectangle.y;
+          minx = ctx_minf (minx, x);
+          miny = ctx_minf (miny, y);
+          maxx = ctx_maxf (maxx, x);
+          maxy = ctx_maxf (maxy, y);
+
+          x += command->rectangle.width;
+          y += command->rectangle.height;
+          got_coord++;
+          break;
+        default:
+          break;
+     }
+          //fprintf(stderr, "[%c]", command->code);
+    if (got_coord)
+    {
+      minx = ctx_minf (minx, x);
+      miny = ctx_minf (miny, y);
+      maxx = ctx_maxf (maxx, x);
+      maxy = ctx_maxf (maxy, y);
+    }
+  }
+
+  if (ex1) *ex1 = minx;
+  if (ey1) *ey1 = miny;
+  if (ex2) *ex2 = maxx;
+  if (ey2) *ey2 = maxy;
+}
+
+#else
+void
+ctx_path_extents (Ctx *ctx, float *ex1, float *ey1, float *ex2, float *ey2)
+{
+}
+#endif
+
+
+static inline void
+ctx_gstate_push (CtxState *state)
+{
+  if (state->gstate_no + 1 >= CTX_MAX_STATES)
+    { return; }
+  state->gstate_stack[state->gstate_no] = state->gstate;
+  state->gstate_no++;
+  ctx_state_set (state, CTX_newState, 0.0f);
+  state->has_clipped=0;
+}
+
+static inline void
+ctx_gstate_pop (CtxState *state)
+{
+  if (state->gstate_no <= 0)
+    { return; }
+  state->gstate = state->gstate_stack[state->gstate_no-1];
+  state->gstate_no--;
+}
+
+void
+ctx_close_path (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_CLOSE_PATH);
+}
+
+
+CTX_EXPORT void
+ctx_get_image_data (Ctx *ctx, int sx, int sy, int sw, int sh,
+                    CtxPixelFormat format, int dst_stride,
+                    uint8_t *dst_data)
+{
+   if (0)
+   {
+   }
+#if CTX_RASTERIZER
+   else if (ctx_backend_type (ctx) == CTX_BACKEND_RASTERIZER)
+   {
+     CtxRasterizer *rasterizer = (CtxRasterizer*)ctx->backend;
+     if (rasterizer->format->pixel_format == format)
+     {
+       if (dst_stride <= 0) dst_stride = ctx_pixel_format_get_stride (format, sw);
+       int bytes_per_pix = rasterizer->format->bpp/8;
+       int y = 0;
+       for (int v = sy; v < sy + sh; v++, y++)
+       {
+         int x = 0;
+         for (int u = sx; u < sx + sw; u++, x++)
+         {
+            uint8_t* src_buf = (uint8_t*)rasterizer->buf;
+            memcpy (&dst_data[y * dst_stride + x * bytes_per_pix], &src_buf[v * rasterizer->blit_stride + u * bytes_per_pix], bytes_per_pix);
+         }
+       }
+       return;
+     }
+   }
+#endif
+   else if ((format == CTX_FORMAT_RGBA8 ||
+             format == CTX_FORMAT_BGRA8)
+                   && ctx_backend_is_tiled (ctx))
+   {
+     /* synchronize */
+     CtxTiled *tiled = (CtxTiled*)ctx->backend;
+     {
+       if (dst_stride <= 0) dst_stride = ctx_pixel_format_get_stride (format, sw);
+       int bytes_per_pix = 4;
+       int y = 0;
+       int count = 0;
+       for (int v = sy; v < sy + sh; v++, y++)
+       {
+         int x = 0;
+         for (int u = sx; u < sx + sw; u++, x++)
+         {
+            uint8_t* src_buf = (uint8_t*)tiled->pixels;
+            memcpy (&dst_data[y * dst_stride + x * bytes_per_pix], &src_buf[v * tiled->width * bytes_per_pix + u * bytes_per_pix], bytes_per_pix);
+            count++;
+         }
+       }
+       if (format == CTX_FORMAT_RGBA8) // XXX does this vary between tiled
+                                       // backends?
+       {
+         for (int i = 0; i < count; i++)
+         {
+           uint32_t tmp = dst_data[i*4+0];
+           dst_data[i*4+0] = dst_data[i*4+2];
+           dst_data[i*4+2] = tmp;
+         }
+       }
+       return;
+     }
+   }
+#if CTX_RASTERIZER
+   else
+   {
+     Ctx *rasterizer = ctx_new_for_framebuffer (dst_data, sw, sh, dst_stride, format);
+     ctx_translate (rasterizer, sx, sy);
+     ctx_render_ctx (ctx, rasterizer);
+     ctx_destroy (rasterizer);
+   }
+#endif
+}
+
+void ctx_screenshot (Ctx *ctx, const char *output_path)
+{
+#ifdef INCLUDE_STB_IMAGE_WRITE_H
+  uint32_t width = ctx_width (ctx);
+  uint32_t height = ctx_height (ctx);
+  uint8_t *buf = ctx_malloc (width * height * 4);
+  ctx_get_image_data (ctx, 0, 0, width, height,
+                      CTX_FORMAT_RGBA8, width *4,
+                      buf);
+  stbi_write_png (output_path, width, height, 4, buf, width * 4);
+  ctx_free (buf);
+#endif
+}
+
+void
+ctx_put_image_data (Ctx *ctx, int w, int h, int stride, int format,
+                    uint8_t *data,
+                    int ox, int oy,
+                    int dirtyX, int dirtyY,
+                    int dirtyWidth, int dirtyHeight)
+{
+   char eid[65]="";
+   ctx_save (ctx);
+   ctx_identity (ctx);
+   ctx_define_texture (ctx, NULL, w, h, stride, format, data, eid);
+   if (eid[0])
+   {
+     // XXX set compositor to source
+     ctx_compositing_mode (ctx, CTX_COMPOSITE_COPY);
+     ctx_draw_texture_clipped (ctx, eid, ox, oy, w, h, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+   }
+   ctx_restore (ctx);
+}
+
+/* checking if an eid is valid also sets the frame for it
+ */
+static int ctx_eid_valid (Ctx *ctx, const char *eid, int *w, int *h)
+{
+  ctx = ctx->texture_cache;
+  CtxList *to_remove = NULL;
+  int ret = 0;
+  for (CtxList *l = ctx->eid_db; l; l = l->next)
+  {
+    CtxEidInfo *eid_info = (CtxEidInfo*)l->data;
+    if (ctx->frame - eid_info->frame >= 2)
+            /* XXX XXX XXX this breaks texture caching since
+             *   it is wrong in some cases where more frames
+             *   have passed?
+             */
+    {
+      ctx_list_prepend (&to_remove, eid_info);
+    }
+    else if (!ctx_strcmp (eid_info->eid, eid) &&
+             ctx->frame - eid_info->frame < 2)
+    {
+    //fclose (f);
+      eid_info->frame = ctx->frame;
+      if (w) *w = eid_info->width;
+      if (h) *h = eid_info->height;
+      ret = 1;
+    }
+  }
+  while (to_remove)
+  {
+    CtxEidInfo *eid_info = (CtxEidInfo*)to_remove->data;
+    //FILE  *f  = fopen ("/tmp/l", "a");
+    //fprintf (f, "%i client removing %s\n", getpid(), eid_info->eid);
+    //fclose (f);
+    ctx_free (eid_info->eid);
+    ctx_free (eid_info);
+    ctx_list_remove (&ctx->eid_db, eid_info);
+    ctx_list_remove (&to_remove, eid_info);
+  }
+  return ret;
+}
+
+void ctx_drop_eid (Ctx *ctx, const char *eid)
+{
+  ctx = ctx->texture_cache;
+  CtxList *to_remove = NULL;
+  for (CtxList *l = ctx->eid_db; l; l = l->next)
+  {
+    CtxEidInfo *eid_info = (CtxEidInfo*)l->data;
+    if (!ctx_strcmp (eid_info->eid, eid))
+    {
+      ctx_list_prepend (&to_remove, eid_info);
+    }
+  }
+  while (to_remove)
+  {
+    CtxEidInfo *eid_info = (CtxEidInfo*)to_remove->data;
+    ctx_free (eid_info->eid);
+    ctx_free (eid_info);
+    ctx_list_remove (&ctx->eid_db, eid_info);
+    ctx_list_remove (&to_remove, eid_info);
+  }
+
+  for (int i = 0; i <  CTX_MAX_TEXTURES; i++)
+  {
+    if (ctx->texture[i].data &&
+        ctx->texture[i].eid  &&
+        !ctx_strcmp (ctx->texture[i].eid, eid))
+    {
+      ctx->texture[i].eid[0]++;
+    }
+  }
+}
+
+
+void ctx_texture (Ctx *ctx, const char *eid, float x, float y)
+{
+  int eid_len = ctx_strlen (eid);
+  char ascii[41]="";
+  //fprintf (stderr, "tx %s\n", eid);
+  if (eid_len > 50)
+  {
+    CtxSHA1 *sha1 = ctx_sha1_new ();
+    uint8_t hash[20]="";
+    ctx_sha1_process (sha1, (uint8_t*)eid, eid_len);
+    ctx_sha1_done (sha1, hash);
+    ctx_sha1_free (sha1);
+    const char *hex="0123456789abcdef";
+    for (int i = 0; i < 20; i ++)
+    {
+       ascii[i*2]=hex[hash[i]/16];
+       ascii[i*2+1]=hex[hash[i]%16];
+    }
+    ascii[40]=0;
+    eid=ascii;
+  }
+
+    //FILE  *f = fopen ("/tmp/l", "a");
+  if (ctx_eid_valid (ctx, eid, 0, 0))
+  {
+    ctx_process_cmd_str_float (ctx, CTX_TEXTURE, eid, x, y);
+    //fprintf (stderr, "setting texture eid %s\n", eid);
+  }
+  else
+  {
+    //fprintf (stderr, "tried setting invalid texture eid %s\n", eid);
+  }
+    //fclose (f);
+}
+int
+_ctx_frame (Ctx *ctx)
+{
+   return ctx->frame;
+}
+int
+_ctx_set_frame (Ctx *ctx, int frame)
+{
+   return ctx->frame = frame;
+}
+
+void ctx_define_texture (Ctx *ctx,
+                         const char *eid,
+                         int width, int height, int stride, int format, void *data,
+                         char *ret_eid)
+{
+  uint8_t hash[20]="";
+  char ascii[41]="";
+  int dst_stride = width;
+  //fprintf (stderr, "df %s\n", eid);
+
+  dst_stride = ctx_pixel_format_get_stride ((CtxPixelFormat)format, width);
+  if (stride <= 0)
+    stride = dst_stride;
+
+  int data_len;
+ 
+  if (format == CTX_FORMAT_YUV420)
+  data_len = width * height + ((width/2) * (height/2)) * 2;
+  else
+  data_len = height * dst_stride;
+
+  if (eid == NULL)
+  {
+    CtxSHA1 *sha1 = ctx_sha1_new ();
+    uint8_t *src = (uint8_t*)data;
+    for (int y = 0; y < height; y++)
+    {
+       ctx_sha1_process (sha1, src, dst_stride);
+       src += stride;
+    }
+    ctx_sha1_done (sha1, hash);
+    ctx_sha1_free (sha1);
+    const char *hex="0123456789abcdef";
+    for (int i = 0; i < 20; i ++)
+    {
+       ascii[i*2]  =hex[hash[i]/16];
+       ascii[i*2+1]=hex[hash[i]%16];
+    }
+    ascii[40]=0;
+    eid = ascii;
+  }
+
+  int eid_len = ctx_strlen (eid);
+
+  if (eid_len > 50)
+  {
+    CtxSHA1 *sha1 = ctx_sha1_new ();
+    uint8_t hash[20]="";
+    ctx_sha1_process (sha1, (uint8_t*)eid, eid_len);
+    ctx_sha1_done (sha1, hash);
+    ctx_sha1_free (sha1);
+    const char *hex="0123456789abcdef";
+    for (int i = 0; i < 20; i ++)
+    {
+       ascii[i*2]  =hex[hash[i]/16];
+       ascii[i*2+1]=hex[hash[i]%16];
+    }
+    ascii[40]=0;
+    eid = ascii;
+    eid_len = 40;
+  }
+
+  // we now have eid
+
+  if (ctx_eid_valid (ctx, eid, 0, 0))
+  {
+    ctx_texture (ctx, eid, 0.0f, 0.0f);
+  }
+  else
+
+  {
+    CtxEntry *commands;
+    int command_size = 1 + (data_len+1+1)/9 + 1 + (eid_len+1+1)/9 + 1 +   8;
+    if (ctx->backend && (void*)ctx->backend->process != (void*)ctx_drawlist_process)
+    {
+       commands = (CtxEntry*)ctx_calloc (sizeof (CtxEntry), command_size);
+    }
+    else
+    {
+       commands = NULL;
+       ctx_drawlist_resize (&ctx->drawlist, ctx->drawlist.count + command_size);
+       commands = &(ctx->drawlist.entries[ctx->drawlist.count]);
+       memset (commands, 0, sizeof (CtxEntry) * command_size);
+    }
+    /* bottleneck,  we can avoid copying sometimes - and even when copying
+     * we should cut this down to one copy, direct to the drawlist.
+     *
+     */
+    commands[0] = ctx_u32 (CTX_DEFINE_TEXTURE, width, height);
+    commands[1].data.u16[0] = format;
+
+    int pos = 2;
+
+    commands[pos].code        = CTX_DATA;
+    commands[pos].data.u32[0] = eid_len;
+    commands[pos].data.u32[1] = (eid_len+1+1)/9 + 1;
+    memcpy ((char *) &commands[pos+1].data.u8[0], eid, eid_len);
+    ((char *) &commands[pos+1].data.u8[0])[eid_len]=0;
+
+    pos = 2 + 1 + ctx_conts_for_entry (&commands[2]);
+    commands[pos].code        = CTX_DATA;
+    commands[pos].data.u32[0] = data_len;
+    commands[pos].data.u32[1] = (data_len+1+1)/9 + 1;
+    {
+      uint8_t *src = (uint8_t*)data;
+      uint8_t *dst = &commands[pos+1].data.u8[0];
+#if 1
+      memcpy (dst, src, data_len);
+#else
+      for (int y = 0; y < height; y++)
+      {
+         memcpy (dst, src, dst_stride);
+         src += stride;
+         dst += dst_stride;
+      }
+#endif
+    }
+    ((char *) &commands[pos+1].data.u8[0])[data_len]=0;
+
+    if (ctx->backend && (void*)ctx->backend->process != (void*)ctx_drawlist_process)
+    {
+      ctx_process (ctx, commands);
+      ctx_free (commands);
+    }
+    else
+    {
+       ctx->drawlist.count += ctx_conts_for_entry (commands) + 1;
+    }
+
+    CtxEidInfo *eid_info = (CtxEidInfo*)ctx_calloc (sizeof (CtxEidInfo), 1);
+    eid_info->width      = width;
+    eid_info->height     = height;
+    eid_info->frame      = ctx->texture_cache->frame;
+    //fprintf (stderr, "%i\n", eid_info->frame);
+    eid_info->eid        = ctx_strdup (eid);
+    ctx_list_prepend (&ctx->texture_cache->eid_db, eid_info);
+  }
+
+  if (ret_eid)
+  {
+    strcpy (ret_eid, eid);
+    ret_eid[64]=0;
+  }
+}
+
+void
+ctx_texture_load (Ctx *ctx, const char *path, int *tw, int *th, char *reid)
+{
+  const char *eid = path;
+  if (strstr (path, "svg"))return;
+  char ascii[41]="";
+  int eid_len = ctx_strlen (eid);
+  if (eid_len > 50)
+  {
+    CtxSHA1 *sha1 = ctx_sha1_new ();
+    uint8_t hash[20]="";
+    ctx_sha1_process (sha1, (uint8_t*)eid, eid_len);
+    ctx_sha1_done (sha1, hash);
+    ctx_sha1_free (sha1);
+    const char *hex="0123456789abcdef";
+    for (int i = 0; i < 20; i ++)
+    {
+       ascii[i*2]=hex[hash[i]/16];
+       ascii[i*2+1]=hex[hash[i]%16];
+    }
+    ascii[40]=0;
+    eid = ascii;
+  }
+
+  if (ctx_eid_valid (ctx, eid, tw, th))
+  {
+     if (reid)
+     {
+       strcpy (reid, eid);
+     }
+     return;
+  }
+
+#ifdef STBI_INCLUDE_STB_IMAGE_H
+  CtxPixelFormat pixel_format = CTX_FORMAT_RGBA8;
+  int w, h, components;
+  unsigned char *pixels = NULL;
+
+  if (!strncmp (path, "file://", 7))
+  {
+    pixels = stbi_load (path + 7, &w, &h, &components, 0);
+  }
+  else
+  {
+    unsigned char *data = NULL;
+    long length = 0;
+    ctx_get_contents (path, &data, &length);
+    if (data)
+    {
+       pixels = stbi_load_from_memory (data, length, &w, &h, &components, 0);
+       ctx_free (data);
+    }
+  }
+
+
+  if (pixels)
+  {
+    switch (components)
+    {
+      case 1: pixel_format = CTX_FORMAT_GRAY8;  break;
+      case 2: pixel_format = CTX_FORMAT_GRAYA8; break;
+      case 3: pixel_format = CTX_FORMAT_RGB8;   break;
+      case 4: pixel_format = CTX_FORMAT_RGBA8;
+      for (int i = 0; i < w * h; i++)
+      {
+        ctx_RGBA8_associate_alpha (&pixels[i * 4]);
+      }
+        break;
+    }
+    if (tw) *tw = w;
+    if (th) *th = h;
+    ctx_define_texture (ctx, eid, w, h, w * components, pixel_format, pixels, reid);
+    ctx_free (pixels);
+  }
+  else
+  {
+    fprintf (stderr, "texture loading problem for %s\n", path);
+  }
+#endif
+}
+
+void
+ctx_draw_texture_clipped  (Ctx *ctx, const char *eid,
+                           float x, float y,
+                           float width, float height,
+                           float clip_x, float clip_y,
+                           float clip_width, float clip_height)
+{
+  int tex_width  = 0;
+  int tex_height = 0;
+  if (ctx_eid_valid (ctx, eid , &tex_width, &tex_height))
+  {
+    if (width > 0.0f && height > 0.0f)
+    {
+#if 0
+      if (clip_width > 0.0f)
+      {
+        ctx_rectangle (ctx, clip_x, clip_y, clip_width, clip_height);
+        ctx_clip (ctx);
+      }
+#endif
+      ctx_rectangle (ctx, x, y, width, height);
+      CtxMatrix matrix;
+      ctx_matrix_identity (&matrix);
+      
+      ctx_texture (ctx, eid, 0, 0);// / (width/tex_width), y / (height/tex_height));
+      //ctx_rgba (ctx, 1, 0,0,0.5);
+#if 1
+      if (clip_width > 0.0f)
+      {
+              // XXX scale is not yet determined to be correct
+              // in relation to the translate!
+        ctx_matrix_scale (&matrix, clip_width/width, clip_height/height);
+        ctx_matrix_translate (&matrix, -clip_x, -clip_y);
+      }
+      else
+      {
+        ctx_matrix_scale (&matrix, tex_width/width, tex_height/height);
+      }
+      ctx_matrix_translate (&matrix, x, y);
+#endif
+      //ctx_matrix_invert (&matrix);
+      ctx_source_transform_matrix (ctx, &matrix);
+      //ctx_texture (ctx, eid, x / (width/tex_width), y / (height/tex_height));
+      ctx_fill (ctx);
+    }
+  }
+}
+
+void ctx_draw_texture (Ctx *ctx, const char *eid, float x, float y, float w, float h)
+{
+  ctx_draw_texture_clipped (ctx, eid, x, y, w, h, 0,0,0,0);
+}
+
+void ctx_draw_image_clipped (Ctx *ctx, const char *path, float x, float y, float w, float h, float sx, float sy, float swidth, float sheight)
+{
+  char reteid[65];
+  int width, height;
+  ctx_texture_load (ctx, path, &width, &height, reteid);
+  if (reteid[0])
+  {
+    ctx_draw_texture_clipped (ctx, reteid, x, y, w, h, sx, sy, swidth, sheight);
+  }
+}
+
+void
+ctx_draw_image (Ctx *ctx, const char *path, float x, float y, float w, float h)
+{
+  ctx_draw_image_clipped (ctx, path, x, y, w, h, 0,0,0,0);
+}
+
+void
+ctx_set_pixel_u8 (Ctx *ctx, uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+  CtxEntry command = ctx_u8 (CTX_SET_PIXEL, r, g, b, a, 0, 0, 0, 0);
+  command.data.u16[2]=x;
+  command.data.u16[3]=y;
+  ctx_process (ctx, &command);
+}
+
+void
+ctx_linear_gradient (Ctx *ctx, float x0, float y0, float x1, float y1)
+{
+  CtxEntry command[2]=
+  {
+    ctx_f (CTX_LINEAR_GRADIENT, x0, y0),
+    ctx_f (CTX_CONT,            x1, y1)
+  };
+  ctx_process (ctx, command);
+}
+
+void
+ctx_radial_gradient (Ctx *ctx, float x0, float y0, float r0, float x1, float y1, float r1)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_RADIAL_GRADIENT, x0, y0),
+    ctx_f (CTX_CONT,            r0, x1),
+    ctx_f (CTX_CONT,            y1, r1)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_preserve (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_PRESERVE);
+}
+
+void ctx_paint (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_PAINT);
+}
+
+void ctx_fill (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_FILL);
+}
+
+void ctx_stroke (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_STROKE);
+}
+
+
+#if 0
+static void ctx_empty (Ctx *ctx)
+{
+#if CTX_RASTERIZER
+  if (ctx->backend == NULL)
+#endif
+    ctx_drawlist_clear (ctx);
+}
+#endif
+
+void _ctx_set_store_clear (Ctx *ctx)
+{
+  ctx->transformation |= CTX_TRANSFORMATION_STORE_CLEAR;
+}
+
+#if CTX_EVENTS
+static void
+ctx_event_free (void *event, void *user_data)
+{
+  ctx_free (event);
+}
+
+static void
+ctx_collect_events (CtxEvent *event, void *data, void *data2)
+{
+  Ctx *ctx = (Ctx*)data;
+  CtxEvent *copy;
+  if (event->type == CTX_KEY_PRESS && !ctx_strcmp (event->string, "idle"))
+    return;
+  copy = (CtxEvent*)ctx_malloc (sizeof (CtxEvent));
+  *copy = *event;
+  if (copy->string)
+    copy->string = ctx_strdup (event->string);
+  ctx_list_append_full (&ctx->events.events, copy, ctx_event_free, NULL);
+}
+#endif
+
+#if CTX_EVENTS
+static void _ctx_bindings_key_press (CtxEvent *event, void *data1, void *data2);
+#endif
+
+CTX_EXPORT void
+ctx_start_frame (Ctx *ctx)
+{
+  ctx_drawlist_clear (ctx);
+        /* we do the callback reset first - maybe we need two cbs,
+         * one for before and one after default impl?
+         *
+         * tiled fb and sdl needs to sync
+         */
+  if (ctx->backend && ctx->backend->start_frame)
+    ctx->backend->start_frame (ctx);
+
+  //CTX_PROCESS_VOID (CTX_START_FRAME);
+  //if (ctx->transformation & CTX_TRANSFORMATION_STORE_CLEAR)
+  //  { return; }
+  ctx_state_init (&ctx->state);
+#if CTX_EVENTS
+  ctx_list_free (&ctx->events.items);
+  ctx->events.last_item = NULL;
+
+  if (ctx->events.ctx_get_event_enabled)
+  {
+    ctx_clear_bindings (ctx);
+    ctx_listen_full (ctx, 0,0,0,0,
+                     CTX_KEY_PRESS, _ctx_bindings_key_press, ctx, ctx,
+                     NULL, NULL);
+
+    ctx_listen_full (ctx, 0,0,0,0,
+                     CTX_KEY_UP, ctx_collect_events, ctx, ctx,
+                     NULL, NULL);
+    ctx_listen_full (ctx, 0,0,0,0,
+                     CTX_KEY_DOWN, ctx_collect_events, ctx, ctx,
+                     NULL, NULL);
+
+    ctx_listen_full (ctx, 0, 0, ctx->width, ctx->height,
+                     (CtxEventType)(CTX_PRESS|CTX_RELEASE|CTX_MOTION),
+                     ctx_collect_events, ctx, ctx,
+                     NULL, NULL);
+  }
+  ctx->dirty = 0;
+#endif
+}
+
+void ctx_begin_path (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_BEGIN_PATH);
+}
+
+void ctx_clip (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_CLIP);
+}
+
+void
+ctx_set (Ctx *ctx, uint32_t key_hash, const char *string, int len);
+
+void ctx_save (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_SAVE);
+}
+void ctx_restore (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_RESTORE);
+}
+void ctx_new_page (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_NEW_PAGE);
+}
+
+void ctx_start_group (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_START_GROUP);
+}
+
+void ctx_end_group (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_END_GROUP);
+}
+
+void ctx_line_width (Ctx *ctx, float x)
+{
+  if (ctx->state.gstate.line_width != x)
+    CTX_PROCESS_F1 (CTX_LINE_WIDTH, x);
+}
+
+float ctx_get_miter_limit (Ctx *ctx)
+{
+  return ctx->state.gstate.miter_limit;
+}
+
+float ctx_get_line_dash_offset (Ctx *ctx)
+{
+  return ctx->state.gstate.line_dash_offset;
+}
+
+void ctx_line_dash_offset (Ctx *ctx, float x)
+{
+  if (ctx->state.gstate.line_dash_offset != x)
+    CTX_PROCESS_F1 (CTX_LINE_DASH_OFFSET, x);
+}
+
+void ctx_line_height (Ctx *ctx, float x)
+{
+  CTX_PROCESS_F1 (CTX_LINE_HEIGHT, x);
+}
+
+void ctx_wrap_left (Ctx *ctx, float x)
+{
+  CTX_PROCESS_F1 (CTX_WRAP_LEFT , x);
+}
+
+void ctx_wrap_right (Ctx *ctx, float x)
+{
+  CTX_PROCESS_F1 (CTX_WRAP_RIGHT, x);
+}
+
+int ctx_get_image_smoothing (Ctx *ctx)
+{
+  return ctx->state.gstate.image_smoothing;
+}
+
+void ctx_image_smoothing (Ctx *ctx, int enabled)
+{
+  if (ctx_get_image_smoothing (ctx) != enabled)
+    CTX_PROCESS_U8 (CTX_IMAGE_SMOOTHING, enabled);
+}
+
+
+void ctx_line_dash (Ctx *ctx, float *dashes, int count)
+{
+  ctx_process_cmd_str_with_len (ctx, CTX_LINE_DASH, (char*)(dashes), count, 0, count * 4);
+}
+
+void ctx_shadow_blur (Ctx *ctx, float x)
+{
+#if CTX_ENABLE_SHADOW_BLUR
+  if (ctx->state.gstate.shadow_blur != x)
+#endif
+    CTX_PROCESS_F1 (CTX_SHADOW_BLUR, x);
+}
+
+void ctx_shadow_rgba (Ctx *ctx, float r, float g, float b, float a)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_SHADOW_COLOR, CTX_RGBA, r),
+    ctx_f (CTX_CONT, g, b),
+    ctx_f (CTX_CONT, a, 0)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_shadow_offset_x (Ctx *ctx, float x)
+{
+#if CTX_ENABLE_SHADOW_BLUR
+  if (ctx->state.gstate.shadow_offset_x != x)
+#endif
+    CTX_PROCESS_F1 (CTX_SHADOW_OFFSET_X, x);
+}
+
+void ctx_shadow_offset_y (Ctx *ctx, float x)
+{
+#if CTX_ENABLE_SHADOW_BLUR
+  if (ctx->state.gstate.shadow_offset_y != x)
+#endif
+    CTX_PROCESS_F1 (CTX_SHADOW_OFFSET_Y, x);
+}
+
+void
+ctx_global_alpha (Ctx *ctx, float global_alpha)
+{
+  if (ctx->state.gstate.global_alpha_f != global_alpha)
+    CTX_PROCESS_F1 (CTX_GLOBAL_ALPHA, global_alpha);
+}
+
+float
+ctx_get_global_alpha (Ctx *ctx)
+{
+  return ctx->state.gstate.global_alpha_f;
+}
+
+void
+ctx_font_size (Ctx *ctx, float x)
+{
+  CTX_PROCESS_F1 (CTX_FONT_SIZE, x);
+}
+
+float ctx_get_font_size  (Ctx *ctx)
+{
+  return ctx->state.gstate.font_size;
+}
+
+void
+ctx_miter_limit (Ctx *ctx, float limit)
+{
+  CTX_PROCESS_F1 (CTX_MITER_LIMIT, limit);
+}
+
+float ctx_get_line_width (Ctx *ctx)
+{
+  return ctx->state.gstate.line_width;
+}
+
+void
+_ctx_font (Ctx *ctx, const char *name)
+{
+  ctx->state.gstate.font = ctx_resolve_font (name);
+}
+
+#if 0
+void
+ctx_set (Ctx *ctx, uint32_t key_hash, const char *string, int len)
+{
+  if (len <= 0) len = ctx_strlen (string);
+  ctx_process_cmd_str (ctx, CTX_SET, string, key_hash, len);
+}
+
+const char *
+ctx_get (Ctx *ctx, const char *key)
+{
+  static char retbuf[32];
+  int len = 0;
+  CTX_PROCESS_U32(CTX_GET, ctx_strhash (key), 0);
+  while (read (STDIN_FILENO, &retbuf[len], 1) != -1)
+    {
+      if(retbuf[len]=='\n')
+        break;
+      retbuf[++len]=0;
+    }
+  return retbuf;
+}
+#endif
+
+void
+ctx_font_family (Ctx *ctx, const char *name)
+{
+#if CTX_BACKEND_TEXT
+  ctx_process_cmd_str (ctx, CTX_FONT, name, 0, 0);
+  _ctx_font (ctx, name);
+#else
+  _ctx_font (ctx, name);
+#endif
+}
+
+void
+ctx_font (Ctx *ctx, const char *family_name)
+{
+  // should also parse size
+  ctx_font_family (ctx, family_name);
+}
+
+const char *
+ctx_get_font (Ctx *ctx)
+{
+  return ctx_get_font_name (ctx, ctx->state.gstate.font);
+}
+
+void ctx_line_to (Ctx *ctx, float x, float y)
+{
+  if (CTX_UNLIKELY(!ctx->state.has_moved))
+    { CTX_PROCESS_F (CTX_MOVE_TO, x, y); }
+  else
+    { CTX_PROCESS_F (CTX_LINE_TO, x, y); }
+}
+
+void ctx_move_to (Ctx *ctx, float x, float y)
+{
+  CTX_PROCESS_F (CTX_MOVE_TO,x,y);
+}
+
+void ctx_curve_to (Ctx *ctx, float x0, float y0,
+                   float x1, float y1,
+                   float x2, float y2)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_CURVE_TO, x0, y0),
+    ctx_f (CTX_CONT,     x1, y1),
+    ctx_f (CTX_CONT,     x2, y2)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_round_rectangle (Ctx *ctx,
+                          float x0, float y0,
+                          float w, float h,
+                          float radius)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_ROUND_RECTANGLE, x0, y0),
+    ctx_f (CTX_CONT,            w, h),
+    ctx_f (CTX_CONT,            radius, 0)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_view_box (Ctx *ctx,
+                   float x0, float y0,
+                   float w, float h)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_VIEW_BOX, x0, y0),
+    ctx_f (CTX_CONT,     w, h)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_rectangle (Ctx *ctx,
+                    float x0, float y0,
+                    float w, float h)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_RECTANGLE, x0, y0),
+    ctx_f (CTX_CONT,      w, h)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_rel_line_to (Ctx *ctx, float x, float y)
+{
+  if (!ctx->state.has_moved)
+    { return; }
+  CTX_PROCESS_F (CTX_REL_LINE_TO,x,y);
+}
+
+void ctx_rel_move_to (Ctx *ctx, float x, float y)
+{
+  if (!ctx->state.has_moved)
+    {
+      CTX_PROCESS_F (CTX_MOVE_TO,x,y);
+      return;
+    }
+  CTX_PROCESS_F (CTX_REL_MOVE_TO,x,y);
+}
+
+CtxLineJoin ctx_get_line_join (Ctx *ctx)
+{
+  return ctx->state.gstate.line_join;
+}
+
+CtxCompositingMode ctx_get_compositing_mode (Ctx *ctx)
+{
+  return ctx->state.gstate.compositing_mode;
+}
+
+CtxBlend ctx_get_blend_mode (Ctx *ctx)
+{
+  return ctx->state.gstate.blend_mode;
+}
+
+CtxExtend ctx_get_extend (Ctx *ctx)
+{
+  return ctx->state.gstate.extend;
+}
+
+CtxTextAlign ctx_get_text_align  (Ctx *ctx)
+{
+  return (CtxTextAlign)ctx_state_get (&ctx->state, CTX_textAlign);
+}
+
+float ctx_get_wrap_left        (Ctx *ctx)
+{
+  return ctx_state_get (&ctx->state, CTX_wrapLeft);
+}
+float ctx_get_wrap_right       (Ctx *ctx)
+{
+  return ctx_state_get (&ctx->state, CTX_wrapRight);
+}
+
+float ctx_get_line_height      (Ctx *ctx)
+{
+  return ctx_state_get (&ctx->state, CTX_lineHeight);
+}
+
+CtxTextBaseline ctx_get_text_baseline (Ctx *ctx)
+{
+  return (CtxTextBaseline)ctx_state_get (&ctx->state, CTX_textBaseline);
+}
+
+CtxLineCap ctx_get_line_cap (Ctx *ctx)
+{
+  return ctx->state.gstate.line_cap;
+}
+
+CtxFillRule ctx_get_fill_rule (Ctx *ctx)
+{
+  return ctx->state.gstate.fill_rule;
+}
+
+void ctx_line_cap (Ctx *ctx, CtxLineCap cap)
+{
+  if (ctx->state.gstate.line_cap != cap)
+    CTX_PROCESS_U8 (CTX_LINE_CAP, cap);
+}
+
+void ctx_fill_rule (Ctx *ctx, CtxFillRule fill_rule)
+{
+  if (ctx->state.gstate.fill_rule != fill_rule)
+    CTX_PROCESS_U8 (CTX_FILL_RULE, fill_rule);
+}
+
+void ctx_line_join (Ctx *ctx, CtxLineJoin join)
+{
+  if (ctx->state.gstate.line_join != join)
+    CTX_PROCESS_U8 (CTX_LINE_JOIN, join);
+}
+
+void ctx_blend_mode (Ctx *ctx, CtxBlend mode)
+{
+  if (ctx->state.gstate.blend_mode != mode)
+    CTX_PROCESS_U32 (CTX_BLEND_MODE, mode, 0);
+}
+
+void ctx_extend (Ctx *ctx, CtxExtend extend)
+{
+  if (ctx->state.gstate.extend != extend)
+    CTX_PROCESS_U32 (CTX_EXTEND, extend, 0);
+}
+
+void ctx_compositing_mode (Ctx *ctx, CtxCompositingMode mode)
+{
+  if (ctx->state.gstate.compositing_mode != mode)
+    CTX_PROCESS_U32 (CTX_COMPOSITING_MODE, mode, 0);
+}
+
+void ctx_text_align (Ctx *ctx, CtxTextAlign text_align)
+{
+  CTX_PROCESS_U8 (CTX_TEXT_ALIGN, text_align);
+}
+
+void ctx_text_baseline (Ctx *ctx, CtxTextBaseline text_baseline)
+{
+  CTX_PROCESS_U8 (CTX_TEXT_BASELINE, text_baseline);
+}
+
+void ctx_text_direction (Ctx *ctx, CtxTextDirection text_direction)
+{
+  CTX_PROCESS_U8 (CTX_TEXT_DIRECTION, text_direction);
+}
+
+void
+ctx_rel_curve_to (Ctx *ctx,
+                  float x0, float y0,
+                  float x1, float y1,
+                  float x2, float y2)
+{
+  if (!ctx->state.has_moved)
+    { return; }
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_REL_CURVE_TO, x0, y0),
+    ctx_f (CTX_CONT, x1, y1),
+    ctx_f (CTX_CONT, x2, y2)
+  };
+  ctx_process (ctx, command);
+}
+
+void
+ctx_rel_quad_to (Ctx *ctx,
+                 float cx, float cy,
+                 float x,  float y)
+{
+  if (!ctx->state.has_moved)
+    { return; }
+  CtxEntry command[2]=
+  {
+    ctx_f (CTX_REL_QUAD_TO, cx, cy),
+    ctx_f (CTX_CONT, x, y)
+  };
+  ctx_process (ctx, command);
+}
+
+void
+ctx_quad_to (Ctx *ctx,
+             float cx, float cy,
+             float x,  float y)
+{
+  if (!ctx->state.has_moved)
+    { return; }
+  CtxEntry command[2]=
+  {
+    ctx_f (CTX_QUAD_TO, cx, cy),
+    ctx_f (CTX_CONT, x, y)
+  };
+  ctx_process (ctx, command);
+}
+
+void ctx_arc (Ctx  *ctx,
+              float x0, float y0,
+              float radius,
+              float angle1, float angle2,
+              int   direction)
+{
+  CtxEntry command[3]=
+  {
+    ctx_f (CTX_ARC, x0, y0),
+    ctx_f (CTX_CONT, radius, angle1),
+    ctx_f (CTX_CONT, angle2, direction)
+  };
+  ctx_process (ctx, command);
+}
+
+static int ctx_coords_equal (float x1, float y1, float x2, float y2, float tol)
+{
+  float dx = x2 - x1;
+  float dy = y2 - y1;
+  return dx*dx + dy*dy < tol*tol;
+}
+
+static float
+ctx_point_seg_dist_sq (float x, float y,
+                       float vx, float vy, float wx, float wy)
+{
+  float l2 = ctx_pow2 (vx-wx) + ctx_pow2 (vy-wy);
+  if (l2 < 0.0001f)
+    { return ctx_pow2 (x-vx) + ctx_pow2 (y-vy); }
+  float t = ( (x - vx) * (wx - vx) + (y - vy) * (wy - vy) ) / l2;
+  t = ctx_maxf (0, ctx_minf (1, t) );
+  float ix = vx + t * (wx - vx);
+  float iy = vy + t * (wy - vy);
+  return ctx_pow2 (x-ix) + ctx_pow2 (y-iy);
+}
+
+static void
+ctx_normalize (float *x, float *y)
+{
+  float length = ctx_hypotf ( (*x), (*y) );
+  if (length > 1e-6f)
+    {
+      float r = 1.0f / length;
+      *x *= r;
+      *y *= r;
+    }
+}
+
+void
+ctx_arc_to (Ctx *ctx, float x1, float y1, float x2, float y2, float radius)
+{
+  // XXX : should partially move into rasterizer to preserve comand
+  //       even if an arc preserves all geometry, just to ensure roundtripping
+  //       of data
+  /* from nanovg - but not quite working ; uncertain if arc or wrong
+   * transfusion is the cause.
+   */
+  float x0 = ctx->state.x;
+  float y0 = ctx->state.y;
+  float dx0,dy0, dx1,dy1, a, d, cx,cy, a0,a1;
+  int dir;
+  if (!ctx->state.has_moved)
+    { return; }
+  if (1)
+    {
+      // Handle degenerate cases.
+      if (ctx_coords_equal (x0,y0, x1,y1, 0.5f) ||
+          ctx_coords_equal (x1,y1, x2,y2, 0.5f) ||
+          ctx_point_seg_dist_sq (x1,y1, x0,y0, x2,y2) < 0.5f ||
+          radius < 0.5f)
+        {
+          ctx_line_to (ctx, x1,y1);
+          return;
+        }
+    }
+  // Calculate tangential circle to lines (x0,y0)-(x1,y1) and (x1,y1)-(x2,y2).
+  dx0 = x0-x1;
+  dy0 = y0-y1;
+  dx1 = x2-x1;
+  dy1 = y2-y1;
+  ctx_normalize (&dx0,&dy0);
+  ctx_normalize (&dx1,&dy1);
+  a = ctx_acosf (dx0*dx1 + dy0*dy1);
+  d = radius / ctx_tanf (a/2.0f);
+#if 0
+  if (d > 10000.0f)
+    {
+      ctx_line_to (ctx, x1, y1);
+      return;
+    }
+#endif
+  if ( (dx1*dy0 - dx0*dy1) > 0.0f)
+    {
+      cx = x1 + dx0*d + dy0*radius;
+      cy = y1 + dy0*d + -dx0*radius;
+      a0 = ctx_atan2f (dx0, -dy0);
+      a1 = ctx_atan2f (-dx1, dy1);
+      dir = 0;
+    }
+  else
+    {
+      cx = x1 + dx0*d + -dy0*radius;
+      cy = y1 + dy0*d + dx0*radius;
+      a0 = ctx_atan2f (-dx0, dy0);
+      a1 = ctx_atan2f (dx1, -dy1);
+      dir = 1;
+    }
+  ctx_arc (ctx, cx, cy, radius, a0, a1, dir);
+}
+
+void
+ctx_rel_arc_to (Ctx *ctx, float x1, float y1, float x2, float y2, float radius)
+{
+  x1 += ctx->state.x;
+  y1 += ctx->state.y;
+  x2 += ctx->state.x;
+  y2 += ctx->state.y;
+  ctx_arc_to (ctx, x1, y1, x2, y2, radius);
+}
+
+void
+ctx_exit (Ctx *ctx)
+{
+  CTX_PROCESS_VOID (CTX_EXIT);
+}
+
+CTX_EXPORT void
+ctx_end_frame (Ctx *ctx)
+{
+  if (ctx->backend && ctx->backend->end_frame)
+    ctx->backend->end_frame (ctx);
+  ctx->frame++;
+  if (ctx->texture_cache != ctx)
+    ctx->texture_cache->frame++;
+  ctx_drawlist_clear (ctx);
+  ctx_state_init (&ctx->state);
+}
+
+////////////////////////////////////////
+
+static inline void
+ctx_interpret_style (CtxState *state, CtxEntry *entry, void *data)
+{
+  CtxCommand *c = (CtxCommand *) entry;
+  switch (entry->code)
+    {
+      case CTX_LINE_HEIGHT:
+        ctx_state_set (state, CTX_lineHeight, ctx_arg_float (0) );
+        break;
+      case CTX_WRAP_LEFT:
+        ctx_state_set (state, CTX_wrapLeft, ctx_arg_float (0) );
+        break;
+      case CTX_WRAP_RIGHT:
+        ctx_state_set (state, CTX_wrapRight, ctx_arg_float (0) );
+        break;
+      case CTX_LINE_DASH_OFFSET:
+        state->gstate.line_dash_offset = ctx_arg_float (0);
+        break;
+      case CTX_LINE_WIDTH:
+        state->gstate.line_width = ctx_arg_float (0);
+        break;
+#if CTX_ENABLE_SHADOW_BLUR
+      case CTX_SHADOW_BLUR:
+        state->gstate.shadow_blur = ctx_arg_float (0);
+        break;
+      case CTX_SHADOW_OFFSET_X:
+        state->gstate.shadow_offset_x = ctx_arg_float (0);
+        break;
+      case CTX_SHADOW_OFFSET_Y:
+        state->gstate.shadow_offset_y = ctx_arg_float (0);
+        break;
+#endif
+      case CTX_LINE_CAP:
+        state->gstate.line_cap = (CtxLineCap) ctx_arg_u8 (0);
+        break;
+      case CTX_FILL_RULE:
+        state->gstate.fill_rule = (CtxFillRule) ctx_arg_u8 (0);
+        break;
+      case CTX_LINE_JOIN:
+        state->gstate.line_join = (CtxLineJoin) ctx_arg_u8 (0);
+        break;
+      case CTX_COMPOSITING_MODE:
+        state->gstate.compositing_mode = (CtxCompositingMode) ctx_arg_u32 (0);
+        break;
+      case CTX_BLEND_MODE:
+        state->gstate.blend_mode = (CtxBlend) ctx_arg_u32 (0);
+        break;
+      case CTX_EXTEND:
+        state->gstate.extend = (CtxExtend) ctx_arg_u32 (0);
+        break;
+      case CTX_TEXT_ALIGN:
+        ctx_state_set (state, CTX_textAlign, ctx_arg_u8 (0) );
+        break;
+      case CTX_TEXT_BASELINE:
+        ctx_state_set (state, CTX_textBaseline, ctx_arg_u8 (0) );
+        break;
+      case CTX_TEXT_DIRECTION:
+        ctx_state_set (state, CTX_textDirection, ctx_arg_u8 (0) );
+        break;
+      case CTX_GLOBAL_ALPHA:
+        state->gstate.global_alpha_u8 = ctx_float_to_u8 (ctx_arg_float (0) );
+        state->gstate.global_alpha_f = ctx_arg_float (0);
+        break;
+      case CTX_FONT_SIZE:
+        state->gstate.font_size = ctx_arg_float (0);
+        break;
+      case CTX_MITER_LIMIT:
+        state->gstate.miter_limit = ctx_arg_float (0);
+        break;
+      case CTX_COLOR_SPACE:
+        /* move this out of this function and only do it in rasterizer? XXX */
+        ctx_rasterizer_colorspace_icc (state, (CtxColorSpace)c->colorspace.space_slot,
+                                              (char*)c->colorspace.data,
+                                              c->colorspace.data_len);
+        break;
+      case CTX_IMAGE_SMOOTHING:
+        state->gstate.image_smoothing = c->entry.data.u8[0];
+        break;
+      case CTX_STROKE_SOURCE:
+        state->source = 1;
+        break;
+
+      case CTX_FONT:
+        state->gstate.font = ctx_resolve_font (ctx_arg_string());
+        break;
+
+      case CTX_COLOR:
+        {
+          int is_stroke = (state->source != 0);
+          CtxSource *source = is_stroke ?
+                                &state->gstate.source_stroke:
+                                &state->gstate.source_fill;
+          state->source = 0;
+
+          source->type = CTX_SOURCE_COLOR;
+         
+          //float components[5]={c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, c->cmyka.a};
+          switch ( ((int) ctx_arg_float (0)) & 511) // XXX remove 511 after stroke source is complete
+            {
+              case CTX_RGB:
+                ctx_color_set_rgba (state, &source->color, c->rgba.r, c->rgba.g, c->rgba.b, 1.0f);
+                break;
+              case CTX_RGBA:
+                ctx_color_set_rgba (state, &source->color, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+                break;
+              case CTX_DRGBA:
+                ctx_color_set_drgba (state, &source->color, c->rgba.r, c->rgba.g, c->rgba.b, c->rgba.a);
+                break;
+#if CTX_ENABLE_CMYK
+              case CTX_CMYKA:
+                ctx_color_set_cmyka (state, &source->color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, c->cmyka.a);
+                break;
+              case CTX_CMYK:
+                ctx_color_set_cmyka (state, &source->color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, 1.0f);
+                break;
+              case CTX_DCMYKA:
+                ctx_color_set_dcmyka (state, &source->color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, c->cmyka.a);
+                break;
+              case CTX_DCMYK:
+                ctx_color_set_dcmyka (state, &source->color, c->cmyka.c, c->cmyka.m, c->cmyka.y, c->cmyka.k, 1.0f);
+                break;
+#endif
+              case CTX_GRAYA:
+                ctx_color_set_graya (state, &source->color, c->graya.g, c->graya.a);
+                break;
+              case CTX_GRAY:
+                ctx_color_set_graya (state, &source->color, c->graya.g, 1.0f);
+                break;
+            }
+        }
+        break;
+      case CTX_SET_RGBA_U8:
+        //ctx_source_deinit (&state->gstate.source);
+        //state->gstate.source_fill.type = CTX_SOURCE_COLOR;
+        {
+          int is_stroke = (state->source != 0);
+          CtxSource *source = is_stroke ?
+                                &state->gstate.source_stroke:
+                                &state->gstate.source_fill;
+          state->source = 0;
+
+          source->type = CTX_SOURCE_COLOR;
+
+          ctx_color_set_RGBA8 (state, &source->color,
+                               ctx_arg_u8 (0),
+                               ctx_arg_u8 (1),
+                               ctx_arg_u8 (2),
+                               ctx_arg_u8 (3) );
+        }
+        //for (int i = 0; i < 4; i ++)
+        //  state->gstate.source.color.rgba[i] = ctx_arg_u8(i);
+        break;
+      //case CTX_TEXTURE:
+      //  state->gstate.source.type = CTX_SOURCE_
+      //  break;
+      case CTX_LINEAR_GRADIENT:
+        {
+          int is_stroke = (state->source != 0);
+          CtxSource *source = is_stroke ?
+                                &state->gstate.source_stroke:
+                                &state->gstate.source_fill;
+          state->source = is_stroke ? 2 : 0;
+
+          float x0 = ctx_arg_float (0);
+          float y0 = ctx_arg_float (1);
+          float x1 = ctx_arg_float (2);
+          float y1 = ctx_arg_float (3);
+          float dx, dy, length, start, end;
+
+          length = ctx_hypotf (x1-x0,y1-y0);
+          dx = (x1-x0) / length;
+          dy = (y1-y0) / length;
+          start = (x0 * dx + y0 * dy) / length;
+          end =   (x1 * dx + y1 * dy) / length;
+          source->linear_gradient.length = length;
+          source->linear_gradient.dx = dx;
+          source->linear_gradient.dy = dy;
+          source->linear_gradient.start = start;
+          source->linear_gradient.end = end;
+          source->linear_gradient.rdelta = (end-start)!=0.0f?1.0f/(end - start):1.0f;
+          source->type = CTX_SOURCE_LINEAR_GRADIENT;
+          source->transform = state->gstate.transform;
+          ctx_matrix_invert (&source->transform);
+        }
+        break;
+      case CTX_RADIAL_GRADIENT:
+        {
+          int is_stroke = (state->source != 0);
+          CtxSource *source = is_stroke ?
+                                &state->gstate.source_stroke:
+                                &state->gstate.source_fill;
+          state->source = is_stroke ? 2 : 0;
+
+          float x0 = ctx_arg_float (0);
+          float y0 = ctx_arg_float (1);
+          float r0 = ctx_arg_float (2);
+          float x1 = ctx_arg_float (3);
+          float y1 = ctx_arg_float (4);
+          float r1 = ctx_arg_float (5);
+          source->radial_gradient.x0 = x0;
+          source->radial_gradient.y0 = y0;
+          source->radial_gradient.r0 = r0;
+          source->radial_gradient.x1 = x1;
+          source->radial_gradient.y1 = y1;
+          source->radial_gradient.r1 = r1;
+          source->radial_gradient.rdelta = (r1 - r0) != 0.0f ? 1.0f/(r1-r0):0.0f;
+          source->type      = CTX_SOURCE_RADIAL_GRADIENT;
+          source->transform = state->gstate.transform;
+          ctx_matrix_invert (&source->transform);
+        }
+        break;
+    }
+}
+
+static inline void
+ctx_interpret_transforms (CtxState *state, CtxEntry *entry, void *data)
+{
+  switch (entry->code)
+    {
+      case CTX_SAVE:
+        ctx_gstate_push (state);
+        break;
+      case CTX_RESTORE:
+        ctx_gstate_pop (state);
+        break;
+      case CTX_IDENTITY:
+        _ctx_matrix_identity (&state->gstate.transform);
+        //state->gstate.transform_type = 0;
+        _ctx_transform_prime (state);
+        break;
+      case CTX_TRANSLATE:
+        ctx_matrix_translate (&state->gstate.transform,
+                              ctx_arg_float (0), ctx_arg_float (1) );
+        //state->gstate.transform_type = 0;
+        _ctx_transform_prime (state);
+        break;
+      case CTX_SCALE:
+        ctx_matrix_scale (&state->gstate.transform,
+                          ctx_arg_float (0), ctx_arg_float (1) );
+        //state->gstate.transform_type = 0;
+        _ctx_transform_prime (state);
+        break;
+      case CTX_ROTATE:
+        ctx_matrix_rotate (&state->gstate.transform, ctx_arg_float (0) );
+        //state->gstate.transform_type = 0;
+        _ctx_transform_prime (state);
+        break;
+      case CTX_APPLY_TRANSFORM:
+        {
+          CtxMatrix m;
+          ctx_matrix_set (&m,
+                          ctx_arg_float (0), ctx_arg_float (1),
+                          ctx_arg_float (2), ctx_arg_float (3),
+                          ctx_arg_float (4), ctx_arg_float (5),
+                          ctx_arg_float (6), ctx_arg_float (7),
+                          ctx_arg_float (8));
+          _ctx_matrix_multiply (&state->gstate.transform,
+                                &state->gstate.transform, &m); // XXX verify order
+          // state->gstate.transform_type = 0;
+          _ctx_transform_prime (state);
+        }
+#if 0
+        ctx_matrix_set (&state->gstate.transform,
+                        ctx_arg_float (0), ctx_arg_float (1),
+                        ctx_arg_float (2), ctx_arg_float (3),
+                        ctx_arg_float (4), ctx_arg_float (5) );
+#endif
+        break;
+    }
+}
+
+/*
+ * this transforms the contents of entry according to ctx->transformation
+ */
+static inline void
+ctx_interpret_pos_transform (CtxState *state, CtxEntry *entry, void *data)
+{
+  CtxCommand *c = (CtxCommand *) entry;
+  float start_x = state->x;
+  float start_y = state->y;
+  int had_moved = state->has_moved;
+  switch (entry->code)
+    {
+      case CTX_MOVE_TO:
+      case CTX_LINE_TO:
+        {
+          float x = c->c.x0;
+          float y = c->c.y0;
+          if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+            {
+              _ctx_user_to_device (state, &x, &y);
+              ctx_arg_float (0) = x;
+              ctx_arg_float (1) = y;
+            }
+        }
+        break;
+      case CTX_ARC:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+          {
+            float temp;
+            _ctx_user_to_device (state, &c->arc.x, &c->arc.y);
+            temp = 0;
+            _ctx_user_to_device_distance (state, &c->arc.radius, &temp);
+          }
+        break;
+      case CTX_LINEAR_GRADIENT:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+        {
+        _ctx_user_to_device (state, &c->linear_gradient.x1, &c->linear_gradient.y1);
+        _ctx_user_to_device (state, &c->linear_gradient.x2, &c->linear_gradient.y2);
+        }
+        break;
+      case CTX_RADIAL_GRADIENT:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+        {
+          float temp;
+          _ctx_user_to_device (state, &c->radial_gradient.x1, &c->radial_gradient.y1);
+          temp = 0;
+          _ctx_user_to_device_distance (state, &c->radial_gradient.r1, &temp);
+          _ctx_user_to_device (state, &c->radial_gradient.x2, &c->radial_gradient.y2);
+          temp = 0;
+          _ctx_user_to_device_distance (state, &c->radial_gradient.r2, &temp);
+        }
+        break;
+      case CTX_CURVE_TO:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+          {
+            for (int c = 0; c < 3; c ++)
+              {
+                float x = entry[c].data.f[0];
+                float y = entry[c].data.f[1];
+                _ctx_user_to_device (state, &x, &y);
+                entry[c].data.f[0] = x;
+                entry[c].data.f[1] = y;
+              }
+          }
+        break;
+      case CTX_QUAD_TO:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+          {
+            for (int c = 0; c < 2; c ++)
+              {
+                float x = entry[c].data.f[0];
+                float y = entry[c].data.f[1];
+                _ctx_user_to_device (state, &x, &y);
+                entry[c].data.f[0] = x;
+                entry[c].data.f[1] = y;
+              }
+          }
+        break;
+      case CTX_REL_MOVE_TO:
+      case CTX_REL_LINE_TO:
+        if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+          {
+            for (int c = 0; c < 1; c ++)
+              {
+                float x = state->x;
+                float y = state->y;
+                _ctx_user_to_device (state, &x, &y);
+                entry[c].data.f[0] = x;
+                entry[c].data.f[1] = y;
+              }
+            if (entry->code == CTX_REL_MOVE_TO)
+              { entry->code = CTX_MOVE_TO; }
+            else
+              { entry->code = CTX_LINE_TO; }
+          }
+        break;
+      case CTX_REL_CURVE_TO:
+        {
+          float nx = state->x + ctx_arg_float (4);
+          float ny = state->y + ctx_arg_float (5);
+          if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+            {
+              for (int c = 0; c < 3; c ++)
+                {
+                  float x = nx + entry[c].data.f[0];
+                  float y = ny + entry[c].data.f[1];
+                  _ctx_user_to_device (state, &x, &y);
+                  entry[c].data.f[0] = x;
+                  entry[c].data.f[1] = y;
+                }
+              entry->code = CTX_CURVE_TO;
+            }
+        }
+        break;
+      case CTX_REL_QUAD_TO:
+        {
+          float nx = state->x + ctx_arg_float (2);
+          float ny = state->y + ctx_arg_float (3);
+          if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) )
+            {
+              for (int c = 0; c < 2; c ++)
+                {
+                  float x = nx + entry[c].data.f[0];
+                  float y = ny + entry[c].data.f[1];
+                  _ctx_user_to_device (state, &x, &y);
+                  entry[c].data.f[0] = x;
+                  entry[c].data.f[1] = y;
+                }
+              entry->code = CTX_QUAD_TO;
+            }
+        }
+        break;
+    }
+  if ((((Ctx *) (data) )->transformation & CTX_TRANSFORMATION_RELATIVE))
+    {
+      int components = 0;
+      _ctx_user_to_device (state, &start_x, &start_y);
+      switch (entry->code)
+        {
+          case CTX_MOVE_TO:
+            if (had_moved) { components = 1; }
+            break;
+          case CTX_LINE_TO:
+            components = 1;
+            break;
+          case CTX_CURVE_TO:
+            components = 3;
+            break;
+          case CTX_QUAD_TO:
+            components = 2;
+            break;
+        }
+      if (components)
+        {
+          for (int c = 0; c < components; c++)
+            {
+              entry[c].data.f[0] -= start_x;
+              entry[c].data.f[1] -= start_y;
+            }
+          switch (entry->code)
+            {
+              case CTX_MOVE_TO:
+                entry[0].code = CTX_REL_MOVE_TO;
+                break;
+              case CTX_LINE_TO:
+                entry[0].code = CTX_REL_LINE_TO;
+                break;
+                break;
+              case CTX_CURVE_TO:
+                entry[0].code = CTX_REL_CURVE_TO;
+                break;
+              case CTX_QUAD_TO:
+                entry[0].code = CTX_REL_QUAD_TO;
+                break;
+            }
+        }
+    }
+}
+
+static inline void
+ctx_interpret_pos_bare (CtxState *state, CtxEntry *entry, void *data)
+{
+  switch (entry->code)
+    {
+      case CTX_START_FRAME:
+        ctx_state_init (state);
+        state->has_moved = 0;
+        break;
+      case CTX_CLIP:
+      case CTX_BEGIN_PATH:
+      case CTX_FILL:
+      case CTX_STROKE:
+        state->has_moved = 0;
+        break;
+      case CTX_MOVE_TO:
+      case CTX_LINE_TO:
+        state->x = ctx_arg_float (0);
+        state->y = ctx_arg_float (1);
+        state->has_moved = 1;
+        break;
+      case CTX_CURVE_TO:
+        state->x = ctx_arg_float (4);
+        state->y = ctx_arg_float (5);
+        state->has_moved = 1;
+        break;
+      case CTX_QUAD_TO:
+        state->x = ctx_arg_float (2);
+        state->y = ctx_arg_float (3);
+        state->has_moved = 1;
+        break;
+      case CTX_ARC:
+        state->x = ctx_arg_float (0) + ctx_cosf (ctx_arg_float (4) ) * ctx_arg_float (2);
+        state->y = ctx_arg_float (1) + ctx_sinf (ctx_arg_float (4) ) * ctx_arg_float (2);
+        state->has_moved = 1;
+        break;
+      case CTX_REL_MOVE_TO:
+      case CTX_REL_LINE_TO:
+        state->x += ctx_arg_float (0);
+        state->y += ctx_arg_float (1);
+        break;
+      case CTX_REL_CURVE_TO:
+        state->x += ctx_arg_float (4);
+        state->y += ctx_arg_float (5);
+        break;
+      case CTX_REL_QUAD_TO:
+        state->x += ctx_arg_float (2);
+        state->y += ctx_arg_float (3);
+        break;
+        // XXX missing some smooths
+    }
+}
+
+static inline void
+ctx_interpret_pos (CtxState *state, CtxEntry *entry, void *data)
+{
+  if ( ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_SCREEN_SPACE) ||
+       ( ( (Ctx *) (data) )->transformation & CTX_TRANSFORMATION_RELATIVE) )
+    {
+      ctx_interpret_pos_transform (state, entry, data);
+    }
+  ctx_interpret_pos_bare (state, entry, data);
+}
+
+#if CTX_BABL
+void ctx_colorspace_babl (CtxState   *state,
+                          CtxColorSpace  icc_slot,
+                          const Babl *space);
+#endif
+
+#ifndef CTX_TEXT_WRAP
+#define CTX_TEXT_WRAP 1
+#endif
+
+static void
+ctx_state_init (CtxState *state)
+{
+  ctx_memset (state, 0, sizeof (CtxState) );
+  state->gstate.global_alpha_u8 = 255;
+  state->gstate.global_alpha_f  = 1.0;
+  state->gstate.font_size       = 32; // default HTML canvas is 10px sans
+  state->gstate.line_width      = 2.0;
+  state->gstate.image_smoothing = 1;
+  state->gstate.source_stroke.type = CTX_SOURCE_INHERIT_FILL;
+  ctx_color_set_graya (state, &state->gstate.source_fill.color, 1.0f, 1.0f);
+  ctx_state_set (state, CTX_lineHeight, 1.0f);
+#if CTX_TEXT_WRAP
+  ctx_state_set (state, CTX_wrapLeft, 0.0f);
+  ctx_state_set (state, CTX_wrapRight, 0.0f);
+#endif
+
+  state->ink_min_x              = 8192;
+  state->ink_min_y              = 8192;
+  state->ink_max_x              = -8192;
+  state->ink_max_y              = -8192;
+  _ctx_matrix_identity (&state->gstate.transform);
+#if CTX_CM
+#if CTX_BABL
+  //ctx_colorspace_babl (state, CTX_COLOR_SPACE_USER_RGB,   babl_space ("sRGB"));
+  //ctx_colorspace_babl (state, CTX_COLOR_SPACE_DEVICE_RGB, babl_space ("ACEScg"));
+#endif
+#endif
+}
+
+void _ctx_set_transformation (Ctx *ctx, int transformation)
+{
+  ctx->transformation = transformation;
+}
+static void ctx_setup (Ctx *ctx);
+
+#if CTX_SIMD
+void ctx_simd_setup (void);
+#endif
+static void
+_ctx_init (Ctx *ctx)
+{
+  static int done_first_run = 0;
+  ctx_setup (ctx);
+
+  if (!done_first_run)
+  {
+#if CTX_BABL
+    babl_init ();
+#endif
+    done_first_run = 1;
+#if CTX_SIMD
+    ctx_simd_setup ();
+#endif
+#if CTX_U8_TO_FLOAT_LUT
+    for (int i = 0; i <256;i++)
+      ctx_u8_float[i] = i/255.0f;
+#endif
+#if CTX_SHAPE_CACHE
+    if (getenv ("CTX_SHAPE_CACHE"))
+    {
+      const char * val = getenv ("CTX_SHAPE_CACHE");
+      if (!ctx_strcmp (val, "0") ||
+          !ctx_strcmp (val, "off"))
+        _ctx_shape_cache_enabled = 0;
+      else
+        _ctx_shape_cache_enabled = 1;
+    }
+#endif
+  }
+
+  ctx_state_init (&ctx->state);
+
+#if CTX_CURRENT_PATH
+  ctx->current_path.flags |= CTX_DRAWLIST_CURRENT_PATH;
+#endif
+  //ctx->transformation |= (CtxTransformation) CTX_TRANSFORMATION_SCREEN_SPACE;
+  //ctx->transformation |= (CtxTransformation) CTX_TRANSFORMATION_RELATIVE;
+#if CTX_BITPACK
+  ctx->drawlist.flags |= CTX_TRANSFORMATION_BITPACK;
+#endif
+  ctx->texture_cache = ctx;
+
+  ctx->fonts = ctx_fonts;
+}
+
+
+#if CTX_DRAWLIST_STATIC
+static Ctx ctx_state;
+#endif
+
+void ctx_push_backend (Ctx *ctx,
+                       void *backend)
+{
+  if (ctx->backend_pushed)
+    fprintf (stderr, "double push\n");
+  ctx->backend_pushed = ctx->backend;
+  ctx->backend = (CtxBackend*)backend;
+  if (ctx->backend->process == NULL)
+    ctx->backend->process = (void(*)(Ctx*,CtxCommand*))ctx_drawlist_process;
+}
+
+
+void ctx_pop_backend (Ctx *ctx)
+{
+  if (!ctx->backend_pushed)
+    fprintf (stderr, "backend pop without push\n");
+  if (ctx->backend && ctx->backend->destroy)
+    ctx->backend->destroy (ctx->backend);
+  ctx->backend = ctx->backend_pushed;
+  ctx->backend_pushed = NULL;
+}
+
+void ctx_set_backend (Ctx  *ctx,
+                       void *backend)
+{
+  if (ctx->backend && ctx->backend->destroy)
+    ctx->backend->destroy (ctx->backend);
+  ctx->backend = (CtxBackend*)backend;
+  if (ctx->backend->process == NULL)
+    ctx->backend->process = (void(*)(Ctx*,CtxCommand*))ctx_drawlist_process;
+}
+
+void *ctx_get_backend (Ctx *ctx)
+{
+  return ctx->backend;
+}
+
+
+static Ctx *
+_ctx_new_drawlist (int width, int height)
+{
+#if CTX_DRAWLIST_STATIC
+  Ctx *ctx = &ctx_state;
+#else
+  Ctx *ctx = (Ctx *) ctx_malloc (sizeof (Ctx) );
+#endif
+  ctx_memset (ctx, 0, sizeof (Ctx) );
+  _ctx_init (ctx);
+
+  ctx_set_backend (ctx, ctx_drawlist_backend_new ());
+  ctx_set_size (ctx, width, height);
+  return ctx;
+}
+
+Ctx *
+ctx_new_drawlist (int width, int height)
+{
+  return _ctx_new_drawlist (width, height);
+}
+
+#if CTX_EVENTS
+static Ctx *ctx_new_ui (int width, int height, const char *backend);
+#endif
+
+CTX_EXPORT Ctx *
+ctx_new (int width, int height, const char *backend)
+{
+#if CTX_EVENTS
+  if (backend && !ctx_strcmp (backend, "drawlist"))
+#endif
+  {
+    return _ctx_new_drawlist (width, height);
+  }
+#if CTX_EVENTS
+  else
+    return ctx_new_ui (width, height, backend);
+#endif
+}
+
+static inline void
+ctx_drawlist_deinit (CtxDrawlist *drawlist)
+{
+#if !CTX_DRAWLIST_STATIC
+  if (drawlist->entries && ! (drawlist->flags & CTX_DRAWLIST_DOESNT_OWN_ENTRIES) )
+    {
+      ctx_free (drawlist->entries); 
+    }
+#endif
+  drawlist->entries = NULL;
+  drawlist->size = 0;
+}
+
+
+static void ctx_deinit (Ctx *ctx)
+{
+#if CTX_EVENTS
+  ctx_events_deinit (ctx);
+#endif
+
+  if (ctx->backend)
+    {
+      if (ctx->backend->destroy)
+        ctx->backend->destroy (ctx->backend);
+      ctx->backend    = NULL;
+    }
+  ctx_drawlist_deinit (&ctx->drawlist);
+#if CTX_CURRENT_PATH
+  ctx_drawlist_deinit (&ctx->current_path);
+#endif
+
+  for (int no = 0; no < CTX_MAX_TEXTURES; no++)
+    ctx_buffer_deinit (&ctx->texture[no]);
+}
+
+CTX_EXPORT void
+ctx_destroy (Ctx *ctx)
+{
+  if (!ctx)
+    { return; }
+
+#if CTX_CLIENTS
+  while (ctx_clients (ctx))
+    ctx_client_remove (ctx, ctx_clients(ctx)->data);
+#endif
+
+#if CTX_EVENTS
+  ctx_clear_bindings (ctx);
+#endif
+  ctx_deinit (ctx);
+#if !CTX_DRAWLIST_STATIC
+  ctx_free (ctx);
+#endif
+}
+
+
+Ctx *
+ctx_new_for_drawlist (int width, int height, void *data, size_t length)
+{
+  Ctx *ctx = _ctx_new_drawlist (width, height);
+  ctx->drawlist.flags   |= CTX_DRAWLIST_DOESNT_OWN_ENTRIES;
+  ctx->drawlist.entries  = (CtxEntry *) data;
+  ctx->drawlist.count    = length / sizeof (CtxEntry);
+  return ctx;
+}
+
+
+static void ctx_setup (Ctx *ctx)
+{
+  ctx_font_setup (ctx);
+}
+
+void
+ctx_render_ctx (Ctx *ctx, Ctx *d_ctx)
+{
+  CtxIterator iterator;
+  CtxCommand *command;
+  ctx->bail = 0;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    {
+       ctx_process (d_ctx, &command->entry);
+    }
+}
+
+
+void
+ctx_render_ctx_masked (Ctx *ctx, Ctx *d_ctx, uint32_t mask)
+{
+  CtxIterator iterator;
+  CtxCommand *command;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+
+  uint32_t active_mask = 0xffffffff;
+
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    {
+       d_ctx->bail = ((active_mask & mask) == 0);
+       ctx_process (d_ctx, &command->entry);
+
+       switch (command->code)
+       {
+         case CTX_FILL:
+         case CTX_STROKE:
+         case CTX_CLIP:
+         case CTX_TEXT:
+         case CTX_GLYPH:
+           active_mask = command->entry.data.u32[1];
+       }
+    }
+}
+
+void
+ctx_render_ctx_textures (Ctx *ctx, Ctx *d_ctx)
+{
+  CtxIterator iterator;
+  CtxCommand *command;
+  ctx_iterator_init (&iterator, &ctx->drawlist, 0,
+                     CTX_ITERATOR_EXPAND_BITPACK);
+  while ( (command = ctx_iterator_next (&iterator) ) )
+    {
+       switch (command->code)
+       {
+         default:
+                 //fprintf (stderr, "[%c]", command->code);
+                 break;
+         case CTX_TEXTURE:
+             //fprintf (stderr, "t:%s\n", command->texture.eid);
+             ctx_process (d_ctx, &command->entry);
+             break;
+         case CTX_DEFINE_TEXTURE:
+             //fprintf (stderr, "d:%s\n", command->define_texture.eid);
+             ctx_process (d_ctx, &command->entry);
+           break;
+       }
+    }
+}
+
+void ctx_quit (Ctx *ctx)
+{
+#if CTX_CLIENTS
+  while (ctx_clients (ctx))
+    ctx_client_remove (ctx, ctx_clients(ctx)->data);
+#endif
+
+#if CTX_EVENTS
+  ctx->quit ++;
+#endif
+}
+
+int  ctx_has_quit (Ctx *ctx)
+{
+#if CTX_EVENTS
+  return (ctx->quit);
+#else
+  return 1; 
+#endif
+}
+
+int ctx_pixel_format_bits_per_pixel (CtxPixelFormat format)
+{
+  CtxPixelFormatInfo *info = ctx_pixel_format_info (format);
+  if (info)
+    return info->bpp;
+  return -1;
+}
+
+int ctx_pixel_format_get_stride (CtxPixelFormat format, int width)
+{
+  CtxPixelFormatInfo *info = ctx_pixel_format_info (format);
+  if (info)
+  {
+    switch (info->bpp)
+    {
+      case 0:
+      case 1:
+        return (width + 7)/8;
+      case 2:
+        return (width + 3)/4;
+      case 4:
+        return (width + 1)/2;
+      default:
+        return width * (info->bpp / 8);
+    }
+  }
+  return width;
+}
+
+int ctx_pixel_format_ebpp (CtxPixelFormat format)
+{
+  CtxPixelFormatInfo *info = ctx_pixel_format_info (format);
+  if (info)
+    return info->ebpp;
+  return -1;
+}
+
+int ctx_pixel_format_components (CtxPixelFormat format)
+{
+  CtxPixelFormatInfo *info = ctx_pixel_format_info (format);
+  if (info)
+    return info->components;
+  return -1;
+}
+
+#if CTX_EVENTS
+void         ctx_set_cursor (Ctx *ctx, CtxCursor cursor)
+{
+  if (ctx->cursor != cursor)
+  {
+    ctx_queue_draw (ctx);
+    ctx->cursor = cursor;
+  }
+}
+CtxCursor    ctx_get_cursor (Ctx *ctx)
+{
+  return ctx->cursor;
+}
+
+void ctx_set_clipboard (Ctx *ctx, const char *text)
+{
+  if (ctx->backend && ctx->backend->set_clipboard)
+  {
+    ctx->backend->set_clipboard (ctx, text);
+    return;
+  }
+}
+
+void ctx_windowtitle (Ctx *ctx, const char *text)
+{
+  if (ctx->backend && ctx->backend->set_windowtitle)
+  {
+    ctx->backend->set_windowtitle (ctx, text);
+    return;
+  }
+}
+
+char *ctx_get_clipboard (Ctx *ctx)
+{
+  if (ctx->backend && ctx->backend->get_clipboard)
+  {
+    return ctx->backend->get_clipboard (ctx);
+  }
+  return ctx_strdup ("");
+}
+
+void ctx_set_texture_source (Ctx *ctx, Ctx *texture_source)
+{
+  ((CtxRasterizer*)ctx->backend)->texture_source = texture_source;
+}
+
+void ctx_set_texture_cache (Ctx *ctx, Ctx *texture_cache)
+{
+  ctx->texture_cache = texture_cache;
+}
+
+void ctx_set_transform (Ctx *ctx, float a, float b, float c, float d, float e, float f, float g, float h, float i)
+{
+  ctx_identity (ctx);
+  ctx_apply_transform (ctx, a, b, c, d, e, f, g, h, i);
+}
+
+#endif
+
+#if CTX_GET_CONTENTS
+
+#if CTX_CURL
+#include <curl/curl.h>
+static size_t
+ctx_string_append_callback (void *contents, size_t size, size_t nmemb, void *userp)
+{
+  CtxString *string = (CtxString*)userp;
+  ctx_string_append_data ((CtxString*)string, contents, size * nmemb);
+  return size * nmemb;
+}
+
+#endif
+
+int
+ctx_get_contents2 (const char     *uri,
+                   unsigned char **contents,
+                   long           *length,
+                   long            max_len)
+{
+  char *temp_uri = NULL; // XXX XXX breaks with data uri's
+  int   success  = -1;
+
+  if (uri[0] == '/')
+  {
+    temp_uri = (char*) ctx_malloc (ctx_strlen (uri) + 8);
+    sprintf (temp_uri, "file://%s", uri);
+    uri = temp_uri;
+  }
+
+  if (strchr (uri, '#'))
+   strchr (uri, '#')[0]=0;
+
+  for (CtxList *l = registered_contents; l; l = l->next)
+  {
+    CtxFileContent *c = (CtxFileContent*)l->data;
+    if (!ctx_strcmp (c->path, uri))
+    {
+      contents = ctx_malloc (c->length+1);
+      contents[c->length]=0;
+      if (length) *length = c->length;
+      ctx_free (temp_uri);
+      return 0;
+    }
+  }
+
+  if (!strncmp (uri, "file://", 5))
+  {
+    if (strchr (uri, '?'))
+     strchr (uri, '?')[0]=0;
+  }
+
+  if (!strncmp (uri, "file://", 7))
+    success = ___ctx_file_get_contents (uri + 7, contents, length, max_len);
+  else
+  {
+#if CTX_CURL
+  CURL *curl = curl_easy_init ();
+  CURLcode res;
+
+  curl_easy_setopt(curl, CURLOPT_URL, uri);
+  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+    CtxString *string = ctx_string_new ("");
+
+      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ctx_string_append_callback);
+   /* we pass our 'chunk' struct to the callback function */
+  curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)string);
+
+  curl_easy_setopt(curl, CURLOPT_USERAGENT, "ctx/0.0");
+
+   res = curl_easy_perform(curl);
+  /* check for errors */
+  if(res != CURLE_OK) {
+          fprintf(stderr, "curl_easy_perform() failed: %s\n",
+            curl_easy_strerror(res));
+     curl_easy_cleanup (curl);
+  }
+  else
+  {
+     *contents = (unsigned char*)string->str;
+     *length = string->length;
+     ctx_string_free (string, 0);
+     curl_easy_cleanup (curl);
+     success = 0;
+  }
+#else
+    success = ___ctx_file_get_contents (uri, contents, length, max_len);
+#endif
+  }
+  ctx_free (temp_uri);
+  return success;
+}
+
+
+int
+ctx_get_contents (const char     *uri,
+                  unsigned char **contents,
+                  long           *length)
+{
+  return ctx_get_contents2 (uri, contents, length, 1024*1024*1024);
+}
+
+
+
+typedef struct CtxMagicEntry {
+  int is_text;
+  const char *mime_type;
+  const char *ext1;
+  int len;
+  uint8_t magic[16];
+} CtxMagicEntry;
+
+static CtxMagicEntry ctx_magics[]={
+  {0, "image/bmp",  ".bmp", 0, {0}},
+  {0, "image/png",  ".png", 8, {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a}},
+  {0, "image/jpeg", ".jpg", 8,  {0xff, 0xd8, 0xff, 0xdb, 0xff, 0xd8, 0xff, 0xe0}},
+  {0, "image/jpeg", ".jpg", 4,  {0xff, 0xd8, 0xff, 0xe0}},
+  {0, "image/jpeg", ".jpg", 4,  {0xff, 0xd8, 0xff, 0xee}},
+  {0, "image/jpeg", ".jpg", 4,  {0xff, 0xd8, 0xff, 0xe1}},
+  {0, "image/jpeg", ".jpeg", 8, {0xff, 0xd8, 0xff, 0xdb, 0xff, 0xd8, 0xff, 0xe0}},
+
+  {0, "image/psd", ".psd", 4,  {0x38, 0x42, 0x50, 0x53}},
+  {0, "image/tinyvg", ".tvg", 3, {0x72, 0x56, 1}}, 
+  {0, "image/gif",  ".gif", 6, {0x47, 0x49, 0x46, 0x38, 0x37, 0x61}},
+  {0, "image/gif",  ".gif", 6, {0x47, 0x49, 0x46, 0x38, 0x39, 0x61}},
+  {0, "image/exr",  ".exr", 4, {0x76, 0x2f, 0x31, 0x01}},
+  {0, "video/mpeg", ".mpg", 4, {0x00, 0x00, 0x01, 0xba}},
+  {0, "application/blender", ".blend", 8, {0x42, 0x4c,0x45,0x4e,0x44,0x45,0x52}},
+  {0, "image/xcf",  ".xcf", 8, {0x67, 0x69,0x6d,0x70,0x20,0x78,0x63,0x66}},
+  {0, "application/bzip2", ".bz2", 3, {0x42, 0x5a, 0x68}},
+  {0, "application/gzip", ".gz", 2, {0x1f, 0x8b}},
+  {0, "application/zip", ".zip", 4, {0x50, 0x4b, 0x03, 0x04}},
+  {0, "application/zip", ".zip", 4, {0x50, 0x4b, 0x05, 0x06}},
+  {0, "application/rar", ".rar", 6, {0x52, 0x61, 0x72, 0x1a, 0x07, 0x00}},
+  {0, "application/rar", ".rar", 7, {0x52, 0x61, 0x72, 0x1a, 0x07, 0x01, 0x00}},
+  {1, "text/x-csrc", ".c", 0, {0,}},
+  {1, "text/x-chdr", ".h", 0, {0,}},
+  {1, "text/css", ".css", 0, {0x0}},
+
+  {0, "application/gzip", ".z", 2, {0x1f, 0x9d}},
+
+  {0, "application/dos-mz", ".exe", 2, {0x4d, 0x5a}},
+
+  {1, "text/csv", ".csv", 0, {0x0}},
+  {1, "text/html", ".htm", 0, {0x0}},
+  {1, "text/html", ".html", 0, {0x0}},
+  {1, "text/x-makefile", "makefile", 0, {0x0}},
+  {1, "application/atom+xml", ".atom", 0, {0x0}},
+  {1, "application/rdf+xml", ".rdf", 0, {0x0}},
+  {1, "application/javascript", ".js", 0, {0x0}},
+  {1, "application/json", ".json", 0, {0x0}},
+  {0, "application/octet-stream", ".bin", 0, {0x0}},
+  {0, "application/x-object", ".o", 0, {0x0}},
+  {1, "text/utf-8", ".txt", 0, {0xef, 0xbb, 0xbf}}, // utf8 bom
+  {1, "text/x-sh", ".sh", 0, {0x0}},
+  {1, "text/x-python", ".py", 0, {0x0}},
+  {1, "text/x-perl", ".pl", 0, {0x0}},
+  {1, "text/x-perl", ".pm", 0, {0x0}},
+  {1, "application/x-shellscript", ".sh", 2, {0x23, 0x21}}, // #!
+  {0, "application/pdf", ".pdf", 0, {0x0}},
+  {0, "application/ctx", ".ctx", 0, {0x0}},
+  {0, "application/wasm", ".wasm", 0, {0x00, 0x61, 0x73, 0x6d}},
+  {1, "text/xml", ".xml",     0, {0x0}},
+  {0, "video/mp4", ".mp4",    7, {0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f}},
+  {0, "video/matroska", ".mkv", 4, {0x1a, 0x45, 0xdf, 0xa3}},
+  {0, "video/ogg", ".ogv",    0, {0x0}},
+  {0, "audio/flac", ".flac",  0, {0x66, 0x4c, 0x61, 0x43}},
+  {0, "audio/sp-midi", ".mid",  4, {0x4d, 0x54, 0x68, 0x64}},
+  {0, "audio/x-wav", ".wav",  4, {0x52, 0x49, 0x46, 0x46}},
+  {0, "audio/ogg", ".ogg",    4, {0x4f, 0x67, 0x67, 0x53}},
+  {0, "audio/ogg", ".opus",   0, {0x0}},
+  {0, "audio/ogg", ".oga",    0, {0x0}},
+  {0, "audio/mpeg", ".mp1",   0, {0x0}},
+  {0, "audio/m3u", ".m3u",    0, {0x0}},
+  {0, "audio/mpeg", ".mp2",   0, {0x0}},
+  {0, "audio/mpeg", ".mp3",   0, {0x0}},
+  {0, "audio/mpeg", ".m4a",   0, {0x0}},
+  {0, "audio/mpeg", ".mpga",  0, {0x0}},
+  {0, "audio/mpeg", ".mpega", 0, {0x0}},
+  {0, "font/otf", ".otf", 0,{0x0}},
+  {0, "font/ttf", ".ttf", 5,{0x0, 0x01, 0x00, 0x00, 0x00}},
+  // inode-directory
+};
+
+int ctx_path_is_dir (const char *path)
+{
+  struct stat stat_buf;
+  if (!path || path[0]==0) return 0;
+  lstat (path, &stat_buf);
+  return S_ISDIR (stat_buf.st_mode);
+}
+
+static int ctx_path_is_exec (const char *path)
+{
+  struct stat stat_buf;
+  if (!path || path[0]==0) return 0;
+  lstat (path, &stat_buf);
+  return stat_buf.st_mode & 0x1;
+}
+
+int ctx_media_matched_content = 0;
+const char *ctx_guess_media_type (const char *path, const char *content, int len)
+{
+  const char *extension_match = NULL;
+  ctx_media_matched_content = 0;
+  if (path && strrchr (path, '.'))
+  {
+    char *pathdup = ctx_strdup (strrchr(path, '.'));
+    for (int i = 0; pathdup[i]; i++) pathdup[i]=tolower(pathdup[i]);
+    for (unsigned int i = 0; i < sizeof (ctx_magics)/sizeof(ctx_magics[0]);i++)
+    {
+      if (ctx_magics[i].ext1 && !ctx_strcmp (ctx_magics[i].ext1, pathdup))
+      {
+        extension_match = ctx_magics[i].mime_type;
+      }
+    }
+    ctx_free (pathdup);
+  }
+
+  if (len > 16)
+  {
+    for (unsigned int i = 0; i < sizeof (ctx_magics)/sizeof(ctx_magics[0]);i++)
+    {
+       if (ctx_magics[i].len) // skip extension only matches
+       if (!memcmp (content, ctx_magics[i].magic, ctx_magics[i].len))
+       {
+         ctx_media_matched_content = 1;
+         return ctx_magics[i].mime_type;
+       }
+    }
+  }
+
+  if (extension_match && !ctx_strcmp (extension_match, "application/ctx"))
+  {
+    //if (!ctx_path_is_exec (path))
+    //  extension_match = NULL;
+  }
+
+  if (extension_match) return extension_match;
+
+
+  int non_ascii=0;
+  for (int i = 0; i < len; i++)
+  {
+    int p = content[i];
+    if (p > 127) non_ascii = 1;
+    if (p < ' ' && (p!='\n')) non_ascii = 1;
+    if (p == 0) non_ascii = 1;
+  }
+  if (non_ascii)
+    return "application/octet-stream";
+  return "text/plain";
+}
+
+
+const char *ctx_path_get_media_type (const char *path)
+{
+  char *content = NULL;
+  long length = 0;
+
+  if (strchr(path, ':'))
+  {
+    path = strchr (path, ':') + 1;
+    if (path[0]=='/')path++;
+    if (path[0]=='/')path++;
+  }
+
+#if 0
+  /* XXX : code duplication, factor out in separate fun */
+  if (path && strrchr (path, '.'))
+  {
+    char *pathdup = ctx_strdup (strrchr(path, '.'));
+    for (int i = 0; pathdup[i]; i++) pathdup[i]=tolower(pathdup[i]);
+    for (unsigned int i = 0; i < sizeof (ctx_magics)/sizeof(ctx_magics[0]);i++)
+    {
+      if (ctx_magics[i].ext1 && !ctx_strcmp (ctx_magics[i].ext1, pathdup))
+      {
+        ctx_free (pathdup);
+        return ctx_magics[i].mime_type;
+      }
+    }
+    ctx_free (pathdup);
+  }
+#endif
+  if (ctx_path_is_dir (path))
+    return "inode/directory";
+
+  ctx_get_contents2 (path, (uint8_t**)&content, &length, 128);
+  if (content)
+  {
+  const char *guess = ctx_guess_media_type (path, content, length);
+  ctx_free (content);
+  return guess;
+  }
+  return "application/none";
+}
+
+int ctx_media_type_is_text (const char *media_type)
+{
+  for (unsigned int i = 0; i < sizeof (ctx_magics)/sizeof(ctx_magics[0]);i++)
+    if (media_type == ctx_magics[i].mime_type)
+       return ctx_magics[i].is_text;
+  for (unsigned int i = 0; i < sizeof (ctx_magics)/sizeof(ctx_magics[0]);i++)
+    if (!strcmp (media_type,  ctx_magics[i].mime_type))
+       return ctx_magics[i].is_text;
+  if (!strcmp (media_type, "text/plain"))
+    return 1;
+  return 0;
+}
+
+CtxMediaTypeClass ctx_media_type_class (const char *media_type)
+{
+  CtxMediaTypeClass ret = CTX_MEDIA_TYPE_NONE;
+  if (!media_type) return ret;
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_IMAGE;
+    if (media_type[0]!='i')ret = 0;
+    if (media_type[1]!='m')ret = 0;
+    /*
+    if (media_type[2]!='a')ret = 0;
+    if (media_type[3]!='g')ret = 0;
+    if (media_type[4]!='e')ret = 0;*/
+  }
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_VIDEO;
+    if (media_type[0]!='v')ret = 0;
+    if (media_type[1]!='i')ret = 0;
+    /*
+    if (media_type[2]!='d')ret = 0;
+    if (media_type[3]!='e')ret = 0;
+    if (media_type[4]!='o')ret = 0;*/
+  }
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_AUDIO;
+    if (media_type[0]!='a')ret = 0;
+    if (media_type[1]!='u')ret = 0;
+    /*
+    if (media_type[2]!='d')ret = 0;
+    if (media_type[3]!='i')ret = 0;
+    if (media_type[4]!='o')ret = 0;*/
+  }
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_TEXT;
+    if (media_type[0]!='t')ret = 0;
+    if (media_type[1]!='e')ret = 0;
+    /*
+    if (media_type[2]!='x')ret = 0;
+    if (media_type[3]!='t')ret = 0;*/
+  }
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_APPLICATION;
+    if (media_type[0]!='a')ret = 0;
+    if (media_type[1]!='p')ret = 0;
+    /*
+    if (media_type[2]!='p')ret = 0;
+    if (media_type[3]!='l')ret = 0;*/
+  }
+  if (!ret){
+    ret = CTX_MEDIA_TYPE_INODE;
+    if (media_type[0]!='i')ret = 0;
+    if (media_type[1]!='n')ret = 0;
+    /*
+    if (media_type[2]!='o')ret = 0;
+    if (media_type[3]!='d')ret = 0;
+    if (media_type[4]!='e')ret = 0;*/
+  }
+  return ret;
+}
+
+#endif
+
+
+void
+ctx_current_point (Ctx *ctx, float *x, float *y)
+{
+  float user_x = 0.0f, user_y = 0.0f;
+  if (!ctx)
+    { 
+      if (x) { *x = 0.0f; }
+      if (y) { *y = 0.0f; }
+    }
+#if CTX_RASTERIZER_X
+  if (ctx->backend && ctx->backend->process == ctx_rasterizer_process)
+    {
+      user_x = ((CtxRasterizer *) (ctx->backend) )->x;
+      user_y = ((CtxRasterizer *) (ctx->backend) )->y;
+    }
+  else
+#endif
+    {
+      user_x = ctx->state.x;
+      user_y = ctx->state.y;
+    }
+
+
+  if (x) *x = user_x;
+  if (y) *y = user_y;
+}
+
+
+
+float ctx_x (Ctx *ctx)
+{
+  float x = 0, y = 0;
+  ctx_current_point (ctx, &x, &y);
+  return x;
+}
+
+float ctx_y (Ctx *ctx)
+{
+  float x = 0, y = 0;
+  ctx_current_point (ctx, &x, &y);
+  return y;
+}
+
+CtxBackendType ctx_backend_type (Ctx *ctx)
+{
+  CtxBackend *backend = ctx->backend;
+  if (backend == NULL)
+    return CTX_BACKEND_NONE;
+#if CTX_TERMINAL_EVENTS
+  else if (backend->destroy == (void*) ctx_ctx_destroy) return CTX_BACKEND_CTX;
+#if CTX_HEADLESS
+  else if (backend->destroy == (void*) ctx_headless_destroy) return CTX_BACKEND_HEADLESS;
+#endif
+#endif
+#if CTX_TERMINAL_EVENTS
+  else if (backend->destroy == (void*) ctx_term_destroy) return CTX_BACKEND_TERM;
+#endif
+#if CTX_RASTERIZER
+  else if (backend->process == (void*) ctx_hasher_process) return CTX_BACKEND_HASHER;
+#endif
+#if CTX_RASTERIZER
+  else if (backend->destroy == (void*) ctx_rasterizer_destroy) return CTX_BACKEND_RASTERIZER;
+#endif
+#if CTX_KMS
+  else if (backend->destroy == (void*) ctx_kms_destroy) return CTX_BACKEND_KMS;
+#endif
+#if CTX_FB
+  else if (backend->destroy == (void*) ctx_fb_destroy) return CTX_BACKEND_FB;
+#endif
+#if CTX_SDL
+  else if (backend->destroy == (void*) ctx_sdl_destroy) return CTX_BACKEND_SDL;
+#endif
+#if CTX_CAIRO
+  else if (backend->destroy == (void*) ctx_cairo_destroy) return CTX_BACKEND_CAIRO;
+#endif
+#if CTX_TERMINAL_EVENTS
+  else if (backend->destroy == (void*) ctx_termimg_destroy) return CTX_BACKEND_TERMIMG;
+#endif
+  return CTX_BACKEND_NONE;
+}
+
+
+void ctx_set_fullscreen (Ctx *ctx, int val)
+{
+#if CTX_SDL
+    if (ctx_backend_type (ctx) == CTX_BACKEND_SDL)
+      ctx_sdl_set_fullscreen (ctx, val);
+#endif
+}
+
+int ctx_get_fullscreen (Ctx *ctx)
+{
+#if CTX_SDL
+    if (ctx_backend_type (ctx) == CTX_BACKEND_SDL)
+      return ctx_sdl_get_fullscreen (ctx);
+#endif
+    return 0;
+}
+
+CtxPixelFormatInfo *ctx_pixel_formats =
+#if CTX_COMPOSITE
+ctx_pixel_formats_generic;
+#else
+NULL;
+#endif
+
+CtxPixelFormatInfo *
+ctx_pixel_format_info (CtxPixelFormat format)
+{
+  if (!ctx_pixel_formats)
+  {
+    assert (0);
+    return NULL;
+  }
+  for (unsigned int i = 0; ctx_pixel_formats[i].pixel_format; i++)
+    {
+      if (ctx_pixel_formats[i].pixel_format == format)
+        {
+          return &ctx_pixel_formats[i];
+        }
+    }
+  assert (0);
+  return NULL;
+}
+
+
+#if CTX_RASTERIZER
+
+
+void (*ctx_rasterizer_rasterize_edges) (CtxRasterizer *rasterizer, const int fill_rule
+#if CTX_SHAPE_CACHE
+                ,CtxShapeEntry *shape
+#endif
+                ) =
+      ctx_rasterizer_rasterize_edges_generic;
+
+void (*ctx_composite_setup) (CtxRasterizer *rasterizer) =
+      ctx_composite_setup_generic;
+#if CTX_FAST_FILL_RECT
+void (*ctx_composite_stroke_rect) (CtxRasterizer *rasterizer,
+                           float          x0,
+                           float          y0,
+                           float          x1,
+                           float          y1,
+                           float          line_width) =
+      ctx_composite_stroke_rect_generic;
+
+void (*ctx_composite_fill_rect) (CtxRasterizer *rasterizer,
+                           float        x0,
+                           float        y0,
+                           float        x1,
+                           float        y1,
+                           uint8_t      cov) =
+      ctx_composite_fill_rect_generic;
+#endif
+
+#endif
+
+
+CTX_EXPORT  void
+ctx_logo (Ctx *ctx, float x, float y, float dim)
+{
+     //float width = ctx_width (ctx);
+     //float height = ctx_height (ctx);
+     ctx_save (ctx);
+     ctx_translate (ctx, x, y);//
+                               //width/2, height/2);
+
+     //if (width < height) height = width;
+     
+     ctx_scale (ctx, dim, dim);
+     ctx_translate (ctx, -0.5f, -0.5f);
+     ctx_begin_path (ctx);
+     ctx_rgba(ctx,1,1,1,0.4f);
+     ctx_move_to(ctx,0.43956786f,0.90788066f);
+     ctx_rel_curve_to(ctx,0.0195929f,0.0102943f,0.0716181f,0.0218038f,0.10361884f,-0.0167646f);
+     ctx_line_to (ctx,0.93768705f,0.37887837f);
+     ctx_rel_curve_to (ctx,  0.019925f,-0.0342044f,-0.00963f,-0.0544608f,-0.0308834f,-0.0508084f);
+     ctx_rel_curve_to (ctx,-0.17965502f,0.0285588f,-0.35466092f,-0.055125f,-0.45096394f,-0.21253089f);
+     ctx_rel_curve_to (ctx, -0.0176003f,-0.02988716f, -0.0594422f,-0.01560777f,-0.0594422f,0.0139473f);
+     ctx_rel_curve_to (ctx, 0, 0.0591101f,0.003321f,0.49845135f,0.001991f, 0.70699722f);
+     ctx_rel_curve_to (ctx, 0.00039042f, 0.0283487f,0.0157362f,0.0529866f,0.0408456f,0.070733f);
+     ctx_fill (ctx);
+
+     ctx_move_to (ctx, 0.39772584f,0.91850721f);
+     ctx_rel_line_to (ctx, -0.0664159f, 0);
+     ctx_rel_curve_to (ctx, -0.15408489f,0, -0.27894675f,-0.12486192f, -0.27894675f,-0.2789468f);
+     ctx_rel_curve_to (ctx, 0,-0.15408489f, 0.12486186f,-0.27861466f, 0.27894675f,-0.27894675f);
+     ctx_rel_line_to (ctx, 0.18585599f,0.0000662f);
+     ctx_rel_curve_to (ctx, 0.0111839f,0.00017138f, 0.0158287f,0.001542f, 0.0263337f,0.0134822f);
+     ctx_rel_curve_to (ctx, 0.11733258f,0.14373102f, 0.3018009f,0.36870115f, 0.3942639f,0.49195316f);
+     ctx_rel_curve_to (ctx, 0.0185394f,0.0332794f, -0.0106225f,0.0505515f, -0.0228143f,0.0505207f);
+
+     ctx_linear_gradient (ctx, 0.0525f, 0, 0.9905f, 0);
+     ctx_gradient_add_stop (ctx, 0.0f, 1.0f, 1.0f, 0.66f, 1.0f);
+     ctx_gradient_add_stop (ctx, 0.2f, 1.0f, 0.66f, 0.0f, 1.0f);
+     ctx_gradient_add_stop (ctx, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f);
+     ctx_gradient_add_stop (ctx, 1.0f, 0.4f, 0.0f, 0.53f, 1.0f);
+     ctx_fill (ctx);
+     
+
+
+     ctx_linear_gradient(ctx, 0.697f, 0.17f, 0.4318f, 0.884f);
+     ctx_gradient_add_stop (ctx, 0, 0.26f, 0.26f, 1, 1.0f);
+     ctx_gradient_add_stop (ctx, 0.3f, 0, 1, 1, 0.4f);
+     ctx_gradient_add_stop (ctx, 1.0f, 0, 1, 0.26f,1.0f);
+     
+     ctx_move_to(ctx,0.43956786f,0.90788066f);
+     ctx_rel_curve_to(ctx,0.0195929f,0.0102943f,0.0716181f,0.0218038f,0.10361884f,-0.0167646f);
+     ctx_line_to (ctx,0.93768705f,0.37887837f);
+     ctx_rel_curve_to (ctx,  0.019925f,-0.0342044f,-0.00963f,-0.0544608f,-0.0308834f,-0.0508084f);
+     ctx_rel_curve_to (ctx,-0.17965502f,0.0285588f,-0.35466092f,-0.055125f,-0.45096394f,-0.21253089f);
+     ctx_rel_curve_to (ctx, -0.0176003f,-0.02988716f, -0.0594422f,-0.01560777f,-0.0594422f,0.0139473f);
+     ctx_rel_curve_to (ctx, 0, 0.0591101f,0.003321f,0.49845135f,0.001991f, 0.70699722f);
+     ctx_rel_curve_to (ctx, 0.00039042f, 0.0283487f,0.0157362f,0.0529866f,0.0408456f,0.070733f);
+     ctx_fill (ctx);
+     
+     ctx_restore (ctx);
+}
+
+void
+ctx_CBRLE_decompress (const uint8_t *cbrle, uint8_t *rgba8, int width, int size);
+void
+ctx_CBRLE_decompress (const uint8_t *cbrle, uint8_t *rgba8, int width, int size)
+{
+#if CTX_ENABLE_CBRLE
+  _ctx_CBRLE_decompress (cbrle, rgba8, width, size, 0, width);
+#endif
+}
+
+
+void
+ctx_clip_extents (Ctx *ctx, float *x0, float *y0,
+                           float *x1, float *y1)
+{
+   CtxGState *gstate = &ctx->state.gstate;
+   if(x0)*x0 = gstate->clip_min_x;
+   if(y0)*y0 = gstate->clip_min_y;
+   if(x1)*x1 = gstate->clip_max_x;
+   if(y1)*y1 = gstate->clip_max_y;
+}
+/*
+ * tinf - tiny inflate library (inflate, gzip, zlib)
+ *
+ * Copyright (c) 2003-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+#ifndef TINF_H_INCLUDED
+#define TINF_H_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TINF_VER_MAJOR 1        /**< Major version number */
+#define TINF_VER_MINOR 2        /**< Minor version number */
+#define TINF_VER_PATCH 1        /**< Patch version number */
+#define TINF_VER_STRING "1.2.1" /**< Version number as a string */
+
+#ifndef TINFCC
+#  ifdef __WATCOMC__
+#    define TINFCC __cdecl
+#  else
+#    define TINFCC
+#  endif
+#endif
+
+/**
+ * Status codes returned.
+ *
+ * @see tinf_uncompress, tinf_gzip_uncompress, tinf_zlib_uncompress
+ */
+typedef enum {
+	TINF_OK         = 0,  /**< Success */
+	TINF_DATA_ERROR = -3, /**< Input error */
+	TINF_BUF_ERROR  = -5  /**< Not enough room for output */
+} tinf_error_code;
+
+/**
+ * Initialize global data used by tinf.
+ *
+ * @deprecated No longer required, may be removed in a future version.
+ */
+void TINFCC tinf_init(void);
+
+/**
+ * Decompress `sourceLen` bytes of deflate data from `source` to `dest`.
+ *
+ * The variable `destLen` points to must contain the size of `dest` on entry,
+ * and will be set to the size of the decompressed data on success.
+ *
+ * Reads at most `sourceLen` bytes from `source`.
+ * Writes at most `*destLen` bytes to `dest`.
+ *
+ * @param dest pointer to where to place decompressed data
+ * @param destLen pointer to variable containing size of `dest`
+ * @param source pointer to compressed data
+ * @param sourceLen size of compressed data
+ * @return `TINF_OK` on success, error code on error
+ */
+int TINFCC tinf_uncompress(void *dest, unsigned int *destLen,
+                           const void *source, unsigned int sourceLen);
+
+/**
+ * Decompress `sourceLen` bytes of gzip data from `source` to `dest`.
+ *
+ * The variable `destLen` points to must contain the size of `dest` on entry,
+ * and will be set to the size of the decompressed data on success.
+ *
+ * Reads at most `sourceLen` bytes from `source`.
+ * Writes at most `*destLen` bytes to `dest`.
+ *
+ * @param dest pointer to where to place decompressed data
+ * @param destLen pointer to variable containing size of `dest`
+ * @param source pointer to compressed data
+ * @param sourceLen size of compressed data
+ * @return `TINF_OK` on success, error code on error
+ */
+int TINFCC tinf_gzip_uncompress(void *dest, unsigned int *destLen,
+                                const void *source, unsigned int sourceLen);
+
+/**
+ * Decompress `sourceLen` bytes of zlib data from `source` to `dest`.
+ *
+ * The variable `destLen` points to must contain the size of `dest` on entry,
+ * and will be set to the size of the decompressed data on success.
+ *
+ * Reads at most `sourceLen` bytes from `source`.
+ * Writes at most `*destLen` bytes to `dest`.
+ *
+ * @param dest pointer to where to place decompressed data
+ * @param destLen pointer to variable containing size of `dest`
+ * @param source pointer to compressed data
+ * @param sourceLen size of compressed data
+ * @return `TINF_OK` on success, error code on error
+ */
+int TINFCC tinf_zlib_uncompress(void *dest, unsigned int *destLen,
+                                const void *source, unsigned int sourceLen);
+
+/**
+ * Compute Adler-32 checksum of `length` bytes starting at `data`.
+ *
+ * @param data pointer to data
+ * @param length size of data
+ * @return Adler-32 checksum
+ */
+unsigned int TINFCC tinf_adler32(const void *data, unsigned int length);
+
+/**
+ * Compute CRC32 checksum of `length` bytes starting at `data`.
+ *
+ * @param data pointer to data
+ * @param length size of data
+ * @return CRC32 checksum
+ */
+unsigned int TINFCC tinf_crc32(const void *data, unsigned int length);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* TINF_H_INCLUDED */
+/*
+ * Adler-32 checksum
+ *
+ * Copyright (c) 2003-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+/*
+ * Adler-32 algorithm taken from the zlib source, which is
+ * Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+ */
+
+//#include "tinf.h"
+
+#define A32_BASE 65521
+#define A32_NMAX 5552
+
+unsigned int tinf_adler32(const void *data, unsigned int length)
+{
+	const unsigned char *buf = (const unsigned char *) data;
+
+	unsigned int s1 = 1;
+	unsigned int s2 = 0;
+
+	while (length > 0) {
+		int k = length < A32_NMAX ? length : A32_NMAX;
+		int i;
+
+		for (i = k / 16; i; --i, buf += 16) {
+			s1 += buf[0];
+			s2 += s1;
+			s1 += buf[1];
+			s2 += s1;
+			s1 += buf[2];
+			s2 += s1;
+			s1 += buf[3];
+			s2 += s1;
+			s1 += buf[4];
+			s2 += s1;
+			s1 += buf[5];
+			s2 += s1;
+			s1 += buf[6];
+			s2 += s1;
+			s1 += buf[7];
+			s2 += s1;
+
+			s1 += buf[8];
+			s2 += s1;
+			s1 += buf[9];
+			s2 += s1;
+			s1 += buf[10];
+			s2 += s1;
+			s1 += buf[11];
+			s2 += s1;
+			s1 += buf[12];
+			s2 += s1;
+			s1 += buf[13];
+			s2 += s1;
+			s1 += buf[14];
+			s2 += s1;
+			s1 += buf[15];
+			s2 += s1;
+		}
+
+		for (i = k % 16; i; --i) {
+			s1 += *buf++;
+			s2 += s1;
+		}
+
+		s1 %= A32_BASE;
+		s2 %= A32_BASE;
+
+		length -= k;
+	}
+
+	return (s2 << 16) | s1;
+}
+/*
+ * CRC32 checksum
+ *
+ * Copyright (c) 1998-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+/*
+ * CRC32 algorithm taken from the zlib source, which is
+ * Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+ */
+
+//#include "tinf.h"
+
+static const unsigned int tinf_crc32tab[16] = {
+	0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC, 0x76DC4190,
+	0x6B6B51F4, 0x4DB26158, 0x5005713C, 0xEDB88320, 0xF00F9344,
+	0xD6D6A3E8, 0xCB61B38C, 0x9B64C2B0, 0x86D3D2D4, 0xA00AE278,
+	0xBDBDF21C
+};
+
+unsigned int tinf_crc32(const void *data, unsigned int length)
+{
+	const unsigned char *buf = (const unsigned char *) data;
+	unsigned int crc = 0xFFFFFFFF;
+	unsigned int i;
+
+	if (length == 0) {
+		return 0;
+	}
+
+	for (i = 0; i < length; ++i) {
+		crc ^= buf[i];
+		crc = tinf_crc32tab[crc & 0x0F] ^ (crc >> 4);
+		crc = tinf_crc32tab[crc & 0x0F] ^ (crc >> 4);
+	}
+
+	return crc ^ 0xFFFFFFFF;
+}
+/*
+ * tinflate - tiny inflate
+ *
+ * Copyright (c) 2003-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+//#include "tinf.h"
+
+#include <assert.h>
+#include <limits.h>
+
+#if defined(UINT_MAX) && (UINT_MAX) < 0xFFFFFFFFUL
+#  error "tinf requires unsigned int to be at least 32-bit"
+#endif
+
+/* -- Internal data structures -- */
+
+struct tinf_tree {
+	unsigned short counts[16]; /* Number of codes with a given length */
+	unsigned short symbols[288]; /* Symbols sorted by code */
+	int max_sym;
+};
+
+struct tinf_data {
+	const unsigned char *source;
+	const unsigned char *source_end;
+	unsigned int tag;
+	int bitcount;
+	int overflow;
+
+	unsigned char *dest_start;
+	unsigned char *dest;
+	unsigned char *dest_end;
+
+	struct tinf_tree ltree; /* Literal/length tree */
+	struct tinf_tree dtree; /* Distance tree */
+};
+
+/* -- Utility functions -- */
+
+static inline unsigned int read_le16(const unsigned char *p)
+{
+	return ((unsigned int) p[0])
+	     | ((unsigned int) p[1] << 8);
+}
+
+/* Build fixed Huffman trees */
+static void tinf_build_fixed_trees(struct tinf_tree *lt, struct tinf_tree *dt)
+{
+	int i;
+
+	/* Build fixed literal/length tree */
+	for (i = 0; i < 16; ++i) {
+		lt->counts[i] = 0;
+	}
+
+	lt->counts[7] = 24;
+	lt->counts[8] = 152;
+	lt->counts[9] = 112;
+
+	for (i = 0; i < 24; ++i) {
+		lt->symbols[i] = 256 + i;
+	}
+	for (i = 0; i < 144; ++i) {
+		lt->symbols[24 + i] = i;
+	}
+	for (i = 0; i < 8; ++i) {
+		lt->symbols[24 + 144 + i] = 280 + i;
+	}
+	for (i = 0; i < 112; ++i) {
+		lt->symbols[24 + 144 + 8 + i] = 144 + i;
+	}
+
+	lt->max_sym = 285;
+
+	/* Build fixed distance tree */
+	for (i = 0; i < 16; ++i) {
+		dt->counts[i] = 0;
+	}
+
+	dt->counts[5] = 32;
+
+	for (i = 0; i < 32; ++i) {
+		dt->symbols[i] = i;
+	}
+
+	dt->max_sym = 29;
+}
+
+/* Given an array of code lengths, build a tree */
+static int tinf_build_tree(struct tinf_tree *t, const unsigned char *lengths,
+                           unsigned int num)
+{
+	unsigned short offs[16];
+	unsigned int i, num_codes, available;
+
+	assert(num <= 288);
+
+	for (i = 0; i < 16; ++i) {
+		t->counts[i] = 0;
+	}
+
+	t->max_sym = -1;
+
+	/* Count number of codes for each non-zero length */
+	for (i = 0; i < num; ++i) {
+		assert(lengths[i] <= 15);
+
+		if (lengths[i]) {
+			t->max_sym = i;
+			t->counts[lengths[i]]++;
+		}
+	}
+
+	/* Compute offset table for distribution sort */
+	for (available = 1, num_codes = 0, i = 0; i < 16; ++i) {
+		unsigned int used = t->counts[i];
+
+		/* Check length contains no more codes than available */
+		if (used > available) {
+			return TINF_DATA_ERROR;
+		}
+		available = 2 * (available - used);
+
+		offs[i] = num_codes;
+		num_codes += used;
+	}
+
+	/*
+	 * Check all codes were used, or for the special case of only one
+	 * code that it has length 1
+	 */
+	if ((num_codes > 1 && available > 0)
+	 || (num_codes == 1 && t->counts[1] != 1)) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Fill in symbols sorted by code */
+	for (i = 0; i < num; ++i) {
+		if (lengths[i]) {
+			t->symbols[offs[lengths[i]]++] = i;
+		}
+	}
+
+	/*
+	 * For the special case of only one code (which will be 0) add a
+	 * code 1 which results in a symbol that is too large
+	 */
+	if (num_codes == 1) {
+		t->counts[1] = 2;
+		t->symbols[1] = t->max_sym + 1;
+	}
+
+	return TINF_OK;
+}
+
+/* -- Decode functions -- */
+
+static void tinf_refill(struct tinf_data *d, int num)
+{
+	assert(num >= 0 && num <= 32);
+
+	/* Read bytes until at least num bits available */
+	while (d->bitcount < num) {
+		if (d->source != d->source_end) {
+			d->tag |= (unsigned int) *d->source++ << d->bitcount;
+		}
+		else {
+			d->overflow = 1;
+		}
+		d->bitcount += 8;
+	}
+
+	assert(d->bitcount <= 32);
+}
+
+static unsigned int tinf_getbits_no_refill(struct tinf_data *d, int num)
+{
+	unsigned int bits;
+
+	assert(num >= 0 && num <= d->bitcount);
+
+	/* Get bits from tag */
+	bits = d->tag & ((1UL << num) - 1);
+
+	/* Remove bits from tag */
+	d->tag >>= num;
+	d->bitcount -= num;
+
+	return bits;
+}
+
+/* Get num bits from source stream */
+static unsigned int tinf_getbits(struct tinf_data *d, int num)
+{
+	tinf_refill(d, num);
+	return tinf_getbits_no_refill(d, num);
+}
+
+/* Read a num bit value from stream and add base */
+static unsigned int tinf_getbits_base(struct tinf_data *d, int num, int base)
+{
+	return base + (num ? tinf_getbits(d, num) : 0);
+}
+
+/* Given a data stream and a tree, decode a symbol */
+static int tinf_decode_symbol(struct tinf_data *d, const struct tinf_tree *t)
+{
+	int base = 0, offs = 0;
+	int len;
+
+	/*
+	 * Get more bits while code index is above number of codes
+	 *
+	 * Rather than the actual code, we are computing the position of the
+	 * code in the sorted order of codes, which is the index of the
+	 * corresponding symbol.
+	 *
+	 * Conceptually, for each code length (level in the tree), there are
+	 * counts[len] leaves on the left and internal nodes on the right.
+	 * The index we have decoded so far is base + offs, and if that
+	 * falls within the leaves we are done. Otherwise we adjust the range
+	 * of offs and add one more bit to it.
+	 */
+	for (len = 1; ; ++len) {
+		offs = 2 * offs + tinf_getbits(d, 1);
+
+		assert(len <= 15);
+
+		if (offs < t->counts[len]) {
+			break;
+		}
+
+		base += t->counts[len];
+		offs -= t->counts[len];
+	}
+
+	assert(base + offs >= 0 && base + offs < 288);
+
+	return t->symbols[base + offs];
+}
+
+/* Given a data stream, decode dynamic trees from it */
+static int tinf_decode_trees(struct tinf_data *d, struct tinf_tree *lt,
+                             struct tinf_tree *dt)
+{
+	unsigned char lengths[288 + 32];
+
+	/* Special ordering of code length codes */
+	static const unsigned char clcidx[19] = {
+		16, 17, 18, 0,  8, 7,  9, 6, 10, 5,
+		11,  4, 12, 3, 13, 2, 14, 1, 15
+	};
+
+	unsigned int hlit, hdist, hclen;
+	unsigned int i, num, length;
+	int res;
+
+	/* Get 5 bits HLIT (257-286) */
+	hlit = tinf_getbits_base(d, 5, 257);
+
+	/* Get 5 bits HDIST (1-32) */
+	hdist = tinf_getbits_base(d, 5, 1);
+
+	/* Get 4 bits HCLEN (4-19) */
+	hclen = tinf_getbits_base(d, 4, 4);
+
+	/*
+	 * The RFC limits the range of HLIT to 286, but lists HDIST as range
+	 * 1-32, even though distance codes 30 and 31 have no meaning. While
+	 * we could allow the full range of HLIT and HDIST to make it possible
+	 * to decode the fixed trees with this function, we consider it an
+	 * error here.
+	 *
+	 * See also: https://github.com/madler/zlib/issues/82
+	 */
+	if (hlit > 286 || hdist > 30) {
+		return TINF_DATA_ERROR;
+	}
+
+	for (i = 0; i < 19; ++i) {
+		lengths[i] = 0;
+	}
+
+	/* Read code lengths for code length alphabet */
+	for (i = 0; i < hclen; ++i) {
+		/* Get 3 bits code length (0-7) */
+		unsigned int clen = tinf_getbits(d, 3);
+
+		lengths[clcidx[i]] = clen;
+	}
+
+	/* Build code length tree (in literal/length tree to save space) */
+	res = tinf_build_tree(lt, lengths, 19);
+
+	if (res != TINF_OK) {
+		return res;
+	}
+
+	/* Check code length tree is not empty */
+	if (lt->max_sym == -1) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Decode code lengths for the dynamic trees */
+	for (num = 0; num < hlit + hdist; ) {
+		int sym = tinf_decode_symbol(d, lt);
+
+		if (sym > lt->max_sym) {
+			return TINF_DATA_ERROR;
+		}
+
+		switch (sym) {
+		case 16:
+			/* Copy previous code length 3-6 times (read 2 bits) */
+			if (num == 0) {
+				return TINF_DATA_ERROR;
+			}
+			sym = lengths[num - 1];
+			length = tinf_getbits_base(d, 2, 3);
+			break;
+		case 17:
+			/* Repeat code length 0 for 3-10 times (read 3 bits) */
+			sym = 0;
+			length = tinf_getbits_base(d, 3, 3);
+			break;
+		case 18:
+			/* Repeat code length 0 for 11-138 times (read 7 bits) */
+			sym = 0;
+			length = tinf_getbits_base(d, 7, 11);
+			break;
+		default:
+			/* Values 0-15 represent the actual code lengths */
+			length = 1;
+			break;
+		}
+
+		if (length > hlit + hdist - num) {
+			return TINF_DATA_ERROR;
+		}
+
+		while (length--) {
+			lengths[num++] = sym;
+		}
+	}
+
+	/* Check EOB symbol is present */
+	if (lengths[256] == 0) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Build dynamic trees */
+	res = tinf_build_tree(lt, lengths, hlit);
+
+	if (res != TINF_OK) {
+		return res;
+	}
+
+	res = tinf_build_tree(dt, lengths + hlit, hdist);
+
+	if (res != TINF_OK) {
+		return res;
+	}
+
+	return TINF_OK;
+}
+
+/* -- Block inflate functions -- */
+
+/* Given a stream and two trees, inflate a block of data */
+static int tinf_inflate_block_data(struct tinf_data *d, struct tinf_tree *lt,
+                                   struct tinf_tree *dt)
+{
+	/* Extra bits and base tables for length codes */
+	static const unsigned char length_bits[30] = {
+		0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+		1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
+		4, 4, 4, 4, 5, 5, 5, 5, 0, 127
+	};
+
+	static const unsigned short length_base[30] = {
+		 3,  4,  5,   6,   7,   8,   9,  10,  11,  13,
+		15, 17, 19,  23,  27,  31,  35,  43,  51,  59,
+		67, 83, 99, 115, 131, 163, 195, 227, 258,   0
+	};
+
+	/* Extra bits and base tables for distance codes */
+	static const unsigned char dist_bits[30] = {
+		0, 0,  0,  0,  1,  1,  2,  2,  3,  3,
+		4, 4,  5,  5,  6,  6,  7,  7,  8,  8,
+		9, 9, 10, 10, 11, 11, 12, 12, 13, 13
+	};
+
+	static const unsigned short dist_base[30] = {
+		   1,    2,    3,    4,    5,    7,    9,    13,    17,    25,
+		  33,   49,   65,   97,  129,  193,  257,   385,   513,   769,
+		1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577
+	};
+
+	for (;;) {
+		int sym = tinf_decode_symbol(d, lt);
+
+		/* Check for overflow in bit reader */
+		if (d->overflow) {
+			return TINF_DATA_ERROR;
+		}
+
+		if (sym < 256) {
+			if (d->dest == d->dest_end) {
+				return TINF_BUF_ERROR;
+			}
+			*d->dest++ = sym;
+		}
+		else {
+			int length, dist, offs;
+			int i;
+
+			/* Check for end of block */
+			if (sym == 256) {
+				return TINF_OK;
+			}
+
+			/* Check sym is within range and distance tree is not empty */
+			if (sym > lt->max_sym || sym - 257 > 28 || dt->max_sym == -1) {
+				return TINF_DATA_ERROR;
+			}
+
+			sym -= 257;
+
+			/* Possibly get more bits from length code */
+			length = tinf_getbits_base(d, length_bits[sym],
+			                           length_base[sym]);
+
+			dist = tinf_decode_symbol(d, dt);
+
+			/* Check dist is within range */
+			if (dist > dt->max_sym || dist > 29) {
+				return TINF_DATA_ERROR;
+			}
+
+			/* Possibly get more bits from distance code */
+			offs = tinf_getbits_base(d, dist_bits[dist],
+			                         dist_base[dist]);
+
+			if (offs > d->dest - d->dest_start) {
+				return TINF_DATA_ERROR;
+			}
+
+			if (d->dest_end - d->dest < length) {
+				return TINF_BUF_ERROR;
+			}
+
+			/* Copy match */
+			for (i = 0; i < length; ++i) {
+				d->dest[i] = d->dest[i - offs];
+			}
+
+			d->dest += length;
+		}
+	}
+}
+
+/* Inflate an uncompressed block of data */
+static int tinf_inflate_uncompressed_block(struct tinf_data *d)
+{
+	unsigned int length, invlength;
+
+	if (d->source_end - d->source < 4) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Get length */
+	length = read_le16(d->source);
+
+	/* Get one's complement of length */
+	invlength = read_le16(d->source + 2);
+
+	/* Check length */
+	if (length != (~invlength & 0x0000FFFF)) {
+		return TINF_DATA_ERROR;
+	}
+
+	d->source += 4;
+
+	if (d->source_end - d->source < length) {
+		return TINF_DATA_ERROR;
+	}
+
+	if (d->dest_end - d->dest < length) {
+		return TINF_BUF_ERROR;
+	}
+
+	/* Copy block */
+	while (length--) {
+		*d->dest++ = *d->source++;
+	}
+
+	/* Make sure we start next block on a byte boundary */
+	d->tag = 0;
+	d->bitcount = 0;
+
+	return TINF_OK;
+}
+
+/* Inflate a block of data compressed with fixed Huffman trees */
+static int tinf_inflate_fixed_block(struct tinf_data *d)
+{
+	/* Build fixed Huffman trees */
+	tinf_build_fixed_trees(&d->ltree, &d->dtree);
+
+	/* Decode block using fixed trees */
+	return tinf_inflate_block_data(d, &d->ltree, &d->dtree);
+}
+
+/* Inflate a block of data compressed with dynamic Huffman trees */
+static int tinf_inflate_dynamic_block(struct tinf_data *d)
+{
+	/* Decode trees from stream */
+	int res = tinf_decode_trees(d, &d->ltree, &d->dtree);
+
+	if (res != TINF_OK) {
+		return res;
+	}
+
+	/* Decode block using decoded trees */
+	return tinf_inflate_block_data(d, &d->ltree, &d->dtree);
+}
+
+/* -- Public functions -- */
+
+/* Initialize global (static) data */
+void tinf_init(void)
+{
+	return;
+}
+
+/* Inflate stream from source to dest */
+int tinf_uncompress(void *dest, unsigned int *destLen,
+                    const void *source, unsigned int sourceLen)
+{
+	struct tinf_data d;
+	int bfinal;
+
+	/* Initialise data */
+	d.source = (const unsigned char *) source;
+	d.source_end = d.source + sourceLen;
+	d.tag = 0;
+	d.bitcount = 0;
+	d.overflow = 0;
+
+	d.dest = (unsigned char *) dest;
+	d.dest_start = d.dest;
+	d.dest_end = d.dest + *destLen;
+
+	do {
+		unsigned int btype;
+		int res;
+
+		/* Read final block flag */
+		bfinal = tinf_getbits(&d, 1);
+
+		/* Read block type (2 bits) */
+		btype = tinf_getbits(&d, 2);
+
+		/* Decompress block */
+		switch (btype) {
+		case 0:
+			/* Decompress uncompressed block */
+			res = tinf_inflate_uncompressed_block(&d);
+			break;
+		case 1:
+			/* Decompress block with fixed Huffman trees */
+			res = tinf_inflate_fixed_block(&d);
+			break;
+		case 2:
+			/* Decompress block with dynamic Huffman trees */
+			res = tinf_inflate_dynamic_block(&d);
+			break;
+		default:
+			res = TINF_DATA_ERROR;
+			break;
+		}
+
+		if (res != TINF_OK) {
+			return res;
+		}
+	} while (!bfinal);
+
+	/* Check for overflow in bit reader */
+	if (d.overflow) {
+		return TINF_DATA_ERROR;
+	}
+
+	*destLen = d.dest - d.dest_start;
+
+	return TINF_OK;
+}
+
+/* clang -g -O1 -fsanitize=fuzzer,address -DTINF_FUZZING tinflate.c */
+#if defined(TINF_FUZZING)
+#include <limits.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+unsigned char depacked[64 * 1024];
+
+extern int
+LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
+{
+	if (size > UINT_MAX / 2) { return 0; }
+	unsigned int destLen = sizeof(depacked);
+	tinf_uncompress(depacked, &destLen, data, size);
+	return 0;
+}
+#endif
+/*
+ * tinfgzip - tiny gzip decompressor
+ *
+ * Copyright (c) 2003-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+//#include "tinf.h"
+
+typedef enum {
+	FTEXT    = 1,
+	FHCRC    = 2,
+	FEXTRA   = 4,
+	FNAME    = 8,
+	FCOMMENT = 16
+} tinf_gzip_flag;
+
+#if 0
+static inline unsigned int read_le16(const unsigned char *p)
+{
+	return ((unsigned int) p[0])
+	     | ((unsigned int) p[1] << 8);
+}
+#endif
+
+static inline unsigned int read_le32(const unsigned char *p)
+{
+	return ((unsigned int) p[0])
+	     | ((unsigned int) p[1] << 8)
+	     | ((unsigned int) p[2] << 16)
+	     | ((unsigned int) p[3] << 24);
+}
+
+int tinf_gzip_uncompress(void *dest, unsigned int *destLen,
+                         const void *source, unsigned int sourceLen)
+{
+	const unsigned char *src = (const unsigned char *) source;
+	unsigned char *dst = (unsigned char *) dest;
+	const unsigned char *start;
+	unsigned int dlen, crc32;
+	int res;
+	unsigned char flg;
+
+	/* -- Check header -- */
+
+	/* Check room for at least 10 byte header and 8 byte trailer */
+	if (sourceLen < 18) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Check id bytes */
+	if (src[0] != 0x1F || src[1] != 0x8B) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Check method is deflate */
+	if (src[2] != 8) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Get flag byte */
+	flg = src[3];
+
+	/* Check that reserved bits are zero */
+	if (flg & 0xE0) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* -- Find start of compressed data -- */
+
+	/* Skip base header of 10 bytes */
+	start = src + 10;
+
+	/* Skip extra data if present */
+	if (flg & FEXTRA) {
+		unsigned int xlen = read_le16(start);
+
+		if (xlen > sourceLen - 12) {
+			return TINF_DATA_ERROR;
+		}
+
+		start += xlen + 2;
+	}
+
+	/* Skip file name if present */
+	if (flg & FNAME) {
+		do {
+			if (start - src >= sourceLen) {
+				return TINF_DATA_ERROR;
+			}
+		} while (*start++);
+	}
+
+	/* Skip file comment if present */
+	if (flg & FCOMMENT) {
+		do {
+			if (start - src >= sourceLen) {
+				return TINF_DATA_ERROR;
+			}
+		} while (*start++);
+	}
+
+	/* Check header crc if present */
+	if (flg & FHCRC) {
+		unsigned int hcrc;
+
+		if (start - src > sourceLen - 2) {
+			return TINF_DATA_ERROR;
+		}
+
+		hcrc = read_le16(start);
+
+		if (hcrc != (tinf_crc32(src, start - src) & 0x0000FFFF)) {
+			return TINF_DATA_ERROR;
+		}
+
+		start += 2;
+	}
+
+	/* -- Get decompressed length -- */
+
+	dlen = read_le32(&src[sourceLen - 4]);
+
+	if (dlen > *destLen) {
+		return TINF_BUF_ERROR;
+	}
+
+	/* -- Get CRC32 checksum of original data -- */
+
+	crc32 = read_le32(&src[sourceLen - 8]);
+
+	/* -- Decompress data -- */
+
+	if ((src + sourceLen) - start < 8) {
+		return TINF_DATA_ERROR;
+	}
+
+	res = tinf_uncompress(dst, destLen, start,
+	                      (src + sourceLen) - start - 8);
+
+	if (res != TINF_OK) {
+		return TINF_DATA_ERROR;
+	}
+
+	if (*destLen != dlen) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* -- Check CRC32 checksum -- */
+
+	if (crc32 != tinf_crc32(dst, dlen)) {
+		return TINF_DATA_ERROR;
+	}
+
+	return TINF_OK;
+}
+/*
+ * tinfzlib - tiny zlib decompressor
+ *
+ * Copyright (c) 2003-2019 Joergen Ibsen
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *   1. The origin of this software must not be misrepresented; you must
+ *      not claim that you wrote the original software. If you use this
+ *      software in a product, an acknowledgment in the product
+ *      documentation would be appreciated but is not required.
+ *
+ *   2. Altered source versions must be plainly marked as such, and must
+ *      not be misrepresented as being the original software.
+ *
+ *   3. This notice may not be removed or altered from any source
+ *      distribution.
+ */
+
+//#include "tinf.h"
+
+static unsigned int read_be32(const unsigned char *p)
+{
+	return ((unsigned int) p[0] << 24)
+	     | ((unsigned int) p[1] << 16)
+	     | ((unsigned int) p[2] << 8)
+	     | ((unsigned int) p[3]);
+}
+
+int tinf_zlib_uncompress(void *dest, unsigned int *destLen,
+                         const void *source, unsigned int sourceLen)
+{
+	const unsigned char *src = (const unsigned char *) source;
+	unsigned char *dst = (unsigned char *) dest;
+	unsigned int a32;
+	int res;
+	unsigned char cmf, flg;
+
+	/* -- Check header -- */
+
+	/* Check room for at least 2 byte header and 4 byte trailer */
+	if (sourceLen < 6) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Get header bytes */
+	cmf = src[0];
+	flg = src[1];
+
+	/* Check checksum */
+	if ((256 * cmf + flg) % 31) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Check method is deflate */
+	if ((cmf & 0x0F) != 8) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Check window size is valid */
+	if ((cmf >> 4) > 7) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* Check there is no preset dictionary */
+	if (flg & 0x20) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* -- Get Adler-32 checksum of original data -- */
+
+	a32 = read_be32(&src[sourceLen - 4]);
+
+	/* -- Decompress data -- */
+
+	res = tinf_uncompress(dst, destLen, src + 2, sourceLen - 6);
+
+	if (res != TINF_OK) {
+		return TINF_DATA_ERROR;
+	}
+
+	/* -- Check Adler-32 checksum -- */
+
+	if (a32 != tinf_adler32(dst, *destLen)) {
+		return TINF_DATA_ERROR;
+	}
+
+	return TINF_OK;
+}
+#ifndef MRG_UTF8_H
+#define MRG_UTF8_H
+
+#if !__COSMOPOLITAN__
+#include <string.h>
+#include <stdint.h>
+#endif
+
+static inline int mrg_utf8_len (const unsigned char first_byte)
+{
+  if      ((first_byte & 0x80) == 0)
+    return 1; /* ASCII */
+  else if ((first_byte & 0xE0) == 0xC0)
+    return 2;
+  else if ((first_byte & 0xF0) == 0xE0)
+    return 3;
+  else if ((first_byte & 0xF8) == 0xF0)
+    return 4;
+  return 1;
+}
+
+static inline const char *mrg_utf8_skip (const char *s, int utf8_length)
+{
+   int count;
+   if (!s)
+     return NULL;
+   for (count = 0; *s; s++)
+   {
+     if ((*s & 0xC0) != 0x80)
+       count++;
+     if (count == utf8_length+1)
+       return s;
+   }
+   return s;
+}
+
+int          mrg_unichar_to_utf8       (unsigned int   ch,
+                                        unsigned char *dest);
+unsigned int mrg_utf8_to_unichar       (unsigned char *utf8);
+
+//////////////////////////////////////////////////////////////////////////////////
+
+// Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
+// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
+
+#define UTF8_ACCEPT 0
+#define UTF8_REJECT 1
+
+static const uint8_t utf8d[] = {
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf
+  8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df
+  0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef
+  0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff
+  0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2
+  1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4
+  1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6
+  1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8
+};
+
+static inline uint32_t
+utf8_decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
+  uint32_t type = utf8d[byte];
+
+  *codep = (*state != UTF8_ACCEPT) ?
+    (byte & 0x3fu) | (*codep << 6) :
+    (0xff >> type) & (byte);
+
+  *state = utf8d[256 + *state*16 + type];
+  return *state;
+}
+
+#endif
+#if CTX_CLIENTS
+
+/* mrg - MicroRaptor Gui
+ * Copyright (c) 2014 Øyvind Kolås <pippin@hodefoting.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef VT_LINE_H
+#define VT_LINE_H
+
+#include "ctx.h"
+
+#ifndef CTX_UNLIKELY
+#define CTX_UNLIKELY(x)    __builtin_expect(!!(x), 0)
+#define CTX_LIKELY(x)      __builtin_expect(!!(x), 1)
+#endif
+#ifndef CTX_MAX
+#define CTX_MAX(a,b) (((a)>(b))?(a):(b))
+#endif
+
+typedef struct _VtLine   VtLine;
+
+struct _VtLine
+{
+  CtxString string;
+  /* line extends string, permitting string ops to operate on it  */
+
+  uint64_t *style;
+
+  void     *ctx; // each line can have an attached ctx context;
+  char     *prev;
+  int       style_size;
+  int       prev_length;
+  CtxString *frame;
+
+
+  void     *ctx_copy; // each line can have an attached ctx context;
+  // clearing should be brutal enough to unset the context of the current
+  // at least in alt-screen mode
+  int       double_width;
+  int       double_height_top;
+  int       double_height_bottom;
+  int       contains_proportional;
+  float     xscale;
+  float     yscale;
+  float     y_offset;
+  int       in_scrolling_region;
+  int       wrapped;
+
+  /*  XXX:  needs refactoring to a CtxList of links/images */
+  void     *images[4];
+  int       image_col[4];
+  float     image_X[4]; // 0.0 - 1.0 offset in cell
+  float     image_Y[4];
+  int       image_rows[4];
+  int       image_cols[4];
+  int       image_subx[4];
+  int       image_suby[4];
+  int       image_subw[4];
+  int       image_subh[4];
+};
+
+
+static inline uint64_t vt_line_get_style (VtLine *string, int pos)
+{
+  if (string->string.is_line==0)
+    return 0;
+  if (pos < 0 || pos >= string->style_size)
+    return 0;
+  return string->style[pos];
+}
+
+#if !__COSMOPOLITAN__
+#include <stdlib.h>
+#endif
+
+static inline void vt_line_set_style (VtLine *string, int pos, uint64_t style)
+{
+  if (string->string.is_line==0)
+    return;
+  if (pos < 0 || pos >= 512)
+    return;
+  if (pos >= string->style_size)
+    {
+      int new_size = pos + 16;
+      string->style = ctx_realloc (string->style, string->style_size, new_size * sizeof (uint64_t) );
+      memset (&string->style[string->style_size], 0, (new_size - string->style_size) * sizeof (uint64_t) );
+      string->style_size = new_size;
+    }
+  string->style[pos] = style;
+}
+
+VtLine *vt_line_new_with_size (const char *initial, int initial_size);
+VtLine *vt_line_new (const char *initial);
+
+static inline void        vt_line_free           (VtLine *line, int freealloc)
+{
+  CtxString *string = (CtxString*)line;
+
+#if 1
+  //if (string->is_line)
+  {
+    VtLine *line = (VtLine*)string;
+    if (line->frame)
+      ctx_string_free (line->frame, 1);
+    if (line->style)
+      { ctx_free (line->style); }
+    if (line->ctx)
+      { ctx_destroy (line->ctx); }
+    if (line->ctx_copy)
+      { ctx_destroy (line->ctx_copy); }
+  }
+#endif
+
+  ctx_string_free (string, freealloc);
+}
+static inline const char *vt_line_get            (VtLine *line)
+{
+  CtxString *string = (CtxString*)line;
+  return ctx_string_get (string);
+}
+static inline uint32_t    vt_line_get_unichar    (VtLine *line, int pos)
+{
+  CtxString *string = (CtxString*)line;
+  return ctx_string_get_unichar (string, pos);
+}
+static inline int         vt_line_get_length     (VtLine *line)
+{
+  CtxString *string = (CtxString*)line;
+  return ctx_string_get_length (string);
+}
+static inline int         vt_line_get_utf8length     (VtLine *line)
+{
+  CtxString *string = (CtxString*)line;
+  return ctx_string_get_utf8length (string);
+}
+static inline void        vt_line_set            (VtLine *line, const char *new_string)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_set (string, new_string);
+}
+static inline void        vt_line_clear          (VtLine *line)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_clear (string);
+}
+static inline void        vt_line_append_str     (VtLine *line, const char *str)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_append_str (string, str);
+}
+
+#if 0
+static inline void _ctx_string_append_byte (CtxString *string, char  val)
+{
+  if (CTX_LIKELY((val & 0xC0) != 0x80))
+    { string->utf8_length++; }
+  if (CTX_UNLIKELY(string->length + 2 >= string->allocated_length))
+    {
+      char *old = string->str;
+      string->allocated_length = CTX_MAX (string->allocated_length * 2, string->length + 2);
+      string->str = (char*)ctx_realloc (old, string->allocated_length);
+    }
+  string->str[string->length++] = val;
+  string->str[string->length] = '\0';
+}
+#endif
+
+static inline void        vt_line_append_byte    (VtLine *line, char  val)
+{
+  CtxString *string = (CtxString*)line;
+  _ctx_string_append_byte (string, val);
+}
+static inline void        vt_line_append_string  (VtLine *line, CtxString *string2)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_append_string (string, string2);
+}
+static inline void        vt_line_append_unichar (VtLine *line, unsigned int unichar)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_append_unichar (string, unichar);
+}
+
+
+static inline void vt_line_append_data    (VtLine *line, const char *data, int len)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_append_data (string, data, len);
+}
+static inline void vt_line_append_utf8char (VtLine *line, const char *str)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_append_utf8char (string, str);
+}
+static inline void vt_line_replace_utf8   (VtLine *line, int pos, const char *new_glyph)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_replace_utf8 (string, pos, new_glyph);
+}
+static inline void vt_line_insert_utf8    (VtLine *line, int pos, const char *new_glyph)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_insert_utf8 (string, pos, new_glyph);
+  int len = vt_line_get_length (line);
+  for (int i = pos; i < len; i++)
+    vt_line_set_style (line, i, vt_line_get_style (line, i-1));
+}
+
+static inline void vt_line_insert_unichar (VtLine *line, int pos, uint32_t new_glyph)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_insert_unichar (string, pos, new_glyph);
+  int len = vt_line_get_length (line);
+  for (int i = 1; i < len; i++)
+    vt_line_set_style (line, i, vt_line_get_style (line, i-1));
+}
+static inline void vt_line_replace_unichar (VtLine *line, int pos, uint32_t unichar)
+{
+  CtxString *string = (CtxString*)line;
+  ctx_string_replace_unichar (string, pos, unichar);
+}
+
+static inline void vt_line_remove (VtLine *line, int pos)
+{ 
+  CtxString *string = (CtxString*)line;
+  ctx_string_remove (string, pos);
+
+  for (int i = pos; i < line->style_size-1; i++)
+  {
+    line->style[i] = line->style[i+1];
+  }
+}
+
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#endif
+/* mrg - MicroRaptor Gui
+ * Copyright (c) 2014 Øyvind Kolås <pippin@hodefoting.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE
+#endif
+
+#if !__COSMOPOLITAN__
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#endif
+
+int ctx_unichar_to_utf8 (uint32_t  ch, uint8_t  *dest);
+#define mrg_unichar_to_utf8 ctx_unichar_to_utf8
+void ctx_string_init (CtxString *string, int initial_size);
+
+VtLine *vt_line_new_with_size (const char *initial, int initial_size)
+{
+  VtLine *line = ctx_calloc (sizeof (VtLine), 1);
+  CtxString *string = (CtxString*)line;
+  ctx_string_init (string, initial_size);
+  if (initial)
+    { ctx_string_append_str (string, initial); }
+  line->style = ctx_calloc (sizeof (uint64_t), initial_size);
+  line->style_size = initial_size;
+  string->is_line = 1;
+  return line;
+}
+
+VtLine *vt_line_new (const char *initial)
+{
+  return vt_line_new_with_size (initial, 8);
+}
+
+typedef struct VtPty
+{
+  int        pty; //    0 if thread
+  pid_t      pid; //    0 if thread
+  int        done;
+
+  void      *userdata;
+
+  uint8_t   *shm;
+  int        shm_size;
+} VtPty;
+
+
+
+ssize_t vtpty_read     (void *vtpty, void *buf, size_t count);
+ssize_t vtpty_write    (void *vtpty, const void *buf, size_t count);
+void    vtpty_resize   (void *vtpty, int cols, int rows,
+                        int px_width, int px_height);
+int     vtpty_waitdata (void  *vtpty, int timeout);
+#define MAX_COLS 2048 // used for tabstops
+
+
+typedef struct AudioState
+{
+  int action;
+  int samplerate; // 8000
+  int channels;   // 1
+  int bits;       // 8
+  int type;       // 'u'    u-law  f-loat  s-igned u-nsigned
+  int buffer_size; // desired size of audiofragment in frames
+  // (both for feeding SDL and as desired chunking
+  //  size)
+
+
+  int mic;        // <- should
+  //    request permisson,
+  //    and if gotten, start streaming
+  //    audio packets in the incoming direction
+  //
+  int encoding;   // 'a' ascci85 'b' base64
+  int compression; // '0': none , 'z': zlib   'o': opus(reserved)
+
+  int frames;
+
+  uint8_t *data;
+  int      data_size;
+} AudioState;
+
+typedef struct GfxState
+{
+  int action;
+  int id;
+  int buf_width;
+  int buf_height;
+  int format;
+  int compression;
+  int transmission;
+  int multichunk;
+  int buf_size;
+  int x;
+  int y;
+  int w;
+  int h;
+  int x_cell_offset;
+  int y_cell_offset;
+  int columns;
+  int rows;
+  int z_index;
+  int delete;
+
+  uint8_t *data;
+  int   data_size;
+} GfxState;
+
+struct _VT
+{
+  VtPty      vtpty;
+  int       id;
+  unsigned char buf[BUFSIZ]; // need one per vt
+  int keyrepeat;
+  int       lastx;
+  int       lasty;
+  int        result;
+  //SDL_Rect   dirty;
+  float  dirtpad;
+  float  dirtpad1;
+  float  dirtpad2;
+  float  dirtpad3;
+
+  CtxClient *client;
+
+  ssize_t (*write)   (void *serial_obj, const void *buf, size_t count);
+  ssize_t (*read)    (void *serial_obj, void *buf, size_t count);
+  int     (*waitdata)(void *serial_obj, int timeout);
+  void    (*resize)  (void *serial_obj, int cols, int rows, int px_width, int px_height);
+
+
+  char     *title;
+  void    (*state) (VT *vt, int byte);
+
+  AudioState audio; // < want to move this one level up and share impl
+  GfxState   gfx;
+
+  CtxList   *saved_lines;
+  int       in_alt_screen;
+  int       had_alt_screen;
+  int       saved_line_count;
+  CtxList   *lines;
+  int       line_count;
+  CtxList   *scrollback;
+  int       scrollback_count;
+  int       leds[4];
+  uint64_t  cstyle;
+
+  uint8_t   fg_color[3];
+  uint8_t   bg_color[3];
+
+  int       in_smooth_scroll;
+  int       smooth_scroll;
+  float     scroll_offset;
+  int       debug;
+  int       bell;
+  int       origin;
+  int       at_line_home;
+  int       charset[4];
+  int       saved_charset[4];
+  int       shifted_in;
+  int       reverse_video;
+  int       echo;
+  int       bracket_paste;
+  int       ctx_events;
+  int       font_is_mono;
+  int       palette_no;
+  int       has_blink; // if any of the set characters are blinking
+  // updated on each draw of the screen
+  
+  int can_launch;
+
+  int unit_pixels;
+  int mouse;
+  int mouse_drag;
+  int mouse_all;
+  int mouse_decimal;
+
+
+  uint8_t    utf8_holding[64]; /* only 4 needed for utf8 - but it's purpose
+                                 is also overloaded for ctx journal command
+                                 buffering , and the bigger sizes for the svg-like
+                                 ctx parsing mode */
+  int        utf8_expected_bytes;
+  int        utf8_pos;
+
+
+  int        ref_len;
+  char       reference[16];
+  int        in_prev_match;
+  CtxParser *ctxp;
+  // text related data
+  float      letter_spacing;
+
+  float      word_spacing;
+  float      font_stretch;  // horizontal expansion
+  float      font_size_adjust;
+  // font-variant
+  // font-weight
+  // text-decoration
+
+  int        encoding;  // 0 = utf8 1=pc vga 2=ascii
+
+  int        local_editing; /* terminal operates without pty  */
+
+  int        insert_mode;
+  int        autowrap;
+  int        justify;
+  float      cursor_x;
+  int        cursor_y;
+  int        cols;
+  int        rows;
+  VtLine    *current_line;
+
+
+  int        cr_on_lf;
+  int        cursor_visible;
+  int        saved_x;
+  int        saved_y;
+  uint32_t   saved_style;
+  int        saved_origin;
+  int        cursor_key_application;
+  int        margin_top;
+  int        margin_bottom;
+  int        margin_left;
+  int        margin_right;
+
+  int        left_right_margin_mode;
+
+  int        scrollback_limit;
+  float      scroll;
+  int        scroll_on_input;
+  int        scroll_on_output;
+
+  char       *argument_buf;
+  int        argument_buf_len;
+  int        argument_buf_cap;
+  uint8_t    tabs[MAX_COLS];
+  int        inert;
+
+  int        width;
+  int        height;
+
+  int        cw; // cell width
+  int        ch; // cell height
+  float      font_to_cell_scale;
+  float      font_size; // when set with set_font_size, cw and ch are recomputed
+  float      line_spacing; // using line_spacing
+  float      scale_x;
+  float      scale_y;
+
+  int        ctx_pos;  // 1 is graphics above text, 0 or -1 is below text
+  Ctx       *root_ctx; /* only used for knowledge of top-level dimensions */
+
+  int        blink_state;
+
+  FILE      *log;
+
+  int cursor_down;
+
+  int select_begin_col;
+  int select_begin_row;
+  int select_start_col;
+  int select_start_row;
+  int select_end_col;
+  int select_end_row;
+  int select_begin_x;
+  int select_begin_y;
+  int select_active;
+
+  int popped;
+
+
+  /* used to make runs of background on one line be drawn
+   * as a single filled rectangle
+   */
+  int   bg_active;
+  float bg_x0;
+  float bg_y0;
+  float bg_width;
+  float bg_height;
+  uint8_t bg_rgba[4];
+};
+
+
+// add vt_new_cb - suitable for hooking up to generic stdout/stdin callbacks
+VT *vt_new (const char *command, int width, int height, float font_size, float line_spacing, int id, int can_launch);
+VT *vt_new_argv (char **argv, int width, int height, float font_size, float line_spacing, int id, int can_launch);
+VT *vt_new_thread (void (*start_routine)(void *userdata), void *userdata,
+                   int width, int height, float font_size, float line_spacing, int id, int can_launch);
+
+
+void vt_open_log (VT *vt, const char *path);
+
+int         ctx_vt_had_alt_screen (VT *vt);
+void        vt_set_px_size        (VT *vt, int width, int height);
+void        vt_set_term_size      (VT *vt, int cols, int rows);
+
+int         vt_cw                 (VT *vt);
+int         vt_ch                 (VT *vt);
+void        vt_set_font_size      (VT *vt, float font_size);
+float       vt_get_font_size      (VT *vt);
+void        vt_set_line_spacing   (VT *vt, float line_spacing);
+
+const char *ctx_find_shell_command (void);
+
+int         vt_keyrepeat          (VT *vt);
+
+int         vt_get_result         (VT *vt);
+int         vt_is_done            (VT *vt);
+int         vt_poll               (VT *vt, int timeout);
+long        vt_rev                (VT *vt);
+void        vt_destroy            (VT *vt);
+int         vt_has_blink (VT *vt);
+
+/* this is how mrg/mmm based key-events are fed into the vt engine
+ */
+void        vt_feed_keystring     (VT *vt, CtxEvent *event, const char *str);
+
+void        vt_paste              (VT *vt, const char *str);
+
+/* not needed when passing a commandline for command to
+ * run, but could be used for injecting commands, or
+ * output from stored shell commands/sessions to display
+ */
+//void        vt_feed_byte          (VT *vt, int byte);
+
+//)#define DEFAULT_SCROLLBACK   (1<<16)
+#define DEFAULT_SCROLLBACK   (1<<13)
+#define DEFAULT_ROWS         24
+#define DEFAULT_COLS         80
+
+int         vt_get_line_count       (VT *vt);
+
+pid_t       vt_get_pid              (VT *vt);
+
+const char *vt_get_line             (VT *vt, int no);
+
+void        vt_set_scrollback_lines (VT *vt, int scrollback_lines);
+int         vt_get_scrollback_lines (VT *vt);
+
+void        vt_set_scroll           (VT *vt, int scroll);
+int         vt_get_scroll           (VT *vt);
+
+int         vt_get_cols             (VT *vt);
+int         vt_get_rows             (VT *vt);
+
+char       *vt_get_selection        (VT *vt);
+int         vt_get_cursor_x         (VT *vt);
+int         vt_get_cursor_y         (VT *vt);
+
+void        vt_draw                 (VT *vt, Ctx *ctx, double x, double y);
+#if 0
+void        vt_register_events      (VT *vt, Ctx *ctx, double x0, double y0);
+#endif
+
+void        vt_rev_inc              (VT *vt);
+
+int         vt_mic (VT *vt);
+void        vt_set_ctx (VT *vt, Ctx *ctx);  /* XXX: rename, this sets the parent/global ctx  */
+
+
+int         vt_get_local (VT *vt);           // this is a hack for the settings tab
+void        vt_set_local (VT *vt, int local);
+
+
+typedef enum VtMouseEvent
+{
+  VT_MOUSE_MOTION = 0,
+  VT_MOUSE_PRESS,
+  VT_MOUSE_DRAG,
+  VT_MOUSE_RELEASE,
+} VtMouseEvent;
+
+void vt_mouse (VT *vt, CtxEvent *event, VtMouseEvent type, int button, int x, int y, int px_x, int px_y);
+
+static ssize_t vt_write (VT *vt, const void *buf, size_t count)
+{
+  if (!vt->write) { return 0; }
+  return vt->write (&vt->vtpty, buf, count);
+}
+static ssize_t vt_read (VT *vt, void *buf, size_t count)
+{
+  if (!vt->read) { return 0; }
+  return vt->read (&vt->vtpty, buf, count);
+}
+static int vt_waitdata (VT *vt, int timeout)
+{
+  if (!vt->waitdata) { return 0; }
+  return vt->waitdata (&vt->vtpty, timeout);
+}
+static void vt_resize (VT *vt, int cols, int rows, int px_width, int px_height)
+{
+  if (vt && vt->resize)
+    { vt->resize (&vt->vtpty, cols, rows, px_width, px_height); }
+}
+
+/* atty - audio interface and driver for terminals
+ * Copyright (C) 2020 Øyvind Kolås <pippin@gimp.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>. 
+ */
+
+
+#ifndef EMSCRIPTEN
+#undef uncompress
+#include <zlib.h>
+#endif
+
+#if CTX_SDL
+#include <SDL.h>
+
+static int ydec (const void *srcp, void *dstp, int count)
+{
+  const char *src = srcp;
+  char *dst = dstp;
+  int out_len = 0;
+  for (int i = 0; i < count; i ++)
+  {
+    int o = src[i];
+    switch (o)
+    {
+      case '=':
+              i++;
+              o = src[i];
+              o = (o-42-64) % 256;
+              break;
+      case '\n':
+      case '\033':
+      case '\r':
+      case '\0':
+              break;
+      default:
+              o = (o-42) % 256;
+              break;
+    }
+    dst[out_len++] = o;
+  }
+  dst[out_len]=0;
+  return out_len;
+}
+
+#if CTX_SDL
+static SDL_AudioDeviceID speaker_device = 0;
+#endif
+
+//#define AUDIO_CHUNK_SIZE 512
+
+// our pcm queue is currently always 16 bit
+// signed stereo
+
+static int16_t pcm_queue[1<<18];
+static int     pcm_write_pos = 0;
+static int     pcm_read_pos  = 0;
+
+void terminal_queue_pcm (int16_t sample_left, int16_t sample_right)
+{
+  if (pcm_write_pos >= (1<<18)-1)
+  {
+    /*  TODO  :  fix cyclic buffer */
+    pcm_write_pos = 0;
+    pcm_read_pos  = 0;
+  }
+  pcm_queue[pcm_write_pos++]=sample_left;
+  pcm_queue[pcm_write_pos++]=sample_right;
+}
+
+float click_volume = 0.05;
+
+void vt_feed_audio (VT *vt, void *samples, int bytes);
+int mic_device = 0;   // when non 0 we have an active mic device
+
+
+/*  https://jonathanhays.me/2018/11/14/mu-law-and-a-law-compression-tutorial/
+ */
+
+#if 0
+static char MuLawCompressTable[256] =
+{
+   0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
+   4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+   5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+   5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
+};
+
+unsigned char LinearToMuLawSample(int16_t sample)
+{
+  const int cBias = 0x84;
+  const int cClip = 32635;
+  int sign = (sample >> 8) & 0x80;
+
+  if (sign)
+    sample = (int16_t)-sample;
+
+  if (sample > cClip)
+    sample = cClip;
+
+  sample = (int16_t)(sample + cBias);
+
+  int exponent = (int)MuLawCompressTable[(sample>>7) & 0xFF];
+  int mantissa = (sample >> (exponent+3)) & 0x0F;
+
+  int compressedByte = ~ (sign | (exponent << 4) | mantissa);
+
+  return (unsigned char)compressedByte;
+}
+#endif
+
+void vt_feed_audio (VT *vt, void *samples, int bytes)
+{
+  char buf[256];
+  AudioState *audio = &vt->audio;
+  uint8_t *data = samples;
+  int frames = bytes / (audio->bits/8) / audio->channels;
+
+  if (audio->compression == 'z')
+  {
+    unsigned long len = bytes * 1.2;//compressBound(bytes);
+    data = ctx_malloc (len);
+    int z_result = compress (data, &len, samples, len);
+    if (z_result != Z_OK)
+    {
+      char buf[256]= "\033_Ao=z;zlib error2\033\\";
+      vt_write (vt, buf, strlen(buf));
+      data = samples;
+    }
+    else
+    {
+      bytes = len;
+    }
+  }
+
+  char *encoded = ctx_malloc (bytes * 2);
+  encoded[0]=0;
+  if (audio->encoding == 'a')
+  {
+    ctx_a85enc (data, encoded, bytes);
+  }
+  else /* if (audio->encoding == 'b')  */
+  {
+    ctx_bin2base64 (data, bytes, encoded);
+  }
+
+  sprintf (buf, "\033[_Af=%i;", frames);
+  vt_write (vt, buf, strlen (buf));
+  vt_write (vt, encoded, strlen(encoded));
+  ctx_free (encoded);
+
+  if (data != samples)
+    ctx_free (data);
+
+  //vt_write (vt, samples, bytes);
+  buf[0]='\033';
+  buf[1]='\\';
+  buf[2]=0;
+  vt_write (vt, buf, 2);
+}
+
+#define MIC_BUF_LEN 40960
+
+uint8_t mic_buf[MIC_BUF_LEN];
+int     mic_buf_pos = 0;
+
+static void mic_callback(void*     userdata,
+                         uint8_t * stream,
+                         int       len)
+{
+  AudioState *audio = userdata;
+  int16_t *sstream = (void*)stream;
+  int frames;
+  int channels = audio->channels;
+
+  frames = len / 2;
+
+  if (audio->bits == 8)
+  {
+    if (audio->type == 'u')
+    {
+      for (int i = 0; i < frames; i++)
+      {
+        for (int c = 0; c < channels; c++)
+        {
+          mic_buf[mic_buf_pos++] = LinearToMuLawSample (sstream[i]);
+          if (mic_buf_pos >= MIC_BUF_LEN - 4)
+            mic_buf_pos = 0;
+        }
+      }
+    }
+    else
+    {
+      for (int i = 0; i < frames; i++)
+      {
+        for (int c = 0; c <  audio->channels; c++)
+        {
+          mic_buf[mic_buf_pos++] = (sstream[i]) / 256;
+          if (mic_buf_pos >= MIC_BUF_LEN - 4)
+            mic_buf_pos = 0;
+        }
+      }
+    }
+  }
+  else
+  {
+    for (int i = 0; i < frames; i++)
+    {
+      for (int c = 0; c < audio->channels; c++)
+      {
+        *((int16_t*)(&mic_buf[mic_buf_pos])) = (sstream[i]);
+        mic_buf_pos+=2;
+        if (mic_buf_pos >= MIC_BUF_LEN - 4)
+          mic_buf_pos = 0;
+      }
+    }
+  }
+}
+
+static long int ticks (void)
+{
+  struct timeval tp;
+  gettimeofday(&tp, NULL);
+  return tp.tv_sec * 1000 + tp.tv_usec / 1000;
+}
+
+static long int silence_start = 0;
+
+static void sdl_audio_init ()
+{
+  static int done = 0;
+  if (!done)
+  {
+#if CTX_SDL
+  if (SDL_Init(SDL_INIT_AUDIO) < 0)
+  {
+    fprintf (stderr, "sdl audio init fail\n");
+  }
+#endif
+  done = 1;
+  }
+}
+
+void vt_audio_task (VT *vt, int click)
+{
+  if (!vt) return;
+  AudioState *audio = &vt->audio;
+#if CTX_SDL
+
+  if (audio->mic)
+  {
+    if (mic_device == 0)
+    {
+      SDL_AudioSpec spec_want, spec_got;
+      sdl_audio_init ();
+
+      spec_want.freq     = audio->samplerate;
+      spec_want.channels = 1;
+      spec_want.format   = AUDIO_S16;
+      spec_want.samples  = audio->buffer_size;
+      spec_want.callback = mic_callback;
+      spec_want.userdata = audio;
+      mic_device = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(0, SDL_TRUE), 1, &spec_want, &spec_got, 0);
+
+      SDL_PauseAudioDevice(mic_device, 0);
+    }
+
+    if (mic_buf_pos)
+    {
+      SDL_LockAudioDevice (mic_device);
+      vt_feed_audio (vt, mic_buf, mic_buf_pos);
+      mic_buf_pos = 0;
+      SDL_UnlockAudioDevice (mic_device);
+    }
+  }
+  else
+  {
+    if (mic_device)
+    {
+      SDL_PauseAudioDevice(mic_device, 1);
+      SDL_CloseAudioDevice(mic_device);
+      mic_device = 0;
+    }
+  }
+
+  int free_frames = audio->buffer_size - SDL_GetQueuedAudioSize(speaker_device);
+  int queued = (pcm_write_pos - pcm_read_pos)/2; // 2 for stereo
+  //if (free_frames > 6) free_frames -= 4;
+  int frames = queued;
+
+  if (frames > free_frames) frames = free_frames;
+  if (frames > 0)
+  {
+    if (speaker_device == 0)
+    {
+      SDL_AudioSpec spec_want, spec_got;
+      sdl_audio_init ();
+
+       spec_want.freq = audio->samplerate;
+       if (audio->bits == 8 && audio->type == 'u')
+       {
+         spec_want.format = AUDIO_S16;
+         spec_want.channels = 2;
+       }
+       else if (audio->bits == 8 && audio->type == 's')
+       {
+         spec_want.format = AUDIO_S8;
+         spec_want.channels = audio->channels;
+       }
+       else if (audio->bits == 16 && audio->type == 's')
+       {
+         spec_want.format = AUDIO_S16;
+         spec_want.channels = audio->channels;
+       }
+       else
+       {
+         spec_want.format = AUDIO_S16; // XXX  : error
+         spec_want.channels = audio->channels;
+       }
+
+       /* In SDL we always set 16bit stereo, but with the
+        * requested sample rate.
+        */
+      spec_want.format = AUDIO_S16;
+      spec_want.channels = 2;
+
+      spec_want.samples = audio->buffer_size;
+      spec_want.callback = NULL;
+
+      speaker_device = SDL_OpenAudioDevice (NULL, 0, &spec_want, &spec_got, 0);
+      if (!speaker_device){
+        fprintf (stderr, "sdl openaudiodevice fail\n");
+      }
+      SDL_PauseAudioDevice (speaker_device, 0);
+    }
+
+#if 0
+    {
+       int i;
+       unsigned char *b = (void*)(&pcm_queue[pcm_read_pos]);
+       for (i = 0; i < frames * 4; i++)
+       {
+         if ((b[i] > ' ') && (b[i] <= '~'))
+           fprintf (stderr, "[%c]", b[i]);
+         else
+           fprintf (stderr, "[%i]", b[i]);
+       }
+    }
+#endif
+    SDL_QueueAudio (speaker_device, (void*)&pcm_queue[pcm_read_pos], frames * 4);
+    pcm_read_pos += frames*2;
+    silence_start = ticks();
+  }
+  else
+  {
+    if (speaker_device &&  (ticks() - silence_start >  2000))
+    {
+      SDL_PauseAudioDevice(speaker_device, 1);
+      SDL_CloseAudioDevice(speaker_device);
+      speaker_device = 0;
+    }
+  }
+#endif
+}
+
+void terminal_queue_pcm (int16_t sample_left, int16_t sample_right);
+
+static unsigned char vt_bell_audio[] = {
+#if 1
+  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
+  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
+  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
+  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+  0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
+  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+#else
+  0x7e, 0xfe, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0x7d, 0x7e, 0x7e, 0x7e, 0xff,
+  0xff, 0xfe, 0xfe, 0x7e, 0xff, 0xfe, 0xfd, 0xfd, 0xfe, 0xfe, 0xfd, 0xfd,
+  0xfe, 0xfe, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7d, 0x7d,
+  0xfe, 0x7e, 0x7e, 0x7e, 0x7e, 0xfd, 0xfd, 0x7e, 0x7e, 0xfd, 0xfe, 0xfe,
+  0xfe, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0xfe, 0xfe, 0xff, 0xfe,
+  0xfe, 0xfe, 0x7d, 0x7c, 0xfb, 0xfa, 0xfc, 0xfd, 0xfc, 0x76, 0x75, 0xfa,
+  0xfb, 0x7b, 0xfc, 0xef, 0xf6, 0x77, 0x6d, 0x7b, 0xf8, 0x78, 0x78, 0xfa,
+  0xf7, 0xfd, 0xfd, 0xfc, 0xfc, 0xfa, 0xf5, 0xf7, 0x7d, 0x7b, 0x78, 0x77,
+  0x7c, 0x6f, 0x7b, 0xf5, 0xfb, 0x7b, 0x7c, 0x78, 0x76, 0xea, 0xf2, 0x6d,
+  0xfd, 0xed, 0x7a, 0x6d, 0x6e, 0x71, 0xfe, 0x76, 0x6d, 0xfb, 0xef, 0x7e,
+  0xfa, 0xef, 0xec, 0xed, 0xf8, 0xf0, 0xea, 0xf9, 0x70, 0x7c, 0x7c, 0x6b,
+  0x6d, 0x75, 0xfb, 0xf1, 0xf9, 0xfe, 0xec, 0xea, 0x7c, 0x75, 0xff, 0xfb,
+  0x7d, 0x77, 0x7a, 0x71, 0x6e, 0x6c, 0x6e, 0x7b, 0x7e, 0x7a, 0x7c, 0xf4,
+  0xf9, 0x7b, 0x7b, 0xfa, 0xfe, 0x73, 0x79, 0xfe, 0x7b, 0x76, 0xfe, 0xf3,
+  0xf9, 0x76, 0x77, 0x7e, 0x7e, 0x7d, 0x7c, 0xf9, 0xee, 0xf2, 0x7d, 0xf8,
+  0xec, 0xee, 0xf7, 0xfa, 0xf7, 0xf6, 0xfd, 0x77, 0x75, 0x7b, 0xfa, 0xfe,
+  0x78, 0x79, 0x7c, 0x76, 0x7e, 0xf7, 0xfb, 0xf5, 0xf6, 0x75, 0x6f, 0x74,
+  0x6e, 0x6e, 0x6d, 0x6c, 0x7a, 0xf9, 0x75, 0x77, 0xf4, 0xf0, 0xf0, 0xf1,
+  0xef, 0xf3, 0xf6, 0xfd, 0xfc, 0xfb, 0xfd, 0xfc, 0xf6, 0xf8, 0xfb, 0xf9,
+  0xfa, 0xfd, 0xfb, 0xfc, 0x7a, 0x7c, 0x77, 0x75, 0x78, 0x7a, 0x7a, 0x78,
+  0x7a, 0xfa, 0xf9, 0x7c, 0xff, 0xfb, 0x7d, 0x77, 0x73, 0x6c, 0x6e, 0x7b,
+  0xfc, 0xfe, 0x7e, 0xfb, 0xf1, 0xeb, 0xee, 0xf6, 0xf6, 0xef, 0xf7, 0x7c,
+  0x76, 0x76, 0x7b, 0x7a, 0x7b, 0x73, 0x73, 0x7c, 0x79, 0x70, 0x79, 0xfb,
+  0xfd, 0xf8, 0xf9, 0xfc, 0xfc, 0xf8, 0xfb, 0xff, 0xfc, 0xf9, 0x75, 0x6f,
+  0x74, 0xfe, 0xff, 0xfd, 0x7d, 0xf5, 0xef, 0xee, 0xf8, 0xfd, 0xfd, 0xf3,
+  0xfa, 0xfe, 0xfe, 0x7c, 0x77, 0x7a, 0xfb, 0x79, 0x7e, 0x7b, 0xfd, 0x6d,
+  0xfc, 0x7a, 0xf0, 0x74, 0xee, 0x79, 0xea, 0x79, 0xf9, 0x6d, 0xf7, 0x71,
+  0x79, 0x76, 0x7c, 0x77, 0x6f, 0xf3, 0x6c, 0xe8, 0x67, 0xe3, 0x5e, 0xdc,
+  0x58, 0xd8, 0x4e, 0xce, 0x46, 0xc5, 0x40, 0x67, 0xba, 0x49, 0xac, 0x26,
+  0xba, 0x3e, 0xc5, 0xc8, 0x2b, 0xa8, 0x32, 0xbd, 0xe4, 0x3e, 0xb7, 0x3b,
+  0xb7, 0x3a, 0x33, 0xab, 0x3f, 0xc8, 0x46, 0x5f, 0xb7, 0x69, 0xd4, 0x3d,
+  0xc0, 0x4c, 0xf2, 0xdb, 0x3b, 0xdd, 0x69, 0xc5, 0x5f, 0xd8, 0xd8, 0xda,
+  0xc6, 0x39, 0xba, 0x3f, 0x35, 0xb3, 0x3e, 0xbb, 0x4a, 0x4a, 0xe7, 0x60,
+  0xae, 0x2c, 0xcb, 0x53, 0x45, 0xaf, 0x2a, 0xae, 0x3e, 0x4a, 0xae, 0x2a,
+  0xad, 0x38, 0xcc, 0xbb, 0x36, 0xae, 0x2c, 0xc6, 0xce, 0x38, 0xb1, 0x2f,
+  0xb9, 0x54, 0x7c, 0xb3, 0x28, 0xae, 0x3d, 0xcf, 0xbb, 0x2e, 0xb4, 0x41,
+  0xc6, 0x78, 0x39, 0xbc, 0x41, 0xc8, 0x59, 0x5b, 0xc7, 0x43, 0xbc, 0x45,
+  0xf3, 0xdc, 0x69, 0xd6, 0x48, 0xc9, 0x4e, 0xd9, 0x59, 0x61, 0xde, 0x4b,
+  0xc9, 0x44, 0xc8, 0xf5, 0x43, 0xc5, 0x37, 0xba, 0x65, 0x4d, 0xc8, 0x31,
+  0xaf, 0x47, 0xdb, 0xd6, 0x36, 0xad, 0x37, 0xbb, 0x61, 0x3a, 0xae, 0x2d,
+  0xb4, 0x47, 0x49, 0xb2, 0x30, 0xac, 0x3a, 0xcd, 0xbc, 0x2e, 0xaf, 0x32,
+  0xbd, 0xd7, 0x34, 0xaf, 0x32, 0xbb, 0x55, 0x4a, 0xb4, 0x30, 0xbb, 0x40,
+  0xeb, 0xbf, 0x39, 0xba, 0x3a, 0xd6, 0xd3, 0x48, 0xc0, 0x3b, 0xce, 0x5e,
+  0xe7, 0xd3, 0x46, 0xcb, 0x4c, 0xce, 0x74, 0x7e, 0x7e, 0x55, 0xcf, 0x44,
+  0xc4, 0x5b, 0x7c, 0xd3, 0x3f, 0xbc, 0x44, 0xcb, 0xfa, 0x46, 0xb9, 0x37,
+  0xb8, 0x51, 0x54, 0xbe, 0x33, 0xb1, 0x3d, 0xce, 0xc4, 0x34, 0xaf, 0x2f,
+  0xbd, 0xf8, 0x37, 0xb0, 0x2d, 0xb1, 0x4c, 0x4a, 0xb3, 0x2c, 0xb0, 0x3c,
+  0xe4, 0xbf, 0x2f, 0xaf, 0x35, 0xc0, 0xdb, 0x39, 0xb3, 0x31, 0xbb, 0x5d,
+  0x4c, 0xb8, 0x37, 0xb9, 0x48, 0xe8, 0xc7, 0x3d, 0xba, 0x43, 0xce, 0xdd,
+  0x52, 0xc6, 0x46, 0xce, 0x55, 0xdf, 0xe8, 0x52, 0xd5, 0x48, 0xca, 0x4d,
+  0xef, 0x68, 0x4c, 0xc7, 0x42, 0xc2, 0x49, 0x78, 0xce, 0x3e, 0xb9, 0x3c,
+  0xc8, 0xef, 0x43, 0xb7, 0x35, 0xb8, 0x4a, 0x53, 0xb8, 0x32, 0xaf, 0x3b,
+  0xde, 0xc1, 0x34, 0xaf, 0x32, 0xc3, 0xde, 0x3b, 0xaf, 0x2e, 0xb6, 0x4e,
+  0x48, 0xb4, 0x2e, 0xb2, 0x3d, 0xf0, 0xbf, 0x33, 0xb2, 0x37, 0xc8, 0xd9,
+  0x3d, 0xb5, 0x36, 0xbc, 0x56, 0x4f, 0xbc, 0x39, 0xbc, 0x47, 0xf6, 0xcf,
+  0x44, 0xbf, 0x46, 0xce, 0x68, 0x5b, 0xd0, 0x4a, 0xcc, 0x4d, 0xd3, 0x60,
+  0x6a, 0xcf, 0x49, 0xc8, 0x45, 0xd0, 0x7b, 0x58, 0xc3, 0x3c, 0xbf, 0x48,
+  0xe2, 0xc9, 0x3b, 0xb7, 0x39, 0xc5, 0xdb, 0x40, 0xb6, 0x31, 0xb9, 0x50,
+  0x50, 0xb9, 0x2f, 0xb3, 0x3b, 0xdc, 0xbf, 0x33, 0xaf, 0x32, 0xc1, 0xd6,
+  0x3b, 0xb0, 0x2f, 0xb8, 0x54, 0x4a, 0xb6, 0x30, 0xb4, 0x3f, 0xfd, 0xc0,
+  0x36, 0xb5, 0x39, 0xcc, 0xd9, 0x41, 0xb9, 0x39, 0xc2, 0x59, 0x57, 0xc1,
+  0x3e, 0xc2, 0x49, 0xe2, 0xd7, 0x4c, 0xcb, 0x47, 0xcf, 0x5b, 0xec, 0xe0,
+  0x53, 0xcb, 0x4b, 0xca, 0x55, 0xf6, 0xdb, 0x48, 0xc0, 0x43, 0xc9, 0x5f,
+  0x54, 0xc0, 0x3c, 0xbb, 0x43, 0xe8, 0xc8, 0x39, 0xb5, 0x39, 0xc6, 0xde,
+  0x3d, 0xb4, 0x32, 0xba, 0x4f, 0x4c, 0xb9, 0x30, 0xb2, 0x3c, 0xec, 0xc1,
+  0x33, 0xaf, 0x35, 0xc4, 0xd7, 0x3a, 0xb2, 0x31, 0xba, 0x56, 0x48, 0xb9,
+  0x33, 0xb7, 0x44, 0x7e, 0xc3, 0x39, 0xb7, 0x3d, 0xcd, 0xe3, 0x42, 0xbd,
+  0x3d, 0xc2, 0x58, 0x5d, 0xcb, 0x43, 0xc4, 0x4c, 0xd8, 0xf8, 0x58, 0xcd,
+  0x4c, 0xcb, 0x4e, 0xda, 0x71, 0x5c, 0xcc, 0x46, 0xc4, 0x49, 0xdc, 0xdc,
+  0x46, 0xbe, 0x3d, 0xc4, 0x59, 0x53, 0xbe, 0x38, 0xb8, 0x41, 0xe1, 0xc5,
+  0x39, 0xb3, 0x38, 0xc4, 0xde, 0x3d, 0xb2, 0x32, 0xb9, 0x4e, 0x4b, 0xb7,
+  0x30, 0xb3, 0x3d, 0xf2, 0xbf, 0x33, 0xb1, 0x36, 0xc9, 0xd9, 0x3a, 0xb4,
+  0x33, 0xbc, 0x58, 0x49, 0xba, 0x36, 0xb9, 0x46, 0x7e, 0xc8, 0x3c, 0xba,
+  0x3f, 0xcd, 0xe8, 0x4b, 0xc1, 0x41, 0xc7, 0x57, 0xfe, 0xd3, 0x4e, 0xc9,
+  0x4d, 0xd0, 0x5e, 0x7c, 0xda, 0x4e, 0xca, 0x47, 0xcd, 0x5b, 0x68, 0xcc,
+  0x40, 0xbf, 0x42, 0xd2, 0xe4, 0x42, 0xbd, 0x3a, 0xbf, 0x56, 0x50, 0xbd,
+  0x36, 0xb6, 0x40, 0xe2, 0xc5, 0x36, 0xb2, 0x37, 0xc5, 0xde, 0x3c, 0xb3,
+  0x32, 0xba, 0x52, 0x4a, 0xb7, 0x31, 0xb4, 0x3f, 0xef, 0xbf, 0x34, 0xb2,
+  0x39, 0xc8, 0xd3, 0x3c, 0xb6, 0x37, 0xbe, 0x5c, 0x4c, 0xbd, 0x39, 0xbc,
+  0x49, 0xf2, 0xcc, 0x3f, 0xbf, 0x44, 0xcf, 0xfd, 0x51, 0xca, 0x48, 0xcb,
+  0x54, 0xe4, 0xeb, 0x57, 0xcf, 0x4d, 0xcc, 0x4f, 0xe0, 0xee, 0x51, 0xc7,
+  0x44, 0xc6, 0x4f, 0x78, 0xcc, 0x3f, 0xbd, 0x3e, 0xce, 0xe5, 0x42, 0xba,
+  0x38, 0xbe, 0x50, 0x4f, 0xbb, 0x35, 0xb6, 0x3e, 0xe8, 0xc2, 0x36, 0xb2,
+  0x37, 0xc6, 0xda, 0x3c, 0xb3, 0x32, 0xba, 0x55, 0x4a, 0xb7, 0x33, 0xb5,
+  0x41, 0x7e, 0xbf, 0x37, 0xb4, 0x3b, 0xcd, 0xd8, 0x3e, 0xb8, 0x39, 0xc2,
+  0x5b, 0x4f, 0xc0, 0x3c, 0xbf, 0x4a, 0xee, 0xd1, 0x47, 0xc5, 0x47, 0xd0,
+  0x68, 0x63, 0xd0, 0x4d, 0xcd, 0x4e, 0xd6, 0x67, 0x68, 0xd6, 0x4b, 0xc9,
+  0x4a, 0xd1, 0x6e, 0x52, 0xc5, 0x3f, 0xc0, 0x4b, 0xfd, 0xcb, 0x3d, 0xba,
+  0x3d, 0xcc, 0xe2, 0x41, 0xb8, 0x37, 0xbc, 0x53, 0x4e, 0xba, 0x34, 0xb6,
+  0x3f, 0xee, 0xc1, 0x36, 0xb2, 0x38, 0xc8, 0xd6, 0x3c, 0xb3, 0x34, 0xbc,
+  0x58, 0x49, 0xb9, 0x34, 0xb7, 0x44, 0x73, 0xc3, 0x38, 0xb7, 0x3d, 0xce,
+  0xd9, 0x40, 0xbc, 0x3c, 0xc5, 0x5e, 0x55, 0xc6, 0x40, 0xc3, 0x4d, 0xe5,
+  0xde, 0x4d, 0xca, 0x4b, 0xce, 0x5c, 0xfa, 0xe1, 0x54, 0xcd, 0x4d, 0xcd,
+  0x56, 0xf3, 0xd9, 0x4a, 0xc4, 0x44, 0xcb, 0x67, 0x53, 0xc3, 0x3d, 0xbe,
+  0x48, 0xf0, 0xca, 0x3c, 0xb8, 0x3b, 0xca, 0xdf, 0x3f, 0xb7, 0x36, 0xbc,
+  0x54, 0x4c, 0xb9, 0x34, 0xb6, 0x40, 0xf7, 0xc1, 0x36, 0xb3, 0x39, 0xca,
+  0xd6, 0x3c, 0xb4, 0x35, 0xbe, 0x5b, 0x49, 0xba, 0x36, 0xba, 0x47, 0x6f,
+  0xc5, 0x3b, 0xba, 0x3f, 0xd2, 0xdd, 0x46, 0xbe, 0x3f, 0xc9, 0x5c, 0x5d,
+  0xcc, 0x47, 0xc8, 0x4e, 0xdd, 0xf5, 0x5a, 0xd1, 0x4e, 0xcf, 0x52, 0xde,
+  0x7d, 0x5c, 0xcf, 0x49, 0xc9, 0x4d, 0xdd, 0xde, 0x49, 0xc1, 0x3f, 0xc6,
+  0x5d, 0x53, 0xc0, 0x3b, 0xbc, 0x46, 0xeb, 0xc8, 0x3b, 0xb7, 0x3b, 0xc8,
+  0xde, 0x3e, 0xb6, 0x35, 0xbb, 0x57, 0x4c, 0xb9, 0x34, 0xb6, 0x42, 0xff,
+  0xc1, 0x36, 0xb4, 0x3a, 0xcc, 0xd7, 0x3d, 0xb7, 0x37, 0xbf, 0x5e, 0x4a,
+  0xbc, 0x38, 0xbc, 0x4a, 0x6e, 0xc9, 0x3e, 0xbe, 0x43, 0xd5, 0xe2, 0x4b,
+  0xc5, 0x45, 0xcb, 0x5e, 0x6e, 0xd6, 0x4e, 0xcd, 0x51, 0xd7, 0x65, 0x74,
+  0xdc, 0x54, 0xcd, 0x4d, 0xd1, 0x5e, 0x6b, 0xcf, 0x46, 0xc4, 0x47, 0xd7,
+  0xe3, 0x48, 0xbe, 0x3d, 0xc3, 0x58, 0x54, 0xbe, 0x39, 0xba, 0x43, 0xee,
+  0xc7, 0x3a, 0xb6, 0x3a, 0xc9, 0xdc, 0x3e, 0xb5, 0x35, 0xbd, 0x57, 0x4b,
+  0xb9, 0x34, 0xb7, 0x43, 0x6f, 0xc1, 0x38, 0xb6, 0x3c, 0xcf, 0xd3, 0x3e,
+  0xb8, 0x3a, 0xc3, 0x64, 0x4c, 0xbe, 0x3c, 0xbf, 0x4d, 0x72, 0xcc, 0x42,
+  0xc1, 0x48, 0xd9, 0xed, 0x51, 0xcc, 0x4b, 0xcf, 0x5a, 0xef, 0xe8, 0x59,
+  0xd3, 0x50, 0xd1, 0x58, 0xe1, 0xec, 0x56, 0xcc, 0x49, 0xca, 0x55, 0x7c,
+  0xcf, 0x44, 0xbf, 0x43, 0xcf, 0xe5, 0x47, 0xbc, 0x3b, 0xbf, 0x56, 0x52,
+  0xbe, 0x38, 0xb9, 0x42, 0xee, 0xc6, 0x39, 0xb6, 0x3a, 0xca, 0xdc, 0x3d,
+  0xb6, 0x36, 0xbd, 0x59, 0x4a, 0xba, 0x35, 0xb9, 0x45, 0x6b, 0xc2, 0x39,
+  0xb8, 0x3d, 0xd2, 0xd5, 0x3f, 0xbb, 0x3c, 0xc6, 0x69, 0x4f, 0xc1, 0x3f,
+  0xc3, 0x50, 0x7d, 0xd0, 0x49, 0xc8, 0x4c, 0xd8, 0x7d, 0x5d, 0xd4, 0x4f,
+  0xd2, 0x57, 0xde, 0x6e, 0x69, 0xda, 0x50, 0xcd, 0x4e, 0xd6, 0x71, 0x59,
+  0xca, 0x44, 0xc5, 0x4d, 0xf3, 0xce, 0x41, 0xbd, 0x3f, 0xcd, 0xe5, 0x45,
+  0xbb, 0x3a, 0xbf, 0x55, 0x51, 0xbd, 0x37, 0xb9, 0x43, 0xf1, 0xc5, 0x39,
+  0xb6, 0x3b, 0xcc, 0xd9, 0x3d, 0xb7, 0x37, 0xbf, 0x5d, 0x49, 0xbb, 0x37,
+  0xba, 0x48, 0x69, 0xc4, 0x3b, 0xba, 0x40, 0xd5, 0xd7, 0x42, 0xbd, 0x3f,
+  0xc9, 0x69, 0x52, 0xc7, 0x44, 0xc7, 0x52, 0xfa, 0xda, 0x4f, 0xcd, 0x4f,
+  0xd8, 0x66, 0x72, 0xdf, 0x59, 0xd4, 0x52, 0xd6, 0x5d, 0xef, 0xde, 0x4f,
+  0xca, 0x49, 0xce, 0x64, 0x5a, 0xc8, 0x40, 0xc1, 0x4a, 0xec, 0xcd, 0x3f,
+  0xbc, 0x3e, 0xcc, 0xe5, 0x43, 0xba, 0x39, 0xbe, 0x55, 0x4f, 0xbc, 0x37,
+  0xb9, 0x43, 0xf8, 0xc4, 0x39, 0xb6, 0x3b, 0xcd, 0xd7, 0x3e, 0xb7, 0x38,
+  0xc0, 0x60, 0x4b, 0xbc, 0x39, 0xbc, 0x4b, 0x6b, 0xc6, 0x3d, 0xbd, 0x43,
+  0xd9, 0xda, 0x47, 0xc1, 0x42, 0xcd, 0x66, 0x5a, 0xcd, 0x48, 0xcc, 0x54,
+  0xe9, 0xe9, 0x59, 0xd5, 0x54, 0xd5, 0x5c, 0xe4, 0xfb, 0x61, 0xd4, 0x4f,
+  0xcd, 0x51, 0xdf, 0xe3, 0x4e, 0xc5, 0x45, 0xca, 0x5e, 0x5b, 0xc6, 0x3e,
+  0xbf, 0x48, 0xea, 0xcc, 0x3e, 0xbb, 0x3d, 0xcb, 0xe4, 0x42, 0xba, 0x38,
+  0xbe, 0x56, 0x4e, 0xbc, 0x37, 0xb9, 0x44, 0x7b, 0xc4, 0x39, 0xb7, 0x3c,
+  0xcf, 0xd7, 0x3e, 0xb9, 0x3a, 0xc2, 0x62, 0x4c, 0xbd, 0x3b, 0xbe, 0x4d,
+  0x6b, 0xc9, 0x3f, 0xbf, 0x46, 0xd9, 0xde, 0x4b, 0xc5, 0x47, 0xce, 0x63,
+  0x65, 0xd3, 0x4e, 0xcf, 0x55, 0xdf, 0x74, 0x67, 0xdc, 0x55, 0xd3, 0x54,
+  0xda, 0x68, 0x67, 0xd5, 0x4c, 0xca, 0x4d, 0xdc, 0xe7, 0x4d, 0xc4, 0x42,
+  0xc8, 0x5b, 0x59, 0xc4, 0x3d, 0xbe, 0x47, 0xec, 0xcc, 0x3d, 0xba, 0x3d,
+  0xcc, 0xe1, 0x42, 0xba, 0x39, 0xbf, 0x5a, 0x4f, 0xbc, 0x38, 0xba, 0x46,
+  0x7d, 0xc5, 0x3b, 0xb9, 0x3e, 0xd0, 0xd8, 0x40, 0xbb, 0x3c, 0xc5, 0x63,
+  0x4d, 0xc0, 0x3d, 0xc1, 0x4e, 0x6e, 0xcd, 0x44, 0xc4, 0x49, 0xdb, 0xec,
+  0x50, 0xcc, 0x4a, 0xd1, 0x5c, 0x7b, 0xde, 0x56, 0xd2, 0x54, 0xd8, 0x62,
+  0xf2, 0xe2, 0x58, 0xcf, 0x4e, 0xd0, 0x5d, 0x72, 0xd3, 0x4a, 0xc5, 0x49,
+  0xd6, 0xe8, 0x4b, 0xc0, 0x3f, 0xc5, 0x5b, 0x58, 0xc2, 0x3c, 0xbd, 0x47,
+  0xee, 0xca, 0x3d, 0xba, 0x3d, 0xcd, 0xdf, 0x41, 0xba, 0x3a, 0xc0, 0x5b,
+  0x4d, 0xbd, 0x39, 0xbc, 0x48, 0x73, 0xc6, 0x3c, 0xbb, 0x3f, 0xd4, 0xd9,
+  0x43, 0xbd, 0x3e, 0xc8, 0x67, 0x50, 0xc4, 0x40, 0xc4, 0x51, 0x7b, 0xd1,
+  0x4a, 0xc8, 0x4d, 0xd9, 0xf6, 0x5c, 0xd0, 0x51, 0xd2, 0x5c, 0xe8, 0xf2,
+  0x62, 0xd8, 0x55, 0xd4, 0x56, 0xe1, 0x7c, 0x59, 0xcf, 0x49, 0xcc, 0x53,
+  0x7a, 0xd4, 0x46, 0xc4, 0x45, 0xd5, 0xef, 0x49, 0xc0, 0x3d, 0xc5, 0x57,
+  0x55, 0xc2, 0x3b, 0xbd, 0x47, 0xed, 0xc9, 0x3d, 0xb9, 0x3e, 0xcc, 0xdb,
+  0x43, 0xb9, 0x3b, 0xc0, 0x61, 0x4f, 0xbd, 0x3b, 0xbc, 0x4b, 0x75, 0xc6,
+  0x3d, 0xbc, 0x43, 0xd7, 0xd9, 0x45, 0xbf, 0x40, 0xcc, 0x68, 0x54, 0xc9,
+  0x44, 0xca, 0x53, 0x7d, 0xda, 0x4d, 0xce, 0x4f, 0xdb, 0x6d, 0x68, 0xdd,
+  0x55, 0xd6, 0x56, 0xdc, 0x67, 0x71, 0xde, 0x53, 0xce, 0x4f, 0xd6, 0x6e,
+  0x5c, 0xcc, 0x47, 0xc7, 0x4f, 0xef, 0xd0, 0x45, 0xbf, 0x44, 0xcf, 0xe6,
+  0x48, 0xbe, 0x3d, 0xc3, 0x5a, 0x54, 0xc0, 0x3b, 0xbc, 0x47, 0xfa, 0xc9,
+  0x3c, 0xba, 0x3e, 0xd0, 0xdc, 0x41, 0xbb, 0x3b, 0xc4, 0x5f, 0x4d, 0xbf,
+  0x3c, 0xbf, 0x4c, 0x6d, 0xc9, 0x3f, 0xbe, 0x46, 0xda, 0xdc, 0x49, 0xc3,
+  0x45, 0xce, 0x6b, 0x5b, 0xcd, 0x4a, 0xcd, 0x57, 0xee, 0xe4, 0x58, 0xd4,
+  0x54, 0xd9, 0x60, 0xf1, 0xed, 0x5f, 0xd7, 0x53, 0xd3, 0x5a, 0xeb, 0xe1,
+  0x52, 0xca, 0x4b, 0xce, 0x68, 0x5c, 0xc9, 0x44, 0xc4, 0x4e, 0xec, 0xce,
+  0x43, 0xbe, 0x42, 0xcf, 0xe4, 0x47, 0xbd, 0x3c, 0xc3, 0x5b, 0x50, 0xbf,
+  0x3b, 0xbd, 0x48, 0x73, 0xc8, 0x3c, 0xbb, 0x3f, 0xd4, 0xda, 0x41, 0xbc,
+  0x3d, 0xc7, 0x67, 0x4d, 0xc0, 0x3d, 0xc2, 0x4f, 0x68, 0xcb, 0x42, 0xc2,
+  0x4a, 0xdd, 0xdd, 0x4d, 0xc7, 0x4a, 0xd1, 0x6d, 0x65, 0xd3, 0x52, 0xd1,
+  0x5b, 0xe3, 0xf8, 0x68, 0xdd, 0x5a, 0xd8, 0x59, 0xde, 0x6d, 0x68, 0xd9,
+  0x4e, 0xce, 0x4f, 0xe1, 0xeb, 0x4e, 0xc9, 0x45, 0xcd, 0x5d, 0x58, 0xc9,
+  0x3f, 0xc2, 0x4b, 0xf6, 0xce, 0x3f, 0xbd, 0x40, 0xcf, 0xe0, 0x45, 0xbc,
+  0x3d, 0xc3, 0x5e, 0x51, 0xbf, 0x3c, 0xbd, 0x4b, 0x7b, 0xc7, 0x3e, 0xbb,
+  0x42, 0xd4, 0xd6, 0x45, 0xbd, 0x3f, 0xc9, 0x6f, 0x50, 0xc3, 0x40, 0xc5,
+  0x53, 0x6c, 0xce, 0x46, 0xc7, 0x4c, 0xe0, 0xeb, 0x51, 0xce, 0x4d, 0xd7,
+  0x5f, 0x6c, 0xe3, 0x57, 0xd9, 0x57, 0xde, 0x64, 0xfd, 0xe9, 0x5b, 0xd5,
+  0x52, 0xd5, 0x61, 0x78, 0xd6, 0x4d, 0xc9, 0x4e, 0xd8, 0xe5, 0x4e, 0xc4,
+  0x44, 0xc9, 0x5f, 0x5a, 0xc6, 0x3f, 0xc0, 0x4b, 0xf5, 0xcd, 0x3f, 0xbd,
+  0x40, 0xd2, 0xdf, 0x43, 0xbd, 0x3c, 0xc6, 0x5e, 0x4e, 0xbf, 0x3b, 0xbf,
+  0x4c, 0x6b, 0xc9, 0x3e, 0xbd, 0x44, 0xda, 0xd8, 0x45, 0xbf, 0x42, 0xcc,
+  0x75, 0x52, 0xc6, 0x45, 0xc8, 0x58, 0x76, 0xd2, 0x4c, 0xca, 0x51, 0xdd,
+  0xed, 0x5d, 0xd3, 0x55, 0xd7, 0x61, 0xec, 0xef, 0x65, 0xdc, 0x58, 0xd7,
+  0x5a, 0xe4, 0xfd, 0x5c, 0xd2, 0x4c, 0xcf, 0x57, 0x77, 0xd8, 0x49, 0xc7,
+  0x48, 0xd8, 0xeb, 0x4b, 0xc3, 0x40, 0xc8, 0x5d, 0x57, 0xc4, 0x3e, 0xbf,
+  0x4b, 0xf8, 0xca, 0x3f, 0xbc, 0x42, 0xd1, 0xd9, 0x45, 0xbc, 0x3e, 0xc6,
+  0x6a, 0x4f, 0xbf, 0x3d, 0xc0, 0x4f, 0x67, 0xc9, 0x3f, 0xbf, 0x47, 0xdf,
+  0xdb, 0x47, 0xc4, 0x44, 0xd1, 0x6c, 0x53, 0xcc, 0x48, 0xce, 0x58, 0x74,
+  0xdc, 0x50, 0xd1, 0x54, 0xdf, 0x74, 0x6a, 0xde, 0x5b, 0xd9, 0x5d, 0xdd,
+  0x6e, 0xfc, 0xdd, 0x5a, 0xcf, 0x54, 0xd6, 0x7b, 0x60, 0xcd, 0x4b, 0xc9,
+  0x55, 0xf2, 0xd2, 0x48, 0xc3, 0x47, 0xd5, 0xe6, 0x4a, 0xc1, 0x3f, 0xc8,
+  0x5d, 0x52, 0xc4, 0x3d, 0xc0, 0x4b, 0x71, 0xcb, 0x3e, 0xbd, 0x41, 0xd7,
+  0xdc, 0x43, 0xbe, 0x3e, 0xc9, 0x6a, 0x4e, 0xc1, 0x3e, 0xc3, 0x52, 0x6a,
+  0xca, 0x43, 0xc1, 0x4b, 0xdd, 0xda, 0x4c, 0xc6, 0x4a, 0xd1, 0x77, 0x5d,
+  0xce, 0x4e, 0xcf, 0x5c, 0xf3, 0xe5, 0x5a, 0xd8, 0x58, 0xdd, 0x62, 0xfb,
+  0xf4, 0x5e, 0xdc, 0x54, 0xd9, 0x5a, 0xf6, 0xea, 0x52, 0xce, 0x4c, 0xd4,
+  0x67, 0x5c, 0xcc, 0x46, 0xc8, 0x50, 0xf8, 0xd0, 0x45, 0xc0, 0x46, 0xd3,
+  0xe1, 0x49, 0xbf, 0x3f, 0xc6, 0x63, 0x54, 0xc1, 0x3e, 0xbf, 0x4d, 0x76,
+  0xc9, 0x3f, 0xbd, 0x44, 0xd8, 0xda, 0x44, 0xbe, 0x3f, 0xcb, 0x6b, 0x4e,
+  0xc4, 0x3f, 0xc7, 0x53, 0x66, 0xcd, 0x45, 0xc6, 0x4d, 0xe3, 0xdf, 0x4e,
+  0xcb, 0x4d, 0xd5, 0x6f, 0x65, 0xd6, 0x55, 0xd4, 0x5e, 0xe5, 0xf1, 0x6b,
+  0xdc, 0x5d, 0xd8, 0x5e, 0xdf, 0x79, 0x6d, 0xd9, 0x53, 0xcf, 0x56, 0xe3,
+  0xe8, 0x52, 0xcb, 0x49, 0xcf, 0x61, 0x5a, 0xcb, 0x43, 0xc6, 0x4d, 0x7c,
+  0xd1, 0x42, 0xc0, 0x43, 0xd6, 0xe3, 0x47, 0xbf, 0x3e, 0xc8, 0x63, 0x51,
+  0xc1, 0x3e, 0xc0, 0x4e, 0x6f, 0xc9, 0x3f, 0xbe, 0x47, 0xd9, 0xd7, 0x47,
+  0xbf, 0x43, 0xcc, 0x79, 0x51, 0xc6, 0x44, 0xc9, 0x58, 0x6a, 0xd0, 0x49,
+  0xca, 0x4f, 0xe6, 0xea, 0x54, 0xd1, 0x50, 0xdb, 0x65, 0x6e, 0xe4, 0x5a,
+  0xdc, 0x5a, 0xe1, 0x67, 0xfe, 0xea, 0x5d, 0xd7, 0x55, 0xd8, 0x63, 0x74,
+  0xd8, 0x4f, 0xcb, 0x4f, 0xdc, 0xe5, 0x50, 0xc7, 0x47, 0xcc, 0x65, 0x5b,
+  0xc8, 0x43, 0xc4, 0x4e, 0xfa, 0xcd, 0x42, 0xbf, 0x44, 0xd6, 0xdf, 0x46,
+  0xbf, 0x3f, 0xc9, 0x64, 0x4f, 0xc3, 0x3e, 0xc3, 0x4f, 0x68, 0xcb, 0x40,
+  0xc0, 0x48, 0xde, 0xd9, 0x48, 0xc2, 0x45, 0xcf, 0x7b, 0x55, 0xc9, 0x48,
+  0xcb, 0x5c, 0x75, 0xd3, 0x4f, 0xcd, 0x56, 0xe0, 0xed, 0x5e, 0xd7, 0x58,
+  0xdb, 0x63, 0xef, 0xf5, 0x65, 0xdf, 0x5a, 0xdb, 0x5b, 0xea, 0x7d, 0x5d,
+  0xd6, 0x4e, 0xd3, 0x59, 0x73, 0xd9, 0x4b, 0xca, 0x4b, 0xdc, 0xeb, 0x4d,
+  0xc6, 0x44, 0xcb, 0x61, 0x59, 0xc7, 0x41, 0xc2, 0x4e, 0xfb, 0xcc, 0x42,
+  0xbe, 0x46, 0xd5, 0xdb, 0x47, 0xbe, 0x40, 0xc9, 0x6e, 0x50, 0xc2, 0x3f,
+  0xc4, 0x52, 0x69, 0xcb, 0x42, 0xc3, 0x4a, 0xe2, 0xdc, 0x49, 0xc6, 0x48,
+  0xd4, 0x71, 0x56, 0xcd, 0x4a, 0xcf, 0x5b, 0x73, 0xdd, 0x53, 0xd3, 0x57,
+  0xe2, 0x78, 0x6a, 0xdf, 0x5d, 0xdb, 0x5e, 0xe1, 0x6f, 0x7a, 0xe0, 0x5b,
+  0xd4, 0x57, 0xdb, 0x79, 0x5f, 0xd0, 0x4d, 0xcd, 0x58, 0xfd, 0xd6, 0x4a,
+  0xc7, 0x4a, 0xd9, 0xe8, 0x4c, 0xc5, 0x42, 0xcb, 0x5f, 0x55, 0xc7, 0x3f,
+  0xc4, 0x4e, 0x71, 0xcd, 0x41, 0xbf, 0x46, 0xd9, 0xdb, 0x47, 0xbf, 0x41,
+  0xcb, 0x70, 0x51, 0xc4, 0x42, 0xc5, 0x57, 0x6b, 0xcc, 0x46, 0xc4, 0x4d,
+  0xe0, 0xdb, 0x4d, 0xc8, 0x4c, 0xd5, 0x78, 0x5d, 0xd1, 0x4f, 0xd3, 0x5d,
+  0xfb, 0xe6, 0x5a, 0xda, 0x59, 0xe1, 0x67, 0x7c, 0xf1, 0x5f, 0xde, 0x58,
+  0xdc, 0x5e, 0xf9, 0xe8, 0x56, 0xd1, 0x4f, 0xd7, 0x6d, 0x5e, 0xce, 0x4a,
+  0xcb, 0x55, 0xf7, 0xd3, 0x49, 0xc4, 0x4a, 0xd7, 0xe3, 0x4c, 0xc2, 0x43,
+  0xca, 0x66, 0x56, 0xc5, 0x40, 0xc3, 0x4f, 0x74, 0xcc, 0x42, 0xc0, 0x47,
+  0xdb, 0xdc, 0x47, 0xc1, 0x42, 0xce, 0x6e, 0x50, 0xc7, 0x43, 0xc9, 0x57,
+  0x67, 0xcf, 0x48, 0xc9, 0x4e, 0xe6, 0xe0, 0x50, 0xcd, 0x4e, 0xd8, 0x6f,
+  0x65, 0xd7, 0x55, 0xd7, 0x5f, 0xeb, 0xf3, 0x68, 0xde, 0x5e, 0xdc, 0x60,
+  0xe5, 0x7b, 0x6b, 0xdc, 0x56, 0xd4, 0x59, 0xe8, 0xe8, 0x55, 0xcd, 0x4c,
+  0xd3, 0x68, 0x5c, 0xcd, 0x47, 0xc9, 0x52, 0xfe, 0xd2, 0x47, 0xc4, 0x48,
+  0xd8, 0xe2, 0x4a, 0xc2, 0x42, 0xcb, 0x68, 0x54, 0xc5, 0x40, 0xc4, 0x51,
+  0x6e, 0xcc, 0x42, 0xc1, 0x49, 0xdd, 0xda, 0x49, 0xc3, 0x46, 0xcf, 0x7a,
+  0x53, 0xc8, 0x46, 0xcb, 0x5b, 0x6a, 0xd2, 0x4b, 0xcc, 0x52, 0xe7, 0xe7,
+  0x56, 0xd2, 0x53, 0xdc, 0x6a, 0x6d, 0xe2, 0x5b, 0xdc, 0x5e, 0xe5, 0x6d,
+  0x7a, 0xea, 0x5f, 0xda, 0x59, 0xdc, 0x68, 0x70, 0xdb, 0x52, 0xcf, 0x53,
+  0xe0, 0xe9, 0x53, 0xcb, 0x4a, 0xcf, 0x66, 0x5c, 0xcb, 0x46, 0xc7, 0x51,
+  0xfb, 0xcf, 0x46, 0xc2, 0x48, 0xd8, 0xdf, 0x4a, 0xc2, 0x42, 0xcb, 0x69,
+  0x53, 0xc5, 0x41, 0xc5, 0x53, 0x6b, 0xcc, 0x44, 0xc3, 0x4a, 0xe0, 0xdb,
+  0x4a, 0xc5, 0x48, 0xd2, 0x78, 0x55, 0xcb, 0x49, 0xce, 0x5c, 0x6e, 0xd7,
+  0x4f, 0xcf, 0x56, 0xe6, 0xef, 0x5d, 0xd8, 0x59, 0xdc, 0x67, 0xf6, 0xee,
+  0x65, 0xdf, 0x5d, 0xdd, 0x61, 0xec, 0xf4, 0x5f, 0xd8, 0x54, 0xd6, 0x5f,
+  0x78, 0xda, 0x4f, 0xcc, 0x4f, 0xde, 0xea, 0x50, 0xc9, 0x48, 0xce, 0x64,
+  0x5a, 0xca, 0x45, 0xc7, 0x50, 0x7b, 0xcf, 0x45, 0xc3, 0x48, 0xda, 0xde,
+  0x4a, 0xc2, 0x43, 0xcc, 0x6d, 0x53, 0xc6, 0x43, 0xc7, 0x56, 0x6a, 0xcd,
+  0x46, 0xc5, 0x4d, 0xe2, 0xdc, 0x4c, 0xc8, 0x4b, 0xd5, 0x7a, 0x59, 0xce,
+  0x4d, 0xd0, 0x5e, 0x76, 0xdc, 0x55, 0xd4, 0x5a, 0xe5, 0x7d, 0x68, 0xdf,
+  0x5d, 0xde, 0x60, 0xe9, 0x73, 0x70, 0xe4, 0x5c, 0xd9, 0x59, 0xe1, 0x7a,
+  0x60, 0xd5, 0x4f, 0xd1, 0x5b, 0x7e, 0xd9, 0x4d, 0xca, 0x4d, 0xdb, 0xe8,
+  0x4f, 0xc8, 0x47, 0xcd, 0x66, 0x5a, 0xc9, 0x44, 0xc6, 0x51, 0x78, 0xce,
+  0x45, 0xc3, 0x49, 0xdb, 0xdd, 0x49, 0xc3, 0x44, 0xce, 0x6f, 0x53, 0xc7,
+  0x44, 0xc9, 0x57, 0x69, 0xce, 0x48, 0xc8, 0x4e, 0xe6, 0xde, 0x4e, 0xcb,
+  0x4d, 0xd8, 0x78, 0x5d, 0xd2, 0x50, 0xd5, 0x5f, 0xfc, 0xe4, 0x5c, 0xda,
+  0x5c, 0xe2, 0x6e, 0x7d, 0xeb, 0x63, 0xde, 0x5d, 0xde, 0x65, 0xf9, 0xe7,
+  0x5a, 0xd5, 0x54, 0xdb, 0x6f, 0x5f, 0xd2, 0x4d, 0xce, 0x58, 0x7d, 0xd7,
+  0x4b, 0xc9, 0x4c, 0xdb, 0xe7, 0x4e, 0xc6, 0x46, 0xcd, 0x67, 0x58, 0xc8,
+  0x44, 0xc7, 0x53, 0x72, 0xce, 0x45, 0xc3, 0x4a, 0xdd, 0xdc, 0x4a, 0xc4,
+  0x46, 0xcf, 0x76, 0x54, 0xc9, 0x46, 0xcb, 0x5a, 0x69, 0xd0, 0x4a, 0xcb,
+  0x51, 0xe8, 0xe1, 0x52, 0xce, 0x50, 0xdb, 0x72, 0x63, 0xda, 0x56, 0xda,
+  0x5f, 0xf1, 0xf3, 0x65, 0xe0, 0x5e, 0xe0, 0x63, 0xec, 0x7c, 0x6a, 0xde,
+  0x59, 0xd8, 0x5c, 0xec, 0xe9, 0x58, 0xd0, 0x4f, 0xd7, 0x6c, 0x5f, 0xcf,
+  0x4b, 0xcc, 0x56, 0xfc, 0xd5, 0x4a, 0xc7, 0x4b, 0xdb, 0xe4, 0x4d, 0xc6,
+  0x46, 0xcd, 0x69, 0x57, 0xc8, 0x44, 0xc7, 0x54, 0x6e, 0xce, 0x46, 0xc5,
+  0x4b, 0xdf, 0xdc, 0x4b, 0xc6, 0x48, 0xd2, 0x79, 0x55, 0xcb, 0x49, 0xcd,
+  0x5d, 0x6c, 0xd4, 0x4d, 0xcd, 0x55, 0xe8, 0xe6, 0x58, 0xd3, 0x55, 0xdd,
+  0x6e, 0x6d, 0xe0, 0x5d, 0xdd, 0x5f, 0xe9, 0x73, 0x75, 0xe9, 0x60, 0xdd,
+  0x5c, 0xe0, 0x6c, 0x6e, 0xde, 0x55, 0xd4, 0x57, 0xe6, 0xeb, 0x56, 0xce,
+  0x4d, 0xd4, 0x6a, 0x5e, 0xce, 0x49, 0xcb, 0x55, 0xfe, 0xd3, 0x49, 0xc6,
+  0x4b, 0xdb, 0xe2, 0x4c, 0xc5, 0x46, 0xce, 0x6c, 0x56, 0xc8, 0x45, 0xc8,
+  0x56, 0x6c, 0xce, 0x47, 0xc6, 0x4d, 0xe3, 0xdd, 0x4c, 0xc8, 0x4a, 0xd5,
+  0x7a, 0x57, 0xcd, 0x4b, 0xcf, 0x5e, 0x6d, 0xd8, 0x50, 0xd1, 0x58, 0xe9,
+  0xee, 0x5d, 0xd9, 0x5a, 0xde, 0x6a, 0xfe, 0xec, 0x65, 0xe0, 0x5f, 0xe0,
+  0x67, 0xf0, 0xf1, 0x63, 0xda, 0x58, 0xda, 0x65, 0x78, 0xdc, 0x53, 0xcf,
+  0x54, 0xe1, 0xeb, 0x54, 0xcc, 0x4b, 0xd1, 0x68, 0x5d, 0xcd, 0x48, 0xca,
+  0x54, 0x7b, 0xd2, 0x48, 0xc6, 0x4b, 0xdc, 0xe0, 0x4c, 0xc6, 0x47, 0xcf,
+  0x6e, 0x55, 0xc9, 0x45, 0xca, 0x58, 0x6b, 0xcf, 0x48, 0xc8, 0x4e, 0xe5,
+  0xdd, 0x4e, 0xca, 0x4c, 0xd8, 0x7b, 0x5a, 0xcf, 0x4e, 0xd3, 0x60, 0x73,
+  0xdd, 0x56, 0xd6, 0x5b, 0xe8, 0xfc, 0x67, 0xdf, 0x5e, 0xdf, 0x65, 0xed,
+  0x7b, 0x6e, 0xe5, 0x5e, 0xdc, 0x5d, 0xe6, 0xff, 0x63, 0xd8, 0x53, 0xd5,
+  0x5e, 0x7c, 0xdb, 0x4f, 0xcd, 0x50, 0xde, 0xea, 0x52, 0xcb, 0x4a, 0xcf,
+  0x68, 0x5c, 0xcc, 0x47, 0xc9, 0x54, 0x79, 0xd1, 0x48, 0xc6, 0x4b, 0xdd,
+  0xdf, 0x4c, 0xc6, 0x47, 0xd0, 0x6f, 0x56, 0xca, 0x47, 0xcb, 0x5a, 0x6b,
+  0xd1, 0x4a, 0xca, 0x50, 0xe7, 0xdf, 0x50, 0xcd, 0x4f, 0xda, 0x79, 0x5e,
+  0xd5, 0x52, 0xd7, 0x62, 0xff, 0xe4, 0x5c, 0xdb, 0x5d, 0xe5, 0x73, 0x77,
+  0xea, 0x64, 0xe0, 0x5f, 0xe2, 0x6b, 0xfe, 0xe8, 0x5c, 0xd8, 0x58, 0xde,
+  0x76, 0x63, 0xd5, 0x50, 0xd1, 0x5b, 0xff, 0xda, 0x4e, 0xcb, 0x4f, 0xdd,
+  0xe9, 0x50, 0xca, 0x49, 0xcf, 0x69, 0x5b, 0xcb, 0x47, 0xc9, 0x55, 0x75,
+  0xd1, 0x48, 0xc7, 0x4c, 0xde, 0xde, 0x4c, 0xc7, 0x49, 0xd2, 0x76, 0x57,
+  0xcb, 0x49, 0xcd, 0x5c, 0x6b, 0xd3, 0x4c, 0xcd, 0x54, 0xe9, 0xe3, 0x54,
+  0xcf, 0x52, 0xdc, 0x75, 0x64, 0xda, 0x58, 0xdb, 0x63, 0xf4, 0xee, 0x65,
+  0xe0, 0x5f, 0xe3, 0x68, 0xf1, 0xf9, 0x6a, 0xe0, 0x5d, 0xdc, 0x60, 0xef,
+  0xeb, 0x5b, 0xd5, 0x54, 0xda, 0x6d, 0x62, 0xd3, 0x4e, 0xcf, 0x59, 0xfd,
+  0xd9, 0x4d, 0xca, 0x4e, 0xdd, 0xe8, 0x4f, 0xc9, 0x49, 0xcf, 0x69, 0x5a,
+  0xcb, 0x47, 0xca, 0x56, 0x73, 0xd1, 0x49, 0xc7, 0x4d, 0xdf, 0xdf, 0x4d,
+  0xc8, 0x4a, 0xd4, 0x77, 0x58, 0xcd, 0x4b, 0xcf, 0x5d, 0x6d, 0xd6, 0x4e,
+  0xcf, 0x56, 0xea, 0xe9, 0x59, 0xd5, 0x56, 0xde, 0x6f, 0x6d, 0xdf, 0x5d,
+  0xdd, 0x62, 0xeb, 0x7c, 0x71, 0xe8, 0x62, 0xdf, 0x60, 0xe5, 0x73, 0x6f,
+  0xdf, 0x5a, 0xd7, 0x5c, 0xe9, 0xec, 0x5a, 0xd1, 0x50, 0xd7, 0x6c, 0x61,
+  0xd1, 0x4c, 0xcd, 0x58, 0xfd, 0xd7, 0x4c, 0xc9, 0x4d, 0xdd, 0xe7, 0x4f,
+  0xc9, 0x49, 0xcf, 0x6b, 0x59, 0xcb, 0x47, 0xcb, 0x57, 0x6f, 0xd1, 0x49,
+  0xc9, 0x4e, 0xe2, 0xdf, 0x4e, 0xca, 0x4c, 0xd6, 0x78, 0x5a, 0xcf, 0x4d,
+  0xd1, 0x5f, 0x70, 0xda, 0x52, 0xd3, 0x59, 0xe9, 0xef, 0x5e, 0xda, 0x5a,
+  0xdf, 0x6b, 0x7b, 0xeb, 0x63, 0xe1, 0x61, 0xe5, 0x6b, 0xfa, 0xf0, 0x64,
+  0xdd, 0x5b, 0xde, 0x68, 0x75, 0xdf, 0x56, 0xd4, 0x58, 0xe4, 0xed, 0x58,
+  0xcf, 0x4e, 0xd5, 0x6a, 0x60, 0xcf, 0x4b, 0xcc, 0x57, 0xfd, 0xd6, 0x4b,
+  0xc9, 0x4d, 0xdd, 0xe5, 0x4f, 0xc9, 0x49, 0xd0, 0x6d, 0x5a, 0xcc, 0x48,
+  0xcc, 0x59, 0x6f, 0xd3, 0x4b, 0xca, 0x4f, 0xe5, 0xe1, 0x50, 0xcc, 0x4e,
+  0xd9, 0x77, 0x5d, 0xd2, 0x4f, 0xd5, 0x60, 0x77, 0xde, 0x57, 0xd7, 0x5c,
+  0xe8, 0xfa, 0x67, 0xdf, 0x5e, 0xe0, 0x67, 0xf0, 0xfc, 0x6d, 0xe5, 0x5f,
+  0xdf, 0x61, 0xeb, 0xfb, 0x65, 0xdb, 0x57, 0xd9, 0x61, 0x7c, 0xde, 0x54,
+  0xd0, 0x54, 0xe1, 0xed, 0x56, 0xcd, 0x4d, 0xd3, 0x69, 0x5f, 0xce, 0x4b,
+  0xcc, 0x57, 0x7d, 0xd5, 0x4b, 0xc9, 0x4e, 0xde, 0xe4, 0x4f, 0xc9, 0x4a,
+  0xd2, 0x6f, 0x5a, 0xcc, 0x4a, 0xcd, 0x5b, 0x6f, 0xd4, 0x4c, 0xcc, 0x52,
+  0xe7, 0xe4, 0x53, 0xce, 0x50, 0xdb, 0x76, 0x60, 0xd6, 0x54, 0xd8, 0x62,
+  0xff, 0xe5, 0x5d, 0xdc, 0x5e, 0xe7, 0x75, 0x73, 0xe9, 0x64, 0xe2, 0x63,
+  0xe7, 0x6f, 0x7b, 0xe9, 0x5f, 0xdb, 0x5c, 0xe2, 0x78, 0x65, 0xd9, 0x54,
+  0xd6, 0x5e, 0xfe, 0xdd, 0x51, 0xce, 0x52, 0xdf, 0xec, 0x54, 0xcd, 0x4c,
+  0xd2, 0x69, 0x5d, 0xce, 0x4a, 0xcc, 0x57, 0x7a, 0xd5, 0x4b, 0xc9, 0x4e,
+  0xdf, 0xe3, 0x4f, 0xca, 0x4b, 0xd4, 0x70, 0x5a, 0xcd, 0x4b, 0xce, 0x5c,
+  0x6f, 0xd6, 0x4e, 0xce, 0x55, 0xe8, 0xe7, 0x57, 0xd2, 0x54, 0xdd, 0x73,
+  0x66, 0xdb, 0x59, 0xdb, 0x63, 0xf5, 0xee, 0x65, 0xe0, 0x60, 0xe5, 0x6b,
+  0xf7, 0xf6, 0x69, 0xe2, 0x5f, 0xdf, 0x65, 0xf5, 0xeb, 0x5d, 0xd8, 0x58,
+  0xdd, 0x71, 0x65, 0xd7, 0x51, 0xd2, 0x5c, 0xfd, 0xdb, 0x4f, 0xcd, 0x50,
+  0xde, 0xea, 0x53, 0xcc, 0x4c, 0xd2, 0x6a, 0x5d, 0xce, 0x4a, 0xcc, 0x58,
+  0x78, 0xd4, 0x4b, 0xca, 0x4f, 0xe1, 0xe3, 0x4f, 0xcb, 0x4c, 0xd6, 0x74,
+  0x5b, 0xcf, 0x4d, 0xd0, 0x5e, 0x70, 0xd9, 0x50, 0xd0, 0x58, 0xea, 0xeb,
+  0x5b, 0xd6, 0x58, 0xdf, 0x6f, 0x6d, 0xe1, 0x5d, 0xde, 0x64, 0xed, 0xff,
+  0x6e, 0xe8, 0x63, 0xe2, 0x64, 0xe9, 0x77, 0x6e, 0xe2, 0x5c, 0xdb, 0x5e,
+  0xec, 0xed, 0x5c, 0xd5, 0x54, 0xda, 0x6d, 0x64, 0xd5, 0x4f, 0xd0, 0x5a,
+  0xfd, 0xda, 0x4e, 0xcc, 0x4f, 0xde, 0xe9, 0x52, 0xcb, 0x4b, 0xd3, 0x6c,
+  0x5c, 0xce, 0x4a, 0xcd, 0x5a, 0x74, 0xd5, 0x4c, 0xcb, 0x50, 0xe4, 0xe3,
+  0x51, 0xcc, 0x4e, 0xd8, 0x77, 0x5c, 0xd1, 0x4f, 0xd4, 0x60, 0x72, 0xdc,
+  0x55, 0xd5, 0x5b, 0xeb, 0xef, 0x5f, 0xdb, 0x5c, 0xe1, 0x6d, 0x7a, 0xeb,
+  0x65, 0xe3, 0x64, 0xe8, 0x6e, 0xfc, 0xef, 0x66, 0xdf, 0x5e, 0xe0, 0x6b,
+  0x76, 0xe0, 0x59, 0xd7, 0x5a, 0xe8, 0xee, 0x5a, 0xd2, 0x51, 0xd8, 0x6c,
+  0x62, 0xd3, 0x4e, 0xcf, 0x5a, 0xff, 0xd9, 0x4e, 0xcc, 0x4f, 0xdf, 0xe7,
+  0x51, 0xcb, 0x4c, 0xd4, 0x6e, 0x5c, 0xce, 0x4b, 0xce, 0x5b, 0x71, 0xd5,
+  0x4d, 0xcd, 0x53, 0xe7, 0xe3, 0x53, 0xce, 0x50, 0xdb, 0x78, 0x5e, 0xd5,
+  0x52, 0xd7, 0x63, 0x78, 0xdf, 0x5a, 0xd9, 0x5e, 0xea, 0xf9, 0x69, 0xe1,
+  0x60, 0xe3, 0x6a, 0xf2, 0xfa, 0x6e, 0xe7, 0x63, 0xe1, 0x65, 0xed, 0xfa,
+  0x67, 0xdd, 0x5a, 0xdc, 0x65, 0x7b, 0xdf, 0x57, 0xd4, 0x57, 0xe4, 0xee,
+  0x59, 0xd0, 0x4f, 0xd6, 0x6b, 0x60, 0xd2, 0x4d, 0xce, 0x59, 0x7d, 0xd8,
+  0x4d, 0xcc, 0x4f, 0xe0, 0xe7, 0x51, 0xcc, 0x4c, 0xd5, 0x6f, 0x5b, 0xce,
+  0x4c, 0xcf, 0x5c, 0x70, 0xd7, 0x4e, 0xce, 0x55, 0xe9, 0xe5, 0x56, 0xd1,
+  0x53, 0xdd, 0x78, 0x62, 0xd9, 0x57, 0xda, 0x66, 0x7e, 0xe6, 0x5e, 0xde,
+  0x60, 0xe9, 0x78, 0x73, 0xea, 0x66, 0xe4, 0x66, 0xea, 0x71, 0x7a, 0xea,
+  0x61, 0xde, 0x5e, 0xe5, 0x7a, 0x67, 0xdb, 0x57, 0xd8, 0x60, 0x7e, 0xde,
+  0x54, 0xd1, 0x55, 0xe2, 0xed, 0x57, 0xcf, 0x4e, 0xd6, 0x6b, 0x5f, 0xd0,
+  0x4c, 0xce, 0x5a, 0x7a, 0xd8, 0x4d, 0xcc, 0x50, 0xe3, 0xe5, 0x51, 0xcc,
+  0x4d, 0xd7, 0x74, 0x5c, 0xcf, 0x4d, 0xd1, 0x5e, 0x6f, 0xd9, 0x50, 0xd0,
+  0x58, 0xea, 0xe7, 0x59, 0xd4, 0x57, 0xde, 0x77, 0x68, 0xdd, 0x5b, 0xdd,
+  0x66, 0xf7, 0xee, 0x67, 0xe3, 0x64, 0xe7, 0x6d, 0xf9, 0xf5, 0x6b, 0xe5,
+  0x62, 0xe2, 0x68, 0xf6, 0xed, 0x5f, 0xdb, 0x5a, 0xdf, 0x72, 0x67, 0xd9,
+  0x54, 0xd5, 0x5e, 0xfd, 0xdd, 0x52, 0xcf, 0x53, 0xe1, 0xed, 0x56, 0xce,
+  0x4e, 0xd5, 0x6b, 0x5e, 0xd0, 0x4c, 0xce, 0x5a, 0x77, 0xd7, 0x4d, 0xcc,
+  0x52, 0xe4, 0xe5, 0x53, 0xcd, 0x4e, 0xd8, 0x76, 0x5d, 0xd1, 0x4f, 0xd3,
+  0x5f, 0x71, 0xdb, 0x53, 0xd4, 0x5a, 0xec, 0xec, 0x5d, 0xd9, 0x5a, 0xe1,
+  0x72, 0x6e, 0xe3, 0x5f, 0xe0, 0x66, 0xef, 0xfe, 0x6f, 0xe9, 0x66, 0xe5,
+  0x67, 0xec, 0x79, 0x70, 0xe5, 0x5e, 0xdd, 0x60, 0xee, 0xee, 0x5e, 0xd8,
+  0x57, 0xdc, 0x6f, 0x67, 0xd8, 0x52, 0xd3, 0x5d, 0xfd, 0xdc, 0x51, 0xce,
+  0x53, 0xe0, 0xeb, 0x55, 0xce, 0x4e, 0xd6, 0x6d, 0x5e, 0xd0, 0x4c, 0xcf,
+  0x5b, 0x75, 0xd8, 0x4e, 0xcd, 0x53, 0xe6, 0xe5, 0x54, 0xce, 0x50, 0xda,
+  0x78, 0x5e, 0xd4, 0x51, 0xd6, 0x63, 0x74, 0xdd, 0x57, 0xd7, 0x5d, 0xec,
+  0xf0, 0x61, 0xdd, 0x5e, 0xe4, 0x6f, 0x7a, 0xec, 0x67, 0xe5, 0x67, 0xea,
+  0x70, 0xfe, 0xf0, 0x68, 0xe2, 0x61, 0xe3, 0x6d, 0x77, 0xe4, 0x5c, 0xda,
+  0x5d, 0xea, 0xef, 0x5d, 0xd6, 0x54, 0xdb, 0x6c, 0x65, 0xd6, 0x50, 0xd2,
+  0x5c, 0xfe, 0xdc, 0x50, 0xce, 0x52, 0xe1, 0xea, 0x55, 0xcd, 0x4e, 0xd6,
+  0x6e, 0x5e, 0xd0, 0x4d, 0xcf, 0x5d, 0x74, 0xd8, 0x4f, 0xce, 0x55, 0xe8,
+  0xe6, 0x56, 0xd0, 0x53, 0xdc, 0x78, 0x60, 0xd7, 0x55, 0xd9, 0x65, 0x78,
+  0xe2, 0x5b, 0xdb, 0x5f, 0xec, 0xfa, 0x69, 0xe3, 0x62, 0xe6, 0x6b, 0xf6,
+  0xfa, 0x6e, 0xe9, 0x66, 0xe5, 0x68, 0xee, 0xfb, 0x69, 0xdf, 0x5d, 0xde,
+  0x68, 0x7c, 0xe3, 0x5a, 0xd7, 0x5a, 0xe6, 0xef, 0x5c, 0xd3, 0x52, 0xd9,
+  0x6c, 0x64, 0xd5, 0x4f, 0xd1, 0x5b, 0xff, 0xdb, 0x4f, 0xce, 0x53, 0xe2,
+  0xe9, 0x55, 0xce, 0x4e, 0xd7, 0x70, 0x5e, 0xd1, 0x4e, 0xd1, 0x5e, 0x73,
+  0xd9, 0x50, 0xd0, 0x58, 0xea, 0xe7, 0x58, 0xd3, 0x56, 0xde, 0x78, 0x64,
+  0xdb, 0x59, 0xdc, 0x67, 0x7d, 0xe8, 0x5f, 0xdf, 0x62, 0xeb, 0x79, 0x72,
+  0xeb, 0x67, 0xe7, 0x68, 0xec, 0x74, 0x79, 0xec, 0x64, 0xe0, 0x60, 0xe8,
+  0x7a, 0x6a, 0xde, 0x5a, 0xdb, 0x63, 0xfe, 0xe1, 0x58, 0xd4, 0x58, 0xe4,
+  0xef, 0x5a, 0xd2, 0x51, 0xd8, 0x6c, 0x63, 0xd4, 0x4f, 0xd0, 0x5c, 0x7d,
+  0xda, 0x4f, 0xce, 0x53, 0xe3, 0xe8, 0x55, 0xce, 0x4f, 0xd9, 0x73, 0x5e,
+  0xd2, 0x4f, 0xd4, 0x5f, 0x72, 0xdb, 0x53, 0xd3, 0x5a, 0xeb, 0xea, 0x5b,
+  0xd7, 0x59, 0xe0, 0x75, 0x6a, 0xde, 0x5d, 0xde, 0x68, 0xf9, 0xef, 0x67,
+  0xe5, 0x65, 0xe9, 0x6f, 0xfb, 0xf5, 0x6c, 0xe7, 0x64, 0xe5, 0x6a, 0xf8,
+  0xee, 0x62, 0xdd, 0x5d, 0xe2, 0x73, 0x6a, 0xdc, 0x57, 0xd8, 0x5f, 0xfb,
+  0xe0, 0x56, 0xd2, 0x57, 0xe2, 0xee, 0x59, 0xd1, 0x50, 0xd8, 0x6d, 0x62,
+  0xd3, 0x4e, 0xd0, 0x5c, 0x7a, 0xda, 0x4f, 0xce, 0x54, 0xe5, 0xe8, 0x56,
+  0xcf, 0x50, 0xda, 0x75, 0x5f, 0xd4, 0x51, 0xd6, 0x62, 0x74, 0xdd, 0x56,
+  0xd6, 0x5c, 0xec, 0xed, 0x5e, 0xdb, 0x5c, 0xe3, 0x73, 0x6e, 0xe5, 0x60,
+  0xe3, 0x68, 0xf1, 0xfd, 0x6f, 0xeb, 0x67, 0xe7, 0x69, 0xee, 0x7a, 0x71,
+  0xe7, 0x61, 0xdf, 0x64, 0xef, 0xef, 0x60, 0xda, 0x5a, 0xde, 0x70, 0x69,
+  0xda, 0x55, 0xd6, 0x5e, 0xfb, 0xde, 0x55, 0xd1, 0x56, 0xe2, 0xed, 0x59,
+  0xd0, 0x50, 0xd8, 0x6d, 0x60, 0xd3, 0x4f, 0xd1, 0x5d, 0x79, 0xda, 0x50,
+  0xcf, 0x56, 0xe7, 0xe8, 0x57, 0xd1, 0x53, 0xdc, 0x77, 0x60, 0xd7, 0x54,
+  0xd8, 0x64, 0x76, 0xdf, 0x59, 0xd9, 0x5e, 0xed, 0xf2, 0x64, 0xde, 0x5f,
+  0xe5, 0x6f, 0x79, 0xec, 0x68, 0xe7, 0x68, 0xec, 0x73, 0x7e, 0xf1, 0x6a,
+  0xe5, 0x63, 0xe7, 0x6f, 0x77, 0xe7, 0x5e, 0xdc, 0x5e, 0xeb, 0xf2, 0x5f,
+  0xd9, 0x57, 0xdc, 0x6d, 0x68, 0xd9, 0x53, 0xd5, 0x5d, 0xfc, 0xde, 0x53,
+  0xd0, 0x55, 0xe3, 0xed, 0x58, 0xd0, 0x50, 0xd8, 0x6e, 0x60, 0xd3, 0x4f,
+  0xd2, 0x5e, 0x77, 0xdb, 0x52, 0xd1, 0x57, 0xe8, 0xe9, 0x59, 0xd3, 0x55,
+  0xdd, 0x78, 0x64, 0xd9, 0x57, 0xdb, 0x66, 0x7b, 0xe4, 0x5d, 0xdc, 0x61,
+  0xec, 0xfa, 0x6b, 0xe4, 0x64, 0xe7, 0x6d, 0xf7, 0xf8, 0x6f, 0xea, 0x68,
+  0xe8, 0x6a, 0xf2, 0xfa, 0x6b, 0xe3, 0x5f, 0xe1, 0x69, 0x7c, 0xe6, 0x5c,
+  0xda, 0x5c, 0xe9, 0xf3, 0x5e, 0xd7, 0x55, 0xdb, 0x6c, 0x67, 0xd8, 0x52,
+  0xd4, 0x5d, 0xfd, 0xdd, 0x53, 0xd0, 0x55, 0xe3, 0xec, 0x58, 0xd0, 0x50,
+  0xd9, 0x6f, 0x61, 0xd4, 0x50, 0xd4, 0x5f, 0x77, 0xdc, 0x54, 0xd3, 0x59,
+  0xea, 0xea, 0x5b, 0xd6, 0x58, 0xdf, 0x77, 0x67, 0xdc, 0x5a, 0xdd, 0x68,
+  0xfe, 0xea, 0x62, 0xdf, 0x64, 0xeb, 0x7b, 0x73, 0xeb, 0x68, 0xe8, 0x6a,
+  0xee, 0x77, 0x79, 0xed, 0x67, 0xe3, 0x64, 0xeb, 0x7c, 0x6b, 0xe0, 0x5c,
+  0xdd, 0x65, 0xfe, 0xe5, 0x5a, 0xd8, 0x5a, 0xe6, 0xf3, 0x5d, 0xd5, 0x54,
+  0xda, 0x6d, 0x67, 0xd7, 0x51, 0xd3, 0x5d, 0xfe, 0xdd, 0x53, 0xd0, 0x56,
+  0xe5, 0xeb, 0x58, 0xd1, 0x52, 0xda, 0x71, 0x61, 0xd6, 0x52, 0xd6, 0x61,
+  0x77, 0xdd, 0x56, 0xd5, 0x5b, 0xeb, 0xec, 0x5d, 0xd9, 0x5a, 0xe2, 0x75,
+  0x6b, 0xe0, 0x5e, 0xe0, 0x68, 0xf9, 0xf0, 0x68, 0xe5, 0x66, 0xeb, 0x70,
+  0xfe, 0xf4, 0x6c, 0xe9, 0x67, 0xe8, 0x6d, 0xfa, 0xef, 0x65, 0xdf, 0x5f,
+  0xe6, 0x75, 0x6b, 0xde, 0x5a, 0xdb, 0x62, 0xfc, 0xe3, 0x59, 0xd6, 0x59,
+  0xe5, 0xf2, 0x5c, 0xd4, 0x53, 0xda, 0x6d, 0x65, 0xd7, 0x51, 0xd4, 0x5e,
+  0x7e, 0xdd, 0x53, 0xd1, 0x57, 0xe6, 0xeb, 0x59, 0xd2, 0x53, 0xdc, 0x75,
+  0x62, 0xd7, 0x54, 0xd8, 0x64, 0x78, 0xdf, 0x59, 0xd8, 0x5d, 0xec, 0xee,
+  0x60, 0xdc, 0x5d, 0xe4, 0x74, 0x70, 0xe6, 0x63, 0xe3, 0x6a, 0xf2, 0xfc,
+  0x70, 0xeb, 0x69, 0xe9, 0x6b, 0xf0, 0x7d, 0x72, 0xe9, 0x64, 0xe3, 0x67,
+  0xf2, 0xf2, 0x63, 0xdd, 0x5c, 0xe1, 0x70, 0x6b, 0xdd, 0x58, 0xd9, 0x5f,
+  0xfb, 0xe2, 0x58, 0xd4, 0x58, 0xe5, 0xf1, 0x5b, 0xd4, 0x53, 0xda, 0x6d,
+  0x64, 0xd6, 0x51, 0xd4, 0x5e, 0x7b, 0xdd, 0x54, 0xd2, 0x58, 0xe8, 0xeb,
+  0x5a, 0xd4, 0x55, 0xdd, 0x76, 0x64, 0xd9, 0x57, 0xda, 0x65, 0x79, 0xe2,
+  0x5b, 0xdb, 0x5f, 0xed, 0xf3, 0x66, 0xdf, 0x61, 0xe7, 0x71, 0x7a, 0xed,
+  0x69, 0xe8, 0x6a, 0xed, 0x76, 0x7e, 0xf1, 0x6b, 0xe7, 0x66, 0xea, 0x71,
+  0x77, 0xe9, 0x60, 0xde, 0x61, 0xed, 0xf5, 0x61, 0xdb, 0x5a, 0xde, 0x6e,
+  0x6b, 0xdc, 0x57, 0xd8, 0x5f, 0xfb, 0xe1, 0x57, 0xd4, 0x57, 0xe5, 0xef,
+  0x5b, 0xd3, 0x53, 0xda, 0x6e, 0x64, 0xd7, 0x52, 0xd5, 0x5f, 0x7b, 0xdd,
+  0x55, 0xd3, 0x59, 0xe9, 0xeb, 0x5b, 0xd6, 0x58, 0xde, 0x77, 0x67, 0xdb,
+  0x59, 0xdc, 0x68, 0x7d, 0xe6, 0x5f, 0xde, 0x63, 0xed, 0xfb, 0x6b, 0xe6,
+  0x65, 0xe8, 0x6e, 0xfa, 0xf8, 0x6e, 0xeb, 0x69, 0xea, 0x6c, 0xf5, 0xfa,
+  0x6c, 0xe5, 0x61, 0xe4, 0x6c, 0x7c, 0xe8, 0x5e, 0xdc, 0x5e, 0xea, 0xf4,
+  0x60, 0xd9, 0x58, 0xdd, 0x6e, 0x6a, 0xdb, 0x55, 0xd7, 0x5e, 0xfc, 0xdf,
+  0x56, 0xd3, 0x58, 0xe5, 0xee, 0x5b, 0xd3, 0x54, 0xdb, 0x6f, 0x64, 0xd7,
+  0x53, 0xd7, 0x60, 0x79, 0xde, 0x56, 0xd5, 0x5b, 0xeb, 0xed, 0x5d, 0xd8,
+  0x5a, 0xe1, 0x76, 0x69, 0xde, 0x5c, 0xde, 0x69, 0xfd, 0xeb, 0x64, 0xe2,
+  0x66, 0xed, 0x7c, 0x74, 0xec, 0x6a, 0xe9, 0x6c, 0xef, 0x7a, 0x78, 0xee,
+  0x68, 0xe6, 0x67, 0xed, 0x7c, 0x6d, 0xe3, 0x5e, 0xdf, 0x68, 0xfe, 0xe7,
+  0x5d, 0xda, 0x5d, 0xe8, 0xf4, 0x5f, 0xd8, 0x57, 0xdc, 0x6e, 0x69, 0xda,
+  0x55, 0xd6, 0x5e, 0xfd, 0xdf, 0x56, 0xd3, 0x58, 0xe6, 0xed, 0x5a, 0xd4,
+  0x54, 0xdc, 0x72, 0x64, 0xd8, 0x55, 0xd8, 0x63, 0x78, 0xdf, 0x58, 0xd8,
+  0x5d, 0xed, 0xee, 0x5f, 0xdb, 0x5c, 0xe4, 0x76, 0x6d, 0xe2, 0x5f, 0xe2,
+  0x6a, 0xfa, 0xf1, 0x6a, 0xe7, 0x68, 0xec, 0x72, 0x7e, 0xf5, 0x6e, 0xea,
+  0x69, 0xea, 0x6e, 0xfc, 0xf0, 0x68, 0xe2, 0x62, 0xe7, 0x77, 0x6d, 0xe0,
+  0x5d, 0xdd, 0x65, 0xfb, 0xe6, 0x5b, 0xd9, 0x5b, 0xe7, 0xf4, 0x5e, 0xd7,
+  0x56, 0xdc, 0x6e, 0x68, 0xd9, 0x54, 0xd6, 0x5f, 0xfe, 0xdf, 0x56, 0xd4,
+  0x59, 0xe7, 0xed, 0x5b, 0xd5, 0x56, 0xdd, 0x73, 0x65, 0xda, 0x57, 0xda,
+  0x65, 0x79, 0xe2, 0x5b, 0xda, 0x5f, 0xed, 0xf1, 0x63, 0xde, 0x5f, 0xe6,
+  0x75, 0x72, 0xe8, 0x64, 0xe6, 0x6b, 0xf4, 0xfb, 0x70, 0xec, 0x6a, 0xeb,
+  0x6d, 0xf3, 0x7e, 0x72, 0xeb, 0x66, 0xe5, 0x69, 0xf5, 0xf3, 0x66, 0xdf,
+  0x5f, 0xe4, 0x73, 0x6d, 0xdf, 0x5b, 0xdc, 0x63, 0xfb, 0xe5, 0x5a, 0xd7,
+  0x5a, 0xe6, 0xf3, 0x5d, 0xd7, 0x56, 0xdc, 0x6e, 0x67, 0xd9, 0x55, 0xd7,
+  0x5f, 0x7e, 0xdf, 0x57, 0xd5, 0x5a, 0xe9, 0xed, 0x5c, 0xd6, 0x58, 0xde,
+  0x76, 0x67, 0xdb, 0x59, 0xdc, 0x66, 0x7b, 0xe5, 0x5d, 0xdc, 0x61, 0xee,
+  0xf6, 0x67, 0xe2, 0x62, 0xe8, 0x71, 0x7a, 0xee, 0x69, 0xe9, 0x6b, 0xef,
+  0x78, 0x7c, 0xf0, 0x6c, 0xe9, 0x69, 0xec, 0x76, 0x77, 0xea, 0x63, 0xe1,
+  0x65, 0xee, 0xf4, 0x65, 0xdd, 0x5d, 0xe1, 0x70, 0x6d, 0xde, 0x59, 0xda,
+  0x61, 0xfb, 0xe4, 0x59, 0xd7, 0x5a, 0xe6, 0xf2, 0x5d, 0xd6, 0x56, 0xdc,
+  0x6e, 0x67, 0xd9, 0x55, 0xd8, 0x61, 0x7c, 0xdf, 0x58, 0xd6, 0x5b, 0xea,
+  0xee, 0x5d, 0xd8, 0x59, 0xe0, 0x76, 0x69, 0xdd, 0x5b, 0xde, 0x68, 0x7d,
+  0xe9, 0x5f, 0xdf, 0x63, 0xee, 0xfc, 0x6c, 0xe7, 0x66, 0xe9, 0x6f, 0xfb,
+  0xf7, 0x6e, 0xec, 0x6a, 0xec, 0x6e, 0xf8, 0xf9, 0x6d, 0xe7, 0x65, 0xe7,
+  0x6e, 0x7c, 0xea, 0x61, 0xde, 0x61, 0xec, 0xf6, 0x64, 0xdc, 0x5b, 0xdf,
+  0x6f, 0x6c, 0xdd, 0x58, 0xd9, 0x61, 0xfb, 0xe3, 0x59, 0xd6, 0x5a, 0xe7,
+  0xf1, 0x5d, 0xd6, 0x56, 0xdd, 0x6f, 0x67, 0xda, 0x56, 0xd9, 0x62, 0x7c,
+  0xe0, 0x59, 0xd8, 0x5d, 0xeb, 0xee, 0x5f, 0xda, 0x5b, 0xe2, 0x76, 0x6b,
+  0xe0, 0x5d, 0xe0, 0x6a, 0xfe, 0xed, 0x65, 0xe4, 0x67, 0xee, 0x7b, 0x73,
+  0xed, 0x6a, 0xeb, 0x6d, 0xf2, 0x7b, 0x77, 0xee, 0x6a, 0xe9, 0x6a, 0xef,
+  0x7e, 0x6e, 0xe6, 0x61, 0xe2, 0x6a, 0xfe, 0xe9, 0x5f, 0xdc, 0x5f, 0xea,
+  0xf7, 0x62, 0xdb, 0x5a, 0xde, 0x6e, 0x6c, 0xdc, 0x58, 0xd9, 0x60, 0xfc,
+  0xe2, 0x59, 0xd6, 0x5a, 0xe7, 0xef, 0x5d, 0xd7, 0x57, 0xde, 0x72, 0x67,
+  0xdb, 0x57, 0xda, 0x64, 0x7b, 0xe2, 0x5b, 0xda, 0x5e, 0xed, 0xf0, 0x61,
+  0xdd, 0x5e, 0xe5, 0x77, 0x6e, 0xe4, 0x61, 0xe3, 0x6c, 0xf9, 0xf1, 0x6b,
+  0xe8, 0x6a, 0xed, 0x75, 0x7e, 0xf5, 0x6e, 0xec, 0x6b, 0xec, 0x71, 0xfe,
+  0xf1, 0x69, 0xe5, 0x65, 0xea, 0x78, 0x6e, 0xe4, 0x5e, 0xdf, 0x67, 0xfc,
+  0xe9, 0x5e, 0xdb, 0x5d, 0xe9, 0xf6, 0x61, 0xda, 0x59, 0xde, 0x6e, 0x6b,
+  0xdc, 0x57, 0xd9, 0x61, 0xfd, 0xe2, 0x59, 0xd7, 0x5b, 0xe9, 0xef, 0x5d,
+  0xd8, 0x58, 0xdf, 0x73, 0x68, 0xdc, 0x59, 0xdc, 0x66, 0x7b, 0xe4, 0x5c,
+  0xdc, 0x60, 0xee, 0xf4, 0x65, 0xdf, 0x60, 0xe7, 0x75, 0x73, 0xe9, 0x66,
+  0xe7, 0x6c, 0xf5, 0xfa, 0x71, 0xed, 0x6b, 0xec, 0x6e, 0xf6, 0xfe, 0x73,
+  0xec, 0x68, 0xe9, 0x6b, 0xf7, 0xf5, 0x68, 0xe2, 0x61, 0xe7, 0x73, 0x6e,
+  0xe2, 0x5d, 0xde, 0x65, 0xfa, 0xe8, 0x5d, 0xda, 0x5d, 0xe8, 0xf6, 0x5f,
+  0xd9, 0x59, 0xdd, 0x6f, 0x6a, 0xdc, 0x58, 0xd9, 0x62, 0xfe, 0xe2, 0x59,
+  0xd7, 0x5c, 0xe9, 0xef, 0x5e, 0xd9, 0x5a, 0xdf, 0x75, 0x69, 0xdd, 0x5b,
+  0xdd, 0x68, 0x7d, 0xe7, 0x5f, 0xde, 0x63, 0xee, 0xf7, 0x69, 0xe4, 0x64,
+  0xe9, 0x72, 0x7b, 0xee, 0x6b, 0xea, 0x6c, 0xf0, 0x79, 0x7b, 0xf2, 0x6d,
+  0xeb, 0x6b, 0xee, 0x76, 0x78, 0xec, 0x66, 0xe4, 0x67, 0xf0, 0xf7, 0x67,
+  0xdf, 0x5e, 0xe4, 0x70, 0x6e, 0xe0, 0x5c, 0xdc, 0x63, 0xfa, 0xe7, 0x5c,
+  0xd9, 0x5c, 0xe8, 0xf5, 0x5f, 0xd9, 0x58, 0xde, 0x6f, 0x6a, 0xdc, 0x58,
+  0xda, 0x62, 0x7e, 0xe3, 0x5a, 0xd9, 0x5d, 0xeb, 0xf0, 0x5f, 0xdb, 0x5b,
+  0xe2, 0x74, 0x6b, 0xdf, 0x5d, 0xdf, 0x69, 0x7e, 0xea, 0x63, 0xe1, 0x65,
+  0xee, 0xfd, 0x6e, 0xe8, 0x68, 0xea, 0x6f, 0xfc, 0xf8, 0x6f, 0xed, 0x6c,
+  0xed, 0x70, 0xf9, 0xf9, 0x6e, 0xe9, 0x68, 0xe9, 0x6f, 0x7c, 0xec, 0x64,
+  0xe1, 0x64, 0xed, 0xf8, 0x66, 0xde, 0x5d, 0xe1, 0x6f, 0x6e, 0xdf, 0x5b,
+  0xdc, 0x63, 0xfb, 0xe6, 0x5b, 0xd9, 0x5c, 0xe8, 0xf4, 0x5f, 0xd9, 0x59,
+  0xde, 0x70, 0x6a, 0xdc, 0x59, 0xdb, 0x64, 0x7e, 0xe3, 0x5b, 0xda, 0x5e,
+  0xec, 0xf0, 0x61, 0xdc, 0x5d, 0xe4, 0x75, 0x6d, 0xe2, 0x5f, 0xe1, 0x6b,
+  0xfb, 0xee, 0x67, 0xe5, 0x68, 0xee, 0x7c, 0x75, 0xed, 0x6b, 0xec, 0x6e,
+  0xf4, 0x7d, 0x77, 0xef, 0x6c, 0xea, 0x6b, 0xf1, 0xff, 0x6f, 0xe8, 0x64,
+  0xe6, 0x6c, 0xff, 0xeb, 0x62, 0xdf, 0x61, 0xec, 0xf8, 0x65, 0xdd, 0x5c,
+  0xe0, 0x6f, 0x6d, 0xdf, 0x5a, 0xdb, 0x63, 0xfa, 0xe6, 0x5b, 0xd9, 0x5c,
+  0xe8, 0xf3, 0x5f, 0xda, 0x59, 0xdf, 0x71, 0x6a, 0xdd, 0x59, 0xdc, 0x65,
+  0x7d, 0xe5, 0x5d, 0xdc, 0x5f, 0xed, 0xf3, 0x64, 0xde, 0x5f, 0xe6, 0x75,
+  0x70, 0xe6, 0x63, 0xe5, 0x6c, 0xf8, 0xf3, 0x6c, 0xe9, 0x6a, 0xed, 0x76,
+  0x7e, 0xf5, 0x6e, 0xec, 0x6c, 0xee, 0x74, 0xfe, 0xf2, 0x6b, 0xe8, 0x68,
+  0xec, 0x7a, 0x6f, 0xe6, 0x61, 0xe2, 0x6a, 0xfc, 0xea, 0x60, 0xdd, 0x5f,
+  0xea, 0xf8, 0x64, 0xdc, 0x5b, 0xdf, 0x6e, 0x6d, 0xde, 0x5a, 0xdb, 0x63,
+  0xfb, 0xe5, 0x5b, 0xd9, 0x5d, 0xea, 0xf3, 0x5f, 0xda, 0x5a, 0xe0, 0x72,
+  0x6b, 0xde, 0x5b, 0xdd, 0x67, 0x7e, 0xe7, 0x5e, 0xdd, 0x62, 0xee, 0xf6,
+  0x68, 0xe1, 0x62, 0xe8, 0x74, 0x75, 0xeb, 0x68, 0xe8, 0x6c, 0xf6, 0xfb,
+  0x72, 0xed, 0x6d, 0xed, 0x70, 0xf7, 0xfe, 0x74, 0xed, 0x6a, 0xea, 0x6d,
+  0xf7, 0xf6, 0x6a, 0xe5, 0x64, 0xe9, 0x75, 0x70, 0xe5, 0x5f, 0xdf, 0x67,
+  0xfa, 0xea, 0x5f, 0xdc, 0x5e, 0xe9, 0xf8, 0x63, 0xdc, 0x5b, 0xdf, 0x6f,
+  0x6c, 0xde, 0x5a, 0xdb, 0x63, 0xfc, 0xe6, 0x5c, 0xda, 0x5e, 0xea, 0xf3,
+  0x61, 0xdb, 0x5c, 0xe2, 0x74, 0x6c, 0xdf, 0x5d, 0xdf, 0x69, 0x7e, 0xe9,
+  0x61, 0xdf, 0x64, 0xef, 0xfa, 0x6b, 0xe6, 0x65, 0xea, 0x72, 0x7b, 0xef,
+  0x6c, 0xeb, 0x6d, 0xf1, 0x7a, 0x7a, 0xf3, 0x6e, 0xec, 0x6c, 0xef, 0x78,
+  0x78, 0xed, 0x68, 0xe7, 0x6a, 0xf2, 0xf7, 0x6a, 0xe2, 0x61, 0xe6, 0x72,
+  0x70, 0xe3, 0x5e, 0xde, 0x66, 0xfa, 0xe9, 0x5e, 0xdc, 0x5e, 0xe9, 0xf8,
+  0x62, 0xdb, 0x5b, 0xdf, 0x6f, 0x6c, 0xde, 0x5a, 0xdc, 0x64, 0xfd, 0xe6,
+  0x5c, 0xdb, 0x5e, 0xeb, 0xf4, 0x62, 0xdd, 0x5d, 0xe3, 0x74, 0x6d, 0xe2,
+  0x5e, 0xe1, 0x69, 0xfd, 0xed, 0x65, 0xe3, 0x67, 0xee, 0xfe, 0x6f, 0xea,
+  0x69, 0xeb, 0x70, 0xfb, 0xf7, 0x70, 0xed, 0x6d, 0xee, 0x72, 0xfa, 0xf9,
+  0x6f, 0xeb, 0x6a, 0xeb, 0x71, 0x7c, 0xed, 0x67, 0xe3, 0x66, 0xee, 0xf9,
+  0x69, 0xe0, 0x5f, 0xe4, 0x71, 0x71, 0xe2, 0x5d, 0xdd, 0x65, 0xf8, 0xe9,
+  0x5e, 0xdb, 0x5e, 0xe8, 0xf7, 0x63, 0xdb, 0x5b, 0xdf, 0x70, 0x6d, 0xde,
+  0x5b, 0xdc, 0x65, 0xfc, 0xe7, 0x5d, 0xdc, 0x5f, 0xec, 0xf5, 0x64, 0xde,
+  0x5e, 0xe5, 0x73, 0x6f, 0xe5, 0x60, 0xe3, 0x6a, 0xfc, 0xf0, 0x68, 0xe7,
+  0x69, 0xef, 0x7b, 0x75, 0xee, 0x6c, 0xec, 0x6f, 0xf5, 0x7d, 0x77, 0xef,
+  0x6d, 0xec, 0x6d, 0xf3, 0xff, 0x70, 0xea, 0x66, 0xe8, 0x6e, 0xfe, 0xed,
+  0x65, 0xe1, 0x64, 0xed, 0xfa, 0x68, 0xdf, 0x5e, 0xe2, 0x6f, 0x6f, 0xe1,
+  0x5d, 0xdd, 0x65, 0xf9, 0xe9, 0x5e, 0xdb, 0x5e, 0xe9, 0xf6, 0x63, 0xdc,
+  0x5b, 0xe0, 0x71, 0x6d, 0xdf, 0x5c, 0xdd, 0x66, 0xfe, 0xe9, 0x5f, 0xdd,
+  0x61, 0xed, 0xf7, 0x67, 0xe0, 0x60, 0xe7, 0x74, 0x73, 0xe8, 0x64, 0xe6,
+  0x6c, 0xf8, 0xf5, 0x6c, 0xeb, 0x6b, 0xee, 0x76, 0x7d, 0xf4, 0x6f, 0xed,
+  0x6d, 0xef, 0x75, 0x7e, 0xf4, 0x6c, 0xe9, 0x6a, 0xee, 0x7a, 0x71, 0xe9,
+  0x64, 0xe5, 0x6b, 0xfc, 0xed, 0x63, 0xdf, 0x62, 0xeb, 0xfa, 0x67, 0xde,
+  0x5d, 0xe1, 0x6f, 0x6f, 0xe0, 0x5c, 0xdd, 0x64, 0xf9, 0xe8, 0x5e, 0xdb,
+  0x5e, 0xea, 0xf6, 0x64, 0xdc, 0x5c, 0xe1, 0x72, 0x6d, 0xe0, 0x5d, 0xde,
+  0x68, 0xfd, 0xea, 0x61, 0xdf, 0x63, 0xed, 0xf9, 0x6a, 0xe4, 0x63, 0xe9,
+  0x74, 0x77, 0xec, 0x69, 0xe9, 0x6d, 0xf6, 0xfd, 0x73, 0xee, 0x6d, 0xee,
+  0x72, 0xf9, 0xfd, 0x74, 0xee, 0x6c, 0xec, 0x6f, 0xf9, 0xf6, 0x6c, 0xe8,
+  0x66, 0xeb, 0x76, 0x72, 0xe8, 0x62, 0xe2, 0x69, 0xfa, 0xec, 0x62, 0xde,
+  0x60, 0xea, 0xfb, 0x66, 0xde, 0x5d, 0xe1, 0x6f, 0x6f, 0xe0, 0x5c, 0xdd,
+  0x65, 0xfa, 0xe9, 0x5e, 0xdc, 0x5f, 0xeb, 0xf7, 0x64, 0xdd, 0x5d, 0xe3,
+  0x72, 0x6e, 0xe2, 0x5e, 0xe0, 0x69, 0xfc, 0xec, 0x64, 0xe1, 0x65, 0xef,
+  0xfc, 0x6c, 0xe7, 0x66, 0xeb, 0x72, 0x7c, 0xf1, 0x6c, 0xec, 0x6d, 0xf2,
+  0x7b, 0x7a, 0xf2, 0x6e, 0xed, 0x6e, 0xf1, 0x7a, 0x79, 0xee, 0x6a, 0xe9,
+  0x6c, 0xf4, 0xf9, 0x6b, 0xe5, 0x64, 0xe8, 0x73, 0x73, 0xe6, 0x60, 0xe0,
+  0x68, 0xf9, 0xec, 0x61, 0xde, 0x5f, 0xea, 0xfa, 0x66, 0xde, 0x5d, 0xe1,
+  0x6f, 0x6f, 0xe1, 0x5c, 0xdd, 0x66, 0xfb, 0xe9, 0x5e, 0xdd, 0x5f, 0xec,
+  0xf7, 0x65, 0xde, 0x5e, 0xe5, 0x74, 0x6f, 0xe5, 0x60, 0xe2, 0x6a, 0xfc,
+  0xee, 0x67, 0xe5, 0x68, 0xef, 0xfe, 0x71, 0xeb, 0x6a, 0xec, 0x72, 0xfc,
+  0xf8, 0x71, 0xee, 0x6e, 0xef, 0x74, 0xfb, 0xf9, 0x70, 0xed, 0x6c, 0xed,
+  0x73, 0x7d, 0xef, 0x69, 0xe6, 0x68, 0xef, 0xfa, 0x6b, 0xe3, 0x62, 0xe6,
+  0x72, 0x73, 0xe5, 0x5f, 0xdf, 0x67, 0xf8, 0xeb, 0x60, 0xdd, 0x5f, 0xea,
+  0xfb, 0x65, 0xde, 0x5d, 0xe2, 0x6f, 0x6e, 0xe1, 0x5d, 0xde, 0x66, 0xfd,
+  0xea, 0x5f, 0xde, 0x61, 0xed, 0xf8, 0x67, 0xe0, 0x60, 0xe7, 0x74, 0x71,
+  0xe8, 0x63, 0xe5, 0x6c, 0xfa, 0xf1, 0x6b, 0xe8, 0x6a, 0xef, 0x7c, 0x77,
+  0xef, 0x6d, 0xed, 0x71, 0xf5, 0x7e, 0x79, 0xf0, 0x6e, 0xed, 0x6f, 0xf4,
+  0xfe, 0x73, 0xeb, 0x69, 0xe9, 0x6f, 0xfd, 0xee, 0x67, 0xe4, 0x66, 0xed,
+  0xfb, 0x6a, 0xe2, 0x60, 0xe5, 0x70, 0x72, 0xe5, 0x5e, 0xdf, 0x66, 0xf8,
+  0xeb, 0x5f, 0xdd, 0x5f, 0xea, 0xfa, 0x65, 0xde, 0x5d, 0xe3, 0x6f, 0x6e,
+  0xe2, 0x5d, 0xdf, 0x67, 0xfc, 0xeb, 0x60, 0xdf, 0x63, 0xed, 0xf9, 0x69,
+  0xe3, 0x63, 0xe9, 0x74, 0x75, 0xea, 0x67, 0xe8, 0x6d, 0xf9, 0xf7, 0x6e,
+  0xec, 0x6c, 0xef, 0x78, 0x7e, 0xf5, 0x71, 0xee, 0x6e, 0xf0, 0x77, 0xfe,
+  0xf4, 0x6e, 0xeb, 0x6c, 0xef, 0x7b, 0x74, 0xea, 0x67, 0xe7, 0x6d, 0xfb,
+  0xee, 0x66, 0xe1, 0x64, 0xec, 0xfc, 0x69, 0xe1, 0x5f, 0xe4, 0x6f, 0x72,
+  0xe4, 0x5e, 0xdf, 0x66, 0xf9, 0xeb, 0x5f, 0xdd, 0x5f, 0xeb, 0xf9, 0x66,
+  0xde, 0x5e, 0xe3, 0x71, 0x6f, 0xe4, 0x5f, 0xe0, 0x69, 0xfc, 0xec, 0x63,
+  0xe1, 0x65, 0xef, 0xfb, 0x6b, 0xe6, 0x65, 0xea, 0x74, 0x79, 0xed, 0x6a,
+  0xea, 0x6e, 0xf6, 0xfc, 0x73, 0xef, 0x6e, 0xef, 0x73, 0xf9, 0xfd, 0x75,
+  0xef, 0x6d, 0xed, 0x70, 0xfa, 0xf7, 0x6e, 0xe9, 0x69, 0xec, 0x77, 0x74,
+  0xe9, 0x65, 0xe5, 0x6b, 0xfa, 0xee, 0x64, 0xe0, 0x63, 0xec, 0xfc, 0x69,
+  0xe0, 0x5f, 0xe3, 0x6f, 0x72, 0xe4, 0x5e, 0xdf, 0x66, 0xfa, 0xeb, 0x60,
+  0xde, 0x60, 0xeb, 0xf9, 0x67, 0xdf, 0x5f, 0xe5, 0x72, 0x70, 0xe5, 0x60,
+  0xe2, 0x6a, 0xfc, 0xee, 0x66, 0xe4, 0x67, 0xef, 0xfd, 0x6e, 0xe9, 0x68,
+  0xec, 0x73, 0x7d, 0xf3, 0x6e, 0xed, 0x6e, 0xf3, 0x7b, 0x7b, 0xf5, 0x70,
+  0xee, 0x6f, 0xf3, 0x7a, 0x7a, 0xef, 0x6c, 0xeb, 0x6d, 0xf5, 0xf9, 0x6d,
+  0xe7, 0x67, 0xea, 0x75, 0x75, 0xe8, 0x63, 0xe3, 0x69, 0xf8, 0xed, 0x64,
+  0xdf, 0x62, 0xeb, 0xfc, 0x69, 0xdf, 0x5f, 0xe3, 0x70, 0x71, 0xe3, 0x5e,
+  0xdf, 0x67, 0xfa, 0xeb, 0x61, 0xdf, 0x61, 0xed, 0xfa, 0x68, 0xe1, 0x60,
+  0xe7, 0x73, 0x71, 0xe7, 0x62, 0xe5, 0x6b, 0xfb, 0xf0, 0x69, 0xe7, 0x69,
+  0xef, 0x7e, 0x72, 0xed, 0x6b, 0xed, 0x72, 0xfc, 0xf9, 0x72, 0xef, 0x6e,
+  0xf1, 0x74, 0xfc, 0xf9, 0x71, 0xee, 0x6d, 0xee, 0x75, 0x7d, 0xf0, 0x6b,
+  0xe8, 0x6b, 0xf0, 0xfa, 0x6d, 0xe6, 0x64, 0xe8, 0x72, 0x75, 0xe8, 0x62,
+  0xe2, 0x69, 0xf8, 0xed, 0x63, 0xdf, 0x61, 0xeb, 0xfc, 0x68, 0xdf, 0x5f,
+  0xe4, 0x70, 0x71, 0xe4, 0x5f, 0xe0, 0x68, 0xfb, 0xec, 0x62, 0xdf, 0x63,
+  0xed, 0xfa, 0x69, 0xe3, 0x62, 0xe8, 0x74, 0x74, 0xea, 0x65, 0xe7, 0x6c,
+  0xfa, 0xf4, 0x6c, 0xea, 0x6b, 0xef, 0x7a, 0x78, 0xf0, 0x6e, 0xee, 0x71,
+  0xf6, 0xff, 0x79, 0xf2, 0x6f, 0xee, 0x70, 0xf5, 0xfd, 0x74, 0xed, 0x6b,
+  0xec, 0x70, 0xfe, 0xf0, 0x69, 0xe7, 0x68, 0xef, 0xfd, 0x6c, 0xe5, 0x62,
+  0xe7, 0x70, 0x74, 0xe7, 0x60, 0xe1, 0x67, 0xf9, 0xee, 0x62, 0xdf, 0x61,
+  0xeb, 0xfb, 0x68, 0xe0, 0x5f, 0xe4, 0x70, 0x71, 0xe5, 0x5f, 0xe1, 0x69,
+  0xfb, 0xed, 0x64, 0xe1, 0x65, 0xee, 0xfb, 0x6b, 0xe5, 0x65, 0xe9, 0x74,
+  0x78, 0xec, 0x69, 0xe9, 0x6e, 0xf8, 0xf8, 0x6f, 0xec, 0x6d, 0xef, 0x77,
+  0x7e, 0xf6, 0x72, 0xef, 0x70, 0xf2, 0x78, 0x7e, 0xf6, 0x6f, 0xed, 0x6d,
+  0xf0, 0x7b, 0x75, 0xed, 0x69, 0xe9, 0x6e, 0xfb, 0xf0, 0x68, 0xe5, 0x66,
+  0xee, 0xfd, 0x6b, 0xe4, 0x61, 0xe6, 0x70, 0x74, 0xe7, 0x60, 0xe1, 0x67,
+  0xf8, 0xed, 0x63, 0xdf, 0x62, 0xeb, 0xfb, 0x69, 0xe0, 0x5f, 0xe5, 0x71,
+  0x72, 0xe6, 0x61, 0xe2, 0x6a, 0xfa, 0xee, 0x66, 0xe3, 0x67, 0xee, 0xfc,
+  0x6e, 0xe8, 0x67, 0xeb, 0x74, 0x7c, 0xef, 0x6c, 0xeb, 0x6e, 0xf6, 0xfd,
+  0x75, 0xf0, 0x6f, 0xef, 0x74, 0xfa, 0xfd, 0x75, 0xf0, 0x6e, 0xef, 0x73,
+  0xfb, 0xf8, 0x6e, 0xeb, 0x6a, 0xee, 0x78, 0x76, 0xeb, 0x67, 0xe7, 0x6c,
+  0xfa, 0xf0, 0x67, 0xe3, 0x65, 0xed, 0xfe, 0x6b, 0xe3, 0x61, 0xe5, 0x6f,
+  0x74, 0xe7, 0x60, 0xe1, 0x67, 0xf9, 0xee, 0x63, 0xdf, 0x62, 0xec, 0xfc,
+  0x69, 0xe2, 0x60, 0xe6, 0x72, 0x73, 0xe8, 0x63, 0xe4, 0x6b, 0xfa, 0xef,
+  0x68, 0xe5, 0x69, 0xef, 0xfe, 0x70, 0xea, 0x6a, 0xec, 0x74, 0x7e, 0xf3,
+  0x6f, 0xed, 0x6f, 0xf3, 0x7c, 0x7b, 0xf4, 0x71, 0xef, 0x71, 0xf4, 0x7c,
+  0x7a, 0xf0, 0x6e, 0xec, 0x6f, 0xf6, 0xfa, 0x6f, 0xea, 0x69, 0xeb, 0x76,
+  0x77, 0xeb, 0x66, 0xe5, 0x6b, 0xf8, 0xef, 0x67, 0xe2, 0x64, 0xed, 0xfe,
+  0x6b, 0xe3, 0x60, 0xe5, 0x6f, 0x74, 0xe7, 0x60, 0xe1, 0x68, 0xf9, 0xee,
+  0x63, 0xe1, 0x63, 0xed, 0xfd, 0x6a, 0xe4, 0x62, 0xe8, 0x72, 0x75, 0xe9,
+  0x65, 0xe6, 0x6c, 0xfa, 0xf2, 0x6b, 0xe8, 0x6a, 0xef, 0x7d, 0x74, 0xed,
+  0x6d, 0xed, 0x73, 0xfb, 0xf9, 0x74, 0xef, 0x70, 0xf1, 0x77, 0xfd, 0xfa,
+  0x73, 0xef, 0x6e, 0xef, 0x76, 0x7d, 0xf2, 0x6c, 0xeb, 0x6c, 0xf2, 0xfc,
+  0x6e, 0xe9, 0x67, 0xea, 0x72, 0x77, 0xea, 0x65, 0xe4, 0x6a, 0xf8, 0xef,
+  0x66, 0xe2, 0x63, 0xec, 0xff, 0x6b, 0xe3, 0x60, 0xe5, 0x70, 0x75, 0xe7,
+  0x61, 0xe2, 0x69, 0xf9, 0xee, 0x65, 0xe2, 0x64, 0xed, 0xfd, 0x6c, 0xe5,
+  0x64, 0xe9, 0x73, 0x77, 0xeb, 0x67, 0xe8, 0x6d, 0xf9, 0xf6, 0x6d, 0xeb,
+  0x6c, 0xef, 0x7a, 0x7a, 0xf1, 0x6f, 0xee, 0x72, 0xf7, 0xff, 0x78, 0xf3,
+  0x70, 0xef, 0x72, 0xf7, 0xfe, 0x75, 0xee, 0x6c, 0xed, 0x72, 0xfd, 0xf2,
+  0x6b, 0xe8, 0x6a, 0xef, 0xfd, 0x6e, 0xe7, 0x65, 0xe9, 0x71, 0x78, 0xea,
+  0x63, 0xe4, 0x69, 0xf7, 0xef, 0x66, 0xe1, 0x64, 0xec, 0xff, 0x6b, 0xe3,
+  0x61, 0xe6, 0x70, 0x75, 0xe8, 0x62, 0xe3, 0x6a, 0xf9, 0xef, 0x67, 0xe3,
+  0x66, 0xee, 0xfe, 0x6d, 0xe7, 0x66, 0xea, 0x74, 0x7a, 0xee, 0x6a, 0xea,
+  0x6e, 0xf7, 0xfa, 0x70, 0xee, 0x6e, 0xf1, 0x77, 0x7e, 0xf7, 0x72, 0xf0,
+  0x71, 0xf4, 0x79, 0x7d, 0xf6, 0x71, 0xee, 0x6f, 0xf2, 0x7c, 0x77, 0xee,
+  0x6b, 0xeb, 0x6f, 0xfb, 0xf2, 0x6b, 0xe7, 0x68, 0xee, 0xff, 0x6e, 0xe6,
+  0x64, 0xe7, 0x70, 0x78, 0xea, 0x63, 0xe3, 0x69, 0xf7, 0xef, 0x66, 0xe2,
+  0x64, 0xec, 0xfe, 0x6b, 0xe4, 0x62, 0xe6, 0x71, 0x76, 0xe9, 0x63, 0xe4,
+  0x6a, 0xf9, 0xf1, 0x68, 0xe5, 0x67, 0xef, 0x7e, 0x6f, 0xea, 0x68, 0xec,
+  0x74, 0x7c, 0xf1, 0x6c, 0xec, 0x6f, 0xf6, 0xfe, 0x76, 0xf1, 0x6f, 0xf0,
+  0x75, 0xfb, 0xfd, 0x76, 0xf1, 0x6f, 0xef, 0x74, 0xfb, 0xf9, 0x70, 0xec,
+  0x6d, 0xee, 0x79, 0x78, 0xed, 0x6a, 0xe9, 0x6d, 0xf9, 0xf2, 0x6a, 0xe6,
+  0x67, 0xed, 0x7e, 0x6d, 0xe6, 0x63, 0xe7, 0x70, 0x78, 0xe9, 0x63, 0xe3,
+  0x69, 0xf7, 0xf0, 0x66, 0xe2, 0x64, 0xec, 0xfe, 0x6c, 0xe5, 0x63, 0xe7,
+  0x71, 0x77, 0xea, 0x65, 0xe6, 0x6b, 0xf8, 0xf3, 0x6a, 0xe8, 0x69, 0xef,
+  0x7e, 0x72, 0xec, 0x6b, 0xed, 0x74, 0xfe, 0xf5, 0x6f, 0xee, 0x6f, 0xf4,
+  0x7c, 0x7b, 0xf5, 0x71, 0xf0, 0x72, 0xf6, 0x7b, 0x79, 0xf3, 0x6e, 0xee,
+  0x6f, 0xf7, 0xfb, 0x6f, 0xec, 0x6b, 0xed, 0x76, 0x79, 0xed, 0x68, 0xe7,
+  0x6c, 0xf7, 0xf2, 0x69, 0xe5, 0x66, 0xec, 0x7e, 0x6e, 0xe5, 0x63, 0xe7,
+  0x6f, 0x78, 0xe9, 0x63, 0xe4, 0x69, 0xf7, 0xf0, 0x67, 0xe3, 0x65, 0xed,
+  0xff, 0x6d, 0xe6, 0x65, 0xe9, 0x73, 0x78, 0xeb, 0x67, 0xe7, 0x6c, 0xf8,
+  0xf5, 0x6d, 0xea, 0x6b, 0xf0, 0x7c, 0x76, 0xef, 0x6d, 0xee, 0x72, 0xfc,
+  0xfb, 0x74, 0xf2, 0x70, 0xf3, 0x76, 0xfe, 0xfb, 0x75, 0xf0, 0x6f, 0xf1,
+  0x77, 0x7d, 0xf4, 0x6e, 0xec, 0x6d, 0xf3, 0xfe, 0x70, 0xeb, 0x69, 0xeb,
+  0x73, 0x7a, 0xed, 0x67, 0xe7, 0x6b, 0xf7, 0xf4, 0x69, 0xe5, 0x66, 0xec,
+  0x7d, 0x6d, 0xe5, 0x63, 0xe6, 0x6f, 0x79, 0xea, 0x64, 0xe3, 0x6a, 0xf6,
+  0xf0, 0x68, 0xe4, 0x66, 0xed, 0xff, 0x6e, 0xe7, 0x66, 0xea, 0x73, 0x7a,
+  0xed, 0x69, 0xe9, 0x6d, 0xf8, 0xf8, 0x6f, 0xec, 0x6d, 0xf1, 0x7a, 0x7a,
+  0xf3, 0x6f, 0xf0, 0x72, 0xf8, 0x7e, 0x78, 0xf5, 0x70, 0xf1, 0x72, 0xf9,
+  0xff, 0x75, 0xf0, 0x6d, 0xef, 0x72, 0xfd, 0xf4, 0x6d, 0xeb, 0x6b, 0xf1,
+  0xff, 0x70, 0xea, 0x67, 0xea, 0x72, 0x7a, 0xec, 0x66, 0xe5, 0x6a, 0xf6,
+  0xf3, 0x68, 0xe4, 0x66, 0xec, 0x7d, 0x6e, 0xe6, 0x64, 0xe7, 0x70, 0x79,
+  0xea, 0x65, 0xe4, 0x6b, 0xf6, 0xf2, 0x69, 0xe5, 0x68, 0xed, 0xff, 0x6f,
+  0xe9, 0x68, 0xeb, 0x73, 0x7c, 0xef, 0x6c, 0xeb, 0x6e, 0xf6, 0xfc, 0x72,
+  0xee, 0x6e, 0xf1, 0x77, 0xfe, 0xf8, 0x73, 0xf2, 0x71, 0xf5, 0x79, 0x7d,
+  0xf7, 0x72, 0xef, 0x6f, 0xf4, 0x7b, 0x77, 0xf0, 0x6c, 0xec, 0x6f, 0xfb,
+  0xf5, 0x6c, 0xe9, 0x6a, 0xef, 0x7d, 0x6f, 0xe9, 0x66, 0xe9, 0x70, 0x7a,
+  0xec, 0x66, 0xe5, 0x6a, 0xf6, 0xf3, 0x69, 0xe4, 0x65, 0xec, 0x7d, 0x6e,
+  0xe7, 0x64, 0xe8, 0x70, 0x79, 0xeb, 0x66, 0xe6, 0x6b, 0xf7, 0xf4, 0x6b,
+  0xe7, 0x69, 0xee, 0x7d, 0x72, 0xeb, 0x6a, 0xec, 0x73, 0xff, 0xf2, 0x6e,
+  0xed, 0x6f, 0xf5, 0xfe, 0x78, 0xf2, 0x70, 0xf1, 0x75, 0xfb, 0xfd, 0x77,
+  0xf3, 0x70, 0xf1, 0x75, 0xfb, 0xfa, 0x73, 0xee, 0x6e, 0xf0, 0x78, 0x79,
+  0xef, 0x6b, 0xeb, 0x6e, 0xf8, 0xf5, 0x6c, 0xe8, 0x69, 0xee, 0x7c, 0x6f,
+  0xe9, 0x66, 0xe8, 0x6f, 0x7a, 0xec, 0x66, 0xe5, 0x6a, 0xf6, 0xf4, 0x69,
+  0xe5, 0x66, 0xed, 0x7c, 0x6e, 0xe7, 0x65, 0xe9, 0x71, 0x7a, 0xec, 0x68,
+  0xe7, 0x6c, 0xf7, 0xf6, 0x6c, 0xe9, 0x6b, 0xef, 0x7c, 0x75, 0xed, 0x6c,
+  0xed, 0x74, 0xfd, 0xf7, 0x71, 0xef, 0x70, 0xf4, 0x7c, 0x7c, 0xf6, 0x74,
+  0xf1, 0x73, 0xf6, 0x7d, 0x7b, 0xf3, 0x70, 0xef, 0x71, 0xf7, 0xfd, 0x72,
+  0xee, 0x6c, 0xee, 0x75, 0x7a, 0xef, 0x6a, 0xea, 0x6d, 0xf7, 0xf6, 0x6b,
+  0xe7, 0x68, 0xed, 0x7b, 0x6f, 0xe8, 0x66, 0xe9, 0x6f, 0x7b, 0xec, 0x66,
+  0xe5, 0x6a, 0xf6, 0xf4, 0x6a, 0xe6, 0x67, 0xed, 0x7c, 0x6f, 0xe9, 0x66,
+  0xe9, 0x72, 0x7a, 0xee, 0x69, 0xe9, 0x6d, 0xf8, 0xf8, 0x6e, 0xeb, 0x6c,
+  0xf0, 0x7b, 0x78, 0xf0, 0x6e, 0xef, 0x74, 0xfa, 0xfb, 0x76, 0xf1, 0x71,
+  0xf3, 0x78, 0xfd, 0xfa, 0x76, 0xf1, 0x71, 0xf3, 0x78, 0x7e, 0xf5, 0x6f,
+  0xed, 0x6f, 0xf4, 0xfe, 0x72, 0xec, 0x6b, 0xec, 0x74, 0x7c, 0xee, 0x6a,
+  0xe8, 0x6c, 0xf6, 0xf5, 0x6b, 0xe7, 0x67, 0xed, 0x7c, 0x6f, 0xe9, 0x65,
+  0xe9, 0x6f, 0x7a, 0xed, 0x66, 0xe6, 0x6a, 0xf6, 0xf5, 0x6a, 0xe7, 0x68,
+  0xee, 0x7c, 0x70, 0xea, 0x68, 0xeb, 0x72, 0x7c, 0xef, 0x6b, 0xeb, 0x6e,
+  0xf7, 0xfa, 0x70, 0xee, 0x6d, 0xf1, 0x79, 0x7b, 0xf5, 0x70, 0xf0, 0x74,
+  0xf7, 0x7e, 0x7a, 0xf4, 0x73, 0xf1, 0x75, 0xf9, 0xfe, 0x77, 0xf1, 0x6f,
+  0xef, 0x74, 0xfc, 0xf6, 0x6f, 0xec, 0x6d, 0xf1, 0x7e, 0x73, 0xeb, 0x6a,
+  0xeb, 0x73, 0x7d, 0xee, 0x69, 0xe7, 0x6b, 0xf5, 0xf6, 0x6b, 0xe7, 0x67,
+  0xed, 0x7b, 0x6f, 0xe9, 0x66, 0xe9, 0x6f, 0x7b, 0xed, 0x67, 0xe7, 0x6b,
+  0xf7, 0xf6, 0x6b, 0xe8, 0x68, 0xee, 0x7c, 0x72, 0xeb, 0x69, 0xec, 0x73,
+  0x7d, 0xf2, 0x6d, 0xec, 0x6f, 0xf7, 0xfc, 0x75, 0xef, 0x6f, 0xf1, 0x78,
+  0xfe, 0xf9, 0x75, 0xf2, 0x73, 0xf5, 0x7a, 0x7e, 0xf8, 0x74, 0xf1, 0x71,
+  0xf4, 0x7c, 0x79, 0xf1, 0x6e, 0xee, 0x71, 0xfb, 0xf7, 0x6e, 0xeb, 0x6b,
+  0xf0, 0x7c, 0x72, 0xeb, 0x69, 0xea, 0x71, 0x7d, 0xee, 0x68, 0xe7, 0x6b,
+  0xf5, 0xf6, 0x6b, 0xe7, 0x68, 0xed, 0x7c, 0x70, 0xe9, 0x67, 0xe9, 0x70,
+  0x7b, 0xed, 0x68, 0xe8, 0x6c, 0xf7, 0xf6, 0x6c, 0xe9, 0x6a, 0xef, 0x7b,
+  0x74, 0xed, 0x6b, 0xed, 0x73, 0xff, 0xf5, 0x6f, 0xee, 0x6f, 0xf6, 0x7e,
+  0x79, 0xf3, 0x71, 0xf2, 0x76, 0xfb, 0xfd, 0x78, 0xf5, 0x72, 0xf3, 0x76,
+  0xfc, 0xfa, 0x74, 0xef, 0x6f, 0xf2, 0x79, 0x7a, 0xf1, 0x6d, 0xec, 0x6f,
+  0xf9, 0xf7, 0x6d, 0xea, 0x6b, 0xee, 0x7c, 0x72, 0xeb, 0x68, 0xea, 0x70,
+  0x7d, 0xee, 0x69, 0xe7, 0x6b, 0xf4, 0xf6, 0x6c, 0xe7, 0x68, 0xed, 0x7b,
+  0x71, 0xea, 0x67, 0xea, 0x71, 0x7c, 0xee, 0x69, 0xe9, 0x6c, 0xf6, 0xf8,
+  0x6e, 0xeb, 0x6b, 0xf0, 0x7a, 0x76, 0xef, 0x6d, 0xee, 0x73, 0xfd, 0xf9,
+  0x72, 0xf0, 0x70, 0xf5, 0x7b, 0x7c, 0xf7, 0x73, 0xf3, 0x74, 0xf8, 0x7c,
+  0x7b, 0xf5, 0x71, 0xf1, 0x72, 0xf9, 0xfd, 0x74, 0xee, 0x6d, 0xef, 0x77,
+  0x7c, 0xf1, 0x6c, 0xeb, 0x6e, 0xf7, 0xf7, 0x6d, 0xe9, 0x6a, 0xee, 0x7c,
+  0x72, 0xea, 0x68, 0xea, 0x70, 0x7d, 0xee, 0x69, 0xe7, 0x6b, 0xf5, 0xf6,
+  0x6c, 0xe7, 0x69, 0xed, 0x7c, 0x72, 0xea, 0x68, 0xeb, 0x71, 0x7d, 0xef,
+  0x6b, 0xea, 0x6d, 0xf7, 0xfa, 0x6f, 0xec, 0x6d, 0xf1, 0x7a, 0x7a, 0xf2,
+  0x6f, 0xef, 0x74, 0xfa, 0xfc, 0x76, 0xf3, 0x72, 0xf4, 0x78, 0xfe, 0xfb,
+  0x75, 0xf3, 0x72, 0xf4, 0x79, 0x7e, 0xf7, 0x70, 0xef, 0x70, 0xf5, 0xfe,
+  0x75, 0xee, 0x6c, 0xee, 0x75, 0x7d, 0xf0, 0x6c, 0xea, 0x6d, 0xf7, 0xf8,
+  0x6d, 0xe9, 0x69, 0xee, 0x7b, 0x73, 0xea, 0x68, 0xea, 0x70, 0x7d, 0xee,
+  0x69, 0xe8, 0x6b, 0xf6, 0xf7, 0x6c, 0xe8, 0x69, 0xee, 0x7b, 0x73, 0xec,
+  0x6a, 0xec, 0x71, 0x7d, 0xf2, 0x6c, 0xec, 0x6e, 0xf7, 0xfc, 0x73, 0xee,
+  0x6e, 0xf1, 0x79, 0x7c, 0xf6, 0x72, 0xf1, 0x74, 0xf9, 0x7e, 0x7a, 0xf6,
+  0x73, 0xf3, 0x75, 0xfa, 0xfe, 0x78, 0xf3, 0x70, 0xf1, 0x76, 0xfd, 0xf7,
+  0x70, 0xed, 0x6e, 0xf3, 0x7e, 0x75, 0xed, 0x6c, 0xed, 0x73, 0x7e, 0xf0,
+  0x6b, 0xea, 0x6c, 0xf6, 0xf8, 0x6d, 0xe9, 0x69, 0xee, 0x7b, 0x72, 0xeb,
+  0x68, 0xea, 0x70, 0x7d, 0xee, 0x69, 0xe9, 0x6c, 0xf5, 0xf8, 0x6d, 0xea,
+  0x6a, 0xef, 0x7b, 0x75, 0xed, 0x6b, 0xed, 0x72, 0xff, 0xf4, 0x6e, 0xed,
+  0x6f, 0xf6, 0xfe, 0x75, 0xf1, 0x70, 0xf3, 0x78, 0xfe, 0xf9, 0x75, 0xf3,
+  0x73, 0xf6, 0x7b, 0x7d, 0xf9, 0x74, 0xf2, 0x72, 0xf7, 0x7c, 0x7a, 0xf3,
+  0x6f, 0xef, 0x73, 0xfb, 0xf8, 0x6f, 0xed, 0x6d, 0xf1, 0x7c, 0x75, 0xed,
+  0x6b, 0xec, 0x73, 0x7d, 0xef, 0x6b, 0xe9, 0x6c, 0xf6, 0xf8, 0x6d, 0xe9,
+  0x69, 0xee, 0x7a, 0x73, 0xeb, 0x69, 0xeb, 0x71, 0x7e, 0xef, 0x6b, 0xe9,
+  0x6d, 0xf6, 0xf8, 0x6e, 0xea, 0x6c, 0xef, 0x7c, 0x77, 0xee, 0x6d, 0xee,
+  0x74, 0xfe, 0xf7, 0x70, 0xef, 0x70, 0xf6, 0x7d, 0x78, 0xf5, 0x71, 0xf4,
+  0x76, 0xfb, 0xfe, 0x78, 0xf6, 0x73, 0xf5, 0x76, 0xfd, 0xfb, 0x75, 0xf2,
+  0x70, 0xf3, 0x7a, 0x7b, 0xf3, 0x6e, 0xed, 0x71, 0xf9, 0xf8, 0x6f, 0xec,
+  0x6c, 0xef, 0x7c, 0x75, 0xec, 0x6a, 0xec, 0x71, 0x7e, 0xf0, 0x6a, 0xe9,
+  0x6c, 0xf6, 0xf9, 0x6d, 0xe9, 0x69, 0xee, 0x7a, 0x73, 0xec, 0x69, 0xeb,
+  0x71, 0x7e, 0xf0, 0x6b, 0xea, 0x6d, 0xf6, 0xfa, 0x6f, 0xec, 0x6d, 0xf0,
+  0x7b, 0x79, 0xf0, 0x6e, 0xef, 0x75, 0xfc, 0xf9, 0x74, 0xf1, 0x72, 0xf6,
+  0x7b, 0x7c, 0xf8, 0x75, 0xf4, 0x74, 0xf8, 0x7d, 0x7c, 0xf7, 0x73, 0xf2,
+  0x74, 0xf9, 0xfd, 0x76, 0xf0, 0x6f, 0xf0, 0x77, 0x7d, 0xf3, 0x6d, 0xed,
+  0x6f, 0xf8, 0xfa, 0x6f, 0xeb, 0x6b, 0xef, 0x7b, 0x75, 0xec, 0x6a, 0xeb,
+  0x71, 0x7e, 0xf0, 0x6a, 0xe9, 0x6c, 0xf5, 0xf9, 0x6d, 0xea, 0x6a, 0xee,
+  0x7a, 0x74, 0xed, 0x6a, 0xec, 0x71, 0x7e, 0xf2, 0x6c, 0xec, 0x6e, 0xf5,
+  0xfc, 0x72, 0xed, 0x6e, 0xf1, 0x79, 0x7b, 0xf3, 0x70, 0xef, 0x74, 0xfa,
+  0xfc, 0x78, 0xf3, 0x73, 0xf4, 0x79, 0xfc, 0xfa, 0x77, 0xf3, 0x74, 0xf4,
+  0x7a, 0xfe, 0xf7, 0x73, 0xef, 0x71, 0xf7, 0x7e, 0x76, 0xef, 0x6e, 0xef,
+  0x75, 0x7d, 0xf3, 0x6d, 0xec, 0x6e, 0xf7, 0xfa, 0x6e, 0xeb, 0x6b, 0xef,
+  0x79, 0x74, 0xed, 0x69, 0xeb, 0x6f, 0x7e, 0xf1, 0x6a, 0xea, 0x6c, 0xf6,
+  0xfa, 0x6e, 0xeb, 0x6a, 0xef, 0x7a, 0x76, 0xee, 0x6b, 0xed, 0x72, 0xfe,
+  0xf4, 0x6e, 0xed, 0x6f, 0xf6, 0xfd, 0x75, 0xef, 0x6f, 0xf1, 0x79, 0x7e,
+  0xf6, 0x75, 0xf1, 0x76, 0xf8, 0xfd, 0x7a, 0xf5, 0x74, 0xf2, 0x76, 0xf8,
+  0x7e, 0x7a, 0xf6, 0x71, 0xec, 0x76, 0xfa, 0x7e, 0x7b, 0xf9, 0x72, 0xf5,
+  0x7d, 0xfb, 0xfb, 0x76, 0xf9, 0x75, 0x7b, 0xf1, 0x77, 0xfe, 0x7a, 0xfb,
+  0x7e, 0x73, 0xfa, 0x7e, 0xfb, 0x7d, 0x77, 0xf7, 0x7e, 0x7c, 0xfe, 0x78,
+  0xfa, 0x7e, 0xff, 0x7e, 0x76, 0xf9, 0xfd, 0xf9, 0xfe, 0x75, 0xf1, 0x76,
+  0x7c, 0xfc, 0x7a, 0xf3, 0x70, 0xfd, 0x7e, 0x7d, 0xf3, 0x70, 0xf7, 0x78,
+  0x7e, 0xf9, 0x72, 0xef, 0x77, 0xfc, 0xfd, 0x75, 0xee, 0x72, 0xf7, 0xfb
+#endif
+};
+
+static short MuLawDecompressTable[256] =
+{
+     -32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,
+     -23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,
+     -15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,
+     -11900,-11388,-10876,-10364, -9852, -9340, -8828, -8316,
+      -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
+      -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
+      -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
+      -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
+      -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
+      -1372, -1308, -1244, -1180, -1116, -1052,  -988,  -924,
+       -876,  -844,  -812,  -780,  -748,  -716,  -684,  -652,
+       -620,  -588,  -556,  -524,  -492,  -460,  -428,  -396,
+       -372,  -356,  -340,  -324,  -308,  -292,  -276,  -260,
+       -244,  -228,  -212,  -196,  -180,  -164,  -148,  -132,
+       -120,  -112,  -104,   -96,   -88,   -80,   -72,   -64,
+        -56,   -48,   -40,   -32,   -24,   -16,    -8,     -1,
+      32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
+      23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
+      15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
+      11900, 11388, 10876, 10364,  9852,  9340,  8828,  8316,
+       7932,  7676,  7420,  7164,  6908,  6652,  6396,  6140,
+       5884,  5628,  5372,  5116,  4860,  4604,  4348,  4092,
+       3900,  3772,  3644,  3516,  3388,  3260,  3132,  3004,
+       2876,  2748,  2620,  2492,  2364,  2236,  2108,  1980,
+       1884,  1820,  1756,  1692,  1628,  1564,  1500,  1436,
+       1372,  1308,  1244,  1180,  1116,  1052,   988,   924,
+        876,   844,   812,   780,   748,   716,   684,   652,
+        620,   588,   556,   524,   492,   460,   428,   396,
+        372,   356,   340,   324,   308,   292,   276,   260,
+        244,   228,   212,   196,   180,   164,   148,   132,
+        120,   112,   104,    96,    88,    80,    72,    64,
+         56,    48,    40,    32,    24,    16,     8,     0
+};
+
+
+void vt_bell (VT *vt)
+{
+  if (vt->bell < 2)
+    return;
+  for (int i = 0; i < (int)sizeof (vt_bell_audio); i++)
+  {
+    int16_t val = MuLawDecompressTable[vt_bell_audio[i]] * vt->bell / 8;
+    terminal_queue_pcm (val, val);
+  }
+}
+
+
+void terminal_queue_pcm (int16_t sample_left, int16_t sample_right);
+
+void vt_audio (VT *vt, const char *command)
+{
+  AudioState *audio = &vt->audio;
+  // the simplest form of audio is raw audio
+  // _As=8000,c=2,b=8,e=u
+  //
+  // multiple voices:
+  //   ids to queue - store samples as images...
+  //
+  // reusing samples
+  //   .. pitch bend and be able to do a mod player?
+  const char *payload = NULL;
+  char key = 0;
+  int  value;
+  int  pos = 1;
+
+  audio->frames=0;
+  audio->action='t';
+
+  int configure = 0;
+  while (command[pos] != ';')
+  {
+    pos ++; // G or ,
+    if (command[pos] == ';') break;
+    key = command[pos]; pos++;
+    if (command[pos] == ';') break;
+    pos ++; // =
+    if (command[pos] == ';') break;
+
+    if (command[pos] >= '0' && command[pos] <= '9')
+      value = atoi(&command[pos]);
+    else
+      value = command[pos];
+    while (command[pos] &&
+           command[pos] != ',' &&
+           command[pos] != ';') pos++;
+    
+    if (value=='?')
+    {
+      char buf[256];
+      const char *range="";
+      switch (key)
+      {
+        case 's':range="8000,16000,24000,48000";break;
+        case 'b':range="8,16";break;
+        case 'B':range="512-65536";break;
+        case 'c':range="1";break;
+        case 'T':range="u,s,f";break;
+        case 'e':range="b,a";break;
+        case 'o':range="z,0";break;
+        case 'a':range="t,q";break;
+        default:range="unknown";break;
+      }
+      sprintf (buf, "\033_A%c=?;%s\033\\", key, range);
+      vt_write (vt, buf, strlen(buf));
+      return;
+    }
+
+    switch (key)
+    {
+      case 's': audio->samplerate = value; configure = 1; break;
+      case 'b': audio->bits = value; configure = 1; break;
+      case 'B': audio->buffer_size = value; configure = 1; break;
+      case 'c': audio->channels = value; configure = 1; break;
+      case 'a': audio->action = value; configure = 1; break;
+      case 'T': audio->type = value; configure = 1; break;
+      case 'f': audio->frames = value; configure = 1; break;
+      case 'e': audio->encoding = value; configure = 1; break;
+      case 'o': audio->compression = value; configure = 1; break;
+      case 'm': 
+        audio->mic = value?1:0;
+        break;
+    }
+
+    if (configure)
+    {
+      /* these are the specific sample rates supported by opus,
+       * instead of enabling anything SDL supports, the initial
+       * implementation limits itself to the opus sample rates
+       */
+      if (audio->samplerate <= 8000)
+      {
+        audio->samplerate = 8000;
+      }
+      else if (audio->samplerate <= 16000)
+      {
+        audio->samplerate = 16000;
+      }
+      else if (audio->samplerate <= 24000)
+      {
+        audio->samplerate = 24000;
+      }
+      else
+      {
+        audio->samplerate = 48000;
+      }
+
+      if (audio->bits != 8 && audio->bits != 16)
+        audio->bits = 8;
+
+      if (audio->buffer_size > 2048)
+        audio->buffer_size = 2048;
+      else if (audio->buffer_size < 512)
+        audio->buffer_size = 512;
+
+      switch (audio->type)
+      {
+        case 'u':
+        case 's':
+        case 'f':
+          break;
+        default:
+          audio->type = 's';
+      }
+
+      /* only 1 and 2 channels supported */
+      if (audio->channels <= 0 || audio->channels > 2)
+      {
+        audio->channels = 1;
+      }
+    }
+  }
+  
+  if (audio->frames ||  audio->action != 'd')
+  {
+  payload = &command[pos+1];
+
+  // accumulate incoming data
+  {
+     int chunk_size = strlen (payload);
+     int old_size = audio->data_size;
+     if (audio->data == NULL)
+     {
+       audio->data_size = chunk_size;
+       audio->data = ctx_malloc (audio->data_size + 1);
+     }
+     else
+     {
+       audio->data_size += chunk_size;
+       audio->data = ctx_realloc (audio->data, audio->data_size+1 - chunk_size, audio->data_size + 1);
+     }
+     memcpy (audio->data + old_size, payload, chunk_size);
+     audio->data[audio->data_size]=0;
+  }
+
+    if (audio->frames)
+    switch (audio->encoding)
+    {
+      case 'y':
+        audio->data_size = ydec (audio->data, audio->data, audio->data_size);
+      break;
+      case 'a':
+      {
+        int bin_length = audio->data_size;
+        if (bin_length)
+        {
+        uint8_t *data2 = ctx_malloc ((unsigned int)ctx_a85len ((char*)audio->data, audio->data_size) + 1);
+        // a85len is inaccurate but gives an upper bound,
+        // should be fixed.
+        bin_length = ctx_a85dec ((char*)audio->data,
+                                 (void*)data2,
+                                 bin_length);
+        free (audio->data);
+        audio->data = data2;
+        audio->data_size = bin_length;
+        }
+      }
+      break;
+
+      case 'b':
+      {
+        int bin_length = audio->data_size;
+        uint8_t *data2 = ctx_malloc (audio->data_size);
+        bin_length = ctx_base642bin ((char*)audio->data,
+                                     &bin_length,
+                                     data2);
+        memcpy (audio->data, data2, bin_length + 1);
+        audio->data_size = bin_length;
+        ctx_free (data2);
+      }
+      break;
+    }
+
+    if (audio->frames)
+    switch (audio->compression)
+    {
+      case 'z':
+    {
+#ifndef EMSCRIPTEN
+      unsigned long
+#else
+      unsigned int
+#endif
+              actual_uncompressed_size = audio->frames * audio->bits/8 * audio->channels + 512;
+      unsigned char *data2 = ctx_malloc (actual_uncompressed_size);
+      /* if a buf size is set (rather compression, but
+       * this works first..) then */
+      int z_result = uncompress (data2, &actual_uncompressed_size,
+                                 audio->data,
+                                 audio->data_size);
+      if (z_result != Z_OK)
+      {
+       // fprintf (stderr, "[z error %i %i]", __LINE__, z_result);
+      }
+
+#if 0
+      // XXX : we seem to get buf-error (-5) here, which indicates not enough
+      //       space in output buffer, which is odd
+      //
+      //       it is non fatal though so we ignore it and use the validly
+      //       decompressed bits.
+      {
+        char buf[256];
+        sprintf (buf, "\e_Ao=z;zlib error1 %i\e\\", z_result);
+        vt_write (vt, buf, strlen(buf));
+        //goto cleanup;
+      }
+#endif
+      ctx_free (audio->data);
+      audio->data = data2;
+      audio->data_size = actual_uncompressed_size;
+    }
+
+        break;
+      case 'o':
+        break;
+      default:
+        break;
+    }
+
+    if (audio->frames == 0)
+    {
+      /* implicit frame count */
+      audio->frames = audio->data_size /
+                                (audio->bits/8) /
+                                   audio->channels;
+    }
+
+
+#if 0
+    if (audio->format == 100/* opus */)
+    {
+      int channels;
+      uint8_t *new_data = NULL;//stbi_load_from_memory (audio->data, audio->data_size, &audio->buf_width, &audio->buf_height, &channels, 4);
+
+      if (!new_data)
+      {
+        char buf[256]= "\e_Gf=100;audio decode error\e\\";
+        vt_write (vt, buf, strlen(buf));
+        goto cleanup;
+      }
+      audio->format = 32;
+      ctx_free (audio->data);
+      audio->data = new_data;
+      audio->data_size = audio->buf_width * audio->buf_height * 4;
+    }
+#endif
+
+  switch (audio->action)
+  {
+    case 't': // transfer
+       if (audio->type == 'u') // implied 8bit
+       {
+         if (audio->channels == 2)
+         {
+           for (int i = 0; i < audio->frames; i++)
+           {
+             int val_left = MuLawDecompressTable[audio->data[i*2]];
+             int val_right = MuLawDecompressTable[audio->data[i*2+1]];
+             terminal_queue_pcm (val_left, val_right);
+           }
+         }
+         else
+         {
+           for (int i = 0; i < audio->frames; i++)
+           {
+             int val = MuLawDecompressTable[audio->data[i]];
+             terminal_queue_pcm (val, val);
+           }
+         }
+       }
+       else if (audio->type == 's')
+       {
+         if (audio->bits == 8)
+         {
+           if (audio->channels == 2)
+           {
+             for (int i = 0; i < audio->frames; i++)
+             {
+               int val_left = 256*((int8_t*)(audio->data))[i*2];
+               int val_right = 256*((int8_t*)(audio->data))[i*2+1];
+               terminal_queue_pcm (val_left, val_right);
+             }
+           }
+           else
+           {
+             for (int i = 0; i < audio->frames; i++)
+             {
+               int val = 256*((int8_t*)(audio->data))[i];
+               terminal_queue_pcm (val, val);
+             }
+           }
+         }
+         else
+         {
+           if (audio->channels == 2)
+           {
+             for (int i = 0; i < audio->frames; i++)
+             {
+               int val_left = ((int16_t*)(audio->data))[i*2];
+               int val_right = ((int16_t*)(audio->data))[i*2+1];
+               terminal_queue_pcm (val_left, val_right);
+             }
+           }
+           else
+           {
+             for (int i = 0; i < audio->frames; i++)
+             {
+               int val = ((int16_t*)(audio->data))[i];
+               terminal_queue_pcm (val, val);
+             }
+           }
+         }
+       }
+       ctx_free (audio->data);
+       audio->data = NULL;
+       audio->data_size=0;
+       break;
+    case 'q': // query
+       {
+         char buf[512];
+         sprintf (buf, "\033_As=%i,b=%i,c=%i,T=%c,B=%i,e=%c,o=%c;OK\033\\",
+      audio->samplerate, audio->bits, audio->channels, audio->type,
+      audio->buffer_size,
+      audio->encoding?audio->encoding:'0',
+      audio->compression?audio->compression:'0'
+      /*audio->transmission*/);
+
+         vt_write (vt, buf, strlen(buf));
+       }
+      break;
+  }
+  }
+
+//cleanup:
+    if (audio->data)
+      ctx_free (audio->data);
+    audio->data = NULL;
+    audio->data_size=0;
+}
+#endif
+/* DEC terminals/xterm family terminal with ANSI, utf8, vector graphics and
+ * audio.
+ *
+ * Copyright (c) 2014, 2016, 2018, 2020 Øyvind Kolås <pippin@gimp.org>
+ *
+ * Adhering to the standards with modern extensions.
+ *
+ * Features:
+ *     vt100 - 101 points on scoresheet
+ *     UTF8, cp437
+ *     dim, bold, strikethrough, underline, italic, reverse
+ *     ANSI colors, 256 colors (non-redefineable), 24bit color
+ *     realtime audio transmission
+ *     raster sprites (kitty spec)
+ *     vector graphics
+ *     vt320 - horizontal margins
+ *     proportional fonts
+ *
+ *     BBS/ANSI-art mode
+ *
+ * 8bit clean
+ *
+ *
+ * Todo:
+ *     DECCIR - cursor state report https://vt100.net/docs/vt510-rm/DECCIR.html
+ *     make absolute positioning take proportional into account
+ *     HTML / PNG / SVG / PDF export of scrollback / screen
+ *     sixels
+ *
+ */
+
+#if CTX_TERMINAL_EVENTS
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <assert.h>
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <termios.h>
+
+#include "ctx.h"
+
+
+#define CTX_VT_USE_FRAMEDIFF 0  // is a larger drain than neccesary when everything is per-byte?
+                                // is anyways currently disabled also in ctx
+
+//#define STB_IMAGE_IMPLEMENTATION
+//#include "stb_image.h"
+
+//#include "vt-line.h"
+//#include "vt.h"
+//#include "ctx-clients.h"
+
+
+
+#define VT_LOG_INFO     (1<<0)
+#define VT_LOG_CURSOR   (1<<1)
+#define VT_LOG_COMMAND  (1<<2)
+#define VT_LOG_WARNING  (1<<3)
+#define VT_LOG_ERROR    (1<<4)
+#define VT_LOG_INPUT    (1<<5)
+#define VT_LOG_ALL       0xff
+
+static int vt_log_mask = VT_LOG_INPUT;
+//static int vt_log_mask = VT_LOG_WARNING | VT_LOG_ERROR;// | VT_LOG_COMMAND;// | VT_LOG_INFO | VT_LOG_COMMAND;
+//static int vt_log_mask = VT_LOG_WARNING | VT_LOG_ERROR | VT_LOG_INFO | VT_LOG_COMMAND | VT_LOG_INPUT;
+//static int vt_log_mask = VT_LOG_ALL;
+
+#if 0
+#define vt_log(domain, fmt, ...)
+
+#define VT_input(str, ...)
+#define VT_info(str, ...)
+#define VT_command(str, ...)
+#define VT_cursor(str, ...)
+#define VT_warning(str, ...)
+#define VT_error(str, ...)
+#else
+#define vt_log(domain, line, a...) \
+        do {fprintf (stderr, "%i %s ", line, domain);fprintf(stderr, ##a);fprintf(stderr, "\n");}while(0)
+#define VT_info(a...) if (vt_log_mask & VT_LOG_INFO) vt_log ("INFO  ", __LINE__, ##a)
+#define VT_input(a...) if (vt_log_mask & VT_LOG_INPUT) vt_log ("INPUT ", __LINE__, ##a)
+#define VT_command(a...) if (vt_log_mask & VT_LOG_COMMAND) vt_log ("CMD   ", __LINE__, ##a)
+#define VT_cursor(a...) if (vt_log_mask & VT_LOG_CURSOR) vt_log ("CURSOR",__LINE__, ##a)
+#define VT_warning(a...) if (vt_log_mask & VT_LOG_WARNING) vt_log ("WARN  ",__LINE__, ##a)
+#define VT_error(a...) if (vt_log_mask & VT_LOG_ERROR) vt_log ("ERROR",__LINE__, ##a)
+
+#endif
+
+#ifndef MIN
+#define MIN(a,b)  ((a)<(b)?(a):(b))
+#endif
+
+static void vt_state_neutral      (VT *vt, int byte);
+static void vt_state_esc          (VT *vt, int byte);
+static void vt_state_osc          (VT *vt, int byte);
+static void vt_state_apc          (VT *vt, int byte);
+static void vt_state_apc_generic  (VT *vt, int byte);
+static void vt_state_sixel        (VT *vt, int byte);
+static void vt_state_esc_sequence (VT *vt, int byte);
+static void vt_state_esc_foo      (VT *vt, int byte);
+static void vt_state_swallow      (VT *vt, int byte);
+static void vt_state_ctx          (VT *vt, int byte);
+static void vt_state_vt52         (VT *vt, int byte);
+
+#if 0
+/* barebones linked list */
+
+typedef struct _CtxList CtxList;
+struct _CtxList
+{
+  void *data;
+  CtxList *next;
+};
+
+static inline int ctx_list_length (CtxList *list)
+{
+  int length = 0;
+  for (CtxList *l = list; l; l = l->next, length++);
+  return length;
+}
+
+static inline void ctx_list_prepend (CtxList **list, void *data)
+{
+  CtxList *new_=ctx_calloc (sizeof (CtxList), 1);
+  new_->next = *list;
+  new_->data = data;
+  *list = new_;
+}
+
+static inline void *ctx_list_last (CtxList *list)
+{
+  if (list)
+    {
+      CtxList *last;
+      for (last = list; last->next; last=last->next);
+      return last->data;
+    }
+  return NULL;
+}
+
+static inline void ctx_list_append (CtxList **list, void *data)
+{
+  CtxList *new_= ctx_calloc (sizeof (CtxList), 1);
+  new_->data=data;
+  if (*list)
+    {
+      CtxList *last;
+      for (last = *list; last->next; last=last->next);
+      last->next = new_;
+      return;
+    }
+  *list = new_;
+  return;
+}
+
+static inline void ctx_list_remove (CtxList **list, void *data)
+{
+  CtxList *iter, *prev = NULL;
+  if ( (*list)->data == data)
+    {
+      prev = (void *) (*list)->next;
+      ctx_free (*list);
+      *list = prev;
+      return;
+    }
+  for (iter = *list; iter; iter = iter->next)
+    if (iter->data == data)
+      {
+        prev->next = iter->next;
+        ctx_free (iter);
+        break;
+      }
+    else
+      { prev = iter; }
+}
+
+static inline void
+ctx_list_insert_before (CtxList **list, CtxList *sibling,
+                       void *data)
+{
+  if (*list == NULL || *list == sibling)
+    {
+      ctx_list_prepend (list, data);
+    }
+  else
+    {
+      CtxList *prev = NULL;
+      for (CtxList *l = *list; l; l=l->next)
+        {
+          if (l == sibling)
+            { break; }
+          prev = l;
+        }
+      if (prev)
+        {
+          CtxList *new_=ctx_calloc (sizeof (CtxList), 1);
+          new_->next = sibling;
+          new_->data = data;
+          prev->next=new_;
+        }
+    }
+}
+#endif
+
+
+typedef enum
+{
+  STYLE_REVERSE         = 1 << 0,
+  STYLE_BOLD            = 1 << 1,
+  STYLE_BLINK           = 1 << 2,
+  STYLE_UNDERLINE       = 1 << 3,
+  STYLE_DIM             = 1 << 4,
+  STYLE_HIDDEN          = 1 << 5,
+  STYLE_ITALIC          = 1 << 6,
+  STYLE_UNDERLINE_VAR   = 1 << 7,
+  STYLE_STRIKETHROUGH   = 1 << 8,
+  STYLE_OVERLINE        = 1 << 9,
+  STYLE_BLINK_FAST      = 1 << 10,
+  STYLE_PROPORTIONAL    = 1 << 11,
+  STYLE_FG_COLOR_SET    = 1 << 12,
+  STYLE_BG_COLOR_SET    = 1 << 13,
+  STYLE_FG24_COLOR_SET  = 1 << 14,
+  STYLE_BG24_COLOR_SET  = 1 << 15,
+  //STYLE_NONERASABLE     = 1 << 16  // needed for selective erase
+} TerminalStyle;
+
+typedef struct Image
+{
+  int kitty_format;
+  int width;
+  int height;
+  int id;
+  int eid_no;
+  int size;
+  uint8_t *data;
+} Image;
+
+#define MAX_IMAGES 128
+
+static Image image_db[MAX_IMAGES]= {{0,},};
+
+static Image *image_query (int id)
+{
+  for (int i = 0; i < MAX_IMAGES; i++)
+    {
+      Image *image = &image_db[i];
+      if (image->id == id)
+        { return image; }
+    }
+  return NULL;
+}
+
+static int image_eid_no = 0;
+
+static CtxList *ctx_vts;
+static Image *image_add (int width,
+                         int height,
+                         int id,
+                         int format,
+                         int size,
+                         uint8_t *data)
+{
+  // look for id if id is not 0
+  Image *image;
+  for (int i = 0; i < MAX_IMAGES; i++)
+    {
+      image = &image_db[i];
+      if (image->data == NULL)
+        { break; }
+    }
+  if (image->data)
+    {
+      // not a good eviction strategy
+      image = &image_db[random() %MAX_IMAGES];
+    }
+  if (image->data)
+    { ctx_free (image->data); }
+  image->kitty_format = format;
+  image->width  = width;
+  image->height = height;
+  image->id     = id;
+  image->size   = size;
+  image->data   = data;
+  image->eid_no = image_eid_no++;
+  return image;
+}
+
+void vtpty_resize (void *data, int cols, int rows, int px_width, int px_height)
+{
+  VtPty *vtpty = data;
+  struct winsize ws;
+  ws.ws_row = rows;
+  ws.ws_col = cols;
+  ws.ws_xpixel = px_width;
+  ws.ws_ypixel = px_height;
+  ioctl (vtpty->pty, TIOCSWINSZ, &ws);
+}
+
+ssize_t vtpty_write (void *data, const void *buf, size_t count)
+{
+  VtPty *vtpty = data;
+  return write (vtpty->pty, buf, count);
+}
+
+ssize_t vtpty_read (void  *data, void *buf, size_t count)
+{
+  VtPty *vtpty = data;
+  return read (vtpty->pty, buf, count);
+}
+
+int vtpty_waitdata (void  *data, int timeout)
+{
+  VtPty *vtpty = data;
+  struct timeval tv;
+  fd_set fdset;
+  FD_ZERO (&fdset);
+  FD_SET (vtpty->pty, &fdset);
+  tv.tv_sec = 0;
+  tv.tv_usec = timeout;
+  tv.tv_sec  = timeout / 1000000;
+  tv.tv_usec = timeout % 1000000;
+  if (select (vtpty->pty+1, &fdset, NULL, NULL, &tv) == -1)
+    {
+      perror ("select");
+      return 0;
+    }
+  if (FD_ISSET (vtpty->pty, &fdset) )
+    {
+      return 1;
+    }
+  return 0;
+}
+
+
+/* on current line */
+static int vt_col_to_pos (VT *vt, int col)
+{
+  int pos = col;
+  if (vt->current_line->contains_proportional)
+    {
+      Ctx *ctx = _ctx_new_drawlist (vt->width, vt->height);
+      ctx_font (ctx, "Regular");
+      ctx_font_size (ctx, vt->font_size);
+      int x = 0;
+      pos = 0;
+      int prev_prop = 0;
+      while (x <= col * vt->cw)
+        {
+          if (vt_line_get_style (vt->current_line, pos) & STYLE_PROPORTIONAL)
+            {
+              x += ctx_glyph_width (ctx, vt_line_get_unichar (vt->current_line, pos) );
+              prev_prop = 1;
+            }
+          else
+            {
+              if (prev_prop)
+                {
+                  int new_cw = vt->cw - ( (x % vt->cw) );
+                  if (new_cw < vt->cw*3/2)
+                    { new_cw += vt->cw; }
+                  x += new_cw;
+                }
+              else
+                {
+                  x += vt->cw;
+                }
+              prev_prop = 0;
+            }
+          pos ++;
+        }
+      pos --;
+      ctx_destroy (ctx);
+    }
+  return pos;
+}
+
+static int vt_margin_left (VT *vt)
+{
+  int left = vt->left_right_margin_mode?vt->margin_left:1;
+  return vt_col_to_pos (vt, left);
+}
+
+#define VT_MARGIN_LEFT vt_margin_left(vt)
+
+static int vt_margin_right (VT *vt)
+{
+  int right = vt->left_right_margin_mode?vt->margin_right:vt->cols;
+  return vt_col_to_pos (vt, right);
+}
+
+#define VT_MARGIN_RIGHT vt_margin_right(vt)
+
+static void vtcmd_reset_to_initial_state (VT *vt, const char *sequence);
+int vt_set_prop (VT *vt, uint32_t key_hash, const char *val);
+uint32_t ctx_strhash (const char *utf8);
+
+static void vt_set_title (VT *vt, const char *new_title)
+{
+  if (vt->inert) return;
+  if (vt->title)
+    { ctx_free (vt->title); }
+  vt->title = ctx_strdup (new_title);
+  vt_set_prop (vt, ctx_strhash ("title"), (char*)new_title);
+}
+
+const char *vt_get_title (VT *vt)
+{
+  return vt->title;
+}
+
+static void vt_run_command (VT *vt, const char *command, const char *term);
+static void vtcmd_set_top_and_bottom_margins (VT *vt, const char *sequence);
+static void vtcmd_set_left_and_right_margins (VT *vt, const char *sequence);
+static void _vt_move_to (VT *vt, int y, int x);
+
+static void vtcmd_clear (VT *vt, const char *sequence)
+{
+  while (vt->lines)
+    {
+      vt_line_free (vt->lines->data, 1);
+      ctx_list_remove (&vt->lines, vt->lines->data);
+    }
+  vt->lines = NULL;
+  vt->line_count = 0;
+
+  if (1)
+  { /* TODO: detect if this is neccesary.. due to images present
+             in lines in scrollback */
+    for (int i=0; i<vt->rows; i++)
+    {
+      vt->current_line = vt_line_new_with_size ("", vt->cols);
+      ctx_list_prepend (&vt->scrollback, vt->current_line);
+      vt->scrollback_count++;
+    }
+  }
+
+  /* populate lines */
+  for (int i=0; i<vt->rows; i++)
+    {
+      vt->current_line = vt_line_new_with_size ("", vt->cols);
+      ctx_list_prepend (&vt->lines, vt->current_line);
+      vt->line_count++;
+    }
+}
+
+#define set_fg_rgb(r, g, b) \
+    vt->cstyle ^= (vt->cstyle & (((uint64_t)((1l<<24)-1))<<16));\
+    vt->cstyle |=  ((uint64_t)(r)<<16);\
+    vt->cstyle |=  ((uint64_t)(g)<<(16+8));\
+    vt->cstyle |=  ((uint64_t)(b)<<(16+8+8));\
+    vt->cstyle |= STYLE_FG_COLOR_SET;\
+    vt->cstyle |= STYLE_FG24_COLOR_SET;\
+
+#define set_bg_rgb(r, g, b) \
+    vt->cstyle ^= (vt->cstyle & (((uint64_t)((1l<<24)-1))<<40));\
+    vt->cstyle |=  ((uint64_t)(r)<<40);\
+    vt->cstyle |=  ((uint64_t)(g)<<(40+8));\
+    vt->cstyle |=  ((uint64_t)(b)<<(40+8+8));\
+    vt->cstyle |= STYLE_BG_COLOR_SET;\
+    vt->cstyle |= STYLE_BG24_COLOR_SET;\
+
+#define set_fg_idx(idx) \
+    vt->cstyle ^= (vt->cstyle & (((uint64_t)((1l<<24)-1))<<16));\
+    vt->cstyle ^= (vt->cstyle & STYLE_FG24_COLOR_SET);\
+    vt->cstyle |=  ((idx)<<16);\
+    vt->cstyle |= STYLE_FG_COLOR_SET;
+
+#define set_bg_idx(idx) \
+    vt->cstyle ^= (vt->cstyle & (((uint64_t)((1l<<24)-1))<<40));\
+    vt->cstyle ^= (vt->cstyle & STYLE_BG24_COLOR_SET);\
+    vt->cstyle |= ((int64_t)(idx)<<40) ;\
+    vt->cstyle |= STYLE_BG_COLOR_SET;
+
+
+static void _vt_compute_cw_ch (VT *vt)
+{
+  vt->cw = (vt->font_size / vt->line_spacing * vt->scale_x) + 0.99;
+  vt->ch = vt->font_size;
+}
+
+static void vtcmd_set_132_col (VT  *vt, int set)
+{
+  // this should probably force the window as well
+  if (set == 0 && vt->scale_x == 1.0f) return;
+  if (set == 1 && vt->scale_x != 1.0f) return;
+  if (set) // 132 col
+    {
+      vt->scale_x = 74.0/132.0; // show all - po
+      //vt->scale_x = 80.0/132.0;
+      vt->scale_y = 1.0;
+      _vt_compute_cw_ch (vt);
+      vt_set_term_size (vt, vt->cols * 132/80.0, vt->rows);
+    }
+  else // 80 col
+    {
+      vt->scale_x = 1.0;
+      vt->scale_y = 1.0;
+      _vt_compute_cw_ch (vt);
+      vt_set_term_size (vt, vt->cols * 80/132.0, vt->rows);
+    }
+}
+
+static void vt_line_feed (VT *vt);
+static void vt_carriage_return (VT *vt);
+
+static int vt_trimlines (VT *vt, int max);
+static void vtcmd_reset_to_initial_state (VT *vt, const char *sequence)
+{
+  VT_info ("reset %s", sequence);
+  if (getenv ("VT_DEBUG") )
+    { vt->debug = 1; }
+  vtcmd_clear (vt, sequence);
+  vt->encoding = 0;
+  vt->bracket_paste = 0;
+  vt->ctx_events = 0;
+  vt->cr_on_lf = 0;
+  vtcmd_set_top_and_bottom_margins (vt, "[r");
+  vtcmd_set_left_and_right_margins (vt, "[s");
+  vt->autowrap               = 1;
+  vt->justify                = 0;
+  vt->cursor_visible         = 1;
+  vt->charset[0]             = 0;
+  vt->charset[1]             = 0;
+  vt->charset[2]             = 0;
+  vt->charset[3]             = 0;
+  vt->bell                   = 3;
+  vt->scale_x                = 1.0;
+  vt->scale_y                = 1.0;
+  vt->saved_x                = 1;
+  vt->saved_y                = 1;
+  vt->saved_style            = 1;
+  vt->reverse_video          = 0;
+  vt->cstyle                 = 0;
+  vt->keyrepeat              = 1;
+  vt->cursor_key_application = 0;
+  vt->argument_buf_len       = 0;
+  vt->argument_buf[0]        = 0;
+  vt->vtpty.done             = 0;
+  vt->result                 = -1;
+  vt->state                  = vt_state_neutral;
+  vt->scroll_on_output       = 0;
+  vt->scroll_on_input        = 1;
+  vt->unit_pixels            = 0;
+  vt->mouse                  = 0;
+  vt->mouse_drag             = 0;
+  vt->mouse_all              = 0;
+  vt->mouse_decimal          = 0;
+  _vt_compute_cw_ch (vt);
+  for (int i = 0; i < MAX_COLS; i++)
+    { vt->tabs[i] = i % 8 == 0? 1 : 0; }
+  _vt_move_to (vt, vt->margin_top, vt->cursor_x);
+  vt_carriage_return (vt);
+  //if (vt->ctx)
+  //  { ctx_reset (vt->ctx); }
+  vt->audio.bits = 8;
+  vt->audio.channels = 1;
+  vt->audio.type = 'u';
+  vt->audio.samplerate = 8000;
+  vt->audio.buffer_size = 1024;
+  vt->audio.encoding = 'a';
+  vt->audio.compression = '0';
+  vt->audio.mic = 0;
+  while (vt->scrollback)
+    {
+      vt_line_free (vt->scrollback->data, 1);
+      ctx_list_remove (&vt->scrollback, vt->scrollback->data);
+    }
+  vt->scrollback_count = 0;
+}
+
+void vt_set_font_size (VT *vt, float font_size)
+{
+  vt->font_size = font_size;
+  _vt_compute_cw_ch (vt);
+}
+
+float       vt_get_font_size      (VT *vt)
+{
+  return vt->font_size;
+}
+
+void vt_set_line_spacing (VT *vt, float line_spacing)
+{
+  vt->line_spacing = line_spacing;
+  _vt_compute_cw_ch (vt);
+}
+
+
+static void ctx_clients_signal_child (int signum)
+{
+  pid_t pid;
+  int   status;
+  if ( (pid = waitpid (-1, &status, WNOHANG) ) != -1)
+    {
+      if (pid)
+        {
+          for (CtxList *l = ctx_vts; l; l=l->next)
+            {
+              VtPty *vt = l->data;
+              if (vt->pid == pid)
+                {
+                  vt->done = 1;
+                  //vt->result = status;
+                }
+            }
+        }
+    }
+}
+
+static void vt_init (VT *vt, int width, int height, float font_size, float line_spacing, int id, int can_launch)
+{
+  static int signal_installed = 0;
+  if (!signal_installed)
+  {
+    signal (SIGCHLD,ctx_clients_signal_child);
+    signal_installed = 1;
+  }
+  vt->id                 = id;
+  vt->lastx              = -1;
+  vt->lasty              = -1;
+  vt->state              = vt_state_neutral;
+  vt->smooth_scroll      = 0;
+  vt->can_launch         = can_launch;
+  vt->scroll_offset      = 0.0;
+  vt->waitdata           = vtpty_waitdata;
+  vt->read               = vtpty_read;
+  vt->write              = vtpty_write;
+  vt->resize             = vtpty_resize;
+  vt->font_to_cell_scale = 0.98;
+  vt->cursor_visible     = 1;
+  vt->lines              = NULL;
+  vt->line_count         = 0;
+  vt->current_line       = NULL;
+  vt->cols               = 0;
+  vt->rows               = 0;
+
+  vt->scrollback_limit   = DEFAULT_SCROLLBACK;
+  vt->argument_buf_len   = 0;
+  vt->argument_buf_cap   = 64;
+  vt->argument_buf       = ctx_malloc (vt->argument_buf_cap);
+  vt->argument_buf[0]    = 0;
+  vt->vtpty.done         = 0;
+  vt->result             = -1;
+  vt->line_spacing       = 1.0;
+  vt->scale_x            = 1.0;
+  vt->scale_y            = 1.0;
+  vt->fg_color[0] = 216;
+  vt->fg_color[1] = 216;
+  vt->fg_color[2] = 216;
+  vt->bg_color[0] = 0;
+  vt->bg_color[1] = 0;
+  vt->bg_color[2] = 0;
+}
+
+static pid_t
+vt_forkpty (int  *amaster,
+            char *aname,
+            const struct termios *termp,
+            const struct winsize *winsize)
+{
+  pid_t pid;
+  int master = posix_openpt (O_RDWR|O_NOCTTY);
+  int slave;
+
+  if (master < 0)
+    return -1;
+  if (grantpt (master) != 0)
+    return -1;
+  if (unlockpt (master) != 0)
+    return -1;
+#if 0
+  char name[1024];
+  if (ptsname_r (master, name, sizeof(name)-1))
+    return -1;
+#else
+  char *name = NULL;
+  if ((name = ptsname (master)) == NULL)
+    return -1;
+#endif
+
+  slave = open(name, O_RDWR|O_NOCTTY);
+
+  if (termp)   tcsetattr(slave, TCSAFLUSH, termp);
+  if (winsize) ioctl(slave, TIOCSWINSZ, winsize);
+
+  pid = fork();
+  if (pid < 0)
+  {
+    return pid;
+  } else if (pid == 0)
+  {
+    close (master);
+    setsid ();
+    dup2 (slave, STDIN_FILENO);
+    dup2 (slave, STDOUT_FILENO);
+    dup2 (slave, STDERR_FILENO);
+
+    close (slave);
+    return 0;
+  }
+  ioctl (slave, TIOCSCTTY, NULL);
+  close (slave);
+  *amaster = master;
+  return pid;
+}
+
+static void
+ctx_child_prepare_env (int was_pidone, const char *term)
+{
+  if (was_pidone)
+  {
+    if (setuid(1000)) fprintf (stderr, "setuid failed\n");
+  }
+  else
+  {
+    for (int i = 3; i<768; i++) { close (i); } /*hack, trying to close xcb */
+  }
+  unsetenv ("TERM");
+  unsetenv ("COLUMNS");
+  unsetenv ("LINES");
+  unsetenv ("TERMCAP");
+  unsetenv ("COLOR_TERM");
+  unsetenv ("COLORTERM");
+  unsetenv ("VTE_VERSION");
+  unsetenv ("CTX_BACKEND");
+  //setenv ("TERM", "ansi", 1);
+  //setenv ("TERM", "vt102", 1);
+  //setenv ("TERM", "vt100", 1);
+  // setenv ("TERM", term?term:"xterm", 1);
+  setenv ("TERM", term?term:"xterm-256color", 1);
+  setenv ("COLORTERM", "truecolor", 1);
+  //setenv ("CTX_VERSION", "0", 1);
+  setenv ("CTX_BACKEND", "ctx", 1); // speeds up launching of clients
+}
+
+void _ctx_add_listen_fd (int fd);
+void _ctx_remove_listen_fd (int fd);
+
+#ifdef EMSCRIPTEN
+
+#define EM_BUFSIZE 81920
+
+char em_inbuf[EM_BUFSIZE]="";
+char em_outbuf[EM_BUFSIZE]="";
+int em_in_len = 0;
+int em_in_pos = 0;
+int em_in_read_pos = 0;
+EMSCRIPTEN_KEEPALIVE int em_out_len = 0;
+int em_out_pos = 0;
+
+ssize_t em_write (void *s, const void *buf, size_t count)
+{
+  const char *src = (const char*)buf;
+  int i;
+  for (i = 0; i < count && em_out_len < EM_BUFSIZE; i ++)
+  {
+    em_outbuf[em_out_pos++] = src[i];
+    em_out_len++;
+    if (em_out_pos >= EM_BUFSIZE)em_out_pos = 0;
+  }
+  if (em_out_len >= EM_BUFSIZE)
+    printf ("em_outbuf overflow\n");
+  else
+  EM_ASM({
+    console.log('a a ' + UTF8ToString($1));
+    ws.send(new Blob([UTF8ToString($0)]));
+    }, src
+       );
+
+  return i;
+}
+
+EMSCRIPTEN_KEEPALIVE
+ssize_t em_buffer (void *s, const void *buf, size_t count)
+{
+  const char *src = (const char*)buf;
+  int i;
+  for (i = 0; i < count && em_in_len < EM_BUFSIZE; i ++)
+  {
+    em_inbuf[em_in_pos++] = src[i];
+    em_in_len++;
+    if (em_in_pos >= EM_BUFSIZE)em_in_pos = 0;
+    if (src[i]=='\n')
+    {
+      em_inbuf[em_in_pos++] = '\r';
+      em_in_len++;
+      if (em_in_pos >= EM_BUFSIZE)em_in_pos = 0;
+    }
+  }
+  if (em_in_len >= EM_BUFSIZE)
+    printf ("em_inbuf overflow\n");
+  return i;
+}
+
+ssize_t em_read    (void *serial_obj, void *buf, size_t count)
+{
+  char *dst = (char*)buf;
+  if (em_in_len)
+  {
+    *dst = em_inbuf[em_in_read_pos++];
+    --em_in_len;
+    if (em_in_read_pos>=EM_BUFSIZE)em_in_read_pos = 0;
+    return 1;
+  }
+  return 0;
+}
+  int     em_waitdata (void *serial_obj, int timeout)
+{
+  return em_in_len;
+}
+
+  void    em_resize  (void *serial_obj, int cols, int rows, int px_width, int px_height)
+{
+}
+
+
+#endif
+
+
+static void vt_run_argv (VT *vt, char **argv, const char *term)
+{
+#ifdef EMSCRIPTEN
+        vt->read = em_read;
+        vt->write = em_write;
+        vt->waitdata = em_waitdata;
+        vt->resize = em_resize;
+
+        printf ("aaa?\n");
+#else
+  struct winsize ws;
+  //signal (SIGCHLD,signal_child);
+#if 0
+  int was_pidone = (getpid () == 1);
+#else
+  int was_pidone = 0; // do no special treatment, all child processes belong
+                      // to root
+#endif
+  signal (SIGINT,SIG_DFL);
+  ws.ws_row = vt->rows;
+  ws.ws_col = vt->cols;
+  ws.ws_xpixel = ws.ws_col * vt->cw;
+  ws.ws_ypixel = ws.ws_row * vt->ch;
+  vt->vtpty.pid = vt_forkpty (&vt->vtpty.pty, NULL, NULL, &ws);
+  if (vt->vtpty.pid == 0)
+    {
+      ctx_child_prepare_env (was_pidone, term);
+
+      execvp (argv[0], (char**)argv);
+      exit (0);
+    }
+  else if (vt->vtpty.pid < 0)
+    {
+      VT_error ("forkpty failed (%s)", argv[0]);
+      return;
+    }
+  fcntl(vt->vtpty.pty, F_SETFL, O_NONBLOCK|O_NOCTTY);
+  _ctx_add_listen_fd (vt->vtpty.pty);
+#endif
+}
+
+
+VT *vt_new_argv (char **argv, int width, int height, float font_size, float line_spacing, int id, int can_launch)
+{
+  VT *vt                 = ctx_calloc (sizeof (VT), 1);
+  vt_init (vt, width, height, font_size, line_spacing, id, can_launch);
+  vt_set_font_size (vt, font_size);
+  vt_set_line_spacing (vt, line_spacing);
+  if (argv)
+    {
+      vt_run_argv (vt, argv, NULL);
+    }
+  if (width <= 0) width = 640;
+  if (height <= 0) width = 480;
+  vt_set_px_size (vt, width, height);
+
+  vtcmd_reset_to_initial_state (vt, NULL);
+  //vt->ctx = ctx_new ();
+  ctx_list_prepend (&ctx_vts, vt);
+  return vt;
+}
+
+static char *string_chop_head (char *orig) /* return pointer to reset after arg */
+{
+  int j=0;
+  int eat=0; /* number of chars to eat at start */
+
+  if(orig)
+    {
+      int got_more;
+      char *o = orig;
+      while(o[j] == ' ')
+        {j++;eat++;}
+
+      if (o[j]=='"')
+        {
+          eat++;j++;
+          while(o[j] != '"' &&
+                o[j] != 0)
+            j++;
+          o[j]='\0';
+          j++;
+        }
+      else if (o[j]=='\'')
+        {
+          eat++;j++;
+          while(o[j] != '\'' &&
+                o[j] != 0)
+            j++;
+          o[j]='\0';
+          j++;
+        }
+      else
+        {
+          while(o[j] != ' ' &&
+                o[j] != 0 &&
+                o[j] != ';')
+            j++;
+        }
+      if (o[j] == 0 ||
+          o[j] == ';')
+        got_more = 0;
+      else
+        got_more = 1;
+      o[j]=0; /* XXX: this is where foo;bar won't work but foo ;bar works*/
+
+      if(eat)
+       {
+         int k;
+         for (k=0; k<j-eat; k++)
+           orig[k] = orig[k+eat];
+       }
+      if (got_more)
+        return &orig[j+1];
+    }
+  return NULL;
+}
+
+
+VT *vt_new (const char *command, int width, int height, float font_size, float line_spacing, int id, int can_launch)
+{
+  char *cargv[32];
+  int   cargc;
+  char *rest, *copy;
+  copy = ctx_calloc (strlen (command)+2, 1);
+  strcpy (copy, command);
+  rest = copy;
+  cargc = 0;
+  while (rest && cargc < 30 && rest[0] != ';')
+  {
+    cargv[cargc++] = rest;
+    rest = string_chop_head (rest);
+  }
+  cargv[cargc] = NULL;
+  return vt_new_argv ((char**)cargv, width, height, font_size, line_spacing, id, can_launch);
+}
+
+
+int vt_cw (VT *vt)
+{
+  return vt->cw;
+}
+
+int vt_ch (VT *vt)
+{
+  return vt->ch;
+}
+
+static int vt_trimlines (VT *vt, int max)
+{
+  CtxList *chop_point = NULL;
+  CtxList *l;
+  int i;
+  if (vt->line_count < max)
+    { 
+      return 0;
+    }
+  for (l = vt->lines, i = 0; l && i < max-1; l = l->next, i++);
+  if (l)
+    {
+      chop_point = l->next;
+      l->next = NULL;
+    }
+  while (chop_point)
+    {
+      if (vt->in_alt_screen)
+        {
+          vt_line_free (chop_point->data, 1);
+        }
+      else
+        {
+          ctx_list_prepend (&vt->scrollback, chop_point->data);
+          vt->scrollback_count ++;
+        }
+      ctx_list_remove (&chop_point, chop_point->data);
+      vt->line_count--;
+    }
+  if (vt->scrollback_count > vt->scrollback_limit + 1024)
+    {
+      CtxList *l = vt->scrollback;
+      int no = 0;
+      while (l && no < vt->scrollback_limit)
+        {
+          l = l->next;
+          no++;
+        }
+      chop_point = NULL;
+      if (l)
+        {
+          chop_point = l->next;
+          l->next = NULL;
+        }
+      while (chop_point)
+        {
+          vt_line_free (chop_point->data, 1);
+          ctx_list_remove (&chop_point, chop_point->data);
+          vt->scrollback_count --;
+        }
+    }
+  return 0;
+}
+
+static void vt_rewrap_pair (VT *vt, VtLine *topline, VtLine *bottomline, int max_col)
+{
+  int toplen = 0;
+
+  while ((toplen = vt_line_get_utf8length (topline)) > max_col)
+  {
+     uint32_t unichar = vt_line_get_unichar (topline, toplen-1);
+     uint32_t style =  vt_line_get_style (topline, toplen-1);
+     vt_line_insert_unichar (bottomline, 0, unichar);
+     vt_line_remove (topline, toplen-1);
+     vt_line_set_style (bottomline, 0, style);
+  }
+
+  while (vt_line_get_length (bottomline) &&
+         (toplen = vt_line_get_utf8length (topline)) < max_col)
+  {
+     uint32_t unichar = vt_line_get_unichar (bottomline, 0);
+     uint32_t style =  vt_line_get_style (bottomline, 0);
+     vt_line_append_unichar (topline, unichar);
+     vt_line_set_style (topline, toplen, style);
+     vt_line_remove (bottomline, 0);
+  }
+}
+
+static void vt_rewrap (VT *vt, int max_col)
+{
+  if (max_col < 8) max_col = 8;
+  CtxList *list = NULL;
+
+  for (CtxList *l = vt->lines; l;)
+  {
+    CtxList *next = l->next;
+    ctx_list_prepend (&list, l->data);
+    ctx_list_remove (&vt->lines, l->data);
+    l = next;
+  }
+  for (CtxList *l = vt->scrollback; l;)
+  {
+    CtxList *next = l->next;
+    ctx_list_prepend (&list, l->data);
+    ctx_list_remove (&vt->scrollback, l->data);
+    l = next;
+  }
+
+  for (CtxList *l = list; l; l = l->next)
+    {
+      VtLine *line = l->data;
+      VtLine *next = l->next ?l->next->data:NULL;
+
+      if (vt_line_get_utf8length (line) >= max_col || (next && next->wrapped))
+      {
+        if (!next)
+        {
+          ctx_list_append (&list, vt_line_new (""));
+          next = l->next->data;
+          next->wrapped = 1;
+        }
+        else if (!next->wrapped)
+        {
+          ctx_list_insert_before (&list, l->next, vt_line_new (""));
+          next = l->next->data;
+          next->wrapped = 1;
+        } 
+        vt_rewrap_pair (vt, line, next, max_col);
+        if (vt_line_get_utf8length (next) == 0)
+          ctx_list_remove (&list, l->next->data);
+      }
+    }
+
+  int rows = vt->rows;
+  int total_rows = ctx_list_length (list);
+
+  int scrollback_rows = total_rows - rows;
+
+  int c = 0;
+  CtxList *l;
+  for (l = list; l && c < scrollback_rows;)
+  {
+    CtxList *next = l->next;
+    ctx_list_prepend (&vt->scrollback, l->data);
+    ctx_list_remove (&list, l->data);
+    l = next;
+    c++;
+  }
+  for (; l ;)
+  {
+    CtxList *next = l->next;
+    ctx_list_prepend (&vt->lines, l->data);
+    ctx_list_remove (&list, l->data);
+    l = next;
+    c++;
+  }
+}
+
+void vt_set_term_size (VT *vt, int icols, int irows)
+{
+  if (vt->rows == irows && vt->cols == icols)
+    return;
+
+  if (vt->state == vt_state_ctx)
+  {
+    // we should queue a pending resize instead,
+    // .. or set a flag indicating that the last
+    // rendered frame is discarded?
+    return;
+  }
+
+  if(1)vt_rewrap (vt, icols);
+
+  while (irows > vt->rows)
+    {
+      if (vt->scrollback_count && vt->scrollback)
+        {
+          vt->scrollback_count--;
+          ctx_list_append (&vt->lines, vt->scrollback->data);
+          ctx_list_remove (&vt->scrollback, vt->scrollback->data);
+          vt->cursor_y++;
+        }
+      else
+        {
+          ctx_list_prepend (&vt->lines, vt_line_new_with_size ("", vt->cols) );
+        }
+      vt->line_count++;
+      vt->rows++;
+    }
+  while (irows < vt->rows)
+    {
+      vt->cursor_y--;
+      vt->rows--;
+    }
+  vt->rows = irows;
+  vt->cols = icols;
+  vt_resize (vt, vt->cols, vt->rows, vt->width, vt->height);
+  vt_trimlines (vt, vt->rows);
+  vt->margin_top     = 1;
+  vt->margin_left    = 1;
+  vt->margin_bottom  = vt->rows;
+  vt->margin_right   = vt->cols;
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  ctx_client_rev_inc (vt->client);
+  VT_info ("resize %i %i", irows, icols);
+  if (vt->ctxp)
+    ctx_parser_destroy (vt->ctxp);
+  vt->ctxp = NULL;
+}
+
+void vt_set_px_size (VT *vt, int width, int height)
+{
+  int cols = width / vt->cw;
+  int rows = height / vt->ch;
+  vt->width = width;
+  vt->height = height;
+  vt_set_term_size (vt, cols, rows);
+}
+
+static void vt_argument_buf_reset (VT *vt, const char *start)
+{
+  if (start)
+    {
+      strcpy (vt->argument_buf, start);
+      vt->argument_buf_len = strlen (start);
+    }
+  else
+    { vt->argument_buf[vt->argument_buf_len=0]=0; }
+}
+
+static inline void vt_argument_buf_add (VT *vt, int ch)
+{
+  if (vt->argument_buf_len + 1 >= 1024 * 1024 * 16)
+    return; 
+  //
+  if (vt->argument_buf_len + 1 >=
+      vt->argument_buf_cap)
+    {
+      vt->argument_buf_cap = vt->argument_buf_cap * 2;
+      vt->argument_buf = ctx_realloc (vt->argument_buf, vt->argument_buf_cap/2, vt->argument_buf_cap);
+    }
+  vt->argument_buf[vt->argument_buf_len] = ch;
+  vt->argument_buf[++vt->argument_buf_len] = 0;
+}
+
+static void
+_vt_move_to (VT *vt, int y, int x)
+{
+  int i;
+  x = x < 1 ? 1 : (x > vt->cols ? vt->cols : x);
+  y = y < 1 ? 1 : (y > vt->rows ? vt->rows : y);
+  vt->at_line_home = 0;
+  vt->cursor_x = x;
+  vt->cursor_y = y;
+  i = vt->rows - y;
+  CtxList *l;
+  for (l = vt->lines; l && i >= 1; l = l->next, i--);
+  if (l)
+    {
+      vt->current_line = l->data;
+    }
+  else
+    {
+      for (; i > 0; i--)
+        {
+          vt->current_line = vt_line_new_with_size ("", vt->cols);
+          ctx_list_append (&vt->lines, vt->current_line);
+          vt->line_count++;
+        }
+    }
+  VT_cursor ("%i,%i (_vt_move_to)", y, x);
+  ctx_client_rev_inc (vt->client);
+}
+
+static void vt_scroll (VT *vt, int amount);
+
+static void _vt_add_str (VT *vt, const char *str)
+{
+  int logical_margin_right = VT_MARGIN_RIGHT;
+  if (vt->cstyle & STYLE_PROPORTIONAL)
+    { vt->current_line->contains_proportional = 1; }
+  if (vt->cursor_x > logical_margin_right)
+    {
+      if (vt->autowrap)
+        {
+          int chars = 0;
+          int old_x = vt->cursor_x;
+          VtLine *old_line = vt->current_line;
+          if (vt->justify && str[0] != ' ')
+            {
+              while (old_x-1-chars >1 && vt_line_get_unichar (vt->current_line,
+                     old_x-1-chars) !=' ')
+                {
+                  chars++;
+                }
+              chars--;
+              if (chars > (vt->margin_right - vt->margin_left) * 3 / 2)
+                { chars = 0; }
+            }
+          if (vt->cursor_y == vt->margin_bottom)
+            {
+              vt_scroll (vt, -1);
+            }
+          else
+            {
+              _vt_move_to (vt, vt->cursor_y+1, 1);
+            }
+          vt->current_line->wrapped=1;
+          vt_carriage_return (vt);
+          for (int i = 0; i < chars; i++)
+            {
+              vt_line_set_style (vt->current_line, vt->cursor_x-1, vt->cstyle);
+              vt_line_replace_unichar (vt->current_line, vt->cursor_x - 1,
+                                         vt_line_get_unichar (old_line, old_x-1-chars+i) );
+              vt->cursor_x++;
+            }
+          for (int i = 0; i < chars; i++)
+            {
+              vt_line_replace_unichar (old_line, old_x-1-chars+i, ' ');
+            }
+          if (str[0] == ' ')
+            return;
+        }
+      else
+        {
+          vt->cursor_x = logical_margin_right;
+        }
+    }
+  if (vt->insert_mode)
+    {
+      vt_line_insert_utf8 (vt->current_line, vt->cursor_x - 1, str);
+      while (vt->current_line->string.utf8_length > logical_margin_right)
+        { vt_line_remove (vt->current_line, logical_margin_right); }
+    }
+  else
+    {
+      vt_line_replace_utf8 (vt->current_line, vt->cursor_x - 1, str);
+    }
+  vt_line_set_style (vt->current_line, vt->cursor_x-1, vt->cstyle);
+  vt->cursor_x += 1;
+  vt->at_line_home = 0;
+  ctx_client_rev_inc (vt->client);
+}
+
+static void _vt_backspace (VT *vt)
+{
+  if (vt->current_line)
+    {
+      vt->cursor_x --;
+      if (vt->cursor_x == VT_MARGIN_RIGHT) { vt->cursor_x--; }
+      if (vt->cursor_x < VT_MARGIN_LEFT)
+        {
+          vt->cursor_x = VT_MARGIN_LEFT;
+          vt->at_line_home = 1;
+        }
+      VT_cursor ("backspace");
+    }
+  ctx_client_rev_inc (vt->client);
+}
+
+static void vtcmd_set_top_and_bottom_margins (VT *vt, const char *sequence)
+{
+  int top = 1, bottom = vt->rows;
+  /* w3m issues this; causing reset of cursor position, why it is issued
+   * is unknown 
+   */
+  if (!strcmp (sequence, "[?1001r"))
+    return;
+  if (strlen (sequence) > 2)
+    {
+      sscanf (sequence, "[%i;%ir", &top, &bottom);
+    }
+  VT_info ("margins: %i %i", top, bottom);
+  if (top <1) { top = 1; }
+  if (top > vt->rows) { top = vt->rows; }
+  if (bottom > vt->rows) { bottom = vt->rows; }
+  if (bottom < top) { bottom = top; }
+  vt->margin_top = top;
+  vt->margin_bottom = bottom;
+#if 0
+  _vt_move_to (vt, top, 1);
+#endif
+  vt_carriage_return (vt);
+  VT_cursor ("%i, %i (home)", top, 1);
+}
+static void vtcmd_save_cursor_position (VT *vt, const char *sequence);
+
+static void vtcmd_set_left_and_right_margins (VT *vt, const char *sequence)
+{
+  int left = 1, right = vt->cols;
+  if (!vt->left_right_margin_mode)
+    {
+      vtcmd_save_cursor_position (vt, sequence);
+      return;
+    }
+  if (strlen (sequence) > 2)
+    {
+      sscanf (sequence, "[%i;%is", &left, &right);
+    }
+  VT_info ("hor margins: %i %i", left, right);
+  if (left <1) { left = 1; }
+  if (left > vt->cols) { left = vt->cols; }
+  if (right > vt->cols) { right = vt->cols; }
+  if (right < left) { right = left; }
+  vt->margin_left = left;
+  vt->margin_right = right;
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  vt_carriage_return (vt);
+  //VT_cursor ("%i, %i (home)", left, 1);
+}
+
+static inline int parse_int (const char *arg, int def_val)
+{
+  if (!isdigit (arg[1]) || strlen (arg) == 2)
+    { return def_val; }
+  return atoi (arg+1);
+}
+
+
+static void vtcmd_set_line_home (VT *vt, const char *sequence)
+{
+  int val = parse_int (sequence, 1);
+  char buf[256];
+  vt->left_right_margin_mode = 1;
+  sprintf (buf, "[%i;%it", val, vt->margin_right);
+  vtcmd_set_left_and_right_margins (vt, buf);
+}
+
+static void vtcmd_set_line_limit (VT *vt, const char *sequence)
+{
+  int val = parse_int (sequence, 0);
+  char buf[256];
+  vt->left_right_margin_mode = 1;
+  if (val < vt->margin_left) { val = vt->margin_left; }
+  sprintf (buf, "[%i;%it", vt->margin_left, val);
+  vtcmd_set_left_and_right_margins (vt, buf);
+}
+
+static void vt_scroll (VT *vt, int amount)
+{
+  int remove_no, insert_before;
+  VtLine *string = NULL;
+  if (amount == 0) { amount = 1; }
+  if (amount < 0)
+    {
+      remove_no = vt->margin_top;
+      insert_before = vt->margin_bottom;
+    }
+  else
+    {
+      remove_no = vt->margin_bottom;
+      insert_before = vt->margin_top;
+    }
+  CtxList *l;
+  int i;
+  for (i=vt->rows, l = vt->lines; i > 0 && l; l=l->next, i--)
+    {
+      if (i == remove_no)
+        {
+          string = l->data;
+          ctx_list_remove (&vt->lines, string);
+          break;
+        }
+    }
+  if (string)
+    {
+      if (!vt->in_alt_screen &&
+          (vt->margin_top == 1 && vt->margin_bottom == vt->rows) )
+        {
+          ctx_list_prepend (&vt->scrollback, string);
+          vt->scrollback_count ++;
+        }
+      else
+        {
+          vt_line_free (string, 1);
+        }
+    }
+  string = vt_line_new_with_size ("", vt->cols/4);
+  if (amount > 0 && vt->margin_top == 1)
+    {
+      ctx_list_append (&vt->lines, string);
+    }
+  else
+    {
+      for (i=vt->rows, l = vt->lines; l; l=l->next, i--)
+        {
+          if (i == insert_before)
+            {
+              ctx_list_insert_before (&vt->lines, l, string);
+              break;
+            }
+        }
+      if (i != insert_before)
+        {
+          ctx_list_append (&vt->lines, string);
+        }
+    }
+  vt->current_line = string;
+  /* not updating line count since we should always remove one and add one */
+  if (vt->smooth_scroll)
+    {
+      if (amount < 0)
+        {
+          vt->scroll_offset = -1.0;
+          vt->in_smooth_scroll = -1;
+        }
+      else
+        {
+          vt->scroll_offset = 1.0;
+          vt->in_smooth_scroll = 1;
+        }
+    }
+
+  {
+    vt->select_begin_row += amount;
+    vt->select_end_row += amount;
+    vt->select_start_row += amount;
+  }
+}
+
+typedef struct Sequence
+{
+  const char *prefix;
+  char        suffix;
+  void (*vtcmd) (VT *vt, const char *sequence);
+  uint32_t    compat;
+} Sequence;
+
+static void vtcmd_cursor_position (VT *vt, const char *sequence)
+{
+  int y = 1, x = 1;
+  const char *semi;
+  if (sequence[0] != 'H' && sequence[0] != 'f')
+    {
+      y = parse_int (sequence, 1);
+      if ( (semi = strchr (sequence, ';') ) )
+        {
+          x = parse_int (semi, 1);
+        }
+    }
+  if (x == 0) { x = 1; }
+  if (y == 0) { y = 1; }
+  if (vt->origin)
+    {
+      y += vt->margin_top - 1;
+      _vt_move_to (vt, y, vt->cursor_x);
+      x += VT_MARGIN_LEFT - 1;
+    }
+  VT_cursor ("%i %i CUP", y, x);
+  _vt_move_to (vt, y, x);
+}
+
+
+static void vtcmd_horizontal_position_absolute (VT *vt, const char *sequence)
+{
+  int x = parse_int (sequence, 1);
+  if (x<=0) { x = 1; }
+  _vt_move_to (vt, vt->cursor_y, x);
+}
+
+static void vtcmd_goto_row (VT *vt, const char *sequence)
+{
+  int y = parse_int (sequence, 1);
+  _vt_move_to (vt, y, vt->cursor_x);
+}
+
+static void vtcmd_cursor_forward (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      vt->cursor_x++;
+    }
+  if (vt->cursor_x > VT_MARGIN_RIGHT)
+    { vt->cursor_x = VT_MARGIN_RIGHT; }
+}
+
+static void vtcmd_cursor_backward (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      vt->cursor_x--;
+    }
+  if (vt->cursor_x < VT_MARGIN_LEFT)
+    {
+      vt->cursor_x = VT_MARGIN_LEFT; // should this wrap??
+      vt->at_line_home = 1;
+    }
+}
+
+static void vtcmd_reverse_index (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      if (vt->cursor_y == vt->margin_top)
+        {
+          vt_scroll (vt, 1);
+          _vt_move_to (vt, vt->margin_top, vt->cursor_x);
+        }
+      else
+        {
+          _vt_move_to (vt, vt->cursor_y-1, vt->cursor_x);
+        }
+    }
+}
+
+static void vtcmd_cursor_up (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      if (vt->cursor_y == vt->margin_top)
+        {
+          //_vt_move_to (vt, 1, vt->cursor_x);
+        }
+      else
+        {
+          _vt_move_to (vt, vt->cursor_y-1, vt->cursor_x);
+        }
+    }
+}
+
+static void vtcmd_back_index (VT *vt, const char *sequence)
+{
+  // XXX implement
+}
+
+static void vtcmd_forward_index (VT *vt, const char *sequence)
+{
+  // XXX implement
+}
+
+static void vtcmd_index (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      if (vt->cursor_y == vt->margin_bottom)
+        {
+          vt_scroll (vt, -1);
+          _vt_move_to (vt, vt->margin_bottom, vt->cursor_x);
+        }
+      else
+        {
+          _vt_move_to (vt, vt->cursor_y + 1, vt->cursor_x);
+        }
+    }
+}
+
+static void vtcmd_cursor_down (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n==0) { n = 1; }
+  for (int i = 0; i < n; i++)
+    {
+      if (vt->cursor_y >= vt->margin_bottom)
+        {
+          _vt_move_to (vt, vt->margin_bottom, vt->cursor_x);
+        }
+      else
+        {
+          _vt_move_to (vt, vt->cursor_y + 1, vt->cursor_x);
+        }
+    }
+}
+
+static void vtcmd_next_line (VT *vt, const char *sequence)
+{
+  vtcmd_index (vt, sequence);
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  vt_carriage_return (vt);
+  vt->cursor_x = VT_MARGIN_LEFT;
+}
+
+static void vtcmd_cursor_preceding_line (VT *vt, const char *sequence)
+{
+  vtcmd_cursor_up (vt, sequence);
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  vt->cursor_x = VT_MARGIN_LEFT;
+}
+
+static void vtcmd_erase_in_line (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 0);
+  switch (n)
+    {
+      case 0: // clear to end of line
+        {
+          char *p = (char *) mrg_utf8_skip (vt->current_line->string.str, vt->cursor_x-1);
+          if (p) { *p = 0; }
+          // XXX : this is chopping lines
+          for (int col = vt->cursor_x; col <= VT_MARGIN_RIGHT; col++)
+            { vt_line_set_style (vt->current_line, col - 1, vt->cstyle); }
+          vt->current_line->string.length = strlen (vt->current_line->string.str);
+          vt->current_line->string.utf8_length = ctx_utf8_strlen (vt->current_line->string.str);
+        }
+        break;
+      case 1: // clear from beginning to cursor
+        {
+          for (int col = VT_MARGIN_LEFT; col <= vt->cursor_x; col++)
+            {
+              vt_line_replace_utf8 (vt->current_line, col-1, " ");
+            }
+          for (int col = VT_MARGIN_LEFT; col <= vt->cursor_x; col++)
+            { vt_line_set_style (vt->current_line, col-1, vt->cstyle); }
+          vt->current_line->string.length = strlen (vt->current_line->string.str);
+          vt->current_line->string.utf8_length = ctx_utf8_strlen (vt->current_line->string.str); // should be a nop
+        }
+        break;
+      case 2: // clear entire line
+        for (int col = VT_MARGIN_LEFT; col <= VT_MARGIN_RIGHT; col++)
+          { vt_line_set_style (vt->current_line, col-1, vt->cstyle); }
+        vt_line_set (vt->current_line, ""); // XXX not all
+        break;
+    }
+}
+
+static void vtcmd_erase_in_display (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 0);
+  switch (n)
+    {
+      case 0: // clear to end of screen
+        {
+          char *p = (char *) mrg_utf8_skip (vt->current_line->string.str, vt->cursor_x-1);
+          if (p) { *p = 0; }
+          vt->current_line->string.length = strlen (vt->current_line->string.str);
+          vt->current_line->string.utf8_length = ctx_utf8_strlen (vt->current_line->string.str);
+        }
+        for (int col = vt->cursor_x; col <= VT_MARGIN_RIGHT; col++)
+          { vt_line_set_style (vt->current_line, col-1, vt->cstyle); }
+        {
+          CtxList *l;
+          int no = vt->rows;
+          for (l = vt->lines; l->data != vt->current_line; l = l->next, no--)
+            {
+              VtLine *buf = l->data;
+              buf->string.str[0] = 0;
+              buf->string.length = 0;
+              buf->string.utf8_length = 0;
+              for (int col = 1; col <= vt->cols; col++)
+                { vt_line_set_style (buf, col-1, vt->cstyle); }
+            }
+        }
+        break;
+      case 1: // clear from beginning to cursor
+        {
+          for (int col = 1; col <= vt->cursor_x; col++)
+            {
+              vt_line_replace_utf8 (vt->current_line, col-1, " ");
+              vt_line_set_style (vt->current_line, col-1, vt->cstyle);
+            }
+        }
+        {
+          CtxList *l;
+          int there_yet = 0;
+          int no = vt->rows;
+          for (l = vt->lines; l; l = l->next, no--)
+            {
+              VtLine *buf = l->data;
+              if (there_yet)
+                {
+                  buf->string.str[0] = 0;
+                  buf->string.length = 0;
+                  buf->string.utf8_length = 0;
+                  for (int col = 1; col <= vt->cols; col++)
+                    { vt_line_set_style (buf, col-1, vt->cstyle); }
+                }
+              if (buf == vt->current_line)
+                {
+                  there_yet = 1;
+                }
+            }
+        }
+        break;
+      case 3: // also clear scrollback
+        while (vt->scrollback)
+        {
+           vt_line_free (vt->scrollback->data, 1);
+           ctx_list_remove (&vt->scrollback, vt->scrollback->data);
+         }
+        vt->scrollback_count = 0;
+        /* FALLTHROUGH */
+      case 2: // clear entire screen but keep cursor;
+        {
+          int tx = vt->cursor_x;
+          int ty = vt->cursor_y;
+          vtcmd_clear (vt, "");
+          _vt_move_to (vt, ty, tx);
+          for (CtxList *l = vt->lines; l; l = l->next)
+            {
+              VtLine *line = l->data;
+              for (int col = 1; col <= vt->cols; col++)
+                { vt_line_set_style (line, col-1, vt->cstyle); }
+            }
+        }
+        break;
+    }
+}
+
+static void vtcmd_screen_alignment_display (VT *vt, const char *sequence)
+{
+  for (int y = 1; y <= vt->rows; y++)
+    {
+      _vt_move_to (vt, y, 1);
+      for (int x = 1; x <= vt->cols; x++)
+        {
+          _vt_add_str (vt, "E");
+        }
+    }
+}
+
+#if 0
+static int find_idx (int r, int g, int b)
+{
+  r = r / 255.0f * 5;
+  g = g / 255.0f * 5;
+  b = b / 255.0f * 5;
+  return 16 + r * 6 * 6 + g * 6 + b;
+}
+#endif
+
+static void vtcmd_set_graphics_rendition (VT *vt, const char *sequence)
+{
+  const char *s = sequence;
+  if (s[0]) { s++; }
+  while (s && *s)
+    {
+      int n = parse_int (s - 1, 0); // works until color
+      // both fg and bg could be set in 256 color mode FIXME
+      //
+      /* S_GR@38@Set forground color@foo bar baz@ */
+      if (n == 38) // set foreground
+        {
+          s = strchr (s, ';');
+          if (!s)
+            {
+              VT_warning ("incomplete [38m expected ;  %s", sequence);
+              return;
+            }
+          n = parse_int (s, 0);
+          if (n == 5)
+            {
+              s++;
+              if (strchr (s, ';') )
+                { s = strchr (s, ';'); }
+              else
+                { s = strchr (s, ':'); }
+              if (s)
+                {
+                  n = parse_int (s, 0);
+                  set_fg_idx (n);
+                  s++;
+                  while (*s && *s >= '0' && *s <='9') { s++; }
+                }
+            }
+          else if (n == 2)
+            {
+              int r = 0, g = 0, b = 0;
+              s++;
+              if (strchr (s, ';') )
+                {
+                  s = strchr (s, ';');
+                  if (s)
+                    { sscanf (s, ";%i;%i;%i", &r, &g, &b); }
+                }
+              else
+                {
+                  s = strchr (s, ':');
+                  if (s)
+                    { sscanf (s, ":%i:%i:%i", &r, &g, &b); }
+                }
+              if (s)
+              for (int i = 0; i < 3; i++)
+                {
+                  if (*s)
+                    {
+                      s++;
+                      while (*s && *s >= '0' && *s <='9') { s++; }
+                    }
+                }
+              set_fg_rgb (r,g,b);
+            }
+          else
+            {
+              VT_warning ("unhandled %s %i", sequence, n);
+              return;
+            }
+          //return; // XXX we should continue, and allow further style set after complex color
+        }
+      else if (n == 48) // set background
+        {
+          s = strchr (s, ';');
+          if (!s)
+            {
+              VT_warning ("incomplete [38m expected ;  %s", sequence);
+              return;
+            }
+          n = parse_int (s, 0);
+          if (n == 5)
+            {
+              s++;
+              if (strchr (s, ';') )
+                { s = strchr (s, ';'); }
+              else
+                { s = strchr (s, ':'); }
+              if (s)
+                { n = parse_int (s, 0); }
+              set_bg_idx (n);
+              if (s)
+                {
+                  s++;
+                  while (*s && *s >= '0' && *s <='9') { s++; }
+                }
+            }
+          else if (n == 2)
+            {
+              int r = 0, g = 0, b = 0;
+              s++;
+              if (strchr (s, ';') )
+                {
+                  s = strchr (s, ';');
+                  if (s)
+                    { sscanf (s, ";%i;%i;%i", &r, &g, &b); }
+                }
+              else
+                {
+                  s = strchr (s, ':');
+                  if (s)
+                    { sscanf (s, ":%i:%i:%i", &r, &g, &b); }
+                }
+              if (s)
+              for (int i = 0; i < 3; i++)
+                {
+                  s++;
+                  while (*s >= '0' && *s <='9') { s++; }
+                }
+              set_bg_rgb (r,g,b);
+            }
+          else
+            {
+              VT_warning ("unhandled %s %i", sequence, n);
+              return;
+            }
+          //return; // we XXX should continue, and allow further style set after complex color
+        }
+      else
+        switch (n)
+          {
+            case 0: /* SGR@0@Style reset@@ */
+              if (vt->cstyle & STYLE_PROPORTIONAL)
+                { vt->cstyle = STYLE_PROPORTIONAL; }
+              else
+                { vt->cstyle = 0; }
+              break;
+            case 1: /* SGR@@Bold@@ */
+              vt->cstyle |= STYLE_BOLD;
+              break;
+            case 2: /* SGR@@Dim@@ */
+              vt->cstyle |= STYLE_DIM;
+              break;
+            case 3: /* SGR@@Italic@@ */
+              vt->cstyle |= STYLE_ITALIC;
+              break;
+            case 4: /* SGR@@Underscore@@ */
+                    /* SGR@4:2@Double underscore@@ */
+                    /* SGR@4:3@Curvy underscore@@ */
+              if (s[1] == ':')
+                {
+                  switch (s[2])
+                    {
+                      case '0':
+                        break;
+                      case '1':
+                        vt->cstyle |= STYLE_UNDERLINE;
+                        break;
+                      case '2':
+                        vt->cstyle |= STYLE_UNDERLINE|
+                                      STYLE_UNDERLINE_VAR;
+                        break;
+                      default:
+                      case '3':
+                        vt->cstyle |= STYLE_UNDERLINE_VAR;
+                        break;
+                    }
+                }
+              else
+                {
+                  vt->cstyle |= STYLE_UNDERLINE;
+                }
+              break;
+            case 5: /* SGR@@Blink@@ */
+              vt->cstyle |= STYLE_BLINK;
+              break;
+            case 6: /* SGR@@Blink Fast@@ */
+              vt->cstyle |= STYLE_BLINK_FAST;
+              break;
+            case 7: /* SGR@@Reverse@@ */
+              vt->cstyle |= STYLE_REVERSE;
+              break;
+            case 8: /* SGR@@Hidden@@ */
+              vt->cstyle |= STYLE_HIDDEN;
+              break;
+            case 9: /* SGR@@Strikethrough@@ */
+              vt->cstyle |= STYLE_STRIKETHROUGH;
+              break;
+            case 10: /* SGR@@Font 0@@ */
+              break;
+            case 11: /* SGR@@Font 1@@ */
+              break;
+            case 12: /* SGR@@Font 2(ignored)@@ */
+            case 13: /* SGR@@Font 3(ignored)@@ */
+            case 14: /* SGR@@Font 4(ignored)@@ */
+              break;
+            case 22: /* SGR@@Bold off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_BOLD);
+              vt->cstyle ^= (vt->cstyle & STYLE_DIM);
+              break;
+            case 23: /* SGR@@Italic off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_ITALIC);
+              break;
+            case 24: /* SGR@@Underscore off@@ */
+              vt->cstyle ^= (vt->cstyle & (STYLE_UNDERLINE|STYLE_UNDERLINE_VAR) );
+              break;
+            case 25: /* SGR@@Blink off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_BLINK);
+              vt->cstyle ^= (vt->cstyle & STYLE_BLINK_FAST);
+              break;
+            case 26: /* SGR@@Proportional spacing @@ */
+              vt->cstyle |= STYLE_PROPORTIONAL;
+              break;
+            case 27: /* SGR@@Reverse off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_REVERSE);
+              break;
+            case 28: /* SGR@@Hidden off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_HIDDEN);
+              break;
+            case 29: /* SGR@@Strikethrough off@@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_STRIKETHROUGH);
+              break;
+            case 30: /* SGR@@black text color@@ */
+              set_fg_idx (0);
+              break;
+            case 31: /* SGR@@red text color@@ */
+              set_fg_idx (1);
+              break;
+            case 32: /* SGR@@green text color@@ */
+              set_fg_idx (2);
+              break;
+            case 33: /* SGR@@yellow text color@@ */
+              set_fg_idx (3);
+              break;
+            case 34: /* SGR@@blue text color@@ */
+              set_fg_idx (4);
+              break;
+            case 35: /* SGR@@magenta text color@@ */
+              set_fg_idx (5);
+              break;
+            case 36: /* SGR@@cyan text color@@ */
+              set_fg_idx (6);
+              break;
+            case 37: /* SGR@@light gray text color@@ */
+              set_fg_idx (7);
+              break;
+          /* SGR@38;5;Pn@256 color index foreground color@where Pn is 0-15 is system colors 16-(16+6*6*6) is a 6x6x6  RGB cube and in the end a grayscale without white and black.@ */
+              /* SGR@38;2;Pr;Pg;Pb@24 bit RGB foreground color each of Pr Pg and Pb have 0-255 range@@ */
+            case 39: /* SGR@@default text color@@ */
+              set_fg_idx (vt->reverse_video?0:15);
+              vt->cstyle ^= (vt->cstyle & STYLE_FG_COLOR_SET);
+              break;
+            case 40: /* SGR@@black background color@@ */
+              set_bg_idx (0);
+              break;
+            case 41: /* SGR@@red background color@@ */
+              set_bg_idx (1);
+              break;
+            case 42: /* SGR@@green background color@@ */
+              set_bg_idx (2);
+              break;
+            case 43: /* SGR@@yellow background color@@ */
+              set_bg_idx (3);
+              break;
+            case 44: /* SGR@@blue background color@@ */
+              set_bg_idx (4);
+              break;
+            case 45: /* SGR@@magenta background color@@ */
+              set_bg_idx (5);
+              break;
+            case 46: /* SGR@@cyan background color@@ */
+              set_bg_idx (6);
+              break;
+            case 47: /* SGR@@light gray background color@@ */
+              set_bg_idx (7);
+              break;
+
+          /* SGR@48;5;Pn@256 color index background color@where Pn is 0-15 is system colors 16-(16+6*6*6) is a 6x6x6  RGB cube and in the end a grayscale without white and black.@ */
+          /* SGR@48;2;Pr;Pg;Pb@24 bit RGB background color@Where Pr Pg and Pb have 0-255 range@ */
+
+            case 49: /* SGR@@default background color@@ */
+              set_bg_idx (vt->reverse_video?15:0);
+              vt->cstyle ^= (vt->cstyle & STYLE_BG_COLOR_SET);
+              break;
+            case 50: /* SGR@@Proportional spacing off @@ */
+              vt->cstyle ^= (vt->cstyle & STYLE_PROPORTIONAL);
+              break;
+            // 51 : framed
+            // 52 : encircled
+            case 53: /* SGR@@Overlined@@ */
+              vt->cstyle |= STYLE_OVERLINE;
+              break;
+            case 55: /* SGR@@Not Overlined@@ */
+              vt->cstyle ^= (vt->cstyle&STYLE_OVERLINE);
+              break;
+            case 90: /* SGR@@dark gray text color@@ */
+              set_fg_idx (8);
+              break;
+            case 91: /* SGR@@light red text color@@ */
+              set_fg_idx (9);
+              break;
+            case 92: /* SGR@@light green text color@@ */
+              set_fg_idx (10);
+              break;
+            case 93: /* SGR@@light yellow text color@@ */
+              set_fg_idx (11);
+              break;
+            case 94: /* SGR@@light blue text color@@ */
+              set_fg_idx (12);
+              break;
+            case 95: /* SGR@@light magenta text color@@ */
+              set_fg_idx (13);
+              break;
+            case 96: /* SGR@@light cyan text color@@ */
+              set_fg_idx (14);
+              break;
+            case 97: /* SGR@@white text color@@ */
+              set_fg_idx (15);
+              break;
+            case 100: /* SGR@@dark gray background color@@ */
+              set_bg_idx (8);
+              break;
+            case 101: /* SGR@@light red background color@@ */
+              set_bg_idx (9);
+              break;
+            case 102: /* SGR@@light green background color@@ */
+              set_bg_idx (10);
+              break;
+            case 103: /* SGR@@light yellow background color@@ */
+              set_bg_idx (11);
+              break;
+            case 104: /* SGR@@light blue background color@@ */
+              set_bg_idx (12);
+              break;
+            case 105: /* SGR@@light magenta background color@@ */
+              set_bg_idx (13);
+              break;
+            case 106: /* SGR@@light cyan background color@@ */
+              set_bg_idx (14);
+              break;
+            case 107: /* SGR@@white background color@@ */
+              set_bg_idx (15);
+              break;
+            default:
+              VT_warning ("unhandled style code %i in sequence \\033%s\n", n, sequence);
+              return;
+          }
+      while (s && *s && *s != ';') { s++; }
+      if (s && *s == ';') { s++; }
+    }
+}
+
+static void vtcmd_ignore (VT *vt, const char *sequence)
+{
+  VT_info ("ignoring sequence %s", sequence);
+}
+
+static void vtcmd_clear_all_tabs (VT *vt, const char *sequence)
+{
+  memset (vt->tabs, 0, sizeof (vt->tabs) );
+}
+
+static void vtcmd_clear_current_tab (VT *vt, const char *sequence)
+{
+  vt->tabs[ (int) (vt->cursor_x-1)] = 0;
+}
+
+static void vtcmd_horizontal_tab_set (VT *vt, const char *sequence)
+{
+  vt->tabs[ (int) vt->cursor_x-1] = 1;
+}
+
+static void vtcmd_save_cursor_position (VT *vt, const char *sequence)
+{
+  vt->saved_x = vt->cursor_x;
+  vt->saved_y = vt->cursor_y;
+}
+
+static void vtcmd_restore_cursor_position (VT *vt, const char *sequence)
+{
+  _vt_move_to (vt, vt->saved_y, vt->saved_x);
+}
+
+
+static void vtcmd_save_cursor (VT *vt, const char *sequence)
+{
+  vt->saved_style   = vt->cstyle;
+  vt->saved_origin  = vt->origin;
+  vtcmd_save_cursor_position (vt, sequence);
+  for (int i = 0; i < 4; i++)
+    { vt->saved_charset[i] = vt->charset[i]; }
+}
+
+static void vtcmd_restore_cursor (VT *vt, const char *sequence)
+{
+  vtcmd_restore_cursor_position (vt, sequence);
+  vt->cstyle  = vt->saved_style;
+  vt->origin  = vt->saved_origin;
+  for (int i = 0; i < 4; i++)
+    { vt->charset[i] = vt->saved_charset[i]; }
+}
+
+static void vtcmd_erase_n_chars (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  while (n--)
+    {
+      vt_line_replace_utf8 (vt->current_line, vt->cursor_x - 1 + n, " ");
+      vt_line_set_style (vt->current_line, vt->cursor_x + n - 1, vt->cstyle);
+    }
+}
+
+static void vtcmd_delete_n_chars (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  int count = n;
+  while (count--)
+    {
+      vt_line_remove (vt->current_line, vt->cursor_x - 1);
+    }
+}
+
+static void vtcmd_delete_n_lines (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  for (int a = 0; a < n; a++)
+    {
+      int i;
+      CtxList *l;
+      VtLine *string = vt->current_line;
+      vt_line_set (string, "");
+      ctx_list_remove (&vt->lines, vt->current_line);
+      for (i=vt->rows, l = vt->lines; l; l=l->next, i--)
+        {
+          if (i == vt->margin_bottom)
+            {
+              vt->current_line = string;
+              ctx_list_insert_before (&vt->lines, l, string);
+              break;
+            }
+        }
+      _vt_move_to (vt, vt->cursor_y, vt->cursor_x); // updates current_line
+    }
+}
+
+static void vtcmd_insert_character (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  while (n--)
+    {
+      vt_line_insert_utf8 (vt->current_line, vt->cursor_x-1, " ");
+    }
+  while (vt->current_line->string.utf8_length > vt->cols)
+    { vt_line_remove (vt->current_line, vt->cols); }
+  // XXX update style
+}
+
+static void vtcmd_scroll_up (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n == 0) { n = 1; }
+  while (n--)
+    { vt_scroll (vt, -1); }
+}
+
+static void vtcmd_scroll_down (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n == 0) { n = 1; }
+  while (n--)
+    { vt_scroll (vt, 1); }
+}
+
+static void vtcmd_insert_blank_lines (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  if (n == 0) { n = 1; }
+  {
+    int st = vt->margin_top;
+    int sb = vt->margin_bottom;
+    vt->margin_top = vt->cursor_y;
+    while (n--)
+      {
+        vt_scroll (vt, 1);
+      }
+    vt->margin_top = st;
+    vt->margin_bottom = sb;
+  }
+}
+
+static void vtcmd_set_default_font (VT *vt, const char *sequence)
+{
+  vt->charset[0] = 0;
+}
+
+static void vtcmd_set_alternate_font (VT *vt, const char *sequence)
+{
+  vt->charset[0] = 1;
+}
+
+
+static void vt_ctx_exit (void *data)
+{
+  VT *vt = data;
+  vt->state = vt_state_neutral;
+  ctx_client_rev_inc (vt->client);
+  if (!vt->current_line)
+    return;
+#if 0
+  fprintf (stderr, "\n");
+  if (vt->current_line->prev)
+  fprintf (stderr, "---prev(%i)----\n%s", (int)strlen(vt->current_line->prev),vt->current_line->prev);
+  fprintf (stderr, "---new(%i)----\n%s", (int)strlen(vt->current_line->frame->str),vt->current_line->frame->str);
+  fprintf (stderr, "--------\n");
+#endif
+
+#if CTX_VT_USE_FRAME_DIFF
+  if (vt->current_line->prev)
+    free (vt->current_line->prev);
+  vt->current_line->prev = NULL;
+  if (vt->current_line->frame)
+  {
+    vt->current_line->prev = vt->current_line->frame->str;
+    vt->current_line->prev_length = vt->current_line->frame->length;
+
+    ctx_string_free (vt->current_line->frame, 0);
+    vt->current_line->frame = NULL;
+  }
+#endif
+
+  void *tmp = vt->current_line->ctx;
+  vt->current_line->ctx = vt->current_line->ctx_copy;
+  vt->current_line->ctx_copy = tmp;
+
+  _ctx_set_frame (vt->current_line->ctx, _ctx_frame (vt->current_line->ctx) + 1);
+  _ctx_set_frame (vt->current_line->ctx_copy, _ctx_frame (vt->current_line->ctx));
+#if 1
+  if (vt->ctxp) // XXX: ugly hack to aid double buffering
+    ((void**)vt->ctxp)[0]= vt->current_line->ctx;
+#endif
+
+  //ctx_parser_destroy (vt->ctxp);
+  //vt->ctxp = NULL;
+}
+#if 0
+#define CTX_x            CTX_STRH('x',0,0,0,0,0,0,0,0,0,0,0,0,0)
+#define CTX_y            CTX_STRH('y',0,0,0,0,0,0,0,0,0,0,0,0,0)
+#define CTX_lower_bottom CTX_STRH('l','o','w','e','r','-','b','o','t','t','o','m',0,0)
+#define CTX_lower        CTX_STRH('l','o','w','e','r',0,0,0,0,0,0,0,0,0)
+#define CTX_raise        CTX_STRH('r','a','i','s','e',0,0,0,0,0,0,0,0,0)
+#define CTX_raise_top    CTX_STRH('r','a','i','s','e','-','t','o','p',0,0,0,0,0)
+#define CTX_terminate    CTX_STRH('t','e','r','m','i','n','a','t','e',0,0,0,0,0)
+#define CTX_maximize     CTX_STRH('m','a','x','i','m','i','z','e',0,0,0,0,0,0)
+#define CTX_unmaximize   CTX_STRH('u','n','m','a','x','i','m','i','z','e',0,0,0,0)
+#define CTX_width        CTX_STRH('w','i','d','t','h',0,0,0,0,0,0,0,0,0)
+#define CTX_title        CTX_STRH('t','i','t','l','e',0,0,0,0,0,0,0,0,0)
+#define CTX_action       CTX_STRH('a','c','t','i','o','n',0,0,0,0,0,0,0,0)
+#define CTX_height       CTX_STRH('h','e','i','g','h','t',0,0,0,0,0,0,0,0)
+#endif
+
+
+static int vt_get_prop (VT *vt, const char *key, const char **val, int *len)
+{
+#if 0
+  uint32_t key_hash = ctx_strhash (key);
+  char str[4096]="";
+  fprintf (stderr, "%s: %s %i\n", __FUNCTION__, key, key_hash);
+  CtxClient *client = ctx_client_by_id (ct->id);
+  if (!client)
+    return 0;
+  switch (key_hash)
+  {
+    case CTX_title:
+      sprintf (str, "setkey %s %s\n", key, client->title);
+      break;
+    case CTX_x:      
+      sprintf (str, "setkey %s %i\n", key, client->x);
+      break;
+    case CTX_y:    
+      sprintf (str, "setkey %s %i\n", key, client->y);
+      break;
+    case CTX_width:
+      sprintf (str, "setkey %s %i\n", key, client->width);
+      break;
+    case CTX_height:
+      sprintf (str, "setkey %s %i\n", key, client->width);
+      break;
+    default:
+      sprintf (str, "setkey %s undefined\n", key);
+      break;
+  }
+  if (str[0])
+  {
+    vtpty_write ((void*)ct, str, strlen (str));
+    fprintf (stderr, "%s", str);
+  }
+#endif
+  return 0;
+}
+
+static void vtcmd_set_mode (VT *vt, const char *sequence)
+{
+  int set = 1;
+  if (sequence[strlen (sequence)-1]=='l')
+    { set = 0; }
+  if (sequence[1]=='?')
+    {
+      int qval;
+      sequence++;
+qagain:
+      qval = parse_int (sequence, 1);
+      switch (qval)
+        {
+          case 1: /*MODE;DECCKM;Cursor key mode;Application;Cursor;*/
+            vt->cursor_key_application = set;
+            break;
+          case 2: /*MODE;DECANM;VT52 emulation;on;off; */
+            if (set==0)
+              { vt->state = vt_state_vt52; }
+            break;
+          case 3: /*MODE;DECCOLM;Column mode;132 columns;80 columns;*/
+            vtcmd_set_132_col (vt, set);
+            break; // set 132 col
+          case 4: /*MODE;DECSCLM;Scrolling mode;smooth;jump;*/
+            vt->smooth_scroll = set;
+            break; // set 132 col
+          case 5: /*MODE;DECSCNM;Screen mode;Reverse;Normal;*/
+            vt->reverse_video = set;
+            break;
+          case 6: /*MODE;DECOM;Origin mode;Relative;Absolute;*/
+            vt->origin = set;
+            if (set)
+              {
+                _vt_move_to (vt, vt->margin_top, 1);
+                vt_carriage_return (vt);
+              }
+            else
+              { _vt_move_to (vt, 1, 1); }
+            break;
+          case 7: /*MODE;DECAWM;Autowrap;on;off;*/
+            vt->autowrap = set;
+            break;
+          case 8: /*MODE;DECARM;Auto repeat;on;off;*/
+            vt->keyrepeat = set;
+            break;
+          // case 9: // send mouse x & y on button press 
+
+          // 10 - Block DECEDM
+          // 18 - Print form feed  DECPFF  default off
+          // 19 - Print extent fullscreen DECPEX  default on
+          case 12:
+            vtcmd_ignore (vt, sequence);
+            break; // blinking_cursor
+          case 25:/*MODE;DECTCEM;Cursor visible;on;off; */
+            vt->cursor_visible = set;
+            break;
+          case 30: // from rxvt - show/hide scrollbar
+            break;
+          case 34: // DECRLM - right to left mode
+            break;
+          case 38: // DECTEK - enter tektronix mode
+            break;
+          case 60: // horizontal cursor coupling
+          case 61: // vertical cursor coupling
+            break;
+          case 69:/*MODE;DECVSSM;Left right margin mode;on;off; */
+            vt->left_right_margin_mode = set;
+            break;
+          case 80:/* DECSDM Sixel scrolling */
+            break;
+          case 437:/*MODE;;Encoding/cp437mode;cp437;utf8; */
+            vt->encoding = set ? 1 : 0;
+            break;
+          case 1000:/*MODE;;Mouse reporting;on;off;*/
+            vt->mouse = set;
+            break;
+          case 1001:
+          case 1002:/*MODE;;Mouse drag;on;off;*/
+            vt->mouse_drag = set;
+            break;
+          case 1003:/*MODE;;Mouse all;on;off;*/
+            vt->mouse_all = set;
+            break;
+          case 1006:/*MODE;;Mouse decimal;on;off;*/
+            vt->mouse_decimal = set;
+            break;
+          case 47:
+          case 1047:
+          //case 1048:
+          case 1049:/*MODE;;Alt screen;on;off;*/
+            if (set)
+              {
+                if (vt->in_alt_screen)
+                  {
+                  }
+                else
+                  {
+                    vtcmd_save_cursor (vt, "");
+                    vt->saved_lines = vt->lines;
+                    vt->saved_line_count = vt->line_count;
+                    vt->line_count = 0;
+                    vt->lines = NULL;
+                    for (int i = 0; i <  vt->rows; i++)
+                      {
+                        vt->current_line = vt_line_new_with_size ("", vt->cols);
+                        ctx_list_append (&vt->lines, vt->current_line);
+                        vt->line_count++;
+                      }
+                    vt->in_alt_screen = 1;
+                    vt->had_alt_screen = 1;
+                    vt_line_feed (vt);
+                    _vt_move_to (vt, 1, 1);
+                    vt_carriage_return (vt);
+                  }
+              }
+            else
+              {
+                if (vt->in_alt_screen)
+                  {
+                    while (vt->lines)
+                      {
+                        vt_line_free (vt->lines->data, 1);
+                        ctx_list_remove (&vt->lines, vt->lines->data);
+                      }
+                    vt->line_count = vt->saved_line_count;
+                    vt->lines = vt->saved_lines;
+                    vtcmd_restore_cursor (vt, "");
+                    vt->saved_lines = NULL;
+                    vt->in_alt_screen = 0;
+                  }
+                else
+                  {
+                  }
+              }
+            break; // alt screen
+          case 1010: /*MODE;;scroll on output;on;off; */ //rxvt
+            vt->scroll_on_output = set;
+            break;
+          case 1011:/*MODE:;scroll on input;on;off; */ //rxvt)
+            vt->scroll_on_input = set;
+            break;
+          case 2004:/*MODE;;bracketed paste;on;off; */
+            vt->bracket_paste = set;
+            break;
+          case 201:/*MODE;;ctx-events;on;off;*/
+            vt->ctx_events = set;
+            break;
+          
+          case 200:/*MODE;;ctx vector graphics mode;on;;*/
+            if (set)
+              {
+                if (!vt->current_line->ctx)
+                  {
+                    vt->current_line->ctx = ctx_new (vt->width, vt->height, "drawlist");
+                    vt->current_line->ctx_copy = ctx_new (vt->width, vt->height, "drawlist");
+                    ctx_set_texture_cache (vt->current_line->ctx_copy, vt->current_line->ctx);
+                    _ctx_set_transformation (vt->current_line->ctx, 0);
+                    _ctx_set_transformation (vt->current_line->ctx_copy, 0);
+
+                    //ctx_set_texture_cache (vt->current_line->ctx, vt->current_line->ctx_copy);
+                    //ctx_set_texture_cache (vt->current_line->ctx_copy, vt->current_line->ctx);
+#if CTX_VT_USE_FRAME_DIFF
+                    vt->current_line->frame = ctx_string_new ("");
+#endif
+                  }
+                if (vt->ctxp)
+                  ctx_parser_destroy (vt->ctxp);
+
+                vt->ctxp = ctx_parser_new (vt->current_line->ctx,
+                                           vt->cols * vt->cw, vt->rows * vt->ch,
+                                           vt->cw, vt->ch, vt->cursor_x, vt->cursor_y,
+                                           (void*)vt_set_prop, (void*)vt_get_prop, vt, vt_ctx_exit, vt);
+                vt->utf8_holding[vt->utf8_pos=0]=0; // XXX : needed?
+                vt->state = vt_state_ctx;
+              }
+            break;
+          default:
+            VT_warning ("unhandled CSI ? %i%s", qval, set?"h":"l");
+            return;
+        }
+      if (strchr (sequence + 1, ';') )
+        {
+          sequence = strchr (sequence + 1, ';');
+          goto qagain;
+        }
+    }
+  else
+    {
+      int val;
+again:
+      val = parse_int (sequence, 1);
+      switch (val)
+        {
+          case 1:/*GATM - transfer enhanced data */
+          case 2:/*KAM - keyboard action mode */
+            break;
+          case 3:/*CRM - control representation mode */
+            /* show control chars? */
+            break;
+          case 4:/*MODE2;IRM;Insert Mode;Insert;Replace; */
+            vt->insert_mode = set;
+            break;
+          case 9: /* interlace mode */
+            break;
+          case 12:/*MODE2;SRM;Local echo;on;off; */
+            vt->echo = set;
+            break;
+          case 20:/*MODE2;LNM;Carriage Return on LF/Newline;on;off;*/
+            ;
+            vt->cr_on_lf = set;
+            break;
+          case 21: // GRCM - whether SGR accumulates or a reset on each command
+            break;
+          case 32: // WYCRTSAVM - screen saver
+            break;
+          case 33: // WYSTCURM  - steady cursor
+            break;
+          case 34: // WYULCURM  - underline cursor
+            break;
+          default:
+            VT_warning ("unhandled CSI %ih", val);
+            return;
+        }
+      if (strchr (sequence, ';') && sequence[0] != ';')
+        {
+          sequence = strchr (sequence, ';');
+          goto again;
+        }
+    }
+}
+
+static void vtcmd_request_mode (VT *vt, const char *sequence)
+{
+  char buf[64]="";
+  if (sequence[1]=='?')
+    {
+      int qval;
+      sequence++;
+      qval = parse_int (sequence, 1);
+      int is_set = -1; // -1 undefiend   0 reset 1 set  1000 perm_reset  1001 perm_set
+      switch (qval)
+        {
+          case 1:
+            is_set = vt->cursor_key_application;
+            break;
+          case 2: /*VT52 emulation;;enable; */
+          //if (set==0) vt->in_vt52 = 1;
+            is_set = 1001;
+            break;
+          case 3:
+            is_set = 0;
+            break;
+          case 4:
+            is_set = vt->smooth_scroll;
+            break;
+          case 5:
+            is_set = vt->reverse_video;
+            break;
+          case 6:
+            is_set = vt->origin;
+            break;
+          case 7:
+            is_set = vt->autowrap;
+            break;
+          case 8:
+            is_set = vt->keyrepeat;
+            break;
+          case 9: // should be dynamic
+            is_set = 1000;
+            break;
+          case 10:
+          case 11:
+          case 12:
+          case 13:
+          case 14:
+          case 16:
+          case 18:
+          case 19:
+            is_set = 1000;
+            break;
+          case 25:
+            is_set = vt->cursor_visible;
+            break;
+          case 45:
+            is_set = 1000;
+            break;
+          case 47:
+            is_set = vt->in_alt_screen;
+            break;
+          case 69:
+            is_set = vt->left_right_margin_mode;
+            break;
+          case 437:
+            is_set = vt->encoding;
+            break;
+          case 1000:
+            is_set = vt->mouse;
+            break;
+            // 1001 hilite tracking
+          case 1002:
+            is_set = vt->mouse_drag;
+            break;
+          case 1003:
+            is_set = vt->mouse_all;
+            break;
+          case 1006:
+            is_set = vt->mouse_decimal;
+            break;
+          case 201:
+            is_set = vt->ctx_events;
+            break;
+          case 2004:
+            is_set = vt->bracket_paste;
+            break;
+          case 1010: // scroll to bottom on tty output (rxvt)
+            is_set = vt->scroll_on_output;
+            break;
+          case 1011: // scroll to bottom on key press (rxvt)
+            is_set = vt->scroll_on_input;
+            break;
+          case 1049:
+            is_set = vt->in_alt_screen;
+            break;
+            break;
+          case 200:/*ctx protocol;On;;*/
+            is_set = (vt->state == vt_state_ctx);
+            break;
+          case 80:/* DECSDM Sixel scrolling */
+          case 30: // from rxvt - show/hide scrollbar
+          case 34: // DECRLM - right to left mode
+          case 60: // horizontal cursor coupling
+          case 61: // vertical cursor coupling
+          default:
+            break;
+        }
+      switch (is_set)
+      {
+        case 0:
+          sprintf (buf, "\033[?%i;%i$y", qval, 2);
+          break;
+        case 1:
+          { sprintf (buf, "\033[?%i;%i$y", qval, 1); }
+          break;
+        case 1000:
+          sprintf (buf, "\033[?%i;%i$y", qval, 4);
+          break;
+        case 1001:
+          sprintf (buf, "\033[?%i;%i$y", qval, 3);
+          break;
+        case -1:
+          { sprintf (buf, "\033[?%i;%i$y", qval, 0); }
+      }
+    }
+  else
+    {
+      int val;
+      val = parse_int (sequence, 1);
+      switch (val)
+        {
+          case 1:
+            sprintf (buf, "\033[%i;%i$y", val, 0);
+            break;
+          case 2:/* AM - keyboard action mode */
+            sprintf (buf, "\033[%i;%i$y", val, 0);
+            break;
+          case 3:/*CRM - control representation mode */
+            sprintf (buf, "\033[%i;%i$y", val, 0);
+            break;
+          case 4:/*Insert Mode;Insert;Replace; */
+            sprintf (buf, "\033[%i;%i$y", val, vt->insert_mode?1:2);
+            break;
+          case 9: /* interlace mode */
+            sprintf (buf, "\033[%i;%i$y", val, 1);
+            break;
+          case 12:
+            sprintf (buf, "\033[%i;%i$y", val, vt->echo?1:2);
+            break;
+          case 20:/*Carriage Return on LF/Newline;on;off;*/
+            ;
+            sprintf (buf, "\033[%i;%i$y", val, vt->cr_on_lf?1:2);
+            break;
+          case 21: // GRCM - whether SGR accumulates or a reset on each command
+          default:
+            sprintf (buf, "\033[%i;%i$y", val, 0);
+        }
+    }
+  if (buf[0])
+    { vt_write (vt, buf, strlen (buf) ); }
+}
+
+static void vtcmd_set_t (VT *vt, const char *sequence)
+{
+  /* \e[21y is request title - allows inserting keychars */
+  if      (!strcmp (sequence,  "[1t")) { ctx_client_unshade (vt->root_ctx, vt->id); }
+  else if (!strcmp (sequence,  "[2t")) { ctx_client_shade (vt->root_ctx, vt->id); } 
+  else if (!strncmp (sequence, "[3;", 3)) {
+    int x=0,y=0;
+    sscanf (sequence, "[3;%i;%ir", &y, &x);
+    ctx_client_move (vt->root_ctx, vt->id, x, y);
+  }
+  else if (!strncmp (sequence, "[4;", 3))
+  {
+    int width = 0, height = 0;
+    sscanf (sequence, "[4;%i;%ir", &height , &width);
+    if (width < 0) width = vt->cols * vt->cw;
+    if (height < 0) height = vt->rows * vt->ch;
+    if (width == 0) width = ctx_width (vt->root_ctx);
+    if (height == 0) height = ctx_height (vt->root_ctx);
+    ctx_client_resize (vt->root_ctx, vt->id, width, height);
+  }
+  else if (!strcmp (sequence, "[5t") ) { ctx_client_raise_top (vt->root_ctx, vt->id); } 
+  else if (!strcmp (sequence, "[6t") ) { ctx_client_lower_bottom (vt->root_ctx, vt->id); } 
+  else if (!strcmp (sequence, "[7t") ) { 
+          ctx_client_rev_inc (vt->client);
+          /* refresh */ }
+  else if (!strncmp (sequence, "[8;", 3) )
+  {
+    int cols = 0, rows = 0;
+    sscanf (sequence, "[8;%i;%ir", &rows, &cols);
+    if (cols < 0) cols = vt->cols;
+    if (rows < 0) rows = vt->rows;
+    if (cols == 0) cols = ctx_width (vt->root_ctx) / vt->cw;
+    if (rows == 0) rows = ctx_height (vt->root_ctx) / vt->ch;
+    ctx_client_resize (vt->root_ctx, vt->id, cols * vt->cw, rows * vt->ch);
+  }
+  else if (!strcmp (sequence, "[9;0t") ) { ctx_client_unmaximize (vt->root_ctx, vt->id); } 
+  else if (!strcmp (sequence, "[9;1t") ) { ctx_client_maximize (vt->root_ctx, vt->id);} 
+
+  /* should actually be full-screen */
+  else if (!strcmp (sequence, "[10;0t") ) { ctx_client_unmaximize (vt->root_ctx, vt->id); } 
+  else if (!strcmp (sequence, "[10;1t") ) { ctx_client_maximize (vt->root_ctx, vt->id);} 
+  else if (!strcmp (sequence, "[10;2t") ) { ctx_client_toggle_maximized (vt->root_ctx, vt->id);} 
+
+  else if (!strcmp (sequence, "[11t") )  /* report window state  */
+    {
+      char buf[128];
+      if (ctx_client_is_iconified (vt->root_ctx, vt->id))
+        sprintf (buf, "\033[2t");
+      else
+        sprintf (buf, "\033[1t");
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[13t") ) /* request terminal position */
+    {
+      char buf[128];
+      sprintf (buf, "\033[3;%i;%it", ctx_client_y (vt->root_ctx, vt->id), ctx_client_x (vt->root_ctx, vt->id));
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[14t") ) /* request terminal dimensions in px */
+    {
+      char buf[128];
+      sprintf (buf, "\033[4;%i;%it", vt->rows * vt->ch, vt->cols * vt->cw);
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[15t") ) /* request root dimensions in px */
+    {
+      char buf[128];
+      sprintf (buf, "\033[5;%i;%it", ctx_height (vt->root_ctx), ctx_width(vt->root_ctx));
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[16t") ) /* request char dimensions in px */
+    {
+      char buf[128];
+      sprintf (buf, "\033[6;%i;%it", vt->ch, vt->cw);
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[18t") ) /* request terminal dimensions */
+    {
+      char buf[128];
+      sprintf (buf, "\033[8;%i;%it", vt->rows, vt->cols);
+      vt_write (vt, buf, strlen (buf) );
+    }
+  else if (!strcmp (sequence, "[19t") ) /* request root window size in char */
+    {
+      char buf[128];
+      sprintf (buf, "\033[9;%i;%it", ctx_height(vt->root_ctx)/vt->ch, ctx_width (vt->root_ctx)/vt->cw);
+      vt_write (vt, buf, strlen (buf) );
+    }
+
+#if 0
+  {"[", 's',  foo, VT100}, /*args:PnSP id:DECSWBV Set warning bell volume */
+#endif
+  else if (sequence[strlen (sequence)-2]==' ') /* DECSWBV */
+    {
+      int val = parse_int (sequence, 0);
+      if (val <= 1) { vt->bell = 0; }
+      if (val <= 8) { vt->bell = val; }
+    }
+  else
+    {
+      // XXX: X for ints >=24 resize to that number of lines
+      VT_info ("unhandled subsequence %s", sequence);
+    }
+}
+
+static void _vt_htab (VT *vt)
+{
+  do
+    {
+      vt->cursor_x ++;
+    }
+  while (vt->cursor_x < VT_MARGIN_RIGHT &&  ! vt->tabs[ (int) vt->cursor_x-1]);
+  if (vt->cursor_x > VT_MARGIN_RIGHT)
+    { vt->cursor_x = VT_MARGIN_RIGHT; }
+}
+
+static void _vt_rev_htab (VT *vt)
+{
+  do
+    {
+      vt->cursor_x--;
+    }
+  while ( vt->cursor_x > 1 && ! vt->tabs[ (int) vt->cursor_x-1]);
+  if (vt->cursor_x < VT_MARGIN_LEFT)
+    { vt_carriage_return (vt); }
+}
+
+static void vtcmd_insert_n_tabs (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  while (n--)
+    {
+      _vt_htab (vt);
+    }
+}
+
+static void vtcmd_rev_n_tabs (VT *vt, const char *sequence)
+{
+  int n = parse_int (sequence, 1);
+  while (n--)
+    {
+      _vt_rev_htab (vt);
+    }
+}
+
+static void vtcmd_set_double_width_double_height_top_line
+(VT *vt, const char *sequence)
+{
+  vt->current_line->double_width         = 1;
+  vt->current_line->double_height_top    = 1;
+  vt->current_line->double_height_bottom = 0;
+}
+static void vtcmd_set_double_width_double_height_bottom_line
+(VT *vt, const char *sequence)
+{
+  vt->current_line->double_width         = 1;
+  vt->current_line->double_height_top    = 0;
+  vt->current_line->double_height_bottom = 1;
+}
+static void vtcmd_set_single_width_single_height_line
+(VT *vt, const char *sequence)
+{
+  vt->current_line->double_width         = 0;
+  vt->current_line->double_height_top    = 0;
+  vt->current_line->double_height_bottom = 0;
+}
+static void
+vtcmd_set_double_width_single_height_line
+(VT *vt, const char *sequence)
+{
+  vt->current_line->double_width         = 1;
+  vt->current_line->double_height_top    = 0;
+  vt->current_line->double_height_bottom = 0;
+}
+
+static void vtcmd_set_led (VT *vt, const char *sequence)
+{
+  int val = 0;
+  //fprintf (stderr, "%s\n", sequence);
+  for (const char *s = sequence; *s; s++)
+    {
+      switch (*s)
+        {
+          case '0': val = 0; break;
+          case '1': val = 1; break;
+          case '2': val = 2; break;
+          case '3': val = 3; break;
+          case '4': val = 4; break;
+          case ';':
+          case 'q':
+            if (val == 0)
+              { vt->leds[0] = vt->leds[1] = vt->leds[2] = vt->leds[3] = 0; }
+            else
+              { vt->leds[val-1] = 1; }
+            val = 0;
+            break;
+        }
+    }
+}
+
+static void vtcmd_char_at_cursor (VT *vt, const char *sequence)
+{
+  char *buf="";
+  vt_write (vt, buf, strlen (buf) );
+}
+
+static void vtcmd_DECELR (VT *vt, const char *sequence)
+{
+  int ps1 = parse_int (sequence, 0);
+  int ps2 = 0;
+  const char *s = strchr (sequence, ';');
+  if (ps1) {/* unused */};
+  if (s)
+    { ps2 = parse_int (s, 0); }
+  if (ps2 == 1)
+    { vt->unit_pixels = 1; }
+  else
+    { vt->unit_pixels = 0; }
+}
+
+static void vtcmd_graphics (VT *vt, const char *sequence)
+{
+  fprintf (stderr, "gfx intro [%s]\n",sequence); // maybe implement such as well?
+}
+void vt_audio_task (VT *vt, int click);
+
+#if CTX_TILED
+static void ctx_show_frame (Ctx *ctx, int block)
+{
+  CtxTiled *tiled = (CtxTiled*)(ctx->backend);
+  tiled->show_frame (tiled, block);
+}
+#endif
+
+static void ctx_wait_frame (Ctx *ctx, VT *vt)
+{
+#if CTX_TILED
+  if (ctx_backend_is_tiled (ctx))
+  {
+    CtxTiled *tiled = (CtxTiled*)(ctx->backend);
+    int max_wait    = 500;
+    //int wait_frame  = tiled->frame;  // tiled->frame and tiled->render_frame are expected
+                                       // to be equal, unless something else has timed out
+    int wait_frame  = tiled->render_frame;
+    ctx_show_frame (ctx, 0);
+    while (wait_frame > tiled->shown_frame &&
+           max_wait-- > 0)
+    {
+#if CTX_AUDIO
+      usleep (10);
+      vt_audio_task (vt, 0);
+#else
+      usleep (10);
+#endif
+      ctx_show_frame (ctx, 0);
+    }
+#if 1
+    if (max_wait > 0)
+    {}//fprintf (stderr, "[%i]", max_wait);
+    else
+      fprintf (stderr, "[wait-drop]");
+#endif
+  }
+#endif
+}
+
+static void vtcmd_report (VT *vt, const char *sequence)
+{
+  char buf[64]="";
+  if (!strcmp (sequence, "[5n") ) // DSR device status report
+    {
+      ctx_wait_frame (vt->root_ctx, vt);
+      sprintf (buf, "\033[0n"); // we're always OK :)
+    }
+  else if (!strcmp (sequence, "[?15n") ) // printer status
+    {
+      sprintf (buf, "\033[?13n"); // no printer
+    }
+  else if (!strcmp (sequence, "[?26n") ) // keyboard dialect
+    {
+      sprintf (buf, "\033[?27;1n"); // north american/ascii
+    }
+  else if (!strcmp (sequence, "[?25n") ) // User Defined Key status
+    {
+      sprintf (buf, "\033[?21n"); // locked
+    }
+#if 0
+  {"[6n", 0, },  /* id:DSR  cursor position report, yields a reply <tt>\e[Pl;PcR</tt> */
+#endif
+  else if (!strcmp (sequence, "[6n") ) // DSR cursor position report
+    {
+      sprintf (buf, "\033[%i;%iR", vt->cursor_y - (vt->origin? (vt->margin_top - 1) :0), (int) vt->cursor_x - (vt->origin? (VT_MARGIN_LEFT-1) :0) );
+    }
+  else if (!strcmp (sequence, "[?6n") ) // DECXPR extended cursor position report
+    {
+#if 0
+  {"[?6n", 0, },  /* id:DEXCPR  extended cursor position report, yields a reply <tt>\e[Pl;PcR</tt> */
+#endif
+      sprintf (buf, "\033[?%i;%i;1R", vt->cursor_y - (vt->origin? (vt->margin_top - 1) :0), (int) vt->cursor_x - (vt->origin? (VT_MARGIN_LEFT-1) :0) );
+    }
+  else if (!strcmp (sequence, "[>c") )
+    {
+      sprintf (buf, "\033[>23;01;1c");
+    }
+  else if (sequence[strlen (sequence)-1]=='c') // device attributes
+    {
+      //buf = "\033[?1;2c"; // what rxvt reports
+      //buf = "\033[?1;6c"; // VT100 with AVO ang GPO
+      //buf = "\033[?2c";     // VT102
+      sprintf (buf, "\033[?63;14;4;22c");
+    }
+  else if (sequence[strlen (sequence)-1]=='x') // terminal parameters
+    {
+      if (!strcmp (sequence, "[1x") )
+        { sprintf (buf, "\033[3;1;1;120;120;1;0x"); }
+      else
+        { sprintf (buf, "\033[2;1;1;120;120;1;0x"); }
+    }
+  if (buf[0])
+    { vt_write (vt, buf, strlen (buf) );
+    }
+}
+
+static char *charmap_cp437[]=
+{
+  " ","☺","☻","♥","♦","♣","♠","•","◘","○","◙","♂","♀","♪","♫","☼",
+  "►","◄","↕","‼","¶","§","▬","↨","↑","↓","→","←","∟","↔","▲","▼",
+  " ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/",
+  "0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
+  "@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
+  "P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
+  "`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
+  "p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","⌂",
+  "Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å",
+  "É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","¢","£","¥","₧","ƒ",
+  "á","í","ó","ú","ñ","Ñ","ª","º","¿","⌐","¬","½","¼","¡","«","»",
+  "░","▒","▓","│","┤","╡","╢","╖","╕","╣","║","╗","╝","╜","╛","┐",
+  "└","┴","┬","├","─","┼","╞","╟","╚","╔","╩","╦","╠","═","╬","╧",
+  "╨","╤","╥","╙","╘","╒","╓","╫","╪","┘","┌","█","▄","▌","▐","▀",
+  "α","ß","Γ","π","Σ","σ","µ","τ","Φ","Θ","Ω","δ","∞","φ","ε","∩",
+  "≡","±","≥","≤","⌠","⌡","÷","≈","°","∙","·","√","ⁿ","²","■"," "
+};
+
+
+static char *charmap_graphics[]=
+{
+  " ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/","0",
+  "1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
+  "@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
+  "Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
+  "◆","▒","␉","␌","␍","␊","°","±","␤","␋","┘","┐","┌","└","┼","⎺","⎻",
+  "─","⎼","⎽","├","┤","┴","┬","│","≤","≥","π","≠","£","·"," "
+};
+
+static char *charmap_uk[]=
+{
+  " ","!","\"","£","$","%","&","'","(",")","*","+",",","-",".","/","0",
+  "1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
+  "@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
+  "Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
+  "`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
+  "q","r","s","t","u","v","w","x","y","z","{","|","}","~"," "
+};
+
+static char *charmap_ascii[]=
+{
+  " ","!","\"","#","$","%","&","'","(",")","*","+",",","-",".","/","0",
+  "1","2","3","4","5","6","7","8","9",":",";","<","=",">","?",
+  "@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
+  "Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_",
+  "`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
+  "q","r","s","t","u","v","w","x","y","z","{","|","}","~"," "
+};
+
+static void vtcmd_justify (VT *vt, const char *sequence)
+{
+  int n = parse_int (vt->argument_buf, 0);
+  switch (n)
+    {
+      case 0:
+      case 1:
+      case 2:
+      case 3:
+      case 4:
+      case 5:
+      case 6:
+      case 7:
+      case 8:
+        vt->justify = n;
+        break;
+      default:
+        vt->justify = 0;
+    }
+}
+
+static void vtcmd_sixel_related_req (VT *vt, const char *sequence)
+{
+  fprintf (stderr, "it happens!\n");
+}
+
+static void vtcmd_set_charmap (VT *vt, const char *sequence)
+{
+  int slot = 0;
+  int set = sequence[1];
+  if (sequence[0] == ')') { slot = 1; }
+  if (set == 'G') { set = 'B'; }
+  vt->charset[slot] = set;
+}
+#if 0
+
+CSI Pm ' }    '
+Insert Ps Column (s) (default = 1) (DECIC), VT420 and up.
+
+CSI Pm ' ~    '
+Delete Ps Column (s) (default = 1) (DECDC), VT420 and up.
+
+
+in text.  When bracketed paste mode is set, the program will receive:
+ESC [ 2 0 0 ~,
+      followed by the pasted text, followed by
+      ESC [ 2 0 1 ~ .
+
+
+            CSI I
+            when the terminal gains focus, and CSI O  when it loses focus.
+#endif
+
+#define COMPAT_FLAG_LEVEL_0   (1<<1)
+#define COMPAT_FLAG_LEVEL_1   (1<<2)
+#define COMPAT_FLAG_LEVEL_2   (1<<3)
+#define COMPAT_FLAG_LEVEL_3   (1<<4)
+#define COMPAT_FLAG_LEVEL_4   (1<<5)
+#define COMPAT_FLAG_LEVEL_5   (1<<6)
+
+#define COMPAT_FLAG_LEVEL_102 (1<<7)
+
+#define COMPAT_FLAG_ANSI      (1<<8)
+#define COMPAT_FLAG_OBSOLETE  (1<<9)
+
+#define COMPAT_FLAG_ANSI_COLOR (1<<10)
+#define COMPAT_FLAG_256_COLOR  (1<<11)
+#define COMPAT_FLAG_24_COLOR   (1<<12)
+
+#define COMPAT_FLAG_MOUSE_REPORT (1<<13)
+
+#define COMPAT_FLAG_AUDIO      (1<<14)
+#define COMPAT_FLAG_GRAPHICS   (1<<15)
+
+#define ANSI    COMPAT_FLAG_ANSI
+#define OBS     COMPAT_FLAG_OBSOLETE
+
+#define VT100   (COMPAT_FLAG_LEVEL_0|COMPAT_FLAG_LEVEL_1)
+#define VT102   (VT100|COMPAT_FLAG_LEVEL_102)
+#define VT200   (VT102|COMPAT_FLAG_LEVEL_2)
+#define VT300   (VT200|COMPAT_FLAG_LEVEL_3)
+#define VT400   (VT300|COMPAT_FLAG_LEVEL_4)
+#define VT220   VT200
+#define VT320   VT300
+
+#define XTERM   (VT400|COMPAT_FLAG_24_COLOR|COMPAT_FLAG_256_COLOR|COMPAT_FLAG_ANSI_COLOR)
+
+#define VT2020  (XTERM|COMPAT_FLAG_GRAPHICS|COMPAT_FLAG_AUDIO)
+
+
+            static Sequence sequences[]=
+  {
+    /*
+      prefix suffix  command */
+    //{"B",  0,  vtcmd_break_permitted},
+    //{"C",  0,  vtcmd_nobreak_here},
+    {"D", 0,    vtcmd_index, VT100}, /* args: id:IND Index  */
+    {"E",  0,   vtcmd_next_line}, /* ref:none id:  Next line */
+    {"_", 'G',  vtcmd_graphics},
+    {"H",   0,  vtcmd_horizontal_tab_set, VT100}, /* id:HTS Horizontal Tab Set */
+
+    //{"I",  0,  vtcmd_char_tabulation_with_justification},
+    //{"K",  0,  PLD partial line down
+    //{"L",  0,  PLU partial line up
+    {"M",  0,   vtcmd_reverse_index, VT100}, /* ref:none id:RI Reverse Index */
+    //{"N",  0,  vtcmd_ignore}, /* Set Single Shift 2 - SS2*/
+    //{"O",  0,  vtcmd_ignore}, /* Set Single Shift 3 - SS3*/
+
+#if 0
+    {"[0F", 0, vtcmd_justify, ANSI}, /* ref:none id:JFY disable justification and wordwrap  */ // needs special link to ANSI standard
+    {"[1F", 0, vtcmd_justify, ANSI}, /* ref:none id:JFY enable wordwrap  */
+#endif
+
+    /* these need to occur before vtcmd_preceding_line to have precedence */
+    {"[0 F", 0, vtcmd_justify, ANSI},
+    {"[1 F", 0, vtcmd_justify, ANSI},
+    {"[2 F", 0, vtcmd_justify},
+    {"[3 F", 0, vtcmd_justify},
+    {"[4 F", 0, vtcmd_justify},
+    {"[5 F", 0, vtcmd_justify},
+    {"[6 F", 0, vtcmd_justify},
+    {"[7 F", 0, vtcmd_justify},
+    {"[8 F", 0, vtcmd_justify},
+// XXX missing DECIC DECDC  insert and delete column
+    {"[", 'A', vtcmd_cursor_up, VT100},   /* args:Pn    id:CUU Cursor Up */
+    {"[",  'B', vtcmd_cursor_down, VT100}, /* args:Pn    id:CUD Cursor Down */
+    {"[",  'C', vtcmd_cursor_forward, VT100}, /* args:Pn id:CUF Cursor Forward */
+    {"[",  'D', vtcmd_cursor_backward, VT100}, /* args:Pn id:CUB Cursor Backward */
+    {"[",  'j', vtcmd_cursor_backward, ANSI}, /* args:Pn ref:none id:HPB Horizontal Position Backward */
+    {"[",  'k', vtcmd_cursor_up, ANSI}, /* args:Pn ref:none id:VPB Vertical Position Backward */
+    {"[",  'E', vtcmd_next_line, VT100}, /* args:Pn id:CNL Cursor Next Line */
+    {"[",  'F', vtcmd_cursor_preceding_line, VT100}, /* args:Pn id:CPL Cursor Preceding Line */
+    {"[",  'G', vtcmd_horizontal_position_absolute}, /* args:Pn id:CHA Cursor Horizontal Absolute */
+    {"[",  'H', vtcmd_cursor_position, VT100}, /* args:Pl;Pc id:CUP Cursor Position */
+    {"[",  'I', vtcmd_insert_n_tabs}, /* args:Pn id:CHT Cursor Horizontal Forward Tabulation */
+    {"[",  'J', vtcmd_erase_in_display, VT100}, /* args:Ps id:ED Erase in Display */
+    {"[",  'K', vtcmd_erase_in_line, VT100}, /* args:Ps id:EL Erase in Line */
+    {"[",  'L', vtcmd_insert_blank_lines, VT102}, /* args:Pn id:IL Insert Line */
+    {"[",  'M', vtcmd_delete_n_lines, VT102}, /* args:Pn id:DL Delete Line   */
+    // [ N is EA - Erase in field
+    // [ O is EA - Erase in area
+    {"[",  'P', vtcmd_delete_n_chars, VT102}, /* args:Pn id:DCH Delete Character */
+    // [ Q is SEE - Set editing extent
+    // [ R is CPR - active cursor position report
+    {"[?", 'S', vtcmd_sixel_related_req},
+    {"[",  'S', vtcmd_scroll_up, VT100},   /* args:Pn id:SU Scroll Up */
+    {"[",  'T', vtcmd_scroll_down, VT100}, /* args:Pn id:SD Scroll Down */
+    {"[",/*SP*/'U', vtcmd_set_line_home, ANSI}, /* args:PnSP id=SLH Set Line Home */
+    {"[",/*SP*/'V', vtcmd_set_line_limit, ANSI},/* args:PnSP id=SLL Set Line Limit */
+    // [ W is cursor tabulation control
+    // [ Pn Y  - cursor line tabulation
+    //
+    {"[",  'X', vtcmd_erase_n_chars}, /* args:Pn id:ECH Erase Character */
+    {"[",  'Z', vtcmd_rev_n_tabs},    /* args:Pn id:CBT Cursor Backward Tabulation */
+    {"[",  '^', vtcmd_scroll_down}  , /* muphry alternate from ECMA */
+    {"[",  '@', vtcmd_insert_character, VT102}, /* args:Pn id:ICH Insert Character */
+
+    {"[",  'a', vtcmd_cursor_forward, ANSI}, /* args:Pn id:HPR Horizontal Position Relative */
+    {"[",  'b', vtcmd_cursor_forward, ANSI}, /* REP previous char XXX incomplete */
+    {"[",  'c', vtcmd_report}, /* ref:none id:DA args:... Device Attributes */
+    {"[",  'd', vtcmd_goto_row},       /* args:Pn id:VPA Vertical Position Absolute  */
+    {"[",  'e', vtcmd_cursor_down},    /* args:Pn id:VPR Vertical Position Relative */
+    {"[",  'f', vtcmd_cursor_position, VT100}, /* args:Pl;Pc id:HVP Cursor Position */
+    {"[g", 0,   vtcmd_clear_current_tab, VT100}, /* id:TBC clear current tab */
+    {"[0g", 0,  vtcmd_clear_current_tab, VT100}, /* id:TBC clear current tab */
+    {"[3g", 0,  vtcmd_clear_all_tabs, VT100},    /* id:TBC clear all tabs */
+    {"[",  'm', vtcmd_set_graphics_rendition, VT100}, /* args:Ps;Ps;.. id:SGR Select Graphics Rendition */
+    {"[",  'n', vtcmd_report, VT200}, /* id:DSR args:... CPR Cursor Position Report  */
+    {"[",  'r', vtcmd_set_top_and_bottom_margins, VT100}, /* args:Pt;Pb id:DECSTBM Set Top and Bottom Margins */
+#if 0
+    // handled by set_left_and_right_margins - in if 0 to be documented
+    {"[s",  0,  vtcmd_save_cursor_position, VT100}, /*ref:none id:SCP Save Cursor Position */
+#endif
+    {"[u",  0,  vtcmd_restore_cursor_position, VT100}, /*ref:none id:RCP Restore Cursor Position */
+    {"[",  's', vtcmd_set_left_and_right_margins, VT400}, /* args:Pl;Pr id:DECSLRM Set Left and Right Margins */
+    {"[",  '`', vtcmd_horizontal_position_absolute, ANSI},  /* args:Pn id:HPA Horizontal Position Absolute */
+
+    {"[",  'h', vtcmd_set_mode, VT100},   /* args:Pn[;...] id:SM Set Mode */
+    {"[",  'l', vtcmd_set_mode, VT100}, /* args:Pn[;...]  id:RM Reset Mode */
+    {"[",  't', vtcmd_set_t},
+    {"[",  'q', vtcmd_set_led, VT100}, /* args:Ps id:DECLL Load LEDs */
+    {"[",  'x', vtcmd_report}, /* ref:none id:DECREQTPARM */
+    {"[",  'z', vtcmd_DECELR}, /* ref:none id:DECELR set locator res  */
+
+    {"5",   0,  vtcmd_char_at_cursor, VT300}, /* ref:none id:DECXMIT */
+    {"6",   0,  vtcmd_back_index, VT400}, /* id:DECBI Back index (hor. scroll) */
+    {"7",   0,  vtcmd_save_cursor, VT100}, /* id:DECSC Save Cursor */
+    {"8",   0,  vtcmd_restore_cursor, VT100}, /* id:DECRC Restore Cursor */
+    {"9",   0,  vtcmd_forward_index, VT400}, /* id:DECFI Forward index (hor. scroll)*/
+
+    //{"Z", 0,  vtcmd_device_attributes},
+    //{"%G",0,  vtcmd_set_default_font}, // set_alternate_font
+
+
+    {"(0",  0,   vtcmd_set_charmap},
+    {"(1",  0,   vtcmd_set_charmap},
+    {"(2",  0,   vtcmd_set_charmap},
+    {"(A",  0,   vtcmd_set_charmap},
+    {"(B",  0,   vtcmd_set_charmap},
+    {")0",  0,   vtcmd_set_charmap},
+    {")1",  0,   vtcmd_set_charmap},
+    {")2",  0,   vtcmd_set_charmap},
+    {")A",  0,   vtcmd_set_charmap},
+    {")B",  0,   vtcmd_set_charmap},
+    {"%G",  0,   vtcmd_set_charmap},
+
+    {"#3",  0,   vtcmd_set_double_width_double_height_top_line, VT100}, /*id:DECDHL Top half of double-width, double-height line */
+    {"#4",  0,   vtcmd_set_double_width_double_height_bottom_line, VT100}, /*id:DECDHL Bottom half of double-width, double-height line */
+    {"#5",  0,   vtcmd_set_single_width_single_height_line, VT100}, /* id:DECSWL Single-width line */
+    {"#6",  0,   vtcmd_set_double_width_single_height_line, VT100}, /* id:DECDWL Double-width line */
+
+    {"#8",  0,   vtcmd_screen_alignment_display, VT100}, /* id:DECALN Screen Alignment Pattern */
+    {"=",   0,   vtcmd_ignore},  // keypad mode change
+    {">",   0,   vtcmd_ignore},  // keypad mode change
+    {"c",   0,   vtcmd_reset_to_initial_state, VT100}, /* id:RIS Reset to Initial State */
+    {"[!", 'p',  vtcmd_ignore},       // soft reset?
+    {"[",  'p',  vtcmd_request_mode}, /* args:Pa$ id:DECRQM Request ANSI Mode */
+#if 0
+    {"[?",  'p',  vtcmd_request_mode}, /* args:Pd$ id:DECRQM Request DEC Mode */
+#endif
+
+    {NULL, 0, NULL}
+  };
+
+  static void handle_sequence (VT *vt, const char *sequence)
+{
+  int i0 = strlen (sequence)-1;
+  int i;
+  ctx_client_rev_inc (vt->client);
+  for (i = 0; sequences[i].prefix; i++)
+    {
+      if (!strncmp (sequence, sequences[i].prefix, strlen (sequences[i].prefix) ) )
+        {
+          if (! (sequences[i].suffix && (sequence[i0] != sequences[i].suffix) ) )
+            {
+              VT_command ("%s", sequence);
+              sequences[i].vtcmd (vt, sequence);
+              return;
+            }
+        }
+    }
+#ifndef ASANBUILD
+  VT_warning ("unhandled: %c%c%c%c%c%c%c%c%c\n", sequence[0], sequence[1], sequence[2], sequence[3], sequence[4], sequence[5], sequence[6], sequence[7], sequence[8]);
+#endif
+}
+
+static void vt_line_feed (VT *vt)
+{
+  int was_home = vt->at_line_home;
+  if (vt->margin_top == 1 && vt->margin_bottom == vt->rows)
+    {
+      if (vt->lines == NULL ||
+          (vt->lines->data == vt->current_line && vt->cursor_y != vt->rows) )
+        {
+          vt->current_line = vt_line_new_with_size ("", vt->cols);
+          ctx_list_prepend (&vt->lines, vt->current_line);
+          vt->line_count++;
+        }
+      if (vt->cursor_y >= vt->margin_bottom)
+        {
+          vt->cursor_y = vt->margin_bottom;
+          vt_scroll (vt, -1);
+        }
+      else
+        {
+          vt->cursor_y++;
+        }
+    }
+  else
+    {
+      if (vt->lines->data == vt->current_line &&
+          (vt->cursor_y != vt->margin_bottom) && 0)
+        {
+          vt->current_line = vt_line_new_with_size ("", vt->cols);
+          ctx_list_prepend (&vt->lines, vt->current_line);
+          vt->line_count++;
+        }
+      vt->cursor_y++;
+      if (vt->cursor_y > vt->margin_bottom)
+        {
+          vt->cursor_y = vt->margin_bottom;
+          vt_scroll (vt, -1);
+        }
+    }
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  if (vt->cr_on_lf)
+    { vt_carriage_return (vt); }
+  vt_trimlines (vt, vt->rows);
+  if (was_home)
+    { vt_carriage_return (vt); }
+}
+
+//#include "vt-encodings.h"
+
+#if CTX_SDL
+static void vt_state_apc_audio (VT *vt, int byte)
+{
+  if ( (byte < 32) && ( (byte < 8) || (byte > 13) ) )
+    {
+      vt_audio (vt, vt->argument_buf);
+      vt->state = ( (byte == 27) ?  vt_state_swallow : vt_state_neutral);
+    }
+  else
+    {
+      vt_argument_buf_add (vt, byte);
+    }
+}
+
+#else
+
+void vt_audio_task (VT *vt, int click)
+{
+}
+
+void vt_bell (VT *vt)
+{
+}
+static void vt_state_apc_audio (VT *vt, int byte)
+{
+  vt->state = vt_state_apc_generic;
+}
+
+#endif
+
+static void
+vt_carriage_return (VT *vt)
+{
+  _vt_move_to (vt, vt->cursor_y, vt->cursor_x);
+  vt->cursor_x = VT_MARGIN_LEFT;
+  vt->at_line_home = 1;
+}
+
+/* if the byte is a non-print control character, handle it and return 1
+ * oterhwise return 0*/
+static int _vt_handle_control (VT *vt, int byte)
+{
+  /* the big difference between ANSI-BBS mode and VT100+ mode is that
+   * most C0 characters are printable
+   */
+  if (CTX_UNLIKELY(vt->encoding == 1)) // this codepage is for ansi-bbs use
+    switch (byte)
+      {
+        case '\0':
+          return 1;
+        case 1:    /* SOH start of heading */
+        case 2:    /* STX start of text */
+        case 3:    /* ETX end of text */
+        case 4:    /* EOT end of transmission */
+        case 5:    /* ENQuiry */
+        case 6:    /* ACKnolwedge */
+        case '\v': /* VT vertical tab */
+        case '\f': /* VF form feed */
+        case 14: /* SO shift in - alternate charset */
+        case 15: /* SI shift out - (back to normal) */
+        case 16: /* DLE data link escape */
+        case 17: /* DC1 device control 1 - XON */
+        case 18: /* DC2 device control 2 */
+        case 19: /* DC3 device control 3 - XOFF */
+        case 20: /* DC4 device control 4 */
+        case 21: /* NAK negative ack */
+        case 22: /* SYNchronous idle */
+        case 23: /* ETB end of trans. blk */
+        case 24: /* CANcel (vt100 aborts sequence) */
+        case 25: /* EM  end of medium */
+        case 26: /* SUB stitute */
+        case 28: /* FS file separator */
+        case 29: /* GS group separator */
+        case 30: /* RS record separator */
+        case 31: /* US unit separator */
+          _vt_add_str (vt, charmap_cp437[byte]);
+          return 1;
+      }
+  switch (byte)
+    {
+      case '\0':
+      case 1:    /* SOH start of heading */
+      case 2:    /* STX start of text */
+      case 3:    /* ETX end of text */
+      case 4:    /* EOT end of transmission */
+      case 6:    /* ACKnolwedge */
+        return 1;
+      case 5:    /* ENQuiry */
+        {
+          const char *reply = getenv ("TERM_ENQ_REPLY");
+          if (reply)
+            {
+              char *copy = ctx_strdup (reply);
+              for (uint8_t *c = (uint8_t *) copy; *c; c++)
+                {
+                  if (*c < ' ' || * c > 127) { *c = 0; }
+                }
+              vt_write (vt, reply, strlen (reply) );
+              free (copy);
+            }
+        }
+        return 1;
+      case '\a': /* BELl */
+        vt_bell (vt);
+        return 1;
+      case '\b': /* BS */
+        _vt_backspace (vt);
+        return 1;
+      case '\t': /* HT tab */
+        _vt_htab (vt);
+        return 1;
+      case '\v': /* VT vertical tab */
+      case '\f': /* VF form feed */
+      case '\n': /* LF line ffed */
+        vt_line_feed (vt);
+        return 1;
+      case '\r': /* CR carriage return */
+        vt_carriage_return (vt);
+        return 1;
+      case 14: /* SO shift in - alternate charset */
+        vt->shifted_in = 1;  // XXX not in vt52
+        return 1;
+      case 15: /* SI shift out - (back to normal) */
+        vt->shifted_in = 0;
+        return 1;
+      case 16: /* DLE data link escape */
+      case 17: /* DC1 device control 1 - XON */
+      case 18: /* DC2 device control 2 */
+      case 19: /* DC3 device control 3 - XOFF */
+      case 20: /* DC4 device control 4 */
+      case 21: /* NAK negative ack */
+      case 22: /* SYNchronous idle */
+      case 23: /* ETB end of trans. blk */
+      case 24: /* CANcel (vt100 aborts sequence) */
+      case 25: /* EM  end of medium */
+      case 26: /* SUB stitute */
+        _vt_add_str (vt, "¿");  // in vt52? XXX
+        return 1;
+      case 27: /* ESCape */
+        return 0;
+        break;
+      case 28: /* FS file separator */
+      case 29: /* GS group separator */
+      case 30: /* RS record separator */
+      case 31: /* US unit separator */
+      case 127: /* DEL */
+        return 1;
+      default:
+        return 0;
+    }
+}
+
+void vt_open_log (VT *vt, const char *path)
+{
+  unlink (path);
+  vt->log = fopen (path, "w");
+}
+
+/* the function shared by sixels, kitty mode and iterm2 mode for
+ * doing inline images. it attaches an image to the current line
+ */
+static void display_image (VT *vt, Image *image,
+                           int col,
+                           float xoffset,
+                           float yoffset,
+                           int rows,
+                           int cols,
+                           int subx,
+                           int suby,
+                           int subw,
+                           int subh
+                          )
+{
+  int i = 0;
+  for (i = 0; vt->current_line->images[i] && i < 4; i++)
+  {
+     if (vt->current_line->image_col[i] == vt->cursor_x)
+       break;
+  }
+  //for (i = 0; vt->current_line->images[i] && i < 4; i++);
+  if (i >= 4) { i = 3; }
+  /* this needs a struct and dynamic allocation */
+  vt->current_line->images[i] = image;
+  vt->current_line->image_col[i] = vt->cursor_x;
+  vt->current_line->image_X[i] = xoffset;
+  vt->current_line->image_Y[i] = yoffset;
+  vt->current_line->image_subx[i] = subx;
+  vt->current_line->image_suby[i] = suby;
+  vt->current_line->image_subw[i] = subw;
+  vt->current_line->image_subh[i] = subh;
+  vt->current_line->image_rows[i] = rows;
+  vt->current_line->image_cols[i] = cols;
+}
+
+static int vt_gfx_pending=0;
+
+void vt_gfx (VT *vt, const char *command)
+{
+  const char *payload = NULL;
+  char key = 0;
+  int  value;
+  int  pos = 1;
+  if (vt->gfx.multichunk == 0)
+    {
+      memset (&vt->gfx, 0, sizeof (GfxState) );
+      vt->gfx.action='t';
+      vt->gfx.transmission='d';
+    }
+  while (command[pos] != ';')
+    {
+      pos ++; // G or ,
+      if (command[pos] == ';') { break; }
+      key = command[pos];
+      pos++;
+      if (command[pos] == ';') { break; }
+      pos ++; // =
+      if (command[pos] == ';') { break; }
+      if (command[pos] >= '0' && command[pos] <= '9')
+        { value = atoi (&command[pos]); }
+      else
+        { value = command[pos]; }
+      while (command[pos] &&
+             command[pos] != ',' &&
+             command[pos] != ';') { pos++; }
+      switch (key)
+        {
+          case 'a':
+            vt->gfx.action = value;
+            break;
+          case 'd':
+            vt->gfx.delete = value;
+            break;
+          case 'i':
+            vt->gfx.id = value;
+            break;
+          case 'S':
+            vt->gfx.buf_size = value;
+            break;
+          case 's':
+            vt->gfx.buf_width = value;
+            break;
+          case 'v':
+            vt->gfx.buf_height = value;
+            break;
+          case 'f':
+            vt->gfx.format = value;
+            break;
+          case 'm':
+            vt->gfx.multichunk = value;
+            break;
+          case 'o':
+            vt->gfx.compression = value;
+            break;
+          case 't':
+            vt->gfx.transmission = value;
+            break;
+          case 'x':
+            vt->gfx.x = value;
+            break;
+          case 'y':
+            vt->gfx.y = value;
+            break;
+          case 'w':
+            vt->gfx.w = value;
+            break;
+          case 'h':
+            vt->gfx.h = value;
+            break;
+          case 'X':
+            vt->gfx.x_cell_offset = value;
+            break;
+          case 'Y':
+            vt->gfx.y_cell_offset = value;
+            break;
+          case 'c':
+            vt->gfx.columns = value;
+            break;
+          case 'r':
+            vt->gfx.rows = value;
+            break;
+          case 'z':
+            vt->gfx.z_index = value;
+            break;
+        }
+    }
+  payload = &command[pos+1];
+  {
+    int chunk_size = strlen (payload);
+    int old_size = vt->gfx.data_size;
+    // accumulate incoming data
+    if (vt->gfx.data == NULL)
+      {
+        vt->gfx.data_size = chunk_size;
+        vt->gfx.data = ctx_malloc (vt->gfx.data_size + 1);
+      }
+    else
+      {
+        vt->gfx.data_size += chunk_size;
+        vt->gfx.data = ctx_realloc (vt->gfx.data, vt->gfx.data_size-chunk_size,vt->gfx.data_size + 1);
+      }
+    memcpy (vt->gfx.data + old_size, payload, chunk_size);
+    vt->gfx.data[vt->gfx.data_size]=0;
+  }
+  if (vt->gfx.multichunk == 0)
+    {
+      if (vt->gfx.transmission != 'd') /* */
+        {
+          char buf[256];
+          sprintf (buf, "\033_Gi=%i;only direct transmission supported\033\\",
+                   vt->gfx.id);
+          vt_write (vt, buf, strlen (buf) );
+          goto cleanup;
+        }
+      {
+        int bin_length = vt->gfx.data_size;
+        uint8_t *data2 = ctx_malloc (vt->gfx.data_size);
+        bin_length = ctx_base642bin ( (char *) vt->gfx.data,
+                                     &bin_length,
+                                     data2);
+        memcpy (vt->gfx.data, data2, bin_length + 1);
+        vt->gfx.data_size = bin_length;
+        free (data2);
+      }
+      if (vt->gfx.buf_width)
+        {
+          // implicit buf_size
+          vt->gfx.buf_size = vt->gfx.buf_width * vt->gfx.buf_height *
+                             (vt->gfx.format == 24 ? 3 : 4);
+        }
+      if (vt->gfx.compression == 'z')
+        {
+          //vt->gfx.buf_size)
+          unsigned char *data2 = ctx_malloc (vt->gfx.buf_size + 1);
+          /* if a buf size is set (rather compression, but
+           * this works first..) then */
+#ifndef EMSCRIPTEN
+      unsigned long
+#else
+      unsigned int
+#endif
+          actual_uncompressed_size = vt->gfx.buf_size;
+          int z_result = uncompress (data2, &actual_uncompressed_size,
+                                     vt->gfx.data,
+                                     vt->gfx.data_size);
+          if (z_result != Z_OK)
+            {
+              char buf[256]= "\033_Go=z;zlib error\033\\";
+              vt_write (vt, buf, strlen (buf) );
+              goto cleanup;
+            }
+          free (vt->gfx.data);
+          vt->gfx.data = data2;
+          vt->gfx.data_size = actual_uncompressed_size;
+          vt->gfx.compression = 0;
+        }
+#ifdef STBI_INCLUDE_STB_IMAGE_H
+      if (vt->gfx.format == 100)
+        {
+          int channels;
+          uint8_t *new_data = stbi_load_from_memory (vt->gfx.data, vt->gfx.data_size, &vt->gfx.buf_width, &vt->gfx.buf_height, &channels, 4);
+          if (!new_data)
+            {
+              char buf[256]= "\033_Gf=100;image decode error\033\\";
+              vt_write (vt, buf, strlen (buf) );
+              goto cleanup;
+            }
+          vt->gfx.format = 32;
+          free (vt->gfx.data);
+          vt->gfx.data = new_data;
+          vt->gfx.data_size= vt->gfx.buf_width * vt->gfx.buf_height * 4;
+        }
+#endif
+      Image *image = NULL;
+      switch (vt->gfx.action)
+        {
+          case 't': // transfer
+          case 'T': // transfer and present
+            switch (vt->gfx.format)
+              {
+                case 24:
+                case 32:
+                  image = image_add (vt->gfx.buf_width, vt->gfx.buf_height, vt->gfx.id,
+                                     vt->gfx.format, vt->gfx.data_size, vt->gfx.data);
+                  vt->gfx.data = NULL;
+                  vt->gfx.data_size=0;
+                  break;
+              }
+            if (vt->gfx.action == 't')
+              { break; }
+          // fallthrough
+          case 'p': // present
+            if (!image && vt->gfx.id)
+              { image = image_query (vt->gfx.id); }
+            if (image)
+              {
+                display_image (vt, image, vt->cursor_x, vt->gfx.rows, vt->gfx.columns,
+                               vt->gfx.x_cell_offset * 1.0 / vt->cw,
+                               vt->gfx.y_cell_offset * 1.0 / vt->ch,
+                               vt->gfx.x,
+                               vt->gfx.y,
+                               vt->gfx.w,
+                               vt->gfx.h);
+                int right = (image->width + (vt->cw-1) ) /vt->cw;
+                int down = (image->height + (vt->ch-1) ) /vt->ch;
+                for (int i = 0; i<down - 1; i++)
+                  { vtcmd_index (vt, " "); }
+                for (int i = 0; i<right; i++)
+                  { vtcmd_cursor_forward (vt, " "); }
+              }
+            break;
+          case 'q': // query
+            if (image_query (vt->gfx.id) )
+              {
+                char buf[256];
+                sprintf (buf, "\033_Gi=%i;OK\033\\", vt->gfx.id);
+                vt_write (vt, buf, strlen (buf) );
+              }
+            break;
+          case 'd': // delete
+            {
+              int row = vt->rows; // probably not right at start of session XXX
+              for (CtxList *l = vt->lines; l; l = l->next, row --)
+                {
+                  VtLine *line = l->data;
+                  for (int i = 0; i < 4; i ++)
+                    {
+                      int free_resource = 0;
+                      int match = 0;
+                      if (line->images[i])
+                        switch (vt->gfx.delete)
+                          {
+                            case 'A':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'a': /* all images visible on screen */
+                              match = 1;
+                              break;
+                            case 'I':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'i': /* all images with specified id */
+                              if ( ( (Image *) (line->images[i]) )->id == vt->gfx.id)
+                                { match = 1; }
+                              break;
+                            case 'P':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'p': /* all images intersecting cell
+          specified with x and y */
+                              if (line->image_col[i] == vt->gfx.x &&
+                                  row == vt->gfx.y)
+                                { match = 1; }
+                              break;
+                            case 'Q':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'q': /* all images with specified cell (x), row(y) and z */
+                              if (line->image_col[i] == vt->gfx.x &&
+                                  row == vt->gfx.y)
+                                { match = 1; }
+                              break;
+                            case 'Y':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'y': /* all images with specified row (y) */
+                              if (row == vt->gfx.y)
+                                { match = 1; }
+                              break;
+                            case 'X':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'x': /* all images with specified column (x) */
+                              if (line->image_col[i] == vt->gfx.x)
+                                { match = 1; }
+                              break;
+                            case 'Z':
+                              free_resource = 1;
+                              /* FALLTHROUGH */
+                            case 'z': /* all images with specified z-index (z) */
+                              break;
+                          }
+                      if (match)
+                        {
+                          line->images[i] = NULL;
+                          if (free_resource)
+                            {
+                              // XXX : NYI
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        }
+cleanup:
+      if (vt->gfx.data)
+        { free (vt->gfx.data); }
+      vt->gfx.data = NULL;
+      vt->gfx.data_size=0;
+      vt->gfx.multichunk=0;
+      vt_gfx_pending = 0;
+    }
+  else
+     vt_gfx_pending = 1;
+}
+
+static void vt_state_vt52 (VT *vt, int byte)
+{
+  /* in vt52 mode, utf8_pos being non 0 means we got ESC prior */
+  switch (vt->utf8_pos)
+    {
+      case 0:
+        if (_vt_handle_control (vt, byte) == 0)
+          switch (byte)
+            {
+              case 27: /* ESC */
+                vt->utf8_pos = 1;
+                break;
+              default:
+                {
+                  char str[2] = {byte & 127, 0};
+                  /* we're not validating utf8, and our utf8 manipulation
+                   * functions are not robust against malformed utf8,
+                   * hence we strip to ascii
+                   */
+                  _vt_add_str (vt, str);
+                }
+                break;
+            }
+        break;
+      case 1:
+        vt->utf8_pos = 0;
+        switch (byte)
+          {
+            case 'A':
+              vtcmd_cursor_up (vt, " ");
+              break;
+            case 'B':
+              vtcmd_cursor_down (vt, " ");
+              break;
+            case 'C':
+              vtcmd_cursor_forward (vt, " ");
+              break;
+            case 'D':
+              vtcmd_cursor_backward (vt, " ");
+              break;
+            case 'F':
+              vtcmd_set_alternate_font (vt, " ");
+              break;
+            case 'G':
+              vtcmd_set_default_font (vt, " ");
+              break;
+            case 'H':
+              _vt_move_to (vt, 1, 1);
+              break;
+            case 'I':
+              vtcmd_reverse_index (vt, " ");
+              break;
+            case 'J':
+              vtcmd_erase_in_display (vt, "[0J");
+              break;
+            case 'K':
+              vtcmd_erase_in_line (vt, "[0K");
+              break;
+            case 'Y':
+              vt->utf8_pos = 2;
+              break;
+            case 'Z':
+              vt_write (vt, "\033/Z", 3);
+              break;
+            case '<':
+              vt->state = vt_state_neutral;
+              break;
+            default:
+              break;
+          }
+        break;
+      case 2:
+        _vt_move_to (vt, byte - 31, vt->cursor_x);
+        vt->utf8_pos = 3;
+        break;
+      case 3:
+        _vt_move_to (vt, vt->cursor_y, byte - 31);
+        vt->utf8_pos = 0;
+        break;
+    }
+}
+
+static void vt_sixels (VT *vt, const char *sixels)
+{
+  uint8_t colors[256][3];
+  int width = 0;
+  int height = 0;
+  int x = 0;
+  int y = 0;
+  Image *image;
+  uint8_t *pixels = NULL;
+  int repeat = 1;
+  const char *p = sixels;
+  int pal_no = 0;
+#if 0
+  for (; *p && *p != ';'; p++);
+  if (*p == ';') { p ++; }
+  printf ("%i:[%c]%i\n", __LINE__, *p, atoi (p) );
+  // should be 0
+  for (; *p && *p != ';'; p++);
+  if (*p == ';') { p ++; }
+  printf ("%i:[%c]%i\n", __LINE__, *p, atoi (p) );
+  // if 1 then transparency is enabled - otherwise use bg color
+  for (; *p && *p != 'q'; p++);
+#endif
+  //for (; *p && *p != '"'; p++);
+  while (*p && *p != 'q') { p++; }
+  if (*p == 'q') { p++; }
+  if (*p == '"') { p++; }
+  //printf ("%i:[%c]%i\n", __LINE__, *p, atoi (p));
+  for (; *p && *p != ';'; p++);
+  if (*p == ';') { p ++; }
+  //printf ("%i:[%c]%i\n", __LINE__, *p, atoi (p));
+  for (; *p && *p != ';'; p++);
+  if (*p == ';') { p ++; }
+  width = atoi (p);
+  for (; *p && *p != ';'; p++);
+  if (*p == ';') { p ++; }
+  height = atoi (p);
+  if (width * height > 2048 * 2048)
+    return;
+  if (width <= 0 || height <=0)
+    {
+      width = 0;
+      height = 0;
+      // XXX  : a copy paste dry-run
+      for (const char *t=p; *t; t++)
+        {
+          if (*t == '#')
+            {
+              t++;
+              while (*t && *t >= '0' && *t <= '9') { t++; }
+              if (*t == ';')
+                {
+                  for (; *t && *t != ';'; t++);
+                  if (*t == ';') { t ++; }
+                  for (; *t && *t != ';'; t++);
+                  if (*t == ';') { t ++; }
+                  for (; *t && *t != ';'; t++);
+                  if (*t == ';') { t ++; }
+                  for (; *t && *t != ';'; t++);
+                  if (*t == ';') { t ++; }
+                  while (*t && *t >= '0' && *t <= '9') { t++; }
+                  t--;
+                }
+              else
+                {
+                  t--;
+                }
+            }
+          else if (*t == '$') // carriage return
+            {
+              if (x > width) { width = x; }
+              x = 0;
+            }
+          else if (*t == '-') // line feed
+            {
+              y += 6;
+              x = 0;
+            }
+          else if (*t == '!') // repeat
+            {
+              t++;
+              repeat = atoi (t);
+              while (*t && *t >= '0' && *t <= '9') { t++; }
+              t--;
+            }
+          else if (*t >= '?' && *t <= '~') /* sixel data */
+            {
+              x += repeat;
+              repeat = 1;
+            }
+        }
+      height = y;
+    }
+  x = 0;
+  y = 0;
+  pixels = ctx_calloc (width * (height + 6), 4);
+  image = image_add (width, height, 0,
+                     32, width*height*4, pixels);
+  uint8_t *dst = pixels;
+  for (; *p; p++)
+    {
+      if (*p == '#')
+        {
+          p++;
+          pal_no = atoi (p);
+          if (pal_no < 0 || pal_no > 255) { pal_no = 255; }
+          while (*p && *p >= '0' && *p <= '9') { p++; }
+          if (*p == ';')
+            {
+              /* define a palette */
+              for (; *p && *p != ';'; p++);
+              if (*p == ';') { p ++; }
+              // color_model , 2 is rgb
+              for (; *p && *p != ';'; p++);
+              if (*p == ';') { p ++; }
+              colors[pal_no][0] = atoi (p) * 255 / 100;
+              for (; *p && *p != ';'; p++);
+              if (*p == ';') { p ++; }
+              colors[pal_no][1] = atoi (p) * 255 / 100;
+              for (; *p && *p != ';'; p++);
+              if (*p == ';') { p ++; }
+              colors[pal_no][2] = atoi (p) * 255 / 100;
+              while (*p && *p >= '0' && *p <= '9') { p++; }
+              p--;
+            }
+          else
+            {
+              p--;
+            }
+        }
+      else if (*p == '$') // carriage return
+        {
+          x = 0;
+          dst = &pixels[ (4 * width * y)];
+        }
+      else if (*p == '-') // line feed
+        {
+          y += 6;
+          x = 0;
+          dst = &pixels[ (4 * width * y)];
+        }
+      else if (*p == '!') // repeat
+        {
+          p++;
+          repeat = atoi (p);
+          while (*p && *p >= '0' && *p <= '9') { p++; }
+          p--;
+        }
+      else if (*p >= '?' && *p <= '~') /* sixel data */
+        {
+          int sixel = (*p) - '?';
+          if (x + repeat <= width && y < height)
+            {
+              for (int bit = 0; bit < 6; bit ++)
+                {
+                  if (sixel & (1 << bit) )
+                    {
+                      for (int u = 0; u < repeat; u++)
+                        {
+                          for (int c = 0; c < 3; c++)
+                            {
+                              dst[ (bit * width * 4) + u * 4 + c] = colors[pal_no][c];
+                              dst[ (bit * width * 4) + u * 4 + 3] = 255;
+                            }
+                        }
+                    }
+                }
+            }
+          x   += repeat;
+          dst += (repeat * 4);
+          repeat = 1;
+        }
+    }
+  if (image)
+    {
+      display_image (vt, image, vt->cursor_x, 0,0, 0.0, 0.0, 0,0,0,0);
+      int right = (image->width + (vt->cw-1) ) /vt->cw;
+      int down = (image->height + (vt->ch-1) ) /vt->ch;
+      for (int i = 0; i<down - 1; i++)
+        { vtcmd_index (vt, " "); }
+      for (int i = 0; i<right; i++)
+        { vtcmd_cursor_forward (vt, " "); }
+      vt_line_feed (vt);
+      vt_carriage_return (vt);
+    }
+  ctx_client_rev_inc (vt->client);
+}
+
+static inline void vt_ctx_unrled (VT *vt, char byte)
+{
+#if CTX_VT_USE_FRAMEDIFF
+  ctx_string_append_byte (vt->current_line->frame, byte);
+#endif
+  ctx_parser_feed_byte (vt->ctxp, byte);
+}
+
+static void vt_state_ctx (VT *vt, int byte)
+{
+#if 0
+  //fprintf (stderr, "%c", byte);
+  if (CTX_UNLIKELY(byte == CTX_CODEC_CHAR))
+  {
+    if (CTX_UNLIKELY(vt->in_prev_match))
+    {
+      char *prev = vt->current_line->prev;
+      int prev_length = vt->current_line->prev_length;
+      int start = atoi (vt->reference);
+      int len = 0;
+      if (strchr (vt->reference, ' '))
+        len = atoi (strchr (vt->reference, ' ')+1);
+
+      //fprintf (stderr, "%i-%i:", start, len);
+
+      if (start < 0) start = 0;
+      if (start >= (prev_length))start = prev_length-1;
+      if (len + start > prev_length)
+        len = prev_length - start;
+
+      //fprintf (stderr, "%i-%i\n", start, len);
+
+      if (CTX_UNLIKELY (start == 0 && len == 0))
+      {
+        vt_ctx_unrled (vt, CTX_CODEC_CHAR);
+      }
+      else
+      {
+        if (prev)
+        for (int i = 0; i < len && start + i < prev_length; i++)
+        {
+          vt_ctx_unrled (vt, prev[start + i]);
+        }
+      }
+      vt->ref_len = 0;
+      vt->reference[0]=0;
+      vt->in_prev_match = 0;
+    }
+    else
+    {
+      vt->reference[0]=0;
+      vt->ref_len = 0;
+      vt->in_prev_match = 1;
+    }
+  }
+  else
+  {
+    if (CTX_UNLIKELY(vt->in_prev_match))
+    {
+      if (vt->ref_len < 15)
+      {
+        vt->reference[vt->ref_len++]=byte;
+        vt->reference[vt->ref_len]=0;
+      }
+    }
+    else
+    {
+      vt_ctx_unrled (vt, byte);
+    }
+  }
+#else
+      vt_ctx_unrled (vt, byte);
+#endif
+}
+
+static int vt_decoder_feed (VT *vt, int byte)
+{
+  int encoding = vt->encoding;
+  switch (encoding)
+    {
+      case 0: /* utf8 */
+        if (!vt->utf8_expected_bytes)
+          {
+            vt->utf8_expected_bytes = mrg_utf8_len (byte) - 1;
+            vt->utf8_pos = 0;
+          }
+        if (vt->utf8_expected_bytes)
+          {
+            vt->utf8_holding[vt->utf8_pos++] = byte;
+            vt->utf8_holding[vt->utf8_pos] = 0;
+            if (vt->utf8_pos == vt->utf8_expected_bytes + 1)
+              {
+                vt->utf8_expected_bytes = 0;
+                vt->utf8_pos = 0;
+              }
+            else
+              {
+                return 1;
+              }
+          }
+        else
+          {
+            vt->utf8_holding[0] = byte;
+            vt->utf8_holding[0] &= 127;
+            vt->utf8_holding[1] = 0;
+            if (vt->utf8_holding[0] == 0)
+              { vt->utf8_holding[0] = 32; }
+          }
+        break;
+      case 1:
+        if ( ! (byte>=0 && byte < 256) )
+          { byte = 255; }
+        strcpy ( (char *) &vt->utf8_holding[0], &charmap_cp437[byte][0]);
+        vt->utf8_expected_bytes = mrg_utf8_len (byte) - 1; // ?
+        break;
+      default:
+        vt->utf8_holding[0] = byte & 127;
+        vt->utf8_holding[1] = 0;
+        break;
+    }
+  return 0;
+}
+
+static void vt_state_swallow (VT *vt, int byte)
+{
+  vt->state = vt_state_neutral;
+}
+
+static int vt_decode_hex_digit (char digit)
+{
+  if (digit >= '0' && digit <='9')
+    return digit - '0';
+  if (digit >= 'a' && digit <='f')
+    return digit - 'a' + 10;
+  if (digit >= 'A' && digit <='F')
+    return digit - 'A' + 10;
+  return 0;
+}
+
+static int vt_decode_hex (const char *two_digits)
+{
+  return vt_decode_hex_digit (two_digits[0]) * 16 +
+         vt_decode_hex_digit (two_digits[1]);
+}
+
+static uint8_t palettes[][16][3]=
+{
+  {
+{0, 0, 0},
+{160, 41, 41},
+{74, 160, 139},
+{135, 132, 83},
+{36, 36, 237},
+{171, 74, 223},
+{59, 107, 177},
+{195, 195, 195},
+{111, 111, 111},
+{237, 172, 130},
+{153, 237, 186},
+{233, 216, 8},
+{130, 180, 237},
+{214, 111, 237},
+{29, 225, 237},
+{255, 255, 255},
+
+  },
+
+  {
+    {0, 0, 0},
+    {127, 0, 0},
+    {90, 209, 88},
+    {136, 109, 0},
+    {3, 9, 235},
+    {90, 4, 150},
+    {43, 111, 150},
+    {178, 178, 178},
+    {87, 87, 87},
+    {193, 122, 99},
+    {110, 254, 174},
+    {255, 200, 0},
+    {10, 126, 254},
+    {146, 155, 249},
+    {184, 208, 254},
+    {255, 255, 255},
+
+  },{
+    {0, 0, 0},
+    {147, 53, 38},
+    {30, 171, 82},
+    {188, 153, 0},
+    {32, 71, 193},
+    {236, 49, 188},
+    {42, 182, 253},
+    {149, 149, 149},
+    {73, 73, 73},
+    {210, 36, 0},
+    {96, 239, 97},
+    {247, 240, 2},
+    {93, 11, 249},
+    {222, 42, 255},
+    {11, 227, 255},
+    {233, 235, 235},
+  },
+
+
+  { {0, 0, 0},{97, 27, 0},{129, 180, 0},{127, 100, 0},{44, 15, 255},{135, 10, 167},{20, 133, 164},{174, 174, 174},{71, 71, 71},{167, 114, 90},{162, 214, 127},{255, 251, 83},{118, 77, 253},{192, 121, 255},{14, 217, 255},{255, 255, 255},
+  },{
+
+
+#if 0
+    {
+      {0, 0, 0},
+      {144, 0, 0},
+      {9, 154, 9},
+      {255, 137, 113},
+      {3, 0, 255},
+      {56, 0, 132},
+      {0, 131, 131},
+      {204, 204, 204},
+      {127, 127, 127},
+      {255, 33, 0},
+      {113, 255, 88},
+      {255, 236, 8},
+      {1, 122, 255},
+      {235, 0, 222},
+      {0, 217, 255},
+      {255, 255, 255},
+    },{
+#endif
+
+
+    {0, 0, 0},
+    {139, 0, 0},
+    {9, 154, 9},
+    {255, 137, 113},
+    {3, 0, 255},
+    {56, 0, 132},
+    {0, 111, 111},
+    {204, 204, 204},
+    {127, 127, 127},
+    {255, 33, 0},
+    {118, 255, 92},
+    {255, 230, 15},
+    {1, 122, 255},
+    {232, 0, 220},
+    {1, 217, 255},
+    {255, 255, 255},
+  },
+  {
+
+    {0, 0, 0},
+    {191, 0, 0},
+    {3, 187, 0},
+    {254, 212, 0},
+    {0, 0, 255},
+    {80, 0, 128},
+    {0, 156, 255},
+    {166, 166, 166},
+    {84, 84, 84},
+    {255, 62, 0},
+    {85, 255, 143},
+    {255, 255, 0},
+    {67, 80, 255},
+    {243, 70, 255},
+    {30, 255, 222},
+    {255, 255, 255},
+  },
+  {
+    /* */
+    { 32, 32, 32}, // 0 - background (black)
+    {165, 15, 21}, // 1               red
+    { 95,130, 10}, // 2               green
+    {205,145, 60}, // 3               yellow
+    { 49,130,189}, // 4               blue
+    {120, 40,160}, // 5               magenta
+    {120,230,230}, // 6               cyan
+    {196,196,196},// 7                light-gray
+    { 85, 85, 85},// 8                dark gray
+
+    {251,106, 74},// 9                light red
+    {130,215,140},// 10               light green
+    {255,255,  0},// 11               light yellow
+    {107,174,214},// 12               light blue
+    {215,130,160},// 13               light magenta
+    {225,255,245},// 14               light cyan
+    {255,255,255},// 15 - foreground (white)
+  },{
+    /* */
+    { 32, 32, 32}, // 0 - background (black)
+    {160,  0,  0}, // 1               red
+    {  9,233,  0}, // 2               green
+    {220,110, 44}, // 3               yellow
+    {  0,  0,200}, // 4               blue
+    { 90,  0,130}, // 5               magenta
+    {  0,156,180}, // 6               cyan
+    {196,196,196}, // 7                light-gray
+    { 85, 85, 85}, // 8                dark gray
+
+    {240, 60, 40}, // 9                light red
+    {170,240, 80}, // 10               light green
+    {248,248,  0}, // 11               light yellow
+    {  0, 40,255}, // 12               light blue
+    {204, 62,214}, // 13               light magenta
+    { 10,234,254}, // 14               light cyan
+    {255,255,255}, // 15 - foreground (white)
+  },
+  /* inspired by DEC */
+  { {  0,  0,  0}, // 0 - background  black
+    {150, 10, 10}, // 1               red
+    { 21,133,  0}, // 2               green
+
+    {103,103, 24}, // 3               yellow
+    { 44, 44,153}, // 4               blue
+    {123, 94,183}, // 5               magenta
+
+    { 20,183,193}, // 6               cyan
+
+    {177,177,177},// 7                light-gray
+    {100,100,100},// 8                dark gray
+
+    {244, 39, 39},// 9                light red
+    { 61,224, 81},// 10               light green
+    {255,255,  0},// 11               light yellow
+    { 61, 61,244},// 12               light blue
+    {240, 11,240},// 13               light magenta
+    { 61,234,234},// 14               light cyan
+
+    {255,255,255},// 15 - foreground  white
+  },
+};
+
+static void vt_state_osc (VT *vt, int byte)
+{
+  // https://ttssh2.osdn.jp/manual/4/en/about/ctrlseq.html
+  // and in "\033\" rather than just "\033", this would cause
+  // a stray char
+  //if (byte == '\a' || byte == 27 || byte == 0 || byte < 32)
+  if ( (byte < 32) && ( (byte < 8) || (byte > 13) ) )
+    {
+      int n = parse_int (vt->argument_buf, 0);
+      switch (n)
+        {
+          case 0:
+          case 1:
+          case 2:
+#if 0
+    {"]0;New_title\e\",  0, , }, /* id: set window title */ "
+#endif
+            vt_set_title (vt, vt->argument_buf + 3);
+            break;
+          case 4: // set palette entry
+            {
+            int color_no = parse_int (vt->argument_buf + 2, 0);
+            char *rest = vt->argument_buf + 3;
+            rest = strchr (rest, ';');
+
+            if (rest++)
+            if (strlen(rest)>10 &&
+                rest[0] == 'r' &&
+                rest[1] == 'g' &&
+                rest[2] == 'b' &&
+                rest[3] == ':' &&
+                rest[6] == '/' &&
+                rest[9] == '/')
+            {
+              int red = vt_decode_hex (&rest[4]);
+              int green = vt_decode_hex (&rest[7]);
+              int blue = vt_decode_hex (&rest[10]);
+          //  fprintf (stderr, "set color:%i  %i %i %i\n", color_no, red, green, blue);
+              if (color_no >= 0 && color_no <= 15)
+              {
+                palettes[0][color_no][0]=red;
+                palettes[0][color_no][1]=green;
+                palettes[0][color_no][2]=blue;
+              }
+            }
+            }
+            break;
+          case 12: // text cursor color
+            break;
+          case 17: // highlight color
+            break;
+          case 19: // ??
+            break;
+
+          case 10: // text fg
+#if 0
+#if 0
+    {"]11;",  0, , }, /* id: set foreground color */
+#endif
+            {
+              /* request current foreground color, xterm does this to
+                 determine if it can use 256 colors, when this test fails,
+                 it still mixes in color 130 together with stock colors
+               */
+              char buf[128];
+              sprintf (buf, "\033]10;rgb:%2x/%2x/%2x\033\\",
+                       vt->fg_color[0], vt->fg_color[1], vt->fg_color[2]);
+              vt_write (vt, buf, strlen (buf) );
+            }
+#endif
+            break;
+          case 11: // text bg
+#if 0
+    {"]11;",  0, , }, /* id: get background color */
+            {
+              /* get background color */
+              char buf[128];
+              sprintf (buf, "\033]11;rgb:%2x/%2x/%2x\033\\",
+                       vt->bg_color[0], vt->bg_color[1], vt->bg_color[2]);
+              vt_write (vt, buf, strlen (buf) );
+            }
+#endif
+            break;
+#if 0
+    {"]1337;key=value:base64data\b\",  0, vtcmd_erase_in_line, VT100}, /* args:keyvalue id: iterm2 graphics */ "
+#endif
+#ifdef STBI_INCLUDE_STB_IMAGE_H
+          case 1337:
+            if (!strncmp (&vt->argument_buf[6], "File=", 5) )
+              {
+                {
+                  /* iTerm2 image protocol */
+                  int width = 0;
+                  int height = 0;
+                  int file_size = 0;
+                  int show_inline = 0;
+                  int preserve_aspect = 1;
+                  char *name = NULL;
+                  char *p = &vt->argument_buf[11];
+                  char key[128]="";
+                  char value[128]="";
+                  int in_key=1;
+                  if (preserve_aspect) {}; /* XXX : NYI */
+                  for (; *p && *p!=':'; p++)
+                    {
+                      if (in_key)
+                        {
+                          if (*p == '=')
+                            { in_key = 0; }
+                          else
+                            {
+                              if (strlen (key) < 124)
+                                {
+                                  key[strlen (key)+1] = 0;
+                                  key[strlen (key)] = *p;
+                                }
+                            }
+                        }
+                      else
+                        {
+                          if (*p == ';')
+                            {
+                              if (!strcmp (key, "name") )
+                                {
+                                  name = ctx_strdup (value);
+                                }
+                              else if (!strcmp (key, "width") )
+                                {
+                                  width = atoi (value);
+                                  if (strchr (value, 'x') )
+                                    { /* pixels */ }
+                                  else if (strchr (value, '%') )
+                                    {
+                                      /* percent */
+                                      width = width / 100.0 * (vt->cw * vt->cols);
+                                    }
+                                  else
+                                    { /* chars */ width = width * vt->cw; }
+                                }
+                              else if (!strcmp (key, "height") )
+                                {
+                                  height = atoi (value);
+                                  if (strchr (value, 'x') )
+                                    { /* pixels */ }
+                                  else if (strchr (value, '%') )
+                                    {
+                                      /* percent */
+                                      height = height / 100.0 * (vt->ch * vt->rows);
+                                    }
+                                  else
+                                    { /* chars */ height = height * vt->ch; }
+                                }
+                              else if (!strcmp (key, "preserveAspectRatio") )
+                                {
+                                  preserve_aspect = atoi (value);
+                                }
+                              else if (!strcmp (key, "inline") )
+                                {
+                                  show_inline = atoi (value);
+                                }
+                              key[0]=0;
+                              value[0]=0;
+                              in_key = 1;
+                            }
+                          else
+                            {
+                              if (strlen (value) < 124)
+                                {
+                                  value[strlen (value)+1] = 0;
+                                  value[strlen (value)] = *p;
+                                }
+                            }
+                        }
+                    }
+                  if (key[0])
+                    {
+                      // code-dup
+                      if (!strcmp (key, "name") )
+                        {
+                          name = ctx_strdup (value);
+                        }
+                      else if (!strcmp (key, "width") )
+                        {
+                          width = atoi (value);
+                          if (strchr (value, 'x') )
+                            { /* pixels */ }
+                          else if (strchr (value, '%') )
+                            {
+                              /* percent */
+                              width = width / 100.0 * (vt->cw * vt->cols);
+                            }
+                          else
+                            { /* chars */ width = width * vt->cw; }
+                        }
+                      else if (!strcmp (key, "height") )
+                        {
+                          height = atoi (value);
+                          if (strchr (value, 'x') )
+                            { /* pixels */ }
+                          else if (strchr (value, '%') )
+                            {
+                              /* percent */
+                              height = height / 100.0 * (vt->ch * vt->rows);
+                            }
+                          else
+                            { /* chars */ height = height * vt->ch; }
+                        }
+                      else if (!strcmp (key, "preserveAspectRatio") )
+                        {
+                          preserve_aspect = atoi (value);
+                        }
+                      else if (!strcmp (key, "inline") )
+                        {
+                          show_inline = atoi (value);
+                        }
+                    }
+                  if (*p == ':')
+                    {
+                      p++;
+                    }
+                  if (0)
+                    fprintf (stderr, "%s %i %i %i %i{%s\n", name?name:"",
+                             width, height, file_size, show_inline,
+                             p);
+                  Image *image = NULL;
+                  {
+                    int bin_length = vt->argument_buf_len;
+                    uint8_t *data2 = ctx_malloc (bin_length);
+                    bin_length = ctx_base642bin ( (char *) p,
+                                                 &bin_length,
+                                                 data2);
+                    int channels = 4;
+                    int buf_width = 0;
+                    int buf_height = 0;
+                    uint8_t *new_data = stbi_load_from_memory (data2, bin_length, &buf_width, &buf_height, &channels, 4);
+                    free (data2);
+                    if (new_data)
+                      {
+                        image = image_add (buf_width, buf_height, 0,
+                                           32, buf_width*buf_height*4, new_data);
+                      }
+                    else
+                      {
+                        fprintf (stderr, "image decoding problem %s\n", stbi_failure_reason());
+                        fprintf (stderr, "len: %i\n", bin_length);
+                      }
+                  }
+                  if (image)
+                    {
+                      display_image (vt, image, vt->cursor_x, 0,0, 0.0, 0.0, 0,0,0,0);
+                      int right = (image->width + (vt->cw-1) ) /vt->cw;
+                      int down = (image->height + (vt->ch-1) ) /vt->ch;
+                      for (int i = 0; i<down - 1; i++)
+                        { vtcmd_index (vt, " "); }
+                      for (int i = 0; i<right; i++)
+                        { vtcmd_cursor_forward (vt, " "); }
+                    }
+                }
+              }
+            break;
+#endif
+          case 104:
+            break;
+          case 8:
+            fprintf (stderr, "unhandled OSC 8, hyperlink\n");
+            break;
+          default:
+            fprintf (stderr, "unhandled OSC %i\n", n);
+            break;
+        }
+      if (byte == 27)
+        {
+          vt->state = vt_state_swallow;
+        }
+      else
+        {
+          vt->state = vt_state_neutral;
+        }
+    }
+  else
+    {
+      vt_argument_buf_add (vt, byte);
+    }
+}
+
+
+static void vt_state_sixel (VT *vt, int byte)
+{
+  // https://ttssh2.osdn.jp/manual/4/en/about/ctrlseq.html
+  // and in "\033\" rather than just "\033", this would cause
+  // a stray char
+  if ( (byte < 32) && ( (byte < 8) || (byte > 13) ) )
+    {
+      vt_sixels (vt, vt->argument_buf);
+      if (byte == 27)
+        {
+          vt->state = vt_state_swallow;
+        }
+      else
+        {
+          vt->state = vt_state_neutral;
+        }
+    }
+  else
+    {
+      vt_argument_buf_add (vt, byte);
+      //fprintf (stderr, "\r%i ", vt->argument_buf_len);
+    }
+}
+
+//void add_tab (Ctx *ctx, const char *commandline, int can_launch);
+//void vt_screenshot (const char *output_path);
+
+static void vt_state_apc_generic (VT *vt, int byte)
+{
+  if ( (byte < 32) && ( (byte < 8) || (byte > 13) ) )
+    {
+      if (vt->argument_buf[1] == 'G') /* graphics - from kitty */
+        {
+          vt_gfx (vt, vt->argument_buf);
+        }
+      else if (vt->argument_buf[1] == 'C') /* launch command */
+      {
+        if (vt->can_launch)
+        {
+          int   can_launch = 0;
+          int   no_title = 0;
+          int   no_move = 0;
+          int   no_resize = 0;
+          int   layer = 0;
+  // escape subsequent arguments so that we dont have to pass a string?
+          float x = -1.0;
+          float y = -1.0;
+          int   z = 0;
+          float width = -1.0;
+          float height = -1.0;
+
+          for (int i=2; vt->argument_buf[i]; i++)
+          {
+            if (!strncmp (&vt->argument_buf[i], "can_launch=1", strlen ("can_launch=1")))
+              can_launch = 1;
+            if (!strncmp (&vt->argument_buf[i], "no_title=1", strlen("no_title=1")))
+              no_title = 1;
+            if (!strncmp (&vt->argument_buf[i], "no_move=1", strlen("no_move=1")))
+              no_move = 1;
+            else if (!strncmp (&vt->argument_buf[i], "z=", 2))
+              z=atoi(&vt->argument_buf[i]+strlen("z="));
+            else if (!strncmp (&vt->argument_buf[i], "x=", 2))
+              x=atof(&vt->argument_buf[i]+strlen("x="));
+            else if (!strncmp (&vt->argument_buf[i], "y=", 2))
+              y=atof(&vt->argument_buf[i]+strlen("y="));
+            else if (!strncmp (&vt->argument_buf[i], "width=", 6))
+              width=atof(&vt->argument_buf[i]+strlen("width="));
+            else if (!strncmp (&vt->argument_buf[i], "height=", 7))
+              height=atof(&vt->argument_buf[i]+strlen("height="));
+          }
+
+          if (width + no_resize + layer + height + x + y + no_title + no_move + z + can_launch) {};
+
+          char *sep = strchr(vt->argument_buf, ';');
+          if (sep)
+          {
+            //fprintf (stderr, "[%s]", sep +  1);
+            if (!strncmp (sep + 1, "fbsave", 6))
+            {
+              // vt_screenshot (sep + 8);
+            }
+            else
+            {
+          //  add_tab (ctx, sep + 1, can_launch);
+            }
+          }
+        }
+
+      }
+      vt->state = ( (byte == 27) ?  vt_state_swallow : vt_state_neutral);
+    }
+  else
+    {
+      vt_argument_buf_add (vt, byte);
+    }
+}
+
+#if 0
+    {"_G..\e\", 0, vtcmd_delete_n_chars, VT102}, /* ref:none id: <a href='https://sw.kovidgoyal.net/kitty/graphics-protocol.html'>kitty graphics</a> */ "
+    {"_A..\e\", 0, vtcmd_delete_n_chars, VT102}, /* id:  <a href='https://github.com/hodefoting/atty/'>atty</a> audio input/output */ "
+    {"_C..\e\", 0, vtcmd_delete_n_chars, VT102}, /* id:  run command */ "
+#endif
+static void vt_state_apc (VT *vt, int byte)
+{
+  if (byte == 'A')
+    {
+      vt_argument_buf_add (vt, byte);
+      vt->state = vt_state_apc_audio;
+    }
+  else if ( (byte < 32) && ( (byte < 8) || (byte > 13) ) )
+    {
+      vt->state = ( (byte == 27) ?  vt_state_swallow : vt_state_neutral);
+    }
+  else
+    {
+      vt_argument_buf_add (vt, byte);
+      vt->state = vt_state_apc_generic;
+    }
+}
+
+static void vt_state_esc_foo (VT *vt, int byte)
+{
+  vt_argument_buf_add (vt, byte);
+  vt->state = vt_state_neutral;
+  handle_sequence (vt, vt->argument_buf);
+}
+
+static void vt_state_esc_sequence (VT *vt, int byte)
+{
+  if (_vt_handle_control (vt, byte) == 0)
+    {
+      if (byte == 27)
+        {
+        }
+      else if (byte >= '@' && byte <= '~')
+        {
+          vt_argument_buf_add (vt, byte);
+          vt->state = vt_state_neutral;
+          handle_sequence (vt, vt->argument_buf);
+        }
+      else
+        {
+          vt_argument_buf_add (vt, byte);
+        }
+    }
+}
+
+static void vt_state_esc (VT *vt, int byte)
+{
+  if (_vt_handle_control (vt, byte) == 0)
+    switch (byte)
+      {
+        case 27: /* ESCape */
+          break;
+        case ')':
+        case '#':
+        case '(':
+          {
+            char tmp[]= {byte, '\0'};
+            vt_argument_buf_reset (vt, tmp);
+            vt->state = vt_state_esc_foo;
+          }
+          break;
+        case '[':
+        case '%':
+        case '+':
+        case '*':
+          {
+            char tmp[]= {byte, '\0'};
+            vt_argument_buf_reset (vt, tmp);
+            vt->state = vt_state_esc_sequence;
+          }
+          break;
+
+#if 0
+    {"Psixel_data\e\",  0, , }, /* id: sixels */ "
+#endif
+
+        case 'P':
+          {
+            char tmp[]= {byte, '\0'};
+            vt_argument_buf_reset (vt, tmp);
+            vt->state = vt_state_sixel;
+          }
+          break;
+        case ']':
+          {
+            char tmp[]= {byte, '\0'};
+            vt_argument_buf_reset (vt, tmp);
+            vt->state = vt_state_osc;
+          }
+          break;
+        case '^':  // privacy message
+        case '_':  // APC
+        case 'X':  // SOS
+          {
+            char tmp[]= {byte, '\0'};
+            vt_argument_buf_reset (vt, tmp);
+            vt->state = vt_state_apc;
+          }
+          break;
+        default:
+          {
+            char tmp[]= {byte, '\0'};
+            tmp[0]=byte;
+            vt->state = vt_state_neutral;
+            handle_sequence (vt, tmp);
+          }
+          break;
+      }
+}
+
+static void vt_state_neutral (VT *vt, int byte)
+{
+  if (CTX_UNLIKELY(_vt_handle_control (vt, byte) != 0))
+    return;
+  if (CTX_LIKELY(byte != 27))
+  {
+    if (vt_decoder_feed (vt, byte) )
+      return;
+    if (vt->charset[vt->shifted_in] != 0 &&
+        vt->charset[vt->shifted_in] != 'B')
+      {
+        char **charmap;
+        switch (vt->charset[vt->shifted_in])
+          {
+            case 'A':
+              charmap = charmap_uk;
+              break;
+            case 'B':
+              charmap = charmap_ascii;
+              break;
+            case '0':
+              charmap = charmap_graphics;
+              break;
+            case '1':
+              charmap = charmap_cp437;
+              break;
+            case '2':
+              charmap = charmap_graphics;
+              break;
+            default:
+              charmap = charmap_ascii;
+              break;
+          }
+        if ( (vt->utf8_holding[0] >= ' ') && (vt->utf8_holding[0] <= '~') )
+          {
+            _vt_add_str (vt, charmap[vt->utf8_holding[0]-' ']);
+          }
+      }
+    else
+      {
+        // ensure vt->utf8_holding contains a valid utf8
+        uint32_t codepoint;
+        uint32_t state = 0;
+        for (int i = 0; vt->utf8_holding[i]; i++)
+          { utf8_decode (&state, &codepoint, vt->utf8_holding[i]); }
+        if (state != UTF8_ACCEPT)
+          {
+            /* otherwise mangle it so that it does */
+            vt->utf8_holding[0] &= 127;
+            vt->utf8_holding[1] = 0;
+            if (vt->utf8_holding[0] == 0)
+              { vt->utf8_holding[0] = 32; }
+          }
+        _vt_add_str (vt, (char *) vt->utf8_holding);
+      }
+  }
+  else // ESCape
+  {
+    vt->state = vt_state_esc;
+  }
+}
+
+int vt_poll (VT *vt, int timeout)
+{
+  if (!vt) return 0;
+  int read_size = sizeof (vt->buf);
+  int got_data = 0;
+
+  // read_size 1m1.142s
+  // read_size*10  52s
+  // read_size*5   53.8s
+  // read_size*4   53.78s
+  // read_size*3   .....s
+  // read_size*2   56.99s
+  int remaining_chars = read_size * 3;// * 100;
+  int len = 0;
+  //vt_audio_task (vt, 0);
+#if 1
+  if (vt->cursor_visible && vt->smooth_scroll)
+    {
+      remaining_chars = vt->cols / 2;
+    }
+#endif
+  read_size = MIN (read_size, remaining_chars);
+  long start_ticks = ctx_ticks ();
+  long ticks = start_ticks;
+  int first = 1;
+  while (remaining_chars > 0 &&
+         vt_waitdata (vt, first?0:1000*5) &&
+         ( ticks - start_ticks < timeout ||  vt->state == vt_state_ctx))
+    {
+      first = 0;
+      vt_audio_task (vt, 0);
+  if (vt->in_smooth_scroll)
+    {
+      remaining_chars = 1;
+      // XXX : need a bail condition -
+      // /// so that we can stop accepting data until autowrap or similar
+    }
+      len = vt_read (vt, vt->buf, read_size);
+      if (len >0)
+      {
+     // fwrite (vt->buf, len, 1, vt->log);
+     // fwrite (vt->buf, len, 1, stdout);
+      }
+      for (int i = 0; i < len; i++)
+        { vt->state (vt, vt->buf[i]); }
+      // XXX allow state to break out in ctx mode on flush
+      got_data+=len;
+      remaining_chars -= len;
+      if (vt->state == vt_state_ctx) {
+         if (remaining_chars < read_size)
+         {
+           remaining_chars = read_size * 2;
+         }
+      }
+      ticks = ctx_ticks ();
+    }
+  if (got_data < 0)
+    {
+      if (kill (vt->vtpty.pid, 0) != 0)
+        {
+          vt->vtpty.done = 1;
+        }
+    }
+  return got_data;
+}
+
+/******/
+
+static const char *keymap_vt52[][2]=
+{
+  {"up",    "\033A" },
+  {"down",  "\033B" },
+  {"right", "\033C" },
+  {"left",  "\033D" },
+};
+
+static const char *keymap_application[][2]=
+{
+  {"up",    "\033OA" },
+  {"down",  "\033OB" },
+  {"right", "\033OC" },
+  {"left",  "\033OD" },
+};
+
+static const char *keymap_general[][2]=
+{
+  {"up",             "\033[A"},
+  {"down",           "\033[B"},
+  {"right",          "\033[C"},
+  {"left",           "\033[D"},
+  {"end",            "\033[F"},
+  {"home",           "\033[H"},
+  {"shift-up",       "\033[1;2A"},
+  {"shift-down",     "\033[1;2B"},
+  {"shift-right",    "\033[1;2C"},
+  {"shift-left",     "\033[1;2D"},
+  {"alt-a",          "\033a"},
+  {"alt-b",          "\033b"},
+  {"alt-c",          "\033c"},
+  {"alt-d",          "\033d"},
+  {"alt-e",          "\033e"},
+  {"alt-f",          "\033f"},
+  {"alt-g",          "\033g"},
+  {"alt-h",          "\033h"},
+  {"alt-i",          "\033i"},
+  {"alt-j",          "\033j"},
+  {"alt-k",          "\033k"},
+  {"alt-l",          "\033l"},
+  {"alt-m",          "\033m"},
+  {"alt-n",          "\033n"},
+  {"alt-o",          "\033o"},
+  {"alt-p",          "\033p"},
+  {"alt-q",          "\033q"},
+  {"alt-r",          "\033r"},
+  {"alt-s",          "\033s"},
+  {"alt-t",          "\033t"},
+  {"alt-u",          "\033u"},
+  {"alt-v",          "\033v"},
+  {"alt-w",          "\033w"},
+  {"alt-x",          "\033x"},
+  {"alt-y",          "\033y"},
+  {"alt-z",          "\033z"},
+  {"alt- ",          "\033 "},
+  {"alt-space",      "\033 "},
+  {"alt-0",          "\0330"},
+  {"alt-1",          "\0331"},
+  {"alt-2",          "\0332"},
+  {"alt-3",          "\0333"},
+  {"alt-4",          "\0334"},
+  {"alt-5",          "\0335"},
+  {"alt-6",          "\0336"},
+  {"alt-7",          "\0337"},
+  {"alt-8",          "\0338"},
+  {"alt-9",          "\0339"},
+  {"alt-return",     "\033\r"},
+  {"alt-backspace",  "\033\177"},
+  {"alt-up",         "\033[1;3A"},
+  {"alt-down",       "\033[1;3B"},
+  {"alt-right",      "\033[1;3C"},
+  {"alt-left",       "\033[1;3D"},
+  {"shift-alt-up",   "\033[1;4A"},
+  {"shift-alt-down", "\033[1;4B"},
+  {"shift-alt-right","\033[1;4C"},
+  {"shift-alt-left", "\033[1;4D"},
+  {"control-space",  "\000"},
+  {"control-up",     "\033[1;5A"},
+  {"control-down",   "\033[1;5B"},
+  {"control-right",  "\033[1;5C"},
+  {"control-left",   "\033[1;5D"},
+  {"shift-control-up",    "\033[1;6A"},
+  {"shift-control-down",  "\033[1;6B"},
+  {"shift-control-right", "\033[1;6C"},
+  {"shift-control-left",  "\033[1;6D"},
+  {"insert",         "\033[2~"},
+  {"delete",         "\033[3~"},
+  {"control-delete", "\033[3,5~"},
+  {"shift-delete",   "\033[3,2~"},
+  {"control-shift-delete",  "\033[3,6~"},
+  {"page-up",        "\033[5~"},
+  {"page-down",     "\033[6~"},
+  {"return",         "\r"},
+  {"shift-tab",      "\033Z"},
+  {"shift-return",   "\r"},
+  {"control-return", "\r"},
+  {"space",          " "},
+  {"shift-space",    " "},
+  {"control-a",      "\001"},
+  {"control-b",      "\002"},
+  {"control-c",      "\003"},
+  {"control-d",      "\004"},
+  {"control-e",      "\005"},
+  {"control-f",      "\006"},
+  {"control-g",      "\007"},
+  {"control-h",      "\010"},
+  {"control-i",      "\011"},
+  {"control-j",      "\012"},
+  {"control-k",      "\013"},
+  {"control-l",      "\014"},
+  {"control-m",      "\015"},
+  {"control-n",      "\016"},
+  {"control-o",      "\017"},
+  {"control-p",      "\020"},
+  {"control-q",      "\021"},
+  {"control-r",      "\022"},
+  {"control-s",      "\023"},
+  {"control-t",      "\024"},
+  {"control-u",      "\025"},
+  {"control-v",      "\026"},
+  {"control-w",      "\027"},
+  {"control-x",      "\030"},
+  {"control-y",      "\031"},
+  {"control-z",      "\032"},
+  {"escape",         "\033"},
+  {"tab",            "\t"},
+  {"backspace",      "\177"},
+  {"control-backspace", "\177"},
+  {"shift-backspace","\177"},
+  {"shift-tab",      "\033[Z"},
+
+  {"control-F1",     "\033[>11~"},
+  {"control-F2",     "\033[>12~"},
+  {"control-F3",     "\033[>13~"},
+  {"control-F4",     "\033[>14~"},
+  {"control-F5",     "\033[>15~"},
+
+  {"shift-F1",       "\033[?11~"},
+  {"shift-F2",       "\033[?12~"},
+  {"shift-F3",       "\033[?13~"},
+  {"shift-F4",       "\033[?14~"},
+  {"shift-F5",       "\033[?15~"},
+
+  {"F1",             "\033[11~"},  // hold screen   // ESC O P
+  {"F2",             "\033[12~"},  // print screen  //       Q
+  {"F3",             "\033[13~"},  // set-up                 R
+  {"F4",             "\033[14~"},  // data/talk              S
+  {"F5",             "\033[15~"},  // break
+  {"F6",             "\033[17~"},
+  {"F7",             "\033[18~"},
+  {"F8",             "\033[19~"},
+  {"F9",             "\033[20~"},
+  {"F10",            "\033[21~"},
+  {"F11",            "\033[22~"},
+  {"F12",            "\033[23~"},
+  {"control-/",       "\037"},
+  {"shift-control-/", "\037"},
+  {"control-[",       "\033"},
+  {"control-]",       "\035"},
+  {"shift-control-[", "\033"},
+  {"shift-control-]", "\031"},
+  {"shift-control-`", "\036"},
+  {"control-'",       "'"},
+  {"shift-control-'", "'"},
+  {"control-;",       ";"},
+  {"shift-control-;", ";"},
+  {"control-.",       "."},
+  {"shift-control-.", "."},
+  {"control-,",       ","},
+  {"shift-control-,", ","},
+  {"control-\\",      "\034"},
+  {"control-1",       "1"},
+  {"control-3",       "\033"},
+  {"control-4",       "\034"},
+  {"control-5",       "\035"},
+  {"control-6",       "\036"},
+  {"shift-control-6", "\036"},
+  {"control-7",       "\037"},
+  {"shift-control-7", "\036"},
+  {"control-8",       "\177"},
+  {"control-9",       "9"},
+
+
+};
+
+void ctx_client_lock (CtxClient *client);
+void ctx_client_unlock (CtxClient *client);
+
+void vt_feed_keystring (VT *vt, CtxEvent *event, const char *str)
+{
+  if (vt->ctx_events)
+  {
+    if (!strcmp (str, "control-l") )
+    {
+      vt->ctx_events = 0;
+      return;
+    }
+    vt_write (vt, str, strlen (str) );
+    vt_write (vt, "\n", 1);
+    return;
+  }
+  if (!strncmp (str, "keyup",   5)) return;
+  if (!strncmp (str, "keydown", 7)) return;
+
+  if (!strcmp (str, "capslock")) return;
+
+#if 0
+  if (!ctx_strstr (str, "-page"))
+    vt_set_scroll (vt, 0);
+#endif
+
+  if (!strcmp (str, "idle") )
+     return;
+  else if (!strcmp (str, "shift-control-home"))
+    {
+      vt_set_scroll (vt, vt->scrollback_count);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-control-end"))
+    {
+      int new_scroll = 0;
+      vt_set_scroll (vt, new_scroll);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-control-down"))
+    {
+      int new_scroll = vt_get_scroll (vt) - 1;
+      vt_set_scroll (vt, new_scroll);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-control-up"))
+    {
+      int new_scroll = vt_get_scroll (vt) + 1;
+      vt_set_scroll (vt, new_scroll);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-page-up") ||
+           !strcmp (str, "shift-control-page-up"))
+    {
+      int new_scroll = vt_get_scroll (vt) + vt_get_rows (vt) /2;
+      vt_set_scroll (vt, new_scroll);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-page-down") ||
+           !strcmp (str, "shift-control-page-down"))
+    {
+      int new_scroll = vt_get_scroll (vt) - vt_get_rows (vt) /2;
+      if (new_scroll < 0) { new_scroll = 0; }
+      vt_set_scroll (vt, new_scroll);
+      ctx_client_rev_inc (vt->client);
+      return;
+    }
+  else if (!strcmp (str, "shift-control--") ||
+           !strcmp (str, "control--") )
+    {
+      float font_size = vt_get_font_size (vt);
+      //font_size /= 1.15;
+      font_size -=2;//= roundf (font_size);
+      if (font_size < 2) { font_size = 2; }
+      vt_set_font_size (vt, font_size);
+      vt_set_px_size (vt, vt->width, vt->height);
+      return;
+    }
+  else if (!strcmp (str, "shift-control-=") ||
+           !strcmp (str, "control-=") )
+    {
+      float font_size = vt_get_font_size (vt);
+      float old = font_size;
+      //font_size *= 1.15;
+      //
+      //font_size = roundf (font_size);
+      font_size+=2;
+
+      if (old == font_size) { font_size = old+1; }
+      if (font_size > 200) { font_size = 200; }
+      vt_set_font_size (vt, font_size);
+      vt_set_px_size (vt, vt->width, vt->height);
+
+      return;
+    }
+  else if (!strcmp (str, "shift-control-r") )
+    {
+      vt_open_log (vt, "/tmp/ctx-vt");
+      return;
+    }
+  else if (!strcmp (str, "shift-control-l") )
+    {
+      vt_set_local (vt, !vt_get_local (vt) );
+      return;
+    }
+  else if (str[0]=='p' && str[1] != 0 && str[2] == ' ')
+    {
+      int cw = vt_cw (vt);
+      int ch = vt_ch (vt);
+      if (!strncmp (str, "pm", 2))
+        {
+          int x = 0, y = 0;
+          char *s = strchr (str, ' ');
+          if (s)
+            {
+              x = atoi (s);
+              s = strchr (s + 1, ' ');
+              if (s)
+                {
+                  y = atoi (s);
+                  vt_mouse (vt, event, VT_MOUSE_MOTION, 1, x/cw + 1, y/ch + 1, x, y);
+                }
+            }
+        }
+      else if (!strncmp (str, "pp", 2))
+        {
+          int x = 0, y = 0, b = 0;
+          char *s = strchr (str, ' ');
+          if (s)
+            {
+              x = atoi (s);
+              s = strchr (s + 1, ' ');
+              if (s)
+                {
+                  y = atoi (s);
+                  s = strchr (s + 1, ' ');
+                  if (s)
+                  {
+                    b = atoi (s);
+                  }
+                  vt_mouse (vt, event, VT_MOUSE_PRESS, b, x/cw + 1, y/ch + 1, x, y);
+                }
+            }
+          //clients[active].drawn_rev = 0;
+        }
+      else if (!strncmp (str, "pd", 2))
+        {
+          int x = 0, y = 0, b = 0; // XXX initialize B
+          char *s = strchr (str, ' ');
+          if (s)
+            {
+              x = atoi (s);
+              s = strchr (s + 1, ' ');
+              if (s)
+                {
+                  y = atoi (s);
+                  if (s)
+                  {
+                    b = atoi (s);
+                  }
+                  vt_mouse (vt, event, VT_MOUSE_DRAG, b, x/cw + 1, y/ch + 1, x, y);
+                }
+            }
+          //clients[active].drawn_rev = 0;
+        }
+      else if (!strncmp (str, "pr", 2))
+        {
+          int x = 0, y = 0, b = 0;
+          char *s = strchr (str, ' ');
+          if (s)
+            {
+              x = atoi (s);
+              s = strchr (s + 1, ' ');
+              if (s)
+                {
+                  y = atoi (s);
+                  s = strchr (s + 1, ' ');
+                  if (s)
+                  {
+                    b = atoi (s);
+                  }
+                  vt_mouse (vt, event, VT_MOUSE_RELEASE, b, x/cw + 1, y/ch + 1, x, y);
+                }
+            }
+          //clients[active].drawn_rev = 0;
+          // queue-draw
+        }
+      return;
+    }
+
+  if (vt->scroll_on_input)
+  {
+    vt->scroll = 0.0;
+  }
+
+
+  if (vt->state == vt_state_vt52)
+    {
+      for (unsigned int i = 0; i<sizeof (keymap_vt52) /sizeof (keymap_vt52[0]); i++)
+        if (!strcmp (str, keymap_vt52[i][0]) )
+          { str = keymap_vt52[i][1]; goto done; }
+    }
+  else
+    {
+      if (vt->cursor_key_application)
+        {
+          for (unsigned int i = 0; i<sizeof (keymap_application) /sizeof (keymap_application[0]); i++)
+            if (!strcmp (str, keymap_application[i][0]) )
+              { str = keymap_application[i][1]; goto done; }
+        }
+    }
+
+
+  if (!strcmp (str, "return") )
+    {
+      if (vt->cr_on_lf)
+        { str = "\r\n"; }
+      else
+        { str = "\r"; }
+      goto done;
+    }
+  if (!strcmp (str, "control-space") ||
+      !strcmp (str, "control-`") ||
+      !strcmp (str, "control-2") ||
+      !strcmp (str, "shift-control-2") ||
+      !strcmp (str, "shift-control-space") )
+    {
+      str = "\0\0";
+      vt_write (vt, str, 1);
+      return;
+    }
+  for (unsigned int i = 0; i< sizeof (keymap_general) /
+                              sizeof (keymap_general[0]); i++)
+    if (!strcmp (str, keymap_general[i][0]) )
+      {
+        str = keymap_general[i][1];
+        break;
+      }
+done:
+  if (strlen (str) )
+    {
+      if (vt->local_editing)
+        {
+          for (int i = 0; str[i]; i++)
+            {
+              vt->state (vt, str[i]);
+            }
+        }
+      else
+        {
+          vt_write (vt, str, strlen (str) );
+        }
+    }
+}
+
+
+void vt_paste (VT *vt, const char *str)
+{
+  if (vt->bracket_paste)
+    {
+      vt_write (vt, "\033[200~", 6);
+    }
+  vt_feed_keystring (vt, NULL, str);
+  if (vt->bracket_paste)
+    {
+      vt_write (vt, "\033[201~", 6);
+    }
+}
+
+const char *ctx_find_shell_command (void)
+{
+#ifdef EMSCRIPTEN
+  return NULL;  
+#else
+  if (access ("/.flatpak-info", F_OK) != -1)
+  {
+    static char ret[512];
+    char buf[256];
+    FILE *fp = popen("flatpak-spawn --host getent passwd $USER|cut -f 7 -d :", "r");
+    if (fp)
+    {
+      while (fgets (buf, sizeof(buf), fp) != NULL)
+      {
+        if (buf[strlen(buf)-1]=='\n')
+          buf[strlen(buf)-1]=0;
+        sprintf (ret, "flatpak-spawn --env=TERM=xterm --host %s", buf);
+      }
+      pclose (fp);
+      return ret;
+    }
+  }
+
+  if (getenv ("SHELL"))
+  {
+    return getenv ("SHELL");
+  }
+  int i;
+  const char *command = NULL;
+  struct stat stat_buf;
+  static char *alts[][2] =
+  {
+    {"/bin/bash",     "/bin/bash"},
+    {"/usr/bin/bash", "/usr/bin/bash"},
+    {"/bin/sh",       "/bin/sh"},
+    {"/usr/bin/sh",   "/usr/bin/sh"},
+    {NULL, NULL}
+  };
+  for (i = 0; alts[i][0] && !command; i++)
+    {
+      lstat (alts[i][0], &stat_buf);
+      if (S_ISREG (stat_buf.st_mode) || S_ISLNK (stat_buf.st_mode) )
+        { command = alts[i][1]; }
+    }
+  return command;
+#endif
+}
+
+
+
+
+static void vt_run_command (VT *vt, const char *command, const char *term)
+{
+#ifdef EMSCRIPTEN
+        printf ("run command %s\n", command);
+#else
+  struct winsize ws;
+  //signal (SIGCHLD,signal_child);
+#if 0
+  int was_pidone = (getpid () == 1);
+#else
+  int was_pidone = 0; // do no special treatment, all child processes belong
+                      // to root
+#endif
+  signal (SIGINT,SIG_DFL);
+  ws.ws_row = vt->rows;
+  ws.ws_col = vt->cols;
+  ws.ws_xpixel = ws.ws_col * vt->cw;
+  ws.ws_ypixel = ws.ws_row * vt->ch;
+  vt->vtpty.pid = vt_forkpty (&vt->vtpty.pty, NULL, NULL, &ws);
+  if (vt->vtpty.pid == 0)
+    {
+      ctx_child_prepare_env (was_pidone, term);
+      exit (0);
+    }
+  else if (vt->vtpty.pid < 0)
+    {
+      VT_error ("forkpty failed (%s)", command);
+      return;
+    }
+  fcntl(vt->vtpty.pty, F_SETFL, O_NONBLOCK|O_NOCTTY);
+  _ctx_add_listen_fd (vt->vtpty.pty);
+#endif
+}
+
+
+void vt_destroy (VT *vt)
+{
+  while (vt->lines)
+    {
+      vt_line_free (vt->lines->data, 1);
+      ctx_list_remove (&vt->lines, vt->lines->data);
+      vt->line_count--;
+    }
+  while (vt->scrollback)
+    {
+      vt_line_free (vt->scrollback->data, 1);
+      ctx_list_remove (&vt->scrollback, vt->scrollback->data);
+    }
+  if (vt->ctxp)
+    ctx_parser_destroy (vt->ctxp);
+  //if (vt->ctx)
+  //  { ctx_destroy (vt->ctx); }
+  free (vt->argument_buf);
+  ctx_list_remove (&ctx_vts, vt);
+  kill (vt->vtpty.pid, 9);
+  _ctx_remove_listen_fd (vt->vtpty.pty);
+  close (vt->vtpty.pty);
+#if 1
+  if (vt->title)
+    free (vt->title);
+#endif
+  free (vt);
+}
+
+int vt_get_line_count (VT *vt)
+{
+  int max_pop = 0;
+  int no = 0;
+  for (CtxList *l = vt->lines; l; l = l->next, no++)
+  {
+    CtxString *str = l->data;
+    if (str->str[0]) max_pop = no;
+  }
+  return max_pop + 1;
+}
+
+const char *vt_get_line (VT *vt, int no)
+{
+  if (no >= vt->rows)
+  {
+    CtxList *l = ctx_list_nth (vt->scrollback, no - vt->rows);
+    if (!l)
+      { 
+         return "";
+      }
+    CtxString *str = l->data;
+    return str->str;
+  }
+  else
+  {
+    CtxList *l = ctx_list_nth (vt->lines, no);
+    if (!l)
+      { 
+         return "-";
+      }
+    CtxString *str = l->data;
+    return str->str;
+  }
+}
+
+int vt_line_is_continuation (VT *vt, int no)
+{
+  if (no >= vt->rows)
+  {
+    CtxList *l = ctx_list_nth (vt->scrollback, no - vt->rows);
+    if (!l)
+      { 
+         return 1;
+      }
+    VtLine *line = l->data;
+    return line->wrapped;
+  }
+  else
+  {
+    CtxList *l = ctx_list_nth (vt->lines, no);
+    if (!l)
+      { 
+         return 1;
+      }
+    VtLine *line = l->data;
+    return line->wrapped;
+  }
+}
+
+int vt_get_cols (VT *vt)
+{
+  return vt->cols;
+}
+
+int vt_get_rows (VT *vt)
+{
+  return vt->rows;
+}
+
+int vt_get_cursor_x (VT *vt)
+{
+  return vt->cursor_x;
+}
+
+int vt_get_cursor_y (VT *vt)
+{
+  return vt->cursor_y;
+}
+
+static void draw_braille_bit (Ctx *ctx, float x, float y, float cw, float ch, int u, int v)
+{
+  ctx_rectangle (ctx, 0.167 * cw + x + u * cw * 0.5,
+                 y - ch + 0.080 * ch + v * ch * 0.25,
+                 0.33 *cw, 0.33 * cw);
+}
+
+static void draw_sextant_bit (Ctx *ctx, float x, float y, float cw, float ch, int u, int v)
+{
+  ctx_rectangle (ctx,  x + u * cw * 0.5,
+                       y - ch + v * ch * 0.3333,
+                       0.5 *cw, 0.34 * ch);
+}
+
+int vt_special_glyph (Ctx *ctx, VT *vt, float x, float y, int cw, int ch, int unichar)
+{
+  switch (unichar)
+    {
+      case 0x2594: // UPPER_ONE_EIGHT_BLOCK
+        ctx_begin_path (ctx);
+        {
+          float factor = 1.0f/8.0f;
+          ctx_rectangle (ctx, x, y - ch, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2581: // LOWER_ONE_EIGHT_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 1.0f/8.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2582: // LOWER_ONE_QUARTER_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 1.0f/4.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2583: // LOWER_THREE_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 3.0f/8.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2585: // LOWER_FIVE_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 5.0f/8.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2586: // LOWER_THREE_QUARTERS_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 3.0f/4.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2587: // LOWER_SEVEN_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        {
+          float factor = 7.0f/8.0f;
+          ctx_rectangle (ctx, x, y - ch * factor, cw, ch * factor);
+          ctx_fill (ctx);
+        }
+        return 0;
+      case 0x2589: // LEFT_SEVEN_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw*7/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258A: // LEFT_THREE_QUARTERS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw*3/4, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258B: // LEFT_FIVE_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw*5/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258D: // LEFT_THREE_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw*3/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258E: // LEFT_ONE_QUARTER_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw/4, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258F: // LEFT_ONE_EIGHT_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x258C: // HALF_LEFT_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw/2, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2590: // HALF_RIGHT_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2, y - ch, cw/2, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb8f: // VT_RIGHT_SEVEN_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw*1/8, y - ch, cw*7/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb8d: // VT_RIGHT_FIVE_EIGHTS_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw*3/8, y - ch, cw*5/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb8b: // VT_RIGHT_ONE_QUARTER_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw*3/4, y - ch, cw/4, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb8e: // VT_RIGHT_THREE_QUARTER_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw*1/4, y - ch, cw*3/4, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2595: // VT_RIGHT_ONE_EIGHT_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw*7/8, y - ch, cw/8, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2580: // HALF_UP_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2584: // _HALF_DOWN_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch/2, cw, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2596: // _QUADRANT LOWER LEFT
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch/2, cw/2, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2597: // _QUADRANT LOWER RIGHT
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x+cw/2, y - ch/2, cw/2, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2598: // _QUADRANT UPPER LEFT
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw/2, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x259D: // _QUADRANT UPPER RIGHT
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2, y - ch, cw/2, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2599: // _QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2598);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2596);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2597);
+        return 0;
+      case 0x259A: // _QUADRANT UPPER LEFT AND LOWER RIGHT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2598);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2597);
+        return 0;
+      case 0x259B: // _QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2598);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x259D);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2596);
+        return 0;
+      case 0x259C: // _QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2598);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x259D);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2597);
+        return 0;
+      case 0x259E: // _QUADRANT UPPER RIGHT AND LOWER LEFT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x259D);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2596);
+        return 0;
+      case 0x259F: // _QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x259D);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2596);
+        vt_special_glyph (ctx, vt, x, y, cw, ch, 0x2597);
+        return 0;
+      case 0x2588: // FULL_BLOCK:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2591: // LIGHT_SHADE:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw, ch);
+        ctx_save (ctx);
+        ctx_global_alpha (ctx, 0.25);
+        ctx_fill (ctx);
+        ctx_restore (ctx);
+        return 0;
+      case 0x2592: // MEDIUM_SHADE:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw, ch);
+        ctx_save (ctx);
+        ctx_global_alpha (ctx, 0.5);
+        ctx_fill (ctx);
+        ctx_restore (ctx);
+        return 0;
+      case 0x2593: // DARK SHADE:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch, cw, ch);
+        ctx_save (ctx);
+        ctx_global_alpha (ctx, 0.75);
+        ctx_fill (ctx);
+        ctx_restore (ctx);
+        return 0;
+      case 0x23BA: //HORIZONTAL_SCANLINE-1
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x,      y - ch + ch*0.1 - ch * 0.1,
+                       cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x23BB: //HORIZONTAL_SCANLINE-3
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x,      y - ch + ch*0.3 - ch * 0.075,
+                       cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x23BC: //HORIZONTAL_SCANLINE-7
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x,      y - ch + ch*0.7 - ch * 0.025,
+                       cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x23BD: //HORIZONTAL_SCANLINE-9
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x,      y - ch + ch*0.9 + ch * 0.0,
+                       cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2500: //VT_BOX_DRAWINGS_LIGHT_HORIZONTAL // and scanline 5
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch/2 - ch * 0.1 / 2, cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2212: // minus -sign
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw * 0.1, y - ch/2 - ch * 0.1 / 2, cw * 0.8, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2502: // VT_BOX_DRAWINGS_LIGHT_VERTICAL:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch + 1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x250c: //VT_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2 - ch*0.1/2, ch * 0.1, ch/2 + ch*0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2 - ch*0.1/2, cw/2+ ch * 0.1, ch*0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2510: //VT_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2 - ch*0.1/2, ch * 0.1, ch/2 + ch*0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x, y - ch/2 - ch*0.1/2, cw/2+ ch * 0.1/2, ch*0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2514: //VT_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch/2+ch*0.1/2);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2 - ch*0.1/2, cw/2 + ch * 0.1, ch*0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2518: //VT_BOX_DRAWINGS_LIGHT_UP_AND_LEFT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch/2+ ch*0.1/2);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x, y - ch/2-ch*0.1/2, cw/2+ch * 0.1/2, ch*0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x251C: //VT_BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2-ch*0.1/2, cw/2+ch * 0.1, ch*0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2524: //VT_BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x, y - ch/2-ch*0.1/2, cw/2+ch * 0.1/2, ch*0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x252C: // VT_BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch/2-ch*0.1/2, ch * 0.1, ch/2+ch*0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x, y - ch/2 - ch * 0.1 / 2, cw, ch * 0.1);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2534: // VT_BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch/2 - ch * 0.1 / 2, cw, ch * 0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch /2+ch*0.1/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x253C: // VT_BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL:
+        ctx_begin_path (ctx);
+        ctx_rectangle (ctx, x, y - ch/2 - ch * 0.1 / 2, cw, ch * 0.1);
+        ctx_fill (ctx);
+        ctx_rectangle (ctx, x + cw/2 - ch * 0.1 / 2, y - ch, ch * 0.1, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0xe0a0: // PowerLine branch
+        ctx_save (ctx);
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x+cw/2, y - 0.15 * ch);
+        ctx_rel_line_to (ctx, -cw/3, -ch * 0.7);
+        ctx_rel_line_to (ctx, cw/2, 0);
+        ctx_rel_line_to (ctx, -cw/3, ch * 0.7);
+        ctx_line_width (ctx, cw * 0.25);
+        ctx_stroke (ctx);
+        ctx_restore (ctx);
+        break;
+      // case 0xe0a1: // PowerLine LN
+      // case 0xe0a2: // PowerLine Lock
+      case 0xe0b0: // PowerLine left solid
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, 0, -ch);
+        ctx_rel_line_to (ctx, cw, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0xe0b1: // PowerLine left line
+        ctx_save (ctx);
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y - ch * 0.1);
+        ctx_rel_line_to (ctx, cw * 0.9, -ch/2 * 0.8);
+        ctx_rel_line_to (ctx, -cw * 0.9, -ch/2 * 0.8);
+        ctx_line_width (ctx, cw * 0.2);
+        ctx_stroke (ctx);
+        ctx_restore (ctx);
+        return 0;
+      case 0xe0b2: // PowerLine Right solid
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_move_to (ctx, cw, 0);
+        ctx_rel_line_to (ctx, -cw, -ch/2);
+        ctx_rel_line_to (ctx, cw, -ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0xe0b3: // PowerLine right line
+        ctx_save (ctx);
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y - ch * 0.1);
+        ctx_rel_move_to (ctx, cw, 0);
+        ctx_rel_line_to (ctx, -cw * 0.9, -ch/2 * 0.8);
+        ctx_rel_line_to (ctx,  cw * 0.9, ch/2 * 0.8);
+        ctx_line_width (ctx, cw * 0.2);
+        ctx_stroke (ctx);
+        ctx_restore (ctx);
+        return 0;
+        /*
+      case 0x1fb70: // left triangular one quarter block
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, 0, -ch);
+        ctx_rel_line_to (ctx, cw/2, -ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb72: // right triangular one quarter block
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_move_to (ctx, cw/2, -ch/2);
+        ctx_rel_line_to (ctx, cw/2, -ch/2);
+        ctx_rel_line_to (ctx, 0, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb73: // lower triangular one quarter block
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, cw/2, -ch/2);
+        ctx_rel_line_to (ctx, cw/2, ch/2);
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb71: // upper triangular one quarter block
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_move_to (ctx, cw/2, -ch/2);
+        ctx_rel_line_to (ctx, -cw/2, -ch/2);
+        ctx_rel_line_to (ctx, cw, 0);
+        ctx_fill (ctx);
+        return 0;
+        */
+      case 0x25E2: // VT_BLACK_LOWER_RIGHT_TRIANGLE:
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, cw, -ch);
+        ctx_rel_line_to (ctx, 0, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x25E3: //  VT_BLACK_LOWER_LEFT_TRIANGLE:
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, 0, -ch);
+        ctx_rel_line_to (ctx, cw, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x25E4: // tri
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y);
+        ctx_rel_line_to (ctx, 0, -ch);
+        ctx_rel_line_to (ctx, cw, 0);
+        ctx_fill (ctx);
+        return 0;
+      case 0x25E5: // tri
+        ctx_begin_path (ctx);
+        ctx_move_to (ctx, x, y - ch);
+        ctx_rel_line_to (ctx, cw, 0);
+        ctx_rel_line_to (ctx, 0, ch);
+        ctx_fill (ctx);
+        return 0;
+      case 0x2800:
+      case 0x2801:
+      case 0x2802:
+      case 0x2803:
+      case 0x2804:
+      case 0x2805:
+      case 0x2806:
+      case 0x2807:
+      case 0x2808:
+      case 0x2809:
+      case 0x280A:
+      case 0x280B:
+      case 0x280C:
+      case 0x280D:
+      case 0x280E:
+      case 0x280F:
+      case 0x2810:
+      case 0x2811:
+      case 0x2812:
+      case 0x2813:
+      case 0x2814:
+      case 0x2815:
+      case 0x2816:
+      case 0x2817:
+      case 0x2818:
+      case 0x2819:
+      case 0x281A:
+      case 0x281B:
+      case 0x281C:
+      case 0x281D:
+      case 0x281E:
+      case 0x281F:
+      case 0x2820:
+      case 0x2821:
+      case 0x2822:
+      case 0x2823:
+      case 0x2824:
+      case 0x2825:
+      case 0x2826:
+      case 0x2827:
+      case 0x2828:
+      case 0x2829:
+      case 0x282A:
+      case 0x282B:
+      case 0x282C:
+      case 0x282D:
+      case 0x282E:
+      case 0x282F:
+      case 0x2830:
+      case 0x2831:
+      case 0x2832:
+      case 0x2833:
+      case 0x2834:
+      case 0x2835:
+      case 0x2836:
+      case 0x2837:
+      case 0x2838:
+      case 0x2839:
+      case 0x283A:
+      case 0x283B:
+      case 0x283C:
+      case 0x283D:
+      case 0x283E:
+      case 0x283F:
+        ctx_begin_path (ctx);
+        {
+          int bit_pattern = unichar - 0x2800;
+          int bit = 0;
+          int u = 0;
+          int v = 0;
+          for (bit = 0; bit < 6; bit++)
+            {
+              if (bit_pattern & (1<<bit) )
+                {
+                  draw_braille_bit (ctx, x, y, cw, ch, u, v);
+                }
+              v++;
+              if (v > 2)
+                {
+                  v = 0;
+                  u++;
+                }
+            }
+        }
+        ctx_fill (ctx);
+        return 0;
+      case 0x2840:
+      case 0x2841:
+      case 0x2842:
+      case 0x2843:
+      case 0x2844:
+      case 0x2845:
+      case 0x2846:
+      case 0x2847:
+      case 0x2848:
+      case 0x2849:
+      case 0x284A:
+      case 0x284B:
+      case 0x284C:
+      case 0x284D:
+      case 0x284E:
+      case 0x284F:
+      case 0x2850:
+      case 0x2851:
+      case 0x2852:
+      case 0x2853:
+      case 0x2854:
+      case 0x2855:
+      case 0x2856:
+      case 0x2857:
+      case 0x2858:
+      case 0x2859:
+      case 0x285A:
+      case 0x285B:
+      case 0x285C:
+      case 0x285D:
+      case 0x285E:
+      case 0x285F:
+      case 0x2860:
+      case 0x2861:
+      case 0x2862:
+      case 0x2863:
+      case 0x2864:
+      case 0x2865:
+      case 0x2866:
+      case 0x2867:
+      case 0x2868:
+      case 0x2869:
+      case 0x286A:
+      case 0x286B:
+      case 0x286C:
+      case 0x286D:
+      case 0x286E:
+      case 0x286F:
+      case 0x2870:
+      case 0x2871:
+      case 0x2872:
+      case 0x2873:
+      case 0x2874:
+      case 0x2875:
+      case 0x2876:
+      case 0x2877:
+      case 0x2878:
+      case 0x2879:
+      case 0x287A:
+      case 0x287B:
+      case 0x287C:
+      case 0x287D:
+      case 0x287E:
+      case 0x287F:
+        ctx_begin_path (ctx);
+        draw_braille_bit (ctx, x, y, cw, ch, 0, 3);
+        {
+          int bit_pattern = unichar - 0x2840;
+          int bit = 0;
+          int u = 0;
+          int v = 0;
+          for (bit = 0; bit < 6; bit++)
+            {
+              if (bit_pattern & (1<<bit) )
+                {
+                  draw_braille_bit (ctx, x, y, cw, ch, u, v);
+                }
+              v++;
+              if (v > 2)
+                {
+                  v = 0;
+                  u++;
+                }
+            }
+        }
+        ctx_fill (ctx);
+        return 0;
+      case 0x2880:
+      case 0x2881:
+      case 0x2882:
+      case 0x2883:
+      case 0x2884:
+      case 0x2885:
+      case 0x2886:
+      case 0x2887:
+      case 0x2888:
+      case 0x2889:
+      case 0x288A:
+      case 0x288B:
+      case 0x288C:
+      case 0x288D:
+      case 0x288E:
+      case 0x288F:
+      case 0x2890:
+      case 0x2891:
+      case 0x2892:
+      case 0x2893:
+      case 0x2894:
+      case 0x2895:
+      case 0x2896:
+      case 0x2897:
+      case 0x2898:
+      case 0x2899:
+      case 0x289A:
+      case 0x289B:
+      case 0x289C:
+      case 0x289D:
+      case 0x289E:
+      case 0x289F:
+      case 0x28A0:
+      case 0x28A1:
+      case 0x28A2:
+      case 0x28A3:
+      case 0x28A4:
+      case 0x28A5:
+      case 0x28A6:
+      case 0x28A7:
+      case 0x28A8:
+      case 0x28A9:
+      case 0x28AA:
+      case 0x28AB:
+      case 0x28AC:
+      case 0x28AD:
+      case 0x28AE:
+      case 0x28AF:
+      case 0x28B0:
+      case 0x28B1:
+      case 0x28B2:
+      case 0x28B3:
+      case 0x28B4:
+      case 0x28B5:
+      case 0x28B6:
+      case 0x28B7:
+      case 0x28B8:
+      case 0x28B9:
+      case 0x28BA:
+      case 0x28BB:
+      case 0x28BC:
+      case 0x28BD:
+      case 0x28BE:
+      case 0x28BF:
+        ctx_begin_path (ctx);
+        draw_braille_bit (ctx, x, y, cw, ch, 1, 3);
+        {
+          int bit_pattern = unichar - 0x2880;
+          int bit = 0;
+          int u = 0;
+          int v = 0;
+          for (bit = 0; bit < 6; bit++)
+            {
+              if (bit_pattern & (1<<bit) )
+                {
+                  draw_braille_bit (ctx, x, y, cw, ch, u, v);
+                }
+              v++;
+              if (v > 2)
+                {
+                  v = 0;
+                  u++;
+                }
+            }
+        }
+        ctx_fill (ctx);
+        return 0;
+      case 0x28C0:
+      case 0x28C1:
+      case 0x28C2:
+      case 0x28C3:
+      case 0x28C4:
+      case 0x28C5:
+      case 0x28C6:
+      case 0x28C7:
+      case 0x28C8:
+      case 0x28C9:
+      case 0x28CA:
+      case 0x28CB:
+      case 0x28CC:
+      case 0x28CD:
+      case 0x28CE:
+      case 0x28CF:
+      case 0x28D0:
+      case 0x28D1:
+      case 0x28D2:
+      case 0x28D3:
+      case 0x28D4:
+      case 0x28D5:
+      case 0x28D6:
+      case 0x28D7:
+      case 0x28D8:
+      case 0x28D9:
+      case 0x28DA:
+      case 0x28DB:
+      case 0x28DC:
+      case 0x28DD:
+      case 0x28DE:
+      case 0x28DF:
+      case 0x28E0:
+      case 0x28E1:
+      case 0x28E2:
+      case 0x28E3:
+      case 0x28E4:
+      case 0x28E5:
+      case 0x28E6:
+      case 0x28E7:
+      case 0x28E8:
+      case 0x28E9:
+      case 0x28EA:
+      case 0x28EB:
+      case 0x28EC:
+      case 0x28ED:
+      case 0x28EE:
+      case 0x28EF:
+      case 0x28F0:
+      case 0x28F1:
+      case 0x28F2:
+      case 0x28F3:
+      case 0x28F4:
+      case 0x28F5:
+      case 0x28F6:
+      case 0x28F7:
+      case 0x28F8:
+      case 0x28F9:
+      case 0x28FA:
+      case 0x28FB:
+      case 0x28FC:
+      case 0x28FD:
+      case 0x28FE:
+      case 0x28FF:
+        ctx_begin_path (ctx);
+        draw_braille_bit (ctx, x, y, cw, ch, 0, 3);
+        draw_braille_bit (ctx, x, y, cw, ch, 1, 3);
+        {
+          int bit_pattern = unichar - 0x28C0;
+          int bit = 0;
+          int u = 0;
+          int v = 0;
+          for (bit = 0; bit < 6; bit++)
+            {
+              if (bit_pattern & (1<<bit) )
+                {
+                  draw_braille_bit (ctx, x, y, cw, ch, u, v);
+                }
+              v++;
+              if (v > 2)
+                {
+                  v = 0;
+                  u++;
+                }
+            }
+        }
+        ctx_fill (ctx);
+        return 0;
+      case 0x1fb00:
+      case 0x1fb01:
+      case 0x1fb02:
+      case 0x1fb03:
+      case 0x1fb04:
+      case 0x1fb05:
+      case 0x1fb06:
+      case 0x1fb07:
+      case 0x1fb08:
+      case 0x1fb09:
+      case 0x1fb0a:
+      case 0x1fb0b:
+      case 0x1fb0c:
+      case 0x1fb0d:
+      case 0x1fb0e:
+      case 0x1fb0f:
+      case 0x1fb10:
+      case 0x1fb11:
+      case 0x1fb12:
+      case 0x1fb13:
+      case 0x1fb14:
+      case 0x1fb15:
+      case 0x1fb16:
+      case 0x1fb17:
+      case 0x1fb18:
+      case 0x1fb19:
+      case 0x1fb1a:
+      case 0x1fb1b:
+      case 0x1fb1c:
+      case 0x1fb1d:
+      case 0x1fb1e:
+      case 0x1fb1f:
+      case 0x1fb20:
+      case 0x1fb21:
+      case 0x1fb22:
+      case 0x1fb23:
+      case 0x1fb24:
+      case 0x1fb25:
+      case 0x1fb26:
+      case 0x1fb27:
+      case 0x1fb28:
+      case 0x1fb29:
+      case 0x1fb2a:
+      case 0x1fb2b:
+      case 0x1fb2c:
+      case 0x1fb2d:
+      case 0x1fb2e:
+      case 0x1fb2f:
+      case 0x1fb30:
+      case 0x1fb31:
+      case 0x1fb32:
+      case 0x1fb33:
+      case 0x1fb34:
+      case 0x1fb35:
+      case 0x1fb36:
+      case 0x1fb37:
+      case 0x1fb38:
+      case 0x1fb39:
+      case 0x1fb3a:
+      case 0x1fb3b:
+
+        {
+          ctx_begin_path (ctx);
+          uint32_t bitmask = (unichar - 0x1fb00) + 1;
+          if (bitmask > 20) bitmask ++;
+          if (bitmask > 41) bitmask ++;
+          int bit = 0;
+          for (int v = 0; v < 3; v ++)
+          for (int u = 0; u < 2; u ++, bit ++)
+          {
+            if (bitmask & (1<<bit))
+            {
+              draw_sextant_bit (ctx, x, y, cw, ch, u, v);
+            }
+          }
+          ctx_fill (ctx);
+          return 0;
+        }
+        break;
+      case 0x1fb3c:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch / 3.0f);
+          ctx_rel_line_to (ctx, cw/2, ch/3.0f);
+          ctx_fill (ctx);
+          return 0;
+        }
+        break;
+      case 0x1fb3d:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0f);
+          ctx_rel_line_to (ctx, cw, ch/3.0f);
+          ctx_fill (ctx);
+          return 0;
+        }
+        break;
+      case 0x1fb3e:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0,   -ch/3.0f * 2);
+          ctx_rel_line_to (ctx, cw/2, ch/3.0f * 2);
+          ctx_fill (ctx);
+          return 0;
+        }
+        break;
+      case 0x1fb3f:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0,  -ch/3.0f * 2);
+          ctx_rel_line_to (ctx, cw, ch/3.0f * 2);
+          ctx_fill (ctx);
+          return 0;
+        }
+        break;
+      case 0x1fb40:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, ch);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb41:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw/2, -ch/3.0);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0.0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb42:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, -ch/3.0);
+          ctx_rel_line_to (ctx, 0.0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb43:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0f);
+          ctx_rel_line_to (ctx, cw/2, -ch/3.0f*2.0f);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0.0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb44:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, cw, -ch/3.0 * 2);
+          ctx_rel_line_to (ctx, 0.0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb45:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw/2, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0.0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb46:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, cw, -ch/3.0);
+          ctx_rel_line_to (ctx, 0.0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb47:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, cw/2, -ch/3.0);
+          ctx_rel_line_to (ctx, 0.0, ch/3.0);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb48:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw, -ch/3.0);
+          ctx_rel_line_to (ctx, 0.0, ch/3.0);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb49:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, cw/2, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0.0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4a:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0.0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4b:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, cw/2, ch/3);
+          ctx_rel_line_to (ctx, 0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4c:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, ch/3);
+          ctx_rel_line_to (ctx, 0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4d:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, ch/3);
+          ctx_rel_line_to (ctx, 0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4e:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, cw/2, ch/3 *  2);
+          ctx_rel_line_to (ctx, 0, ch/3.0);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb4f:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, ch/3 *  2);
+          ctx_rel_line_to (ctx, 0, ch/3.0);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb50:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, cw/2, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb51:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, ch/3.0);
+          ctx_rel_line_to (ctx, 0, ch/3.0);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb52:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb53:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw, -ch/3.0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb54:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb55:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw, -ch/3.0*2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb56:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_rel_line_to (ctx, -cw/2, -ch);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb57:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0, -ch/3);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb58:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0, -ch/3);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw, ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb59:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch/3 * 2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5a:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0);
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw, ch/3 * 2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5b:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5c:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3);
+
+          ctx_rel_line_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3);
+          ctx_rel_line_to (ctx, -cw, ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5d:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3 * 2);
+          ctx_rel_line_to (ctx, -cw/2, ch/3);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5e:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3 * 2);
+          ctx_rel_line_to (ctx, -cw, ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb5f:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3);
+          ctx_rel_line_to (ctx, -cw/2, ch/3*2);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb60:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3);
+          ctx_rel_line_to (ctx, -cw, ch/3*2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb61:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch);
+          ctx_rel_line_to (ctx, -cw/2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb62:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/2, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0, ch/3);
+          ctx_rel_line_to (ctx, -cw/2, -ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb63:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3);
+          ctx_rel_line_to (ctx, -cw, -ch/3);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb64:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/2, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0, ch/3*2);
+          ctx_rel_line_to (ctx, -cw/2, -ch/3*2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb65:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3*2);
+          ctx_rel_line_to (ctx, -cw, -ch/3*2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb66:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/2, -ch);
+          ctx_rel_line_to (ctx, cw/2, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, -ch);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb67:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/3.0*2);
+          ctx_rel_line_to (ctx, 0, -ch/3);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/3.0*2);
+          ctx_rel_line_to (ctx, -cw, -ch/3.0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb68:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb69:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6a:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6b:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6c:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6d:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6e:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw, -ch);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb6f:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb82:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/8 * 2);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_move_to (ctx, 0, ch/8 * 2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb83:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/8 * 3);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_move_to (ctx, 0, ch/8 * 3);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb84:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/8 * 5);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_move_to (ctx, 0, ch/8 * 5);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb85:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/8 * 6);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_move_to (ctx, 0, ch/8 * 6);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb86:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, 0, -ch/8 * 7);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_rel_move_to (ctx, 0, ch/8 * 7);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb87:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/8*6, 0);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_move_to (ctx, cw/8*2, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_move_to (ctx, -cw/8*2, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb88:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/8*5, 0);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_move_to (ctx, cw/8*3, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_move_to (ctx, -cw/8*3, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb89:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/8*3, 0);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_move_to (ctx, cw/8*5, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_move_to (ctx, -cw/8*5, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb8a:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_move_to (ctx, cw/8*2, 0);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_move_to (ctx, cw/8*6, 0);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_move_to (ctx, -cw/8*6, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb97:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch/4);
+          ctx_rel_move_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/4);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_close_path (ctx);
+          ctx_move_to (ctx, 0, -ch/2);
+          ctx_rel_line_to (ctx, 0, -ch/4);
+          ctx_rel_move_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, 0, ch/4);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb9a:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_rel_move_to (ctx, cw, 0);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, -cw, 0);
+          ctx_fill (ctx);
+          return 0;
+        }
+      case 0x1fb9b:
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x, y);
+          ctx_rel_line_to (ctx, 0, -ch);
+          ctx_rel_line_to (ctx, cw/2, ch/2);
+          ctx_rel_line_to (ctx, cw/2, -ch/2);
+          ctx_rel_line_to (ctx, 0, ch);
+          ctx_rel_line_to (ctx, -cw/2, -ch/2);
+          ctx_rel_line_to (ctx, -cw/2, ch/2);
+          ctx_fill (ctx);
+          return 0;
+        }
+
+    }
+  return -1;
+}
+
+void vt_ctx_glyph (Ctx *ctx, VT *vt, float x, float y, int unichar, int bold, float scale_x, float scale_y, float offset_y)
+{
+  int did_save = 0;
+  if (unichar <= ' ')
+    return;
+  scale_x *= vt->scale_x;
+  scale_y *= vt->scale_y;
+
+  CtxBackendType backend_type = ctx_backend_type (ctx);
+
+  if (backend_type != CTX_BACKEND_TERM)
+  {
+    // TODO : use our own special glyphs when glyphs are not passed through
+    if (!vt_special_glyph (ctx, vt, x, y + offset_y * vt->ch, vt->cw * scale_x, vt->ch * scale_y, unichar) )
+      return;
+  }
+
+  if (scale_x != 1.0 || scale_y != 1.0)
+    {
+      if (!did_save)
+      {
+        ctx_save (ctx);
+        did_save = 1;
+      }
+
+      ctx_translate (ctx, x, y);
+      ctx_scale (ctx, scale_x, scale_y);
+      ctx_translate (ctx, -x, -y);
+    }
+  if (offset_y != 0.0f)
+  {
+    if (!did_save)
+    {
+      ctx_save (ctx);
+      did_save = 1;
+    }
+    ctx_translate (ctx, 0, vt->font_size * offset_y);
+  }
+  y -= vt->font_size * 0.22;
+  ctx_move_to (ctx, x, y);
+  if (bold)
+  {
+    if (!did_save)
+    {
+      ctx_save (ctx);
+      did_save = 1;
+    }
+    // TODO : check if proportional and use other font for that
+    ctx_font (ctx, "Mono Bold");
+  }
+  ctx_glyph (ctx, unichar, 0);
+  if (did_save)
+    ctx_restore (ctx);
+}
+
+//static uint8_t palette[256][3];
+
+/* optimized for ANSI ART - and avoidance of human metamers
+ * among color deficient vision - by distributing and pertubating
+ * until all 64 combinations - sans self application, have
+ * likely to be discernable by humans.
+ */
+
+
+void vt_ctx_get_color (VT *vt, int no, int intensity, uint8_t *rgba)
+{
+  uint8_t r = 0, g = 0, b = 0;
+  if (no < 16 && no >= 0)
+    {
+      switch (intensity)
+        {
+          case 0:
+            no = 0;
+            break;
+          case 1:
+            // 15 becomes 7
+            if (no == 15) { no = 8; }
+            else if (no > 8) { no -= 8; }
+            break;
+          case 2:
+            /* give the normal color special treatment, and in really normal
+             * cirumstances it is the dim variant of foreground that is used
+             */
+            if (no == 15) { no = 7; }
+            break;
+          case 3:
+          case 4:
+            if (no < 8)
+              { no += 8; }
+            break;
+          default:
+            break;
+        }
+      r = palettes[vt->palette_no][no][0];
+      g = palettes[vt->palette_no][no][1];
+      b = palettes[vt->palette_no][no][2];
+    }
+  else if (no < 16 + 6*6*6)
+    {
+      no = no-16;
+      b = (no % 6) * 255 / 5;
+      no /= 6;
+      g = (no % 6) * 255 / 5;
+      no /= 6;
+      r = (no % 6) * 255 / 5;
+    }
+  else
+    {
+      int gray = no - (16 + 6*6*6);
+      float val = gray * 255 / 24;
+      r = g = b = val;
+    }
+  rgba[0]=r;
+  rgba[1]=g;
+  rgba[2]=b;
+  rgba[3]=255;
+}
+
+int vt_keyrepeat (VT *vt)
+{
+  return vt->keyrepeat;
+}
+
+static void vt_flush_bg (VT *vt, Ctx *ctx)
+{
+  if (vt->bg_active)
+  {
+    ctx_rgba8 (ctx, vt->bg_rgba[0], vt->bg_rgba[1], vt->bg_rgba[2], vt->bg_rgba[3]);
+    ctx_rectangle (ctx, vt->bg_x0, vt->bg_y0, vt->bg_width, vt->bg_height);
+    ctx_fill (ctx);
+    vt->bg_active = 0;
+  }
+}
+
+static void vt_draw_bg (VT *vt, Ctx *ctx,
+                        float x0, float y0,
+                        float width, float height,
+                        uint8_t *rgba)
+{
+   int same_color = !memcmp(rgba, vt->bg_rgba, 4);
+   if (vt->bg_active && !same_color)
+   {
+     vt_flush_bg (vt, ctx);
+   }
+
+   if (vt->bg_active && same_color)
+   {
+     vt->bg_width += width;
+   }
+   else
+   {
+     memcpy (vt->bg_rgba, rgba, 4);
+     vt->bg_active = 1;
+     vt->bg_x0 = x0;
+     vt->bg_y0 = y0;
+     vt->bg_width = width;
+     vt->bg_height = height;
+   }
+}
+
+float vt_draw_cell (VT      *vt, Ctx *ctx,
+                    int      row, int col, // pass 0 to force draw - like
+                    float    x0, float y0, // for scrollback visible
+                    uint64_t style,
+                    uint32_t unichar,
+                    int      dw, int dh,
+                    int      in_smooth_scroll,
+                    int      in_select,
+                    int      is_fg)
+// dw is 0 or 1
+// dh is 0 1 or -1  1 is upper -1 is lower
+{
+  int on_white = vt->reverse_video;
+  int color = 0;
+  int bold = (style & STYLE_BOLD) != 0;
+  int dim = (style & STYLE_DIM) != 0;
+  int is_hidden = (style & STYLE_HIDDEN) != 0;
+  int proportional = (style & STYLE_PROPORTIONAL) != 0;
+  int fg_set = (style & STYLE_FG_COLOR_SET) != 0;
+  int bg_intensity = 0;
+  int fg_intensity = 2;
+  int reverse = ( (style & STYLE_REVERSE) != 0) ^ in_select;
+  int blink = ( (style & STYLE_BLINK) != 0);
+  int blink_fast = ( (style & STYLE_BLINK_FAST) != 0);
+  int cw = vt->cw;
+  int ch = vt->ch;
+  if (proportional)
+    {
+      if (vt->font_is_mono)
+        {
+          ctx_font (ctx, "Regular");
+          vt->font_is_mono = 0;
+        }
+      cw = ctx_glyph_width (ctx, unichar);
+    }
+  else
+    {
+      if (vt->font_is_mono == 0)
+        {
+          ctx_font (ctx, "Mono");
+          vt->font_is_mono = 1;
+          if (col > 1)
+            {
+              int x = x0;
+              int new_cw = cw - ( (x % cw) );
+              if (new_cw < cw*3/2)
+                { new_cw += cw; }
+              cw = new_cw;
+            }
+        }
+    }
+  float scale_x  = 1.0f;
+  float scale_y  = 1.0f;
+  float offset_y = 0.0f;
+  if (dw)
+    {
+      scale_x = 2.0f;
+    }
+  if (dh)
+    {
+      scale_y = 2.0f;
+    }
+  if (dh == 1)
+    {
+      offset_y = 0.5f;
+    }
+  else if (dh == -1)
+    {
+      offset_y =  0.0f;
+    }
+  if (in_smooth_scroll)
+    {
+      offset_y -= vt->scroll_offset / (dh?2:1);
+    }
+  cw *= scale_x;
+  if (blink_fast)
+    {
+      if ( (vt->blink_state % 2) == 0)
+        { blink = 1; }
+      else
+        { blink = 0; }
+    }
+  else if (blink)
+    {
+      if ( (vt->blink_state % 10) < 5)
+        { blink = 1; }
+      else
+        { blink = 0; }
+    }
+  /*
+     from the vt100 technical-manual:
+
+     "Reverse characters [..] normally have dim backgrounds with
+     black characters so that large white spaces have the same impact
+     on the viewer's eye as the smaller brighter white areas of
+     normal characters. Bold and reverse asserted together give a
+     background of normal intensity. Blink applied to nonreverse
+     characters causes them to alternate between their usual
+     intensity and the next lower intensity. (Normal characters vary
+     between normal and dim intensity. Bold characters vary between
+     bright and normal intensity.) Blink applied to a reverse
+     character causes that character to alternate between normal and
+     reverse video representations of that character."
+
+     This is in contrast with how the truth table appears to be
+     meant used, since it uses a reverse computed as the xor of
+     the global screen reverse and the reverse attribute of the
+     cell.
+
+     To fulfil the more asthethic resulting from implementing the
+     text, and would be useful to show how the on_bright background
+     mode of the vt100 actually displays the vttest.
+
+     */
+  if (on_white)
+    {
+          if (bold)
+            {
+              bg_intensity =           2;
+              fg_intensity = blink?1:  0;
+            }
+          else if (dim)
+            {
+              bg_intensity =           2;
+              fg_intensity = blink?3:  1;
+            }
+          else
+            {
+              bg_intensity =           2;
+              fg_intensity = blink?1:  0;
+            }
+          if (fg_set)
+            {
+              fg_intensity = blink?2:3;
+            }
+    }
+  else /* bright on dark */
+    {
+          if (bold)
+            {
+              bg_intensity =           0;
+              fg_intensity = blink?2:  3;
+            }
+          else if (dim)
+            {
+              bg_intensity =           0;
+              fg_intensity = blink?0:  1;
+            }
+          else
+            {
+              bg_intensity =           0;
+              fg_intensity = blink?1:  2;
+            }
+    }
+  uint8_t bg_rgb[4]= {0,0,0,255};
+  uint8_t fg_rgb[4]= {255,255,255,255};
+  {
+      //ctx_begin_path (ctx);
+      if (style &  STYLE_BG24_COLOR_SET)
+        {
+          uint64_t temp = style >> 40;
+          bg_rgb[0] = temp & 0xff;
+          temp >>= 8;
+          bg_rgb[1] = temp & 0xff;
+          temp >>= 8;
+          bg_rgb[2] = temp & 0xff;
+#if 0
+          if (dh)
+          {
+             bg_rgb[0] = 
+             bg_rgb[1] =
+             bg_rgb[2] = 30;
+          }
+#endif
+        }
+      else
+        {
+          if (style & STYLE_BG_COLOR_SET)
+            {
+              color = (style >> 40) & 255;
+              bg_intensity = -1;
+              vt_ctx_get_color (vt, color, bg_intensity, bg_rgb);
+            }
+          else
+            {
+              switch (bg_intensity)
+                {
+                  case 0:
+                    for (int i = 0; i <3 ; i++)
+                      { bg_rgb[i] = vt->bg_color[i]; }
+                    break;
+                  case 1:
+                    for (int i = 0; i <3 ; i++)
+                      { bg_rgb[i] = vt->bg_color[i] * 0.5 + vt->fg_color[i] * 0.5; }
+                    break;
+                  case 2:
+                    for (int i = 0; i <3 ; i++)
+                      { bg_rgb[i] = vt->bg_color[i] * 0.05 + vt->fg_color[i] * 0.95; }
+                    break;
+                  case 3:
+                    for (int i = 0; i <3 ; i++)
+                      { bg_rgb[i] = vt->fg_color[i]; }
+                    break;
+                }
+            }
+        }
+  }
+  if (style & STYLE_FG24_COLOR_SET)
+    {
+      uint64_t temp = style >> 16;
+      fg_rgb[0] = temp & 0xff;
+      temp >>= 8;
+      fg_rgb[1] = temp & 0xff;
+      temp >>= 8;
+      fg_rgb[2] = temp & 0xff;
+    }
+  else
+    {
+      if ( (style & STYLE_FG_COLOR_SET) == 0)
+        {
+          switch (fg_intensity)
+            {
+              case 0:
+                for (int i = 0; i <3 ; i++)
+                  { fg_rgb[i] = vt->bg_color[i] * 0.7 + vt->fg_color[i] * 0.3; }
+                break;
+              case 1:
+                for (int i = 0; i <3 ; i++)
+                  { fg_rgb[i] = vt->bg_color[i] * 0.5 + vt->fg_color[i] * 0.5; }
+                break;
+              case 2:
+                for (int i = 0; i <3 ; i++)
+                  { fg_rgb[i] = vt->bg_color[i] * 0.20 + vt->fg_color[i] * 0.80; }
+                break;
+              case 3:
+                for (int i = 0; i <3 ; i++)
+                  { fg_rgb[i] = vt->fg_color[i]; }
+            }
+        }
+      else
+        {
+          color = (style >> 16) & 255;
+          vt_ctx_get_color (vt, color, fg_intensity, fg_rgb);
+        }
+  }
+
+  if (reverse)
+  {
+    for (int c = 0; c < 3; c ++)
+    {
+      int t = bg_rgb[c];
+      bg_rgb[c] = fg_rgb[c];
+      fg_rgb[c] = t;
+    }
+  }
+
+  if (is_fg ||
+      ((!on_white) && bg_rgb[0]==0 && bg_rgb[1]==0 && bg_rgb[2]==0) ||
+      ((on_white) && bg_rgb[0]==255 && bg_rgb[1]==255 && bg_rgb[2]==255))
+          /* these comparisons are not entirely correct, when on dark background we assume black to
+           * be default and non-set, even when theme might differ
+           */
+  {
+    /* skipping draw of background */
+  }
+  else
+  {
+    if (dh)
+    {
+      vt_draw_bg (vt, ctx, ctx_floorf(x0),
+         ctx_floorf(y0 - ch - ch * (vt->scroll_offset)), cw, ch, bg_rgb);
+    }
+    else
+    {
+      vt_draw_bg (vt, ctx, x0, y0 - ch + ch * offset_y, cw, ch, bg_rgb);
+    }
+  }
+
+  if (!is_fg)
+    return cw;
+
+  int italic        = (style & STYLE_ITALIC) != 0;
+  int strikethrough = (style & STYLE_STRIKETHROUGH) != 0;
+  int overline      = (style & STYLE_OVERLINE) != 0;
+  int underline     = (style & STYLE_UNDERLINE) != 0;
+  int underline_var = (style & STYLE_UNDERLINE_VAR) != 0;
+  if (dh == 1)
+    {
+      underline = underline_var = 0;
+    }
+  int double_underline = 0;
+  int curved_underline = 0;
+  if (underline_var)
+    {
+      if (underline)
+        {
+          double_underline = 1;
+        }
+      else
+        {
+          curved_underline = 1;
+        }
+    }
+
+  int has_underline = (underline || double_underline || curved_underline);
+
+  if (unichar == ' ' && !has_underline)
+    is_hidden = 1;
+
+  if (!is_hidden)
+    {
+
+      ctx_rgba8 (ctx, fg_rgb[0], fg_rgb[1], fg_rgb[2], 255);
+
+
+      if (italic)
+        {
+          ctx_save (ctx);
+          //ctx_translate (ctx, (x0 + cw/3), (y0 + vt->ch/2) );
+          //ctx_scale (ctx, 0.9, 0.9);
+          //ctx_rotate (ctx, 0.15);
+          //ctx_translate (ctx, - (x0 + cw/3), - (y0 + vt->ch/2) );
+          ctx_font (ctx, "Mono Italic");
+        }
+      vt_ctx_glyph (ctx, vt, x0, y0, unichar, bold, scale_x, scale_y, offset_y);
+      if (italic)
+        {
+          ctx_restore (ctx);
+        }
+      if (curved_underline)
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.07 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, (cw+2) /3, -vt->ch * 0.05);
+          ctx_rel_line_to (ctx, (cw+2) /3, vt->ch * 0.1);
+          ctx_rel_line_to (ctx, (cw+2) /3, -vt->ch * 0.05);
+          //ctx_rel_line_to (ctx, cw, 0);
+          ctx_line_width (ctx, vt->font_size * (style &  STYLE_BOLD?0.050:0.04) );
+          ctx_stroke (ctx);
+        }
+      else if (double_underline)
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.130 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.030 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_line_width (ctx, vt->font_size * (style &  STYLE_BOLD?0.050:0.04) );
+          ctx_stroke (ctx);
+        }
+      else if (underline)
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.07 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_line_width (ctx, vt->font_size * (style &  STYLE_BOLD?0.075:0.05) );
+          ctx_stroke (ctx);
+        }
+      if (overline)
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.94 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_line_width (ctx, vt->font_size * (style &  STYLE_BOLD?0.075:0.05) );
+          ctx_stroke (ctx);
+        }
+      if (strikethrough)
+        {
+          ctx_begin_path (ctx);
+          ctx_move_to (ctx, x0, y0 - vt->font_size * 0.43 - vt->ch * vt->scroll_offset);
+          ctx_rel_line_to (ctx, cw, 0);
+          ctx_line_width (ctx, vt->font_size * (style &  STYLE_BOLD?0.075:0.05) );
+          ctx_stroke (ctx);
+        }
+    }
+  return cw;
+}
+
+int vt_has_blink (VT *vt)
+{
+  if (!vt) return 0;
+  return (vt->in_smooth_scroll ?  10 : 0);
+  //return vt->has_blink + (vt->in_smooth_scroll ?  10 : 0);
+}
+
+//extern int enable_terminal_menu;
+//
+
+//void ctx_set_popup (Ctx *ctx, void (*popup)(Ctx *ctx, void *data), void *popup_data);
+
+static char *primary = NULL;
+static void scrollbar_drag (CtxEvent *event, void *data, void *data2);
+static int scrollbar_down = 0;
+
+void ctx_client_mouse_event (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  if (!client)
+  {
+    event->stop_propagate = 1;
+    return;
+  }
+  VT *vt = client->vt;
+
+  float  x = event->x;
+  float  y = event->y;
+  int device_no = event->device_no;
+  char buf[128]="";
+
+  if (vt)
+  {
+  if ((!vt->in_alt_screen) &&
+      (event->x > vt->width - vt->cw * 1.5 || scrollbar_down) &&
+      (event->type == CTX_DRAG_MOTION ||
+      event->type == CTX_DRAG_PRESS ||
+      event->type == CTX_DRAG_RELEASE))
+    return scrollbar_drag (event, data, data2);
+  switch (event->type)
+  {
+    case CTX_MOTION:
+    case CTX_DRAG_MOTION:
+      //if (event->device_no==1)
+      {
+        sprintf (buf, "pm %.0f %.0f %i", x, y, device_no);
+//      ctx_queue_draw (event->ctx);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+//      vt->rev++;
+      }
+      break;
+    case CTX_DRAG_PRESS:
+      if (event->device_no==2)
+      {
+        if (primary)
+        {
+          if (vt)
+            vt_paste (vt, primary);
+        }
+      }
+      else if (event->device_no==3 && !vt->in_alt_screen)
+      {
+        vt->popped = 1;
+      }
+      else
+      {
+        sprintf (buf, "pp %.0f %.0f %i", x, y, device_no);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+//      ctx_queue_draw (event->ctx);
+//      vt->rev++;
+      }
+      break;
+    case CTX_DRAG_RELEASE:
+      if (event->device_no==3 && !vt->in_alt_screen)
+      {
+        vt->popped = 0;
+      }
+        ctx_queue_draw (event->ctx);
+        sprintf (buf, "pr %.0f %.0f %i", x, y, device_no);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+      break;
+    default:
+      // we should not stop propagation
+      return;
+      break;
+  }
+  }
+  else
+  {
+     CtxEvent *copy = ctx_event_copy (event);
+     ctx_list_append (&client->ctx_events, copy);
+  }
+  event->stop_propagate = 1;
+//vt->rev++;
+}
+
+void vt_mouse_event (CtxEvent *event, void *data, void *data2)
+{
+  VT   *vt = data;
+  CtxClient *client = vt_get_client (vt);
+  if (!client)
+  {
+    event->stop_propagate = 1;
+    return;
+  }
+  float  x = event->x;
+  float  y = event->y;
+  int device_no = event->device_no;
+  char buf[128]="";
+  if ((!vt->in_alt_screen) &&
+      (event->x > vt->width - vt->cw * 1.5 || scrollbar_down) &&
+      (event->type == CTX_DRAG_MOTION ||
+      event->type == CTX_DRAG_PRESS ||
+      event->type == CTX_DRAG_RELEASE))
+    return scrollbar_drag (event, data, data2);
+  switch (event->type)
+  {
+    case CTX_MOTION:
+    case CTX_DRAG_MOTION:
+      //if (event->device_no==1)
+      {
+        sprintf (buf, "pm %.0f %.0f %i", x, y, device_no);
+//      ctx_queue_draw (event->ctx);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+//      vt->rev++;
+      }
+      break;
+    case CTX_DRAG_PRESS:
+      if (event->device_no==2)
+      {
+        if (primary)
+        {
+          if (vt)
+            vt_paste (vt, primary);
+        }
+      }
+      else if (event->device_no==3 && !vt->in_alt_screen)
+      {
+        vt->popped = 1;
+      }
+      else
+      {
+        sprintf (buf, "pp %.0f %.0f %i", x, y, device_no);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+//      ctx_queue_draw (event->ctx);
+//      vt->rev++;
+      }
+      break;
+    case CTX_DRAG_RELEASE:
+      if (event->device_no==3 && !vt->in_alt_screen)
+      {
+        vt->popped = 0;
+      }
+        ctx_queue_draw (event->ctx);
+        sprintf (buf, "pr %.0f %.0f %i", x, y, device_no);
+        ctx_client_lock (client);
+        vt_feed_keystring (vt, event, buf);
+        ctx_client_unlock (client);
+      break;
+    default:
+      // we should not stop propagation
+      return;
+      break;
+  }
+  event->stop_propagate = 1;
+//vt->rev++;
+}
+static int scrollbar_focused = 0;
+#if 0
+static void scrollbar_enter (CtxEvent *event, void *data, void *data2)
+{
+  VT *vt = data;
+  vt->rev++;
+  scrollbar_focused = 1;
+}
+
+static void scrollbar_leave (CtxEvent *event, void *data, void *data2)
+{
+  VT *vt = data;
+  vt->rev++;
+  scrollbar_focused = 0;
+}
+#endif
+
+int ctx_vt_had_alt_screen (VT *vt)
+{
+  return vt?vt->had_alt_screen:0;
+}
+
+static void scrollbar_drag (CtxEvent *event, void *data, void *data2)
+{
+  VT *vt = data;
+  float disp_lines = vt->rows;
+  float tot_lines = vt->line_count + vt->scrollback_count;
+
+  vt->scroll = tot_lines - disp_lines - (event->y*1.0/ ctx_client_height (vt->root_ctx, vt->id)) * tot_lines + disp_lines/2;
+  if (vt->scroll < 0) { vt->scroll = 0.0; }
+  if (vt->scroll > vt->scrollback_count) { vt->scroll = vt->scrollback_count; }
+  ctx_client_rev_inc (vt->client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+
+  switch (event->type)
+  {
+    case CTX_DRAG_PRESS:
+      scrollbar_down = 1;
+      break;
+    case CTX_DRAG_RELEASE:
+      scrollbar_down = 0;
+      break;
+    default:
+      break;
+  }
+}
+
+#if 0
+static void scroll_handle_drag (CtxEvent *event, void *data, void *data2)
+{
+  VT *vt = data;
+  float tot_lines = vt->line_count + vt->scrollback_count;
+  if (event->type == CTX_DRAG_MOTION)
+  {
+    vt->scroll -= (event->delta_y * tot_lines) / (vt->rows * vt->ch);
+  }
+  if (vt->scroll < 0) { vt->scroll = 0.0; }
+  if (vt->scroll > vt->scrollback_count) { vt->scroll = vt->scrollback_count; }
+  vt->rev++;
+  event->stop_propagate = 1;
+}
+#endif
+
+#if 0
+static void test_popup (Ctx *ctx, void *data)
+{
+  VT *vt = data;
+
+  float x = ctx_client_x (vt->root_ctx, vt->id);
+  float y = ctx_client_y (vt->root_ctx, vt->id);
+  ctx_rectangle (ctx, x, y, 100, 100);
+  ctx_rgb (ctx, 1,0,0);
+  ctx_fill (ctx);
+}
+#endif
+
+void itk_style_color (Ctx *ctx, const char *name); // only itk fun used in vt
+
+void vt_use_images (VT *vt, Ctx *ctx)
+{
+  /*  this is a call intended for minimized/shaded fully obscured
+   *  clients to make sure their textures are kept alive
+   *  in the server
+   */
+  //float x0=0;
+  float y0=0;
+  //vt->has_blink = 0;
+  //vt->blink_state++;
+
+  ctx_save (ctx);
+
+  {
+    /* draw graphics */
+    for (int row = ((vt->scroll!=0.0f)?vt->scroll:0);
+         row < (vt->scroll) + vt->rows * 4;
+         row ++)
+    {
+       CtxList *l = ctx_list_nth (vt->lines, row);
+       float y = y0 + vt->ch * (vt->rows - row);
+
+       if (row >= vt->rows && !vt->in_alt_screen)
+         {
+           l = ctx_list_nth (vt->scrollback, row-vt->rows);
+         }
+
+       if (l && y <= (vt->rows - vt->scroll) *  vt->ch)
+         {
+           VtLine *line = l->data;
+           if (line->ctx_copy)
+             {
+               ctx_render_ctx_textures (line->ctx_copy, ctx);
+             }
+         }
+    }
+  }
+  ctx_restore (ctx);
+}
+
+
+void ctx_client_register_events (CtxClient *client, Ctx *ctx, double x0, double y0)
+{
+  ctx_begin_path (ctx);
+  ctx_save (ctx);
+  ctx_translate (ctx, x0, y0);
+  ctx_rectangle (ctx, 0, 0, client->width, client->height);
+  ctx_listen (ctx, CTX_DRAG,   ctx_client_mouse_event, client, NULL);
+  ctx_listen (ctx, CTX_MOTION, ctx_client_mouse_event, client, NULL);
+  ctx_begin_path (ctx);
+  ctx_restore (ctx);
+}
+
+#if 0
+void vt_register_events (VT *vt, Ctx *ctx, double x0, double y0)
+{
+  ctx_begin_path (ctx);
+  ctx_save (ctx);
+  ctx_translate (ctx, x0, y0);
+  ctx_rectangle (ctx, 0, 0, vt->cols * vt->cw, vt->rows * vt->ch);
+  ctx_listen (ctx, CTX_DRAG,   vt_mouse_event, vt, NULL);
+  ctx_listen (ctx, CTX_MOTION, vt_mouse_event, vt, NULL);
+  ctx_begin_path (ctx);
+  ctx_restore (ctx);
+}
+#endif
+
+void vt_draw (VT *vt, Ctx *ctx, double x0, double y0)
+{
+  ctx_begin_path (ctx);
+  ctx_save (ctx);
+  ctx_translate (ctx, x0, y0);
+  if (getenv ("CTX_STAR_WARS"))
+  ctx_apply_transform (ctx, 0.3120, -0.666, 700.,
+                            0.0000, 0.015,  200.0,
+                            0.00, -0.0007, 1.0);
+  x0 = 0;
+  y0 = 0;
+  ctx_font (ctx, "Mono");
+  vt->font_is_mono = 0;
+  ctx_font_size (ctx, vt->font_size * vt->font_to_cell_scale);
+  vt->has_blink = 0;
+  vt->blink_state++;
+#if 0
+  int cursor_x_px = 0;
+  int cursor_y_px = 0;
+  int cursor_w = vt->cw;
+  int cursor_h = vt->ch;
+  cursor_x_px = x0 + (vt->cursor_x - 1) * vt->cw;
+  cursor_y_px = y0 + (vt->cursor_y - 1) * vt->ch;
+  cursor_w = vt->cw;
+  cursor_h = vt->ch;
+#endif
+  ctx_save (ctx);
+  //if (vt->scroll || full)
+    {
+      ctx_begin_path (ctx);
+#if 1
+      ctx_rectangle (ctx, 0, 0, vt->width, //(vt->cols) * vt->cw,
+                     (vt->rows) * vt->ch);
+      if (vt->reverse_video)
+        {
+          itk_style_color (ctx, "terminal-bg-reverse");
+          ctx_fill  (ctx);
+        }
+      else
+        {
+          itk_style_color (ctx, "terminal-bg");
+          //ctx_rgba (ctx,0,0,0,1.0f);
+          ctx_fill  (ctx);
+        }
+#endif
+      if (vt->scroll != 0.0f)
+        ctx_translate (ctx, 0.0, vt->ch * vt->scroll);
+    }
+  /* draw terminal lines */
+   {
+     for (int row = (vt->scroll!=0.0f)?vt->scroll:0; row < (vt->scroll) + vt->rows; row ++)
+       {
+         CtxList *l = ctx_list_nth (vt->lines, row);
+         float y = y0 + vt->ch * (vt->rows - row);
+         if (row >= vt->rows)
+           {
+             l = ctx_list_nth (vt->scrollback, row-vt->rows);
+           }
+         if (l && y <= (vt->rows - vt->scroll) *  vt->ch)
+           {
+             VtLine *line = l->data;
+             int r = vt->rows - row;
+             const char *data = line->string.str;
+
+             vt->bg_active = 0;
+             for (int is_fg = 0; is_fg < 2; is_fg++)
+             {
+               const char *d = data;
+               float x = x0;
+               uint64_t style = 0;
+               uint32_t unichar = 0;
+               int in_scrolling_region = vt->in_smooth_scroll &&
+                   ((r >= vt->margin_top && r <= vt->margin_bottom) || r <= 0);
+               if (is_fg)
+                  vt_flush_bg (vt, ctx);
+  
+               for (int col = 1; col <= vt->cols * 1.33 && x < vt->cols * vt->cw; col++)
+                 {
+                   int c = col;
+                   int real_cw;
+                   int in_selected_region = 0;
+                   //if (vt->in_alt_screen == 0)
+                   {
+                   if (r > vt->select_start_row && r < vt->select_end_row)
+                     {
+                       in_selected_region = 1;
+                     }
+                   else if (r == vt->select_start_row)
+                     {
+                       if (col >= vt->select_start_col) { in_selected_region = 1; }
+                       if (r == vt->select_end_row)
+                         {
+                           if (col > vt->select_end_col) { in_selected_region = 0; }
+                         }
+                     }
+                   else if (r == vt->select_end_row)
+                     {
+                       in_selected_region = 1;
+                       if (col > vt->select_end_col) { in_selected_region = 0; }
+                     }
+                   }
+                   if (vt->select_active == 0) in_selected_region = 0;
+                   style = vt_line_get_style (line, col-1);
+                   unichar = d?ctx_utf8_to_unichar (d) :' ';
+  
+                   int is_cursor = 0;
+                   if (vt->cursor_x == col && vt->cursor_y == vt->rows - row && vt->cursor_visible)
+                      is_cursor = 1;
+  
+                   real_cw=vt_draw_cell (vt, ctx, r, c, x, y, style, unichar,
+                                         line->double_width,
+                                         line->double_height_top?1:
+                                         line->double_height_bottom?-1:0,
+                                         in_scrolling_region,
+                                         in_selected_region ^ is_cursor, is_fg);
+                   if (r == vt->cursor_y && col == vt->cursor_x)
+                     {
+#if 0
+                       cursor_x_px = x;
+#endif
+                     }
+                   x+=real_cw;
+                   if (style & STYLE_BLINK ||
+                       style & STYLE_BLINK_FAST)
+                     {
+                       vt->has_blink = 1;
+                     }
+                   if (d)
+                     {
+                       d = mrg_utf8_skip (d, 1);
+                       if (!*d) { d = NULL; }
+                     }
+                 }
+             }
+#if 0
+             if (line->wrapped)
+             {
+               ctx_rectangle (ctx, x0, y, 10, 10);
+               ctx_rgb (ctx, 1,0,0);
+               ctx_fill (ctx);
+             }
+#endif
+          }
+      }
+  }
+
+#if 0
+  /* draw cursor (done inline with fg/bg reversing, some cursor styles might need
+   * additional drawing though
+   */
+  if (vt->cursor_visible)
+    {
+    //  ctx_rgba (ctx, 0.9, 0.8, 0.0, 0.5333);
+      ctx_rgba (ctx, 1.0,1.0,1.0,1.0);
+      ctx_begin_path (ctx);
+      ctx_rectangle (ctx,
+                     cursor_x_px, cursor_y_px,
+                     cursor_w, cursor_h);
+      ctx_fill (ctx);
+    }
+#endif
+
+
+  {
+    /* draw graphics */
+     for (int row = ((vt->scroll!=0.0f)?vt->scroll:0); row < (vt->scroll) + vt->rows * 4; row ++)
+      {
+        CtxList *l = ctx_list_nth (vt->lines, row);
+        float y = y0 + vt->ch * (vt->rows - row);
+
+        if (row >= vt->rows && !vt->in_alt_screen)
+          {
+            l = ctx_list_nth (vt->scrollback, row-vt->rows);
+          }
+
+        if (l && y <= (vt->rows - vt->scroll) *  vt->ch)
+          {
+            VtLine *line = l->data;
+            {
+            for (int i = 0; i < 4; i++)
+              {
+                Image *image = line->images[i];
+                if (image)
+                  {
+                    int u = (line->image_col[i]-1) * vt->cw + (line->image_X[i] * vt->cw);
+                    int v = y - vt->ch + (line->image_Y[i] * vt->ch);
+                //  int rows = (image->height + (vt->ch-1) ) /vt->ch;
+                //
+                //
+                    if (v + image->height +vt->scroll * vt->ch > 0.0 &&
+                        image->width && image->height /* some ghost images appear with these */
+                        )
+                    {
+                    ctx_save (ctx);
+                    ctx_rectangle (ctx, x0, y0 - vt->scroll * vt->ch, vt->cw * vt->cols,
+                                    vt->ch * vt->rows);
+                    ctx_clip (ctx);
+                    char texture_n[65]; 
+
+                    sprintf (texture_n, "vtimg%i", image->eid_no);
+                    ctx_rectangle (ctx, u, v, image->width, image->height);
+                    ctx_translate (ctx, u, v);
+
+                    //replace this texture_n with NULL to
+                    // be content addressed - but bit slower
+                    ctx_define_texture (ctx, texture_n, image->width,
+                                        image->height,
+                                        0,
+                                        image->kitty_format == 32 ?
+                                                 CTX_FORMAT_RGBA8 :
+                                                 CTX_FORMAT_RGB8,
+                                        image->data, texture_n);
+                    ctx_fill (ctx);
+
+                    ctx_restore (ctx);
+                    }
+                  }
+              }
+
+            if (line->ctx_copy)
+              {
+                //fprintf (stderr, " [%i]\n", _ctx_frame (ctx));
+                //ctx_render_stream (line->ctx_copy, stderr, 1);
+
+                ctx_begin_path (ctx);
+                ctx_save (ctx);
+                ctx_rectangle (ctx, x0, y0 - vt->scroll * vt->ch, vt->cw * vt->cols,
+                                    vt->ch * vt->rows);
+                ctx_clip (ctx);
+                ctx_translate (ctx, 0.0, y - vt->ch);
+
+                //(vt->rows-row-1) * (vt->ch) );
+                //float factor = vt->cols * vt->cw / 1000.0;
+                //ctx_scale (ctx, factor, factor);
+                //
+                ctx_render_ctx (line->ctx_copy, ctx);
+                ctx_restore (ctx);
+              }
+            }
+          }
+    //  y -= vt->ch;
+      }
+  }
+
+
+  for (int i = 0; i < 4; i++)
+    {
+      if (vt->leds[i])
+        {
+          ctx_rgba (ctx, .5,1,.5,0.8);
+          ctx_rectangle (ctx, vt->cw * i + vt->cw * 0.25, vt->ch * 0.25, vt->cw/2, vt->ch/2);
+          ctx_fill (ctx);
+        }
+    }
+  ctx_restore (ctx);
+//#define SCROLL_SPEED 0.25;
+#define SCROLL_SPEED 0.001;
+  if (vt->in_smooth_scroll)
+   {
+     if (vt->in_smooth_scroll<0)
+       {
+         vt->scroll_offset += SCROLL_SPEED;
+         if (vt->scroll_offset >= 0.0)
+           {
+             vt->scroll_offset = 0;
+             vt->in_smooth_scroll = 0;
+             ctx_client_rev_inc (vt->client);
+           }
+       }
+     else
+       {
+         vt->scroll_offset -= SCROLL_SPEED;
+         if (vt->scroll_offset <= 0.0)
+           {
+             vt->scroll_offset = 0;
+             vt->in_smooth_scroll = 0;
+             ctx_client_rev_inc (vt->client);
+           }
+       }
+   }
+
+    /* scrollbar */
+    if (!vt->in_alt_screen)
+    {
+      float disp_lines = vt->rows;
+      float tot_lines = vt->line_count + vt->scrollback_count;
+      float offset = (tot_lines - disp_lines - vt->scroll) / tot_lines;
+      float win_len = disp_lines / tot_lines;
+
+#if 0
+      ctx_rectangle (ctx, (vt->cols *vt->cw), 0, 
+                       (vt->width) - (vt->cols * vt->cw),
+                       vt->rows *  vt->ch);
+      ctx_rgb (ctx,1,0,0);
+      ctx_fill (ctx);
+#endif
+
+      ctx_rectangle (ctx, (vt->width) - vt->cw * 1.5,
+                     0, 1.5 * vt->cw,
+                     vt->rows * vt->ch);
+      //ctx_listen (ctx, CTX_DRAG,  scrollbar_drag, vt, NULL);
+      //ctx_listen (ctx, CTX_ENTER, scrollbar_enter, vt, NULL);
+      //ctx_listen (ctx, CTX_LEAVE, scrollbar_leave, vt, NULL);
+      if (vt->scroll != 0 || scrollbar_focused)
+        ctx_rgba (ctx, 0.5, 0.5, 0.5, .25);
+      else
+        ctx_rgba (ctx, 0.5, 0.5, 0.5, .10);
+      ctx_fill (ctx);
+      ctx_round_rectangle (ctx, (vt->width) - vt->cw * 1.5,
+                           offset * vt->rows * vt->ch, (1.5-0.2) * vt->cw,
+                           win_len * vt->rows * vt->ch,
+                           vt->cw * 1.5 /2);
+      //ctx_listen (ctx, CTX_DRAG, scroll_handle_drag, vt, NULL);
+      if (vt->scroll != 0 || scrollbar_focused)
+        ctx_rgba (ctx, 1, 1, 1, .25);
+      else
+        ctx_rgba (ctx, 1, 1, 1, .10);
+      ctx_fill (ctx);
+    }
+
+  if (getenv ("CTX_STAR_WARS"))
+  ctx_apply_transform (ctx, 0.3120, -0.666, 700.,
+                            0.0000, 0.015,  200.0,
+                            0.00, -0.0007, 1.0);
+    ctx_rectangle (ctx, 0, 0, vt->cols * vt->cw, vt->rows * vt->ch);
+    ctx_listen (ctx, CTX_DRAG,   vt_mouse_event, vt, NULL);
+    ctx_listen (ctx, CTX_MOTION, vt_mouse_event, vt, NULL);
+    ctx_begin_path (ctx);
+
+    ctx_restore (ctx);
+
+    if (vt->popped)
+    {
+       //ctx_set_popup (ctx, test_popup, vt);
+    }
+}
+
+
+int vt_is_done (VT *vt)
+{
+  return vt->vtpty.done;
+}
+
+int vt_get_result (VT *vt)
+{
+  /* we could block - at least for a while, here..? */
+  return vt->result;
+}
+
+void vt_set_scrollback_lines (VT *vt, int scrollback_lines)
+{
+  vt->scrollback_limit = scrollback_lines;
+}
+
+int  vt_get_scrollback_lines (VT *vt)
+{
+  return vt->scrollback_limit;
+}
+
+void vt_set_scroll (VT *vt, int scroll)
+{
+  if (vt->scroll == scroll)
+    return;
+  vt->scroll = scroll;
+  if (vt->scroll > ctx_list_length (vt->scrollback) )
+    { vt->scroll = ctx_list_length (vt->scrollback); }
+  if (vt->scroll < 0)
+    { vt->scroll = 0; }
+}
+
+int vt_get_scroll (VT *vt)
+{
+  return vt->scroll;
+}
+
+char *
+vt_get_selection (VT *vt)
+{
+  CtxString *str = ctx_string_new ("");
+  char *ret;
+  for (int row = vt->select_start_row; row <= vt->select_end_row; row++)
+    {
+      const char *line_str = vt_get_line (vt, vt->rows - row);
+      int col = 1;
+      for (const char *c = line_str; *c; c = mrg_utf8_skip (c, 1), col ++)
+        {
+          if (row == vt->select_end_row && col > vt->select_end_col)
+            { continue; }
+          if (row == vt->select_start_row && col < vt->select_start_col)
+            { continue; }
+          ctx_string_append_utf8char (str, c);
+        }
+      if (row < vt->select_end_row && !vt_line_is_continuation (vt, vt->rows-row-1))
+      {
+        _ctx_string_append_byte (str, '\n');
+      }
+    }
+  ret = str->str;
+  ctx_string_free (str, 0);
+  return ret;
+}
+
+int vt_get_local (VT *vt)
+{
+  return vt->local_editing;
+}
+
+void vt_set_local (VT *vt, int local)
+{
+  vt->local_editing = local;
+}
+
+static unsigned long prev_press_time = 0;
+static int short_count = 0;
+
+
+void terminal_set_primary (const char *text)
+{
+  if (primary) ctx_free (primary);
+  primary = NULL;
+  if (text) primary = ctx_strdup (text);
+}
+
+void terminal_long_tap (Ctx *ctx, VT *vt);
+static int long_tap_cb_id = 0;
+static int single_tap (Ctx *ctx, void *data)
+{
+#if 0 // XXX
+  VT *vt = data;
+  if (short_count == 0 && !vt->select_active)
+    terminal_long_tap (ctx, vt);
+#endif
+  return 0;
+}
+
+void vt_mouse (VT *vt, CtxEvent *event, VtMouseEvent type, int button, int x, int y, int px_x, int px_y)
+{
+ char buf[64]="";
+ int button_state = 0;
+ ctx_client_rev_inc (vt->client);
+ ctx_ticks();
+ if ((! (vt->mouse | vt->mouse_all | vt->mouse_drag)) ||
+     (event && (event->state & CTX_MODIFIER_STATE_SHIFT)))
+   {
+     // regular mouse select, this is incomplete
+     // fully ignorant of scrollback for now
+     //
+     if (type == VT_MOUSE_PRESS)
+       {
+         vt->cursor_down = 1;
+         vt->select_begin_col = x;
+         vt->select_begin_row = y - (int)vt->scroll;
+         vt->select_start_col = x;
+         vt->select_start_row = y - (int)vt->scroll;
+         vt->select_end_col = x;
+         vt->select_end_row = y - (int)vt->scroll;
+         vt->select_active = 0;
+         if (long_tap_cb_id)
+           {
+             ctx_remove_idle (vt->root_ctx, long_tap_cb_id);
+             long_tap_cb_id = 0;
+           }
+         
+         if ((ctx_ticks () - prev_press_time) < 1000*300 &&
+             abs(px_x - vt->select_begin_x) + 
+             abs(px_y - vt->select_begin_y) < 8)
+         {
+           short_count++;
+           switch (short_count)
+           {
+             case 1:
+             {
+               /* extend selection until space, XXX  should handle utf8 instead of ascii here!  */
+
+               int hit_space = 0;
+           
+               while (vt->select_start_col > 1 && !hit_space)
+               {
+                 vt->select_start_col --;
+                 char *sel = vt_get_selection (vt);
+                 if (sel[0] == ' ' || sel[0] == '\0')
+                   hit_space = 1;
+                 ctx_free (sel);
+               }
+               if (hit_space)
+                 vt->select_start_col++;
+
+               hit_space = 0;
+               while ((hit_space == 0) &&
+                      (vt->select_end_col < vt->cols))
+               {
+                 vt->select_end_col ++;
+                 char *sel = vt_get_selection (vt);
+                 int len = strlen(sel);
+                 if (sel[len-1]==' ')
+                   hit_space = 1;
+                 ctx_free (sel);
+               }
+               if (hit_space)
+                 vt->select_end_col--;
+
+               vt->select_active = 1;
+
+               { char *sel = vt_get_selection (vt);
+                 if (sel)
+                 {
+                    terminal_set_primary (sel);
+                    ctx_free (sel);
+                 }
+               }
+               }
+               break;
+             case 2:
+               vt->select_start_col = 1;
+               vt->select_end_col = vt->cols;
+               vt->select_active = 1;
+               {
+                 char *sel = vt_get_selection (vt);
+                 if (sel){
+                    terminal_set_primary (sel);
+                    ctx_free (sel);
+                 }
+               }
+               break;
+             case 3:
+               short_count = 0;
+               vt->select_start_col = 
+               vt->select_end_col = vt->select_begin_col;
+               vt->select_active = 0;
+               terminal_set_primary ("");
+               break;
+           }
+         }
+         else
+         {
+           if (vt->root_ctx && short_count == 0)
+             long_tap_cb_id = ctx_add_timeout (vt->root_ctx, 1000, single_tap, vt);
+           short_count = 0;
+           //vt->select_start_col = 
+           //vt->select_end_col = vt->select_begin_col;
+         }
+         vt->select_begin_x = px_x;
+         vt->select_begin_y = px_y;
+         prev_press_time = ctx_ticks ();
+         ctx_client_rev_inc (vt->client);
+       }
+     else if (type == VT_MOUSE_RELEASE)
+       {
+         if (long_tap_cb_id)
+           {
+             ctx_remove_idle (vt->root_ctx, long_tap_cb_id);
+             long_tap_cb_id = 0;
+           }
+         vt->cursor_down = 0;
+       }
+     else if (type == VT_MOUSE_MOTION && vt->cursor_down)
+       {
+         int row = y - (int)vt->scroll;
+         int col = x;
+         if ((row > vt->select_begin_row) ||
+             ((row == vt->select_begin_row) && (col >= vt->select_begin_col)))
+         {
+           vt->select_start_col = vt->select_begin_col;
+           vt->select_start_row = vt->select_begin_row;
+           vt->select_end_col = col;
+           vt->select_end_row = row;
+         }
+         else
+         {
+           vt->select_start_col = col;
+           vt->select_start_row = row;
+           vt->select_end_col = vt->select_begin_col;
+           vt->select_end_row = vt->select_begin_row;
+         }
+         if (vt->select_end_row == vt->select_start_row &&
+             abs (vt->select_begin_x - px_x) < vt->cw/2)
+         {
+           vt->select_active = 0;
+         }
+         else
+         {
+           vt->select_active = 1;
+           char *selection = vt_get_selection (vt);
+           if (selection)
+           {
+             terminal_set_primary (selection);
+             ctx_free (selection);
+           }
+         }
+
+         if (y < 1)
+         {
+           vt->scroll += 1.0f;
+           if (vt->scroll > vt->scrollback_count)
+             vt->scroll = vt->scrollback_count;
+         }
+         else if (y > vt->rows)
+         {
+           vt->scroll -= 1.0f;
+           if (vt->scroll < 0)
+             vt->scroll = 0.0f;
+         }
+
+         ctx_client_rev_inc (vt->client);
+       }
+     return;
+   }
+ if (type == VT_MOUSE_MOTION)
+   { button_state = 3; }
+
+ if (vt->unit_pixels && vt->mouse_decimal)
+   {
+     x = px_x;
+     y = px_y;
+   }
+ switch (type)
+   {
+     case VT_MOUSE_MOTION:
+       if (!vt->mouse_all)
+         return;
+       if (x==vt->lastx && y==vt->lasty)
+         return;
+       vt->lastx = x;
+       vt->lasty = y;
+   //  sprintf (buf, "\033[<35;%i;%iM", x, y);
+       break;
+     case VT_MOUSE_RELEASE:
+       if (vt->mouse_decimal == 0)
+         button_state = 3;
+       break;
+     case VT_MOUSE_PRESS:
+       button_state = 0;
+       break;
+     case VT_MOUSE_DRAG: // XXX not really used - remove
+       if (! (vt->mouse_all || vt->mouse_drag) )
+         return;
+       button_state = 32;
+       break;
+   }
+ // todo : mix in ctrl/meta state
+ if (vt->mouse_decimal)
+   {
+     sprintf (buf, "\033[<%i;%i;%i%c", button_state, x, y, type == VT_MOUSE_RELEASE?'m':'M');
+   }
+ else
+   { 
+     sprintf (buf, "\033[M%c%c%c", button_state + 32, x + 32, y + 32);
+   }
+ if (buf[0])
+   {
+     vt_write (vt, buf, strlen (buf) );
+     fflush (NULL);
+   }
+}
+
+pid_t vt_get_pid (VT *vt)
+{
+  return vt->vtpty.pid;
+}
+
+void vt_set_ctx (VT *vt, Ctx *ctx)
+{
+  vt->root_ctx = ctx;
+}
+
+#endif
+#endif
+
+float ctx_target_fps = 100.0; /* this might end up being the resolution of our
+                                 idle callback firing
+                               */
+
+#if CTX_CLIENTS
+
+
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE
+#endif
+
+#if !__COSMOPOLITAN__
+#include <unistd.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/ioctl.h>
+#include <signal.h>
+#include <math.h>
+#include <sys/time.h>
+#include <time.h>
+#endif
+
+#define VT_RECORD 0
+extern Ctx *ctx;
+#define flag_is_set(a, f) (((a) & (f))!=0)
+#define flag_set(a, f)    ((a) |= (f));
+#define flag_unset(a, f)  ((a) &= ~(f));
+
+
+void terminal_update_title    (const char *title);
+void ctx_sdl_set_fullscreen   (Ctx *ctx, int val);
+int  ctx_sdl_get_fullscreen   (Ctx *ctx);
+static int ctx_fetched_bytes = 1;
+
+CtxClient *vt_get_client (VT *vt);
+
+void ctx_client_set_title        (Ctx *ctx, int id, const char *title)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client)
+     return;
+   if (client->title)
+     ctx_free (client->title);
+   client->title = NULL;
+   if (title)
+     client->title = ctx_strdup (title);
+}
+const char *ctx_client_get_title (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client)
+     return NULL;
+   return client->title;
+}
+
+int vt_set_prop (VT *vt, uint32_t key_hash, const char *val)
+{
+#if 1
+  switch (key_hash)
+  {
+    case CTX_title:  
+     {
+       CtxClient *client = vt_get_client (vt);
+       if (client)
+       {
+         ctx_client_set_title (vt->root_ctx, client->id, val);
+         //if (client->title) ctx_free (client->title);
+         //client->title = ctx_strdup (val);
+       }
+     }
+     break;
+  }
+#else
+  float fval = strtod (val, NULL);
+  CtxClient *client = ctx_client_by_id (ct->id);
+  uint32_t val_hash = ctx_strhash (val);
+  if (!client)
+    return 0;
+
+  if (key_hash == ctx_strhash("start_move"))
+  {
+    start_moving (client);
+    moving_client = 1;
+    return 0;
+  }
+
+// set "pcm-hz"       "8000"
+// set "pcm-bits"     "8"
+// set "pcm-encoding" "ulaw"
+// set "play-pcm"     "d41ata312313"
+// set "play-pcm-ref" "foo.wav"
+
+// get "free"
+// storage of blobs for referencing when drawing or for playback
+// set "foo.wav"      "\3\1\1\4\"
+// set "fnord.png"    "PNG12.4a312"
+
+  switch (key_hash)
+  {
+    case CTX_title:  ctx_client_set_title (ct->id, val); break;
+    case CTX_x:      client->x = fval; break;
+    case CTX_y:      client->y = fval; break;
+    case CTX_width:  ctx_client_resize (ct->id, fval, client->height); break;
+    case CTX_height: ctx_client_resize (ct->id, client->width, fval); break;
+    case CTX_action:
+      switch (val_hash)
+      {
+        case CTX_maximize:     ctx_client_maximize (client); break;
+        case CTX_unmaximize:   ctx_client_unmaximize (client); break;
+        case CTX_lower:        ctx_client_lower (client); break;
+        case CTX_lowerBottom:  ctx_client_lower_bottom (client);  break;
+        case CTX_raise:        ctx_client_raise (client); break;
+        case CTX_raiseTop:     ctx_client_raise_top (client); break;
+      }
+      break;
+  }
+  ct->rev++;
+#endif
+  return 0;
+}
+
+static float _ctx_font_size = 10.0;
+
+
+int ctx_client_resize (Ctx *ctx, int id, int width, int height);
+void ctx_client_maximize (Ctx *ctx, int id);
+
+CtxClient *vt_get_client (VT *vt)
+{
+  for (CtxList *l = ctx_clients (vt->root_ctx); l; l =l->next)
+  {
+    CtxClient *client = l->data;
+    if (client->vt == vt)
+            return client;
+  }
+  return NULL;
+}
+
+static void ctx_client_init (Ctx *ctx, CtxClient *client, int x, int y, int width, int height, float font_size,
+                             CtxClientFlags flags, void *user_data, CtxClientFinalize finalize)
+{
+  static int global_id = 0;
+
+
+  if (font_size <= 0.0) font_size = ctx_get_font_size (ctx);
+  if (ctx_backend_type (ctx) == CTX_BACKEND_TERM)
+  {
+    font_size = 3;
+  }
+  client->id = ++global_id; // starting at 1 is nicer, then we can use 0 for none
+  client->x = x;
+  client->y = y;
+  client->flags = flags;
+  client->ctx = ctx;
+  client->width = width;
+  client->height = height;
+  client->user_data = user_data;
+  client->finalize = finalize;
+  client->opacity = 1.0f;
+
+      //fprintf (stderr, "client new:%f\n", font_size);
+#if CTX_THREADS
+  mtx_init (&client->mtx, mtx_plain);
+#endif
+}
+
+CtxClient *ctx_client_new (Ctx *ctx,
+                           const char *commandline,
+                           int x, int y, int width, int height,
+                           float font_size,
+                           CtxClientFlags flags,
+                           void *user_data,
+                           CtxClientFinalize finalize)
+{
+  CtxClient *client = ctx_calloc (sizeof (CtxClient), 1);
+  ctx_list_append (&ctx->events.clients, client);
+  ctx_client_init (ctx, client, x, y, width, height, font_size, flags, user_data, finalize);
+  float line_spacing = 2.0f;
+  client->vt = vt_new (commandline, width, height, font_size,line_spacing, client->id, (flags & ITK_CLIENT_CAN_LAUNCH)!=0);
+  client->vt->client = client;
+  vt_set_ctx (client->vt, ctx);
+  return client;
+}
+
+CtxClient *ctx_client_new_argv (Ctx *ctx, char **argv, int x, int y, int width, int height, float font_size, CtxClientFlags flags, void *user_data, CtxClientFinalize finalize)
+{
+
+  CtxClient *client = ctx_calloc (sizeof (CtxClient), 1);
+  ctx_client_init (ctx, client, x, y, width, height, font_size, flags, user_data, finalize);
+  ctx_list_append (&ctx->events.clients, client);
+
+  float line_spacing = 2.0f;
+  client->vt = vt_new_argv (argv, width, height, font_size,line_spacing, client->id, (flags & ITK_CLIENT_CAN_LAUNCH)!=0);
+  client->vt->client = client;
+  vt_set_ctx (client->vt, ctx);
+  return client;
+}
+
+#ifndef EMSCRIPTEN
+static void *launch_client_thread (void *data)
+{
+  CtxClient *client = data;
+
+  client->sub_ctx = ctx_new (client->width, client->height,
+                                "headless");
+
+  client->start_routine (client->sub_ctx, client->user_data);
+
+  fprintf (stderr, "%s: cleanup\n", __FUNCTION__);
+  ctx_destroy (client->sub_ctx);
+  return NULL;
+}
+
+CtxClient *ctx_client_new_thread (Ctx *ctx, void (*start_routine)(Ctx *ctx, void *user_data),
+                                  int x, int y, int width, int height, float font_size, CtxClientFlags flags, void *user_data, CtxClientFinalize finalize)
+{
+  CtxClient *client = ctx_calloc (sizeof (CtxClient), 1);
+  ctx_client_init (ctx, client, x, y, width, height, font_size, flags, user_data, finalize);
+
+  ctx_list_append (&ctx->events.clients, client);
+
+
+  client->start_routine = start_routine;
+  thrd_create (&client->tid, launch_client_thread, client);
+  //float line_spacing = 2.0f;
+  //client->vt = vt_new_thread (start_routine, userdata, width, height, font_size,line_spacing, client->id, (flags & ITK_CLIENT_CAN_LAUNCH)!=0);
+  //vt_set_ctx (client->vt, ctx);
+  if (client->vt)
+    client->vt->client = client;
+  return client;
+}
+#endif
+
+#if CTX_SHAPE_CACHE
+extern float ctx_shape_cache_rate;
+#endif
+#if CTX_THREADS
+extern int _ctx_max_threads;
+#endif
+
+static int focus_follows_mouse = 0;
+
+static CtxClient *find_active (Ctx *ctx, int x, int y)
+{
+  CtxClient *ret = NULL;
+  float titlebar_height = _ctx_font_size;
+  int resize_border = titlebar_height/2;
+
+  for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+  {
+     CtxClient *c = l->data;
+     if ((c->flags & ITK_CLIENT_MAXIMIZED) && c == ctx->events.active_tab)
+     if (x > c->x - resize_border && x < c->x+c->width + resize_border &&
+         y > c->y - titlebar_height && y < c->y+c->height + resize_border)
+     {
+       ret = c;
+     }
+  }
+
+  for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+  {
+     CtxClient *c = l->data;
+     if (!(c->flags &  ITK_CLIENT_MAXIMIZED))
+     if (x > c->x - resize_border && x < c->x+c->width + resize_border &&
+         y > c->y - titlebar_height && y < c->y+c->height + resize_border)
+     {
+       ret = c;
+     }
+  }
+  return ret;
+}
+
+int id_to_no (Ctx *ctx, int id)
+{
+  CtxList *l;
+  int no = 0;
+
+  for (l = ctx_clients (ctx); l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (client->id == id)
+      return no;
+    no++;
+  }
+  return -1;
+}
+
+void ctx_client_move (Ctx *ctx, int id, int x, int y);
+int ctx_client_resize (Ctx *ctx, int id, int w, int h);
+void ctx_client_shade_toggle (Ctx *ctx, int id);
+float ctx_client_min_y_pos (Ctx *ctx);
+float ctx_client_max_y_pos (Ctx *ctx);
+
+static void ctx_clients_ensure_layout (Ctx *ctx)
+{
+  CtxList *clients = ctx_clients (ctx);
+  int n_clients = ctx_list_length (clients);
+  if (n_clients == 1)
+  {
+    CtxClient *client = clients->data;
+    if (client->flags & ITK_CLIENT_MAXIMIZED)
+    {
+      ctx_client_move (ctx, client->id, 0, 0);
+      ctx_client_resize (ctx, client->id, ctx_width (ctx), ctx_height(ctx));
+      if (ctx->events.active_tab == NULL)
+        ctx->events.active_tab = client;
+    }
+  }
+  else
+  for (CtxList *l = clients; l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (client->flags & ITK_CLIENT_MAXIMIZED)
+    {
+      ctx_client_move (ctx, client->id, 0, ctx_client_min_y_pos (ctx));
+      ctx_client_resize (ctx, client->id, ctx_width (ctx), ctx_height(ctx) -
+                      ctx_client_min_y_pos (ctx) / 2);   // /2 to counter the double titlebar of non-maximized
+      if (ctx->events.active_tab == NULL)
+        ctx->events.active_tab = client;
+    }
+  }
+}
+
+CtxClient *ctx_client_by_id (Ctx *ctx, int id)
+{
+  for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (client->id == id)
+      return client;
+  }
+  return NULL;
+}
+
+void ctx_client_remove (Ctx *ctx, CtxClient *client)
+{
+  ctx_client_lock (client);
+  if (!client->internal)
+  {
+
+    if (client->vt)
+      vt_destroy (client->vt);
+  }
+
+  if (client->title)
+    ctx_free (client->title);
+
+#if VT_RECORD
+  if (client->recording)
+    ctx_destroy (client->recording);
+#endif
+  if (client->finalize)
+     client->finalize (client, client->user_data);
+
+  ctx_list_remove (&ctx->events.clients, client);
+
+  if (client == ctx->events.active_tab)
+  {
+    ctx->events.active_tab = NULL;
+  }
+
+  if (ctx)
+  if (client == ctx->events.active)
+  {
+    ctx->events.active = find_active (ctx, ctx_pointer_x (ctx), ctx_pointer_y (ctx));
+    if (!ctx->events.active)
+    {
+      if (ctx->events.clients)
+        ctx->events.active = ctx->events.clients->data;
+    }
+  }
+
+  ctx_client_unlock (client);
+  ctx_free (client);
+}
+
+void ctx_client_remove_by_id (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (client)
+    ctx_client_remove (ctx, client);
+}
+
+int ctx_client_height (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (!client) return 0;
+  return client->height;
+}
+
+int ctx_client_x (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (!client) return 0;
+  return client->x;
+}
+
+int ctx_client_y (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (!client) return 0;
+  return client->y;
+}
+
+void ctx_client_raise_top (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (!client) return;
+  ctx_list_remove (&ctx->events.clients, client);
+  ctx_list_append (&ctx->events.clients, client);
+  ctx_queue_draw (ctx);
+}
+
+void ctx_client_lower_bottom (Ctx *ctx, int id)
+{
+  CtxClient *client = ctx_client_by_id (ctx, id);
+  if (!client) return;
+  ctx_list_remove (&ctx->events.clients, client);
+  ctx_list_prepend (&ctx->events.clients, client);
+  ctx_queue_draw (ctx);
+}
+
+
+void ctx_client_iconify (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   client->flags |= ITK_CLIENT_ICONIFIED;
+   ctx_queue_draw (ctx);
+}
+
+int ctx_client_is_iconified (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return -1;
+   return (client->flags & ITK_CLIENT_ICONIFIED) != 0;
+}
+
+void ctx_client_uniconify (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   client->flags &= ~ITK_CLIENT_ICONIFIED;
+   ctx_queue_draw (ctx);
+}
+
+void ctx_client_maximize (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   if (!(client->flags &  ITK_CLIENT_MAXIMIZED))
+   {
+     client->flags |= ITK_CLIENT_MAXIMIZED;
+     client->unmaximized_x = client->x;
+     client->unmaximized_y = client->y;
+     client->unmaximized_width  = client->width;
+     client->unmaximized_height = client->height;
+     ctx_client_move (ctx, id, 0, ctx_client_min_y_pos (client->ctx));
+   }
+
+   // enforce_layout does the size
+   //client_resize (ctx, id, ctx_width (ctx), ctx_height(ctx) - ctx_client_min_y_pos (ctx));
+   
+   ctx->events.active = ctx->events.active_tab = client;
+   ctx_queue_draw (ctx);
+}
+
+int ctx_client_is_maximized (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return -1;
+   return (client->flags & ITK_CLIENT_MAXIMIZED) != 0;
+}
+
+void ctx_client_unmaximize (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   if ((client->flags & ITK_CLIENT_MAXIMIZED) == 0)
+     return;
+   client->flags &= ~ITK_CLIENT_MAXIMIZED;
+   ctx_client_resize (ctx, id, client->unmaximized_width, client->unmaximized_height);
+   ctx_client_move (ctx, id, client->unmaximized_x, client->unmaximized_y);
+   ctx->events.active_tab = NULL;
+   ctx_queue_draw (ctx);
+}
+
+void ctx_client_maximized_toggle (Ctx *ctx, int id)
+{
+  if (ctx_client_is_maximized (ctx, id))
+    ctx_client_unmaximize (ctx, id);
+  else
+    ctx_client_maximize (ctx, id);
+}
+
+
+void ctx_client_shade (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   client->flags |= ITK_CLIENT_SHADED;
+   ctx_queue_draw (ctx);
+}
+
+int ctx_client_is_shaded (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return -1;
+   return (client->flags & ITK_CLIENT_SHADED) != 0;
+}
+
+void ctx_client_unshade (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   client->flags &= ~ITK_CLIENT_SHADED;
+   ctx_queue_draw (ctx);
+}
+
+void ctx_client_toggle_maximized (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   if (ctx_client_is_maximized (ctx, id))
+     ctx_client_unmaximize (ctx, id);
+   else
+     ctx_client_maximize (ctx, id);
+}
+
+void ctx_client_shade_toggle (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client) return;
+   if (ctx_client_is_shaded (ctx, id))
+    ctx_client_shade (ctx, id);
+   else
+    ctx_client_unshade (ctx, id);
+}
+
+
+void ctx_client_paste (Ctx *ctx, int id, const char *str)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (client && client->vt)
+     vt_paste (client->vt, str);
+}
+
+char  *ctx_client_get_selection (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (client && client->vt)
+     return vt_get_selection (client->vt);
+   return ctx_strdup ("");
+}
+
+void ctx_client_move (Ctx *ctx, int id, int x, int y)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (client && (client->x != x || client->y != y))
+   {
+     client->x = x;
+     client->y = y;
+     ctx_client_rev_inc (client);
+     ctx_queue_draw (ctx);
+   }
+}
+
+void ctx_client_set_font_size (Ctx *ctx, int id, float font_size)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (client->vt)
+   {
+     if (vt_get_font_size (client->vt) != font_size)
+       vt_set_font_size (client->vt, font_size);
+     ctx_queue_draw (ctx);
+   }
+}
+
+float ctx_client_get_font_size (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (client->vt)
+     return vt_get_font_size (client->vt);
+   return 14.0;
+}
+
+void ctx_client_set_opacity (Ctx *ctx, int id, float opacity)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client)
+     return;
+   if (opacity > 0.98) opacity = 1.0f;
+   client->opacity = opacity;
+   ctx_queue_draw (ctx);
+}
+
+float ctx_client_get_opacity (Ctx *ctx, int id)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+   if (!client)
+     return 1.0f;
+   return client->opacity;
+}
+
+int ctx_client_resize (Ctx *ctx, int id, int width, int height)
+{
+   CtxClient *client = ctx_client_by_id (ctx, id);
+
+   if (client && ((height != client->height) || (width != client->width) ))
+   {
+     client->width  = width;
+     client->height = height;
+     if (client->vt)
+       vt_set_px_size (client->vt, width, height);
+     ctx_queue_draw (ctx);
+     return 1;
+   }
+   return 0;
+}
+
+static void ctx_client_titlebar_drag (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+
+  if (event->type == CTX_DRAG_RELEASE)
+  {
+    static int prev_drag_end_time = 0;
+    if (event->time - prev_drag_end_time < 500)
+    {
+      //client_shade_toggle (ctx, client->id);
+      ctx_client_maximized_toggle (event->ctx, client->id);
+    }
+    prev_drag_end_time = event->time;
+  }
+
+  float new_x = client->x +  event->delta_x;
+  float new_y = client->y +  event->delta_y;
+
+  float snap_threshold = 8;
+
+  if (ctx_backend_type (event->ctx) == CTX_BACKEND_TERM)
+     snap_threshold = 1;
+
+  if (new_y < ctx_client_min_y_pos (event->ctx)) new_y = ctx_client_min_y_pos (event->ctx);
+  if (new_y > ctx_client_max_y_pos (event->ctx)) new_y = ctx_client_max_y_pos (event->ctx);
+
+  if (fabs (new_x - 0) < snap_threshold) new_x = 0.0;
+  if (fabs (ctx_width (event->ctx) - (new_x + client->width)) < snap_threshold)
+       new_x = ctx_width (event->ctx) - client->width;
+
+  ctx_client_move (event->ctx, client->id, new_x, new_y);
+
+  event->stop_propagate = 1;
+}
+
+static float min_win_dim = 32;
+
+static void ctx_client_resize_se (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  int new_w = client->width + event->delta_x;
+  int new_h = client->height + event->delta_y;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, new_h);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_e (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  int new_w = client->width + event->delta_x;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, client->height);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_s (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  int new_h = client->height + event->delta_y;
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, client->width, new_h);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_n (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  float new_y = client->y +  event->delta_y;
+  int new_h = client->height - event->delta_y;
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, client->width, new_h);
+  ctx_client_move (event->ctx, client->id, client->x, new_y);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_ne (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  float new_y = client->y +  event->delta_y;
+  int new_h = client->height - event->delta_y;
+  int new_w = client->width + event->delta_x;
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, new_h);
+  ctx_client_move (event->ctx, client->id, client->x, new_y);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_sw (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+
+  float new_x = client->x +  event->delta_x;
+  int new_w = client->width - event->delta_x;
+  int new_h = client->height + event->delta_y;
+
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, new_h);
+  ctx_client_move (event->ctx, client->id, new_x, client->y);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_nw (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  float new_x = client->x +  event->delta_x;
+  float new_y = client->y +  event->delta_y;
+  int new_w = client->width - event->delta_x;
+  int new_h = client->height - event->delta_y;
+  if (new_h <= min_win_dim) new_h = min_win_dim;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, new_h);
+  ctx_client_move (event->ctx, client->id, new_x, new_y);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_resize_w (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+
+  float new_x = client->x +  event->delta_x;
+  int new_w = client->width - event->delta_x;
+  if (new_w <= min_win_dim) new_w = min_win_dim;
+  ctx_client_resize (event->ctx, client->id, new_w, client->height);
+  ctx_client_move (event->ctx, client->id, new_x, client->y);
+  ctx_client_rev_inc (client);
+  ctx_queue_draw (event->ctx);
+
+  event->stop_propagate = 1;
+}
+
+static void ctx_client_close (CtxEvent *event, void *data, void *data2)
+{
+  //Ctx *ctx = event->ctx;
+  CtxClient *client = data;
+
+ // client->do_quit = 1;
+  
+  ctx_client_remove (event->ctx, client);
+
+  ctx_queue_draw (event->ctx);
+  event->stop_propagate = 1;
+}
+
+/********************/
+void vt_use_images (VT *vt, Ctx *ctx);
+float _ctx_green = 0.5;
+
+static void ctx_client_draw (Ctx *ctx, CtxClient *client, float x, float y)
+{
+#if 0
+    if (client->tid)
+    {
+      ctx_save (ctx);
+      ctx_translate (ctx, x, y);
+      int width = client->width;
+      int height = client->height;
+      itk_panel_start (itk, "", 0, 0, width, height);
+      //itk_seperator (itk);
+#if 0
+      if (itk_button (itk, "add tab"))
+      {
+        add_tab (ctx_find_shell_command(), 1);
+      }
+#endif
+      //itk_sameline (itk);
+      on_screen_keyboard = itk_toggle (itk, "on screen keyboard", on_screen_keyboard);
+      focus_follow_mouse = itk_toggle (itk, "focus follows mouse", focus_follows_mouse);
+      itk_slider_float (itk, "CTX_GREEN", &_ctx_green, 0.0, 1.0, 0.5);
+      itk_ctx_settings (itk);
+      itk_itk_settings (itk);
+      itk_panel_end (itk);
+      itk_done (itk);
+      //itk_key_bindings (itk);
+      ctx_restore (ctx);
+    }
+    else
+#endif
+    {
+       ctx_client_lock (client);
+
+       int found = 0;
+       for (CtxList *l2 = ctx_clients (ctx); l2; l2 = l2->next)
+         if (l2->data == client) found = 1;
+       if (found)
+       {
+
+      int rev = ctx_client_rev (client);
+#if VT_RECORD
+      if (client->drawn_rev != rev)
+      {
+        if (!client->recording)
+          client->recording = _ctx_new_drawlist (client->width, client->height);
+        else
+          ctx_start_frame (client->recording);
+        vt_draw (client->vt, client->recording, 0.0, 0.0);
+      }
+
+      if (client->recording)
+      {
+        ctx_save (ctx);
+        ctx_translate (ctx, x, y);
+        if (client->opacity != 1.0f)
+        {
+          ctx_global_alpha (ctx, client->opacity);
+        }
+        ctx_render_ctx (client->recording, ctx);
+        vt_register_events (client->vt, ctx, 0.0, 0.0);
+        ctx_restore (ctx);
+      }
+#else
+      if (client->opacity != 1.0)
+      {
+        ctx_save (ctx);
+        ctx_global_alpha (ctx, client->opacity);
+      }
+      vt_draw (client->vt, ctx, x, y);
+      if (client->opacity != 1.0)
+      {
+        ctx_restore (ctx);
+      }
+      ctx_client_register_events (client, ctx, x, y);
+#endif
+      client->drawn_rev = rev;
+      ctx_client_unlock (client);
+      }
+    }
+}
+
+static void ctx_client_use_images (Ctx *ctx, CtxClient *client)
+{
+  if (!client->internal)
+  {
+      uint32_t rev = ctx_client_rev (client);
+#if VT_RECORD
+      if (client->drawn_rev != rev)
+      {
+        if (!client->recording)
+          client->recording = _ctx_new_drawlist (client->width, client->height);
+        else
+          ctx_start_frame (client->recording);
+        vt_draw (client->vt, client->recording, 0.0, 0.0);
+      }
+
+      if (client->recording)
+      {
+        ctx_save (ctx);
+        if (client->opacity != 1.0f)
+        {
+          ctx_global_alpha (ctx, client->opacity);
+        }
+        ctx_render_ctx_textures (client->recording, ctx);
+        ctx_restore (ctx);
+      }
+#else
+    if (client->vt)vt_use_images (client->vt, ctx);
+#endif
+    client->drawn_rev = rev;
+  }
+}
+
+void ctx_client_lock (CtxClient *client)
+{
+#if CTX_THREADS
+    mtx_lock (&client->mtx);
+#endif
+}
+
+void ctx_client_unlock (CtxClient *client)
+{
+#if CTX_THREADS
+    mtx_unlock (&client->mtx);
+#endif
+}
+
+
+CtxEvent *ctx_event_copy (CtxEvent *event)
+{
+  CtxEvent *copy = ctx_calloc (1, sizeof (CtxEvent));
+  *copy = *event;
+  if (copy->string) {
+    copy->string = ctx_strdup (copy->string);
+    copy->owns_string = 1;
+  }
+  return copy;
+}
+
+#if 0
+void ctx_client_handle_event (Ctx *ctx, CtxEvent *ctx_event, const char *event)
+{
+  if (!ctx->events.active)
+    return;
+  if (ctx->events.active->internal)
+    return;
+  VT *vt = ctx->events.active->vt;
+  CtxClient *client = vt_get_client (vt);
+
+  ctx_client_lock (client);
+
+  if (!strcmp (event, "F11"))
+  {
+#if CTX_SDL
+    if (ctx_backend_is_sdl (ctx))
+    {
+      ctx_sdl_set_fullscreen (ctx, !ctx_sdl_get_fullscreen (ctx));
+    }
+#endif
+  }
+  else if (!strcmp (event, "shift-return"))
+  {
+    vt_feed_keystring (vt, ctx_event, "return");
+  }
+  else if (!strcmp (event, "shift-control-v") )
+    {
+      char *text = ctx_get_clipboard (ctx);
+      if (text)
+        {
+          if (vt)
+            vt_paste (vt, text);
+          ctx_free (text);
+        }
+    }
+  else if (!strcmp (event, "shift-control-c") && vt)
+    {
+      char *text = vt_get_selection (vt);
+      if (text)
+        {
+          ctx_set_clipboard (ctx, text);
+          ctx_free (text);
+        }
+    }
+  else if (!strcmp (event, "shift-control-t") ||
+           ((ctx_backend_is_fb (ctx) || ctx_backend_is_term (ctx) || ctx_backend_is_kms (ctx))
+           &&   !strcmp (event, "control-t") ))
+  {
+    //XXX add_tab (ctx_find_shell_command(), 1);
+  }
+  else if (!strcmp (event, "shift-control-n") )
+    {
+      pid_t pid;
+      if ( (pid=fork() ) ==0)
+        {
+          unsetenv ("CTX_VERSION");
+         // execlp (execute_self, execute_self, NULL);
+          exit (0);
+        }
+    }
+
+#if 0
+  else if (!strcmp (event, "alt-1"))   switch_to_tab(0);
+  else if (!strcmp (event, "alt-2"))   switch_to_tab(1);
+  else if (!strcmp (event, "alt-3"))   switch_to_tab(2);
+  else if (!strcmp (event, "alt-4"))   switch_to_tab(3);
+  else if (!strcmp (event, "alt-5"))   switch_to_tab(4);
+  else if (!strcmp (event, "alt-6"))   switch_to_tab(5);
+  else if (!strcmp (event, "alt-7"))   switch_to_tab(6);
+  else if (!strcmp (event, "alt-8"))   switch_to_tab(7);
+  else if (!strcmp (event, "alt-9"))   switch_to_tab(8);
+  else if (!strcmp (event, "alt-0"))   switch_to_tab(9);
+#endif
+  else if (!strcmp (event, "shift-control-q") )
+    {
+      ctx_quit (ctx);
+    }
+  else if (!strcmp (event, "shift-control-w") )
+    {
+      ctx->events.active->do_quit = 1;
+    }
+  else if (!strcmp (event, "shift-control-s") )
+    {
+      if (vt)
+      {
+        char *sel = vt_get_selection (vt);
+        if (sel)
+        {
+          vt_feed_keystring (vt, ctx_event, sel);
+          ctx_free (sel);
+        }
+      }
+    }
+  else
+    {
+      if (vt)
+        vt_feed_keystring (vt, ctx_event, event);
+    }
+  ctx_client_unlock (client);
+}
+#endif
+
+static int ctx_clients_dirty_count (Ctx *ctx)
+{
+  int changes = 0;
+  for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if ((client->drawn_rev != ctx_client_rev (client) ) ||
+        vt_has_blink (client->vt))
+      changes++;
+  }
+  return changes;
+}
+
+static void ctx_client_titlebar_drag_maximized (CtxEvent *event, void *data, void *data2)
+{
+  CtxClient *client = data;
+  Ctx *ctx = event->ctx;
+  ctx->events.active = ctx->events.active_tab = client;
+  if (event->type == CTX_DRAG_RELEASE)
+  {
+    static int prev_drag_end_time = 0;
+    if (event->time - prev_drag_end_time < 500)
+    {
+      //client_shade_toggle (ctx, client->id);
+      ctx_client_unmaximize (ctx, client->id);
+      ctx_client_raise_top (ctx, client->id);
+      ctx->events.active_tab = NULL;
+    }
+    prev_drag_end_time = event->time;
+  }
+  ctx_queue_draw (event->ctx);
+  ctx_client_rev_inc (client);
+  event->stop_propagate = 1;
+}
+
+float ctx_client_min_y_pos (Ctx *ctx)
+{
+  return _ctx_font_size * 2; // a titlebar and a panel
+}
+
+float ctx_client_max_y_pos (Ctx *ctx)
+{
+  return ctx_height (ctx);
+}
+
+void ctx_client_titlebar_draw (Ctx *ctx, CtxClient *client,
+                               float x, float y, float width, float titlebar_height)
+{
+#if 0
+  ctx_move_to (ctx, x, y + height * 0.8);
+  if (client == ctx->events.active)
+    ctx_rgba (ctx, 1, 1,0.4, 1.0);
+  else
+    ctx_rgba (ctx, 1, 1,1, 0.8);
+  ctx_text (ctx, client->title);
+#else
+  ctx_rectangle (ctx, x, y - titlebar_height,
+                 width, titlebar_height);
+  if (client == ctx->events.active)
+     itk_style_color (ctx, "titlebar-focused-bg");
+  else
+     itk_style_color (ctx, "titlebar-bg");
+
+  if (flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED) || y == titlebar_height)
+  {
+    ctx_listen (ctx, CTX_DRAG, ctx_client_titlebar_drag_maximized, client, NULL);
+    ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_ALL);
+  }
+  else
+  {
+    ctx_listen (ctx, CTX_DRAG, ctx_client_titlebar_drag, client, NULL);
+    ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_ALL);
+  }
+  ctx_fill (ctx);
+  //ctx_font_size (ctx, itk->font_size);//titlebar_height);// * 0.85);
+
+  if (client == ctx->events.active &&
+      (flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED) || y != titlebar_height))
+#if 1
+  ctx_rectangle (ctx, x + width - titlebar_height,
+                  y - titlebar_height, titlebar_height,
+                  titlebar_height);
+#endif
+  ctx_rgb (ctx, 1, 0,0);
+  ctx_listen (ctx, CTX_PRESS, ctx_client_close, client, NULL);
+  ctx_listen_set_cursor (ctx, CTX_CURSOR_ARROW);
+  //ctx_fill (ctx);
+  ctx_begin_path (ctx);
+  ctx_move_to (ctx, x + width - titlebar_height * 0.8, y - titlebar_height * 0.22);
+  if (client == ctx->events.active)
+    itk_style_color (ctx, "titlebar-focused-close");
+  else
+    itk_style_color (ctx, "titlebar-close");
+  ctx_text (ctx, "X");
+
+  ctx_move_to (ctx, x +  width/2, y - titlebar_height * 0.22);
+  if (client == ctx->events.active)
+    itk_style_color (ctx, "titlebar-focused-fg");
+  else
+    itk_style_color (ctx, "titlebar-fg");
+
+  ctx_save (ctx);
+  ctx_text_align (ctx, CTX_TEXT_ALIGN_CENTER);
+  if (client->title)
+    ctx_text (ctx, client->title);
+  else
+    ctx_text (ctx, "untitled");
+  ctx_restore (ctx);
+#endif
+}
+
+#if 0
+static void key_down (CtxEvent *event, void *data1, void *data2)
+{
+  fprintf (stderr, "down %i %s\n", event->unicode, event->string);
+}
+static void key_up (CtxEvent *event, void *data1, void *data2)
+{
+  fprintf (stderr, "up %i %s\n", event->unicode, event->string);
+}
+static void key_press (CtxEvent *event, void *data1, void *data2)
+{
+  fprintf (stderr, "press %i %s\n", event->unicode, event->string);
+}
+#endif
+
+int ctx_clients_draw (Ctx *ctx, int layer2)
+{
+  CtxList *clients = ctx_clients (ctx);
+  _ctx_font_size = ctx_get_font_size (ctx);
+  float titlebar_height = _ctx_font_size;
+  int n_clients         = ctx_list_length (clients);
+
+  if (ctx->events.active && flag_is_set(ctx->events.active->flags, ITK_CLIENT_MAXIMIZED) && n_clients == 1)
+  {
+    ctx_client_draw (ctx, ctx->events.active, 0, 0);
+    return 0;
+  }
+  for (CtxList *l = clients; l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED))
+    {
+      if (client == ctx->events.active_tab)
+      {
+        ctx_client_draw (ctx, client, 0, titlebar_height);
+      }
+      else
+      {
+        ctx_client_use_images (ctx, client);
+      }
+    }
+  }
+
+  {
+  for (CtxList *l = clients; l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    VT *vt = client->vt;
+
+    if (layer2)
+    {
+      if (!flag_is_set (client->flags, ITK_CLIENT_LAYER2))
+        continue;
+    }
+    else
+    {
+      if (flag_is_set (client->flags, ITK_CLIENT_LAYER2))
+        continue;
+    }
+
+    if (vt && !flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED))
+    {
+      if (flag_is_set(client->flags, ITK_CLIENT_SHADED))
+      {
+        ctx_client_use_images (ctx, client);
+      }
+      else
+      {
+        ctx_client_draw (ctx, client, client->x, client->y);
+
+      // resize regions
+      if (client == ctx->events.active &&
+         !flag_is_set(client->flags, ITK_CLIENT_SHADED) &&
+         !flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED) &&
+         flag_is_set(client->flags, ITK_CLIENT_UI_RESIZABLE))
+      {
+        itk_style_color (ctx, "titlebar-focused-bg");
+
+        ctx_rectangle (ctx,
+                       client->x,
+                       client->y - titlebar_height * 2,
+                       client->width, titlebar_height);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_n, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_N);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x,
+                       client->y + client->height - titlebar_height,
+                       client->width, titlebar_height * 2);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_s, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_S);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x + client->width,
+                       client->y - titlebar_height,
+                       titlebar_height, client->height + titlebar_height);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_e, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_E);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x - titlebar_height,
+                       client->y - titlebar_height,
+                       titlebar_height, client->height + titlebar_height);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_w, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_W);
+        ctx_begin_path (ctx); 
+
+        ctx_rectangle (ctx,
+                       client->x + client->width - titlebar_height,
+                       client->y - titlebar_height * 2,
+                       titlebar_height * 2, titlebar_height * 2);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_ne, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_NE);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x - titlebar_height,
+                       client->y - titlebar_height * 2,
+                       titlebar_height * 2, titlebar_height * 2);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_nw, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_NW);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x - titlebar_height,
+                       client->y + client->height - titlebar_height,
+                       titlebar_height * 2, titlebar_height * 2);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_sw, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_SW);
+        ctx_begin_path (ctx);
+
+        ctx_rectangle (ctx,
+                       client->x + client->width - titlebar_height,
+                       client->y + client->height - titlebar_height,
+                       titlebar_height * 2, titlebar_height * 2);
+        ctx_listen (ctx, CTX_DRAG, ctx_client_resize_se, client, NULL);
+        ctx_listen_set_cursor (ctx, CTX_CURSOR_RESIZE_SE);
+        ctx_begin_path (ctx);
+
+      }
+
+      }
+
+      if (client->flags & ITK_CLIENT_TITLEBAR)
+        ctx_client_titlebar_draw (ctx, client, client->x, client->y, client->width, titlebar_height);
+    }
+  }
+  }
+  return 0;
+}
+
+extern int _ctx_enable_hash_cache;
+
+void vt_audio_task (VT *vt, int click);
+
+int ctx_input_pending (Ctx *ctx, int timeout);
+int ctx_clients_active (Ctx *ctx)
+{
+  if (ctx->events.active) return ctx->events.active->id;
+  return -1;
+}
+
+int ctx_clients_need_redraw (Ctx *ctx)
+{
+  int changes = 0;
+  int follow_mouse = focus_follows_mouse;
+      CtxList *to_remove = NULL;
+  ctx_clients_ensure_layout (ctx);
+
+//  if (print_shape_cache_rate)
+//    fprintf (stderr, "\r%f ", ctx_shape_cache_rate);
+
+   CtxClient *client = find_active (ctx, ctx_pointer_x (ctx),
+                                    ctx_pointer_y (ctx));
+
+   if (follow_mouse || ctx_pointer_is_down (ctx, 0) ||
+       ctx_pointer_is_down (ctx, 1) || (ctx->events.active==NULL))
+   {
+        if (client)
+        {
+          if (ctx->events.active != client)
+          {
+            ctx->events.active = client;
+            if (follow_mouse == 0 ||
+                (ctx_pointer_is_down (ctx, 0) ||
+                 ctx_pointer_is_down (ctx, 1)))
+            {
+              //if (client != clients->data)
+       #if 1
+              if ((client->flags & ITK_CLIENT_MAXIMIZED)==0)
+              {
+                ctx_list_remove (&ctx->events.clients, client);
+                ctx_list_append (&ctx->events.clients, client);
+              }
+#endif
+            }
+            changes ++;
+          }
+        }
+   }
+
+   for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+   {
+     CtxClient *client = l->data;
+     if (client->vt)
+       {
+         if (vt_is_done (client->vt))
+         {
+           if ((client->flags & ITK_CLIENT_KEEP_ALIVE))
+           {
+             client->flags |= ITK_CLIENT_FINISHED;
+           }
+           else
+           {
+             ctx_list_prepend (&to_remove, client);
+           }
+         }
+       }
+   }
+   while (to_remove)
+   {
+     changes++;
+     ctx_client_remove (ctx, to_remove->data);
+     ctx_list_remove (&to_remove, to_remove->data);
+   }
+
+   changes += ctx_clients_dirty_count (ctx);
+   return changes != 0;
+}
+float ctx_avg_bytespeed = 0.0;
+
+int ctx_clients_tab_to_id (Ctx *ctx, int tab_no)
+{
+  CtxList *clients = ctx_clients (ctx);
+  int no = 0;
+  for (CtxList *l = clients; l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (flag_is_set(client->flags, ITK_CLIENT_MAXIMIZED))
+    {
+      if (no == tab_no)
+        return client->id;
+      no++;
+    }
+  }
+  return -1;
+}
+
+CtxList *ctx_clients (Ctx *ctx)
+{
+  return ctx?ctx->events.clients:NULL;
+}
+
+#endif /* CTX_CLIENTS */
+
+int ctx_clients_handle_events (Ctx *ctx)
+{
+  //int n_clients = ctx_list_length (clients);
+#if CTX_CLIENTS
+  int pending_data = 0;
+  long time_start = ctx_ticks ();
+  int sleep_time = 1000000/ctx_target_fps;
+  pending_data += ctx_input_pending (ctx, sleep_time);
+
+  CtxList *clients = ctx_clients (ctx);
+  if (!clients)
+    return pending_data != 0;
+  ctx_fetched_bytes = 0;
+  if (pending_data)
+  {
+    if (!pending_data)pending_data = 1;
+    /* record amount of time spent - and adjust time of reading for
+     * vts?
+     */
+    //long int fractional_sleep = sleep_time / pending_data;
+    long int fractional_sleep = sleep_time * 0.75;
+    for (CtxList *l = clients; l; l = l->next)
+    {
+      CtxClient *client = l->data;
+      ctx_client_lock (client);
+      int found = 0;
+      for (CtxList *l2 = clients; l2; l2 = l2->next)
+        if (l2->data == client) found = 1;
+      if (!found)
+        goto done;
+      
+      ctx_fetched_bytes += vt_poll (client->vt, fractional_sleep);
+      //ctx_fetched_bytes += vt_poll (client->vt, sleep_time); //fractional_sleep);
+      ctx_client_unlock (client);
+    }
+done:
+    if(0){
+    }
+  }
+  else
+  {
+    for (CtxList *l = clients; l; l = l->next)
+    {
+      CtxClient *client = l->data;
+      vt_audio_task (client->vt, 0);
+    }
+  }
+
+  //int got_events = 0;
+
+  //while (ctx_get_event (ctx)) { }
+#if 0
+  if (changes /*|| pending_data */)
+  {
+    ctx_target_fps *= 1.6;
+    if (ctx_target_fps > 60) ctx_target_fps = 60;
+  }
+  else
+  {
+    ctx_target_fps = ctx_target_fps * 0.95 + 30.0 * 0.05;
+
+    // 20fps is the lowest where sun 8bit ulaw 8khz works reliably
+  }
+
+  if (ctx_avg_bytespeed > 1024 * 1024) ctx_target_fps = 10.0;
+
+  if (_ctx_green < 0.4)
+    ctx_target_fps = 120.0;
+  else if (_ctx_green > 0.6)
+    ctx_target_fps = 25.0;
+
+  //ctx_target_fps = 30.0;
+#else
+  ctx_target_fps = 100.0; // need to be higher than vsync rate to hit vsync
+#endif
+
+  long time_end = ctx_ticks ();
+
+  int timed = (time_end-time_start);
+  float bytespeed = ctx_fetched_bytes / ((timed)/ (1000.0f * 1000.0f));
+
+  ctx_avg_bytespeed = bytespeed * 0.2 + ctx_avg_bytespeed * 0.8;
+#if 0
+  fprintf (stderr, "%.2fmb/s %i/%i  %.2f                    \r", ctx_avg_bytespeed/1024/1024, ctx_fetched_bytes, timed, ctx_target_fps);
+#endif
+
+#endif
+  return 0;
+}
+
+void ctx_client_rev_inc (CtxClient *client)
+{
+  if (client) client->rev++;
+}
+long ctx_client_rev (CtxClient *client)
+{
+  return client?client->rev:0;
+}
+
+void
+ctx_client_feed_keystring (CtxClient *client, CtxEvent *event, const char *str)
+{
+#if CTX_CLIENTS
+  if (!client || !client->vt) return;
+  vt_feed_keystring (client->vt, event, str);
+#endif
+}
+
+#if CTX_CLIENTS
+int ctx_client_id (CtxClient *client)
+{
+  return client?client->id:-1;
+}
+
+VT *ctx_client_vt (CtxClient *client)
+{
+  return client?client->vt:NULL;
+}
+
+void ctx_client_add_event (CtxClient *client, CtxEvent *event)
+{
+  ctx_list_append (&client->ctx_events, ctx_event_copy (event));
+}
+
+void ctx_client_quit (CtxClient *client)
+{
+   if (!client) return;
+  client->do_quit = 1;
+}
+
+int ctx_client_flags (CtxClient *client)
+{
+  return client?client->flags:0;
+}
+
+void *ctx_client_userdata (CtxClient *client)
+{
+  return client?client->user_data:NULL;
+}
+
+const char *ctx_client_title (CtxClient *client)
+{
+  return client?client->title:NULL;
+}
+
+CtxClient *ctx_client_find (Ctx *ctx, const char *label)
+{
+  for (CtxList *l = ctx_clients (ctx); l; l = l->next)
+  {
+    CtxClient *client = l->data;
+    if (client->user_data && !strcmp (client->user_data, label))
+    {
+      return client;
+    }
+  }
+  return NULL;
+}
+
+#endif
+/* a C tinyvg parser with minimal RAM requirement and geometry culling
+ * ability, (c) 2022 Øyvind Kolås, pippin@gimp.org
+ */
+
+
+#if CTX_TINYVG
+
+#ifndef CTX_TVG_STDIO
+#define CTX_TVG_STDIO     1
+#endif
+
+#if CTX_TVG_STDIO
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#endif
+
+
+typedef struct CtxTinyVGStyle
+{
+   uint8_t  type;
+   uint32_t idx0;
+   uint32_t idx1;
+   float    x0;
+   float    y0;
+   float    x1;
+   float    y1;
+} CtxTinyVGStyle;
+
+
+#define CTX_TVG_CACHE_SIZE  256
+
+typedef struct CtxTinyVG {
+   Ctx     *ctx;
+   uint32_t length;
+   uint32_t pos;
+
+#if CTX_TVG_STDIO
+   int      fd;
+   uint32_t fd_pos;
+#endif
+   uint8_t  _cache[CTX_TVG_CACHE_SIZE];
+   uint8_t  *cache;
+   uint32_t cache_length;
+   uint32_t cache_offset;
+
+   int      pal_pos; // position of palette in TVG
+   int      flags;
+   uint32_t width;
+   uint32_t height;
+   uint8_t  scale;
+   float    scale_factor;
+   uint8_t  val_type:2;
+   uint8_t  color_bytes:5;
+   uint16_t color_count;
+   uint8_t  error;
+   uint8_t *pal;
+
+   float    clipx0;
+   float    clipy0;
+   float    clipx1;
+   float    clipy1;
+
+   CtxTinyVGStyle fill;
+   CtxTinyVGStyle stroke;
+} CtxTinyVG;
+
+#define CTX_TVG_MAGIC0    0x72
+#define CTX_TVG_MAGIC1    0x56
+#define CTX_TVG_VERSION      1
+
+enum {
+  CTX_TVG_VALTYPE_U16=0,
+  CTX_TVG_VALTYPE_U8,
+  CTX_TVG_VALTYPE_U32
+};
+
+enum {
+  CTX_TVG_FLAT=0,
+  CTX_TVG_LGRAD,
+  CTX_TVG_RGRAD
+};
+
+enum {
+  CTX_TVG_END_DRAWING=0,
+  CTX_TVG_FILL_POLYGON,
+  CTX_TVG_FILL_RECTANGLES,
+  CTX_TVG_FILL_PATH,
+  CTX_TVG_DRAW_LINES,
+  CTX_TVG_DRAW_LINE_LOOP,
+  CTX_TVG_DRAW_LINE_STRIP,
+  CTX_TVG_DRAW_LINE_PATH,
+  CTX_TVG_OUTLINE_FILL_POLYGON,
+  CTX_TVG_OUTLINE_FILL_RECTANGLES,
+  CTX_TVG_OUTLINE_FILL_PATH
+};
+
+enum {
+  CTX_TVG_LINE_TO = 0,
+  CTX_TVG_HOR_TO,
+  CTX_TVG_VER_TO,
+  CTX_TVG_CURVE_TO,
+  CTX_TVG_ARC_CIRCLE,
+  CTX_TVG_ARC_ELLIPSE,
+  CTX_TVG_CLOSE_PATH,
+  CTX_TVG_QUAD_TO
+};
+
+/* bounds protected accesors */
+static inline void ctx_tvg_seek (CtxTinyVG *tvg, uint32_t pos)
+{
+  if (pos < tvg->length)
+  {
+    tvg->pos = pos;
+  }
+}
+
+#if CTX_TVG_STDIO
+static void ctx_tvg_init_fd (CtxTinyVG *tvg, Ctx *ctx, int fd, int flags)
+{
+  memset (tvg, 0, sizeof (CtxTinyVG));
+  tvg->fd = fd;
+  tvg->ctx = ctx;
+  tvg->length = lseek (fd, 0, SEEK_END);
+  lseek (fd, 0, SEEK_SET);
+  tvg->cache_offset = 900000000;
+  tvg->flags = flags;
+  tvg->cache = &tvg->_cache[0];
+  tvg->cache_length = CTX_TVG_CACHE_SIZE;
+}
+#endif
+
+static void ctx_tvg_init_data (CtxTinyVG *tvg, Ctx *ctx, void *data, int len, int flags)
+{
+  memset (tvg, 0, sizeof (CtxTinyVG));
+  tvg->ctx = ctx;
+  tvg->cache = data;
+  tvg->cache_length = len;
+  tvg->length = len;
+  tvg->cache_offset = 0;
+  tvg->flags = flags;
+}
+
+static inline int ctx_tvg_prime_cache (CtxTinyVG *tvg, uint32_t pos, int len)
+{
+#if CTX_TVG_STDIO
+  if (!tvg->fd)
+#endif
+  {
+    if (pos + len < tvg->length)
+      return 1;
+    return 0;
+  }
+#if CTX_TVG_STDIO
+  if (tvg->cache_offset < pos && tvg->cache_offset + CTX_TVG_CACHE_SIZE - 1 > pos+len)
+  {
+    return 1;
+  }
+  tvg->cache_offset = pos;
+
+  if (tvg->fd_pos != pos)
+  {
+    lseek (tvg->fd, pos, SEEK_SET);
+    tvg->fd_pos = pos;
+  }
+  read (tvg->fd, tvg->cache, CTX_TVG_CACHE_SIZE);
+  tvg->fd_pos += CTX_TVG_CACHE_SIZE;
+#endif
+  return 1;
+}
+
+static inline void ctx_tvg_memcpy (CtxTinyVG *tvg, void *dst, int pos, int len)
+{
+  if (ctx_tvg_prime_cache (tvg, pos, len))
+    memcpy (dst, &tvg->cache[pos-tvg->cache_offset], len);
+  else
+    memset (dst, 0, len);
+}
+
+#define CTX_TVG_DEFINE_ACCESOR(nick, type) \
+static inline type ctx_tvg_##nick (CtxTinyVG *tvg)\
+{ type ret;\
+  ctx_tvg_memcpy (tvg, &ret, tvg->pos, sizeof (type));\
+  tvg->pos += sizeof(type);\
+  return ret;\
+}
+
+CTX_TVG_DEFINE_ACCESOR(u8, uint8_t);
+CTX_TVG_DEFINE_ACCESOR(u16, uint16_t);
+CTX_TVG_DEFINE_ACCESOR(u32, uint32_t);
+CTX_TVG_DEFINE_ACCESOR(float, float);
+
+#undef CTX_TVG_DEFINE_ACCESSOR
+
+static inline uint8_t ctx_tvg_u6_u2 (CtxTinyVG *tvg, uint8_t *u2_ret)
+{
+  uint8_t ret = ctx_tvg_u8 (tvg);
+  *u2_ret = (ret >> 6) & 3;
+  return (ret & 63);
+}
+
+// XXX if this is inline the ESP32 fails with a compiler error
+//
+static int32_t ctx_tvg_val (CtxTinyVG *tvg)
+{
+  switch (tvg->val_type)
+  {
+    case CTX_TVG_VALTYPE_U16: return ctx_tvg_u16(tvg);
+    case CTX_TVG_VALTYPE_U8:  return ctx_tvg_u8(tvg);
+    case CTX_TVG_VALTYPE_U32: return ctx_tvg_u32(tvg);
+  }
+  return 0;
+}
+
+static inline float ctx_tvg_unit (CtxTinyVG *tvg)
+{
+  uint32_t rv = ctx_tvg_val(tvg);
+  return rv * tvg->scale_factor;
+}
+
+static inline uint32_t ctx_tvg_var (CtxTinyVG *tvg)
+{
+  uint32_t pos = 0, last, res = 0;
+  do {
+    last = ctx_tvg_u8(tvg);
+    res += ((last & 0x7f) << (7*pos));
+    pos++;
+  } while (last & 0x80);
+  return res;
+}
+
+#define CTX_TVG_MIN(a,b)  (((a)<(b))?(a):(b))
+#define CTX_TVG_MAX(a,b)  (((a)>(b))?(a):(b))
+
+static void
+ctx_tvg_segment (CtxTinyVG *tvg, int n_commands)
+{
+  Ctx *ctx = tvg->ctx;
+
+  if (tvg->flags & CTX_TVG_FLAG_BBOX_CHECK)
+  {
+      float minx = 1000000.0f;
+      float miny = 1000000.0f;
+      float maxx = -1000000.0f;
+      float maxy = -1000000.0f;
+      int start_pos = tvg->pos;
+  
+      float x = ctx_tvg_unit(tvg);
+      float y = ctx_tvg_unit(tvg);
+  
+  #define ADD_COORD(x,y)\
+    minx = CTX_TVG_MIN (minx, x);\
+    miny = CTX_TVG_MIN (miny, y);\
+    maxx = CTX_TVG_MAX (maxx, x);\
+    maxy = CTX_TVG_MAX (maxy, y);\
+  
+    ADD_COORD(x,y);
+  
+    for (int i = 0; i < n_commands; i++)
+    {
+       int kind = ctx_tvg_u8(tvg);
+       int has_line_width = (kind & ~0x7) !=0;
+       kind = kind & 0x7;
+  
+       if (has_line_width)
+       {
+          float new_line_width = ctx_tvg_unit (tvg);
+          //printf ("with new line width! %f\n", new_line_width);
+          ctx_line_width (ctx, new_line_width);
+       }
+       switch (kind)
+       {
+         case CTX_TVG_LINE_TO:
+           x = ctx_tvg_unit(tvg);
+           y = ctx_tvg_unit(tvg);
+           ADD_COORD(x,y);
+           break;
+         case CTX_TVG_HOR_TO:
+           x = ctx_tvg_unit(tvg);
+           ADD_COORD(x,y);
+           break;
+         case CTX_TVG_VER_TO:
+           y = ctx_tvg_unit(tvg);
+           ADD_COORD(x,y);
+           break;
+         case CTX_TVG_CURVE_TO:
+           {
+             float cx0 = ctx_tvg_unit(tvg);
+             float cy0 = ctx_tvg_unit(tvg);
+             float cx1 = ctx_tvg_unit(tvg);
+             float cy1 = ctx_tvg_unit(tvg);
+                   x   = ctx_tvg_unit(tvg);
+                   y   = ctx_tvg_unit(tvg);
+             if (cx0 + cy0 + cx1 + cy1 != 0.f){}
+             ADD_COORD(x,y);
+           }
+           break;
+         case CTX_TVG_ARC_CIRCLE:
+           { // XXX NYI XXX
+             uint8_t large_and_sweep = ctx_tvg_u8 (tvg);
+             float   radius = ctx_tvg_unit (tvg);
+                     x = ctx_tvg_unit (tvg);
+                     y = ctx_tvg_unit (tvg);
+             if (radius != 0.0f && large_and_sweep != 0){};
+             ADD_COORD(x,y);
+           }
+           break;
+         case CTX_TVG_ARC_ELLIPSE:
+           { // XXX NYI XXX
+             uint8_t large_and_sweep = ctx_tvg_u8 (tvg);
+             float rx       = ctx_tvg_unit (tvg);
+             float ry       = ctx_tvg_unit (tvg);
+             float rotation = ctx_tvg_unit (tvg);
+                   x        = ctx_tvg_unit (tvg);
+                   y        = ctx_tvg_unit (tvg);
+             if (rotation !=0.0f && rx != 0.0f && ry !=0.0f && large_and_sweep) {};
+             ADD_COORD(x,y);
+           }
+           break;
+         case CTX_TVG_CLOSE_PATH:
+  //       ctx_close_path (ctx);
+           break;
+         case CTX_TVG_QUAD_TO:
+           {
+             float cx0 = ctx_tvg_unit(tvg);
+             float cy0 = ctx_tvg_unit(tvg);
+             if (cx0 + cy0 != 0.0f){}
+             x = ctx_tvg_unit(tvg);
+             y = ctx_tvg_unit(tvg);
+             ADD_COORD(x,y);
+           }
+           break;
+         default:
+           tvg->error = 1;
+       }
+    }
+  
+      if (minx > tvg->clipx1) return;
+      if (miny > tvg->clipy1) return;
+      if (maxx < tvg->clipx0) return;
+      if (maxy < tvg->clipy0) return;
+  
+      ctx_tvg_seek (tvg,start_pos);
+  }
+
+  {
+  float x = ctx_tvg_unit(tvg);
+  float y = ctx_tvg_unit(tvg);
+  ctx_move_to (ctx, x, y);
+
+  for (int i = 0; i < n_commands; i++)
+  {
+     int kind = ctx_tvg_u8(tvg);
+     int has_line_width = (kind & ~0x7) !=0;
+     kind = kind & 0x7;
+
+     if (has_line_width)
+     {
+       float new_line_width = ctx_tvg_unit (tvg);
+       //printf ("with new line width! %f\n", new_line_width);
+       ctx_line_width (ctx, new_line_width);
+     }
+     switch (kind)
+     {
+       case CTX_TVG_LINE_TO:
+         x = ctx_tvg_unit(tvg);
+         y = ctx_tvg_unit(tvg);
+         ctx_line_to (ctx, x, y);
+         break;
+       case CTX_TVG_HOR_TO:
+         x = ctx_tvg_unit(tvg);
+         ctx_line_to (ctx, x, y);
+         break;
+       case CTX_TVG_VER_TO:
+         y = ctx_tvg_unit(tvg);
+         ctx_line_to (ctx, x, y);
+         break;
+       case CTX_TVG_CURVE_TO:
+         {
+           float cx0 = ctx_tvg_unit(tvg);
+           float cy0 = ctx_tvg_unit(tvg);
+           float cx1 = ctx_tvg_unit(tvg);
+           float cy1 = ctx_tvg_unit(tvg);
+                 x   = ctx_tvg_unit(tvg);
+                 y   = ctx_tvg_unit(tvg);
+           ctx_curve_to (ctx, cx0, cy0, cx1, cy1, x, y);
+         }
+         break;
+       case CTX_TVG_ARC_CIRCLE:
+         { 
+           uint8_t large_and_sweep = ctx_tvg_u8 (tvg);
+           uint8_t large = ((large_and_sweep & 1) == 1);
+           uint8_t sweep = ((large_and_sweep & 2) == 2);
+           float   radius = ctx_tvg_unit (tvg);
+                   x = ctx_tvg_unit (tvg);
+                   y = ctx_tvg_unit (tvg);
+           ctx_svg_arc_to (ctx, radius, radius, 0.0f, large, !sweep, x, y);
+         }
+         break;
+       case CTX_TVG_ARC_ELLIPSE:
+         {
+           uint8_t large_and_sweep = ctx_tvg_u8 (tvg);
+           uint8_t large = ((large_and_sweep & 1) == 1);
+           uint8_t sweep = ((large_and_sweep & 2) == 2);
+           float rx       = ctx_tvg_unit (tvg);
+           float ry       = ctx_tvg_unit (tvg);
+           float rotation = ctx_tvg_unit (tvg);
+                 x        = ctx_tvg_unit (tvg);
+                 y        = ctx_tvg_unit (tvg);
+           ctx_svg_arc_to (ctx, rx, ry, rotation, large, !sweep, x, y);
+         }
+         break;
+       case CTX_TVG_CLOSE_PATH:
+         ctx_close_path (ctx);
+         break;
+       case CTX_TVG_QUAD_TO:
+         {
+           float cx0 = ctx_tvg_unit(tvg);
+           float cy0 = ctx_tvg_unit(tvg);
+           x = ctx_tvg_unit(tvg);
+           y = ctx_tvg_unit(tvg);
+           ctx_quad_to (ctx, cx0, cy0, x, y);
+         }
+         break;
+       default:
+         tvg->error = 1;
+     }
+  }
+  }
+}
+
+static void ctx_tvg_style (CtxTinyVG *tvg, int type,
+                           CtxTinyVGStyle *style)
+{
+  style->type = type;
+  switch (type)
+  {
+    case CTX_TVG_FLAT:
+      style->idx0 = ctx_tvg_var(tvg);
+      if (style->idx0 >= tvg->color_count) style->idx0 = 0;
+      break;
+    case CTX_TVG_LGRAD:
+    case CTX_TVG_RGRAD:
+      style->x0   = ctx_tvg_unit (tvg);
+      style->y0   = ctx_tvg_unit (tvg);
+      style->x1   = ctx_tvg_unit (tvg);
+      style->y1   = ctx_tvg_unit (tvg);
+      style->idx0 = ctx_tvg_var (tvg);
+      style->idx1 = ctx_tvg_var (tvg);
+      /*printf ("style:%f %f-%f %f   %i %i\n", 
+      style->x0   ,
+      style->y0   ,
+      style->x1   ,
+      style->y1   ,
+      style->idx0 ,
+      style->idx1 );
+      */
+      if (style->idx0 >= tvg->color_count) style->idx0 = 0;
+      if (style->idx1 >= tvg->color_count) style->idx1 = 0;
+      break;
+  }
+}
+
+static inline void
+ctx_tvg_get_color (CtxTinyVG *tvg, uint32_t idx,
+                   float *red, float *green, float *blue, float *alpha)
+{
+#if CTX_TVG_STDIO
+   if (tvg->fd && ((tvg->flags & CTX_TVG_FLAG_LOAD_PAL)==0))
+   {
+     int old_pos = tvg->pos;
+     switch (tvg->color_bytes)
+     {
+       default:
+       case 4: 
+         ctx_tvg_seek (tvg, tvg->pal_pos + 4 * idx);
+         *red   = ctx_tvg_u8 (tvg)/255.0f;
+         *green = ctx_tvg_u8 (tvg)/255.0f;
+         *blue  = ctx_tvg_u8 (tvg)/255.0f;
+         *alpha = ctx_tvg_u8 (tvg)/255.0f;
+         break;
+       case 2: 
+         {
+           ctx_tvg_seek (tvg, tvg->pal_pos + 2 * idx);
+           uint16_t val = ctx_tvg_u16 (tvg);
+           *red     = ((val >> 0) & 31) / 31.0f;
+           *green   = ((val >> 5) & 63) / 63.0f;
+           *blue    = ((val >> 11)& 31) / 31.0f;
+           *alpha   = 1.0f;
+         }
+         break;
+       case 16: 
+         ctx_tvg_seek (tvg, tvg->pal_pos + 16 * idx);
+         *red   = ctx_tvg_float (tvg);
+         *green = ctx_tvg_float (tvg);
+         *blue  = ctx_tvg_float (tvg);
+         *alpha = ctx_tvg_float (tvg);
+         break;
+      }
+      ctx_tvg_seek (tvg, old_pos);
+      return;
+   }
+#endif
+   switch (tvg->color_bytes)
+   {
+     default:
+     case 4: 
+         *red   = tvg->pal[4*idx+0]/255.0f;
+         *green = tvg->pal[4*idx+1]/255.0f;
+         *blue  = tvg->pal[4*idx+2]/255.0f;
+         *alpha = tvg->pal[4*idx+3]/255.0f;
+         break;
+     case 2: 
+         {
+           uint16_t val = ((uint16_t*)tvg->pal)[idx];
+           *red     = ((val >> 0) & 31) / 31.0f;
+           *green   = ((val >> 5) & 63) / 63.0f;
+           *blue    = ((val >> 11)& 31) / 31.0f;
+           *alpha   = 1.0f;
+         }
+         break;
+     case 16: 
+         *red   = ((float*)(tvg->pal))[4*idx+0];
+         *green = ((float*)(tvg->pal))[4*idx+1];
+         *blue  = ((float*)(tvg->pal))[4*idx+2];
+         *alpha = ((float*)(tvg->pal))[4*idx+3];
+         break;
+   }
+}
+
+static void ctx_tvg_set_style (CtxTinyVG *tvg, CtxTinyVGStyle *style)
+{
+  Ctx *ctx = tvg->ctx;
+  float x0 = style->x0, y0 = style->y0, x1 = style->x1, y1 = style->y1;
+  uint32_t idx0 = style->idx0, idx1 = style->idx1;
+  float red, green, blue, alpha;
+  switch (style->type)
+  {
+    case CTX_TVG_FLAT:
+      ctx_tvg_get_color (tvg, idx0, &red, &green, &blue, &alpha);
+      ctx_rgba (ctx, red, green, blue, alpha);
+      break;
+    case CTX_TVG_LGRAD:
+      ctx_linear_gradient (ctx, x0, y0, x1, y1);
+      ctx_tvg_get_color (tvg, idx0, &red, &green, &blue, &alpha);
+      ctx_gradient_add_stop (ctx, 0.0f, red, green, blue, alpha);
+      ctx_tvg_get_color (tvg, idx1, &red, &green, &blue, &alpha);
+      ctx_gradient_add_stop (ctx, 1.0f, red, green, blue, alpha);
+      break;
+    case CTX_TVG_RGRAD:
+      {
+        float radius = ctx_sqrtf ((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));
+        ctx_radial_gradient (ctx, x0, y0, 0.0f, x1, y1, radius);
+      }
+      ctx_tvg_get_color (tvg, idx0, &red, &green, &blue, &alpha);
+      ctx_gradient_add_stop (ctx, 0.0f, red, green, blue, alpha);
+      ctx_tvg_get_color (tvg, idx1, &red, &green, &blue, &alpha);
+      ctx_gradient_add_stop (ctx, 1.0f, red, green, blue, alpha);
+      break;
+  }
+}
+
+static void ctx_tvg_path (CtxTinyVG *tvg, int item_count)
+{
+   int segment_length[item_count];
+   for (int i = 0; i < item_count; i ++)
+     segment_length[i] = ctx_tvg_var(tvg) + 1;
+   for (int i = 0; i < item_count; i ++)
+     ctx_tvg_segment (tvg, segment_length[i]);
+}
+
+static void ctx_tvg_poly (CtxTinyVG *tvg, int item_count)
+{
+   Ctx *ctx = tvg->ctx;
+   for (int i = 0; i < item_count; i ++)
+   {
+     float x = ctx_tvg_unit (tvg);
+     float y = ctx_tvg_unit (tvg);
+     if (i)
+       ctx_line_to (ctx, x, y);
+     else
+       ctx_move_to (ctx, x, y);
+   }
+}
+
+static void ctx_tvg_rectangles (CtxTinyVG *tvg, int item_count,
+                                int fill, int stroke)
+{
+   Ctx *ctx = tvg->ctx;
+   for (int i = 0; i < item_count; i ++)
+   {
+     float x = ctx_tvg_unit (tvg);
+     float y = ctx_tvg_unit (tvg);
+     float w = ctx_tvg_unit (tvg);
+     float h = ctx_tvg_unit (tvg);
+   //  printf ("%f %f %f %f\n", x, y, w, h);
+     if (fill)
+     {
+       ctx_begin_path (ctx);
+       ctx_rectangle (ctx, x, y, w, h);
+       ctx_tvg_set_style (tvg, &tvg->fill);
+       ctx_fill (ctx);
+     }
+     if (stroke)
+     {
+       ctx_begin_path (ctx);
+       ctx_rectangle (ctx, x, y, w, h);
+       ctx_tvg_set_style (tvg, &tvg->stroke);
+       ctx_stroke (ctx);
+     }
+   }
+}
+
+static void ctx_tvg_lines (CtxTinyVG *tvg, int item_count)
+{
+   Ctx *ctx = tvg->ctx;
+   for (int i = 0; i < item_count; i ++)
+   {
+     float x0 = ctx_tvg_unit (tvg);
+     float y0 = ctx_tvg_unit (tvg);
+     float x1 = ctx_tvg_unit (tvg);
+     float y1 = ctx_tvg_unit (tvg);
+     ctx_move_to (ctx, x0, y0);
+     ctx_line_to (ctx, x1, y1);
+   }
+}
+
+static int ctx_tvg_command (CtxTinyVG *tvg)
+{
+  Ctx *ctx = tvg->ctx;
+  uint8_t primary_style_type;
+  float factor = ctx_matrix_get_scale (&ctx->state.gstate.transform);
+  int command = ctx_tvg_u6_u2(tvg, &primary_style_type);
+  int item_count;
+  float line_width = 0.0f;
+
+  int save_offset = 0;
+
+  switch (command)
+  {
+    case CTX_TVG_FILL_POLYGON:
+    case CTX_TVG_FILL_RECTANGLES:
+    case CTX_TVG_FILL_PATH:
+      item_count = ctx_tvg_var (tvg) + 1;
+      ctx_tvg_style (tvg, primary_style_type, &tvg->fill);
+      switch (command)
+      {
+        case CTX_TVG_FILL_POLYGON:
+           ctx_tvg_poly (tvg, item_count);
+           ctx_tvg_set_style (tvg, &tvg->fill);
+           ctx_fill (ctx);
+           break;
+        case CTX_TVG_FILL_RECTANGLES:
+           ctx_tvg_rectangles (tvg, item_count, 1, 0);
+           break;
+        case CTX_TVG_FILL_PATH:
+           ctx_tvg_path (tvg, item_count); 
+           ctx_tvg_set_style (tvg, &tvg->fill);
+           ctx_fill (ctx);
+           break;
+      }
+      break;
+
+    case CTX_TVG_DRAW_LINES:
+    case CTX_TVG_DRAW_LINE_LOOP:
+    case CTX_TVG_DRAW_LINE_STRIP:
+    case CTX_TVG_DRAW_LINE_PATH:
+      item_count = ctx_tvg_var (tvg) + 1;
+      ctx_tvg_style (tvg, primary_style_type, &tvg->stroke);
+      line_width = ctx_tvg_unit (tvg);
+
+      if (line_width * factor < 1.0f) line_width = 1.0f / factor;
+
+      if (command == CTX_TVG_DRAW_LINE_PATH)
+        ctx_tvg_path (tvg, item_count);
+      else if (command == CTX_TVG_DRAW_LINES)
+        ctx_tvg_lines (tvg, item_count);
+      else
+        ctx_tvg_poly (tvg, item_count);
+
+      if (command == CTX_TVG_DRAW_LINE_LOOP)
+        ctx_close_path (ctx);
+      ctx_tvg_set_style (tvg, &tvg->stroke);
+
+      ctx_line_width (ctx, line_width);
+      ctx_stroke (ctx);
+      break;
+
+    case CTX_TVG_OUTLINE_FILL_RECTANGLES:
+      item_count = ctx_tvg_u6_u2 (tvg, &tvg->stroke.type) + 1;
+      ctx_tvg_style (tvg, primary_style_type, &tvg->fill);
+      ctx_tvg_style (tvg, tvg->stroke.type, &tvg->stroke);
+      line_width = ctx_tvg_unit (tvg);
+
+      if (line_width * factor < 1.0f) line_width = 1.0f / factor;
+
+      ctx_line_width (ctx, line_width);
+      ctx_tvg_rectangles (tvg, item_count, 1, 1);
+      break;
+
+    case CTX_TVG_OUTLINE_FILL_POLYGON:
+    case CTX_TVG_OUTLINE_FILL_PATH:
+      item_count = ctx_tvg_u6_u2 (tvg, &tvg->stroke.type) + 1;
+      ctx_tvg_style (tvg, tvg->fill.type, &tvg->fill);
+      ctx_tvg_style (tvg, tvg->stroke.type, &tvg->stroke);
+      line_width = ctx_tvg_unit (tvg);
+
+      if (line_width * factor < 1.0f) line_width = 1.0f / factor;
+
+      save_offset = tvg->pos;
+      if (command == CTX_TVG_OUTLINE_FILL_POLYGON)
+        ctx_tvg_poly (tvg, item_count);
+      else
+        ctx_tvg_path (tvg, item_count);
+      ctx_tvg_set_style (tvg, &tvg->fill);
+      ctx_fill (ctx);
+
+      ctx_tvg_seek (tvg, save_offset);
+      if (command == CTX_TVG_OUTLINE_FILL_POLYGON)
+      {
+        ctx_tvg_poly (tvg, item_count);
+        ctx_close_path (ctx);
+      }
+      else
+        ctx_tvg_path (tvg, item_count);
+
+      if (line_width > 4) line_width =4;
+      ctx_line_width (ctx, line_width);
+      ctx_tvg_set_style (tvg, &tvg->stroke);
+      ctx_stroke (ctx);
+      break;
+    case CTX_TVG_END_DRAWING:
+      break;
+  }
+  return command;
+}
+
+int ctx_tvg_read_header (CtxTinyVG *tvg)
+{
+   ctx_tvg_seek (tvg, 0);
+   if (ctx_tvg_u8 (tvg) != CTX_TVG_MAGIC0) return -1;
+   if (ctx_tvg_u8 (tvg) != CTX_TVG_MAGIC1) return -1;
+   if (ctx_tvg_u8 (tvg) != CTX_TVG_VERSION) return -1;
+   {
+     uint8_t val         = ctx_tvg_u8(tvg);
+     tvg->scale          = (val>> 0) & 0xf;
+     tvg->color_bytes    = (val>> 4) & 0x3;
+     tvg->val_type       = (val>> 6) & 0x3;
+     tvg->scale_factor   = 1.0f/(1<<(tvg->scale));
+
+     switch (tvg->color_bytes)
+     {
+       case 0: tvg->color_bytes = 4; break;
+       case 1: tvg->color_bytes = 2; break;
+       case 2: tvg->color_bytes = 16; break;
+     }
+   }
+
+   tvg->width = ctx_tvg_val(tvg);
+   tvg->height = ctx_tvg_val(tvg);
+   return 0;
+}
+
+
+static int
+ctx_tvg_draw (CtxTinyVG *tvg)
+{
+   Ctx *ctx = tvg->ctx;
+
+   tvg->color_count = ctx_tvg_var (tvg);
+
+   tvg->pal_pos = tvg->pos;
+   if (tvg->flags & CTX_TVG_FLAG_LOAD_PAL)
+   {
+     int count = tvg->color_bytes * tvg->color_count;
+     tvg->pal = ctx_malloc (count);
+     for (int i = 0; i < count; i++)
+       tvg->pal[i] = ctx_tvg_u8 (tvg);
+   }
+   else 
+#if CTX_TVG_STDIO
+           if (!tvg->fd)
+#endif
+   {
+     tvg->pal = &tvg->cache[tvg->pos];
+     ctx_tvg_seek (tvg, tvg->pos + tvg->color_bytes * tvg->color_count);
+   }
+
+   ctx_save (ctx);
+   ctx_fill_rule (ctx, CTX_FILL_RULE_EVEN_ODD);
+   ctx_line_cap  (ctx, CTX_CAP_ROUND);
+
+   if (tvg->flags & CTX_TVG_FLAG_BBOX_CHECK)
+   {
+      float minx = 1000000.0f;
+      float miny = 1000000.0f;
+      float maxx = -1000000.0f;
+      float maxy = -1000000.0f;
+      float x, y;
+      x = 0; y =0;
+      ctx_device_to_user (ctx, &x, &y);
+      ADD_COORD(x,y);
+      x = ctx_width (ctx); y =0;
+      ctx_device_to_user (ctx, &x, &y);
+      ADD_COORD(x,y);
+      x = ctx_width (ctx); y = ctx_height (ctx);
+      ctx_device_to_user (ctx, &x, &y);
+      ADD_COORD(x,y);
+      x = 0; y = ctx_height (ctx);
+      ctx_device_to_user (ctx, &x, &y);
+      ADD_COORD(x,y);
+
+      //fprintf (stderr, "%f %f %f %f\n", minx, miny, maxx, maxy);
+      tvg->clipx0 = minx;
+      tvg->clipy0 = miny;
+      tvg->clipx1 = maxx;
+      tvg->clipy1 = maxy;
+   }
+
+   while (ctx_tvg_command (tvg));
+
+   ctx_restore (ctx);
+   if (tvg->flags & CTX_TVG_FLAG_LOAD_PAL)
+     ctx_free (tvg->pal);
+   return tvg->error;
+}
+
+#if 0
+static int
+ctx_tvg_draw2 (CtxTinyVG *tvg,
+               float x, float y,
+               float target_width,
+               float target_height)
+{
+   Ctx*ctx = tvg->ctx;
+   float scale_x = 1.0f;
+   float scale_y = 1.0f;
+   { /* handle aspect ratio, add translate ? */
+   if (target_width<=0 && target_height <= 0)
+   {
+     target_width  = tvg->width;
+     target_height = tvg->height;
+   }
+   else if (target_width<=0 && target_height > 0)
+   {
+     target_width = target_height / tvg->height * tvg->width;
+   }
+   else if (target_width<=0 && target_height > 0)
+   {
+     target_height = target_width / tvg->width * tvg->height;
+   }
+   scale_x = target_width / tvg->width;
+   scale_y = target_height / tvg->height;
+   if (scale_x > scale_y)
+     scale_x = scale_y;
+   else
+     scale_y = scale_x;
+   }
+
+   ctx_save (ctx);
+   ctx_translate (ctx, x, y);
+   ctx_scale (ctx, scale_x, scale_y);
+
+   ctx_tvg_draw (tvg);
+   ctx_restore (ctx);
+   return tvg->error;
+}
+#endif
+
+int
+ctx_tinyvg_get_size (uint8_t *data, int length, int *width, int *height)
+{
+   CtxTinyVG tvg;
+   ctx_tvg_init_data (&tvg, NULL, data, length, 0);
+   if (ctx_tvg_read_header (&tvg))
+     return -1;
+   if (width)*width = tvg.width;
+   if (height)*height = tvg.height;
+   return 0;
+}
+
+int
+ctx_tinyvg_fd_get_size (int fd, int *width, int *height)
+{
+#if CTX_TVG_STDIO
+   CtxTinyVG tvg;
+   ctx_tvg_init_fd (&tvg, NULL, fd, 0);
+   if (ctx_tvg_read_header (&tvg))
+     return -1;
+   if (width)*width = tvg.width;
+   if (height)*height = tvg.height;
+   return 0;
+#else
+   return -1;
+#endif
+}
+
+int ctx_tinyvg_draw (Ctx     *ctx,
+                     uint8_t *data, int length,
+                     int      flags)
+{
+   CtxTinyVG tvg;
+   ctx_tvg_init_data (&tvg, ctx, data, length, flags);
+   if (ctx_tvg_read_header (&tvg))
+     return -1;
+   return ctx_tvg_draw (&tvg);
+}
+
+int ctx_tinyvg_fd_draw (Ctx *ctx, int fd, int flags)
+{
+#if CTX_TVG_STDIO
+   CtxTinyVG tvg;
+   ctx_tvg_init_fd (&tvg, ctx, fd, flags);
+   if (ctx_tvg_read_header (&tvg))
+     return -1;
+   return ctx_tvg_draw (&tvg);
+#else
+   return -1;
+#endif
+}
+
+#endif
+
+#endif // CTX_IMPLEMENTATION
+#endif //  __CTX_H__
diff --git a/usermodule/uctx/uctx/micropython.cmake b/usermodule/uctx/uctx/micropython.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d89ff8286087503cf573b45ec6eb3a93ce9f9640
--- /dev/null
+++ b/usermodule/uctx/uctx/micropython.cmake
@@ -0,0 +1,12 @@
+add_library(usermod_ctx INTERFACE)
+
+target_sources(usermod_ctx INTERFACE
+    ${CMAKE_CURRENT_LIST_DIR}/uctx.c
+)
+
+target_include_directories(usermod_ctx INTERFACE
+    ${CMAKE_CURRENT_LIST_DIR}
+    ${CMAKE_CURRENT_LIST_DIR}/../fonts
+)
+
+target_link_libraries(usermod INTERFACE usermod_ctx)
diff --git a/usermodule/uctx/uctx/micropython.mk b/usermodule/uctx/uctx/micropython.mk
new file mode 100644
index 0000000000000000000000000000000000000000..c9c838e78e1f22da2d9614e506a7433d558b09ee
--- /dev/null
+++ b/usermodule/uctx/uctx/micropython.mk
@@ -0,0 +1,6 @@
+CTX_MOD_DIR := $(USERMOD_DIR)
+SRC_USERMOD += $(addprefix $(CTX_MOD_DIR)/, \
+	uctx.c \
+)
+CFLAGS_USERMOD += -I$(CTX_MOD_DIR) -DMODULE_CTX_ENABLED=1 -I$(CTX_MOD_DIR)/../fonts
+# CFLAGS_USERMOD += -DEXPOSE_EXTRA_METHODS=1
diff --git a/usermodule/uctx/uctx/uctx.c b/usermodule/uctx/uctx/uctx.c
new file mode 100644
index 0000000000000000000000000000000000000000..f31d7595e865966ab8021eaf9cfe4f3d414d0027
--- /dev/null
+++ b/usermodule/uctx/uctx/uctx.c
@@ -0,0 +1,1557 @@
+#pragma GCC optimize ("O3")
+
+#include <stdlib.h>
+#include "py/binary.h"
+#include "py/obj.h"
+#include "py/objarray.h"
+#include "py/runtime.h"
+
+#define CTX_TINYVG    1
+#define CTX_TVG_STDIO 0
+#define CTX_DITHER    1
+
+#define CTX_PDF                       0
+#define CTX_PROTOCOL_U8_COLOR         1
+#define CTX_AVOID_CLIPPED_SUBDIVISION 0
+#define CTX_LIMIT_FORMATS             1
+#define CTX_ENABLE_FLOAT              0
+#define CTX_32BIT_SEGMENTS            0
+#define CTX_ENABLE_RGBA8              1
+#define CTX_ENABLE_RGB332             1
+#define CTX_ENABLE_GRAY1              1
+#define CTX_ENABLE_GRAY2              1
+#define CTX_ENABLE_GRAY4              1
+#define CTX_ENABLE_RGB565             1
+#define CTX_ENABLE_RGB565_BYTESWAPPED 1
+#define CTX_ENABLE_CBRLE              0
+#define CTX_BITPACK_PACKER            0
+#define CTX_COMPOSITING_GROUPS        0
+#define CTX_RENDERSTREAM_STATIC       0
+#define CTX_GRADIENT_CACHE            1
+#define CTX_ENABLE_CLIP               1
+#define CTX_MIN_JOURNAL_SIZE        512  // grows dynamically
+#define CTX_MIN_EDGE_LIST_SIZE      512  // is also max and limits complexity
+                                         // of paths that can be filled
+#define CTX_STATIC_OPAQUE       1
+#define CTX_MAX_SCANLINE_LENGTH 512
+#define CTX_1BIT_CLIP           1
+
+#define CTX_MAX_DASHES          10
+#define CTX_MAX_GRADIENT_STOPS  10
+#define CTX_CM                  0
+#define CTX_SHAPE_CACHE         0
+#define CTX_SHAPE_CACHE_DEFAULT 0
+#define CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS 128
+#define CTX_NATIVE_GRAYA8       0
+#define CTX_ENABLE_SHADOW_BLUR  0
+#define CTX_FONTS_FROM_FILE     0
+#define CTX_MAX_KEYDB          16
+#define CTX_FRAGMENT_SPECIALIZE 1
+#define CTX_FAST_FILL_RECT      1
+#define CTX_MAX_TEXTURES        1
+#define CTX_PARSER_MAXLEN       512
+#define CTX_PARSER_FIXED_TEMP   1
+#define CTX_CURRENT_PATH        1
+#define CTX_BLENDING_AND_COMPOSITING 1
+#define CTX_STRINGPOOL_SIZE        256
+#define CTX_AUDIO                    0
+#define CTX_CLIENTS                  0
+
+#ifdef MICROPY_UNIX_MACHINE_IDLE
+
+  // we enable more for the unix port
+
+#include <threads.h>
+#define CTX_FB                     1
+#define CTX_THREADS                1
+#define CTX_TERMINAL_EVENTS        1 
+#define CTX_TILED                  1
+#define CTX_FORMATTER              1
+#define CTX_PARSER                 1
+#define CTX_MATH                   1
+#define CTX_RAW_KB_EVENTS          1
+#define CTX_BRAILLE_TEXT           0
+#else
+#define CTX_RAW_KB_EVENTS          0
+#define CTX_MATH                   0
+#define CTX_TERMINAL_EVENTS        0 // gets rid of posix bits and bobs
+#define CTX_THREADS                0
+#define CTX_TILED                  0
+#define CTX_FORMATTER              0  // we want these eventually
+#define CTX_PARSER                 0  // enabled
+#define CTX_BRAILLE_TEXT           0
+
+#define CTX_BAREMETAL              1
+#endif
+
+
+#define CTX_EVENTS                 1
+#define CTX_MAX_DEVICES            1
+#define CTX_MAX_KEYBINDINGS       16
+#define CTX_RASTERIZER             1
+#define CTX_MAX_STATES             5
+#define CTX_MAX_EDGES            127
+#define CTX_MAX_PENDING           64
+#define CTX_MAX_CBS                8
+#define CTX_MAX_LISTEN_FDS         1
+
+#define CTX_ONE_FONT_ENGINE        1
+/* we keep the ctx implementation here, this compilation taget changes less
+ * than the micropython target
+ */
+#define CTX_EXTERNAL_MALLOC
+
+static inline void *ctx_malloc (size_t size)
+{
+  return m_malloc (size);
+}
+
+static inline void *ctx_calloc (size_t nmemb, size_t size)
+{
+  size_t byte_size = nmemb * size;
+  char *ret        = (char *)m_malloc(byte_size);
+  for (size_t i = 0; i < byte_size; i++)
+    ret[i] = 0;
+  return ret;
+}
+
+static inline void *ctx_realloc (void *ptr, size_t old_size, size_t new_size)
+{
+#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
+  return m_realloc(ptr, old_size, new_size);
+#else
+  return m_realloc(ptr, new_size);
+#endif
+}
+
+static inline void ctx_free (void *ptr)
+{
+#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
+  return m_free(ptr, 0);  //  XXX  !
+#else
+  return m_free(ptr);
+#endif
+}
+
+#define CTX_STATIC_FONT(font) \
+  ctx_load_font_ctx(ctx_font_##font##_name, \
+                    ctx_font_##font,       \
+                    sizeof (ctx_font_##font))
+
+
+
+#define CTX_MAX_FONTS 10
+
+#if 0
+#include "Roboto-Regular.h"
+#include "Roboto-Bold.h"
+#include "Roboto-Italic.h"
+#include "Roboto-BoldItalic.h"
+#define CTX_FONT_0 CTX_STATIC_FONT(Roboto_Regular)
+#define CTX_FONT_1 CTX_STATIC_FONT(Roboto_Bold)
+#define CTX_FONT_2 CTX_STATIC_FONT(Roboto_Italic)
+//#define CTX_FONT_3 CTX_STATIC_FONT(Roboto_BoldItalic)
+#endif
+
+
+#if 1
+#include "Arimo-Regular.h"
+#include "Arimo-Bold.h"
+#include "Arimo-Italic.h"
+#include "Arimo-BoldItalic.h"
+#define CTX_FONT_0 CTX_STATIC_FONT(Arimo_Regular)
+#define CTX_FONT_1 CTX_STATIC_FONT(Arimo_Bold)
+#define CTX_FONT_2 CTX_STATIC_FONT(Arimo_Italic)
+#define CTX_FONT_3 CTX_STATIC_FONT(Arimo_BoldItalic)
+#endif
+
+#if 0
+#define CTX_FONT_4 CTX_STATIC_FONT(Roboto_Thin)
+#include "Roboto-Thin.h"
+#endif
+
+#if 0
+#include "Carlito-Regular.h"
+#include "Carlito-Bold.h"
+#include "Carlito-Italic.h"
+#include "Carlito-BoldItalic.h"
+#define CTX_FONT_5  CTX_STATIC_FONT(Carlito_Regular)
+#define CTX_FONT_6  CTX_STATIC_FONT(Carlito_Bold)
+#define CTX_FONT_7  CTX_STATIC_FONT(Carlito_Italic)
+#define CTX_FONT_8  CTX_STATIC_FONT(Carlito_BoldItalic)
+#endif
+
+
+#include "Tinos-Regular.h"
+#define CTX_FONT_13 CTX_STATIC_FONT(Tinos_Regular)
+//#include "Tinos-Bold.h"
+//#define CTX_FONT_14 CTX_STATIC_FONT(Tinos_Bold)
+
+#if 0
+#include "Tinos-Italic.h"
+#include "Tinos-BoldItalic.h"
+#define CTX_FONT_15 CTX_STATIC_FONT(Tinos_Italic)
+#define CTX_FONT_16 CTX_STATIC_FONT(Tinos_BoldItalic)
+#endif
+
+#if 0
+#include "Caladea-Regular.h"
+#include "Caladea-Bold.h"
+#include "Caladea-Italic.h"
+#define CTX_FONT_17 CTX_STATIC_FONT(Caladea_Regular)
+#define CTX_FONT_18 CTX_STATIC_FONT(Caladea_Bold)
+#define CTX_FONT_19 CTX_STATIC_FONT(Caladea_Italic)
+#if 0
+#include "Caladea-BoldItalic.h"
+#define CTX_FONT_20 CTX_STATIC_FONT(Caladea_BoldItalic)
+#endif
+#endif
+
+#if 1
+#include "Cousine-Regular.h"
+#include "Cousine-Bold.h"
+#define CTX_FONT_21 CTX_STATIC_FONT(Cousine_Regular)
+#define CTX_FONT_22 CTX_STATIC_FONT(Cousine_Bold)
+//#include "Cousine-Italic.h"
+//#include "Cousine-BoldItalic.h"
+//#define CTX_FONT_23 CTX_STATIC_FONT(Cousine_Italic)
+//#define CTX_FONT_24 CTX_STATIC_FONT(Cousine_BoldItalic)
+#endif
+
+#define CTX_IMPLEMENTATION
+#include "ctx.h"
+
+typedef struct _mp_ctx_event_obj_t mp_ctx_event_obj_t;
+typedef struct _mp_ctx_obj_t {
+	mp_obj_base_t base;
+	Ctx *ctx;
+	//mp_ctx_event_obj_t *ctx_event;
+	mp_obj_t            user_data;
+} mp_ctx_obj_t;
+
+void gc_collect(void);
+#ifdef EMSCRIPTEN
+extern int _mp_quit;
+void mp_idle (int ms);
+#else
+void mp_idle (int ms)
+{
+  if (ms == 0) gc_collect();
+}
+#endif
+
+void gc_collect(void);
+/* since a lot of the ctx API has similar function signatures, we use macros to
+ * avoid repeating the marshalling of arguments
+ */
+#define MP_CTX_COMMON_FUN_0(name)                                              \
+	static mp_obj_t mp_ctx_##name(mp_obj_t self_in)                        \
+	{                                                                      \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);                   \
+		ctx_##name(self->ctx);                                         \
+		return self_in;                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_1(mp_ctx_##name##_obj, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_0_idle(name)                                         \
+	static mp_obj_t mp_ctx_##name(mp_obj_t self_in)                        \
+	{                                                                      \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);                   \
+                gc_collect();\
+		ctx_##name(self->ctx);                                         \
+                mp_idle(0);\
+                while(ctx_get_event(self->ctx)){};\
+		return self_in;                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_1(mp_ctx_##name##_obj, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_1F(name)                                             \
+	static mp_obj_t mp_ctx_##name(mp_obj_t self_in, mp_obj_t arg1)         \
+	{                                                                      \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);                   \
+		ctx_##name(self->ctx, (float)mp_obj_get_float(arg1));          \
+		return self_in;                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_##name##_obj, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_1I(name)                                             \
+	static mp_obj_t mp_ctx_##name(mp_obj_t self_in, mp_obj_t arg1)         \
+	{                                                                      \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);                   \
+		ctx_##name(self->ctx, mp_obj_get_int(arg1));                   \
+		return self_in;                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_##name##_obj, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_2F(name)                                             \
+	static mp_obj_t mp_ctx_##name(                                         \
+		mp_obj_t self_in, mp_obj_t arg1, mp_obj_t arg2)                \
+	{                                                                      \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(arg1),                         \
+			(float)mp_obj_get_float(arg2));                        \
+		return self_in;                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_3(mp_ctx_##name##_obj, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_3F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 4);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]));                     \
+		return args[0];                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 4, 4, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_4F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 5);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]),                      \
+			(float)mp_obj_get_float(args[4]));                     \
+		return args[0];                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 5, 5, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_5F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 6);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]),                      \
+			(float)mp_obj_get_float(args[4]),                      \
+			(float)mp_obj_get_float(args[5]));                     \
+		return args[0];                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 6, 6, mp_ctx_##name);
+
+#define MP_CTX_COMMON_FUN_6F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 7);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]),                      \
+			(float)mp_obj_get_float(args[4]),                      \
+			(float)mp_obj_get_float(args[5]),                      \
+			(int)mp_obj_get_float(args[6]));                       \
+		return self;                                                   \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 7, 7, mp_ctx_##name);
+
+
+#define MP_CTX_COMMON_FUN_7F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 8);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]),                      \
+			(float)mp_obj_get_float(args[4]),                      \
+			(float)mp_obj_get_float(args[5]),                      \
+			(float)mp_obj_get_float(args[6]),                      \
+			(float)mp_obj_get_float(args[7]));                     \
+		return self;                                                   \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 8, 8, mp_ctx_##name);
+
+
+#define MP_CTX_COMMON_FUN_9F(name)                                             \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 10);                                          \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			(float)mp_obj_get_float(args[1]),                      \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]),                      \
+			(float)mp_obj_get_float(args[4]),                      \
+			(float)mp_obj_get_float(args[5]),                      \
+			(float)mp_obj_get_float(args[6]),                      \
+			(float)mp_obj_get_float(args[7]),                      \
+			(float)mp_obj_get_float(args[8]),                      \
+			(float)mp_obj_get_float(args[9]));                     \
+		return self;                                                   \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 10, 10, mp_ctx_##name);
+
+#define MP_CTX_TEXT_FUNB(name)                                                 \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 4);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			mp_obj_str_get_str(args[1]),                           \
+			(float)mp_obj_get_float(args[2]),                      \
+			(float)mp_obj_get_float(args[3]));                     \
+                return args[0];                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 4, 4, mp_ctx_##name);
+
+#define MP_CTX_TEXT_FUN(name)                                                  \
+	static mp_obj_t mp_ctx_##name(size_t n_args, const mp_obj_t *args)     \
+	{                                                                      \
+		assert(n_args == 2);                                           \
+		mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);                   \
+		ctx_##name(                                                    \
+			self->ctx,                                             \
+			mp_obj_str_get_str(args[1]));                          \
+                return args[0];                                                \
+	}                                                                      \
+	MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(                                   \
+		mp_ctx_##name##_obj, 2, 2, mp_ctx_##name);
+
+#define MP_CTX_ATTR(name) \
+       { MP_ROM_QSTR(MP_QSTR_##name), MP_ROM_INT(0) }
+#define MP_CTX_INT_CONSTANT_UNPREFIXED(ident)                                  \
+        {                                                                      \
+		MP_ROM_QSTR(MP_QSTR_##ident), MP_ROM_INT((int)CTX_##ident)     \
+	}
+#define MP_CTX_INT_CONSTANT(prefix, ident)                                     \
+	{                                                                      \
+		MP_ROM_QSTR(MP_QSTR_##ident), MP_ROM_INT((int)CTX_##prefix##_##ident)\
+	}
+#define MP_CTX_METHOD(name)                                                    \
+	{                                                                      \
+		MP_ROM_QSTR(MP_QSTR_##name), MP_ROM_PTR(&mp_ctx_##name##_obj)  \
+	}
+
+/* CTX API functions {{{ */
+
+MP_CTX_TEXT_FUN(text);
+#if CTX_PARSER
+MP_CTX_TEXT_FUN(parse);
+#endif
+
+MP_CTX_COMMON_FUN_0(begin_path);
+MP_CTX_COMMON_FUN_0(save);
+MP_CTX_COMMON_FUN_0(restore);
+
+MP_CTX_COMMON_FUN_0(consume_events);
+MP_CTX_COMMON_FUN_0(start_frame);
+MP_CTX_COMMON_FUN_0_idle(end_frame);
+
+MP_CTX_COMMON_FUN_0(start_group);
+MP_CTX_COMMON_FUN_0(end_group);
+MP_CTX_COMMON_FUN_0(clip);
+MP_CTX_COMMON_FUN_1F(rotate);
+MP_CTX_COMMON_FUN_2F(scale);
+MP_CTX_COMMON_FUN_2F(translate);
+MP_CTX_COMMON_FUN_9F(apply_transform);
+MP_CTX_COMMON_FUN_2F(line_to);
+MP_CTX_COMMON_FUN_2F(move_to);
+MP_CTX_COMMON_FUN_6F(curve_to);
+MP_CTX_COMMON_FUN_4F(quad_to);
+MP_CTX_COMMON_FUN_1F(gray);
+MP_CTX_COMMON_FUN_3F(rgb);
+MP_CTX_COMMON_FUN_4F(rgba);
+MP_CTX_COMMON_FUN_5F(arc_to);
+MP_CTX_COMMON_FUN_2F(rel_line_to);
+MP_CTX_COMMON_FUN_2F(rel_move_to);
+MP_CTX_COMMON_FUN_6F(rel_curve_to);
+MP_CTX_COMMON_FUN_4F(rel_quad_to);
+MP_CTX_COMMON_FUN_5F(rel_arc_to);
+MP_CTX_COMMON_FUN_4F(rectangle);
+MP_CTX_COMMON_FUN_5F(round_rectangle);
+MP_CTX_COMMON_FUN_6F(arc);
+MP_CTX_COMMON_FUN_0(close_path);
+
+MP_CTX_COMMON_FUN_0(preserve);
+MP_CTX_COMMON_FUN_0(fill);
+MP_CTX_COMMON_FUN_0(stroke);
+MP_CTX_COMMON_FUN_0(paint);
+
+MP_CTX_COMMON_FUN_4F(linear_gradient);
+MP_CTX_COMMON_FUN_6F(radial_gradient);
+
+MP_CTX_COMMON_FUN_3F(logo);
+
+static mp_obj_t mp_ctx_key_down(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_key_down (self->ctx,
+                mp_obj_get_int (args[1]), // keyval
+                mp_obj_str_get_str(args[2]), // string
+                mp_obj_get_int(args[3]));// time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_key_down_obj, 4, 4, mp_ctx_key_down);
+
+static mp_obj_t mp_ctx_incoming_message (size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_incoming_message (self->ctx,
+                mp_obj_str_get_str(args[1]), // string
+                mp_obj_get_int(args[2]));// time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_incoming_message_obj, 3, 3, mp_ctx_incoming_message);
+
+static mp_obj_t mp_ctx_key_up(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_key_up (self->ctx,
+                     mp_obj_get_int (args[1]), // keyval
+                     mp_obj_str_get_str(args[2]), // string
+                     mp_obj_get_int(args[3])); // time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_key_up_obj, 4, 4, mp_ctx_key_up);
+
+static mp_obj_t mp_ctx_key_press(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_key_press (self->ctx,
+                     mp_obj_get_int (args[1]), // keyval
+                     mp_obj_str_get_str(args[2]), // string
+                     mp_obj_get_int(args[3])); // time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_key_press_obj, 4, 4, mp_ctx_key_press);
+
+static mp_obj_t mp_ctx_scrolled(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_scrolled (self->ctx,
+                     (float)mp_obj_get_float(args[1]), // x
+                     (float)mp_obj_get_float(args[2]), // y
+                     mp_obj_get_int(args[3]), // scroll-direction
+                     mp_obj_get_int(args[4])); // time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_scrolled_obj, 5, 5, mp_ctx_scrolled);
+
+static mp_obj_t mp_ctx_pointer_press(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_pointer_press (self->ctx,
+                     (float)mp_obj_get_float(args[1]), // x
+                     (float)mp_obj_get_float(args[2]),  // y
+                     mp_obj_get_int(args[3]), // device-no
+                     mp_obj_get_int(args[4])); // time
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_pointer_press_obj, 5, 5, mp_ctx_pointer_press);
+
+static mp_obj_t mp_ctx_pointer_motion(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_pointer_motion(self->ctx,
+                     (float)mp_obj_get_float(args[1]),
+                     (float)mp_obj_get_float(args[2]),
+                     mp_obj_get_int(args[3]),
+                     mp_obj_get_int(args[4]));
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_pointer_motion_obj, 5, 5, mp_ctx_pointer_motion);
+
+static mp_obj_t mp_ctx_pointer_release(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_pointer_release(self->ctx,
+                     (float)mp_obj_get_float(args[1]),
+                     (float)mp_obj_get_float(args[2]),
+                     mp_obj_get_int(args[3]),
+                     mp_obj_get_int(args[4]));
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_pointer_release_obj, 5, 5, mp_ctx_pointer_release);
+
+#if 0
+static mp_obj_t mp_ctx_pointer_drop(size_t n_args, const mp_obj_t *args)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+  ctx_pointer_drop (self->ctx,
+                     mp_obj_get_float(args[1]),  // x
+                     mp_obj_get_float(args[2]),  // y
+                     mp_obj_get_int(args[3]),    // device_no
+                     mp_obj_get_int(args[4]),    // time
+                     (char*)mp_obj_str_get_str(args[5])); // string
+		return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_pointer_drop_obj, 6, 6, mp_ctx_pointer_drop);
+#endif
+
+static mp_obj_t mp_ctx_line_dash(mp_obj_t self_in, mp_obj_t dashes_in)
+{
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+
+	size_t count  = mp_obj_get_int(mp_obj_len(dashes_in));
+	float *dashes = m_malloc(sizeof(float) * count);
+	for (size_t i = 0; i < count; i++) {
+		dashes[i] = (float)mp_obj_get_float(mp_obj_subscr(
+			dashes_in, mp_obj_new_int(i), MP_OBJ_SENTINEL)
+		);
+	}
+
+	ctx_line_dash(self->ctx, dashes, count);
+
+#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
+	m_free(dashes, sizeof(float)*count);
+#else
+	m_free(dashes);
+#endif
+        return self_in;
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_line_dash_obj, mp_ctx_line_dash);
+
+
+static mp_obj_t mp_ctx_in_fill(mp_obj_t self_in, mp_obj_t arg1, mp_obj_t arg2)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+  return mp_obj_new_bool (ctx_in_fill (self->ctx,
+                                       (float)mp_obj_get_float(arg1),
+                                       (float)mp_obj_get_float(arg2)));
+}
+MP_DEFINE_CONST_FUN_OBJ_3(mp_ctx_in_fill_obj, mp_ctx_in_fill);
+
+static mp_obj_t mp_ctx_texture (size_t n_args, const mp_obj_t *args)
+{
+        mp_buffer_info_t buffer_info;
+	assert(n_args == 7);
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+
+        if (!mp_get_buffer(args[1], &buffer_info, MP_BUFFER_READ))
+        {
+           mp_raise_TypeError("not a buffer");
+        }
+        int format = mp_obj_get_int (args[2]);
+        int width  = mp_obj_get_int (args[3]);
+        int height = mp_obj_get_int (args[4]);
+        int stride = mp_obj_get_int (args[5]);
+        //static int eid_no = 0;
+        //char ieid[10]; // this is a workaround for the rasterizer
+                       // not keeping the cache validity expected
+                       // as we drive it
+                       // it also means we cannot properly use
+                       // eid based APIs
+        //sprintf (ieid, "%i", eid_no++);
+	ctx_define_texture (self->ctx,
+                        NULL, width, height, stride, format,
+                        buffer_info.buf, NULL);
+	return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_texture_obj, 6, 6, mp_ctx_texture);
+
+
+#if 0
+static mp_obj_t mp_ctx_font(mp_obj_t self_in, mp_obj_t font_in)
+{
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+	const char *font   = mp_obj_str_get_str(font_in);
+	ctx_font(self->ctx, font);
+        return self_in;
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_font_obj, mp_ctx_font);
+#endif
+
+static mp_obj_t mp_ctx_get_font_name (mp_obj_t self_in, mp_obj_t no_in)
+{
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+	int no = mp_obj_get_int (no_in);
+        const char *name = ctx_get_font_name (self->ctx, no);
+        if (name)
+          return mp_obj_new_str(name, strlen(name));
+	return mp_const_none;
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_get_font_name_obj, mp_ctx_get_font_name);
+
+
+static mp_obj_t mp_ctx_text_width(mp_obj_t self_in, mp_obj_t string_in)
+{
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+	const char *string = mp_obj_str_get_str(string_in);
+	return mp_obj_new_float(ctx_text_width(self->ctx, string));
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_text_width_obj, mp_ctx_text_width);
+
+static mp_obj_t mp_ctx_add_stop(size_t n_args, const mp_obj_t *args)
+{
+	mp_ctx_obj_t *self = MP_OBJ_TO_PTR(args[0]);
+	mp_obj_t color_in  = args[2];
+
+	float pos = (float)mp_obj_get_float(args[1]);
+
+	float alpha_f = 1.0f;
+	if (n_args == 4) {
+		alpha_f = (float)mp_obj_get_float(args[3]);
+	}
+	if (alpha_f < 0.0f || alpha_f > 1.0f) {
+		mp_raise_ValueError("alpha must be between 0.0 or 1.0");
+	}
+
+	mp_obj_t red_in, green_in, blue_in;
+	if (mp_obj_get_int(mp_obj_len(color_in)) < 3) {
+		mp_raise_ValueError("color must have 3 elements");
+	}
+	red_in   = mp_obj_subscr(color_in, mp_obj_new_int(0), MP_OBJ_SENTINEL);
+	green_in = mp_obj_subscr(color_in, mp_obj_new_int(1), MP_OBJ_SENTINEL);
+	blue_in  = mp_obj_subscr(color_in, mp_obj_new_int(2), MP_OBJ_SENTINEL);
+
+	/*
+	 * The color can be either floats between 0 and 1 or integers between 0
+	 * and 255.  Make this decision based on the first element we find.
+	 */
+	if (mp_obj_is_type(red_in, &mp_type_float)) {
+		float red, green, blue;
+		red   = (float)mp_obj_get_float(red_in);
+		green = (float)mp_obj_get_float(green_in);
+		blue  = (float)mp_obj_get_float(blue_in);
+
+		ctx_gradient_add_stop(
+			self->ctx, pos, red, green, blue, alpha_f
+		);
+	} else {
+		uint8_t red, green, blue, alpha;
+		red   = mp_obj_get_int(red_in);
+		green = mp_obj_get_int(green_in);
+		blue  = mp_obj_get_int(blue_in);
+
+		alpha = (int)(alpha_f * 255.0f);
+		ctx_gradient_add_stop_u8(
+			self->ctx, pos, red, green, blue, alpha
+		);
+	}
+
+        return args[0];
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_add_stop_obj, 3, 4, mp_ctx_add_stop);
+
+#ifdef EMSCRIPTEN
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#endif
+
+
+STATIC void generic_method_lookup(mp_obj_t obj, qstr attr, mp_obj_t *dest) {
+    const mp_obj_type_t *type = mp_obj_get_type(obj);
+    if (type->locals_dict != NULL) {
+         // generic method lookup
+         // this is a lookup in the object (ie not class or type)
+         assert(type->locals_dict->base.type == &mp_type_dict); // MicroPython restriction, for now
+         mp_map_t *locals_map = &type->locals_dict->map;
+         mp_map_elem_t *elem = mp_map_lookup(locals_map, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP);
+         if (elem != NULL) {
+             mp_convert_member_lookup(obj, type, elem->value, dest);
+         }
+    }
+}
+
+extern const mp_obj_type_t mp_ctx_event_type;
+struct _mp_ctx_event_obj_t {
+	mp_obj_base_t base;
+	CtxEvent  event;
+        mp_obj_t  user_data;
+	mp_obj_t  mp_ev;
+};
+
+
+static mp_obj_t mp_ctx_event_new (void)
+{
+	mp_ctx_event_obj_t *o = m_new_obj(mp_ctx_event_obj_t);
+	o->base.type    = &mp_ctx_event_type;
+	return MP_OBJ_FROM_PTR(o);
+}
+extern const mp_obj_type_t mp_ctx_type;
+
+/** CtxEvent **/
+
+STATIC mp_obj_t
+mp_ctx_event_attr_op (mp_obj_t self_in, qstr attr, mp_obj_t set_val)
+{
+  mp_ctx_event_obj_t *self = MP_OBJ_TO_PTR(self_in);       
+  if (set_val == MP_OBJ_NULL) {
+    switch (attr)
+    {
+      case MP_QSTR_ctx:     
+        {
+	mp_ctx_obj_t *o = m_new_obj(mp_ctx_obj_t);
+	o->base.type    = &mp_ctx_type;
+        o->ctx = self->event.ctx;
+	return MP_OBJ_FROM_PTR(o);
+        }
+      case MP_QSTR_x:         return mp_obj_new_float(self->event.x);
+      case MP_QSTR_y:         return mp_obj_new_float(self->event.y);
+      case MP_QSTR_device_x:  return mp_obj_new_float(self->event.device_x);
+      case MP_QSTR_device_y:  return mp_obj_new_float(self->event.device_y);
+      case MP_QSTR_start_x:   return mp_obj_new_float(self->event.start_x);
+      case MP_QSTR_start_y:   return mp_obj_new_float(self->event.start_y);
+      case MP_QSTR_prev_x:    return mp_obj_new_float(self->event.prev_x);
+      case MP_QSTR_prev_y:    return mp_obj_new_float(self->event.prev_y);
+      case MP_QSTR_delta_x:   return mp_obj_new_float(self->event.delta_x);
+      case MP_QSTR_delta_y:   return mp_obj_new_float(self->event.delta_y);
+      case MP_QSTR_device_no: return mp_obj_new_int(self->event.device_no);
+      case MP_QSTR_unicode:   return mp_obj_new_int(self->event.unicode);
+      case MP_QSTR_user_data: return self->user_data;
+      case MP_QSTR_scroll_direction:  return mp_obj_new_int(self->event.scroll_direction);
+      case MP_QSTR_time:      return mp_obj_new_int(self->event.time);
+      case MP_QSTR_modifier_state:   return mp_obj_new_int(self->event.state);
+      case MP_QSTR_string:    if (self->event.string)
+                                 // gambling on validity
+                                 return mp_obj_new_str(self->event.string, strlen(self->event.string));
+                              else
+                                 return mp_obj_new_str("", 0);
+    }
+  }
+  else
+  {
+     return set_val;
+  }
+  return self_in;
+}
+
+STATIC void mp_ctx_event_attr(mp_obj_t obj, qstr attr, mp_obj_t *dest) {
+
+    if(attr == MP_QSTR_x
+     ||attr == MP_QSTR_y
+     ||attr == MP_QSTR_ctx
+     ||attr == MP_QSTR_start_x
+     ||attr == MP_QSTR_start_y
+     ||attr == MP_QSTR_prev_x
+     ||attr == MP_QSTR_prev_y
+     ||attr == MP_QSTR_delta_x
+     ||attr == MP_QSTR_delta_y
+     ||attr == MP_QSTR_device_no
+     ||attr == MP_QSTR_unicode
+     ||attr == MP_QSTR_user_data
+     ||attr == MP_QSTR_scroll_direction
+     ||attr == MP_QSTR_time
+     ||attr == MP_QSTR_modifier_state
+     ||attr == MP_QSTR_string
+     ||attr == MP_QSTR_device_x
+     ||attr == MP_QSTR_device_y)
+    {
+        if (dest[0] == MP_OBJ_NULL) {
+            // load attribute
+            mp_obj_t val = mp_ctx_event_attr_op(obj, attr, MP_OBJ_NULL);
+            dest[0] = val;
+        } else {
+            // delete/store attribute
+            if (mp_ctx_event_attr_op(obj, attr, dest[1]) != MP_OBJ_NULL)
+                dest[0] = MP_OBJ_NULL; // indicate success
+        }
+    }
+    else {
+        // A method call
+        generic_method_lookup(obj, attr, dest);
+    }
+}
+
+static const mp_rom_map_elem_t mp_ctx_event_locals_dict_table[] = {
+       MP_CTX_ATTR(x),
+       MP_CTX_ATTR(y),
+       MP_CTX_ATTR(ctx),
+       MP_CTX_ATTR(device_x),
+       MP_CTX_ATTR(device_y),
+       MP_CTX_ATTR(start_x),
+       MP_CTX_ATTR(start_y),
+       MP_CTX_ATTR(prev_x),
+       MP_CTX_ATTR(prev_y),
+       MP_CTX_ATTR(delta_x),
+       MP_CTX_ATTR(delta_y),
+       MP_CTX_ATTR(device_no),
+       MP_CTX_ATTR(unicode),
+       MP_CTX_ATTR(user_data),
+       MP_CTX_ATTR(scroll_direction),
+       MP_CTX_ATTR(time),
+       MP_CTX_ATTR(modifier_state),
+       MP_CTX_ATTR(string)
+};
+static MP_DEFINE_CONST_DICT(mp_ctx_event_locals_dict, mp_ctx_event_locals_dict_table);
+
+static mp_obj_t mp_ctx_event_make_new(
+	const mp_obj_type_t *type,
+	size_t n_args,
+	size_t n_kw,
+	const mp_obj_t *args
+) {
+	mp_ctx_event_obj_t *o = m_new_obj(mp_ctx_event_obj_t);
+	o->base.type    = type;
+	return MP_OBJ_FROM_PTR(o);
+}
+
+
+const mp_obj_type_t mp_ctx_event_type = {
+	.base        = { &mp_type_type },
+	.name        = MP_QSTR_CtxEvent,
+	.make_new    = mp_ctx_event_make_new,
+	.locals_dict = (mp_obj_t)&mp_ctx_event_locals_dict,
+        .attr = mp_ctx_event_attr
+};
+
+static void mp_ctx_listen_cb_handler (CtxEvent *event, void *data1, void*data2)
+{
+  mp_obj_t event_in = data2;
+  mp_ctx_event_obj_t *mp_ctx_event = MP_OBJ_TO_PTR(event_in);
+  mp_ctx_event->event = *event; // XXX todo stop copying, make stop_propagate work
+  mp_call_function_1(data1, event_in);
+}
+
+static void mp_ctx_listen_cb_handler_stop_propagate (CtxEvent *event, void *data1, void*data2)
+{
+  mp_obj_t event_in = data2;
+  mp_ctx_event_obj_t *mp_ctx_event = MP_OBJ_TO_PTR(event_in);
+  mp_ctx_event->event = *event;
+  mp_call_function_1(data1, event_in);
+  event->stop_propagate = 1;
+}
+
+static mp_obj_t mp_ctx_listen (size_t n_args, const mp_obj_t *args)
+{
+  mp_obj_t self_in = args[0];
+  mp_obj_t event_mask = args[1];
+  mp_obj_t cb_in = args[2];
+  mp_obj_t user_data_in = n_args==4?args[3]:mp_const_none;
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+  if (cb_in != mp_const_none &&
+      !mp_obj_is_callable(cb_in))
+          mp_raise_ValueError(MP_ERROR_TEXT("invalid handler"));
+  mp_ctx_event_obj_t *ctx_event = mp_ctx_event_new ();
+  ctx_event->user_data = user_data_in;
+  ctx_listen (self->ctx,
+              mp_obj_get_int(event_mask),
+              mp_ctx_listen_cb_handler,
+              (cb_in), ctx_event);
+  return MP_OBJ_FROM_PTR(self);
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_listen_obj, 3, 4, mp_ctx_listen);
+
+static void mp_ctx_key_binding_cb_handler (CtxEvent *event, void *data1, void*data2)
+{
+  mp_ctx_event_obj_t *ctx_event = mp_ctx_event_new ();
+  //mp_ctx_event_obj_t *mp_ctx_event = MP_OBJ_TO_PTR(event_in);
+  ctx_event->event = *event;
+#if 0
+  mp_sched_schedule (data1, event_in);
+#else
+  mp_call_function_1(data1, ctx_event);
+#endif
+}
+
+static mp_obj_t mp_ctx_add_key_binding (size_t n_args, const mp_obj_t *args)
+{
+  mp_obj_t self_in    = args[0];
+  mp_obj_t key_in     = args[1];
+  mp_obj_t action_in  = args[2];
+  mp_obj_t label_in   = args[3];
+  mp_obj_t cb_in      = args[4];
+  //mp_obj_t user_data_in = args[5];
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+  if (cb_in != mp_const_none &&
+      !mp_obj_is_callable(cb_in))
+          mp_raise_ValueError(MP_ERROR_TEXT("invalid handler"));
+  ctx_add_key_binding (self->ctx,
+              mp_obj_str_get_str(key_in),
+              mp_obj_str_get_str(action_in),
+              mp_obj_str_get_str(label_in),
+              mp_ctx_key_binding_cb_handler,
+              (cb_in));//, ctx_event);
+  return MP_OBJ_FROM_PTR(self);
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_add_key_binding_obj, 5, 5, mp_ctx_add_key_binding);
+
+
+static mp_obj_t mp_ctx_listen_stop_propagate (size_t n_args, const mp_obj_t *args)
+{
+  mp_obj_t self_in = args[0];
+  mp_obj_t event_mask = args[1];
+  mp_obj_t cb_in = args[2];
+  mp_obj_t user_data_in = n_args==4?args[3]:mp_const_none;
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+  if (cb_in != mp_const_none &&
+      !mp_obj_is_callable(cb_in))
+          mp_raise_ValueError(MP_ERROR_TEXT("invalid handler"));
+  mp_ctx_event_obj_t *ctx_event = mp_ctx_event_new ();
+  ctx_event->user_data = user_data_in;
+  ctx_listen (self->ctx,
+              mp_obj_get_int(event_mask),
+              mp_ctx_listen_cb_handler_stop_propagate,
+              (cb_in), ctx_event);
+  return MP_OBJ_FROM_PTR(self);
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_ctx_listen_stop_propagate_obj, 3, 4, mp_ctx_listen_stop_propagate);
+
+
+
+#if CTX_TINYVG
+static mp_obj_t mp_ctx_tinyvg_get_size (mp_obj_t self_in, mp_obj_t buffer_in)
+{
+  mp_buffer_info_t buffer_info;
+  if (!mp_get_buffer(buffer_in, &buffer_info, MP_BUFFER_READ))
+  {
+     mp_raise_TypeError("not a buffer");
+  }
+  int width = 0, height = 0;
+  ctx_tinyvg_get_size (buffer_info.buf,
+                       buffer_info.len, &width, &height);
+  mp_obj_t mp_w  = MP_OBJ_NEW_SMALL_INT(width);
+  mp_obj_t mp_h  = MP_OBJ_NEW_SMALL_INT(height);
+  mp_obj_t tup[] = { mp_w, mp_h };
+  return mp_obj_new_tuple(2, tup);
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_tinyvg_get_size_obj, mp_ctx_tinyvg_get_size);
+
+static mp_obj_t mp_ctx_tinyvg_draw (mp_obj_t self_in, mp_obj_t buffer_in)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);
+  mp_buffer_info_t buffer_info;
+
+  if (!mp_get_buffer(buffer_in, &buffer_info, MP_BUFFER_READ))
+  {
+     mp_raise_TypeError("not a buffer");
+  }
+  ctx_tinyvg_draw (self->ctx,
+                   buffer_info.buf,
+                   buffer_info.len,
+                   0);
+  return self_in;
+}
+MP_DEFINE_CONST_FUN_OBJ_2(mp_ctx_tinyvg_draw_obj, mp_ctx_tinyvg_draw);
+#endif
+/* CTX API functions }}} */
+
+static void mp_ctx_set_pixels (Ctx *ctx, void *user_data,
+                               int x_in, int y_in, int width_in, int height_in, void *buf_in,
+                               int buf_size)
+{
+  mp_obj_t args[5] = {mp_obj_new_int (x_in),
+                      mp_obj_new_int (y_in),
+                      mp_obj_new_int (width_in),
+                      mp_obj_new_int (height_in),
+                  mp_obj_new_memoryview(BYTEARRAY_TYPECODE,
+                    buf_size, buf_in)};
+  mp_call_function_n_kw (user_data, 5, 0, args);
+}
+
+static int mp_ctx_update_fb (Ctx *ctx, void *user_data)
+{
+  mp_obj_t ret = mp_call_function_0(user_data);
+  if (mp_obj_is_true (ret)) return 1;
+  return 0;
+}
+
+static mp_obj_t mp_ctx_make_new(
+	const mp_obj_type_t *type,
+	size_t n_args,
+	size_t n_kw,
+	const mp_obj_t *all_args
+) {
+	mp_ctx_obj_t *o = m_new_obj(mp_ctx_obj_t);
+	o->base.type    = type;
+    enum { ARG_width, ARG_height, ARG_stride, ARG_format, ARG_buffer, ARG_memory_budget, ARG_flags,
+           ARG_set_pixels, ARG_update, ARG_userdata };
+    static const mp_arg_t allowed_args[] = {
+        { MP_QSTR_width,  MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+        { MP_QSTR_height, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+        { MP_QSTR_stride, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+        { MP_QSTR_format, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+        { MP_QSTR_buffer, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
+        { MP_QSTR_memory_budget, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 24 * 1024} },
+        { MP_QSTR_flags, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+        { MP_QSTR_set_pixels, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
+        { MP_QSTR_update, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
+        { MP_QSTR_userdata, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
+    };
+    mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
+    mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
+    int format = args[ARG_format].u_int;
+    int width = args[ARG_width].u_int;
+    int height = args[ARG_height].u_int;
+    int stride = args[ARG_stride].u_int;
+    int memory_budget = args[ARG_memory_budget].u_int;
+    int flags = args[ARG_flags].u_int;
+
+    if (args[ARG_set_pixels].u_obj != MP_OBJ_NULL)
+    {
+        mp_obj_t set_pixels_in = args[ARG_set_pixels].u_obj;
+        mp_obj_t update_fb_in = args[ARG_update].u_obj;
+
+        if (update_fb_in != mp_const_none &&
+          !mp_obj_is_callable(update_fb_in))
+             mp_raise_ValueError(MP_ERROR_TEXT("invalid update_fb handler"));
+
+        if (set_pixels_in != mp_const_none &&
+          !mp_obj_is_callable(set_pixels_in))
+             mp_raise_ValueError(MP_ERROR_TEXT("invalid set_pixels handler"));
+
+	o->ctx = ctx_new_cb (width, height, format,
+             mp_ctx_set_pixels, set_pixels_in,
+             update_fb_in != mp_const_none ? mp_ctx_update_fb : NULL, update_fb_in,
+             memory_budget,
+             NULL,
+             flags);
+	return MP_OBJ_FROM_PTR(o);
+    }
+
+    if (args[ARG_buffer].u_obj != MP_OBJ_NULL)
+    {
+        mp_buffer_info_t buffer_info;
+
+        if (!mp_get_buffer(args[ARG_buffer].u_obj, &buffer_info, MP_BUFFER_READ))
+        {
+           mp_raise_TypeError("not a buffer");
+        }
+	o->ctx = ctx_new_for_framebuffer (buffer_info.buf,
+                                          width, height, stride, format);
+	return MP_OBJ_FROM_PTR(o);
+    }
+
+#ifdef EMSCRIPTEN
+    o->ctx          = ctx_wasm_get_context(memory_budget);
+#else
+    o->ctx          = ctx_new (width, height, NULL);
+#endif
+    return MP_OBJ_FROM_PTR(o);
+}
+
+
+STATIC mp_obj_t
+mp_ctx_attr_op (mp_obj_t self_in, qstr attr, mp_obj_t set_val)
+{
+  mp_ctx_obj_t *self = MP_OBJ_TO_PTR(self_in);       
+  if (set_val == MP_OBJ_NULL) {
+    switch (attr)
+    {
+       case MP_QSTR_font:
+            {
+              const char *font = ctx_get_font (self->ctx);
+              return mp_obj_new_str(font, strlen(font));
+            }
+       case MP_QSTR_image_smoothing:
+            return mp_obj_new_int(ctx_get_image_smoothing (self->ctx));
+       case MP_QSTR_fill_rule:
+            return mp_obj_new_int(ctx_get_fill_rule (self->ctx));
+#if CTX_BLENDING_AND_COMPOSITING
+       case MP_QSTR_blend_mode:
+            return mp_obj_new_int(ctx_get_blend_mode (self->ctx));
+       case MP_QSTR_compositing_mode:
+            return mp_obj_new_int(ctx_get_compositing_mode (self->ctx));
+#endif
+       case MP_QSTR_flags:
+            return mp_obj_new_int(ctx_cb_get_flags (self->ctx));
+
+       case MP_QSTR_need_redraw:
+            return mp_obj_new_bool(ctx_need_redraw (self->ctx));
+
+       case MP_QSTR_line_cap:
+            return mp_obj_new_int(ctx_get_line_cap (self->ctx));
+       case MP_QSTR_line_join:
+            return mp_obj_new_int(ctx_get_line_join (self->ctx));
+       case MP_QSTR_text_align:
+            return mp_obj_new_int(ctx_get_text_align (self->ctx));
+       case MP_QSTR_text_baseline:
+            return mp_obj_new_int(ctx_get_text_baseline (self->ctx));
+       case MP_QSTR_font_size:
+            return mp_obj_new_float(ctx_get_font_size (self->ctx));
+       case MP_QSTR_line_width:
+            return mp_obj_new_float(ctx_get_line_width (self->ctx));
+       case MP_QSTR_line_dash_offset:
+            return mp_obj_new_float(ctx_get_line_dash_offset (self->ctx));
+       case MP_QSTR_line_height:
+            return mp_obj_new_float(ctx_get_line_height (self->ctx));
+       case MP_QSTR_wrap_left:
+            return mp_obj_new_float(ctx_get_wrap_left (self->ctx));
+       case MP_QSTR_wrap_right:
+            return mp_obj_new_float(ctx_get_wrap_right (self->ctx));
+       case MP_QSTR_miter_limit:
+            return mp_obj_new_float(ctx_get_miter_limit (self->ctx));
+       case MP_QSTR_global_alpha:
+            return mp_obj_new_float(ctx_get_global_alpha (self->ctx));
+       case MP_QSTR_width:
+            return mp_obj_new_int(ctx_width (self->ctx));
+       case MP_QSTR_height:
+            return mp_obj_new_int(ctx_height (self->ctx));
+       case MP_QSTR_x:
+            return mp_obj_new_float(ctx_x (self->ctx));
+       case MP_QSTR_y:
+            return mp_obj_new_float(ctx_y (self->ctx));
+    }
+  }
+  else
+  {
+    switch (attr)
+    {
+       case MP_QSTR_font:
+         ctx_font (self->ctx, mp_obj_str_get_str (set_val)); break;
+       case MP_QSTR_image_smoothing:
+         ctx_image_smoothing (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_fill_rule:
+         ctx_fill_rule (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_line_cap:
+         ctx_line_cap (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_flags:
+         ctx_cb_set_flags (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_need_redraw:
+         ctx_queue_draw (self->ctx); break;
+       case MP_QSTR_line_join:
+         ctx_line_join (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_text_align:
+         ctx_text_align (self->ctx, mp_obj_get_int (set_val)); break;
+#if CTX_BLENDING_AND_COMPOSITING
+       case MP_QSTR_blend_mode:
+         ctx_blend_mode (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_compositing_mode:
+         ctx_compositing_mode (self->ctx, mp_obj_get_int (set_val)); break;
+#endif
+       case MP_QSTR_text_baseline:
+         ctx_text_baseline (self->ctx, mp_obj_get_int (set_val)); break;
+       case MP_QSTR_line_width:
+         ctx_line_width (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_line_height:
+         ctx_line_height (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_wrap_left:
+         ctx_wrap_left (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_wrap_right:
+         ctx_wrap_right (self->ctx, (float)mp_obj_get_float (set_val)); break;
+
+       case MP_QSTR_line_dash_offset:
+         ctx_line_dash_offset (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_miter_limit:
+         ctx_miter_limit (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_global_alpha:
+         ctx_global_alpha (self->ctx, (float)mp_obj_get_float (set_val)); break;
+       case MP_QSTR_font_size:
+         ctx_font_size (self->ctx, (float)mp_obj_get_float (set_val)); break;
+    }
+    return set_val;
+  }
+  return self_in;
+}
+
+
+STATIC void mp_ctx_attr(mp_obj_t obj, qstr attr, mp_obj_t *dest) {
+
+    if(attr == MP_QSTR_width
+     ||attr == MP_QSTR_height
+     ||attr == MP_QSTR_font
+#if CTX_BLENDING_AND_COMPOSITING
+     ||attr == MP_QSTR_blend_mode
+     ||attr == MP_QSTR_compositing_mode
+#endif
+     ||attr == MP_QSTR_flags
+     ||attr == MP_QSTR_need_redraw
+     ||attr == MP_QSTR_line_cap
+     ||attr == MP_QSTR_line_join
+     ||attr == MP_QSTR_text_align
+     ||attr == MP_QSTR_fill_rule
+     ||attr == MP_QSTR_image_smoothing
+     ||attr == MP_QSTR_text_baseline
+     ||attr == MP_QSTR_line_width
+     ||attr == MP_QSTR_line_dash_offset
+     ||attr == MP_QSTR_line_height
+     ||attr == MP_QSTR_wrap_left
+     ||attr == MP_QSTR_wrap_right
+     ||attr == MP_QSTR_miter_limit
+     ||attr == MP_QSTR_global_alpha
+     ||attr == MP_QSTR_font_size
+     ||attr == MP_QSTR_font
+     ||attr == MP_QSTR_x
+     ||attr == MP_QSTR_y)
+    {
+        if (dest[0] == MP_OBJ_NULL) {
+            // load attribute
+            mp_obj_t val = mp_ctx_attr_op(obj, attr, MP_OBJ_NULL);
+            dest[0] = val;
+        } else {
+            // delete/store attribute
+            if (mp_ctx_attr_op(obj, attr, dest[1]) != MP_OBJ_NULL)
+                dest[0] = MP_OBJ_NULL; // indicate success
+        }
+    }
+    else {
+        // A method call
+        generic_method_lookup(obj, attr, dest);
+    }
+}
+
+/* CTX class/type */
+
+
+static const mp_rom_map_elem_t mp_ctx_locals_dict_table[] = {
+	MP_CTX_METHOD(line_to),
+	MP_CTX_METHOD(move_to),
+	MP_CTX_METHOD(curve_to),
+	MP_CTX_METHOD(quad_to),
+	MP_CTX_METHOD(rel_line_to),
+	MP_CTX_METHOD(rel_move_to),
+	MP_CTX_METHOD(rel_curve_to),
+	MP_CTX_METHOD(rel_quad_to),
+	MP_CTX_METHOD(rectangle),
+	MP_CTX_METHOD(arc),
+	MP_CTX_METHOD(arc_to),
+	MP_CTX_METHOD(rel_arc_to),
+	MP_CTX_METHOD(round_rectangle),
+	MP_CTX_METHOD(begin_path),
+	MP_CTX_METHOD(close_path),
+        MP_CTX_METHOD(in_fill),
+	MP_CTX_METHOD(fill),
+	MP_CTX_METHOD(stroke),
+	MP_CTX_METHOD(paint),
+	MP_CTX_METHOD(clip),
+	MP_CTX_METHOD(text),
+	MP_CTX_METHOD(text_width),
+	MP_CTX_METHOD(rotate),
+	MP_CTX_METHOD(scale),
+	MP_CTX_METHOD(translate),
+	MP_CTX_METHOD(apply_transform),
+	MP_CTX_METHOD(start_group),
+	MP_CTX_METHOD(end_group),
+	MP_CTX_METHOD(preserve),
+	MP_CTX_METHOD(linear_gradient),
+	MP_CTX_METHOD(radial_gradient),
+	MP_CTX_METHOD(add_stop),
+	MP_CTX_METHOD(line_dash),
+	MP_CTX_METHOD(texture),
+	MP_CTX_METHOD(save),
+	MP_CTX_METHOD(restore),
+	MP_CTX_METHOD(start_frame),
+	//MP_CTX_METHOD(consume_events),
+	MP_CTX_METHOD(end_frame),
+	MP_CTX_METHOD(add_key_binding),
+	MP_CTX_METHOD(listen),
+	MP_CTX_METHOD(listen_stop_propagate),
+	MP_CTX_METHOD(get_font_name),
+
+        MP_CTX_METHOD(gray),
+        MP_CTX_METHOD(rgb),
+        MP_CTX_METHOD(rgba),
+#if CTX_PARSER
+	MP_CTX_METHOD(parse),
+#endif
+#if 1
+#if CTX_TINYVG
+	MP_CTX_METHOD(tinyvg_draw),
+	MP_CTX_METHOD(tinyvg_get_size),
+#endif
+#endif
+	MP_CTX_METHOD(logo),
+
+        MP_CTX_METHOD(pointer_motion),
+        MP_CTX_METHOD(pointer_release),
+        MP_CTX_METHOD(pointer_press),
+        MP_CTX_METHOD(scrolled),
+        MP_CTX_METHOD(key_press),
+        MP_CTX_METHOD(key_up),
+        MP_CTX_METHOD(key_down),
+        MP_CTX_METHOD(incoming_message),
+
+
+        // Instance attributes
+        MP_CTX_ATTR(x),
+        MP_CTX_ATTR(y),
+        MP_CTX_ATTR(width),
+        MP_CTX_ATTR(height),
+        MP_CTX_ATTR(font),
+        MP_CTX_ATTR(image_smoothing),
+#if CTX_BLENDING_AND_COMPOSITING
+        MP_CTX_ATTR(compositing_mode),
+        MP_CTX_ATTR(blend_mode),
+#endif
+        MP_CTX_ATTR(need_redraw),
+        MP_CTX_ATTR(flags),
+        MP_CTX_ATTR(line_cap),
+        MP_CTX_ATTR(line_join),
+        MP_CTX_ATTR(text_align),
+        MP_CTX_ATTR(fill_rule),
+        MP_CTX_ATTR(text_baseline),
+        MP_CTX_ATTR(line_width),
+        MP_CTX_ATTR(line_dash_offset),
+        MP_CTX_ATTR(line_height),
+        MP_CTX_ATTR(wrap_left),
+        MP_CTX_ATTR(wrap_right),
+        MP_CTX_ATTR(miter_limit),
+        MP_CTX_ATTR(global_alpha),
+        MP_CTX_ATTR(font_size),
+
+        MP_CTX_INT_CONSTANT(FLAG,LOWFI),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY2),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY4),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY8),
+        MP_CTX_INT_CONSTANT(FLAG,RGB332),
+        MP_CTX_INT_CONSTANT(FLAG,HASH_CACHE),
+        //MP_CTX_INT_CONSTANT(FLAG,DAMAGE_CONTROL),
+        MP_CTX_INT_CONSTANT(FLAG,KEEP_DATA),
+        MP_CTX_INT_CONSTANT(FLAG,INTRA_UPDATE),
+        MP_CTX_INT_CONSTANT(FLAG,STAY_LOW),
+#if CTX_ENABLE_CBRLE
+        MP_CTX_INT_CONSTANT(FLAG,CBRLE),
+#endif
+
+	MP_CTX_INT_CONSTANT(FILL_RULE,WINDING),
+	MP_CTX_INT_CONSTANT(FILL_RULE,EVEN_ODD),
+	MP_CTX_INT_CONSTANT(JOIN,BEVEL),
+	MP_CTX_INT_CONSTANT(JOIN,ROUND),
+	MP_CTX_INT_CONSTANT(JOIN,MITER),
+	MP_CTX_INT_CONSTANT(CAP,NONE),
+	MP_CTX_INT_CONSTANT(CAP,ROUND),
+	MP_CTX_INT_CONSTANT(CAP,SQUARE),
+#if CTX_BLENDING_AND_COMPOSITING
+	MP_CTX_INT_CONSTANT(COMPOSITE,SOURCE_OVER),
+	MP_CTX_INT_CONSTANT(COMPOSITE,COPY),
+	MP_CTX_INT_CONSTANT(COMPOSITE,SOURCE_IN),
+	MP_CTX_INT_CONSTANT(COMPOSITE,SOURCE_OUT),
+	MP_CTX_INT_CONSTANT(COMPOSITE,SOURCE_ATOP),
+	MP_CTX_INT_CONSTANT(COMPOSITE,CLEAR),
+	MP_CTX_INT_CONSTANT(COMPOSITE,DESTINATION_OVER),
+	MP_CTX_INT_CONSTANT(COMPOSITE,DESTINATION),
+	MP_CTX_INT_CONSTANT(COMPOSITE,DESTINATION_IN),
+	MP_CTX_INT_CONSTANT(COMPOSITE,DESTINATION_OUT),
+	MP_CTX_INT_CONSTANT(COMPOSITE,DESTINATION_ATOP),
+	MP_CTX_INT_CONSTANT(COMPOSITE,XOR),
+	MP_CTX_INT_CONSTANT(BLEND,NORMAL),
+	MP_CTX_INT_CONSTANT(BLEND,MULTIPLY),
+	MP_CTX_INT_CONSTANT(BLEND,SCREEN),
+	MP_CTX_INT_CONSTANT(BLEND,OVERLAY),
+	MP_CTX_INT_CONSTANT(BLEND,DARKEN),
+	MP_CTX_INT_CONSTANT(BLEND,LIGHTEN),
+	MP_CTX_INT_CONSTANT(BLEND,COLOR_DODGE),
+	MP_CTX_INT_CONSTANT(BLEND,COLOR_BURN),
+	MP_CTX_INT_CONSTANT(BLEND,HARD_LIGHT),
+	MP_CTX_INT_CONSTANT(BLEND,SOFT_LIGHT),
+	MP_CTX_INT_CONSTANT(BLEND,DIFFERENCE),
+	MP_CTX_INT_CONSTANT(BLEND,EXCLUSION),
+	MP_CTX_INT_CONSTANT(BLEND,HUE),
+	MP_CTX_INT_CONSTANT(BLEND,SATURATION),
+	MP_CTX_INT_CONSTANT(BLEND,COLOR),
+	MP_CTX_INT_CONSTANT(BLEND,LUMINOSITY),
+	MP_CTX_INT_CONSTANT(BLEND,DIVIDE),
+	MP_CTX_INT_CONSTANT(BLEND,ADDITION),
+	MP_CTX_INT_CONSTANT(BLEND,SUBTRACT),
+#endif
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,ALPHABETIC),
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,TOP),
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,HANGING),
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,MIDDLE),
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,IDEOGRAPHIC),
+	MP_CTX_INT_CONSTANT(TEXT_BASELINE,BOTTOM),
+	MP_CTX_INT_CONSTANT(TEXT_ALIGN,START),
+	MP_CTX_INT_CONSTANT(TEXT_ALIGN,END),
+	MP_CTX_INT_CONSTANT(TEXT_ALIGN,CENTER),
+	MP_CTX_INT_CONSTANT(TEXT_ALIGN,LEFT),
+	MP_CTX_INT_CONSTANT(TEXT_ALIGN,RIGHT),
+
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY8),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAYA8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGBA8),
+	MP_CTX_INT_CONSTANT(FORMAT,BGRA8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB565),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB565_BYTESWAPPED),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB332),
+	//MP_CTX_INT_CONSTANT(FORMAT,RGBAF),
+	//MP_CTX_INT_CONSTANT(FORMAT,GRAYF),
+	//MP_CTX_INT_CONSTANT(FORMAT,GRAYAF),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY1),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY2),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY4),
+	MP_CTX_INT_CONSTANT(FORMAT,YUV420),
+
+	MP_CTX_INT_CONSTANT_UNPREFIXED(PRESS),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(MOTION),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(RELEASE),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(ENTER),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(LEAVE),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(TAP),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(TAP_AND_HOLD),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(DRAG_PRESS),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(DRAG_MOTION),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(DRAG_RELEASE),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(KEY_PRESS),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(KEY_DOWN),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(KEY_UP),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(SCROLL),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(MESSAGE),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(DROP),
+	MP_CTX_INT_CONSTANT_UNPREFIXED(SET_CURSOR),
+
+};
+static MP_DEFINE_CONST_DICT(mp_ctx_locals_dict, mp_ctx_locals_dict_table);
+
+const mp_obj_type_t mp_ctx_type = {
+	.base        = { &mp_type_type },
+	.name        = MP_QSTR_Context,
+	.make_new    = mp_ctx_make_new,
+	.locals_dict = (mp_obj_t)&mp_ctx_locals_dict,
+        .attr        = mp_ctx_attr
+};
+
+/* The globals table for this module */
+static const mp_rom_map_elem_t mp_ctx_module_globals_table[] = {
+	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ctx_module) },
+	{ MP_ROM_QSTR(MP_QSTR_Context), MP_ROM_PTR(&mp_ctx_type) },
+	{ MP_ROM_QSTR(MP_QSTR_CtxEvent), MP_ROM_PTR(&mp_ctx_event_type) },
+
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY8),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAYA8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGBA8),
+	MP_CTX_INT_CONSTANT(FORMAT,BGRA8),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB565),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB565_BYTESWAPPED),
+	MP_CTX_INT_CONSTANT(FORMAT,RGB332),
+	//MP_CTX_INT_CONSTANT(FORMAT,RGBAF),
+	//MP_CTX_INT_CONSTANT(FORMAT,GRAYF),
+	//MP_CTX_INT_CONSTANT(FORMAT,GRAYAF),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY1),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY2),
+	MP_CTX_INT_CONSTANT(FORMAT,GRAY4),
+	MP_CTX_INT_CONSTANT(FORMAT,YUV420),
+        
+        MP_CTX_INT_CONSTANT(FLAG,LOWFI),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY2),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY4),
+        MP_CTX_INT_CONSTANT(FLAG,GRAY8),
+        MP_CTX_INT_CONSTANT(FLAG,RGB332),
+        MP_CTX_INT_CONSTANT(FLAG,HASH_CACHE),
+//      MP_CTX_INT_CONSTANT(FLAG,DAMAGE_CONTROL),
+        MP_CTX_INT_CONSTANT(FLAG,KEEP_DATA),
+        MP_CTX_INT_CONSTANT(FLAG,INTRA_UPDATE),
+        MP_CTX_INT_CONSTANT(FLAG,STAY_LOW),
+#if CTX_ENABLE_CBRLE
+        MP_CTX_INT_CONSTANT(FLAG,CBRLE),
+#endif
+
+};
+static MP_DEFINE_CONST_DICT(mp_ctx_module_globals, mp_ctx_module_globals_table);
+
+const mp_obj_module_t mp_module_ctx = {
+	.base    = { &mp_type_module },
+	.globals = (mp_obj_dict_t *)&mp_ctx_module_globals,
+};
+
+/* This is a special macro that will make MicroPython aware of this module */
+/* clang-format off */
+MP_REGISTER_MODULE(MP_QSTR_ctx, mp_module_ctx);