From d92e8c796604db2ece85d5175ee5c29532c2a77f Mon Sep 17 00:00:00 2001 From: iggy <iggy@muc.ccc.de> Date: Sun, 21 May 2023 18:44:52 +0200 Subject: [PATCH] added uctx from https://ctx.graphics/uctx/ --- usermodule/uctx/.gitignore | 2 + usermodule/uctx/LICENSE | 85 + usermodule/uctx/examples/332pal.py | 27 + usermodule/uctx/examples/Calculator.py | 242 + usermodule/uctx/examples/canvas.py | 300 + usermodule/uctx/examples/fonts.py | 48 + usermodule/uctx/examples/ililcd.py | 183 + usermodule/uctx/examples/lcd13.py | 146 + usermodule/uctx/examples/menu.py | 365 + usermodule/uctx/examples/rectangles.py | 58 + usermodule/uctx/examples/simple.py | 60 + usermodule/uctx/examples/st7789py.py | 403 + usermodule/uctx/examples/uimui.py | 492 + usermodule/uctx/fonts/Arimo-Bold.h | 5056 ++ usermodule/uctx/fonts/Arimo-BoldItalic.h | 5258 ++ usermodule/uctx/fonts/Arimo-Italic.h | 5313 ++ usermodule/uctx/fonts/Arimo-Regular.h | 5241 ++ usermodule/uctx/fonts/Cousine-Bold.h | 4820 ++ usermodule/uctx/fonts/Cousine-Regular.h | 4969 ++ usermodule/uctx/fonts/Roboto-Bold.h | 4328 ++ usermodule/uctx/fonts/Roboto-BoldItalic.h | 4762 ++ usermodule/uctx/fonts/Roboto-Italic.h | 4979 ++ usermodule/uctx/fonts/Roboto-Regular.h | 4848 ++ usermodule/uctx/fonts/Tinos-Bold.h | 5459 ++ usermodule/uctx/fonts/Tinos-Regular.h | 5489 ++ usermodule/uctx/uctx/ctx.h | 61147 ++++++++++++++++++++ usermodule/uctx/uctx/micropython.cmake | 12 + usermodule/uctx/uctx/micropython.mk | 6 + usermodule/uctx/uctx/uctx.c | 1557 + 29 files changed, 125655 insertions(+) create mode 100644 usermodule/uctx/.gitignore create mode 100644 usermodule/uctx/LICENSE create mode 100755 usermodule/uctx/examples/332pal.py create mode 100755 usermodule/uctx/examples/Calculator.py create mode 100755 usermodule/uctx/examples/canvas.py create mode 100755 usermodule/uctx/examples/fonts.py create mode 100644 usermodule/uctx/examples/ililcd.py create mode 100644 usermodule/uctx/examples/lcd13.py create mode 100755 usermodule/uctx/examples/menu.py create mode 100755 usermodule/uctx/examples/rectangles.py create mode 100755 usermodule/uctx/examples/simple.py create mode 100644 usermodule/uctx/examples/st7789py.py create mode 100755 usermodule/uctx/examples/uimui.py create mode 100644 usermodule/uctx/fonts/Arimo-Bold.h create mode 100644 usermodule/uctx/fonts/Arimo-BoldItalic.h create mode 100644 usermodule/uctx/fonts/Arimo-Italic.h create mode 100644 usermodule/uctx/fonts/Arimo-Regular.h create mode 100644 usermodule/uctx/fonts/Cousine-Bold.h create mode 100644 usermodule/uctx/fonts/Cousine-Regular.h create mode 100644 usermodule/uctx/fonts/Roboto-Bold.h create mode 100644 usermodule/uctx/fonts/Roboto-BoldItalic.h create mode 100644 usermodule/uctx/fonts/Roboto-Italic.h create mode 100644 usermodule/uctx/fonts/Roboto-Regular.h create mode 100644 usermodule/uctx/fonts/Tinos-Bold.h create mode 100644 usermodule/uctx/fonts/Tinos-Regular.h create mode 100644 usermodule/uctx/uctx/ctx.h create mode 100644 usermodule/uctx/uctx/micropython.cmake create mode 100644 usermodule/uctx/uctx/micropython.mk create mode 100644 usermodule/uctx/uctx/uctx.c diff --git a/usermodule/uctx/.gitignore b/usermodule/uctx/.gitignore new file mode 100644 index 0000000000..1cc89bf089 --- /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 0000000000..4a6305cd4c --- /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 0000000000..36688a0e0a --- /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 0000000000..a9c8ad4370 --- /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 0000000000..ed978cf72f --- /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 0000000000..428cb18d25 --- /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 0000000000..a4895ceb63 --- /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 0000000000..e5d66528d0 --- /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 0000000000..00651f3e26 --- /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 0000000000..d12f9762c9 --- /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 0000000000..0f105aad26 --- /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 0000000000..e37ef4b098 --- /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 0000000000..0491271140 --- /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 0000000000..7bf7fa047a --- /dev/null +++ b/usermodule/uctx/fonts/Arimo-Bold.h @@ -0,0 +1,5056 @@ +#ifndef CTX_FONT_Arimo_Bold +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..ec7810a2b3 --- /dev/null +++ b/usermodule/uctx/fonts/Arimo-BoldItalic.h @@ -0,0 +1,5258 @@ +#ifndef CTX_FONT_Arimo_BoldItalic +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..bf6676837e --- /dev/null +++ b/usermodule/uctx/fonts/Arimo-Italic.h @@ -0,0 +1,5313 @@ +#ifndef CTX_FONT_Arimo_Italic +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..ca6501bd85 --- /dev/null +++ b/usermodule/uctx/fonts/Arimo-Regular.h @@ -0,0 +1,5241 @@ +#ifndef CTX_FONT_Arimo_Regular +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..57952546a2 --- /dev/null +++ b/usermodule/uctx/fonts/Cousine-Bold.h @@ -0,0 +1,4820 @@ +#ifndef CTX_FONT_Cousine_Bold +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ */ +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},/* ï¬ 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 0000000000..6ad7ff12c7 --- /dev/null +++ b/usermodule/uctx/fonts/Cousine-Regular.h @@ -0,0 +1,4969 @@ +#ifndef CTX_FONT_Cousine_Regular +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ */ +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},/* ï¬ 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 0000000000..2a3be13baa --- /dev/null +++ b/usermodule/uctx/fonts/Roboto-Bold.h @@ -0,0 +1,4328 @@ +#ifndef CTX_FONT_Roboto_Bold +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢âˆ’≈ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..c24f0d4594 --- /dev/null +++ b/usermodule/uctx/fonts/Roboto-BoldItalic.h @@ -0,0 +1,4762 @@ +#ifndef CTX_FONT_Roboto_BoldItalic +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢âˆ’≈â£ï¬€ï¬ï¬‚ffifflſ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},/* ï¬ 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 0000000000..952124c226 --- /dev/null +++ b/usermodule/uctx/fonts/Roboto-Italic.h @@ -0,0 +1,4979 @@ +#ifndef CTX_FONT_Roboto_Italic +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢âˆ’≈â£ï¬€ï¬ï¬‚ffifflſ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},/* ï¬ 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 0000000000..9fbc6ed0ec --- /dev/null +++ b/usermodule/uctx/fonts/Roboto-Regular.h @@ -0,0 +1,4848 @@ +#ifndef CTX_FONT_Roboto_Regular +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢âˆ’≈â£ï¬€ï¬ï¬‚ffifflſ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},/* ï¬ 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 0000000000..a9ce344f9c --- /dev/null +++ b/usermodule/uctx/fonts/Tinos-Bold.h @@ -0,0 +1,5459 @@ +#ifndef CTX_FONT_Tinos_Bold +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..d367866795 --- /dev/null +++ b/usermodule/uctx/fonts/Tinos-Regular.h @@ -0,0 +1,5489 @@ +#ifndef CTX_FONT_Tinos_Regular +/* glyph index: + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi + jklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔ + ÕÖ×ØÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿÅπ“â€â€¢â€¦â‚¬â„¢â†â†‘→↓−≈▼♠♣♥♦ï¬ï¬‚ffiffl */ +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},/* ï¬ 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 0000000000..aeafa2f93f --- /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 (©[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 (©[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 (©[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 (©[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 = ␣ + 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 = ␣ + 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 = ␣ + 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 = ␣ + 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 (®istered_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, ¤t_x, ¤t_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*)©[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("ï¬");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 0000000000..d89ff82860 --- /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 0000000000..c9c838e78e --- /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 0000000000..f31d7595e8 --- /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); -- GitLab