diff --git a/adafruit_displayio_layout/widgets/.DS_Store b/adafruit_displayio_layout/widgets/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/adafruit_displayio_layout/widgets/.DS_Store differ diff --git a/adafruit_displayio_layout/widgets/control.py b/adafruit_displayio_layout/widgets/control.py new file mode 100644 index 0000000..45d5785 --- /dev/null +++ b/adafruit_displayio_layout/widgets/control.py @@ -0,0 +1,93 @@ +# SPDX-FileCopyrightText: 2021 Kevin Matocha, Tim Cocks +# +# SPDX-License-Identifier: MIT + +""" +`control` +================================================================================ +CircuitPython GUI Control Class for touch-related elements + +* Author(s): Kevin Matocha + +Implementation Notes +-------------------- + +**Hardware:** + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +__version__ = "0.0.0-auto.0" +__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_Layout.git" + +# pylint: disable=unsubscriptable-object, unnecessary-pass + + +class Control: + """A Control class for responsive elements, including touch response functions. + + **IMPORTANT**: The *touch_point* for all functions should be in local coordinates + for this item. That means, any widget should adjust the touchpoint for self.x and + self.y before passing the touchpoint to this set of Control functions. + + The Control class uses a state variable **touch_boundary** [x, y, width, height] + that defines the rectangular boundary for touch inputs. The **touch_boundary** + is used by the `contains` function to check when touches are within the Control's + boundary. Note: These **touch_boundary** dimensions are in the Control's local + pixel coordinates. The **x** and **y** values define the upper left corner of the + **touch_boundary**. The **touch_boundary** value should be updated by the sublcass + definiton. + + """ + + def __init__( + self, + ): + self.touch_boundary = ( + None # `self.touch_boundary` should be updated by the subclass + ) + # Tuple of [x, y, width, height]: [int, int, int, int] all in pixel units + # where x,y define the upper left corner + # and width and height define the size of the `touch_boundary` + + def contains(self, touch_point): + """Checks if the Control was touched. Returns True if the touch_point is within the + Control's touch_boundary. + + :param touch_point: x,y location of the screen, converted to local coordinates. + :type touch_point: Tuple[x,y] + :return: Boolean + + """ + + # Note: if a widget's `scale` property is > 1, be sure to update the + # `touch_boundary` dimensions to accommodate the `scale` factor + if (self.touch_boundary is not None) and ( + ( + self.touch_boundary[0] + <= touch_point[0] + <= (self.touch_boundary[0] + self.touch_boundary[2]) + ) + and ( + self.touch_boundary[1] + <= touch_point[1] + <= (self.touch_boundary[1] + self.touch_boundary[3]) + ) + ): + return True + return False + + # place holder touch_handler response functions + def selected(self, touch_point): + """Response function when Control is selected. Should be overridden by subclass. + + :param touch_point: x,y location of the screen, converted to local coordinates. + :type touch_point: Tuple[x,y] + :return: None + + """ + pass diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py new file mode 100755 index 0000000..2867159 --- /dev/null +++ b/adafruit_displayio_layout/widgets/dial.py @@ -0,0 +1,795 @@ +# The MIT License (MIT) +# +# Copyright (c) 2021 Kevin Matocha (kmatch98) +# +# 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. +# +################################ +# A round switch widget for CircuitPython, using displayio and adafruit_display_shapes +# +# Features: +# - Color grading as the switch animates between the off and on states +# - Option to display 0 or 1 to confirm the switch state (display_button_text=True) +# - Provides setting for animation_time (approximate), and adapts redraw rate based on real time. +# +# Future options to consider: +# --------------------------- +# different orientations (horizontal, vertical, flipped) +# + +import gc + +# import time +# import terminalio +import math +import displayio + +from adafruit_displayio_layout.widgets.widget import Widget + +from adafruit_display_shapes.line import Line +from adafruit_display_shapes.triangle import Triangle + +from adafruit_display_text import bitmap_label + +# from adafruit_display_text import label + +from bitmap_scale_rotate import blit_rotate_scale + + +class Dial(Widget): + """A dial widget. The origin is set using ``x`` and ``y``. + + :param int x: pixel position + :param int y: pixel position + :param int width: width in pixels + :param int height: height in pixels - is ignored + :param int angle: dial rotation, in degrees + :param float value: the value to display + :param Boolean display_value: show the value on the dial + :param float min_value: the minimum value on the dial + :param float max_value: the maximum value on the dial + :param float anchor_point: (X,Y) values from 0.0 to 1.0 to define the anchor + point relative to the bounding box + :param int anchored_position: (x,y) pixel value for the location + of the anchor_point + + :param tick_color: tick line color (RGB tuple or 24-bit hex value) + + :param int major_ticks: number of major ticks + :param int major_tick_stroke: major tick line width, in pixels + :param int major_tick_length: major tick length, in pixels + :param str major_tick_labels: array of strings for major tick labels + :param tick_label_font: font to be used for tick label + :param tick_label_color: color for the tick labels + :param Boolean angle_tick_labels: Set True if the tick_labels should be angled + + :param int minor_ticks: number of minor ticks (per major tick) + :param int minor_tick_stroke: minor tick line width, in pixels + :param int minor_tick_length: minor tick length, in pixels + + + :param background_color: background color (RGB tuple + or 24-bit hex value), set None for transparent + + ..figure:: gui_layout_coordinates.png + :scale: 50 % + :alt: Diagram of layout coordinates + + Diagram showing the global and local coordinates and the associated + class variables. + """ + + # ***** Add label_anchor_point and label_anchor_on_widget (rename?????) ***** + + # This Switch has multiple class inheritances. + # It is a subclass of Group->Widget and a sublcass of Control. + + # *** Update to handle angles > 180 degrees + + def __init__( + self, + width=100, + padding=0, # keepout amount around border, in pixels + sweep_angle=90, + start_angle=None, + needle_width=1, # triangle with this base width at the radius center, best if this is odd + needle_color=0x880000, + value=0, + value_font=None, + display_value=True, + value_color=0xFF0000, + min_value=0.0, + max_value=100.0, + anchor_point=None, + anchored_position=None, + tick_color=0xFFFFFF, + major_ticks=5, + major_tick_stroke=3, + major_tick_length=10, + major_tick_labels=["0", "25", "50", "75", "100"], + minor_ticks=5, + minor_tick_stroke=1, + minor_tick_length=5, + tick_label_font=None, + tick_label_color=0x880000, + rotate_tick_labels=True, + tick_label_scale=1.0, + background_color=None, + label_anchor_point=(0.5, 0.5), # default label position + label_anchor_on_widget=(0.5, 0.5), # default label position on widget + **kwargs, + ): + + # initialize the Widget superclass (x, y, scale) + super().__init__(**kwargs, max_size=3) + # Define how many graphical elements will be in this group + # using "max_size=XX" + # + # Group elements for SwitchRoundHorizontal: + # 1. TileGrid holding bitmap with ticks and tick label text + # 2. Value label (optional) + # 3. Needle bitmap + + self._value = value + + self.value_font = value_font + if value_font is None: + # import terminalio + # self.value_font = terminalio.FONT + pass + else: + self.value_font = value_font + + self._value_color = value_color + self._display_value = display_value + + self._anchor_point = anchor_point + self._anchored_position = anchored_position + + sweep_angle = min(max(1, sweep_angle), 180) + # print("sweep_angle: {}".format(sweep_angle)) + self._sweep_angle_radians = (sweep_angle * 2 * math.pi) / 360 + if start_angle is None: + start_angle = -sweep_angle / 2 + self._start_angle_radians = 2 * math.pi * start_angle / 360 + # ***** Updated dial code to handle different starting angle + + self._min_value = min_value + self._max_value = max_value + + if (major_tick_labels == []) or (tick_label_font is None): + font_height = 0 + else: + if hasattr(tick_label_font, "get_bounding_box"): + font_height = int( + tick_label_scale * tick_label_font.get_bounding_box()[1] + ) + elif hasattr(font, "ascent"): + font_height = int( + tick_label_scale * tick_label_font.ascent + tick_label_font.ascent + ) + + self._dial_radius = (width / 2 - font_height - padding) / math.sin( + self._sweep_angle_radians / 2 + ) + # print("dial_radius: {}".format(self._dial_radius)) + self._width = width + # print("calc height: {}".format(int( self._dial_radius - (self._dial_radius - major_tick_length) * math.cos(self._sweep_angle_radians/2) ))) + self._height = ( + 2 * padding + + int( + font_height + + self._dial_radius + - (self._dial_radius - major_tick_length) + * math.cos(self._sweep_angle_radians / 2) + ) + + major_tick_stroke + ) + # print("self._height: {}".format(self._height)) + + self._padding = padding + + self._dial_center = ( + int(width / 2), + int(self._dial_radius) + font_height + padding, + ) + + self._dial_palette = displayio.Palette(4) + self._dial_palette.make_transparent( + 0 + ) # comment this out for debug of bitmap bounding box + self._dial_palette[0] = 0x333333 + self._dial_palette[1] = tick_color + self._dial_palette[2] = tick_label_color + self._dial_bitmap = displayio.Bitmap( + self._width, self._height, 3 + ) # 3 colors: background, ticks, tick label text + self._dial_tilegrid = displayio.TileGrid( + self._dial_bitmap, pixel_shader=self._dial_palette + ) + + self.append(self._dial_tilegrid) + + if self._display_value: + self._value_label = ( + bitmap_label.Label( # label runs faster than bitmap_label + self.value_font, + text=str(self._value), + color=self._value_color, + ) + ) + self._value_label.anchor_point = label_anchor_point + + self._value_label.anchored_position = [ + round(self._width * label_anchor_on_widget[0]), + round(self._height * label_anchor_on_widget[1]), + ] + + self.append(self._value_label) + + self._update_value() + + self._needle_palette = displayio.Palette(4) + self._needle_palette.make_transparent(0) + self._needle_palette[1] = needle_color + self._needle_palette[2] = needle_color + self._needle_bitmap = displayio.Bitmap( + self._width, self._height, 4 + ) # 2 colors: clear and needle_color + self._needle_tilegrid = displayio.TileGrid( + self._needle_bitmap, pixel_shader=self._needle_palette + ) + self._needle_width = needle_width + self._needle_color = needle_color + + # self._needle_origin = Triangle( + # x0=0, + # y0=0, + # x1=int(round(needle_width/2)), + # y1=int(self._dial_radius), + # x2=-int(round(needle_width/2)), + # y2=int(self._dial_radius), + # fill=needle_color, + # outline=needle_color, + # ) + + # self.append(self._needle_origin) + + self._update_needle(self._value, initial_draw=True) + + draw_ticks( + target_bitmap=self._dial_bitmap, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + tick_count=major_ticks, + tick_stroke=major_tick_stroke, + tick_length=major_tick_length, + angle=sweep_angle, + tick_color_index=1, + ) + + draw_ticks( + target_bitmap=self._dial_bitmap, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + tick_count=minor_ticks * (major_ticks - 1) + 1, + tick_stroke=minor_tick_stroke, + tick_length=minor_tick_length, + angle=sweep_angle, + tick_color_index=1, + ) + + draw_labels( + target_bitmap=self._dial_bitmap, + font=tick_label_font, + tick_labels=major_tick_labels, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + start_angle_radians=self._start_angle_radians, + sweep_angle_radians=self._sweep_angle_radians, + rotate_labels=rotate_tick_labels, + font_height=font_height, + font_color_index=2, + tick_label_scale=tick_label_scale, + ) + + self._bounding_box = [0, 0, self._width, self._height] + + # update the position, if required + self._update_position() + + def _update_value(self): + + if self._display_value: + self._value_label.text = str(self._value) + + def _update_position(self): + if self._anchor_point is None or self._anchored_position is None: + pass + else: + self.x = ( + -self._bounding_box[0] + + self._anchored_position[0] + - int(self._anchor_point[0] * self._bounding_box[2]) + ) + self.y = ( + -self._bounding_box[1] + + self._anchored_position[1] + - int(self._anchor_point[1] * self._bounding_box[3]) + ) + + def _get_offset_position(self, position): + # Function to calculate the offset position (x, y, angle) of the moving + # elements of an animated widget + # input parameter `position` is a value from 0.0 to 1.0 indicating start + # and end position + # + # Designed to be flexible depending upon the widget's response + # + # values should be set in the __init__ function: + # self._x_motion: x-direction movement in pixels + # self._y_motion: y-direction movement in pixels + # self._angle_motion: angle movement + # + # A linear movement function (but can be modified for other motion acceleration) + if position < 0: + position = 0 + if position > 1: + position = 1 + + # if multiple elements are present, they could each have their own movement functions. + angle_offset = self._start_angle_radians + self._sweep_angle_radians * position + + return angle_offset + + def _update_needle(self, value, initial_draw=False): + self._draw_position( + value / (self._max_value - self._min_value), initial_draw=initial_draw + ) # convert to position (0.0 to 1.0) + + def _draw_position(self, position, initial_draw=False): + # Draw the position of the slider. + # The position parameter is a float between 0 and 1 (0= off, 1= on). + + # Get the position offset from the motion function + angle_offset = self._get_offset_position(position) + # print("angle_offset: {}".format(angle_offset)) + + if self._sweep_angle_radians > 0.95 * math.pi: + self._needle_origin = Triangle( + x0=round(self._dial_radius * math.sin(angle_offset)), + y0=round(-self._dial_radius * math.cos(angle_offset)), + x1=round(-self._needle_width / 2 * math.cos(angle_offset)), + y1=round(-self._needle_width / 2 * math.sin(angle_offset)), + x2=round(self._needle_width / 2 * math.cos(angle_offset)), + y2=round(self._needle_width / 2 * math.sin(angle_offset)), + fill=self._needle_color, + outline=self._needle_color, + ) + if angle_offset > 0: + self._needle_origin.x = self._dial_center[0] - round( + self._needle_width / 2 * math.cos(angle_offset) + ) + self._needle_origin.y = ( + self._dial_center[1] + - self._needle_origin._bitmap.height + + round(self._needle_width / 2 * math.sin(angle_offset)) + ) + elif angle_offset < 0: + self._needle_origin.x = ( + self._dial_center[0] + - self._needle_origin._bitmap.width + + round(self._needle_width / 2 * math.cos(angle_offset)) + ) + self._needle_origin.y = ( + self._dial_center[1] + - self._needle_origin._bitmap.height + - round(self._needle_width / 2 * math.sin(angle_offset)) + ) + else: + self._needle_origin.x = ( + self._dial_center[0] - self._needle_origin._bitmap.width // 2 + ) + self._needle_origin.y = ( + self._dial_center[1] - self._needle_origin._bitmap.height + ) + + else: + + # x,y position of tip of needle + needle_x = self._dial_center[0] + round( + self._dial_radius * math.sin(angle_offset) + ) + needle_y = self._dial_center[1] - round( + self._dial_radius * math.cos(angle_offset) + ) + + x0 = round(self._dial_radius * math.sin(angle_offset)) + y0 = round(-self._dial_radius * math.cos(angle_offset)) + x1_start = round(-self._needle_width / 2 * math.cos(angle_offset)) + y1_start = round(-self._needle_width / 2 * math.sin(angle_offset)) + x2_start = round(self._needle_width / 2 * math.cos(angle_offset)) + y2_start = round(self._needle_width / 2 * math.sin(angle_offset)) + + # y_prime: how much of the needle should be showing + y_prime = self._dial_bitmap.height - needle_y # -self._padding + x1_prime = (x1_start - x0) * (y_prime / (y1_start - y0)) + x2_prime = (x2_start - x0) * (y_prime / (y2_start - y0)) + + if y1_start - y0 < y_prime: + x1_needle = x1_start + y1_needle = y1_start + else: + x1_needle = x0 + x1_prime + y1_needle = y0 + y_prime + + if y2_start - y0 < y_prime: + x2_needle = x2_start + y2_needle = y2_start + else: + x2_needle = x0 + x2_prime + y2_needle = y0 + y_prime + + self._needle_origin = Triangle( + x0=x0, + y0=y0, + x1=int(x1_needle), + y1=int(y1_needle), + x2=int(x2_needle), + y2=int(y2_needle), + fill=self._needle_color, + outline=self._needle_color, + ) + gc.collect() + + if angle_offset < 0: + self._needle_origin.x = needle_x - int( + max(0, x0 - x1_needle) + ) # offset for partially angled needle + self._needle_origin.y = needle_y + elif angle_offset > 0: + self._needle_origin.x = ( + needle_x + - self._needle_origin._bitmap.width + + int(max(0, x2_needle - x0)) + ) # offset for partially angled needle + self._needle_origin.y = needle_y + else: + self._needle_origin.x = round( + self._dial_center[0] - self._needle_origin._bitmap.width / 2 + ) + self._needle_origin.y = round(self._dial_center[1] - self._dial_radius) + + if initial_draw: + self.append(self._needle_origin) + else: + self[len(self) - 1] = self._needle_origin + + @property + def value(self): + """The current switch value (Boolean).""" + return self._value + + @value.setter + def value(self, new_value): + + if new_value != self._value: + self._value = new_value + self._update_value() + self._update_needle(self._value) + + +def draw_ticks( + target_bitmap, + *, + dial_center, + dial_radius, + tick_count, + tick_stroke, + tick_length, + angle, + tick_color_index, +): + # angle is in degrees + + tick_bitmap = displayio.Bitmap( + tick_stroke, tick_length, 2 + ) # make a tick line bitmap for blitting + tick_bitmap.fill( + tick_color_index + ) # initialize the tick bitmap with the tick_color_index + + # print("dial_radius: {}".format(dial_radius)) + # print("bitmap width: {} height: {}".format(target_bitmap.width, target_bitmap.height)) + for i in range(tick_count): + this_angle = ( + (-(angle / 2) + i * angle / (tick_count - 1)) * 2 * math.pi / 360 + ) # in radians + + target_position_x = dial_center[0] + dial_radius * math.sin(this_angle) + target_position_y = dial_center[1] - dial_radius * math.cos(this_angle) + + # print("target position x,y: {},{}".format(target_position_x, target_position_y)) + + if "fancyblit" in dir(displayio.Bitmap): # if core function is available + target_bitmap.fancyblit( + ox=target_position_x, + oy=target_position_y, + source_bitmap=tick_bitmap, + px=int(tick_bitmap.width / 2), + py=0, + angle=this_angle, + ) + + else: + blit_rotate_scale( # translate and rotate the tick into the target_bitmap + destination=target_bitmap, + ox=target_position_x, + oy=target_position_y, + source=tick_bitmap, + px=int(tick_bitmap.width / 2), + py=0, + angle=this_angle, + ) + + +def draw_labels( + target_bitmap, + *, + font, + tick_labels, + dial_center, + dial_radius, + start_angle_radians, + sweep_angle_radians, + font_height, + font_color_index=2, + rotate_labels=True, + tick_label_scale, +): + + label_count = len(tick_labels) + + for i, this_label_text in enumerate(tick_labels): + + temp_label = bitmap_label.Label( + font, text=this_label_text + ) # make a tick line bitmap for blitting + # may need to convert color + + this_angle = start_angle_radians + i * sweep_angle_radians / ( + label_count - 1 + ) # in radians + + target_position_x = dial_center[0] + ( + dial_radius + font_height // 2 + ) * math.sin(this_angle) + target_position_y = dial_center[1] - ( + dial_radius + font_height // 2 + ) * math.cos(this_angle) + + # print("target position x,y: {},{}".format(target_position_x, target_position_y)) + + if rotate_labels: + pass + else: + this_angle = 0 + blit_rotate_scale( # translate and rotate the tick into the target_bitmap + destination=target_bitmap, + ox=target_position_x, + oy=target_position_y, + source=temp_label.bitmap, + px=temp_label.bitmap.width // 2, + py=temp_label.bitmap.height // 2, + angle=this_angle, + scale=tick_label_scale, + ) + + +# * Copyright (c) 2017 Werner Stoop +# * +# * 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. + + +# Credit from https://github.com/wernsey/bitmap +# MIT License from +# * Copyright (c) 2017 Werner Stoop +# +# /** +# * #### `void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale);` +# * +# * Rotates a source bitmap `src` around a pivot point `px,py` and blits it onto a destination bitmap `dst`. +# * +# * The bitmap is positioned such that the point `px,py` on the source is at the offset `ox,oy` on the destination. +# * +# * The `angle` is clockwise, in radians. The bitmap is also scaled by the factor `scale`. +# */ +# void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale); + + +# /* +# Reference: +# "Fast Bitmap Rotation and Scaling" By Steven Mortimer, Dr Dobbs' Journal, July 01, 2001 +# http://www.drdobbs.com/architecture-and-design/fast-bitmap-rotation-and-scaling/184416337 +# See also http://www.efg2.com/Lab/ImageProcessing/RotateScanline.htm +# */ + +import math + + +def blit_rotate_scale( + destination, # destination bitmap + ox=None, + oy=None, # (ox, oy) is the destination point where the source (px,py) is placed + dest_clip0=None, + dest_clip1=None, # clip0,1 is (x,y) corners of clip window on the destination bitmap + source=None, # source bitmap + px=None, + py=None, # (px, py) is the rotation point of the source bitmap + source_clip0=None, + source_clip1=None, # clip0,1 is (x,y) corners of clip window on the source bitmap + angle=0, # in radians, clockwise + scale=1.0, # scale factor (float) + skip_index=None, # color index to ignore +): + if source is None: + pass + + # Check the input limits + + if ox is None: + ox = destination.width / 2 + if oy is None: + oy = destination.height / 2 + if px is None: + px = source.width / 2 + if py is None: + py = source.height / 2 + + if dest_clip0 is None: + dest_clip0 = (0, 0) + if dest_clip1 is None: + dest_clip1 = (destination.width, destination.height) + + if source_clip0 is None: + source_clip0 = (0, 0) + if source_clip1 is None: + source_clip1 = (source.width, source.height) + + minx = dest_clip1[0] + miny = dest_clip1[1] + maxx = dest_clip0[0] + maxy = dest_clip0[1] + + sinAngle = math.sin(angle) + cosAngle = math.cos(angle) + + dx = -cosAngle * px * scale + sinAngle * py * scale + ox + dy = -sinAngle * px * scale - cosAngle * py * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(dy) + dx = cosAngle * (source.width - px) * scale + sinAngle * py * scale + ox + dy = sinAngle * (source.width - px) * scale - cosAngle * py * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + dx = ( + cosAngle * (source.width - px) * scale + - sinAngle * (source.height - py) * scale + + ox + ) + dy = ( + sinAngle * (source.width - px) * scale + + cosAngle * (source.height - py) * scale + + oy + ) + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + dx = -cosAngle * px * scale - sinAngle * (source.height - py) * scale + ox + dy = -sinAngle * px * scale + cosAngle * (source.height - py) * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + # /* Clipping */ + if minx < dest_clip0[0]: + minx = dest_clip0[0] + if maxx > dest_clip1[0] - 1: + maxx = dest_clip1[0] - 1 + if miny < dest_clip0[1]: + miny = dest_clip0[1] + if maxy > dest_clip1[1] - 1: + maxy = dest_clip1[1] - 1 + + dvCol = math.cos(angle) / scale + duCol = math.sin(angle) / scale + + duRow = dvCol + dvRow = -duCol + + startu = px - (ox * dvCol + oy * duCol) + startv = py - (ox * dvRow + oy * duRow) + + rowu = startu + miny * duCol + rowv = startv + miny * dvCol + + for y in range(miny, maxy + 1): # (y = miny, y <= maxy, y++) + u = rowu + minx * duRow + v = rowv + minx * dvRow + for x in range(minx, maxx + 1): # (x = minx, x <= maxx, x++) + if (source_clip0[0] <= u < source_clip1[0]) and ( + source_clip0[1] <= v < source_clip1[1] + ): + # get the pixel color (c) from the source bitmap at (u,v) + c = source[ + int(u) + source.width * int(v) + ] # direct index into bitmap is faster than tuple + # c = source[int(u), int(v)] + + if c != skip_index: # ignore any pixels with skip_index + # place the pixel color (c) into the destination bitmap at (x,y) + destination[ + x + y * destination.width + ] = c # direct index into bitmap is faster than tuple + # destination[x,y] = c + u += duRow + v += dvRow + + rowu += duCol + rowv += dvCol diff --git a/adafruit_displayio_layout/widgets/easing.py b/adafruit_displayio_layout/widgets/easing.py new file mode 100644 index 0000000..fe817d2 --- /dev/null +++ b/adafruit_displayio_layout/widgets/easing.py @@ -0,0 +1,260 @@ +###### +# +# Adapted from: https://github.com/warrenm/AHEasing +# +# View animated examples here: https://easings.net +# +##### +# // +# // easing.c +# // +# // Copyright (c) 2011, Auerhaus Development, LLC +# // +# // This program is free software. It comes without any warranty, to +# // the extent permitted by applicable law. You can redistribute it +# // and/or modify it under the terms of the Do What The Fuck You Want +# // To Public License, Version 2, as published by Sam Hocevar. See +# // http://sam.zoy.org/wtfpl/COPYING for more details. +# // +## +## +# The MIT License (MIT) +# +# Copyright (c) 2021 Kevin Matocha (kmatch98, ksmatocha@gmail.com) +# +# 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. +# +# +# Easing functions for animation motion +# +# Input value (p) should be between 0.0 (start point) and 1.0 (ending point). +# Output values begin at 0.0 and end at 1.0 but have a specific transfer displacment function +# to give the desired motion response. +# +# Note: Some functions return values < 0.0 or > 1.0 due "springiness". + +import math + +# Modeled after the line y = x +def LinearInterpolation(p): + return p + + +# Modeled after the parabola y = x^2 +def QuadraticEaseIn(p): + return p * p + + +# Modeled after the parabola y = -x^2 + 2x +def QuadraticEaseOut(p): + return -(p * (p - 2)) + + +# Modeled after the piecewise quadratic +# y = (1/2)((2x)^2) ; [0, 0.5) +# y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] +def QuadraticEaseInOut(p): + if p < 0.5: + return 2 * p * p + return (-2 * p * p) + (4 * p) - 1 + + +# Modeled after the cubic y = x^3 +def CubicEaseIn(p): + return p * p * p + + +# Modeled after the cubic y = (x - 1)^3 + 1 +def CubicEaseOut(p): + f = p - 1 + return f * f * f + 1 + + +# Modeled after the piecewise cubic +# y = (1/2)((2x)^3) ; [0, 0.5) +# y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] +def CubicEaseInOut(p): + if p < 0.5: + return 4 * p * p * p + f = (2 * p) - 2 + return 0.5 * f * f * f + 1 + + +# Modeled after the quartic x^4 +def QuarticEaseIn(p): + return p * p * p * p + + +# Modeled after the quartic y = 1 - (x - 1)^4 +def QuarticEaseOut(p): + f = p - 1 + return f * f * f * (1 - p) + 1 + + +# Modeled after the piecewise quartic +# y = (1/2)((2x)^4) ; [0, 0.5) +# y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] +def QuarticEaseInOut(p): + if p < 0.5: + return 8 * p * p * p * p + f = p - 1 + return -8 * f * f * f * f + 1 + + +# Modeled after the quintic y = x^5 +def QuinticEaseIn(p): + return p * p * p * p * p + + +# Modeled after the quintic y = (x - 1)^5 + 1 +def QuinticEaseOut(p): + f = p - 1 + return f * f * f * f * f + 1 + + +# Modeled after the piecewise quintic +# y = (1/2)((2x)^5) ; [0, 0.5) +# y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] +def QuinticEaseInOut(p): + if p < 0.5: + return 16 * p * p * p * p * p + f = (2 * p) - 2 + return 0.5 * f * f * f * f * f + 1 + + +# Modeled after quarter-cycle of sine wave +def SineEaseIn(p): + return math.sin((p - 1) * math.pi / 2) + 1 + + +# Modeled after quarter-cycle of sine wave (different phase) +def SineEaseOut(p): + return math.sin(p * math.pi / 2) + + +# Modeled after half sine wave +def SineEaseInOut(p): + return 0.5 * (1 - math.cos(p * math.pi)) + + +# Modeled after shifted quadrant IV of unit circle +def CircularEaseIn(p): + return 1 - math.sqrt(1 - (p * p)) + + +# Modeled after shifted quadrant II of unit circle +def CircularEaseOut(p): + return math.sqrt((2 - p) * p) + + +# Modeled after the piecewise circular function +# y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) +# y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] +def CircularEaseInOut(p): + if p < 0.5: + return 0.5 * (1 - math.sqrt(1 - 4 * (p * p))) + return 0.5 * (math.sqrt(-((2 * p) - 3) * ((2 * p) - 1)) + 1) + + +# Modeled after the exponential function y = 2^(10(x - 1)) +def ExponentialEaseIn(p): + if p == 0: + return p + return math.pow(2, 10 * (p - 1)) + + +# Modeled after the exponential function y = -2^(-10x) + 1 +def ExponentialEaseOut(p): + if p == 1: + return p + return 1 - math.pow(2, -10 * p) + + +# Modeled after the piecewise exponential +# y = (1/2)2^(10(2x - 1)) ; [0,0.5) +# y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] +def ExponentialEaseInOut(p): + if (p == 0.0) or (p == 1.0): + return p + if p < 0.5: + return 0.5 * math.pow(2, (20 * p) - 10) + return (-0.5 * math.pow(2, (-20 * p) + 10)) + 1 + + +# Modeled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) +def ElasticEaseIn(p): + return math.sin(13 * p * math.pi / 2) * math.pow(2, 10 * (p - 1)) + + +# Modeled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 +def ElasticEaseOut(p): + return math.sin(-13 * math.pi / 2 * (p + 1)) * math.pow(2, -10 * p) + 1 + + +# Modeled after the piecewise exponentially-damped sine wave: +# y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) +# y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] +def ElasticEaseInOut(p): + if p < 0.5: + return 0.5 * math.sin(13 * math.pi * p) * math.pow(2, 10 * ((2 * p) - 1)) + return 0.5 * ( + math.sin(-13 * math.pi / 2 * ((2 * p - 1) + 1)) * pow(2, -10 * (2 * p - 1)) + 2 + ) + + +# Modeled after the overshooting cubic y = x^3-x*sin(x*pi) +def BackEaseIn(p): + return p * p * p - p * math.sin(p * math.pi) + + +# Modeled after overshooting cubic y = 1-((1-x)^3-(1-x)*sin((1-x)*pi)) +def BackEaseOut(p): + f = 1 - p + return 1 - (f * f * f - f * math.sin(f * math.pi)) + + +# Modeled after the piecewise overshooting cubic function: +# y = (1/2)*((2x)^3-(2x)*sin(2*x*pi)) ; [0, 0.5) +# y = (1/2)*(1-((1-x)^3-(1-x)*sin((1-x)*pi))+1) ; [0.5, 1] +def BackEaseInOut(p): + if p < 0.5: + f = 2 * p + return 0.5 * (f * f * f - f * math.sin(f * math.pi)) + f = 1 - (2 * p - 1) + return 0.5 * (1 - (f * f * f - f * math.sin(f * math.pi))) + 0.5 + + +def BounceEaseIn(p): + return 1 - BounceEaseOut(1 - p) + + +def BounceEaseOut(p): + if p < 4 / 11.0: + return (121 * p * p) / 16.0 + if p < 8 / 11.0: + return (363 / 40.0 * p * p) - (99 / 10.0 * p) + (17 / 5.0) + if p < 9 / 10.0: + return (4356 / 361.0 * p * p) - (35442 / 1805.0 * p) + 16061 / 1805.0 + return (54 / 5.0 * p * p) - (513 / 25.0 * p) + 268 / 25.0 + + +def BounceEaseInOut(p): + if p < 0.5: + return 0.5 * BounceEaseIn(p * 2) + return 0.5 * BounceEaseOut(p * 2 - 1) + 0.5 diff --git a/adafruit_displayio_layout/widgets/flip_input.py b/adafruit_displayio_layout/widgets/flip_input.py new file mode 100644 index 0000000..6625134 --- /dev/null +++ b/adafruit_displayio_layout/widgets/flip_input.py @@ -0,0 +1,622 @@ +import time +from adafruit_display_shapes.triangle import Triangle +from adafruit_displayio_layout.widgets.widget import Widget +from adafruit_displayio_layout.widgets.control import Control +from adafruit_display_text import bitmap_label +from adafruit_display_text import label +import displayio +import gc +import adafruit_displayio_layout.widgets.easing as easing + + +def constrain(val, min_val, max_val): + return min(max_val, max(min_val, val)) + + +# draw_position - Allows values < 0.0 and > 1.0 for "springy" easing functions + + +def draw_position( + target_bitmap, + bitmap1, + bitmap1_offset, + bitmap2, + bitmap2_offset, + position=0.0, + horizontal=True, +): + + x_offset1 = bitmap1_offset[0] + y_offset1 = bitmap1_offset[1] + x_offset2 = bitmap2_offset[0] + y_offset2 = bitmap2_offset[1] + + # print('position: {}'.format(position)) + + if position == 0.0: + target_bitmap.fill(0) + target_bitmap.blit(x_offset1, y_offset1, bitmap1) + return + if position == 1.0: + target_bitmap.fill(0) + target_bitmap.blit(x_offset2, y_offset2, bitmap2) + return + + if horizontal: + target_bitmap.fill(0) + x_index = round(position * target_bitmap.width) + blit_constrained(target_bitmap, x_offset1, y_offset1, bitmap1, x1=x_index) + blit_constrained( + target_bitmap, + target_bitmap.width - x_index + x_offset2, + y_offset2, + bitmap2, + x1=0, + x2=x_index, + ) + + else: + target_bitmap.fill(0) + y_index = round(position * target_bitmap.height) + + blit_constrained(target_bitmap, x_offset1, y_offset1, bitmap1, y1=y_index) + blit_constrained( + target_bitmap, + x_offset2, + target_bitmap.height - y_index + y_offset2, + bitmap2, + y1=0, + y2=y_index, + ) + + +def blit_constrained(target, x, y, source, x1=None, y1=None, x2=None, y2=None): + if x1 is None: + x1 = 0 + if y1 is None: + y1 = 0 + if x2 is None: + x2 = source.width + if y2 is None: + y2 = source.height + + if x < 0: + x1 -= x # offset the clip region in positive direction + x2 -= x + x = 0 + if x1 < 0: + x = x - x1 + x1 = 0 # move to origin + if x2 > source.width: + x2 = source.width + + if y < 0: + y1 -= y # offset the clip region + y2 -= y + y = 0 + if y1 < 0: + y = y - y1 + y1 = 0 + if y2 > source.height: + y2 = source.height + + if ( + (x > target.width) + or (y > target.height) + or (x1 > source.width) + or (y1 > source.height) + ): + return + + target.blit(x, y, source, x1=x1, y1=y1, x2=x2, y2=y2) + + +def animate_bitmap( + display, + target_bitmap, + bitmap1, + bitmap1_offset, + bitmap2, + bitmap2_offset, + start_position, + end_position, + animation_time, + horizontal, + easing_functions=[ + easing.LinearInterpolation, + easing.LinearInterpolation, + ], # in, out +): + import time + + # print("start_pos: {}, end_pos: {}".format(start_position, end_position)) + max_position = max(start_position, end_position) + min_position = min(start_position, end_position) + start_time = time.monotonic() + + if start_position > end_position: # direction is decreasing: "out" + temp = bitmap2 + bitmap2 = bitmap1 + bitmap1 = temp + + temp_offset = bitmap2_offset + bitmap2_offset = bitmap1_offset + bitmap1_offset = temp_offset + + easing_function = easing_functions[1] # use the "out" easing function + + else: # direction is increasing: "in" + easing_function = easing_functions[0] # use the "in" easing function + + display.auto_refresh = False + draw_position( + target_bitmap, + bitmap1, + bitmap1_offset, + bitmap2, + bitmap2_offset, + position=start_position, + horizontal=horizontal, + ) + display.auto_refresh = True + + while True: + + target_position = ( + start_position + + (end_position - start_position) + * (time.monotonic() - start_time) + / animation_time + ) + + display.auto_refresh = False + if min_position < target_position < max_position: + display.auto_refresh = False + draw_position( + target_bitmap, + bitmap1, + bitmap1_offset, + bitmap2, + bitmap2_offset, + position=easing_function(target_position), + horizontal=horizontal, + ) + display.auto_refresh = True + else: + + draw_position( + target_bitmap, + bitmap1, + bitmap1_offset, + bitmap2, + bitmap2_offset, + position=end_position, + horizontal=horizontal, + ) + + break + display.auto_refresh = True + display.auto_refresh = True + + +class FlipInput(Widget, Control): + def __init__( + self, + display, + value_list=None, + font=None, + color=0xFFFFFF, + value=0, # initial value, index into the value_list + debug=False, + arrow_touch_padding=0, # touch padding on the arrow sides of the Widget + arrow_color=None, + arrow_outline=None, + arrow_height=None, + arrow_width=None, + alt_touch_padding=0, # touch padding on the non-arrow sides of the Widget + horizontal=True, + animation_time=None, + easing_mode=None, + **kwargs, + ): + + super().__init__(**kwargs, max_size=5) + # Group elements for the FlipInput. + # 1. The text + # 2. The group holding the temporary scroll bitmap + # 3. Up arrow: Triangle + # 4. Down arrow: Triangle + + # initialize the Control superclass + super(Control, self).__init__() + + self.value_list = value_list + self._value = value + + self._color = color + self._font = font + # preload the glyphs + + self._arrow_touch_padding = arrow_touch_padding + self._alt_touch_padding = alt_touch_padding + + self._horizontal = horizontal + self._display = display + + self._animation_time = animation_time + + self._easing_mode = easing_mode + + # `easing_dict` is the mapping function for the easing_mode string input + # and translating to the "easing" animation motion functions, see `widgets/easing.py` + easing_dict = { + "linear": [easing.LinearInterpolation, easing.LinearInterpolation], + "quadratic": [easing.QuadraticEaseIn, easing.QuadraticEaseOut], + "cubic": [easing.CubicEaseIn, easing.CubicEaseOut], + "quartic": [easing.QuarticEaseIn, easing.QuarticEaseOut], + "quintic": [easing.QuinticEaseIn, easing.QuinticEaseOut], + "sine": [easing.SineEaseIn, easing.SineEaseOut], + "circular": [easing.CircularEaseIn, easing.CircularEaseOut], + "exponential": [easing.ExponentialEaseIn, easing.ExponentialEaseOut], + "elastic": [easing.ElasticEaseInOut, easing.ElasticEaseInOut], + "back": [easing.BackEaseIn, easing.BackEaseOut], + "bounce": [easing.BounceEaseIn, easing.BounceEaseOut], + } + + print("easing_mode: {}".format(self._easing_mode)) + try: + self._easing_functions = easing_dict[ + (self._easing_mode).lower() + ] # convert to lower case + except: # default to Linear interpolation + print("easing_mode not found: Defaulting to LinearInterpolation.") + self._easing_functions = [ + easing.LinearInterpolation, + easing.LinearInterpolation, + ] + + # Find the maximum bounding box of the text and determine the baseline (x,y) start point (top, left) + + left = None + right = None + top = None + bottom = None + + for this_value in value_list: + xposition = 0 + + for i, character in enumerate(this_value): + glyph = self._font.get_glyph(ord(character)) + + if ( + i == 0 + ): # if it's the first character in the string, check the left value + if left is None: + left = glyph.dx + else: + left = min(left, glyph.dx) + + if right is None: + right = max( + xposition + glyph.dx + glyph.width, xposition + glyph.shift_x + ) + else: + right = max( + right, + xposition + glyph.dx + glyph.width, + xposition + glyph.shift_x, + ) # match bitmap_label + + if top is None: + top = -(glyph.height + glyph.dy) + else: + top = min(top, -(glyph.height + glyph.dy)) + + if bottom is None: + bottom = -glyph.dy + else: + bottom = max(bottom, -glyph.dy) + + xposition = xposition + glyph.shift_x + # print("left, right, top, bottom: {},{}, {},{}, new x_position".format(left,right,top,bottom, xposition)) + + self._bounding_box = [0, 0, right - left, bottom - top] + # print("bounding_box: {}".format(self._bounding_box)) + + # Create the text label + + self._label = bitmap_label.Label( + text=value_list[value], + font=self._font, + color=self._color, + base_alignment=True, + background_tight=True, + ) + self._label.x = -left + self._label.y = -top + + self.append(self._label) # add the label to the self Group + + # self._update_value(self._value) + + # set the touch_boundary including the touch_padding + + if ( + horizontal + ): # horizontal orientation, add arrow padding to x-dimension and alt_padding to y-dimension + self.touch_boundary = [ + self._bounding_box[0] - self._arrow_touch_padding, + self._bounding_box[1] - self._alt_touch_padding, + self._bounding_box[2] + 2 * self._arrow_touch_padding, + self._bounding_box[3] + 2 * self._alt_touch_padding, + ] + else: # vertical orientation, add arrow padding to y-dimension and alt_padding to x-dimension + self.touch_boundary = [ + self._bounding_box[0] - self._alt_touch_padding, + self._bounding_box[1] - self._arrow_touch_padding, + self._bounding_box[2] + 2 * self._alt_touch_padding, + self._bounding_box[3] + 2 * self._arrow_touch_padding, + ] + + # create the Up/Down arrows + + self._update_position() # call Widget superclass function to reposition + + if debug: # show the touch_bounding box + from adafruit_display_shapes.rect import Rect + + self._rect = Rect( + self.touch_boundary[0], + self.touch_boundary[1], + self.touch_boundary[2], + self.touch_boundary[3], + fill=0x222222, + ) + self.append(self._rect) + + self._animation_group = displayio.Group( + max_size=1 + ) # holds the animation bitmap + self._animation_group.hidden = True + self.append(self._animation_group) + + # Add the two arrow triangles, if required + + if (arrow_color is not None) or (arrow_outline is not None): + gap = 5 # of pixel gap above/below label + + if horizontal: # horizontal orientation, add left and right arrows + if arrow_height is None: + arrow_height = self._bounding_box[3] + if arrow_width is None: + arrow_width = arrow_touch_padding + + if arrow_width > 0: + mid_point_y = self._bounding_box[1] + self._bounding_box[3] // 2 + self.append( + Triangle( + self._bounding_box[0] - gap, + mid_point_y - arrow_height // 2, + self._bounding_box[0] - gap, + mid_point_y + arrow_height // 2, + self._bounding_box[0] - gap - arrow_width, + mid_point_y, + fill=arrow_color, + outline=arrow_outline, + ) + ) + + self.append( + Triangle( + self._bounding_box[0] + self._bounding_box[2] + gap, + mid_point_y - arrow_height // 2, + self._bounding_box[0] + self._bounding_box[2] + gap, + mid_point_y + arrow_height // 2, + self._bounding_box[0] + + self._bounding_box[2] + + gap + + arrow_width, + mid_point_y, + fill=arrow_color, + outline=arrow_outline, + ) + ) + else: # vertical orientation, add upper and lower arrows + if arrow_height is None: + arrow_height = arrow_touch_padding + if arrow_width is None: + arrow_width = self._bounding_box[2] + + if arrow_height > 0: + mid_point_x = self._bounding_box[0] + self._bounding_box[2] // 2 + self.append( + Triangle( + mid_point_x - arrow_width // 2, + self._bounding_box[1] - gap, + mid_point_x + arrow_width // 2, + self._bounding_box[1] - gap, + mid_point_x, + self._bounding_box[1] - gap - arrow_height, + fill=arrow_color, + outline=arrow_outline, + ) + ) + self.append( + Triangle( + mid_point_x - arrow_width // 2, + self._bounding_box[1] + self._bounding_box[3] + gap, + mid_point_x + arrow_width // 2, + self._bounding_box[1] + self._bounding_box[3] + gap, + mid_point_x, + self._bounding_box[1] + + self._bounding_box[3] + + gap + + arrow_height, + fill=arrow_color, + outline=arrow_outline, + ) + ) + + # Draw function of the current value + + def _update_value(self, new_value, animate=True): + + if ( + (self._animation_time is not None) + and (self._animation_time > 0) # If animation is required + and (animate) + ): + + if ((new_value - self.value) == 1) or ( + (self.value == (len(self.value_list) - 1)) and (new_value == 0) + ): # wrap around + start_position = 0.0 + end_position = 1.0 + else: + start_position = 1.0 + end_position = 0.0 + + self._display.auto_refresh = False + + gc.collect() + + # create the animation bitmap + animation_bitmap = displayio.Bitmap( + self._bounding_box[2], self._bounding_box[3], 2 + ) # color depth 2 + + # print("bounding_box: {}".format(self._bounding_box)) + palette = displayio.Palette(2) + palette.make_transparent(0) + palette[1] = self._color + animation_tilegrid = displayio.TileGrid( + animation_bitmap, pixel_shader=palette + ) + + # print("1 self._label.x,y: {},{} bitmap width, height: {}, {}, label.tilegrid x,y: {},{}".format(self._label.x, self._label.y, self._label.bitmap.width, self._label.bitmap.height, self._label.tilegrid.x, self._label.tilegrid.y)) + + # blit current value bitmap into the animation bitmap + # animation_bitmap.blit(0, 0, self._label.bitmap) + # add bitmap to the animation_group + self._animation_group.append(animation_tilegrid) + + # store away the initial starting bitmap + start_bitmap = displayio.Bitmap( + self._label.bitmap.width, self._label.bitmap.height, 2 + ) # color depth 2 + start_bitmap.blit(0, 0, self._label.bitmap) + # get the bitmap1 position offsets + bitmap1_offset = [ + self._label.x + self._label.tilegrid.x, + self._label.y + self._label.tilegrid.y, + ] + + # hide the label group. + self.pop(0) + + # update the value label and get the bitmap offsets + self._label.text = str(self.value_list[new_value]) + bitmap2_offset = [ + self._label.x + self._label.tilegrid.x, + self._label.y + self._label.tilegrid.y, + ] + + # animate between old and new bitmaps + animate_bitmap( + display=self._display, + target_bitmap=animation_bitmap, + bitmap1=start_bitmap, + bitmap1_offset=bitmap1_offset, + bitmap2=self._label.bitmap, + bitmap2_offset=bitmap2_offset, + start_position=start_position, + end_position=end_position, + animation_time=self._animation_time, + horizontal=self._horizontal, + easing_functions=self._easing_functions, + ) + + # unhide the label group + self.insert(0, self._label) + + # hide the animation group + self._animation_group.pop() + # free up memory + del animation_bitmap + del start_bitmap + gc.collect() + + # ensure the display will auto_refresh (likely redundant) + self._display.auto_refresh = True + + else: # Update with no animation + self._display.auto_refresh = False + self._label.text = str(self.value_list[new_value]) + self._display.auto_refresh = True + self._update_position() # call Widget superclass function to reposition + + def contains(self, touch_point): # overrides, then calls Control.contains(x,y) + """Returns True if the touch_point is within the widget's touch_boundary.""" + + ###### + # + # IMPORTANT: The touch_point should be adjusted to local coordinates, by + # offsetting for self.x and self.y before calling the Control superclass function + # + ###### + touch_x = ( + touch_point[0] - self.x + ) # adjust touch position for the local position + touch_y = touch_point[1] - self.y + + return super().contains((touch_x, touch_y, 0)) + + def selected(self, touch_point): + """Response function when Control is selected. Increases value when upper half is pressed + and decreases value when lower half is pressed.""" + + # Adjust for local position of the widget using self.x and self.y + + tb = self.touch_boundary + + if self._horizontal: + if ( + tb[0] <= (touch_point[0] - self.x) < (tb[0] + tb[2] // 2) + ): # in left half of touch_boundary + self.value = self.value - 1 + + elif ( + (tb[0] + tb[2] // 2) <= (touch_point[0] - self.x) <= (tb[0] + tb[2]) + ): # in right half of touch_boundary + self.value = self.value + 1 + + else: + if ( + tb[1] <= (touch_point[1] - self.y) < (tb[1] + tb[3] // 2) + ): # in upper half of touch_boundary + self.value = self.value + 1 + + elif ( + (tb[1] + tb[3] // 2) <= (touch_point[1] - self.y) <= (tb[1] + tb[3]) + ): # in lower half of touch_boundary + self.value = self.value - 1 + + @property + def value(self): + return self._value + + @value.setter + def value(self, new_value): # Set the value based on the index or on the string. + if isinstance(new_value, str): # for an input string, search the value_list + try: + new_value = self.value_list.index(new_value) + except ValueError: + print( + 'ValueError: Value "{}" not found in value_list.'.format(new_value) + ) + return + + new_value = new_value % len(self.value_list) # Update the value + if new_value != self._value: + self._update_value(new_value) + self._value = new_value diff --git a/adafruit_displayio_layout/widgets/switch_round.py b/adafruit_displayio_layout/widgets/switch_round.py new file mode 100644 index 0000000..6fba2df --- /dev/null +++ b/adafruit_displayio_layout/widgets/switch_round.py @@ -0,0 +1,788 @@ +# SPDX-FileCopyrightText: 2021 Kevin Matocha +# +# SPDX-License-Identifier: MIT +""" + +`switch_round` +================================================================================ +CircuitPython GUI Round Sliding Switch Widget + +* Author(s): Kevin Matocha + +Implementation Notes +-------------------- + +**Hardware:** + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +################################ +# A round switch widget for CircuitPython, using displayio and adafruit_display_shapes +# +# Features: +# - Color grading as the switch animates between the off and on states +# - Option to display 0 or 1 to confirm the switch state (display_button_text=True) +# - Provides setting for animation_time (approximate), and adapts redraw rate based on real time. +# +# Future options to consider: +# --------------------------- +# different orientations (horizontal, vertical, flipped) +# + +import time +from adafruit_display_shapes.circle import Circle +from adafruit_display_shapes.roundrect import RoundRect +from adafruit_display_shapes.rect import Rect +from adafruit_displayio_layout.widgets.widget import Widget +from adafruit_displayio_layout.widgets.control import Control +from adafruit_displayio_layout.widgets.easing import BackEaseInOut as easing + +__version__ = "0.0.0-auto.0" +__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_Layout.git" + + +class SwitchRound(Widget, Control): + """A horizontal sliding switch widget. + + :param int x: pixel position, defaults to 0 + :param int y: pixel position, defaults to 0 + :param int width: width of the switch in pixels, if set to None (**recommended**) + the width will auto-size relative to the height, defaults to None + :param int height: height of the switch in pixels, defaults to 40 pixels + :param int touch_padding: the width of an additional border surrounding the switch + that extends the touch response boundary, defaults to 0 + :param Boolean horizontal: To set vertical orientation, set ``horizontal`` + to False, defaults to True + :param Boolean flip: Setting ``flip`` to True will flip the on and off + direction, default is True + :param float anchor_point: (X,Y) values from 0.0 to 1.0 to define the anchor + point relative to the switch bounding box, default is None + :param int anchored_position: (x,y) pixel value for the location + of the anchor_point, default is None + :param fill_color_off: (*RGB tuple + or 24-bit hex value*) switch off-state fill color, default is ``(66, 44, 66)`` gray. + :param fill_color_on: (*RGB tuple + or 24-bit hex value*) switch on-state fill color, default is ``(0, 100, 0)`` green. + :param outline_color_off: (*RGB tuple + or 24-bit hex value*) switch off-state outline color, default is ``(30, 30, 30)`` + dark gray. + :param outline_color_on: (*RGB tuple + or 24-bit hex value*) switch on-state outline color, default is ``(0, 60, 0)`` green + :param background_color_off: (*RGB tuple + or 24-bit hex value*) background off-state color, default is ``(255, 255, 255)`` white + :param background_color_on: (*RGB tuple + or 24-bit hex value*) background on-state color, default is ``(0, 60, 0)`` dark green + :param background_outline_color_off: (*RGB tuple + or 24-bit hex value*) background outline color in off-state, if set to None this + will default to ``background_color_off``, default is None + :param background_outline_color_on: (*RGB tuple + or 24-bit hex value*) background outline color in on-state, if set to None this + will default to ``background_color_on``, default is None + :param int switch_stroke: outline stroke width for the switch and background, + in pixels, default is 2 + :param int text_stroke: outline stroke width (in pixels) for the 0/1 text shape + outlines, if set to None it will use the value for ``switch_stroke``, default + value is None + :param Boolean display_button_text: Set True to display the 0/1 text shapes + on the sliding switch, set False to hide the 0/1 text shapes, default value is True + :param float animation_time: time for the switching animation, in seconds, default + value is 0.2 seconds. + :param Boolean value: the initial value for the switch, default is False + + **SwitchRound Features** + + The `SwitchRound` widget is a sliding switch that changes state whenever it is + touched. The color gradually changes from the off-state color scheme to the + on-state color scheme as the switch transfers from off to the on position. + The switch has an optional display of "0" and "1" on the sliding switch. The + switch can be oriented using the ``horizontal`` input variable, and the sliding + direction can be changed using the ``flip`` input variable. The duration of + animation between on/off can be set using the ``animation_time`` input variable. + Regarding switch sizing, it is recommended to set the height dimension but to + leave the width as None. Setting width to None will allow the width to resize + to maintain a recommended aspect ration of width/height. Alternately, the switch + can be resized using the `resize` command, and it will adjust the width and height + to the maximum size that will fit inside the requested width and height dimensions, + while keeping the preferred aspect ratio. To make the switch easier to be selected, + additional padding around the switch can be defined using the ``touch_padding`` input + variable to increase the touch-responsive area. + + The following sections provide details on the construction of the switch + as an introductory guide to using the `Widget` and `Control` classes for create + touch-responsive graphical user interface widgets. + + **Details of the SwitchRound widget** + + The `SwitchRound` widget is a graphical element that responds to touch elements + to provide sliding switch on/off behavior. Whenever touched, the switch toggles + to its alternate value. The following sections describe the construction of the + `SwitchRound` widget, in the hopes that it will serve as a first example of the key + properties and responses for widgets. + + The `SwitchRound` widget inherits from two classes, it is a subclass of Group->Widget + and a subclass of Control. The `Widget` class helps define the positioning and + sizing of the switch, while the `Control` class defines the touch-response behavior. + + **Group structure: Display elements that make up SwitchRound** + + The Widget is a subclass of ``displayio.Group``, thus we can append graphical + elements to the Widget for displaying on the screen. The switch consists of the + following graphical elements: + + 0. switch_roundrect: The switch background + 1. switch_circle: The switch button that slides back and forth + 2. Optional: text_0: The "0" circle shape on the switch button + 3. Optional: text_1: The "1" rectangle shape on the switch button + + The optional text items can be displayed or hidden using the ``display_button_text`` + input variable. + + **Coordinate systems and use of anchor_point and anchored_position** + + See the `Widget` class definition for clarification on the methods for positioning + the switch, including the difference in the display coordinate system and the Widget's + local coordinate system. + + **The Widget construction sequence** + + Here is the set of steps that are used to define this switch widget. + + 1. Initialize the stationary items + 2. Initialize the moving display elements + 3. Store initial position of the moving display elements + 4. Define "keyframes" to determine the translation vector + 5. Define the ``_draw_position`` function between 0.0 to 1.0 (and slightly beyond) + 6. Select the motion "easing" function + 7. **Extra**. Go check out the ``_animate_switch`` method + + First, the stationary background rounded rectangle (RoundRect is created). Second, + the moving display elements are created, the circle for the switch, the circle for + the text "0" and the rectangle for the text "1". Note that either the "0" or "1" is + set as hidden, depending upon the switch value. Third, we store away the + initial position of the three moving elements, these initial values will be used in the + functions that move these display elements. Next, we define the motion of the + moving element, by setting the ``self._x_motion`` and ``self._y_motion`` values + that depending upon the ``horizontal`` and ``flip`` variables. These motion variables + set the two "keyframes" for the moving elements, basically the endpoints of the switch + motion. (Note: other widgets may need an ``_angle_motion`` variable if they require + some form of rotation.) Next, we define the ``_draw_function`` method. This method + takes an input between 0.0 and 1.0 and adjusts the position relative to the motion + variables, where 0.0 is the initial position and 1.0 represents the final position + (as defined by the ``_x_motion`` and ``_y_motion`` values). In the case of the + sliding switch, we also use this ``position`` value (0.0 to 1.0) to gradually + grade the color of the components between their "on" and "off" colors. + + **Making it move** + + Everything above has set the ground rules for motion, but doesn't cause it to move. + However, you have set almost all the pieces in place to respond to requests to change + the position. All that is left is the **Extra** method that performs the animation, + called ``_animate_switch``. The ``animate_switch`` method is triggered by a touch + event through the ``selected`` Control class method. Once triggered, this method + checks how much time has elapsed. Based on the elapsed time and the ``animation_time`` + input variable, the ``animate_switch`` function calculates the ``position`` where + the switch should be. Then, it takes this ``position`` to call the ``_draw_position`` + method that will update the display elements based on the requested position. + + But there's even one more trick to the animation. The ``animate_switch`` calculates + the target position based on a linear relationship between the time and the position. + However, to give the animation a better "feel", it is desirable to tweak the motion + function depending upon how this widget should behave or what suits your fancy. To + do this we can use an "easing" function. In short, this adjusts the constant speed + (linear) movement to a variable speed during the movement. Said another way, it + changes the position versus time function according to a specific waveform equation. + There are a lot of different "easing" functions that folks have used or you can make + up your own. Some common easing functions are provided in the ``easing.py`` file. + You can change the easing function based on changing which function is imported + at the top of this file. You can see where the position is tweaked by the easing + function in the line in the ``_animate_switch`` method: + + .. code-block::python + + self._draw_position(easing(position)) # update the switch position + + Go play around with the different easing functions and observe how the motion + behavior changes. You can use these functions in multiple dimensions to get all + varieties of behavior that you can take advantage of. Here's a good website + that lets you visualize some of the behavior of the easing functions: + . Note: Some of the "springy" easing functions have values + slightly below 0.0 and slightly above 1.0, so if you want to use these, be sure + to check that your ``_draw_position`` method behaves itself for that larger range + of position inputs. + + **Orientation and a peculiarity of width and height definitions for SwitchRound** + + In setting the switch sizing, use height and width to set the narrow and wide + dimension of the switch. To try and reduce confusion, the orientation is modified + after the height and width are selected. That is, if the switch is set to vertical, + the height and still mean the "narrow" and the width will still mean the dimensions + in the direction of the sliding. + + If you need the switch to fit within a specific bounding box, it's preferred to use + the ``resize`` function. This will put the switch (in whatever orientation) at the + maximum size where it can fit within the bounding box that you specified. The switch + aspect ratio will remain at the "preferred" aspect ratio of of 2:1 (width to height) + after the resizing. + + **Setting the touch response boundary** + + The touch response area is defined by the Control class variable called + ``touch_boundary``. In the case of the `SwitchRound` widget, we provide an + ``touch_padding`` input variable. The use of ``touch_padding`` defines an + additional number of pixels surrounding the display elements that respond to touch + events. To achieve this additional space, the ``touch_boundary`` increases in size + in all dimensions by the number of pixels specified in the ``touch_padding`` parameter. + + The ``touch_boundary`` is used in the Control function ``contains`` that checks + whether any touch_points are within the boundary. Please pay particular attention to + the `SwitchRound` contains function, since it calls the `Control.contains` superclass + function with the touch_point value adjusted for the switch's ``.x`` and ``.y`` values. + This offset adjustment is required since the `Control.contains` function operates only + on the widget's local coordinate system. It's good to keep in mind which coordinate + system you are working in, so you'll write your code to respond to the right inputs! + + **Summary** + + The `SwitchRound` widget is an example to explain the use of the `Widget` and `Control` + class functions. The `Widget` class handles the overall sizing and positioning function + and is the group that holds all the graphical elements. The `Control` class is used to + define the response of the widget to touch events (or could be generalized to other + inputs). Anything that only displays (such as a graph or an indicator light) won't + need to inherit the `Control` class. But anything that responds to touch inputs should + inherit the `Control` class to define the ``touch_boundary`` and the touch response + functions. + + I hope this `SwitchRound` widget will help turn on some new ideas and highlight some + of the new capabilities of the `Widget` and `Control` classes. Now go see what else + you can create and extend from here! + + **A Final Word** + + The design of the Widget and Control classes are open for inputs. If you think + an addition or change will be useful, add it and please submit a pull request so + other can use it too! Also, keep in mind you don't even need to follow these classes + to get the job done. The Widget and Class definitions are designed to give guidance + about one way to make things work, and try to share some code. If it's standing in + your way, do something else! If you want to use the ``grid_layout`` or other layout tools + in this library, you only *really* need to have methods for positioning and resizing. + **Don't let any of these class definitions hold you back, let your imagination run + wild and make some cool widgets!** + + + """ + + # pylint: disable=too-many-instance-attributes, too-many-arguments, too-many-locals + # pylint: disable=too-many-branches, too-many-statements + + def __init__( + self, + x=0, + y=0, + width=None, # recommend to default to + height=40, + touch_padding=0, + horizontal=True, # horizontal orientation + flip=False, # flip the direction of the switch movement + anchor_point=None, + anchored_position=None, + fill_color_off=(66, 44, 66), + fill_color_on=(0, 100, 0), + outline_color_off=(30, 30, 30), + outline_color_on=(0, 60, 0), + background_color_off=(255, 255, 255), + background_color_on=(0, 60, 0), + background_outline_color_off=None, # default to background_color_off + background_outline_color_on=None, # default to background_color_on + switch_stroke=2, + text_stroke=None, # default to switch_stroke + display_button_text=True, + animation_time=0.2, # animation duration (in seconds) + value=False, # initial value + **kwargs, + ): + + # initialize the Widget superclass (x, y, scale) + super().__init__(x=x, y=y, height=height, width=width, **kwargs, max_size=4) + # Define how many graphical elements will be in this group + # using "max_size=XX" + # + # Group elements for SwitchRound: + # 0. switch_roundrect: The switch background + # 1. switch_circle: The switch button + # 2. Optional: text_0: The "0" circle on the switch button + # 3. Optional: text_1: The "1" rectangle on the switch button + + # initialize the Control superclass + + # pylint: disable=bad-super-call + super(Control, self).__init__() + + self._horizontal = horizontal + self._flip = flip + + # height and width internal variables are treated before considering rotation + self._height = self.height + self._radius = self.height // 2 + + # If width is not provided, then use the preferred aspect ratio + if self._width is None: + self._width = 4 * self._radius + else: + self._width = self.width + print('width set!') + + if background_outline_color_off is None: + background_outline_color_off = background_color_off + if background_outline_color_on is None: + background_outline_color_on = background_color_on + + self._fill_color_off = fill_color_off + self._fill_color_on = fill_color_on + self._outline_color_off = outline_color_off + self._outline_color_on = outline_color_on + self._background_color_off = background_color_off + self._background_color_on = background_color_on + self._background_outline_color_off = background_outline_color_off + self._background_outline_color_on = background_outline_color_on + + self._switch_stroke = switch_stroke + + if text_stroke is None: + text_stroke = switch_stroke # width of lines for the (0/1) text shapes + self._text_stroke = text_stroke + + self._display_button_text = display_button_text + # state variable whether (0/1) text shapes is displayed + + self._touch_padding = touch_padding + + self._animation_time = animation_time + + self._value = value + + self._anchor_point = anchor_point + self._anchored_position = anchored_position + + self._create_switch() + + def _create_switch(self): + # The main function that creates the switch display elements + + switch_x = self._radius + switch_y = self._radius + + # Define the motion "keyframes" that define the switch movement + if self._horizontal: # horizontal switch orientation + self._x_motion = self._width - 2 * self._radius - 1 + self._y_motion = 0 + + else: # vertical orientation + self._x_motion = 0 + self._y_motion = self._width - 2 * self._radius - 1 + + self._angle_motion = 0 + + if self._flip: + self._x_motion = -1 * self._x_motion + self._y_motion = -1 * self._y_motion + self._angle_motion = -1 * self._angle_motion + + # Initialize the display elements - These should depend upon the + # orientation (`horizontal` and `flip`) + # + # Initialize the Circle + + circle_x0 = switch_x + circle_y0 = switch_y + + if self._flip: + circle_x0 = circle_x0 - self._x_motion + circle_y0 = circle_y0 - self._y_motion + + self._switch_circle = Circle( + x0=circle_x0, + y0=circle_y0, + r=self._radius, + fill=self._fill_color_off, + outline=self._outline_color_off, + stroke=self._switch_stroke, + ) + + # Initialize the RoundRect for the background + if self._horizontal: # Horizontal orientation + self._switch_roundrect = RoundRect( + x=switch_x - self._radius, + y=switch_y - self._radius, + r=self._radius, + width=self._width, + height=2 * self._radius + 1, + fill=self._background_color_off, + outline=self._background_outline_color_off, + stroke=self._switch_stroke, + ) + else: # Vertical orientation + self._switch_roundrect = RoundRect( + x=switch_x - self._radius, + y=switch_y - self._radius, + r=self._radius, + width=2 * self._radius + 1, + height=self._width, + fill=self._background_color_off, + outline=self._background_outline_color_off, + stroke=self._switch_stroke, + ) + + # The "0" text circle shape + self._text_0 = Circle( + x0=circle_x0, + y0=circle_y0, + r=self._radius // 2, + fill=self._fill_color_off, + outline=self._outline_color_off, + stroke=self._text_stroke, + ) + + # The "1" text rectangle shape + text1_x_offset = (-1 * self._switch_stroke) + 1 + text1_y_offset = -self._radius // 2 + + self._text_1 = Rect( + x=circle_x0 + text1_x_offset, + y=circle_y0 + text1_y_offset, + height=self._radius, + width=self._text_stroke, + fill=self._fill_color_off, + outline=self._outline_color_off, + stroke=self._text_stroke, + ) + + # bounding_box defines the "local" x and y. + # Must be offset by self.x and self.y to get the raw display coordinates + # + if self._horizontal: # Horizontal orientation + self._bounding_box = [ + 0, + 0, + self._width, + 2 * self._radius + 1, + ] + else: # Vertical orientation + self._bounding_box = [ + 0, + 0, + 2 * self._radius + 1, + self._width, + ] + + self.touch_boundary = [ + self._bounding_box[0] - self._touch_padding, + self._bounding_box[1] - self._touch_padding, + self._bounding_box[2] + 2 * self._touch_padding, + self._bounding_box[3] + 2 * self._touch_padding, + ] + + # Store initial positions of moving elements to be used in _draw_function + self._switch_initial_x = self._switch_circle.x + self._switch_initial_y = self._switch_circle.y + + self._text_0_initial_x = self._text_0.x + self._text_0_initial_y = self._text_0.y + self._text_1_initial_x = self._text_1.x + self._text_1_initial_y = self._text_1.y + + # Set the initial switch position based on the starting value + if self._value: + self._draw_position(1) + else: + self._draw_position(0) + + # pop any items off the current self group, in case this is updating + # an existing switch + for _ in range(len(self)): + self.pop() + + # Add the display elements to the self group + self.append(self._switch_roundrect) + self.append(self._switch_circle) + + # If display_button_text is True, append the correct text element (0 or 1) + if self._display_button_text: + self.append(self._text_0) + self.append(self._text_1) + if self._value: + self._text_0.hidden = True + self._text_1.hidden = False + else: + self._text_0.hidden = False + self._text_1.hidden = True + + # update the anchor position, if required + # this calls the parent Widget class to update the anchored_position + # due to any changes that might have occurred in the bounding_box + self._update_position() + + def _get_offset_position(self, position): + # Function to calculate the offset position (x, y, angle) of the moving + # elements of an animated widget. Designed to be flexible depending upon + # the widget's desired response. + # + # The input parameter `position` is a value from 0.0 to 1.0 indicating the + # start (0.0) and end (1.0) positions. + # + # For this linear translation, the following values are set in __init__: + # self._x_motion: x-direction movement in pixels + # self._y_motion: y-direction movement in pixels + # self._angle_motion: angle movement + + # This defines the tranfer function between position and motion. + # for switch, this is a linear translation function, rotation is actually ignored. + # Alternate functions (log, power, exponential) could be used + x_offset = int(self._x_motion * position) + y_offset = int(self._y_motion * position) + angle_offset = self._angle_motion * position + + return x_offset, y_offset, angle_offset + + def _draw_position(self, position): + # Draw the position of the slider. + # The position parameter is a float between 0 and 1 (0= off, 1= on). + + # Get the position offset from the motion function + x_offset, y_offset, _ = self._get_offset_position( + position + ) # ignore angle_offset + + # Update the switch and text x- and y-positions + self._switch_circle.x = self._switch_initial_x + x_offset + self._switch_circle.y = self._switch_initial_y + y_offset + self._text_0.x = self._text_0_initial_x + x_offset + self._text_0.y = self._text_0_initial_y + y_offset + self._text_1.x = self._text_1_initial_x + x_offset + self._text_1.y = self._text_1_initial_y + y_offset + + # Set the color to the correct fade + self._switch_circle.fill = _color_fade( + self._fill_color_off, self._fill_color_on, position + ) + self._switch_circle.outline = _color_fade( + self._outline_color_off, self._outline_color_on, position + ) + + self._switch_roundrect.fill = _color_fade( + self._background_color_off, self._background_color_on, position + ) + self._switch_roundrect.outline = _color_fade( + self._background_outline_color_off, + self._background_outline_color_on, + position, + ) + + self._text_0.fill = self._switch_circle.fill + self._text_1.fill = self._switch_circle.fill + self._text_0.outline = self._switch_circle.outline + self._text_1.outline = self._switch_circle.outline + + if self._display_button_text and position >= 0.5: + self._text_0.hidden = True + self._text_1.hidden = False + + elif self._display_button_text and position < 0.5: + self._text_0.hidden = False + self._text_1.hidden = True + + def _animate_switch(self): + # The animation function for the switch. + # 1. Move the switch + # 2. Update the self._value to the opposite of its current value. + # + # Depending upon your widget's animation requirements, + # you can change this function to control the acceleration + # and motion of your element. + # + # Key animation feature: + # - Uses the timer to control the speed of the motion. This ensure + # that the movement speed will be the same on different boards. + # + + start_time = time.monotonic() # set the starting time for animation + + while True: + + # Determines the direction of movement, depending upon if the + # switch is going from on->off or off->on + + # constrain the elapsed time + elapsed_time=time.monotonic()-start_time + if elapsed_time > self._animation_time: + elapsed_time = self._animation_time + + if self._value: + position = ( + 1 - (elapsed_time) / self._animation_time + ) # fraction from 0 to 1 + else: + position = ( + elapsed_time + ) / self._animation_time # fraction from 0 to 1 + + # Update the moving elements based on the current position + # apply the "easing" function to the requested position to adjust motion + self._draw_position(easing(position)) # update the switch position + + # update the switch value once the motion is complete + if (position >= 1) and not self._value: + self._value = True + break + if ( + position <= 0 + ) and self._value: # ensures that the final position is drawn + self._value = False + break + + def selected(self, touch_point): + """Response function when Switch is selected. When selected, the switch + position and value is changed with an animation. + + :param touch_point: x,y location of the screen, in absolute display coordinates. + :return: None + + """ + + self._animate_switch() # show the animation and switch the self._value + + touch_x = ( + touch_point[0] - self.x + ) # adjust touch position for the local position + touch_y = touch_point[1] - self.y + + # Call the parent's .selected function in case there is any work up there. + # touch_point is adjusted for group's x,y position before sending to super() + super().selected((touch_x, touch_y, 0)) + + def contains(self, touch_point): # overrides, then calls Control.contains(x,y) + """Checks if the Widget was touched. Returns True if the touch_point + is within the Control's touch_boundary. + + :param touch_point: x,y location of the screen, in absolute display coordinates. + :return: Boolean + + """ + touch_x = ( + touch_point[0] - self.x + ) # adjust touch position for the local position + touch_y = touch_point[1] - self.y + + return super().contains((touch_x, touch_y, 0)) + + @property + def value(self): + """The current switch value (Boolean). + + :return: Boolean + """ + return self._value + + @value.setter + def value(self, new_value): + if new_value != self._value: + fake_touch_point = [0, 0, 0] # send an arbitrary touch_point + self.selected(fake_touch_point) + + @property + def width(self): + return self._width + + @width.setter + def width(self, new_width): + if self._width is None: + self._width = 4 * self._radius + else: + self._width = new_width + self._create_switch() + + @property + def height(self): + return self._height + + @height.setter + def height(self, new_height): + self._height = new_height + self._radius = new_height // 2 + self._create_switch() + + def resize(self, new_width, new_height): + """Resize the switch to a new requested width and height. + + :param int new_width: requested maximum width + :param int new_height: requested maximum height + :return: None + + """ + # Fit the new button size within the requested maximum width/height + # dimensions, but keeping an aspect ratio of 2:1 (width:height) + + # Swap dimensions when orientation is vertical: "horizontal=False" + if not self._horizontal: + new_width, new_height = new_height, new_width + + # calculate the preferred target width based on new_height and 2:1 aspect ratio + preferred_width = new_height * 2 + + if preferred_width <= new_width: # the new_height is the constraint + self._height = new_height + self._width = preferred_width + else: # the new_width is the constraint + self._height = new_width // 2 # keep 2:1 aspect ratio + self._width = new_width + + self._radius = self._height // 2 + + self._create_switch() + + +###### color support functions ###### + + +def _color_to_tuple(value): + """Converts a color from a 24-bit integer to a tuple. + :param value: RGB LED desired value - can be a RGB tuple or a 24-bit integer. + """ + if isinstance(value, tuple): + return value + if isinstance(value, int): + if value >> 24: + raise ValueError("Only bits 0->23 valid for integer input") + r = value >> 16 + g = (value >> 8) & 0xFF + b = value & 0xFF + return [r, g, b] + + raise ValueError("Color must be a tuple or 24-bit integer value.") + + +def _color_fade(start_color, end_color, fraction): + """Linear extrapolation of a color between two RGB colors (tuple or 24-bit integer). + :param start_color: starting color + :param end_color: ending color + :param fraction: Floating point number ranging from 0 to 1 indicating what + fraction of interpolation between start_color and end_color. + """ + + start_color = _color_to_tuple(start_color) + end_color = _color_to_tuple(end_color) + if fraction >= 1: + return end_color + if fraction <= 0: + return start_color + + faded_color = [0, 0, 0] + for i in range(3): + faded_color[i] = start_color[i] - int( + (start_color[i] - end_color[i]) * fraction + ) + return faded_color diff --git a/adafruit_displayio_layout/widgets/widget.py b/adafruit_displayio_layout/widgets/widget.py new file mode 100644 index 0000000..d687bd9 --- /dev/null +++ b/adafruit_displayio_layout/widgets/widget.py @@ -0,0 +1,301 @@ +# SPDX-FileCopyrightText: 2021 Kevin Matocha, Tim Cocks +# +# SPDX-License-Identifier: MIT + +""" +`widget` +================================================================================ + +CircuitPython GUI Widget Class for visual elements + +* Author(s): Kevin Matocha + +Implementation Notes +-------------------- + +**Hardware:** + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +import displayio + +__version__ = "0.0.0-auto.0" +__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_Layout.git" + +# pylint: disable=too-many-arguments + + +class Widget(displayio.Group): + """ + A Widget class definition for graphical display elements. The Widget handles + the sizing and positioning of the widget. + + :param int x: pixel position + :param int y: pixel position + :param int width: width of the widget in pixels, set to None to auto-size relative to + the height + :param int height: height of the widget in pixels + :param anchor_point: (X,Y) values from 0.0 to 1.0 to define the anchor point relative to the + widget bounding box + :type anchor_point: Tuple[float,float] + :param int anchored_position: (x,y) pixel value for the location of the anchor_point + :type anchored_position: Tuple[int, int] + + + .. figure:: gui_layout_coordinates.png + :scale: 50 % + :alt: Diagram of layout coordinates + + Diagram showing the global and local coordinate systems and the Widget's + associated class variables. + + **Widget Class Positioning: Display vs. Local Coordinates** + + The Widget class is used to define the position and size of the graphical elements + that define the widget. + The Widget is a subclass of `displayio.Group` and inherits the positioning elements + of `displayio.Group`, including *x*, *y* (in pixels). If the Widget is directly added + to the display, then the *.x* and *.y* positions refer to the pixel position on + the display. (Note: If the Widget is actually held within another Group, then the *.x* + and *.y* of the widget are in that Group's local coordinate system.) + + This Widget coordinate system is illustrated in the diagram above, showing the + coordinate systems of a sliding switch widget. The display's origin (x=0, y=0) + is at the upper left corner of the display. In this example the display size is + 320 x 240 pixels, so the display's bottom right corner is at display coordinates + (x=320, y=240). The upper left corner of the widget is labeled notionally as + *widget.x* and *widget.y* is set at the display pixel position of (x=100, y=50). + + + **Local Coordinates: bounding_box** + + Other parameters defined in the Widget class use a "local" coordinate system, as + indicated by the red text in the display. These include `bounding_box` and + *touch_boundary*. The `bounding_box` defines the origin of a Widget is at the upper + left corner of the key graphical element of the widget and is set to (0,0) in + widget local coordinates. The `width` and `height` of the `bounding_box` are + defined as the pixel distances that make a mininum box that contains the key + graphical elements of the widget. In the case of this example, the width is + 100 pixels and the height is 40 pixels. (Note: If a label is included for a + widget, the label should not be included in the `bounding_box`.) + + **Local Coordinates: touch_boundary (inherited from `Control` class)** + This example of a sliding switch reacts to touch using the addition of + inheritance from the `Control` class, so additional dimensional parameters are + included for that class definition. Similar to the definition of + the `bounding_box`, the *touch_boundary* is also defined using the widget's + local coordinate system. + + As shown in the diagram, we see that the *touch_boundary* is larger than the + `bounding_box`. The *touch_boundary* should likely be larger than the + `bounding_box` since finger touches are not precise. The use of additional + space around the widget ensures that the widget reacts when the touch is close + enough. In the case of this example, the switch widget provides a *touch_padding* + option to define additional space around the `bounding_box` where touches are + accepted (with the `Control.contains()` function). Looking at the example, we + see that the upper left corner of the *touch_boundary* is (x=-10, y=-10) in widget + local coordinates. This means that the accepted touch boundary starts at 10 pixels + up and 10 pixels left of the upper left corner of the widget. The *touch_boundary* + is 120 pixels wide and 60 pixels high. This confirms that a 10 pixel *touch_padding* + was used, giving additional 10 pixels around the `bounding_box`. Note: If you are + building your own new widgets, the *touch_boundary* tuple can be adjusted directly to + meet whatever needs your widget needs. The *touch_boundary* is used in the + `Control.contains()` function to determine when the Control-type widget was touched. + + Note: If a widget does not need to respond to touches (for example a display of a + value), then it should not inherit the `Control` class, and thus will not have a + *touch_boundary*. + + **Positioning on the screen: Using x and y or anchor_point and anchored_position** + + The Widget class has several options for setting the widget position on the screen. + In the simplest case, you can define the widget's *.x* and *.y* properties to set + the position. (**Reminder**: If your widget is directly shown by the display using + *display.show(my_widget)*), then the *.x* and *.y* positions will be in the display's + coordinate system. But if your widget is held inside of another Group, then its + coordinates will be in that Group's coordinate system.) + + The Widget class definition also allows for relative positioning on the screen using + the combination of `anchor_point` and `anchored_position`. This method is useful + when you want your widget to be centered or aligned along one of its edges. + + A good example of the use of `anchor_point` and `anchored_position` is in the + `Adafruit "Candy Hearts" learn guide + `_ + related to text positioning. + + The `anchor_point` is a Tuple (float, float) that corresponds to the fractional + position of the size of the widget. The upper left corner being + `anchor_point` =(0.0, 0.0) and the lower right corner being `anchor_point` =(1.0, 1.0). + The center of the widget is then `anchor_point` =(0.5, 0.5), halfway along the + x-size and halfway along the y-size. One more example, the center of the bottom + edge is (0.5, 1.0), halfway along the x-size and all the way of the y-size. + + Once you define the `anchor_point`, you can now set the `anchored_position`. The + `anchored_position` is the pixel dimension location where you want to put the + `anchor_point`. To learn from example, let's say I want to place my widget so + its bottom right corner is at the bottom right of my display (assume 320 x 240 + pixel size display). + + First, I want to define the widget reference point to be the bottom right corner of + my widget, so I'll set `anchor_point` =(1.0,1.0). Next, I want that anchor point + on the widget to be placed at the bottom right corner of my display, so I'll set + `anchored_position` =(320,240). In essence, the `anchor_point` is defining the + reference ("anchor") point on the widget (but in relative widget-sized dimensions + using x,y floats between 0.0 and 1.0) and then places that `anchor_point` at the + pixel location specified as the `anchored_position` in pixel dimensions + (x, y are in pixel units on the display). + + The reason for using `anchor_point` is so that you + don't need to know the width or height of the widget in advance, you can use + `anchor_point` and it will always adjust for the widget's height and width to + set the position at the `anchored_position` pixel position. + + In summary: + - `anchor_point` is x,y tuple (floats) of the relative size of the widget. Upper left + corner is (0.0, 0.0) and lower right is (1.0, 1.0). + - `anchored_position` is in x,y tuple (ints) pixel coordinates where the `anchor_point` + will be placed. + + """ + + def __init__( + self, + x=0, + y=0, + scale=1, + width=None, + height=None, + anchor_point=None, + anchored_position=None, + **kwargs, + ): + + super().__init__(x=x, y=y, scale=scale, **kwargs) + # send x,y and scale to Group + # **kwargs should include `max_size`from the subclass implementation + # to define how many graphical elements will be held in the Group that + # makes up this widget + # + # If scale is set > 1, will need to update the Control `touch_boundary` + # to accommodate the larger scale + + self._width = width + self._height = height + self._anchor_point = anchor_point + self._anchored_position = anchored_position + + # self._bounding_box: pixel extent of the widget [x0, y0, width, height] + # The bounding box should be updated based on the specifics of the widget + if (width is not None) and (height is not None): + self._bounding_box = [0, 0, width, height] + else: + self._bounding_box = [0, 0, 0, 0] + + self._update_position() + + def resize(self, new_width, new_height): + """Resizes the widget dimensions (for use with automated layout functions). + + **IMPORTANT:** The `resize` function should be overridden by the subclass definition. + + The width and height are provided together so the subclass `resize` + function can apply any constraints that require consideration of both width + and height (such as maintaining a Widget's preferred aspect ratio). The Widget should + be resized to the maximum size that can fit within the dimensions defined by + the requested *new_width* and *new_height*. After resizing, the Widget's + `bounding_box` should also be updated. + + :param int new_width: target maximum width (in pixels) + :param int new_height: target maximum height (in pixels) + :return: None + + """ + self._width = new_width + self._height = new_height + + self._bounding_box[2] = new_width + self._bounding_box[3] = new_height + + def _update_position(self): + """ + Widget class function for updating the widget's *x* and *y* position based + upon the `anchor_point` and `anchored_position` values. The subclass should + call `_update_position` after the widget is resized. + + :return: None + """ + + if (self._anchor_point is not None) and (self._anchored_position is not None): + self.x = ( + self._anchored_position[0] + - int(self._anchor_point[0] * self._bounding_box[2]) + - self._bounding_box[0] + ) + self.y = ( + self._anchored_position[1] + - int(self._anchor_point[1] * self._bounding_box[3]) + - self._bounding_box[1] + ) + + @property + def width(self): + """The widget width, in pixels. (getter only) + + :return: int + """ + return self._width + + @property + def height(self): + """The widget height, in pixels. (getter only) + + :return: int + """ + return self._height + + @property + def bounding_box(self): + """The boundary of the widget. [x, y, width, height] in Widget's local + coordinates (in pixels). (getter only) + + :return: Tuple[int, int, int, int]""" + return self._bounding_box + + @property + def anchor_point(self): + """The anchor point for positioning the widget, works in concert + with `anchored_position` The relative (X,Y) position of the widget where the + anchored_position is placed. For example (0.0, 0.0) is the Widget's upper left corner, + (0.5, 0.5) is the Widget's center point, and (1.0, 1.0) is the Widget's lower right corner. + + :param anchor_point: In relative units of the Widget size. + :type anchor_point: Tuple[float, float]""" + return self._anchor_point + + @anchor_point.setter + def anchor_point(self, new_anchor_point): + self._anchor_point = new_anchor_point + self._update_position() + + @property + def anchored_position(self): + """The anchored position (in pixels) for positioning the widget, works in concert + with `anchor_point`. The `anchored_position` is the x,y pixel position + for the placement of the Widget's `anchor_point`. + + :param anchored_position: The (x,y) pixel position for the anchored_position (in pixels). + :type anchored_position: Tuple[int, int] + + """ + return self._anchored_position + + @anchored_position.setter + def anchored_position(self, new_anchored_position): + self._anchored_position = new_anchored_position + self._update_position() diff --git a/adafruit_displayio_layout/widgets/widget_annotation.py b/adafruit_displayio_layout/widgets/widget_annotation.py new file mode 100755 index 0000000..6ba0ed4 --- /dev/null +++ b/adafruit_displayio_layout/widgets/widget_annotation.py @@ -0,0 +1,150 @@ +# The MIT License (MIT) +# +# Copyright (c) 2021 Kevin Matocha +# +# 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. +# +################################ +# + +import time +import displayio + +from adafruit_displayio_layout.widgets.widget import Widget +from adafruit_display_shapes.line import Line +from adafruit_display_text import bitmap_label + + +class WidgetAnnotation(Widget): + """A widget to be used to annotate other widgets with text and lines. + :param Widget widget: the widget to be annotated, all dimensions are relative to + this widget. The annotation position on the widget can be defined by either + the `anchor_point` (in relative dimensions of the size of the widget) + or the `anchored_position` (in raw pixel dimensions relative to the origin + of the widget). + :param str text: text to be displayed in the annotation. + :param Font font: font to be used for the text. + :param anchor_point: starting point for the annotation line, where `anchor_point` is an + (A,B) tuple in relative units of the size of the widget, + for example (0.0, 0.0) is the upper left corner, and (1.0, 1.0) is the lower + right corner of the widget. If `anchor_point` is `None`, then `anchored_position` + is used to set the annotation line starting point (in widget size relative units). + :type anchor_point: Tuple[float, float] + :param anchored_position: starting point for the annotation line where + `anchored_position` is an (x,y) tuple in pixel units relative to the + upper left corner of the widget. (in pixel units) + :type anchored_position: Tuple[int, int] + :param position_offset: an (x,y) pixel offset added to the annotation line starting + point, either set by `anchor_point` or `anchored_position` (in pixel units). + :type position_offset: Tuple[int, int] + :param int delta_x: the x-offset for the second end of the line where the text + will reside (in pixel units). + :param int delta_y: the y-offset for the second end of the line where the text + will reside (in pixel units). + :param int stroke: the annotation line width (in pixels). [NOT currently implemented] + :param int line_color: the color of the annotation line (in RGB 0xFFFFFF values). + :param int text_color: the color of the text, if set to `None` color will be + set to `line_color` (in RGB 0xFFFFFF values). + :param text_offset: a (x,y) pixel offset to adjust text position relative + to annotation line (in pixel units). + :type text_offset: Tuple[int, int] + :param Boolean text_under: set `True` for text to be placed below the + annotation line. + """ + + def __init__( + self, + widget, # widget for placement + text=None, + font=None, + delta_x=-15, # line dimension, x-distance + delta_y=-10, # line dimension, y-distance + anchor_point=None, # Choose anchor_point (A,B) or anchored_position (x,y), relative to widget dimensions + anchored_position=None, + position_offset=(0, 0), # Add a pixel offset to line point 0 + stroke=1, # line width, not currently implemented in adafruit_display_shapes/line.py + line_color=0xFFFFFF, # line color + text_color=None, # text color + text_offset=(0, -1), # move text by this many pixels + text_under=False, # set True to put text underneath + ): + + if font is None: # use the default built in font + import terminalio + + font = terminalio.FONT + + widget_width = widget.bounding_box[2] + widget_height = widget.bounding_box[3] + if anchor_point is not None: + line_x0 = ( + widget.x + round(widget_width * anchor_point[0]) + position_offset[0] + ) + line_y0 = ( + widget.y + round(widget_height * anchor_point[1]) + position_offset[1] + ) + elif anchored_position is not None: + line_x0 = widget.x + anchored_position[0] + position_offset[0] + line_y0 = widget.y + anchored_position[1] + position_offset[1] + else: + raise ValueError("Must supply either anchor_point or anchored_position") + + line_x1 = line_x0 + delta_x + line_y1 = line_y0 + delta_y + + text_anchor_point = (0.0, 1.0) # bottom left corner + underline_x_multiplier = 1 + + if delta_x < 0: + text_anchor_point = (1.0, 1.0) # set to right corner + underline_x_multiplier = -1 + + if ( + text_under + ): # if text is under the line, set to text_anchor_point to upper edge + text_anchor_point = (text_anchor_point[0], 0.0) + + if text_color is None: + text_color = line_color + + self._label = bitmap_label.Label( + text=text, + font=font, + color=text_color, + anchor_point=text_anchor_point, + anchored_position=(line_x1 + text_offset[0], line_y1 + text_offset[1]), + ) + + label_width = self._label.bounding_box[2] + line_x2 = line_x1 + label_width * underline_x_multiplier + text_offset[0] + # lengthen the line if the text is offset + line_y2 = line_y1 + + self._line0 = Line(line_x0, line_y0, line_x1, line_y1, color=line_color) + self._line1 = Line(line_x1, line_y1, line_x2, line_y2, color=line_color) + + super().__init__(max_size=3) + # Group elements: + # 0. Line0 + # 1. Line1 + # 2. Label + + self.append(self._line0) + self.append(self._line1) + self.append(self._label) diff --git a/adafruit_displayio_layout/widgets/widget_label.py b/adafruit_displayio_layout/widgets/widget_label.py new file mode 100755 index 0000000..5a892ca --- /dev/null +++ b/adafruit_displayio_layout/widgets/widget_label.py @@ -0,0 +1,75 @@ +# The MIT License (MIT) +# +# Copyright (c) 2021 Kevin Matocha (kmatch98) +# +# 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. +# +# +# CircuitPython GUI Widget Class for visual elements +# +# Properties: +# - name +# - font +# - anchor_point +# - anchor_point_on_widget + +from adafruit_display_text import bitmap_label + + +class WidgetLabel(bitmap_label.Label): + """A WidgetLabel class to connect a label to a widget. + The ``anchor_point`` and ``anchor_point_on_widget`` along with + the widget's ``bounding_box`` are used to position the label.""" + + def __init__( + self, + font, + Widget, + anchor_point_on_widget=None, + **kwargs, + ): + + super().__init__(font, text=Widget.name, **kwargs) + + self.anchor_point_on_widget = anchor_point_on_widget + self.update_label_position(Widget.bounding_box) + Widget.append(self) + + # Widget label position is adjusted so that the ``anchor_point`` on the label + # is set to the ``anchor_point_on_widget`` location. This function requires + # the widget's ``bounding_box`` as a parameter. + def update_label_position(self, bounding_box): + + if ( + (bounding_box is None) + or (self.anchor_point is None) + or (self.anchor_point_on_widget) is None + ): + pass + + else: + x0 = bounding_box[0] + y0 = bounding_box[1] + width = bounding_box[2] + height = bounding_box[3] + + anchored_position_x = x0 + int(width * self.anchor_point_on_widget[0]) + anchored_position_y = y0 + int(height * self.anchor_point_on_widget[1]) + + self.anchored_position = (anchored_position_x, anchored_position_y) diff --git a/docs/api.rst b/docs/api.rst index abb3a79..5053c44 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -6,3 +6,17 @@ .. automodule:: adafruit_displayio_layout.layouts.grid_layout :members: + +.. automodule:: adafruit_displayio_layout.widgets.widget + :members: + :private-members: + :member-order: bysource + +.. automodule:: adafruit_displayio_layout.widgets.control + :members: + :member-order: bysource + +.. automodule:: adafruit_displayio_layout.widgets.switch_round + :members: + :inherited-members: + :member-order: bysource diff --git a/docs/conf.py b/docs/conf.py index 66f9f43..f1b4027 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -8,6 +8,7 @@ import sys sys.path.insert(0, os.path.abspath("..")) +sys.path.append("/Users/margaret/Documents/GitHub/Adafruit_CircuitPython_Display_Shapes/") # -- General configuration ------------------------------------------------ diff --git a/docs/gui_layout_coordinates.png b/docs/gui_layout_coordinates.png new file mode 100644 index 0000000..d3fda33 Binary files /dev/null and b/docs/gui_layout_coordinates.png differ diff --git a/examples/code - example with Switch Dial and WidgetAnnotation.py b/examples/code - example with Switch Dial and WidgetAnnotation.py new file mode 100755 index 0000000..f6c7c38 --- /dev/null +++ b/examples/code - example with Switch Dial and WidgetAnnotation.py @@ -0,0 +1,231 @@ +############### +# This is a trial of the Dial and the Widget_Annotation +# for use on the PyPortal +# + +import time +import board +import displayio +from adafruit_displayio_layout.widgets.switch_round import SwitchRound as Switch +from adafruit_displayio_layout.widgets.dial import Dial +from adafruit_displayio_layout.widgets.widget_annotation import WidgetAnnotation +from adafruit_bitmap_font import bitmap_font +import adafruit_touchscreen + +screen_width = 320 +screen_height = 240 + +# setup the touchscreen +ts = adafruit_touchscreen.Touchscreen( + board.TOUCH_XL, + board.TOUCH_XR, + board.TOUCH_YD, + board.TOUCH_YU, + calibration=((5200, 59000), (5800, 57000)), + size=(screen_width, screen_height), +) + +glyphs = "0123456789" + +# Font used for the Dial value indicator +font_file = "fonts/DSEG7Classic-Regular-60.bdf" +my_font = bitmap_font.load_font(font_file) +# preload the number glyphs to reduce jitter during Dial value updates +my_font.load_glyphs(glyphs) + +# Font used for the Dial tick labels +font_file2 = "fonts/Helvetica-Bold-16.bdf" +my_font2 = bitmap_font.load_font(font_file2) + +# Font used for the WidgetAnnotation +font_file3 = "fonts/BitstreamVeraSans-Oblique-10.bdf" +annotation_font = bitmap_font.load_font(font_file3) +# annotation_font=my_font2 + +display = board.DISPLAY # create the display on the PyPortal, +# otherwise change this to setup the display +# for display chip driver and pinout you have (e.g. ILI9341) + + +# Create a Dial widget +my_dial = Dial( + width=247, + padding=10, + sweep_angle=180, + needle_width=9, # best if this is an odd number + major_ticks=5, + major_tick_stroke=3, + minor_ticks=5, + minor_tick_stroke=1, + anchor_point=(0.5, 1), + anchored_position=[screen_width // 2, screen_height - 70], + value=0, + value_font=my_font, + value_color=0xBB5500, + display_value=True, + rotate_tick_labels=True, + major_tick_labels=["0", "25", "50", "75", "100"], + tick_label_scale=1.0, + tick_label_font=my_font2, + label_anchor_on_widget=(0.5, 0.65), +) + +# Create a Switch widget +my_switch = Switch( + name="Annotation", + x=screen_width // 2 - 40, + y=screen_height - 55, + height=50, + display_button_text=True, + touch_padding=10, + value=False, +) + +my_group = displayio.Group(max_size=4) +annotation_group = displayio.Group(max_size=10) + +print("\n\nAbout to display...") + +my_group.append(my_dial) +my_group.append(my_switch) +my_group.append(annotation_group) + +annotation_color = 0xBBBBBB # gray color for annotation line and text + +# Add a few WidgetAnnotations on the dial +annotation = WidgetAnnotation( + my_dial, + text="rotate_tick_labels", + font=annotation_font, + line_color=annotation_color, + delta_x=-5, + delta_y=-10, + anchor_point=(0.18, 0.33), + position_offset=(0, 0), + text_offset=(20, -1), +) + +annotation2 = WidgetAnnotation( + my_dial, + text="tick label", + font=annotation_font, + line_color=annotation_color, + delta_x=+20, + delta_y=-5, + anchor_point=(0.8, 0.38), + position_offset=(5, -7), + text_offset=(3, -1), +) + +annotation3 = WidgetAnnotation( + my_dial, + text="Origin (0,0)", + font=annotation_font, + line_color=annotation_color, + delta_x=+20, + delta_y=-15, + anchored_position=(0, 0), + position_offset=(0, 0), + text_offset=(3, -1), +) + +annotation4 = WidgetAnnotation( + my_dial, + text="major tick", + font=annotation_font, + line_color=annotation_color, + delta_x=+40, + delta_y=-45, + anchor_point=(0.51, 0.25), + position_offset=(0, 0), + text_offset=(10, -1), +) + +annotation5 = WidgetAnnotation( + my_dial, + text="needle", + font=annotation_font, + line_color=annotation_color, + delta_x=+20, + delta_y=15, + anchored_position=(125, 120), + position_offset=(0, 0), + text_offset=(3, 1), + text_under=True, +) + +annotation6 = WidgetAnnotation( + my_dial, + text="minor tick", + font=annotation_font, + line_color=annotation_color, + delta_x=round(40 * 0.7), + delta_y=round(-45 * 0.7), + anchor_point=(0.62, 0.28), + position_offset=(0, 0), + text_offset=(5, 1), + text_under=True, +) + +annotation7 = WidgetAnnotation( + my_dial, + text="value", + font=annotation_font, + line_color=annotation_color, + delta_x=-45, + delta_y=25, + anchored_position=(120, 105), + text_offset=(-1, 1), + text_under=True, +) + +# Add the Dial annotates to the annotation_group +annotation_group.append(annotation) +annotation_group.append(annotation2) +annotation_group.append(annotation3) +annotation_group.append(annotation4) +annotation_group.append(annotation5) +annotation_group.append(annotation6) +annotation_group.append(annotation7) + +annotation_group.hidden = True # overcome a bug if you set group.hidden = True before +# appending group content + +display.show(my_group) # add high level Group to the display +annotation_group.hidden = not my_switch.value +display.auto_refresh = True +display.refresh() + +while True: + # start_time=time.monotonic() + + for i in range(0, 100, 2): + + p = ts.touch_point + # print("touch_point p: {}".format(p)) + if p: # if touched, check if switch was triggered + if my_switch.contains(p): + my_switch.selected(p) + annotation_group.hidden = not my_switch.value + + display.auto_refresh = False + my_dial.value = i + display.auto_refresh = True + display.refresh() + time.sleep(0.005) # small delay seems to improve touch response + + for i in range(100, 0, -8): + p = ts.touch_point + # print("touch_point p: {}".format(p)) + if p: # if touched, check if switch was triggered + if my_switch.contains(p): + my_switch.selected(p) + annotation_group.hidden = not my_switch.value + + display.auto_refresh = False + my_dial.value = i + display.auto_refresh = True + display.refresh() + time.sleep(0.005) # small delay seems to improve touch response + # end_time=time.monotonic() + # print("One cycle: {} seconds".format(end_time-start_time)) diff --git a/examples/displayio_layout_flip_input_simpletest.py b/examples/displayio_layout_flip_input_simpletest.py new file mode 100755 index 0000000..7203996 --- /dev/null +++ b/examples/displayio_layout_flip_input_simpletest.py @@ -0,0 +1,116 @@ +############### +# This is a trial of the Dial and the Widget_Annotation +# for use on the PyPortal +# + +import time +import board +import displayio +from adafruit_displayio_layout.widgets.flip_input import FlipInput + +from adafruit_bitmap_font import bitmap_font +import adafruit_touchscreen + +display = board.DISPLAY # create the display on the PyPortal, +# otherwise change this to setup the display +# for display chip driver and pinout you have (e.g. ILI9341) + +# setup the touchscreen +ts = adafruit_touchscreen.Touchscreen( + board.TOUCH_XL, + board.TOUCH_XR, + board.TOUCH_YD, + board.TOUCH_YU, + calibration=((5200, 59000), (5800, 57000)), + size=(display.width, display.height), +) + +# Select the font file for use +font_file = "fonts/DSEG14Classic-Regular-64-ModS.bdf" +my_font = bitmap_font.load_font(font_file) + +my_flip1 = FlipInput( + anchor_point=[0.0, 0.0], + anchored_position=[10, 40], + color=0xFF2222, + value_list=[ + "JAN", + "FEB", + "MAR", + "APR", + "MAY", + "JUN", + "JUL", + "AUG", + "SEP", + "OCT", + "NOV", + "DEC", + ], + font=my_font, + arrow_touch_padding=40, + arrow_color=0x333333, + arrow_outline=0x444444, + arrow_height=20, + arrow_width=30, + horizontal=False, +) + +my_flip2 = FlipInput( + anchor_point=[0.0, 0.0], + anchored_position=[180, 40], + color=0xFF2222, + value_list=["{0:02d}".format(x) for x in range(1, 31 + 1)], + font=my_font, + arrow_touch_padding=40, + arrow_color=0x333333, + arrow_outline=0x444444, + arrow_height=20, + arrow_width=30, + horizontal=False, +) + +my_flip3 = FlipInput( + anchor_point=[0.5, 1.0], + anchored_position=[320 // 2, 240 - 10], + color=0xFF2222, + value_list=["{0:02d}".format(x) for x in range(1985, 2022, 1)], + font=my_font, + arrow_touch_padding=40, + arrow_color=0x333333, + arrow_outline=0x444444, + arrow_height=30, + arrow_width=20, + horizontal=True, +) + +my_flip1.value = my_flip1.value_list.index("OCT") +my_flip2.value = my_flip2.value_list.index("15") +my_flip3.value = my_flip3.value_list.index("2015") + +# Create the group to display and append the FlipInput widgets +my_group = displayio.Group(max_size=3) +my_group.append(my_flip1) +my_group.append(my_flip2) +my_group.append(my_flip3) + +display.show(my_group) # add high level Group to the display +display.auto_refresh = True + +while True: + + p = ts.touch_point + # print("touch_point p: {}".format(p)) # print the touch point + + if p: # if touched, check if any of the widgets was triggered + if my_flip1.contains(p): + my_flip1.selected(p) + time.sleep(0.15) # add a short delay to reduce accidental press + elif my_flip2.contains(p): + my_flip2.selected(p) + time.sleep(0.15) # add a short delay to reduce accidental press + elif my_flip3.contains(p): + my_flip3.selected(p) + time.sleep(0.15) # add a short delay to reduce accidental press + + time.sleep(0.01) # small delay seems to improve touch response diff --git a/examples/displayio_layout_switch_multiple.py b/examples/displayio_layout_switch_multiple.py new file mode 100755 index 0000000..770c39f --- /dev/null +++ b/examples/displayio_layout_switch_multiple.py @@ -0,0 +1,136 @@ +# This is a trial of the sliding switch +# for use on the PyPortal +# + +import time +import board +import displayio +import adafruit_touchscreen +from adafruit_displayio_layout.widgets.switch_round import SwitchRound as Switch + +display = board.DISPLAY + +# setup the touch screen +ts = adafruit_touchscreen.Touchscreen( + board.TOUCH_XL, + board.TOUCH_XR, + board.TOUCH_YD, + board.TOUCH_YU, + calibration=((5200, 59000), (5800, 57000)), + size=(display.width, display.height), +) + + +# Create the switches + +my_switch = Switch(20, 30) + +my_switch2 = Switch( + x=120, + y=35, + height=30, # Set height to 30 pixels. If you do not specify width, + # it is automatically set to a default aspect ratio + touch_padding=10, # add extra boundary for touch response + value=True, +) # initial value is set to True + +my_switch3 = Switch( + x=20, + y=85, + height=40, + fill_color_off=(255, 0, 0), # Set off colorred, can use hex code (0xFF0000) + outline_color_off=(80, 0, 0), + background_color_off=(150, 0, 0), + background_outline_color_off=(30, 0, 0), +) + +my_switch4 = Switch( + x=120, + y=85, + height=40, + width=110, # you can set the width manually but it may look weird +) + +my_switch5 = Switch( + x=20, + y=140, + height=40, + display_button_text=False, # do not show the 0/1 on the switch +) + +my_switch6 = Switch( + x=120, + y=140, + height=40, + horizontal=False, # set orientation to vertical +) + +my_switch7 = Switch( + x=180, + y=140, + height=40, + horizontal=False, # set orientation to vertical + flip=True, # swap the direction +) + +my_switch8 = Switch( + x=0, + y=0, # this is a larger, vertical orientation switch + height=60, + horizontal=False, # set orientation to vertical + flip=True, # swap the direction +) +# use anchor_point and anchored_position to set the my_switch8 position +# relative to the display size. +my_switch8.anchor_point = (1.0, 1.0) +# the switch anchor_point is the bottom right switch corner +my_switch8.anchored_position = (display.width - 10, display.height - 10) +# the switch anchored_position is 10 pixels from the display +# lower right corner + +my_group = displayio.Group(max_size=8) +my_group.append(my_switch) +my_group.append(my_switch2) +my_group.append(my_switch3) +my_group.append(my_switch4) +my_group.append(my_switch5) +my_group.append(my_switch6) +my_group.append(my_switch7) +my_group.append(my_switch8) + +# Add my_group to the display +display.show(my_group) + + +# Start the main loop +while True: + + p = ts.touch_point # get any touches on the screen + + if p: # Check each switch if the touch point is within the switch touch area + # If touched, then flip the switch with .selected + if my_switch.contains(p): + my_switch.selected(p) + + elif my_switch2.contains(p): + my_switch2.selected(p) + + elif my_switch3.contains(p): + my_switch3.selected(p) + + elif my_switch4.contains(p): + my_switch4.selected(p) + + elif my_switch5.contains(p): + my_switch5.selected(p) + + elif my_switch6.contains(p): + my_switch6.selected(p) + + elif my_switch7.contains(p): + my_switch7.selected(p) + + elif my_switch8.contains(p): + my_switch8.selected(p) + + time.sleep(0.05) # touch response on PyPortal is more accurate with a small delay diff --git a/examples/displayio_layout_switch_simpletest.py b/examples/displayio_layout_switch_simpletest.py new file mode 100644 index 0000000..a74903e --- /dev/null +++ b/examples/displayio_layout_switch_simpletest.py @@ -0,0 +1,42 @@ +# This is a trial of the sliding switch +# for use on the PyPortal +# + +import time +import board +import displayio +import adafruit_touchscreen +from adafruit_displayio_layout.widgets.switch_round import SwitchRound as Switch + +display = board.DISPLAY + +ts = adafruit_touchscreen.Touchscreen( + board.TOUCH_XL, + board.TOUCH_XR, + board.TOUCH_YD, + board.TOUCH_YU, + calibration=((5200, 59000), (5800, 57000)), + size=(display.width, display.height), +) + +# Create the switch +my_switch = Switch(20, 30) + + +my_group = displayio.Group(max_size=1) +my_group.append(my_switch) + +# Add my_group to the display +display.show(my_group) + +# Start the main loop +while True: + + p = ts.touch_point # get any touches on the screen + + if p: # Check each switch if the touch point is within the switch touch area + # If touched, then flip the switch with .selected + if my_switch.contains(p): + my_switch.selected(p) + + time.sleep(0.05) # touch response on PyPortal is more accurate with a small delay diff --git a/examples/fonts/BitstreamVeraSans-Oblique-10.bdf b/examples/fonts/BitstreamVeraSans-Oblique-10.bdf new file mode 100755 index 0000000..96abdf0 --- /dev/null +++ b/examples/fonts/BitstreamVeraSans-Oblique-10.bdf @@ -0,0 +1,3635 @@ +STARTFONT 2.1 +FONT -FontForge-Bitstream Vera Sans-Book-O-Normal-Sans--10-100-75-75-P-59-ISO10646-1 +SIZE 10 75 75 +FONTBOUNDINGBOX 16 12 -3 -2 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved." +STARTPROPERTIES 41 +FOUNDRY "FontForge" +FAMILY_NAME "Bitstream Vera Sans" +WEIGHT_NAME "Book" +SLANT "O" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "Sans" +PIXEL_SIZE 10 +POINT_SIZE 100 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "P" +AVERAGE_WIDTH 59 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO8859-9 ISO10646-1" +FONT_NAME "BitstreamVeraSans-Oblique" +FACE_NAME "Bitstream Vera Sans Oblique" +COPYRIGHT "Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved." +FONT_VERSION "Release 1.10" +FONT_ASCENT 8 +FONT_DESCENT 2 +UNDERLINE_POSITION -1 +UNDERLINE_THICKNESS 1 +X_HEIGHT 4 +CAP_HEIGHT 6 +RAW_ASCENT 759 +RAW_DESCENT 240 +ITALIC_ANGLE 5056 +NORM_SPACE 3 +RELATIVE_WEIGHT 40 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 0 +SUPERSCRIPT_Y 2 +SUPERSCRIPT_SIZE 5 +SUBSCRIPT_X 0 +SUBSCRIPT_Y -2 +SUBSCRIPT_SIZE 5 +FIGURE_WIDTH 6 +AVG_LOWERCASE_WIDTH 56 +AVG_UPPERCASE_WIDTH 67 +ENDPROPERTIES +CHARS 268 +STARTCHAR space +ENCODING 32 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 3 7 0 0 +BITMAP +20 +20 +40 +40 +40 +00 +80 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 459 0 +DWIDTH 5 0 +BBX 3 3 1 4 +BITMAP +A0 +A0 +A0 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +14 +28 +7E +28 +FC +50 +50 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 8 0 -1 +BITMAP +10 +38 +60 +60 +18 +28 +F0 +20 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 950 0 +DWIDTH 10 0 +BBX 8 7 1 0 +BITMAP +62 +A4 +A8 +D3 +15 +25 +46 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 779 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +18 +24 +20 +52 +8C +88 +74 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 274 0 +DWIDTH 3 0 +BBX 1 3 1 4 +BITMAP +80 +80 +80 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 390 0 +DWIDTH 4 0 +BBX 4 9 1 -1 +BITMAP +10 +20 +40 +C0 +80 +80 +80 +80 +40 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 390 0 +DWIDTH 4 0 +BBX 4 9 -1 -1 +BITMAP +20 +10 +10 +10 +10 +30 +20 +40 +80 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 4 0 3 +BITMAP +A8 +70 +70 +A8 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 7 7 1 0 +BITMAP +10 +10 +10 +FE +10 +10 +10 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 2 2 -1 -1 +BITMAP +40 +80 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 360 0 +DWIDTH 4 0 +BBX 3 1 0 2 +BITMAP +E0 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 1 1 0 0 +BITMAP +80 +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 5 8 -1 -1 +BITMAP +08 +10 +10 +20 +20 +40 +40 +80 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +30 +48 +88 +88 +88 +90 +60 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 4 7 0 0 +BITMAP +70 +10 +10 +30 +20 +20 +F0 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 -1 0 +BITMAP +38 +44 +04 +08 +30 +40 +F8 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 -1 0 +BITMAP +3C +44 +04 +38 +04 +84 +78 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +08 +18 +30 +50 +F8 +20 +20 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +78 +40 +70 +08 +08 +18 +F0 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +38 +40 +C0 +B8 +C8 +88 +70 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +F8 +10 +10 +20 +20 +40 +80 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +38 +44 +44 +38 +C8 +88 +70 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +70 +88 +88 +F8 +18 +10 +E0 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 2 5 0 0 +BITMAP +40 +00 +00 +00 +80 +ENDCHAR +STARTCHAR semicolon +ENCODING 59 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 3 6 -1 -1 +BITMAP +20 +00 +00 +00 +40 +80 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +04 +38 +C0 +38 +04 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 3 1 2 +BITMAP +FC +00 +FC +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 5 1 1 +BITMAP +80 +70 +0C +70 +80 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 530 0 +DWIDTH 5 0 +BBX 4 7 1 0 +BITMAP +F0 +10 +20 +40 +40 +00 +80 +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 9 9 1 -2 +BITMAP +1E00 +2180 +4080 +8E80 +9380 +9F00 +8000 +4200 +3C00 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 7 -1 0 +BITMAP +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 686 0 +DWIDTH 7 0 +BBX 6 7 0 0 +BITMAP +3C +24 +44 +78 +44 +84 +F8 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 698 0 +DWIDTH 7 0 +BBX 7 7 0 0 +BITMAP +3C +62 +C0 +80 +80 +84 +78 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 770 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3C +22 +42 +42 +42 +84 +F8 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 631 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +3C +20 +40 +78 +40 +80 +F8 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 575 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +3C +20 +40 +78 +40 +80 +80 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 774 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3C +62 +C0 +8E +82 +84 +7C +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 751 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +21 +21 +42 +7E +42 +84 +84 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 3 7 0 0 +BITMAP +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 4 9 -2 -2 +BITMAP +10 +10 +10 +20 +20 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 655 0 +DWIDTH 7 0 +BBX 6 7 0 0 +BITMAP +24 +28 +50 +60 +50 +88 +84 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 557 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +20 +20 +40 +40 +40 +80 +F8 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 862 0 +DWIDTH 8 0 +BBX 8 7 0 0 +BITMAP +21 +23 +56 +5A +52 +84 +84 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 748 0 +DWIDTH 7 0 +BBX 7 7 0 0 +BITMAP +22 +22 +54 +54 +54 +88 +88 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 603 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +3C +24 +44 +78 +40 +80 +80 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 8 0 -1 +BITMAP +3C +42 +82 +82 +82 +84 +78 +08 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 694 0 +DWIDTH 7 0 +BBX 6 7 0 0 +BITMAP +3C +24 +44 +78 +48 +88 +84 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 7 7 0 0 +BITMAP +3C +42 +40 +38 +04 +84 +78 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 610 0 +DWIDTH 6 0 +BBX 7 7 1 0 +BITMAP +FE +10 +20 +20 +20 +40 +40 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 731 0 +DWIDTH 7 0 +BBX 6 7 1 0 +BITMAP +44 +44 +84 +88 +88 +88 +70 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 7 1 0 +BITMAP +82 +84 +88 +48 +50 +50 +60 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 988 0 +DWIDTH 10 0 +BBX 9 7 1 0 +BITMAP +8880 +9900 +9900 +AA00 +A600 +4400 +4400 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 685 0 +DWIDTH 7 0 +BBX 7 7 0 0 +BITMAP +22 +24 +18 +10 +28 +48 +84 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 610 0 +DWIDTH 6 0 +BBX 6 7 1 0 +BITMAP +84 +48 +50 +20 +20 +40 +40 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 685 0 +DWIDTH 7 0 +BBX 7 7 0 0 +BITMAP +7E +04 +08 +10 +20 +40 +FC +ENDCHAR +STARTCHAR bracketleft +ENCODING 91 +SWIDTH 390 0 +DWIDTH 4 0 +BBX 4 9 0 -1 +BITMAP +30 +20 +40 +40 +40 +40 +40 +80 +C0 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 2 8 1 -1 +BITMAP +80 +80 +80 +80 +40 +40 +40 +40 +ENDCHAR +STARTCHAR bracketright +ENCODING 93 +SWIDTH 390 0 +DWIDTH 4 0 +BBX 4 9 0 -1 +BITMAP +30 +10 +20 +20 +20 +20 +20 +40 +C0 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 3 1 4 +BITMAP +30 +48 +84 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 1 0 -2 +BITMAP +F8 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 1 6 +BITMAP +80 +40 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 8 0 0 +BITMAP +20 +20 +40 +5C +64 +44 +CC +B8 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 549 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +78 +C0 +80 +80 +70 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 8 0 0 +BITMAP +04 +04 +08 +78 +C8 +88 +90 +F0 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 615 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +70 +C8 +F8 +80 +70 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 352 0 +DWIDTH 4 0 +BBX 4 8 0 0 +BITMAP +30 +40 +40 +E0 +40 +40 +80 +80 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 7 0 -2 +BITMAP +74 +CC +88 +88 +78 +10 +F0 +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +40 +58 +68 +48 +90 +90 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 3 8 0 0 +BITMAP +20 +00 +00 +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 3 10 -1 -2 +BITMAP +20 +00 +00 +20 +20 +20 +40 +40 +40 +C0 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 579 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +40 +48 +50 +60 +90 +88 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 3 8 0 0 +BITMAP +20 +20 +40 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 974 0 +DWIDTH 10 0 +BBX 9 5 0 0 +BITMAP +7B80 +4C80 +C880 +9900 +9100 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +78 +48 +C8 +90 +90 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 7 -1 -2 +BITMAP +3C +24 +44 +4C +78 +80 +80 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 7 0 -2 +BITMAP +74 +CC +88 +88 +F8 +10 +10 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 411 0 +DWIDTH 4 0 +BBX 4 5 0 0 +BITMAP +70 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 520 0 +DWIDTH 5 0 +BBX 5 5 -1 0 +BITMAP +38 +40 +38 +08 +F0 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 392 0 +DWIDTH 4 0 +BBX 3 7 0 0 +BITMAP +40 +40 +E0 +40 +80 +80 +E0 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +48 +48 +98 +90 +F0 +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 591 0 +DWIDTH 6 0 +BBX 5 5 1 0 +BITMAP +88 +90 +A0 +60 +40 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 817 0 +DWIDTH 8 0 +BBX 7 5 1 0 +BITMAP +92 +B4 +D4 +D8 +90 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 591 0 +DWIDTH 6 0 +BBX 5 5 0 0 +BITMAP +48 +30 +20 +50 +88 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 591 0 +DWIDTH 6 0 +BBX 6 7 0 -2 +BITMAP +44 +48 +50 +20 +20 +40 +80 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 524 0 +DWIDTH 5 0 +BBX 5 5 0 0 +BITMAP +78 +10 +20 +40 +F0 +ENDCHAR +STARTCHAR braceleft +ENCODING 123 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 9 1 -1 +BITMAP +18 +20 +20 +20 +C0 +40 +40 +40 +60 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 1 10 1 -2 +BITMAP +80 +80 +80 +80 +80 +80 +80 +80 +80 +80 +ENDCHAR +STARTCHAR braceright +ENCODING 125 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 9 0 -1 +BITMAP +30 +10 +10 +10 +18 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 2 1 2 +BITMAP +64 +98 +ENDCHAR +STARTCHAR nonbreakingspace +ENCODING 160 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR exclamdown +ENCODING 161 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 3 7 1 0 +BITMAP +20 +00 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR cent +ENCODING 162 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 5 7 1 -1 +BITMAP +10 +38 +D0 +90 +A0 +70 +20 +ENDCHAR +STARTCHAR sterling +ENCODING 163 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +1C +20 +20 +78 +20 +40 +F8 +ENDCHAR +STARTCHAR currency +ENCODING 164 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 6 0 0 +BITMAP +84 +78 +48 +48 +78 +84 +ENDCHAR +STARTCHAR yen +ENCODING 165 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 7 7 0 0 +BITMAP +42 +24 +6C +10 +FC +10 +20 +ENDCHAR +STARTCHAR brokenbar +ENCODING 166 +SWIDTH 336 0 +DWIDTH 3 0 +BBX 1 9 1 -2 +BITMAP +80 +80 +80 +80 +00 +80 +80 +80 +80 +ENDCHAR +STARTCHAR section +ENCODING 167 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 8 0 -1 +BITMAP +38 +20 +30 +48 +68 +10 +10 +E0 +ENDCHAR +STARTCHAR dieresis +ENCODING 168 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 1 1 6 +BITMAP +A0 +ENDCHAR +STARTCHAR copyright +ENCODING 169 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 7 7 1 0 +BITMAP +38 +44 +BA +A2 +BA +44 +38 +ENDCHAR +STARTCHAR ordfeminine +ENCODING 170 +SWIDTH 471 0 +DWIDTH 5 0 +BBX 4 6 1 1 +BITMAP +70 +70 +90 +E0 +00 +E0 +ENDCHAR +STARTCHAR guillemotleft +ENCODING 171 +SWIDTH 617 0 +DWIDTH 6 0 +BBX 5 4 1 1 +BITMAP +28 +50 +B0 +50 +ENDCHAR +STARTCHAR logicalnot +ENCODING 172 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 3 1 1 +BITMAP +FC +04 +04 +ENDCHAR +STARTCHAR sfthyphen +ENCODING 173 +SWIDTH 360 0 +DWIDTH 4 0 +BBX 3 1 0 2 +BITMAP +E0 +ENDCHAR +STARTCHAR registered +ENCODING 174 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 7 7 1 0 +BITMAP +38 +44 +BA +BA +AA +44 +38 +ENDCHAR +STARTCHAR macron +ENCODING 175 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 1 1 6 +BITMAP +E0 +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 3 1 4 +BITMAP +E0 +A0 +E0 +ENDCHAR +STARTCHAR plusminus +ENCODING 177 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 7 6 1 0 +BITMAP +10 +10 +FE +10 +10 +FE +ENDCHAR +STARTCHAR twosuperior +ENCODING 178 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 3 4 0 3 +BITMAP +60 +20 +40 +E0 +ENDCHAR +STARTCHAR threesuperior +ENCODING 179 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 4 4 0 3 +BITMAP +70 +60 +10 +E0 +ENDCHAR +STARTCHAR acute +ENCODING 180 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 1 6 +BITMAP +40 +80 +ENDCHAR +STARTCHAR mu +ENCODING 181 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 0 -2 +BITMAP +24 +24 +44 +44 +7C +80 +80 +ENDCHAR +STARTCHAR paragraph +ENCODING 182 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 8 1 -1 +BITMAP +7C +F4 +F4 +E8 +28 +28 +50 +50 +ENDCHAR +STARTCHAR periodcentered +ENCODING 183 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 1 1 1 3 +BITMAP +80 +ENDCHAR +STARTCHAR cedilla +ENCODING 184 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 1 -2 +BITMAP +40 +C0 +ENDCHAR +STARTCHAR onesuperior +ENCODING 185 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 3 4 1 3 +BITMAP +60 +20 +40 +E0 +ENDCHAR +STARTCHAR ordmasculine +ENCODING 186 +SWIDTH 471 0 +DWIDTH 5 0 +BBX 4 6 1 1 +BITMAP +70 +90 +90 +E0 +00 +E0 +ENDCHAR +STARTCHAR guillemotright +ENCODING 187 +SWIDTH 617 0 +DWIDTH 6 0 +BBX 5 4 1 1 +BITMAP +90 +68 +50 +A0 +ENDCHAR +STARTCHAR onequarter +ENCODING 188 +SWIDTH 969 0 +DWIDTH 10 0 +BBX 7 7 1 0 +BITMAP +62 +24 +48 +F6 +24 +4E +84 +ENDCHAR +STARTCHAR onehalf +ENCODING 189 +SWIDTH 969 0 +DWIDTH 10 0 +BBX 8 7 1 0 +BITMAP +62 +24 +48 +F7 +21 +42 +86 +ENDCHAR +STARTCHAR threequarters +ENCODING 190 +SWIDTH 969 0 +DWIDTH 10 0 +BBX 8 7 0 0 +BITMAP +71 +62 +14 +EB +12 +27 +42 +ENDCHAR +STARTCHAR questiondown +ENCODING 191 +SWIDTH 530 0 +DWIDTH 5 0 +BBX 4 7 0 0 +BITMAP +10 +00 +10 +20 +40 +80 +F0 +ENDCHAR +STARTCHAR Agrave +ENCODING 192 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 10 -1 0 +BITMAP +08 +04 +00 +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR Aacute +ENCODING 193 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 10 -1 0 +BITMAP +02 +04 +00 +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR Acircumflex +ENCODING 194 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 10 -1 0 +BITMAP +06 +0A +00 +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR Atilde +ENCODING 195 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 9 -1 0 +BITMAP +0E +00 +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR Adieresis +ENCODING 196 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 9 -1 0 +BITMAP +0A +00 +04 +0C +14 +24 +3E +42 +82 +ENDCHAR +STARTCHAR Aring +ENCODING 197 +SWIDTH 684 0 +DWIDTH 7 0 +BBX 7 9 -1 0 +BITMAP +1C +14 +08 +08 +14 +24 +3C +42 +82 +ENDCHAR +STARTCHAR AE +ENCODING 198 +SWIDTH 974 0 +DWIDTH 10 0 +BBX 10 7 0 0 +BITMAP +0FC0 +1400 +1400 +2780 +3800 +4800 +8F80 +ENDCHAR +STARTCHAR Ccedilla +ENCODING 199 +SWIDTH 698 0 +DWIDTH 7 0 +BBX 7 9 0 -2 +BITMAP +3C +62 +C0 +80 +80 +84 +78 +10 +30 +ENDCHAR +STARTCHAR Egrave +ENCODING 200 +SWIDTH 631 0 +DWIDTH 6 0 +BBX 6 10 0 0 +BITMAP +10 +08 +00 +3C +20 +40 +78 +40 +80 +F8 +ENDCHAR +STARTCHAR Eacute +ENCODING 201 +SWIDTH 631 0 +DWIDTH 6 0 +BBX 6 10 0 0 +BITMAP +04 +08 +00 +3C +20 +40 +78 +40 +80 +F8 +ENDCHAR +STARTCHAR Ecircumflex +ENCODING 202 +SWIDTH 631 0 +DWIDTH 6 0 +BBX 6 10 0 0 +BITMAP +18 +14 +00 +3C +20 +40 +78 +40 +80 +F8 +ENDCHAR +STARTCHAR Edieresis +ENCODING 203 +SWIDTH 631 0 +DWIDTH 6 0 +BBX 6 9 0 0 +BITMAP +14 +00 +3C +20 +40 +78 +40 +80 +F8 +ENDCHAR +STARTCHAR Igrave +ENCODING 204 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 3 10 0 0 +BITMAP +40 +20 +00 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR Iacute +ENCODING 205 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 4 10 0 0 +BITMAP +10 +20 +00 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR Icircumflex +ENCODING 206 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 4 10 0 0 +BITMAP +20 +50 +00 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR Idieresis +ENCODING 207 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 4 9 0 0 +BITMAP +50 +00 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR Eth +ENCODING 208 +SWIDTH 774 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3C +22 +42 +F2 +42 +84 +F8 +ENDCHAR +STARTCHAR Ntilde +ENCODING 209 +SWIDTH 748 0 +DWIDTH 7 0 +BBX 7 9 0 0 +BITMAP +1C +00 +22 +22 +54 +54 +54 +88 +88 +ENDCHAR +STARTCHAR Ograve +ENCODING 210 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +08 +08 +00 +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR Oacute +ENCODING 211 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +04 +04 +00 +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR Ocircumflex +ENCODING 212 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +04 +0C +00 +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR Otilde +ENCODING 213 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +0C +00 +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR Odieresis +ENCODING 214 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 9 0 0 +BITMAP +0A +00 +3C +42 +82 +82 +82 +84 +78 +ENDCHAR +STARTCHAR multiply +ENCODING 215 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +84 +48 +30 +30 +48 +84 +ENDCHAR +STARTCHAR Oslash +ENCODING 216 +SWIDTH 787 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3E +46 +CA +92 +A6 +C4 +F8 +ENDCHAR +STARTCHAR Ugrave +ENCODING 217 +SWIDTH 731 0 +DWIDTH 7 0 +BBX 6 10 1 0 +BITMAP +10 +10 +00 +44 +44 +84 +88 +88 +88 +70 +ENDCHAR +STARTCHAR Uacute +ENCODING 218 +SWIDTH 731 0 +DWIDTH 7 0 +BBX 6 10 1 0 +BITMAP +08 +10 +00 +44 +44 +84 +88 +88 +88 +70 +ENDCHAR +STARTCHAR Ucircumflex +ENCODING 219 +SWIDTH 731 0 +DWIDTH 7 0 +BBX 6 10 1 0 +BITMAP +18 +28 +00 +44 +44 +84 +88 +88 +88 +70 +ENDCHAR +STARTCHAR Udieresis +ENCODING 220 +SWIDTH 731 0 +DWIDTH 7 0 +BBX 6 9 1 0 +BITMAP +28 +00 +44 +44 +84 +88 +88 +88 +70 +ENDCHAR +STARTCHAR Yacute +ENCODING 221 +SWIDTH 610 0 +DWIDTH 6 0 +BBX 6 10 1 0 +BITMAP +10 +10 +00 +84 +48 +50 +20 +20 +40 +40 +ENDCHAR +STARTCHAR Thorn +ENCODING 222 +SWIDTH 607 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +20 +3C +44 +44 +78 +80 +80 +ENDCHAR +STARTCHAR germandbls +ENCODING 223 +SWIDTH 629 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +30 +48 +58 +60 +F0 +98 +88 +F0 +ENDCHAR +STARTCHAR agrave +ENCODING 224 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR aacute +ENCODING 225 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +20 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR acircumflex +ENCODING 226 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +30 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR atilde +ENCODING 227 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +70 +B0 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR adieresis +ENCODING 228 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +50 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR aring +ENCODING 229 +SWIDTH 612 0 +DWIDTH 6 0 +BBX 5 9 0 0 +BITMAP +30 +50 +30 +00 +78 +08 +78 +98 +F0 +ENDCHAR +STARTCHAR ae +ENCODING 230 +SWIDTH 995 0 +DWIDTH 10 0 +BBX 9 5 0 0 +BITMAP +7F00 +0880 +7F80 +8800 +FF00 +ENDCHAR +STARTCHAR ccedilla +ENCODING 231 +SWIDTH 549 0 +DWIDTH 6 0 +BBX 5 7 0 -2 +BITMAP +78 +C0 +80 +80 +70 +20 +20 +ENDCHAR +STARTCHAR egrave +ENCODING 232 +SWIDTH 615 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +00 +70 +C8 +F8 +80 +70 +ENDCHAR +STARTCHAR eacute +ENCODING 233 +SWIDTH 615 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +20 +00 +70 +C8 +F8 +80 +70 +ENDCHAR +STARTCHAR ecircumflex +ENCODING 234 +SWIDTH 615 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +30 +00 +70 +C8 +F8 +80 +70 +ENDCHAR +STARTCHAR edieresis +ENCODING 235 +SWIDTH 615 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +50 +00 +70 +C8 +F8 +80 +70 +ENDCHAR +STARTCHAR igrave +ENCODING 236 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 2 8 0 0 +BITMAP +80 +80 +00 +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR iacute +ENCODING 237 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 2 8 0 0 +BITMAP +40 +80 +00 +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR icircumflex +ENCODING 238 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 3 8 0 0 +BITMAP +40 +A0 +00 +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR idieresis +ENCODING 239 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 3 7 0 0 +BITMAP +A0 +00 +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR eth +ENCODING 240 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +38 +70 +50 +78 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR ntilde +ENCODING 241 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +68 +B0 +00 +78 +48 +C8 +90 +90 +ENDCHAR +STARTCHAR ograve +ENCODING 242 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +00 +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR oacute +ENCODING 243 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +20 +00 +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR ocircumflex +ENCODING 244 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +30 +00 +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR otilde +ENCODING 245 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +70 +B0 +00 +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR odieresis +ENCODING 246 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +50 +00 +70 +C8 +88 +98 +70 +ENDCHAR +STARTCHAR divide +ENCODING 247 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 7 5 1 1 +BITMAP +10 +00 +FE +00 +10 +ENDCHAR +STARTCHAR oslash +ENCODING 248 +SWIDTH 611 0 +DWIDTH 6 0 +BBX 6 5 -1 0 +BITMAP +3C +6C +54 +6C +F8 +ENDCHAR +STARTCHAR ugrave +ENCODING 249 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +20 +20 +00 +48 +48 +98 +90 +F0 +ENDCHAR +STARTCHAR uacute +ENCODING 250 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +20 +00 +48 +48 +98 +90 +F0 +ENDCHAR +STARTCHAR ucircumflex +ENCODING 251 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +30 +00 +48 +48 +98 +90 +F0 +ENDCHAR +STARTCHAR udieresis +ENCODING 252 +SWIDTH 633 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +50 +00 +48 +48 +98 +90 +F0 +ENDCHAR +STARTCHAR yacute +ENCODING 253 +SWIDTH 591 0 +DWIDTH 6 0 +BBX 6 10 0 -2 +BITMAP +10 +20 +00 +44 +48 +50 +20 +20 +40 +80 +ENDCHAR +STARTCHAR thorn +ENCODING 254 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 10 -1 -2 +BITMAP +20 +20 +60 +5C +64 +44 +4C +F8 +80 +80 +ENDCHAR +STARTCHAR ydieresis +ENCODING 255 +SWIDTH 591 0 +DWIDTH 6 0 +BBX 6 9 0 -2 +BITMAP +50 +00 +44 +48 +50 +20 +20 +40 +80 +ENDCHAR +STARTCHAR Cacute +ENCODING 262 +SWIDTH 698 0 +DWIDTH 7 0 +BBX 7 10 0 0 +BITMAP +04 +08 +00 +3C +62 +C0 +80 +80 +84 +78 +ENDCHAR +STARTCHAR cacute +ENCODING 263 +SWIDTH 549 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +10 +20 +00 +78 +C0 +80 +80 +70 +ENDCHAR +STARTCHAR Ccaron +ENCODING 268 +SWIDTH 698 0 +DWIDTH 7 0 +BBX 7 10 0 0 +BITMAP +14 +0C +00 +3C +62 +C0 +80 +80 +84 +78 +ENDCHAR +STARTCHAR ccaron +ENCODING 269 +SWIDTH 549 0 +DWIDTH 6 0 +BBX 5 8 0 0 +BITMAP +50 +20 +00 +78 +C0 +80 +80 +70 +ENDCHAR +STARTCHAR dcroat +ENCODING 273 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 7 8 0 0 +BITMAP +04 +1E +0C +78 +C8 +88 +90 +F0 +ENDCHAR +STARTCHAR Gbreve +ENCODING 286 +SWIDTH 774 0 +DWIDTH 8 0 +BBX 7 10 0 0 +BITMAP +14 +0C +00 +3C +62 +C0 +8E +82 +84 +7C +ENDCHAR +STARTCHAR gbreve +ENCODING 287 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 6 10 0 -2 +BITMAP +28 +30 +00 +74 +CC +88 +88 +78 +10 +F0 +ENDCHAR +STARTCHAR Idotaccent +ENCODING 304 +SWIDTH 294 0 +DWIDTH 3 0 +BBX 3 9 0 0 +BITMAP +20 +00 +20 +20 +40 +40 +40 +80 +80 +ENDCHAR +STARTCHAR dotlessi +ENCODING 305 +SWIDTH 277 0 +DWIDTH 3 0 +BBX 2 5 0 0 +BITMAP +40 +40 +C0 +80 +80 +ENDCHAR +STARTCHAR Lslash +ENCODING 321 +SWIDTH 562 0 +DWIDTH 6 0 +BBX 5 7 0 0 +BITMAP +20 +20 +50 +60 +C0 +80 +F8 +ENDCHAR +STARTCHAR lslash +ENCODING 322 +SWIDTH 287 0 +DWIDTH 3 0 +BBX 3 8 0 0 +BITMAP +20 +20 +40 +60 +C0 +40 +80 +80 +ENDCHAR +STARTCHAR OE +ENCODING 338 +SWIDTH 1069 0 +DWIDTH 11 0 +BBX 10 7 0 0 +BITMAP +3FC0 +6400 +8400 +8780 +8400 +C800 +7F80 +ENDCHAR +STARTCHAR oe +ENCODING 339 +SWIDTH 1027 0 +DWIDTH 10 0 +BBX 9 5 0 0 +BITMAP +7700 +C880 +8F80 +9800 +7F00 +ENDCHAR +STARTCHAR Scedilla +ENCODING 350 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 7 9 0 -2 +BITMAP +3C +42 +40 +38 +04 +84 +78 +20 +20 +ENDCHAR +STARTCHAR scedilla +ENCODING 351 +SWIDTH 520 0 +DWIDTH 5 0 +BBX 5 7 -1 -2 +BITMAP +38 +40 +38 +08 +F0 +10 +30 +ENDCHAR +STARTCHAR Scaron +ENCODING 352 +SWIDTH 634 0 +DWIDTH 6 0 +BBX 7 10 0 0 +BITMAP +18 +18 +00 +3C +42 +40 +38 +04 +84 +78 +ENDCHAR +STARTCHAR scaron +ENCODING 353 +SWIDTH 520 0 +DWIDTH 5 0 +BBX 5 8 -1 0 +BITMAP +28 +10 +00 +38 +40 +38 +08 +F0 +ENDCHAR +STARTCHAR Ydieresis +ENCODING 376 +SWIDTH 610 0 +DWIDTH 6 0 +BBX 6 9 1 0 +BITMAP +28 +00 +84 +48 +50 +20 +20 +40 +40 +ENDCHAR +STARTCHAR Zcaron +ENCODING 381 +SWIDTH 685 0 +DWIDTH 7 0 +BBX 7 10 0 0 +BITMAP +14 +08 +00 +7E +04 +08 +10 +20 +40 +FC +ENDCHAR +STARTCHAR zcaron +ENCODING 382 +SWIDTH 524 0 +DWIDTH 5 0 +BBX 5 8 0 0 +BITMAP +50 +20 +00 +78 +10 +20 +40 +F0 +ENDCHAR +STARTCHAR florin +ENCODING 402 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 10 0 -2 +BITMAP +0C +10 +10 +10 +78 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR circumflex +ENCODING 710 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 1 6 +BITMAP +40 +A0 +ENDCHAR +STARTCHAR caron +ENCODING 711 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 1 6 +BITMAP +A0 +40 +ENDCHAR +STARTCHAR breve +ENCODING 728 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 1 6 +BITMAP +A0 +C0 +ENDCHAR +STARTCHAR dotaccent +ENCODING 729 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 1 1 2 7 +BITMAP +80 +ENDCHAR +STARTCHAR ring +ENCODING 730 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 3 1 6 +BITMAP +E0 +A0 +E0 +ENDCHAR +STARTCHAR ogonek +ENCODING 731 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 1 -2 +BITMAP +80 +C0 +ENDCHAR +STARTCHAR tilde +ENCODING 732 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 4 2 0 6 +BITMAP +50 +A0 +ENDCHAR +STARTCHAR hungarumlaut +ENCODING 733 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 4 2 1 6 +BITMAP +50 +A0 +ENDCHAR +STARTCHAR Omega +ENCODING 937 +SWIDTH 764 0 +DWIDTH 8 0 +BBX 7 7 0 0 +BITMAP +3C +C6 +82 +82 +82 +44 +EE +ENDCHAR +STARTCHAR pi +ENCODING 960 +SWIDTH 588 0 +DWIDTH 6 0 +BBX 6 5 0 0 +BITMAP +FC +48 +50 +50 +58 +ENDCHAR +STARTCHAR endash +ENCODING 8211 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 1 0 2 +BITMAP +F8 +ENDCHAR +STARTCHAR emdash +ENCODING 8212 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 10 1 0 2 +BITMAP +FFC0 +ENDCHAR +STARTCHAR quoteleft +ENCODING 8216 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 2 2 1 5 +BITMAP +40 +80 +ENDCHAR +STARTCHAR quoteright +ENCODING 8217 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 2 2 1 5 +BITMAP +40 +80 +ENDCHAR +STARTCHAR quotesinglbase +ENCODING 8218 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 2 2 0 -1 +BITMAP +40 +80 +ENDCHAR +STARTCHAR quotedblleft +ENCODING 8220 +SWIDTH 518 0 +DWIDTH 5 0 +BBX 4 2 1 5 +BITMAP +50 +A0 +ENDCHAR +STARTCHAR quotedblright +ENCODING 8221 +SWIDTH 518 0 +DWIDTH 5 0 +BBX 4 2 1 5 +BITMAP +50 +A0 +ENDCHAR +STARTCHAR quotedblbase +ENCODING 8222 +SWIDTH 518 0 +DWIDTH 5 0 +BBX 4 2 0 -1 +BITMAP +50 +A0 +ENDCHAR +STARTCHAR dagger +ENCODING 8224 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 8 0 -1 +BITMAP +20 +20 +F8 +20 +20 +60 +40 +40 +ENDCHAR +STARTCHAR daggerdbl +ENCODING 8225 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 5 8 0 -1 +BITMAP +20 +20 +F8 +20 +20 +F0 +40 +40 +ENDCHAR +STARTCHAR bullet +ENCODING 8226 +SWIDTH 589 0 +DWIDTH 6 0 +BBX 3 3 2 2 +BITMAP +E0 +E0 +E0 +ENDCHAR +STARTCHAR ellipsis +ENCODING 8230 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 7 1 1 0 +BITMAP +92 +ENDCHAR +STARTCHAR perthousand +ENCODING 8240 +SWIDTH 1350 0 +DWIDTH 14 0 +BBX 12 7 1 0 +BITMAP +6200 +A400 +A800 +D330 +1550 +2550 +4660 +ENDCHAR +STARTCHAR guilsinglleft +ENCODING 8249 +SWIDTH 399 0 +DWIDTH 4 0 +BBX 3 4 1 1 +BITMAP +20 +40 +80 +40 +ENDCHAR +STARTCHAR guilsinglright +ENCODING 8250 +SWIDTH 399 0 +DWIDTH 4 0 +BBX 3 4 1 1 +BITMAP +40 +20 +40 +80 +ENDCHAR +STARTCHAR Euro +ENCODING 8364 +SWIDTH 636 0 +DWIDTH 6 0 +BBX 6 7 0 0 +BITMAP +1C +24 +F8 +40 +F0 +40 +38 +ENDCHAR +STARTCHAR trademark +ENCODING 8482 +SWIDTH 1000 0 +DWIDTH 10 0 +BBX 7 3 1 4 +BITMAP +EA +4E +4A +ENDCHAR +STARTCHAR partialdiff +ENCODING 8706 +SWIDTH 517 0 +DWIDTH 5 0 +BBX 4 6 1 0 +BITMAP +60 +10 +70 +90 +90 +E0 +ENDCHAR +STARTCHAR Delta +ENCODING 8710 +SWIDTH 668 0 +DWIDTH 7 0 +BBX 7 7 0 0 +BITMAP +10 +28 +28 +44 +44 +44 +FE +ENDCHAR +STARTCHAR product +ENCODING 8719 +SWIDTH 756 0 +DWIDTH 8 0 +BBX 6 9 1 -2 +BITMAP +FC +84 +84 +84 +84 +84 +84 +84 +84 +ENDCHAR +STARTCHAR summation +ENCODING 8721 +SWIDTH 673 0 +DWIDTH 7 0 +BBX 6 9 0 -2 +BITMAP +FC +40 +20 +10 +10 +30 +20 +40 +FC +ENDCHAR +STARTCHAR minus +ENCODING 8722 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 1 1 3 +BITMAP +FC +ENDCHAR +STARTCHAR fraction +ENCODING 8725 +SWIDTH 166 0 +DWIDTH 2 0 +BBX 7 7 -3 0 +BITMAP +02 +04 +08 +10 +20 +40 +80 +ENDCHAR +STARTCHAR periodcentered +ENCODING 8729 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 1 1 1 3 +BITMAP +80 +ENDCHAR +STARTCHAR radical +ENCODING 8730 +SWIDTH 637 0 +DWIDTH 6 0 +BBX 5 8 1 0 +BITMAP +08 +10 +10 +20 +A0 +A0 +C0 +40 +ENDCHAR +STARTCHAR infinity +ENCODING 8734 +SWIDTH 833 0 +DWIDTH 8 0 +BBX 6 4 1 1 +BITMAP +DC +B4 +B4 +CC +ENDCHAR +STARTCHAR integral +ENCODING 8747 +SWIDTH 520 0 +DWIDTH 5 0 +BBX 5 9 0 -1 +BITMAP +18 +20 +20 +20 +20 +20 +20 +20 +C0 +ENDCHAR +STARTCHAR approxequal +ENCODING 8776 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 4 1 1 +BITMAP +64 +98 +64 +98 +ENDCHAR +STARTCHAR notequal +ENCODING 8800 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 7 1 0 +BITMAP +08 +08 +FC +20 +FC +40 +80 +ENDCHAR +STARTCHAR lessequal +ENCODING 8804 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +0C +F0 +F0 +0C +00 +FC +ENDCHAR +STARTCHAR greaterequal +ENCODING 8805 +SWIDTH 837 0 +DWIDTH 8 0 +BBX 6 6 1 0 +BITMAP +C0 +3C +3C +C0 +00 +FC +ENDCHAR +STARTCHAR lozenge +ENCODING 9674 +SWIDTH 494 0 +DWIDTH 5 0 +BBX 5 10 0 -2 +BITMAP +20 +60 +50 +90 +88 +88 +90 +50 +60 +20 +ENDCHAR +STARTCHAR fi +ENCODING 64257 +SWIDTH 645 0 +DWIDTH 6 0 +BBX 6 8 0 0 +BITMAP +34 +40 +40 +E8 +48 +58 +90 +90 +ENDCHAR +STARTCHAR fl +ENCODING 64258 +SWIDTH 645 0 +DWIDTH 6 0 +BBX 6 8 0 0 +BITMAP +3C +44 +48 +E8 +48 +48 +90 +90 +ENDCHAR +STARTCHAR .notdef +ENCODING -1 +SWIDTH 600 0 +DWIDTH 6 0 +BBX 5 9 1 -2 +BITMAP +F8 +88 +88 +88 +88 +88 +88 +88 +F8 +ENDCHAR +STARTCHAR .null +ENCODING -1 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR nonmarkingreturn +ENCODING -1 +SWIDTH 317 0 +DWIDTH 3 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR c6459 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 1 2 6 +BITMAP +A0 +ENDCHAR +STARTCHAR c6460 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 3 6 +BITMAP +40 +80 +ENDCHAR +STARTCHAR c6461 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 1 2 6 +BITMAP +E0 +ENDCHAR +STARTCHAR c6462 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 2 2 2 6 +BITMAP +80 +40 +ENDCHAR +STARTCHAR c6463 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 2 6 +BITMAP +40 +A0 +ENDCHAR +STARTCHAR c6466 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 2 6 +BITMAP +A0 +40 +ENDCHAR +STARTCHAR c6467 +ENCODING -1 +SWIDTH 400 0 +DWIDTH 4 0 +BBX 4 4 -1 3 +BITMAP +20 +60 +F0 +40 +ENDCHAR +STARTCHAR c6468 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 3 2 2 6 +BITMAP +A0 +C0 +ENDCHAR +STARTCHAR c6469 +ENCODING -1 +SWIDTH 500 0 +DWIDTH 5 0 +BBX 1 1 3 6 +BITMAP +80 +ENDCHAR +ENDFONT diff --git a/examples/fonts/DSEG14Classic-Regular-64-ModS.bdf b/examples/fonts/DSEG14Classic-Regular-64-ModS.bdf new file mode 100755 index 0000000..0a88b1a --- /dev/null +++ b/examples/fonts/DSEG14Classic-Regular-64-ModS.bdf @@ -0,0 +1,5776 @@ +STARTFONT 2.1 +FONT -FontForge-DSEG14 Classic-Book-R-Normal--64-610-75-75-P-494-ISO10646-1 +SIZE 61 75 75 +FONTBOUNDINGBOX 50 64 -4 0 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Created by Keshikan" +COMMENT "with FontForge 2.0 (http://fontforge.sf.net)" +STARTPROPERTIES 40 +FOUNDRY "FontForge" +FAMILY_NAME "DSEG14 Classic" +WEIGHT_NAME "Book" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 64 +POINT_SIZE 610 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "P" +AVERAGE_WIDTH 494 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "DSEG14Classic-Regular" +FACE_NAME "DSEG14 Classic-Regular" +COPYRIGHT "Created by Keshikan" +FONT_VERSION "0.46" +FONT_ASCENT 64 +FONT_DESCENT 0 +UNDERLINE_POSITION -10 +UNDERLINE_THICKNESS 4 +X_HEIGHT 56 +CAP_HEIGHT 56 +RAW_ASCENT 1000 +RAW_DESCENT 0 +NORM_SPACE 13 +RELATIVE_WEIGHT 40 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 0 +SUPERSCRIPT_Y 30 +SUPERSCRIPT_SIZE 44 +SUBSCRIPT_X 0 +SUBSCRIPT_Y 8 +SUBSCRIPT_SIZE 44 +FIGURE_WIDTH 52 +AVG_LOWERCASE_WIDTH 520 +AVG_UPPERCASE_WIDTH 520 +ENDPROPERTIES +CHARS 96 +STARTCHAR space +ENCODING 32 +SWIDTH 200 0 +DWIDTH 13 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 23 28 6 33 +BITMAP +200000 +700000 +F80000 +FC0000 +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC007E +FC003E +FC003C +F80018 +F00018 +E00000 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC007E0000 +FC003E0000 +FC003C0000 +F800180000 +F3FFDBFFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFDBFFCF +000018001F +00003C003F +00003E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +00007E003F +000000003F +01FFFFFFDF +03FFFFFFEF +07FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC80000180 +FCC0000380 +FCE0000380 +FCE0000780 +FCF0000780 +FCF0000F80 +FCF8001F80 +FCF8001F80 +FCFC003F80 +FCFE003F80 +FCFE007F00 +FC7F00FE00 +FC7F00FE00 +FC3F00FC00 +FC1F00FC00 +FC1F00F800 +FC0F00F000 +FC0F00F000 +FC0700E000 +FC0300E000 +FC0300C000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000300C03F +000700E03F +000700E03F +000F00F03F +000F00F03F +001F00F83F +001F00FC3F +003F00FC3F +007F00FE3F +007F00FE3F +00FE007F3F +00FE003FBF +00FC003FBF +00F8001FBF +00F8001FBF +00F0000FBF +00F00007BF +00E00007BF +00E00003BF +00C00003BF +00800001BF +000000003F +000000001F +000000000F +0000000006 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0800001800 +0C00003800 +0E00003800 +0E00007800 +0F00007800 +0F0000F800 +0F8001F800 +0F8001F800 +0FC003F800 +0FE003F800 +0FE007F000 +07F00FE000 +07F00FE000 +03F00FC000 +01F00FC000 +01F00F8000 +00F00F0000 +00F00F0000 +00700E0000 +00300E0000 +00300C0000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000070 +00000000F0 +00000001F0 +00300C03F0 +00700E03F0 +00700E03F0 +00F00F03F0 +00F00F03F0 +01F00F83F0 +01F00FC3F0 +03F00FC3F0 +07F00FE3F0 +07F00FE3F0 +0FE007F3F0 +0FE003FBF0 +0FC003FBF0 +0F8001FBF0 +0F8001FBF0 +0F0000FBF0 +0F00007BF0 +0E00007BF0 +0E00003BF0 +0C00003BF0 +0800001BF0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 6 23 23 34 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +78 +30 +30 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 9 50 30 7 +BITMAP +0180 +0380 +0380 +0780 +0780 +0F80 +1F80 +1F80 +3F80 +3F80 +7F00 +FE00 +FE00 +FC00 +FC00 +F800 +F000 +F000 +E000 +E000 +C000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +C000 +E000 +E000 +F000 +F000 +F800 +FC00 +FC00 +FE00 +FE00 +7F00 +3F80 +3F80 +1F80 +1F80 +0F80 +0780 +0780 +0380 +0380 +0180 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 8 50 14 7 +BITMAP +80 +C0 +E0 +E0 +F0 +F0 +F8 +F8 +FC +FE +FE +7F +7F +3F +1F +1F +0F +0F +07 +03 +03 +00 +00 +00 +00 +00 +00 +00 +00 +03 +07 +07 +0F +0F +1F +1F +3F +7F +7F +FE +FE +FC +F8 +F8 +F0 +F0 +E0 +E0 +C0 +80 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 50 10 7 +BITMAP +0807E01800 +0C07E03800 +0E07E03800 +0E07E07800 +0F07E07800 +0F07E0F800 +0F87E1F800 +0F87E1F800 +0FC7E3F800 +0FE7E3F800 +0FE7E7F000 +07F7EFE000 +07F7EFE000 +03F7EFC000 +01F7EFC000 +01F7EF8000 +00F7EF0000 +00F7EF0000 +0077EE0000 +0033EE0000 +0033CC0000 +0001800000 +3FFDBFFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFDBFFC00 +0001800000 +0033CC0000 +0073EE0000 +0077EE0000 +00F7EF0000 +00F7EF0000 +01F7EF8000 +01F7EFC000 +03F7EFC000 +07F7EFE000 +07F7EFE000 +0FE7E7F000 +0FE7E3F800 +0FC7E3F800 +0F87E1F800 +0F87E1F800 +0F07E0F800 +0F07E07800 +0E07E07800 +0E07E03800 +0C07E03800 +0807E01800 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 50 10 7 +BITMAP +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +3FFDBFFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFDBFFC00 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 8 21 14 7 +BITMAP +03 +07 +07 +0F +0F +1F +1F +3F +7F +7F +FE +FE +FC +F8 +F8 +F0 +F0 +E0 +E0 +C0 +80 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 6 10 29 +BITMAP +3FFC3FFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFC3FFC00 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 8 -4 0 +BITMAP +3C +7E +FF +FF +FF +FF +7E +3C +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +00000180 +00000380 +00000380 +00000780 +00000780 +00000F80 +00001F80 +00001F80 +00003F80 +00003F80 +00007F00 +0000FE00 +0000FE00 +0000FC00 +0000FC00 +0000F800 +0000F000 +0000F000 +0000E000 +0000E000 +0000C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +03000000 +07000000 +07000000 +0F000000 +0F000000 +1F000000 +1F000000 +3F000000 +7F000000 +7F000000 +FE000000 +FE000000 +FC000000 +F8000000 +F8000000 +F0000000 +F0000000 +E0000000 +E0000000 +C0000000 +80000000 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC000001BF +FC000003BF +FC000003BF +FC000007BF +FC000007BF +FC00000FBF +FC00001FBF +FC00001FBF +FC00003FBF +FC00003FBF +FC00007F3F +FC0000FE3F +FC0000FE3F +FC0000FC3F +FC0000FC3F +FC0000F83F +FC0000F03F +FC0000F03F +FC0000E03F +FC0000E03F +FC0000C03F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0300003F +FC0700003F +FC0700003F +FC0F00003F +FC0F00003F +FC1F00003F +FC1F00003F +FC3F00003F +FC7F00003F +FC7F00003F +FCFE00003F +FCFE00003F +FCFC00003F +FCF800003F +FCF800003F +FCF000003F +FCF000003F +FCE000003F +FCE000003F +FCC000003F +FC8000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 6 58 40 3 +BITMAP +18 +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +1C +00 +00 +1C +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +18 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF6 +03FFFFFFEF +01FFFFFFDF +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000001F +03FFC3FFCF +07FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF60 +3FFFFFFEF0 +1FFFFFFDF0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000001F0 +3FFC3FFCF0 +7FFC3FFE70 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE70 +3FFC3FFCF0 +00000001F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000001F +000000000F +0000000006 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +01FFFFFFDF +03FFFFFFEF +07FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +0000000007 +000000000F +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000001F +000000000F +0000000006 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +01FFFFFFDF +03FFFFFFEF +07FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 200 0 +DWIDTH 13 0 +BBX 8 34 2 14 +BITMAP +3E +7F +7F +FF +7F +7F +3E +08 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1C +7E +7F +FF +FF +7F +7F +1C +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 57 10 0 +BITMAP +0000001800 +0000003800 +0000003800 +0000007800 +0000007800 +000000F800 +000001F800 +000001F800 +000003F800 +000003F800 +000007F000 +00000FE000 +00000FE000 +00000FC000 +00000FC000 +00000F8000 +00000F0000 +00000F0000 +00000E0000 +00000E0000 +00000C0000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0030000000 +0070000000 +0070000000 +00F0000000 +00F0000000 +01F0000000 +01F0000000 +03F0000000 +07F0000000 +07F0000000 +0FE0000000 +0FE0000000 +0FC0000000 +0F80000000 +0F80000000 +0F00000000 +0F00000000 +0E00000000 +0E00000000 +0C00000000 +0800000000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 35 10 0 +BITMAP +3FFC3FFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFC3FFC00 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 57 10 0 +BITMAP +0800000000 +0C00000000 +0E00000000 +0E00000000 +0F00000000 +0F00000000 +0F80000000 +0F80000000 +0FC0000000 +0FE0000000 +0FE0000000 +07F0000000 +07F0000000 +03F0000000 +01F0000000 +01F0000000 +00F0000000 +00F0000000 +0070000000 +0030000000 +0030000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +00000C0000 +00000E0000 +00000E0000 +00000F0000 +00000F0000 +00000F8000 +00000FC000 +00000FC000 +00000FE000 +00000FE000 +000007F000 +000003F800 +000003F800 +000001F800 +000001F800 +000000F800 +0000007800 +0000007800 +0000003800 +0000003800 +0000001800 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 57 6 7 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00003FFCF +E00003FFE7 +000007FFF0 +000007FFF8 +000003FFE0 +00001BFFC0 +0000180000 +00003C0000 +00003E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +00007E0000 +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00003FFCF +E00003FFE7 +000007FFF0 +000007FFF8 +E00003FFE7 +F0001BFFCF +F80018001F +FC003C003F +FC003E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF60 +3FFFFFFEF0 +1FFFFFFDF0 +00000003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0003E003F0 +0003C003F0 +00018001F0 +0001BFFCF0 +00003FFE70 +00007FFF00 +00007FFF80 +00003FFE70 +0001BFFCF0 +00018001F0 +0003C003F0 +0003E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF60 +3FFFFFFEF0 +1FFFFFFDF0 +00000003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0003E003F0 +0003C003F0 +00018001F0 +00018000F0 +0000000070 +0000000000 +0000000000 +0000000070 +00018000F0 +00018001F0 +0003C003F0 +0003E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F00003FFC0 +E00003FFE0 +000007FFF0 +000007FFF8 +E00003FFE7 +F00003FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +0001800000 +0000000000 +0000000000 +0000000000 +0000000000 +0001800000 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 0 +BITMAP +0000000006 +000000000F +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000001F +000000000F +0000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 58 6 3 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000180 +FC00000380 +FC00000380 +FC00000780 +FC00000780 +FC00000F80 +FC00001F80 +FC00001F80 +FC00003F80 +FC00003F80 +FC00007F00 +FC0000FE00 +FC0000FE00 +FC0000FC00 +FC0000FC00 +FC0000F800 +FC0000F000 +FC0000F000 +FC0000E000 +FC0000E000 +FC0000C000 +F800000000 +F3FFC00000 +E7FFC00000 +0FFFE00000 +0FFFE00000 +E7FFC00000 +F3FFC00000 +F800000000 +FC0000C000 +FC0000E000 +FC0000E000 +FC0000F000 +FC0000F000 +FC0000F800 +FC0000FC00 +FC0000FC00 +FC0000FE00 +FC0000FE00 +FC00007F00 +FC00003F80 +FC00003F80 +FC00001F80 +FC00001F80 +FC00000F80 +FC00000780 +FC00000780 +FC00000380 +FC00000380 +FC00000180 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 61 6 0 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC800001BF +FCC00003BF +FCE00003BF +FCE00007BF +FCF00007BF +FCF0000FBF +FCF8001FBF +FCF8001FBF +FCFC003FBF +FCFE003FBF +FCFE007F3F +FC7F00FE3F +FC7F00FE3F +FC3F00FC3F +FC1F00FC3F +FC1F00F83F +FC0F00F03F +FC0F00F03F +FC0700E03F +FC0300E03F +FC0300C03F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00018000F +F80018001F +FC003C003F +FC003E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC8000003F +FCC000003F +FCE000003F +FCE000003F +FCF000003F +FCF000003F +FCF800003F +FCF800003F +FCFC00003F +FCFE00003F +FCFE00003F +FC7F00003F +FC7F00003F +FC3F00003F +FC1F00003F +FC1F00003F +FC0F00003F +FC0F00003F +FC0700003F +FC0300003F +FC0300003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000C03F +FC0000E03F +FC0000E03F +FC0000F03F +FC0000F03F +FC0000F83F +FC0000FC3F +FC0000FC3F +FC0000FE3F +FC0000FE3F +FC00007F3F +FC00003FBF +FC00003FBF +FC00001FBF +FC00001FBF +FC00000FBF +FC000007BF +FC000007BF +FC000003BF +FC000003BF +FC000001BF +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000C03F +FC0000E03F +FC0000E03F +FC0000F03F +FC0000F03F +FC0000F83F +FC0000FC3F +FC0000FC3F +FC0000FE3F +FC0000FE3F +FC00007F3F +FC00003FBF +FC00003FBF +FC00001FBF +FC00001FBF +FC00000FBF +FC000007BF +FC000007BF +FC000003BF +FC000003BF +FC000001BF +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC0000C000 +FC0000E000 +FC0000E000 +FC0000F000 +FC0000F000 +FC0000F800 +FC0000FC00 +FC0000FC00 +FC0000FE00 +FC0000FE00 +FC00007F00 +FC00003F80 +FC00003F80 +FC00001F80 +FC00001F80 +FC00000F80 +FC00000780 +FC00000780 +FC00000380 +FC00000380 +FC00000180 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +01FFFFFFDF +03FFFFFFEF +07FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 57 10 7 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +0001800000 +0000000000 +0000000000 +0000000000 +0000000000 +0001800000 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 0 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 58 6 3 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000180 +FC00000380 +FC00000380 +FC00000780 +FC00000780 +FC00000F80 +FC00001F80 +FC00001F80 +FC00003F80 +FC00003F80 +FC00007F00 +FC0000FE00 +FC0000FE00 +FC0000FC00 +FC0000FC00 +FC0000F800 +FC0000F000 +FC0000F000 +FC0000E000 +FC0000E000 +FC0000C000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC03000000 +FC07000000 +FC07000000 +FC0F000000 +FC0F000000 +FC1F000000 +FC1F000000 +FC3F000000 +FC7F000000 +FC7F000000 +FCFE000000 +FCFE000000 +FCFC000000 +FCF8000000 +FCF8000000 +FCF0000000 +FCF0000000 +FCE0000000 +FCE0000000 +FCC0000000 +FC80000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC003E003F +FC003C003F +F80018001F +F00018000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0300C03F +FC0700E03F +FC0700E03F +FC0F00F03F +FC0F00F03F +FC1F00F83F +FC1F00FC3F +FC3F00FC3F +FC7F00FE3F +FC7F00FE3F +FCFE007F3F +FCFE003FBF +FCFC003FBF +FCF8001FBF +FCF8001FBF +FCF0000FBF +FCF00007BF +FCE00007BF +FCE00003BF +FCC00003BF +FC800001BF +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +80000180 +C0000380 +E0000380 +E0000780 +F0000780 +F0000F80 +F8001F80 +F8001F80 +FC003F80 +FE003F80 +FE007F00 +7F00FE00 +7F00FE00 +3F00FC00 +1F00FC00 +1F00F800 +0F00F000 +0F00F000 +0700E000 +0300E000 +0300C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +0300C000 +0700E000 +0700E000 +0F00F000 +0F00F000 +1F00F800 +1F00FC00 +3F00FC00 +7F00FE00 +7F00FE00 +FE007F00 +FE003F80 +FC003F80 +F8001F80 +F8001F80 +F0000F80 +F0000780 +E0000780 +E0000380 +C0000380 +80000180 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +80000180 +C0000380 +E0000380 +E0000780 +F0000780 +F0000F80 +F8001F80 +F8001F80 +FC003F80 +FE003F80 +FE007F00 +7F00FE00 +7F00FE00 +3F00FC00 +1F00FC00 +1F00F800 +0F00F000 +0F00F000 +0700E000 +0300E000 +0300C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00180000 +00180000 +003C0000 +003E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0000001800 +0000003800 +0000003800 +0000007800 +0000007800 +000000F800 +000001F800 +000001F800 +000003F800 +000003F800 +000007F000 +00000FE000 +00000FE000 +00000FC000 +00000FC000 +00000F8000 +00000F0000 +00000F0000 +00000E0000 +00000E0000 +00000C0000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0030000000 +0070000000 +0070000000 +00F0000000 +00F0000000 +01F0000000 +01F0000000 +03F0000000 +07F0000000 +07F0000000 +0FE0000000 +0FE0000000 +0FC0000000 +0F80000000 +0F80000000 +0F00000000 +0F00000000 +0E00000000 +0E00000000 +0C00000000 +0800000000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +80000000 +C0000000 +E0000000 +E0000000 +F0000000 +F0000000 +F8000000 +F8000000 +FC000000 +FE000000 +FE000000 +7F000000 +7F000000 +3F000000 +1F000000 +1F000000 +0F000000 +0F000000 +07000000 +03000000 +03000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +0000C000 +0000E000 +0000E000 +0000F000 +0000F000 +0000F800 +0000FC00 +0000FC00 +0000FE00 +0000FE00 +00007F00 +00003F80 +00003F80 +00001F80 +00001F80 +00000F80 +00000780 +00000780 +00000380 +00000380 +00000180 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 16 28 6 33 +BITMAP +2000 +7000 +F800 +FC00 +FC80 +FCC0 +FCE0 +FCE0 +FCF0 +FCF0 +FCF8 +FCF8 +FCFC +FCFE +FCFE +FC7F +FC7F +FC3F +FC1F +FC1F +FC0F +FC0F +FC07 +FC03 +FC03 +F800 +F000 +E000 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 6 10 0 +BITMAP +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 8 21 14 36 +BITMAP +80 +C0 +E0 +E0 +F0 +F0 +F8 +F8 +FC +FE +FE +7F +7F +3F +1F +1F +0F +0F +07 +03 +03 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF60 +3FFFFFFEF0 +1FFFFFFDF0 +00000003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0003E003F0 +0003C003F0 +00018001F0 +0001BFFCF0 +00003FFE70 +00007FFF00 +00007FFF80 +00003FFE70 +0001BFFCF0 +00018001F0 +0003C003F0 +0003E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 36 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF60 +3FFFFFFEF0 +1FFFFFFDF0 +00000003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0003E003F0 +0003C003F0 +00018001F0 +00018000F0 +0000000070 +0000000000 +0000000000 +0000000070 +00018000F0 +00018001F0 +0003C003F0 +0003E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +0007E003F0 +00000003F0 +1FFFFFFDF0 +3FFFFFFEF0 +7FFFFFFF60 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F00003FFC0 +E00003FFE0 +000007FFF0 +000007FFF8 +E00003FFE7 +F00003FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFC3FFCF +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +0001800000 +0000000000 +0000000000 +0000000000 +0000000000 +0001800000 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 0 +BITMAP +0000000006 +000000000F +000000001F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000003F +000000001F +000000000F +0000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 58 6 3 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000180 +FC00000380 +FC00000380 +FC00000780 +FC00000780 +FC00000F80 +FC00001F80 +FC00001F80 +FC00003F80 +FC00003F80 +FC00007F00 +FC0000FE00 +FC0000FE00 +FC0000FC00 +FC0000FC00 +FC0000F800 +FC0000F000 +FC0000F000 +FC0000E000 +FC0000E000 +FC0000C000 +F800000000 +F3FFC00000 +E7FFC00000 +0FFFE00000 +0FFFE00000 +E7FFC00000 +F3FFC00000 +F800000000 +FC0000C000 +FC0000E000 +FC0000E000 +FC0000F000 +FC0000F000 +FC0000F800 +FC0000FC00 +FC0000FC00 +FC0000FE00 +FC0000FE00 +FC00007F00 +FC00003F80 +FC00003F80 +FC00001F80 +FC00001F80 +FC00000F80 +FC00000780 +FC00000780 +FC00000380 +FC00000380 +FC00000180 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 37 61 6 0 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F9FFFFFFC0 +73FFFFFFE0 +27FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC800001BF +FCC00003BF +FCE00003BF +FCE00007BF +FCF00007BF +FCF0000FBF +FCF8001FBF +FCF8001FBF +FCFC003FBF +FCFE003FBF +FCFE007F3F +FC7F00FE3F +FC7F00FE3F +FC3F00FC3F +FC1F00FC3F +FC1F00F83F +FC0F00F03F +FC0F00F03F +FC0700E03F +FC0300E03F +FC0300C03F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00018000F +F80018001F +FC003C003F +FC003E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC8000003F +FCC000003F +FCE000003F +FCE000003F +FCF000003F +FCF000003F +FCF800003F +FCF800003F +FCFC00003F +FCFE00003F +FCFE00003F +FC7F00003F +FC7F00003F +FC3F00003F +FC1F00003F +FC1F00003F +FC0F00003F +FC0F00003F +FC0700003F +FC0300003F +FC0300003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000C03F +FC0000E03F +FC0000E03F +FC0000F03F +FC0000F03F +FC0000F83F +FC0000FC3F +FC0000FC3F +FC0000FE3F +FC0000FE3F +FC00007F3F +FC00003FBF +FC00003FBF +FC00001FBF +FC00001FBF +FC00000FBF +FC000007BF +FC000007BF +FC000003BF +FC000003BF +FC000001BF +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000C03F +FC0000E03F +FC0000E03F +FC0000F03F +FC0000F03F +FC0000F83F +FC0000FC3F +FC0000FC3F +FC0000FE3F +FC0000FE3F +FC00007F3F +FC00003FBF +FC00003FBF +FC00001FBF +FC00001FBF +FC00000FBF +FC000007BF +FC000007BF +FC000003BF +FC000003BF +FC000001BF +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 3 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE0 +F3FFC3FFC0 +F800000000 +FC0000C000 +FC0000E000 +FC0000E000 +FC0000F000 +FC0000F000 +FC0000F800 +FC0000FC00 +FC0000FC00 +FC0000FE00 +FC0000FE00 +FC00007F00 +FC00003F80 +FC00003F80 +FC00001F80 +FC00001F80 +FC00000F80 +FC00000780 +FC00000780 +FC00000380 +FC00000380 +FC00000180 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF0 +73FFFFFFE0 +F9FFFFFFC0 +FC00000000 +FC80000000 +FCC0000000 +FCE0000000 +FCE0000000 +FCF0000000 +FCF0000000 +FCF8000000 +FCF8000000 +FCFC000000 +FCFE000000 +FCFE000000 +FC7F000000 +FC7F000000 +FC3F000000 +FC1F000000 +FC1F000000 +FC0F000000 +FC0F000000 +FC07000000 +FC03000000 +FC03000000 +F800000000 +F3FFC3FFC0 +E7FFC3FFE0 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE7 +03FFC3FFCF +000000001F +000000C03F +000000E03F +000000E03F +000000F03F +000000F03F +000000F83F +000000FC3F +000000FC3F +000000FE3F +000000FE3F +0000007F3F +0000003FBF +0000003FBF +0000001FBF +0000001FBF +0000000FBF +00000007BF +00000007BF +00000003BF +00000003BF +00000001BF +000000003F +01FFFFFFDF +03FFFFFFEF +07FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 57 10 7 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +0001800000 +0000000000 +0000000000 +0000000000 +0000000000 +0001800000 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 61 6 0 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F00000000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 58 6 3 +BITMAP +2000000000 +7000000000 +F800000000 +FC00000000 +FC00000180 +FC00000380 +FC00000380 +FC00000780 +FC00000780 +FC00000F80 +FC00001F80 +FC00001F80 +FC00003F80 +FC00003F80 +FC00007F00 +FC0000FE00 +FC0000FE00 +FC0000FC00 +FC0000FC00 +FC0000F800 +FC0000F000 +FC0000F000 +FC0000E000 +FC0000E000 +FC0000C000 +F800000000 +F000000000 +E000000000 +0000000000 +0000000000 +E000000000 +F000000000 +F800000000 +FC03000000 +FC07000000 +FC07000000 +FC0F000000 +FC0F000000 +FC1F000000 +FC1F000000 +FC3F000000 +FC7F000000 +FC7F000000 +FCFE000000 +FCFE000000 +FCFC000000 +FCF8000000 +FCF8000000 +FCF0000000 +FCF0000000 +FCE0000000 +FCE0000000 +FCC0000000 +FC80000000 +FC00000000 +F800000000 +7000000000 +2000000000 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 58 6 3 +BITMAP +2000000006 +700000000F +F80000001F +FC0000003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC007E003F +FC003E003F +FC003C003F +F80018001F +F00018000F +E000000007 +0000000000 +0000000000 +E000000007 +F00000000F +F80000001F +FC0300C03F +FC0700E03F +FC0700E03F +FC0F00F03F +FC0F00F03F +FC1F00F83F +FC1F00FC3F +FC3F00FC3F +FC7F00FE3F +FC7F00FE3F +FCFE007F3F +FCFE003FBF +FCFC003FBF +FCF8001FBF +FCF8001FBF +FCF0000FBF +FCF00007BF +FCE00007BF +FCE00003BF +FCC00003BF +FC800001BF +FC0000003F +F80000001F +700000000F +2000000006 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +80000180 +C0000380 +E0000380 +E0000780 +F0000780 +F0000F80 +F8001F80 +F8001F80 +FC003F80 +FE003F80 +FE007F00 +7F00FE00 +7F00FE00 +3F00FC00 +1F00FC00 +1F00F800 +0F00F000 +0F00F000 +0700E000 +0300E000 +0300C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +0300C000 +0700E000 +0700E000 +0F00F000 +0F00F000 +1F00F800 +1F00FC00 +3F00FC00 +7F00FE00 +7F00FE00 +FE007F00 +FE003F80 +FC003F80 +F8001F80 +F8001F80 +F0000F80 +F0000780 +E0000780 +E0000380 +C0000380 +80000180 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 25 50 14 7 +BITMAP +80000180 +C0000380 +E0000380 +E0000780 +F0000780 +F0000F80 +F8001F80 +F8001F80 +FC003F80 +FE003F80 +FE007F00 +7F00FE00 +7F00FE00 +3F00FC00 +1F00FC00 +1F00F800 +0F00F000 +0F00F000 +0700E000 +0300E000 +0300C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00180000 +00180000 +003C0000 +003E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +007E0000 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 64 10 0 +BITMAP +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +3FFFFFFE00 +1FFFFFFC00 +0000000000 +0000001800 +0000003800 +0000003800 +0000007800 +0000007800 +000000F800 +000001F800 +000001F800 +000003F800 +000003F800 +000007F000 +00000FE000 +00000FE000 +00000FC000 +00000FC000 +00000F8000 +00000F0000 +00000F0000 +00000E0000 +00000E0000 +00000C0000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0000000000 +0030000000 +0070000000 +0070000000 +00F0000000 +00F0000000 +01F0000000 +01F0000000 +03F0000000 +07F0000000 +07F0000000 +0FE0000000 +0FE0000000 +0FC0000000 +0F80000000 +0F80000000 +0F00000000 +0F00000000 +0E00000000 +0E00000000 +0C00000000 +0800000000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 6 50 23 7 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +78 +30 +30 +00 +00 +00 +00 +30 +30 +78 +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 64 6 0 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC807E01BF +FCC07E03BF +FCE07E03BF +FCE07E07BF +FCF07E07BF +FCF07E0FBF +FCF87E1FBF +FCF87E1FBF +FCFC7E3FBF +FCFE7E3FBF +FCFE7E7F3F +FC7F7EFE3F +FC7F7EFE3F +FC3F7EFC3F +FC1F7EFC3F +FC1F7EF83F +FC0F7EF03F +FC0F7EF03F +FC077EE03F +FC033EE03F +FC033CC03F +F80018001F +F3FFDBFFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +E7FFC3FFE7 +F3FFDBFFCF +F80018001F +FC033CC03F +FC073EE03F +FC077EE03F +FC0F7EF03F +FC0F7EF03F +FC1F7EF83F +FC1F7EFC3F +FC3F7EFC3F +FC7F7EFE3F +FC7F7EFE3F +FCFE7E7F3F +FCFE7E3FBF +FCFC7E3FBF +FCF87E1FBF +FCF87E1FBF +FCF07E0FBF +FCF07E07BF +FCE07E07BF +FCE07E03BF +FCC07E03BF +FC807E01BF +FC0000003F +F9FFFFFFDF +73FFFFFFEF +27FFFFFFF6 +0FFFFFFFF8 +0FFFFFFFF8 +07FFFFFFF0 +ENDCHAR +STARTCHAR yen +ENCODING 165 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 50 10 7 +BITMAP +0800001800 +0C00003800 +0E00003800 +0E00007800 +0F00007800 +0F0000F800 +0F8001F800 +0F8001F800 +0FC003F800 +0FE003F800 +0FE007F000 +07F00FE000 +07F00FE000 +03F00FC000 +01F00FC000 +01F00F8000 +00F00F0000 +00F00F0000 +00700E0000 +00300E0000 +00300C0000 +0000000000 +3FFC3FFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFDBFFC00 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +ENDCHAR +STARTCHAR brokenbar +ENCODING 166 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 6 50 23 7 +BITMAP +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +78 +30 +30 +00 +00 +00 +00 +30 +30 +78 +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 40 35 6 29 +BITMAP +07FFFFFFF0 +0FFFFFFFF8 +0FFFFFFFF8 +27FFFFFFF6 +73FFFFFFEF +F9FFFFFFDF +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +FC0000003F +F80000001F +F3FFC3FFCF +E7FFC3FFE7 +0FFFE7FFF0 +0FFFE7FFF8 +07FFC3FFE0 +03FFC3FFC0 +ENDCHAR +STARTCHAR plusminus +ENCODING 177 +SWIDTH 816 0 +DWIDTH 52 0 +BBX 33 57 10 0 +BITMAP +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0003E00000 +0003C00000 +0001800000 +3FFDBFFC00 +7FFC3FFE00 +FFFE7FFF00 +FFFE7FFF80 +7FFC3FFE00 +3FFDBFFC00 +0001800000 +0003C00000 +0003E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0007E00000 +0000000000 +1FFFFFFC00 +3FFFFFFE00 +7FFFFFFF00 +FFFFFFFF80 +FFFFFFFF80 +7FFFFFFF00 +ENDCHAR +STARTCHAR .notdef +ENCODING -1 +SWIDTH 364 0 +DWIDTH 23 0 +BBX 17 43 2 0 +BITMAP +FFFF80 +FFFF80 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +C00180 +FFFF80 +FFFF80 +ENDCHAR +STARTCHAR .null +ENCODING -1 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR nonmarkingreturn +ENCODING -1 +SWIDTH 333 0 +DWIDTH 21 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +ENDFONT diff --git a/examples/fonts/DSEG7Classic-Regular-60.bdf b/examples/fonts/DSEG7Classic-Regular-60.bdf new file mode 100755 index 0000000..926f0db --- /dev/null +++ b/examples/fonts/DSEG7Classic-Regular-60.bdf @@ -0,0 +1,3916 @@ +STARTFONT 2.1 +FONT -FontForge-DSEG7 Classic-Book-R-Normal--60-580-75-75-P-458-ISO10646-1 +SIZE 58 75 75 +FONTBOUNDINGBOX 47 60 -4 0 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Created by Keshikan" +COMMENT "with FontForge 2.0 (http://fontforge.sf.net)" +STARTPROPERTIES 40 +FOUNDRY "FontForge" +FAMILY_NAME "DSEG7 Classic" +WEIGHT_NAME "Book" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 60 +POINT_SIZE 580 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "P" +AVERAGE_WIDTH 458 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "DSEG7Classic-Regular" +FACE_NAME "DSEG7 Classic-Regular" +COPYRIGHT "Created by Keshikan" +FONT_VERSION "0.46" +FONT_ASCENT 60 +FONT_DESCENT 0 +UNDERLINE_POSITION -9 +UNDERLINE_THICKNESS 3 +X_HEIGHT 56 +CAP_HEIGHT 56 +RAW_ASCENT 1000 +RAW_DESCENT 0 +NORM_SPACE 12 +RELATIVE_WEIGHT 40 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 0 +SUPERSCRIPT_Y 28 +SUPERSCRIPT_SIZE 42 +SUBSCRIPT_X 0 +SUBSCRIPT_Y 8 +SUBSCRIPT_SIZE 42 +FIGURE_WIDTH 49 +AVG_LOWERCASE_WIDTH 490 +AVG_UPPERCASE_WIDTH 490 +ENDPROPERTIES +CHARS 72 +STARTCHAR space +ENCODING 32 +SWIDTH 200 0 +DWIDTH 12 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 31 6 9 27 +BITMAP +3FFFFFF8 +7FFFFFFC +FFFFFFFE +FFFFFFFE +7FFFFFFC +3FFFFFF8 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 8 7 -4 0 +BITMAP +3C +7E +FF +FF +FF +7E +3C +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 6 54 37 3 +BITMAP +18 +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +1C +00 +00 +1C +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +18 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB0 +07FFFFFF78 +03FFFFFEF8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +07FFFFFF78 +0FFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 60 9 0 +BITMAP +7FFFFFFC00 +FFFFFFFE00 +FFFFFFFE00 +7FFFFFFD80 +3FFFFFFBC0 +1FFFFFF7C0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +00000007C0 +3FFFFFFBC0 +7FFFFFFDC0 +FFFFFFFE00 +FFFFFFFE00 +7FFFFFFDC0 +3FFFFFFBC0 +00000007C0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +0000000FC0 +1FFFFFF7C0 +3FFFFFFBC0 +7FFFFFFD80 +FFFFFFFE00 +FFFFFFFE00 +7FFFFFFC00 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 54 6 3 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000030 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +0000000038 +0000000078 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000030 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 200 0 +DWIDTH 12 0 +BBX 8 32 2 13 +BITMAP +3C +7E +FF +FF +FF +7E +3C +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +7E +7E +FF +FF +7E +7E +3C +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 33 6 0 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +0000000030 +0000000078 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +07FFFFFF78 +0FFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +C000000000 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 54 6 3 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 6 26 37 3 +BITMAP +1C +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +18 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +0000000030 +0000000078 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +C000000000 +0000000000 +0000000000 +C000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 30 6 3 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 33 6 0 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000030 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 30 6 3 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 29 6 0 +BITMAP +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 54 6 3 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB0 +07FFFFFF78 +03FFFFFEF8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000038 +0000000000 +0000000000 +C000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 31 6 9 0 +BITMAP +1FFFFFF0 +3FFFFFF8 +7FFFFFFC +FFFFFFFE +FFFFFFFE +7FFFFFFC +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 33 6 0 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +0000000030 +0000000078 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +07FFFFFF78 +0FFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +C000000000 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 54 6 3 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 6 26 37 3 +BITMAP +1C +3C +7C +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +FC +7C +3C +18 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +0000000030 +0000000078 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFF80 +F7FFFFFF00 +FBFFFFFE00 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E000000000 +C000000000 +0000000000 +0000000000 +C000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 30 6 3 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 33 6 0 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 3 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000030 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 30 6 3 +BITMAP +07FFFFFF00 +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +6000000000 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 34 57 6 0 +BITMAP +6000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +F800000000 +F000000000 +E7FFFFFF00 +CFFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFF80 +E7FFFFFF00 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 29 6 0 +BITMAP +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E000000078 +C000000038 +0000000000 +0000000000 +C000000038 +E000000078 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FBFFFFFEF8 +F7FFFFFF78 +6FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 54 6 3 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +CFFFFFFFB8 +E7FFFFFF78 +F0000000F8 +F8000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000000F8 +F000000078 +6000000030 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 57 6 0 +BITMAP +6000000030 +F000000078 +F8000000F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB8 +07FFFFFF78 +00000000F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +03FFFFFEF8 +07FFFFFF78 +0FFFFFFFB0 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 60 6 0 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFFB0 +07FFFFFF78 +03FFFFFEF8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000001F8 +00000000F8 +0000000078 +0000000038 +0000000000 +0000000000 +C000000000 +E000000000 +F000000000 +F800000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FC00000000 +FBFFFFFE00 +F7FFFFFF00 +6FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 816 0 +DWIDTH 49 0 +BBX 37 33 6 27 +BITMAP +0FFFFFFF80 +1FFFFFFFC0 +1FFFFFFFC0 +6FFFFFFFB0 +F7FFFFFF78 +FBFFFFFEF8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +FC000001F8 +F8000001F8 +F0000000F8 +E7FFFFFF78 +CFFFFFFFB8 +1FFFFFFFC0 +1FFFFFFFC0 +0FFFFFFF80 +07FFFFFF00 +ENDCHAR +STARTCHAR .notdef +ENCODING -1 +SWIDTH 364 0 +DWIDTH 22 0 +BBX 16 40 2 0 +BITMAP +FFFF +FFFF +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +C003 +FFFF +FFFF +ENDCHAR +STARTCHAR .null +ENCODING -1 +SWIDTH 0 0 +DWIDTH 0 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR nonmarkingreturn +ENCODING -1 +SWIDTH 333 0 +DWIDTH 20 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +ENDFONT diff --git a/examples/fonts/Helvetica-Bold-16.bdf b/examples/fonts/Helvetica-Bold-16.bdf new file mode 100755 index 0000000..2a34591 --- /dev/null +++ b/examples/fonts/Helvetica-Bold-16.bdf @@ -0,0 +1,4194 @@ +STARTFONT 2.1 +FONT -FontForge-Helvetica-Bold-R-Normal--17-160-75-75-P-93-ISO10646-1 +SIZE 16 75 75 +FONTBOUNDINGBOX 20 21 -3 -4 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype AG and/or its subsidiaries." +STARTPROPERTIES 40 +FOUNDRY "FontForge" +FAMILY_NAME "Helvetica" +WEIGHT_NAME "Bold" +SLANT "R" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 17 +POINT_SIZE 160 +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING "P" +AVERAGE_WIDTH 93 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ISO10646-1" +FONT_NAME "Helvetica-Bold" +FACE_NAME "Helvetica Bold" +COPYRIGHT "Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype AG and/or its subsidiaries." +FONT_VERSION "001.007" +FONT_ASCENT 14 +FONT_DESCENT 3 +UNDERLINE_POSITION -2 +UNDERLINE_THICKNESS 1 +X_HEIGHT 8 +CAP_HEIGHT 12 +RAW_ASCENT 800 +RAW_DESCENT 200 +NORM_SPACE 5 +RELATIVE_WEIGHT 70 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 0 +SUPERSCRIPT_Y 8 +SUPERSCRIPT_SIZE 11 +SUBSCRIPT_X 0 +SUBSCRIPT_Y 2 +SUBSCRIPT_SIZE 11 +FIGURE_WIDTH 9 +AVG_LOWERCASE_WIDTH 90 +AVG_UPPERCASE_WIDTH 113 +ENDPROPERTIES +CHARS 229 +STARTCHAR space +ENCODING 32 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +STARTCHAR exclam +ENCODING 33 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 2 13 2 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +80 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 474 0 +DWIDTH 8 0 +BBX 4 5 2 8 +BITMAP +90 +90 +90 +90 +90 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +1B00 +1B00 +1300 +7F80 +7F80 +3200 +3600 +FF80 +FF00 +2600 +2600 +2400 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 15 1 -2 +BITMAP +10 +7C +FE +D6 +D7 +D0 +F0 +7C +1E +17 +D3 +FE +7C +10 +10 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 889 0 +DWIDTH 15 0 +BBX 14 12 1 0 +BITMAP +7040 +F8C0 +8C80 +8D80 +F900 +7200 +0270 +04F8 +058C +098C +18F8 +1070 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 11 13 1 0 +BITMAP +1C00 +3E00 +7300 +7300 +3600 +3E00 +3CC0 +7EC0 +E7C0 +C780 +E380 +7FC0 +3CE0 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 238 0 +DWIDTH 4 0 +BBX 2 5 1 8 +BITMAP +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 17 1 -4 +BITMAP +30 +30 +60 +60 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +60 +60 +30 +30 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 17 1 -4 +BITMAP +80 +C0 +60 +60 +60 +70 +30 +30 +30 +30 +30 +70 +60 +60 +60 +C0 +80 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 389 0 +DWIDTH 7 0 +BBX 5 6 1 7 +BITMAP +20 +20 +F8 +70 +D0 +10 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 8 1 0 +BITMAP +18 +18 +18 +FF +FF +18 +18 +18 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 5 1 -3 +BITMAP +E0 +E0 +60 +40 +80 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 2 0 4 +BITMAP +F8 +F8 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 2 1 0 +BITMAP +E0 +E0 +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 13 0 0 +BITMAP +18 +18 +18 +30 +30 +30 +60 +60 +60 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +3C +7E +E6 +C7 +C7 +C7 +C7 +C7 +C7 +E6 +7E +3C +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 5 12 1 0 +BITMAP +18 +18 +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +3E00 +7F00 +6300 +6380 +0380 +0700 +0F00 +1C00 +3800 +7000 +7F80 +FF80 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +3E00 +7F00 +6300 +6300 +0300 +0E00 +0F00 +0380 +E380 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +0700 +0F00 +1F00 +1F00 +3700 +6700 +6700 +FF80 +FF80 +0700 +0700 +0700 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +7E +FE +C0 +C0 +FC +FE +C7 +07 +07 +C6 +FE +7C +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +3C +7E +E6 +C0 +FC +FE +C7 +C7 +C7 +C7 +7E +3C +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +FF80 +FF80 +0300 +0700 +0600 +0C00 +0C00 +1C00 +1800 +3800 +3800 +3800 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +3C +FE +C6 +C6 +E6 +7C +FE +C7 +C7 +C7 +FE +7C +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +7C +FE +C6 +C7 +C7 +C7 +FF +7F +07 +C6 +FE +78 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 2 8 2 0 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +ENDCHAR +STARTCHAR semicolon +ENCODING 59 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 2 11 2 -3 +BITMAP +C0 +C0 +00 +00 +00 +00 +C0 +C0 +40 +C0 +80 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 9 1 0 +BITMAP +01 +07 +1E +F8 +C0 +F0 +3E +07 +01 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 6 1 1 +BITMAP +FF +FF +00 +00 +FF +FF +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 8 1 0 +BITMAP +E0 +78 +1E +03 +0F +7C +E0 +80 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 0 +BITMAP +3C +7F +E7 +E3 +03 +07 +0E +1C +18 +00 +00 +1C +1C +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 975 0 +DWIDTH 17 0 +BBX 13 13 2 0 +BITMAP +0F80 +38E0 +6030 +4750 +CFD0 +D8D8 +D890 +D990 +DFE0 +6FC0 +7020 +3CE0 +0F80 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 13 0 0 +BITMAP +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 13 1 0 +BITMAP +FF00 +FFC0 +E1C0 +E0C0 +E1C0 +FF80 +FFC0 +E1C0 +E0C0 +E0C0 +E1C0 +FFC0 +FF80 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 11 13 1 0 +BITMAP +1F00 +7F80 +71C0 +E0C0 +E000 +C000 +C000 +C000 +E0E0 +E0C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 11 13 1 0 +BITMAP +FF00 +FF80 +E1C0 +E0C0 +E0E0 +E0E0 +E0E0 +E0E0 +E0C0 +E1C0 +E1C0 +FF80 +FF00 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +FF80 +FF80 +E000 +E000 +E000 +FF80 +FF80 +E000 +E000 +E000 +E000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +FF80 +FF80 +E000 +E000 +E000 +FF00 +FF00 +E000 +E000 +E000 +E000 +E000 +E000 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 13 1 0 +BITMAP +1F00 +3FC0 +71E0 +E0E0 +E000 +C000 +C3E0 +C3E0 +E060 +E0E0 +71E0 +3FE0 +1F60 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 13 1 0 +BITMAP +E0C0 +E0C0 +E0C0 +E0C0 +E0C0 +FFC0 +FFC0 +E0C0 +E0C0 +E0C0 +E0C0 +E0C0 +E0C0 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 13 1 0 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 13 0 0 +BITMAP +03 +03 +03 +03 +03 +03 +03 +03 +E3 +E3 +67 +7F +3E +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 11 13 1 0 +BITMAP +E1E0 +E3C0 +E780 +E700 +EE00 +FC00 +FE00 +FE00 +E700 +E380 +E3C0 +E1C0 +E0E0 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +FF80 +FF80 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 833 0 +DWIDTH 14 0 +BBX 12 13 1 0 +BITMAP +F0F0 +F0F0 +F0B0 +F8B0 +F9B0 +F9B0 +F9B0 +E930 +ED30 +EF30 +EF30 +E730 +E630 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 13 1 0 +BITMAP +E0C0 +F0C0 +F0C0 +F8C0 +F8C0 +ECC0 +ECC0 +E6C0 +E6C0 +E3C0 +E3C0 +E1C0 +E1C0 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 13 1 0 +BITMAP +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +FF00 +FF80 +E180 +E1C0 +E1C0 +E180 +FF80 +FF00 +E000 +E000 +E000 +E000 +E000 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 13 1 0 +BITMAP +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E160 +E3E0 +71C0 +3FE0 +1F60 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 13 1 0 +BITMAP +FF80 +FFC0 +E1C0 +E0C0 +E0C0 +E0C0 +E1C0 +FF80 +FF80 +E1C0 +E1C0 +E1C0 +E0C0 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +3E00 +7F00 +E380 +C180 +E000 +FC00 +7F80 +0F80 +01C0 +C1C0 +E180 +7F80 +3E00 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 10 13 0 0 +BITMAP +FFC0 +FFC0 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 13 1 0 +BITMAP +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 11 13 0 0 +BITMAP +E0E0 +60E0 +70C0 +71C0 +31C0 +3980 +3980 +1B80 +1B00 +1F00 +0F00 +0E00 +0E00 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 944 0 +DWIDTH 16 0 +BBX 16 13 0 0 +BITMAP +E187 +63C6 +73C6 +73CE +73CE +33CC +366C +3E6C +1E7C +1E78 +1E78 +1C38 +0C30 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +E1C0 +E380 +7300 +7700 +3E00 +1E00 +1C00 +3E00 +3E00 +7700 +7380 +E380 +C1C0 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +C1C0 +E180 +6380 +7300 +3700 +3E00 +1E00 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 10 13 0 0 +BITMAP +7FC0 +7FC0 +03C0 +0380 +0700 +0E00 +0E00 +1C00 +3800 +7800 +7000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR bracketleft +ENCODING 91 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 17 1 -4 +BITMAP +F0 +F0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +F0 +F0 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 13 0 0 +BITMAP +C0 +C0 +C0 +C0 +60 +60 +60 +30 +30 +30 +18 +18 +18 +ENDCHAR +STARTCHAR bracketright +ENCODING 93 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 17 0 -4 +BITMAP +F8 +F8 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +F8 +F8 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 7 6 1 6 +BITMAP +18 +3C +3C +64 +66 +C2 +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 1 0 -2 +BITMAP +FF80 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 3 2 0 11 +BITMAP +E0 +60 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 9 0 0 +BITMAP +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +C000 +C000 +C000 +C000 +DE00 +FF00 +E380 +C380 +C380 +C380 +E300 +FF00 +DE00 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 9 1 0 +BITMAP +3C +FE +E7 +C0 +C0 +C0 +E7 +FE +3C +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 0 +BITMAP +03 +03 +03 +03 +7B +FF +E7 +C3 +C3 +C3 +E7 +FF +7B +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 9 0 0 +BITMAP +3E00 +7F00 +6380 +FF80 +FF80 +E000 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 13 0 0 +BITMAP +38 +38 +70 +70 +F8 +F8 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 -4 +BITMAP +3B +7F +E7 +C3 +C3 +C3 +E7 +FF +3B +03 +E3 +FF +7C +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 0 +BITMAP +C0 +C0 +C0 +C0 +DE +FF +E3 +E3 +C3 +C3 +C3 +C3 +C3 +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 13 1 0 +BITMAP +E0 +E0 +00 +00 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 4 17 0 -4 +BITMAP +70 +70 +00 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +E0 +E0 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 13 1 0 +BITMAP +E0 +E0 +E0 +E0 +E7 +EE +FC +F8 +FC +EC +EE +E7 +E7 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 13 1 0 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 889 0 +DWIDTH 15 0 +BBX 13 9 1 0 +BITMAP +DEF0 +FFF8 +E738 +C718 +C718 +C718 +C718 +C718 +C718 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 9 1 0 +BITMAP +DE +FF +E3 +E3 +C3 +C3 +C3 +C3 +C3 +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 9 1 0 +BITMAP +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 -4 +BITMAP +DE00 +FF00 +E380 +C380 +C380 +C380 +E300 +FF00 +DE00 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 -4 +BITMAP +3B +FF +E7 +C3 +C3 +C3 +E7 +FF +7B +03 +03 +03 +03 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 389 0 +DWIDTH 7 0 +BBX 5 9 1 0 +BITMAP +D8 +F8 +E0 +E0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 9 1 0 +BITMAP +7C +FE +C7 +FC +7E +07 +C7 +FE +7C +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 11 0 0 +BITMAP +70 +70 +F8 +F8 +70 +70 +70 +70 +70 +78 +38 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 9 1 0 +BITMAP +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +7B +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 9 0 0 +BITMAP +E180 +6380 +7300 +7300 +3700 +3600 +1E00 +1C00 +1C00 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 13 9 0 0 +BITMAP +E718 +6738 +6730 +65B0 +75B0 +3DE0 +3DE0 +38E0 +18E0 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 9 1 0 +BITMAP +E7 +E6 +7E +7C +38 +38 +7C +EE +C7 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 -4 +BITMAP +E180 +6380 +7300 +7300 +3700 +3600 +3E00 +1E00 +1C00 +1C00 +1C00 +7800 +7800 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 500 0 +DWIDTH 9 0 +BBX 8 9 0 0 +BITMAP +7F +7F +0F +0E +1C +38 +70 +FF +FF +ENDCHAR +STARTCHAR braceleft +ENCODING 123 +SWIDTH 389 0 +DWIDTH 7 0 +BBX 5 16 1 -3 +BITMAP +38 +38 +60 +60 +60 +60 +60 +E0 +C0 +60 +60 +60 +60 +60 +70 +38 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 280 0 +DWIDTH 5 0 +BBX 2 13 1 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR braceright +ENCODING 125 +SWIDTH 389 0 +DWIDTH 7 0 +BBX 6 16 0 -3 +BITMAP +E0 +70 +30 +30 +30 +30 +30 +1C +1C +38 +30 +30 +30 +30 +30 +F0 +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 3 1 3 +BITMAP +72 +FF +8E +ENDCHAR +STARTCHAR exclamdown +ENCODING 161 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 2 12 2 -3 +BITMAP +C0 +C0 +00 +80 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR cent +ENCODING 162 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 11 1 -1 +BITMAP +04 +3C +7E +EF +D0 +D0 +D0 +F7 +FE +7C +20 +ENDCHAR +STARTCHAR sterling +ENCODING 163 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 0 +BITMAP +1E00 +7F00 +7380 +6180 +6000 +7000 +FC00 +3000 +3000 +3000 +7C80 +7F80 +4780 +ENDCHAR +STARTCHAR currency +ENCODING 164 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 10 0 1 +BITMAP +0080 +DD80 +7F00 +7300 +6300 +6300 +7300 +7F00 +DD80 +0080 +ENDCHAR +STARTCHAR yen +ENCODING 165 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +E180 +6380 +7300 +3300 +3E00 +FF80 +1C00 +FF80 +0C00 +0C00 +0C00 +0C00 +ENDCHAR +STARTCHAR brokenbar +ENCODING 166 +SWIDTH 280 0 +DWIDTH 5 0 +BBX 2 13 1 0 +BITMAP +C0 +C0 +C0 +C0 +C0 +00 +00 +00 +C0 +C0 +C0 +C0 +C0 +ENDCHAR +STARTCHAR section +ENCODING 167 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 16 1 -3 +BITMAP +3C +7E +C6 +E0 +78 +7C +DE +C7 +E3 +FE +3C +0E +06 +E6 +7E +3C +ENDCHAR +STARTCHAR dieresis +ENCODING 168 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 6 2 0 11 +BITMAP +DC +DC +ENDCHAR +STARTCHAR copyright +ENCODING 169 +SWIDTH 737 0 +DWIDTH 13 0 +BBX 13 13 0 0 +BITMAP +0F80 +3DE0 +6070 +CFB0 +D890 +D818 +D818 +D8D8 +CDB0 +6730 +6060 +3DC0 +0F80 +ENDCHAR +STARTCHAR ordfeminine +ENCODING 170 +SWIDTH 370 0 +DWIDTH 6 0 +BBX 6 9 0 4 +BITMAP +78 +4C +7C +CC +CC +7C +00 +00 +7C +ENDCHAR +STARTCHAR guillemotleft +ENCODING 171 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 7 7 1 1 +BITMAP +02 +26 +6C +C8 +CC +66 +22 +ENDCHAR +STARTCHAR logicalnot +ENCODING 172 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 5 1 2 +BITMAP +FF +FF +03 +03 +03 +ENDCHAR +STARTCHAR registered +ENCODING 174 +SWIDTH 737 0 +DWIDTH 13 0 +BBX 13 13 0 0 +BITMAP +0F80 +3FE0 +6060 +EF30 +C990 +C998 +CF98 +CB18 +C910 +E9B0 +6060 +3DE0 +0F80 +ENDCHAR +STARTCHAR macron +ENCODING 175 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 6 1 0 10 +BITMAP +FC +ENDCHAR +STARTCHAR degree +ENCODING 176 +SWIDTH 400 0 +DWIDTH 7 0 +BBX 5 5 1 7 +BITMAP +70 +88 +88 +98 +70 +ENDCHAR +STARTCHAR plusminus +ENCODING 177 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 9 1 0 +BITMAP +18 +18 +FF +FF +18 +18 +18 +FF +FF +ENDCHAR +STARTCHAR twosuperior +ENCODING 178 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 6 8 0 4 +BITMAP +78 +D8 +C8 +18 +38 +70 +40 +FC +ENDCHAR +STARTCHAR threesuperior +ENCODING 179 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 6 8 0 4 +BITMAP +78 +D8 +08 +38 +08 +CC +C8 +78 +ENDCHAR +STARTCHAR acute +ENCODING 180 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 2 2 11 +BITMAP +70 +E0 +ENDCHAR +STARTCHAR mu +ENCODING 181 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 -4 +BITMAP +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +FB +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR paragraph +ENCODING 182 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 15 0 -3 +BITMAP +7F80 +FD80 +FD80 +FD80 +FD80 +7D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +0D80 +ENDCHAR +STARTCHAR periodcentered +ENCODING 183 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 3 1 3 +BITMAP +40 +E0 +C0 +ENDCHAR +STARTCHAR cedilla +ENCODING 184 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 4 0 -4 +BITMAP +20 +70 +10 +F0 +ENDCHAR +STARTCHAR onesuperior +ENCODING 185 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 8 0 4 +BITMAP +30 +F0 +30 +30 +30 +30 +30 +30 +ENDCHAR +STARTCHAR ordmasculine +ENCODING 186 +SWIDTH 365 0 +DWIDTH 6 0 +BBX 6 9 0 4 +BITMAP +78 +CC +CC +CC +CC +78 +00 +00 +7C +ENDCHAR +STARTCHAR guillemotright +ENCODING 187 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 7 7 1 1 +BITMAP +80 +C8 +6C +26 +66 +CC +88 +ENDCHAR +STARTCHAR onequarter +ENCODING 188 +SWIDTH 834 0 +DWIDTH 14 0 +BBX 13 12 0 0 +BITMAP +3060 +F040 +3080 +3180 +3100 +3300 +3230 +3450 +0CD0 +0890 +19F8 +1010 +ENDCHAR +STARTCHAR onehalf +ENCODING 189 +SWIDTH 834 0 +DWIDTH 14 0 +BBX 13 12 0 0 +BITMAP +3060 +F040 +3080 +3180 +3100 +3370 +32D8 +34C8 +0C18 +0830 +1840 +10F8 +ENDCHAR +STARTCHAR threequarters +ENCODING 190 +SWIDTH 834 0 +DWIDTH 14 0 +BBX 14 12 0 0 +BITMAP +7820 +4860 +0840 +38C0 +0C80 +CD18 +CB38 +7A58 +06D8 +04FC +0818 +1818 +ENDCHAR +STARTCHAR questiondown +ENCODING 191 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 12 1 -3 +BITMAP +18 +18 +00 +18 +18 +38 +70 +E0 +C3 +E7 +7F +3C +ENDCHAR +STARTCHAR Agrave +ENCODING 192 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 16 0 0 +BITMAP +1C00 +0600 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR Aacute +ENCODING 193 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 16 0 0 +BITMAP +0380 +0600 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR Acircumflex +ENCODING 194 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 16 0 0 +BITMAP +0F00 +0980 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR Atilde +ENCODING 195 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 16 0 0 +BITMAP +0E80 +1300 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR Adieresis +ENCODING 196 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 16 0 0 +BITMAP +1D80 +1D80 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR Aring +ENCODING 197 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 17 0 0 +BITMAP +0600 +0900 +0600 +0000 +0700 +0F00 +0F00 +0F80 +1D80 +1980 +19C0 +38C0 +3FC0 +3FE0 +70E0 +6060 +E070 +ENDCHAR +STARTCHAR AE +ENCODING 198 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 16 13 0 0 +BITMAP +0FFF +0FFF +0DC0 +1DC0 +19C0 +19FE +39FE +31C0 +3FC0 +7FC0 +61C0 +61FF +E1FF +ENDCHAR +STARTCHAR Ccedilla +ENCODING 199 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 11 17 1 -4 +BITMAP +1F00 +7F80 +71C0 +E0C0 +E000 +C000 +C000 +C000 +E0E0 +E0C0 +71C0 +7F80 +1F00 +0800 +0E00 +0600 +1C00 +ENDCHAR +STARTCHAR Egrave +ENCODING 200 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +3800 +1800 +0000 +FF80 +FF80 +E000 +E000 +E000 +FF80 +FF80 +E000 +E000 +E000 +E000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR Eacute +ENCODING 201 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +0600 +0C00 +0000 +FF80 +FF80 +E000 +E000 +E000 +FF80 +FF80 +E000 +E000 +E000 +E000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR Ecircumflex +ENCODING 202 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +1C00 +3600 +0000 +FF80 +FF80 +E000 +E000 +E000 +FF80 +FF80 +E000 +E000 +E000 +E000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR Edieresis +ENCODING 203 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +3600 +3600 +0000 +FF80 +FF80 +E000 +E000 +E000 +FF80 +FF80 +E000 +E000 +E000 +E000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR Igrave +ENCODING 204 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 4 16 0 0 +BITMAP +C0 +60 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR Iacute +ENCODING 205 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 4 16 1 0 +BITMAP +70 +60 +00 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR Icircumflex +ENCODING 206 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 16 0 0 +BITMAP +70 +D8 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR Idieresis +ENCODING 207 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 16 0 0 +BITMAP +D8 +D8 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR Eth +ENCODING 208 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 12 13 0 0 +BITMAP +7F80 +7FC0 +70E0 +7060 +7070 +FE70 +FE70 +7070 +7060 +70E0 +70E0 +7FC0 +7F80 +ENDCHAR +STARTCHAR Ntilde +ENCODING 209 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 16 1 0 +BITMAP +1D00 +2600 +0000 +E0C0 +F0C0 +F0C0 +F8C0 +F8C0 +ECC0 +ECC0 +E6C0 +E6C0 +E3C0 +E3C0 +E1C0 +E1C0 +ENDCHAR +STARTCHAR Ograve +ENCODING 210 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 16 1 0 +BITMAP +1C00 +0C00 +0000 +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR Oacute +ENCODING 211 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 16 1 0 +BITMAP +0300 +0600 +0000 +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR Ocircumflex +ENCODING 212 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 16 1 0 +BITMAP +0E00 +1B00 +0000 +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR Otilde +ENCODING 213 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 16 1 0 +BITMAP +1F80 +1700 +0000 +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR Odieresis +ENCODING 214 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 11 16 1 0 +BITMAP +1B00 +1B00 +0000 +1F00 +3FC0 +71C0 +E0E0 +E060 +C060 +C060 +C060 +E060 +E0E0 +71C0 +3FC0 +1F00 +ENDCHAR +STARTCHAR multiply +ENCODING 215 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 8 1 0 +BITMAP +C3 +E7 +7E +3C +3C +7E +E7 +42 +ENDCHAR +STARTCHAR Oslash +ENCODING 216 +SWIDTH 778 0 +DWIDTH 13 0 +BBX 12 13 1 0 +BITMAP +1F30 +3FE0 +71C0 +E0E0 +E160 +C260 +C460 +C860 +F060 +F0E0 +71C0 +FFC0 +9F00 +ENDCHAR +STARTCHAR Ugrave +ENCODING 217 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 16 1 0 +BITMAP +3800 +0C00 +0000 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR Uacute +ENCODING 218 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 16 1 0 +BITMAP +0700 +0C00 +0000 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR Ucircumflex +ENCODING 219 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 16 1 0 +BITMAP +1E00 +1300 +0000 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR Udieresis +ENCODING 220 +SWIDTH 722 0 +DWIDTH 12 0 +BBX 10 16 1 0 +BITMAP +3B00 +3B00 +0000 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +E1C0 +71C0 +7F80 +1F00 +ENDCHAR +STARTCHAR Yacute +ENCODING 221 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +0600 +0C00 +0000 +C1C0 +E180 +6380 +7300 +3700 +3E00 +1E00 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +ENDCHAR +STARTCHAR Thorn +ENCODING 222 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 13 1 0 +BITMAP +E000 +E000 +FF00 +FF80 +E180 +E1C0 +E1C0 +E180 +FF80 +FF00 +E000 +E000 +E000 +ENDCHAR +STARTCHAR germandbls +ENCODING 223 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +3E00 +7F00 +E700 +E300 +E700 +EE00 +EF00 +E380 +E380 +E380 +E380 +EF00 +EE00 +ENDCHAR +STARTCHAR agrave +ENCODING 224 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +3800 +1800 +0000 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR aacute +ENCODING 225 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +0600 +0C00 +0000 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR acircumflex +ENCODING 226 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +1E00 +3600 +0000 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR atilde +ENCODING 227 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 0 +BITMAP +3B00 +2E00 +0000 +0000 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR adieresis +ENCODING 228 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 0 +BITMAP +3600 +3600 +0000 +0000 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR aring +ENCODING 229 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 0 +BITMAP +0C00 +1200 +1200 +0C00 +3E00 +7F00 +6300 +0300 +3F00 +6300 +E300 +7F00 +7B80 +ENDCHAR +STARTCHAR ae +ENCODING 230 +SWIDTH 889 0 +DWIDTH 15 0 +BBX 15 9 0 0 +BITMAP +3EF8 +7FFC +638C +0FFE +7FFE +6300 +E38C +7FFC +3CF8 +ENDCHAR +STARTCHAR ccedilla +ENCODING 231 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 13 1 -4 +BITMAP +3C +FE +E7 +C0 +C0 +C0 +E7 +FE +3C +10 +38 +08 +78 +ENDCHAR +STARTCHAR egrave +ENCODING 232 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +3800 +1800 +0000 +3E00 +7F00 +6380 +FF80 +FF80 +E000 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR eacute +ENCODING 233 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +0600 +0C00 +0000 +3E00 +7F00 +6380 +FF80 +FF80 +E000 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR ecircumflex +ENCODING 234 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 12 0 0 +BITMAP +1E00 +3600 +0000 +3E00 +7F00 +6380 +FF80 +FF80 +E000 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR edieresis +ENCODING 235 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 13 0 0 +BITMAP +3600 +3600 +0000 +0000 +3E00 +7F00 +6380 +FF80 +FF80 +E000 +6380 +7F00 +3E00 +ENDCHAR +STARTCHAR igrave +ENCODING 236 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 4 12 0 0 +BITMAP +C0 +60 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR iacute +ENCODING 237 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 4 12 1 0 +BITMAP +70 +60 +00 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR icircumflex +ENCODING 238 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 12 0 0 +BITMAP +70 +D8 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR idieresis +ENCODING 239 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 13 0 0 +BITMAP +D8 +D8 +00 +00 +70 +70 +70 +70 +70 +70 +70 +70 +70 +ENDCHAR +STARTCHAR eth +ENCODING 240 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +1A00 +3E00 +3E00 +2700 +3B00 +7F00 +E380 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR ntilde +ENCODING 241 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 0 +BITMAP +3A +7E +00 +00 +DE +FF +E3 +E3 +C3 +C3 +C3 +C3 +C3 +ENDCHAR +STARTCHAR ograve +ENCODING 242 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 12 1 0 +BITMAP +7000 +1800 +0000 +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR oacute +ENCODING 243 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 12 1 0 +BITMAP +0E00 +0800 +0000 +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR ocircumflex +ENCODING 244 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 12 1 0 +BITMAP +3C00 +2600 +0000 +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR otilde +ENCODING 245 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +3A00 +7E00 +0000 +0000 +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR odieresis +ENCODING 246 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 1 0 +BITMAP +7600 +7600 +0000 +0000 +3C00 +7F00 +E300 +C380 +C380 +C380 +E300 +7F00 +3C00 +ENDCHAR +STARTCHAR divide +ENCODING 247 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 10 1 -1 +BITMAP +18 +38 +18 +00 +FF +FF +00 +18 +38 +18 +ENDCHAR +STARTCHAR oslash +ENCODING 248 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 9 1 0 +BITMAP +3C80 +7F00 +E300 +C780 +CB80 +D380 +E300 +FF00 +BC00 +ENDCHAR +STARTCHAR ugrave +ENCODING 249 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 12 1 0 +BITMAP +70 +18 +00 +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +7B +ENDCHAR +STARTCHAR uacute +ENCODING 250 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 12 1 0 +BITMAP +0E +08 +00 +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +7B +ENDCHAR +STARTCHAR ucircumflex +ENCODING 251 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 12 1 0 +BITMAP +3C +26 +00 +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +7B +ENDCHAR +STARTCHAR udieresis +ENCODING 252 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 8 13 1 0 +BITMAP +76 +76 +00 +00 +E3 +E3 +E3 +E3 +E3 +E3 +E7 +FF +7B +ENDCHAR +STARTCHAR yacute +ENCODING 253 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 16 0 -4 +BITMAP +0600 +0C00 +0000 +E180 +6380 +7300 +7300 +3700 +3600 +3E00 +1E00 +1C00 +1C00 +1C00 +7800 +7800 +ENDCHAR +STARTCHAR thorn +ENCODING 254 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 17 1 -4 +BITMAP +C000 +C000 +C000 +C000 +DE00 +FF00 +E380 +C380 +C380 +C380 +E300 +FF00 +DE00 +C000 +C000 +C000 +C000 +ENDCHAR +STARTCHAR ydieresis +ENCODING 255 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 17 0 -4 +BITMAP +3600 +3600 +0000 +0000 +E180 +6380 +7300 +7300 +3700 +3600 +3E00 +1E00 +1C00 +1C00 +1C00 +7800 +7800 +ENDCHAR +STARTCHAR dotlessi +ENCODING 305 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 9 1 0 +BITMAP +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR Lslash +ENCODING 321 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 10 13 0 0 +BITMAP +7000 +7000 +7000 +7000 +7400 +7C00 +7000 +F000 +7000 +7000 +7000 +7FC0 +7FC0 +ENDCHAR +STARTCHAR lslash +ENCODING 322 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 5 13 0 0 +BITMAP +70 +70 +70 +70 +78 +78 +70 +F0 +F0 +70 +70 +70 +70 +ENDCHAR +STARTCHAR OE +ENCODING 338 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 15 13 1 0 +BITMAP +3FFE +7FFE +F1C0 +E1C0 +C1C0 +C1FE +C1FE +C1C0 +C1C0 +E1C0 +F3C0 +7FFE +1FFE +ENDCHAR +STARTCHAR oe +ENCODING 339 +SWIDTH 944 0 +DWIDTH 16 0 +BBX 15 9 1 0 +BITMAP +3CF0 +7FFC +E38C +C3FC +C3FE +C300 +E38C +7FFC +3CF8 +ENDCHAR +STARTCHAR Scaron +ENCODING 352 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +3600 +1C00 +0000 +3E00 +7F00 +E380 +C180 +E000 +FC00 +7F80 +0F80 +01C0 +C1C0 +E180 +7F80 +3E00 +ENDCHAR +STARTCHAR scaron +ENCODING 353 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 12 1 0 +BITMAP +6C +38 +00 +7C +FE +C7 +FC +7E +07 +C7 +FE +7C +ENDCHAR +STARTCHAR Ydieresis +ENCODING 376 +SWIDTH 667 0 +DWIDTH 11 0 +BBX 10 16 1 0 +BITMAP +3600 +3600 +0000 +C1C0 +E180 +6380 +7300 +3700 +3E00 +1E00 +1C00 +1C00 +1C00 +1C00 +1C00 +1C00 +ENDCHAR +STARTCHAR Zcaron +ENCODING 381 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 10 16 0 0 +BITMAP +1B00 +0E00 +0000 +7FC0 +7FC0 +03C0 +0380 +0700 +0E00 +0E00 +1C00 +3800 +7800 +7000 +FFC0 +FFC0 +ENDCHAR +STARTCHAR zcaron +ENCODING 382 +SWIDTH 500 0 +DWIDTH 9 0 +BBX 8 12 0 0 +BITMAP +36 +1C +00 +7F +7F +0F +0E +1C +38 +70 +FF +FF +ENDCHAR +STARTCHAR florin +ENCODING 402 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 17 0 -4 +BITMAP +0780 +0F80 +0C00 +0C00 +7F00 +7F00 +1C00 +1C00 +1800 +1800 +1800 +1800 +3800 +3800 +3000 +F000 +E000 +ENDCHAR +STARTCHAR circumflex +ENCODING 710 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 2 0 11 +BITMAP +70 +F8 +ENDCHAR +STARTCHAR caron +ENCODING 711 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 2 0 11 +BITMAP +C8 +78 +ENDCHAR +STARTCHAR breve +ENCODING 728 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 5 2 0 10 +BITMAP +C8 +78 +ENDCHAR +STARTCHAR dotaccent +ENCODING 729 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 2 2 2 11 +BITMAP +C0 +C0 +ENDCHAR +STARTCHAR ring +ENCODING 730 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 3 1 10 +BITMAP +60 +90 +60 +ENDCHAR +STARTCHAR ogonek +ENCODING 731 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 4 4 1 -4 +BITMAP +60 +C0 +C0 +70 +ENDCHAR +STARTCHAR tilde +ENCODING 732 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 6 2 0 11 +BITMAP +64 +B8 +ENDCHAR +STARTCHAR hungarumlaut +ENCODING 733 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 7 2 1 11 +BITMAP +EE +CC +ENDCHAR +STARTCHAR endash +ENCODING 8211 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 9 2 0 4 +BITMAP +FF80 +FF80 +ENDCHAR +STARTCHAR emdash +ENCODING 8212 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 17 2 0 4 +BITMAP +FFFF80 +FFFF80 +ENDCHAR +STARTCHAR quoteleft +ENCODING 8216 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 5 1 8 +BITMAP +60 +C0 +E0 +E0 +E0 +ENDCHAR +STARTCHAR quoteright +ENCODING 8217 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 5 1 8 +BITMAP +E0 +E0 +40 +40 +80 +ENDCHAR +STARTCHAR quotesinglbase +ENCODING 8218 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 3 4 1 -2 +BITMAP +E0 +E0 +40 +40 +ENDCHAR +STARTCHAR quotedblleft +ENCODING 8220 +SWIDTH 500 0 +DWIDTH 9 0 +BBX 6 5 1 8 +BITMAP +44 +88 +CC +CC +CC +ENDCHAR +STARTCHAR quotedblright +ENCODING 8221 +SWIDTH 500 0 +DWIDTH 9 0 +BBX 6 5 1 8 +BITMAP +CC +CC +44 +44 +88 +ENDCHAR +STARTCHAR quotedblbase +ENCODING 8222 +SWIDTH 500 0 +DWIDTH 9 0 +BBX 6 5 1 -3 +BITMAP +CC +CC +44 +C4 +08 +ENDCHAR +STARTCHAR dagger +ENCODING 8224 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 15 1 -2 +BITMAP +18 +18 +18 +18 +FF +FF +18 +18 +18 +18 +18 +18 +18 +18 +18 +ENDCHAR +STARTCHAR daggerdbl +ENCODING 8225 +SWIDTH 556 0 +DWIDTH 9 0 +BBX 8 16 1 -3 +BITMAP +18 +18 +18 +18 +FF +FF +18 +18 +18 +18 +FF +FF +18 +18 +18 +18 +ENDCHAR +STARTCHAR bullet +ENCODING 8226 +SWIDTH 350 0 +DWIDTH 6 0 +BBX 6 6 0 3 +BITMAP +78 +F8 +FC +FC +78 +30 +ENDCHAR +STARTCHAR ellipsis +ENCODING 8230 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 13 2 2 0 +BITMAP +C718 +C718 +ENDCHAR +STARTCHAR perthousand +ENCODING 8240 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 17 12 0 0 +BITMAP +708000 +F90000 +C90000 +CA0000 +FA0000 +340000 +0D8600 +0BCF80 +1E6980 +166980 +23EF80 +21C700 +ENDCHAR +STARTCHAR guilsinglleft +ENCODING 8249 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 3 6 1 1 +BITMAP +20 +60 +C0 +C0 +60 +20 +ENDCHAR +STARTCHAR guilsinglright +ENCODING 8250 +SWIDTH 333 0 +DWIDTH 6 0 +BBX 3 6 1 1 +BITMAP +C0 +E0 +20 +20 +E0 +C0 +ENDCHAR +STARTCHAR fraction +ENCODING 8260 +SWIDTH 167 0 +DWIDTH 3 0 +BBX 8 12 -3 0 +BITMAP +01 +03 +02 +06 +04 +08 +18 +10 +30 +20 +40 +C0 +ENDCHAR +STARTCHAR trademark +ENCODING 8482 +SWIDTH 1000 0 +DWIDTH 17 0 +BBX 15 7 1 6 +BITMAP +FDCE +31CE +31CE +31FE +31FE +31B6 +31B6 +ENDCHAR +STARTCHAR minus +ENCODING 8722 +SWIDTH 584 0 +DWIDTH 10 0 +BBX 8 2 1 3 +BITMAP +FF +FF +ENDCHAR +STARTCHAR fi +ENCODING 64257 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 0 0 +BITMAP +3980 +3980 +7000 +7000 +F980 +F980 +7180 +7180 +7180 +7180 +7180 +7180 +7180 +ENDCHAR +STARTCHAR fl +ENCODING 64258 +SWIDTH 611 0 +DWIDTH 10 0 +BBX 9 13 0 0 +BITMAP +3980 +3980 +7180 +7180 +F980 +F980 +7180 +7180 +7180 +7180 +7180 +7180 +7180 +ENDCHAR +STARTCHAR .notdef +ENCODING -1 +SWIDTH 278 0 +DWIDTH 5 0 +BBX 1 1 0 0 +BITMAP +00 +ENDCHAR +ENDFONT